summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-03-02 23:10:21 +0000
committerGerrit Code Review <review@openstack.org>2017-03-02 23:10:21 +0000
commit7f38a291e1dfe906293391a52a9ff4bf9f91a020 (patch)
tree850b86741ac7c26a32c1a148cd6669801ac3ff54
parentda7899ffba277fe88131d16745fff450cbea4c39 (diff)
parent778b943d635f14fecf8bcf743423977cb4e3ca8c (diff)
downloadoslo-utils-7f38a291e1dfe906293391a52a9ff4bf9f91a020.tar.gz
Merge "Allow scoped ipv6 addresses"
-rw-r--r--oslo_utils/netutils.py11
-rw-r--r--oslo_utils/tests/test_netutils.py8
2 files changed, 18 insertions, 1 deletions
diff --git a/oslo_utils/netutils.py b/oslo_utils/netutils.py
index 2888823..9e808b6 100644
--- a/oslo_utils/netutils.py
+++ b/oslo_utils/netutils.py
@@ -107,8 +107,17 @@ def is_valid_ipv6(address):
.. versionadded:: 1.1
"""
+ if not address:
+ return False
+
+ parts = address.rsplit("%", 1)
+ address = parts[0]
+ scope = parts[1] if len(parts) > 1 else None
+ if scope is not None and (len(scope) < 1 or len(scope) > 15):
+ return False
+
try:
- return netaddr.valid_ipv6(address)
+ return netaddr.valid_ipv6(address, netaddr.core.INET_PTON)
except netaddr.AddrFormatError:
return False
diff --git a/oslo_utils/tests/test_netutils.py b/oslo_utils/tests/test_netutils.py
index 48ca163..bba7c54 100644
--- a/oslo_utils/tests/test_netutils.py
+++ b/oslo_utils/tests/test_netutils.py
@@ -163,6 +163,10 @@ class NetworkUtilsTest(test_base.BaseTestCase):
def test_is_valid_ipv6(self):
self.assertTrue(netutils.is_valid_ipv6('::1'))
+ self.assertTrue(netutils.is_valid_ipv6('fe80::1%eth0'))
+
+ self.assertFalse(netutils.is_valid_ip('fe%80::1%eth0'))
+
self.assertFalse(netutils.is_valid_ipv6(
'1fff::a88:85a3::172.31.128.1'))
@@ -173,12 +177,16 @@ class NetworkUtilsTest(test_base.BaseTestCase):
self.assertTrue(netutils.is_valid_ip('2001:db8::ff00:42:8329'))
+ self.assertTrue(netutils.is_valid_ip('fe80::1%eth0'))
+
self.assertFalse(netutils.is_valid_ip('256.0.0.0'))
self.assertFalse(netutils.is_valid_ip('::1.2.3.'))
self.assertFalse(netutils.is_valid_ip(''))
+ self.assertFalse(netutils.is_valid_ip(None))
+
def test_is_valid_mac(self):
self.assertTrue(netutils.is_valid_mac("52:54:00:cf:2d:31"))
self.assertTrue(netutils.is_valid_mac(u"52:54:00:cf:2d:31"))