Skip to content
Snippets Groups Projects
Commit fa687f77 authored by Romain Tartière's avatar Romain Tartière
Browse files

Add IPv6 subnet validation

parent 81e192ec
Branches
No related tags found
No related merge requests found
......@@ -121,7 +121,7 @@ module IPAddress
# #=> false
#
def self.valid?(addr)
valid_ip?(addr) || valid_ipv4_subnet?(addr)
valid_ip?(addr) || valid_ipv4_subnet?(addr) || valid_ipv6_subnet?(addr)
end
#
......@@ -159,7 +159,31 @@ module IPAddress
valid_ipv4?(ip) && (!(netmask =~ /\A([12]?\d|3[0-2])\z/).nil? || valid_ipv4_netmask?(netmask))
end
#
# Checks if the given string is a valid IPv6 subnet
#
# Example:
#
# IPAdress::valid_ipv6_subnet? "::/0"
# #=> true
#
# IPAdress::valid_ipv6_subnet? "dead:beef:cafe:babe::/64"
# #=> true
#
# IPAdress::valid_ipv6_subnet? "2001::1/129"
# #=> false
#
def self.valid_ipv6_subnet?(addr)
ip, netmask = addr.split("/")
netmask = Integer(netmask, 10)
valid_ipv6?(ip) && netmask >= 0 && netmask <= 128
rescue ArgumentError
false
end
#
# Checks if the given string is a valid IPv4 address
#
......
......@@ -63,6 +63,10 @@ class IPAddressTest < Minitest::Test
assert_equal true, IPAddress::valid?("10.0.0.0/255.255.255.0")
assert_equal false, IPAddress::valid?("10.0.0.0/64")
assert_equal false, IPAddress::valid?("10.0.0.0/255.255.255.256")
assert_equal true, IPAddress::valid?("::/0")
assert_equal true, IPAddress::valid?("2002::1/128")
assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::/64")
assert_equal false, IPAddress::valid?("2002::1/129")
end
def test_module_method_valid_ip?
......@@ -94,6 +98,12 @@ class IPAddressTest < Minitest::Test
assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/255.255.255.256")
end
def test_module_method_valid_ipv6_subnet?
assert_equal true, IPAddress::valid_ipv6_subnet?("::/0")
assert_equal true, IPAddress::valid_ipv6_subnet?("2002::1/128")
assert_equal true, IPAddress::valid_ipv6_subnet?("dead:beef:cafe:babe::/64")
assert_equal false, IPAddress::valid_ipv6_subnet?("2002::1/129")
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment