Enhancement: add constants for IPv4 and IPv6 subnet masks
オープン
まだ誰も着手していません。
- 主要言語
- Ruby
- スター
- 82
- フォーク
- 42
- 平均マージ
- 2時間 24分
- マージ済み PR(30日)
- 3
説明
Rationale: This SO question demonstrates there is at least some need to manipulate netmasks into CIDR integers. The accepted answer contains a bug which can be easily eliminated by hard coding the 2 sets of netmasks into the IPAddr class - see my alternative answer.
Proposed solution: Define IPAddr::IPV4_SUBNET_MASKS and IPAddr::IPV6_SUBNET_MASKS as follows:
class IPAddr
IPV4_SUBNET_MASKS = (0..32).map { |n| IPAddr.new("0.0.0.0/#{n}").netmask }
IPV6_SUBNET_MASKS = (0..128).map { |n| IPAddr.new("0::/#{n}").netmask }
end
# Now a user can do the following to get a subnet mask from a CIDR integer:
IPAddr::IPV4_SUBNET_MASKS[24]
# => "255.255.255.0"
IPAddr::IPV6_SUBNET_MASKS[64]
# => "ffff:ffff:ffff:ffff:0000:0000:0000:0000"
Optional: Add a predicate to check if an instance of IPAddr is a netmask:
class IPAddr
def netmask?
if ipv4?
IPV4_SUBNET_MASKS.include? to_s
else
IPV6_SUBNET_MASKS.include? to_s
end
end
end
ipaddr1 = IPAddr.new '255.254.255.0'
ipaddr1.netmask? # => false
ipaddr2 = IPAddr.new '255.255.255.0/24'
ipaddr2.netmask? # => true
ipaddr3 = IPAddr.new '255.255.255.0'
ipaddr3.netmask? # => true
# And so on for IPv6 addresses
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
IPAddr クラスから始め、既存の IPv4、IPv6、およびネットマスクの処理を調べます。提案されているサブネットマスク定数のテストカバレッジを追加し、オプションの述語を含める場合は、その IPv4 と IPv6 のケースも追加します。完了の条件は、CIDR インデックスが文書化されたマスクを返し、非連続マスクが拒否されることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- ruby
- 領域
- networking
- issue の種類
- 機能追加
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 64/100