From: Kevin Benton Date: Mon, 31 Aug 2015 02:15:27 +0000 (-0700) Subject: Fix usage of netaddr '.broadcast' X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=6324f7f23d5debecf7201a371050e20527550a8c;p=openstack-build%2Fneutron-build.git Fix usage of netaddr '.broadcast' netaddr 0.7.16 changed the behavior of IPNetworks with /31 and /32 prefixes to make their 'broadcast' attribute return None. This patch replaces the use of the attribute with a -1 index lookup to get the last address instead. Closes-Bug: #1490380 Change-Id: I97d71c4051882ddd9e496c78cfbce840ad7a2b67 --- diff --git a/neutron/agent/l3/link_local_allocator.py b/neutron/agent/l3/link_local_allocator.py index af7bca083..f7fc84b56 100644 --- a/neutron/agent/l3/link_local_allocator.py +++ b/neutron/agent/l3/link_local_allocator.py @@ -23,8 +23,10 @@ class LinkLocalAddressPair(netaddr.IPNetwork): def get_pair(self): """Builds an address pair from the first and last addresses. """ + # TODO(kevinbenton): the callers of this seem only interested in an IP, + # so we should just return two IPAddresses. return (netaddr.IPNetwork("%s/%s" % (self.network, self.prefixlen)), - netaddr.IPNetwork("%s/%s" % (self.broadcast, self.prefixlen))) + netaddr.IPNetwork("%s/%s" % (self[-1], self.prefixlen))) class LinkLocalAllocator(ItemAllocator): diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index 7c4b4e37a..a9c6f025d 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -422,7 +422,7 @@ class IpAddrCommand(IpDeviceCommandBase): 'scope', scope, 'dev', self.name] if net.version == 4: - args += ['brd', str(net.broadcast)] + args += ['brd', str(net[-1])] self._as_root([net.version], tuple(args)) def delete(self, cidr): diff --git a/neutron/ipam/utils.py b/neutron/ipam/utils.py index 6a4d96e87..434cbcf55 100644 --- a/neutron/ipam/utils.py +++ b/neutron/ipam/utils.py @@ -23,7 +23,7 @@ def check_subnet_ip(cidr, ip_address): # Check that the IP is valid on subnet. This cannot be the # network or the broadcast address (which exists only in IPv4) return (ip != net.network - and (net.version == 6 or ip != net.broadcast) + and (net.version == 6 or ip != net[-1]) and net.netmask & ip == net.network) diff --git a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py index f370b5f9c..dbbc4d39f 100644 --- a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py +++ b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py @@ -143,8 +143,7 @@ class LinuxBridgeManager(object): try: # Ensure the configured group address/range is valid and multicast net = netaddr.IPNetwork(cfg.CONF.VXLAN.vxlan_group) - if not (net.network.is_multicast() and - net.broadcast.is_multicast()): + if not net.is_multicast(): raise ValueError() # Map the segmentation ID to (one of) the group address(es) return str(net.network + diff --git a/neutron/tests/common/net_helpers.py b/neutron/tests/common/net_helpers.py index 577318146..a79c1ff20 100644 --- a/neutron/tests/common/net_helpers.py +++ b/neutron/tests/common/net_helpers.py @@ -69,7 +69,7 @@ def increment_ip_cidr(ip_cidr, offset=1): net0 = netaddr.IPNetwork(ip_cidr) net = netaddr.IPNetwork(ip_cidr) net.value += offset - if not net0.network < net.ip < net0.broadcast: + if not net0.network < net.ip < net0[-1]: tools.fail( 'Incorrect ip_cidr,offset tuple (%s,%s): "incremented" ip_cidr is ' 'outside ip_cidr' % (ip_cidr, offset))