diff --git a/neutron/agent/l3/dvr_edge_router.py b/neutron/agent/l3/dvr_edge_router.py index c4416d7d873..11f31bc5372 100644 --- a/neutron/agent/l3/dvr_edge_router.py +++ b/neutron/agent/l3/dvr_edge_router.py @@ -251,7 +251,8 @@ class DvrEdgeRouter(dvr_local_router.DvrLocalRouter): return ns_ip = ip_lib.IPWrapper(namespace=self.snat_namespace.name) - for d in ns_ip.get_devices(exclude_loopback=True): + for d in ns_ip.get_devices(exclude_loopback=True, + exclude_gre_devices=True): if (d.name.startswith(router.EXTERNAL_DEV_PREFIX) and d.name != interface_name): LOG.debug('Deleting stale external router device: %s', d.name) diff --git a/neutron/agent/l3/dvr_fip_ns.py b/neutron/agent/l3/dvr_fip_ns.py index 9bae5c6057f..8d22b0255b4 100644 --- a/neutron/agent/l3/dvr_fip_ns.py +++ b/neutron/agent/l3/dvr_fip_ns.py @@ -207,7 +207,8 @@ class FipNamespace(namespaces.Namespace): @namespaces.check_ns_existence def _delete(self): ip_wrapper = ip_lib.IPWrapper(namespace=self.name) - for d in ip_wrapper.get_devices(exclude_loopback=True): + for d in ip_wrapper.get_devices(exclude_loopback=True, + exclude_gre_devices=True): if d.name.startswith(FIP_2_ROUTER_DEV_PREFIX): # internal link between IRs and FIP NS ip_wrapper.del_veth(d.name) diff --git a/neutron/agent/l3/dvr_snat_ns.py b/neutron/agent/l3/dvr_snat_ns.py index f22e717b0c0..085dc5cbc47 100644 --- a/neutron/agent/l3/dvr_snat_ns.py +++ b/neutron/agent/l3/dvr_snat_ns.py @@ -41,7 +41,8 @@ class SnatNamespace(namespaces.Namespace): @namespaces.check_ns_existence def delete(self): ns_ip = ip_lib.IPWrapper(namespace=self.name) - for d in ns_ip.get_devices(exclude_loopback=True): + for d in ns_ip.get_devices(exclude_loopback=True, + exclude_gre_devices=True): if d.name.startswith(constants.SNAT_INT_DEV_PREFIX): LOG.debug('Unplugging DVR device %s', d.name) self.driver.unplug(d.name, namespace=self.name, diff --git a/neutron/agent/l3/namespaces.py b/neutron/agent/l3/namespaces.py index e70d7bbc500..f65c706c7b4 100644 --- a/neutron/agent/l3/namespaces.py +++ b/neutron/agent/l3/namespaces.py @@ -123,7 +123,8 @@ class RouterNamespace(Namespace): @check_ns_existence def delete(self): ns_ip = ip_lib.IPWrapper(namespace=self.name) - for d in ns_ip.get_devices(exclude_loopback=True): + for d in ns_ip.get_devices(exclude_loopback=True, + exclude_gre_devices=True): if d.name.startswith(INTERNAL_DEV_PREFIX): # device is on default bridge self.driver.unplug(d.name, namespace=self.name, diff --git a/neutron/agent/l3/router_info.py b/neutron/agent/l3/router_info.py index 3cf77a0e9ef..121aa5c7042 100644 --- a/neutron/agent/l3/router_info.py +++ b/neutron/agent/l3/router_info.py @@ -465,7 +465,8 @@ class RouterInfo(object): def _get_existing_devices(self): ip_wrapper = ip_lib.IPWrapper(namespace=self.ns_name) - ip_devs = ip_wrapper.get_devices(exclude_loopback=True) + ip_devs = ip_wrapper.get_devices(exclude_loopback=True, + exclude_gre_devices=True) return [ip_dev.name for ip_dev in ip_devs] @staticmethod diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 52b4bd3627f..8d4d90a3593 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -1337,7 +1337,8 @@ class DeviceManager(object): ns_ip = ip_lib.IPWrapper(namespace=network.namespace) if not ns_ip.netns.exists(network.namespace): return - for d in ns_ip.get_devices(exclude_loopback=True): + for d in ns_ip.get_devices(exclude_loopback=True, + exclude_gre_devices=True): # delete all devices except current active DHCP port device if d.name != skip_dev_name: LOG.debug("Found stale device %s, deleting", d.name) diff --git a/neutron/cmd/netns_cleanup.py b/neutron/cmd/netns_cleanup.py index 1dd391cbd47..dbf1388cbc6 100644 --- a/neutron/cmd/netns_cleanup.py +++ b/neutron/cmd/netns_cleanup.py @@ -248,7 +248,8 @@ def destroy_namespace(conf, namespace, force=False): # the error and continue with the cleanup LOG.error(_LE('Not all processes were killed in %s'), namespace) - for device in ip.get_devices(exclude_loopback=True): + for device in ip.get_devices(exclude_loopback=True, + exclude_gre_devices=True): unplug_device(conf, device) ip.garbage_collect_namespace() diff --git a/neutron/tests/unit/cmd/test_netns_cleanup.py b/neutron/tests/unit/cmd/test_netns_cleanup.py index 56af8ea9125..cbf030d677b 100644 --- a/neutron/tests/unit/cmd/test_netns_cleanup.py +++ b/neutron/tests/unit/cmd/test_netns_cleanup.py @@ -336,7 +336,8 @@ class TestNetnsCleanup(base.BaseTestCase): expected.extend([ mock.call().netns.exists(ns), mock.call().get_devices( - exclude_loopback=True)]) + exclude_loopback=True, + exclude_gre_devices=True)]) self.assertTrue(kill_dhcp.called) unplug.assert_has_calls( [mock.call(conf, d) for d in