From d6f1fb67d2ee7b5d138ab952a1d6ae7673aeab77 Mon Sep 17 00:00:00 2001 From: rajeev Date: Fri, 6 Mar 2015 10:02:30 -0500 Subject: [PATCH] If configured, set the MTU for fpr/rfp intefaces if network_device_mtu parameter is configured, set the MTU for fpr and rfp interfaces to the value specified by the parameter at the time of creation of these interfaces. Enhanced DVR functional test to verify MTU gets set for the fpr/rfp interfaces. Co-Authored-By: Adolfo Duarte Closes-bug: #1429162 Change-Id: Ie41122d1f7306dfd3debbbb8dbf2ecabf716dcb8 --- neutron/agent/l3/dvr_fip_ns.py | 3 +++ .../tests/functional/agent/test_l3_agent.py | 19 ++++++++++++++++++- neutron/tests/unit/agent/test_dvr_fip_ns.py | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/neutron/agent/l3/dvr_fip_ns.py b/neutron/agent/l3/dvr_fip_ns.py index d7d11ddcf16..f727d3faf3d 100644 --- a/neutron/agent/l3/dvr_fip_ns.py +++ b/neutron/agent/l3/dvr_fip_ns.py @@ -199,6 +199,9 @@ class FipNamespace(namespaces.Namespace): self._internal_ns_interface_added(str(fip_2_rtr), fip_2_rtr_name, fip_ns_name) + if self.agent_conf.network_device_mtu: + int_dev[0].link.set_mtu(self.agent_conf.network_device_mtu) + int_dev[1].link.set_mtu(self.agent_conf.network_device_mtu) int_dev[0].link.set_up() int_dev[1].link.set_up() diff --git a/neutron/tests/functional/agent/test_l3_agent.py b/neutron/tests/functional/agent/test_l3_agent.py index 83d521e96bc..0d0f6f7cfd9 100644 --- a/neutron/tests/functional/agent/test_l3_agent.py +++ b/neutron/tests/functional/agent/test_l3_agent.py @@ -151,6 +151,10 @@ class L3AgentTestFramework(base.BaseOVSLinuxTestCase): name_getter(expected_device['id']), expected_device['ip_cidr'], expected_device['mac_address'], namespace) + def get_device_mtu(self, target_device, name_getter, namespace): + device = ip_lib.IPDevice(name_getter(target_device), namespace) + return device.link.mtu + def get_expected_keepalive_configuration(self, router): router_id = router.router_id ha_device_name = router.get_ha_device_name(router.ha_port['id']) @@ -656,7 +660,8 @@ class TestDvrRouter(L3AgentTestFramework): def test_dvr_router_lifecycle_without_ha_with_snat_with_fips(self): self._dvr_router_lifecycle(enable_ha=False, enable_snat=True) - def _dvr_router_lifecycle(self, enable_ha=False, enable_snat=False): + def _dvr_router_lifecycle(self, enable_ha=False, enable_snat=False, + custom_mtu=2000): '''Test dvr router lifecycle :param enable_ha: sets the ha value for the router. @@ -668,6 +673,7 @@ class TestDvrRouter(L3AgentTestFramework): # Since by definition this is a dvr (distributed = true) # only dvr and dvr_snat are applicable self.agent.conf.agent_mode = 'dvr_snat' if enable_snat else 'dvr' + self.agent.conf.network_device_mtu = custom_mtu # We get the router info particular to a dvr router router_info = self.generate_dvr_router_info( @@ -704,6 +710,7 @@ class TestDvrRouter(L3AgentTestFramework): self._assert_floating_ip_chains(router) self._assert_metadata_chains(router) self._assert_extra_routes(router) + self._assert_rfp_fpr_mtu(router, custom_mtu) self._delete_router(self.agent, router.router_id) self._assert_interfaces_deleted_from_ovs() @@ -889,3 +896,13 @@ class TestDvrRouter(L3AgentTestFramework): self._create_router(restarted_agent, router1.router) self._assert_dvr_snat_gateway(router1) self.assertFalse(self._namespace_exists(fip_ns)) + + def _assert_rfp_fpr_mtu(self, router, expected_mtu=1500): + dev_mtu = self.get_device_mtu( + router.router_id, router.fip_ns.get_rtr_ext_device_name, + router.ns_name) + self.assertEqual(expected_mtu, dev_mtu) + dev_mtu = self.get_device_mtu( + router.router_id, router.fip_ns.get_int_device_name, + router.fip_ns.get_name()) + self.assertEqual(expected_mtu, dev_mtu) diff --git a/neutron/tests/unit/agent/test_dvr_fip_ns.py b/neutron/tests/unit/agent/test_dvr_fip_ns.py index 51b951f4298..dcc97eefb8c 100644 --- a/neutron/tests/unit/agent/test_dvr_fip_ns.py +++ b/neutron/tests/unit/agent/test_dvr_fip_ns.py @@ -126,14 +126,19 @@ class TestDvrFipNs(base.BaseTestCase): pair = lla.LinkLocalAddressPair('169.254.31.28/31') allocator.allocate.return_value = pair device_exists.return_value = False + ip_wrapper = IPWrapper() + self.conf.network_device_mtu = 2000 + ip_wrapper.add_veth.return_value = (IPDevice(), IPDevice()) + self.fip_ns.create_rtr_2_fip_link(ri) - ip_wrapper = IPWrapper() ip_wrapper.add_veth.assert_called_with(rtr_2_fip_name, fip_2_rtr_name, fip_ns_name) device = IPDevice() + device.link.set_mtu.assert_called_with(2000) + self.assertEqual(device.link.set_mtu.call_count, 2) device.route.add_gateway.assert_called_once_with( '169.254.31.29', table=16)