diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index 820ed8aa0db..0d4b47a0ce7 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -1422,6 +1422,9 @@ def get_devices_with_ip(namespace, name=None, **kwargs): link_args = {} if name: link_args['ifname'] = name + scope = kwargs.pop('scope', None) + if scope: + kwargs['scope'] = IP_ADDRESS_SCOPE_NAME[scope] devices = privileged.get_link_devices(namespace, **link_args) retval = [] for parsed_ips in (_parse_link_device(namespace, device, **kwargs) diff --git a/neutron/tests/functional/agent/linux/test_interface.py b/neutron/tests/functional/agent/linux/test_interface.py index 8121e238e48..d6b5dd26d75 100644 --- a/neutron/tests/functional/agent/linux/test_interface.py +++ b/neutron/tests/functional/agent/linux/test_interface.py @@ -69,6 +69,22 @@ class InterfaceDriverTestCaseMixin(object): self.interface.set_mtu, device_name=device_name, namespace=namespace)) + def test_ipv6_lla_create_and_get(self): + lla_address = "fe80::f816:3eff:fe66:73bf/64" + global_address = "2001::1/64" + device_name = utils.get_rand_name() + namespace = self.useFixture(net_helpers.NamespaceFixture()) + namespace.ip_wrapper.add_dummy(device_name) + self.interface.add_ipv6_addr( + device_name, lla_address, namespace.name, 'link') + self.interface.add_ipv6_addr( + device_name, global_address, namespace.name, 'global') + existing_addresses = [ + a['cidr'] for a in self.interface.get_ipv6_llas( + device_name, namespace.name)] + self.assertIn(lla_address, existing_addresses) + self.assertNotIn(global_address, existing_addresses) + class OVSInterfaceDriverTestCase(linux_base.BaseOVSLinuxTestCase, InterfaceDriverTestCaseMixin):