From 26ef84f51ec34c20f43b3b75da3d0aa407fc3305 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Tue, 14 Apr 2015 17:37:55 -0400 Subject: [PATCH] Add IP version support to all ip_lib code Added an ip_version argument to IpNeighCommand.show() and IpRouteCommand.pullup_route() to match other code in the file. Change-Id: Ifdf2abc5a77f551223bad061a1abdc88695fa5f1 --- neutron/agent/linux/dhcp.py | 3 ++- neutron/agent/linux/ip_lib.py | 22 ++++++++++--------- .../tests/functional/agent/test_l3_agent.py | 3 ++- neutron/tests/unit/agent/linux/test_ip_lib.py | 10 ++++----- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index f594b775c0f..b9af4e337af 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -958,7 +958,8 @@ class DeviceManager(object): # ensure that the dhcp interface is first in the list if network.namespace is None: device = ip_lib.IPDevice(interface_name) - device.route.pullup_route(interface_name) + device.route.pullup_route(interface_name, + ip_version=constants.IP_VERSION_4) if self.conf.use_namespaces: self._set_default_route(network, interface_name) diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index baf61b90e1b..943fd543cb3 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -469,12 +469,13 @@ class IpRouteCommand(IpDeviceCommandBase): return retval - def pullup_route(self, interface_name): + def pullup_route(self, interface_name, ip_version): """Ensures that the route entry for the interface is before all others on the same subnet. """ + options = [ip_version] device_list = [] - device_route_list_lines = self._run([], + device_route_list_lines = self._run(options, ('list', 'proto', 'kernel', 'dev', interface_name) @@ -484,7 +485,7 @@ class IpRouteCommand(IpDeviceCommandBase): subnet = device_route_line.split()[0] except Exception: continue - subnet_route_list_lines = self._run([], + subnet_route_list_lines = self._run(options, ('list', 'proto', 'kernel', 'match', subnet) @@ -506,15 +507,15 @@ class IpRouteCommand(IpDeviceCommandBase): break for (device, src) in device_list: - self._as_root([], ('del', subnet, 'dev', device)) + self._as_root(options, ('del', subnet, 'dev', device)) if (src != ''): - self._as_root([], + self._as_root(options, ('append', subnet, 'proto', 'kernel', 'src', src, 'dev', device)) else: - self._as_root([], + self._as_root(options, ('append', subnet, 'proto', 'kernel', 'dev', device)) @@ -552,10 +553,11 @@ class IpNeighCommand(IpDeviceCommandBase): 'lladdr', mac_address, 'dev', self.name)) - def show(self): - return self._as_root([], - ('show', - 'dev', self.name)) + def show(self, ip_version): + options = [ip_version] + return self._as_root(options, + ('show', + 'dev', self.name)) class IpNetnsCommand(IpCommandBase): diff --git a/neutron/tests/functional/agent/test_l3_agent.py b/neutron/tests/functional/agent/test_l3_agent.py index 7b39722e914..2c990747129 100644 --- a/neutron/tests/functional/agent/test_l3_agent.py +++ b/neutron/tests/functional/agent/test_l3_agent.py @@ -1236,7 +1236,8 @@ class TestDvrRouter(L3AgentTestFramework): internal_device = router1.get_internal_device_name( router_info['_interfaces'][0]['id']) neighbors = ip_lib.IPDevice(internal_device, router1.ns_name).neigh - self.assertEqual(expected_neighbor, neighbors.show().split()[0]) + self.assertEqual(expected_neighbor, + neighbors.show(ip_version=4).split()[0]) def _assert_rfp_fpr_mtu(self, router, expected_mtu=1500): dev_mtu = self.get_device_mtu( diff --git a/neutron/tests/unit/agent/linux/test_ip_lib.py b/neutron/tests/unit/agent/linux/test_ip_lib.py index 80202ac8330..54d703e6eac 100644 --- a/neutron/tests/unit/agent/linux/test_ip_lib.py +++ b/neutron/tests/unit/agent/linux/test_ip_lib.py @@ -788,10 +788,10 @@ class TestIpRouteCommand(TestIPCmdBase): return result self.parent._run = mock.Mock(side_effect=pullup_side_effect) - self.route_cmd.pullup_route('tap1d7888a7-10') - self._assert_sudo([], ('del', '10.0.0.0/24', 'dev', 'qr-23380d11-d2')) - self._assert_sudo([], ('append', '10.0.0.0/24', 'proto', 'kernel', - 'src', '10.0.0.1', 'dev', 'qr-23380d11-d2')) + self.route_cmd.pullup_route('tap1d7888a7-10', ip_version=4) + self._assert_sudo([4], ('del', '10.0.0.0/24', 'dev', 'qr-23380d11-d2')) + self._assert_sudo([4], ('append', '10.0.0.0/24', 'proto', 'kernel', + 'src', '10.0.0.1', 'dev', 'qr-23380d11-d2')) def test_pullup_route_first(self): # NOTE(brian-haley) Currently we do not have any IPv6-specific usecase @@ -806,7 +806,7 @@ class TestIpRouteCommand(TestIPCmdBase): return result self.parent._run = mock.Mock(side_effect=pullup_side_effect) - self.route_cmd.pullup_route('tap1d7888a7-10') + self.route_cmd.pullup_route('tap1d7888a7-10', ip_version=4) # Check two calls - device get and subnet get self.assertEqual(len(self.parent._run.mock_calls), 2)