]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Support uncompressed ipv6 address and abbreviated ipv4 address
authorzhhuabj <zhhuabj@cn.ibm.com>
Thu, 17 Oct 2013 14:58:48 +0000 (22:58 +0800)
committerzhhuabj <zhhuabj@cn.ibm.com>
Wed, 23 Oct 2013 01:28:52 +0000 (09:28 +0800)
Now neutron supports zero-compressed ipv6 address like
'2001:db8::10:10:10:0/120' and unabbreviated ipv4 address
like '10.0.0.0/24'.
This path will make neutron also support uncompressed ipv6
address and abbreviated ipv4 address. for example:
1, uncompressed ipv6 address like 'fe80:0:0:0:0:0:0:0/128'
2, ipv6 address with multiple consecutive zero like
   '2001:0db8:0:0:1::1/128' or '2001::0:1:0:0:1100/120'
3, abbreviated ipv4 address like '10/24'

Change-Id: I755e38ea11c139e15488ec60e7d5682a244ab114
Closes-Bug: #1240790

neutron/api/v2/attributes.py
neutron/tests/unit/test_attributes.py
neutron/tests/unit/test_extension_firewall.py

index d6842f21cbe8b460c9755bc64e05e11446b384b3..512255f0ca742e7ed18f673073b87391ba425320 100644 (file)
@@ -267,11 +267,10 @@ def _validate_subnet(data, valid_values=None):
     msg = None
     try:
         net = netaddr.IPNetwork(_validate_no_whitespace(data))
-        cidr = str(net.cidr)
-        if (cidr != data):
+        if ('/' not in data or net.network != net.ip):
             msg = _("'%(data)s' isn't a recognized IP subnet cidr,"
                     " '%(cidr)s' is recommended") % {"data": data,
-                                                     "cidr": cidr}
+                                                     "cidr": net.cidr}
         else:
             return
     except Exception:
index a763b54d17c71ea13ca663dcebeda53a138f2f74..800c1f18c9fed542557cdaf472c6f2d65fb0d2b6 100644 (file)
@@ -397,6 +397,36 @@ class TestAttributes(base.BaseTestCase):
                                           None)
         self.assertIsNone(msg)
 
+        # Valid - uncompressed ipv6 address
+        cidr = "fe80:0:0:0:0:0:0:0/128"
+        msg = attributes._validate_subnet(cidr,
+                                          None)
+        self.assertIsNone(msg)
+
+        # Valid - ipv6 address with multiple consecutive zero
+        cidr = "2001:0db8:0:0:1::1/128"
+        msg = attributes._validate_subnet(cidr,
+                                          None)
+        self.assertIsNone(msg)
+
+        # Valid - ipv6 address with multiple consecutive zero
+        cidr = "2001:0db8::1:0:0:1/128"
+        msg = attributes._validate_subnet(cidr,
+                                          None)
+        self.assertIsNone(msg)
+
+        # Valid - ipv6 address with multiple consecutive zero
+        cidr = "2001::0:1:0:0:1100/120"
+        msg = attributes._validate_subnet(cidr,
+                                          None)
+        self.assertIsNone(msg)
+
+        # Valid - abbreviated ipv4 address
+        cidr = "10/24"
+        msg = attributes._validate_subnet(cidr,
+                                          None)
+        self.assertIsNone(msg)
+
         # Invalid - IPv4 missing mask
         cidr = "10.0.2.0"
         msg = attributes._validate_subnet(cidr,
index 7550a706fe5ca6ea153c101438bd8d7411719842..486f20f03b8e31aba0e7d3f9bdee39e91c0da2b6 100644 (file)
@@ -531,10 +531,7 @@ class TestFirewallAttributeValidators(base.BaseTestCase):
         # Valid - IPv6 with final octets
         cidr = "fe80::0/24"
         msg = firewall._validate_ip_or_subnet_or_none(cidr, None)
-        self.assertEqual(msg, ("'%s' is not a valid IP address and "
-                               "'%s' isn't a recognized IP subnet cidr,"
-                               " 'fe80::/24' is recommended") % (cidr,
-                                                                 cidr))
+        self.assertIsNone(msg)
 
         cidr = "fe80::"
         msg = firewall._validate_ip_or_subnet_or_none(cidr, None)