[ruby/ipaddr] Added IPAddr#wildcard_mask

https://github.com/ruby/ipaddr/commit/2093cebc1d
This commit is contained in:
Taketo Takashima 2022-08-09 00:50:44 +09:00 committed by git
parent 13f04e5beb
commit f9f25d0ed0
2 changed files with 37 additions and 0 deletions

View File

@ -471,6 +471,20 @@ class IPAddr
_to_string(@mask_addr)
end
# Returns the wildcard mask in string format e.g. 0.0.255.255
def wildcard_mask
case @family
when Socket::AF_INET
mask = IN4MASK ^ @mask_addr
when Socket::AF_INET6
mask = IN6MASK ^ @mask_addr
else
raise AddressFamilyError, "unsupported address family"
end
_to_string(mask)
end
# Returns the IPv6 zone identifier, if present.
# Raises InvalidAddressError if not an IPv6 address.
def zone_id

View File

@ -263,6 +263,29 @@ class TC_IPAddr < Test::Unit::TestCase
assert_equal(a.netmask, "255.255.255.0")
end
def test_wildcard_mask
a = IPAddr.new("192.168.1.2/1")
assert_equal(a.wildcard_mask, "127.255.255.255")
a = IPAddr.new("192.168.1.2/8")
assert_equal(a.wildcard_mask, "0.255.255.255")
a = IPAddr.new("192.168.1.2/16")
assert_equal(a.wildcard_mask, "0.0.255.255")
a = IPAddr.new("192.168.1.2/24")
assert_equal(a.wildcard_mask, "0.0.0.255")
a = IPAddr.new("192.168.1.2/32")
assert_equal(a.wildcard_mask, "0.0.0.0")
a = IPAddr.new("3ffe:505:2::/48")
assert_equal(a.wildcard_mask, "0000:0000:0000:ffff:ffff:ffff:ffff:ffff")
a = IPAddr.new("3ffe:505:2::/128")
assert_equal(a.wildcard_mask, "0000:0000:0000:0000:0000:0000:0000:0000")
end
def test_zone_id
a = IPAddr.new("192.168.1.2")
assert_raise(IPAddr::InvalidAddressError) { a.zone_id = '%ab0' }