Merge "ovs: set device MTU after it's moved into a namespace"
This commit is contained in:
@@ -343,6 +343,15 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
|
||||
|
||||
ns_dev.link.set_address(mac_address)
|
||||
|
||||
# Add an interface created by ovs to the namespace.
|
||||
if not self.conf.ovs_use_veth and namespace:
|
||||
namespace_obj = ip.ensure_namespace(namespace)
|
||||
namespace_obj.add_device_to_namespace(ns_dev)
|
||||
|
||||
# NOTE(ihrachys): the order here is significant: we must set MTU after
|
||||
# the device is moved into a namespace, otherwise OVS bridge does not
|
||||
# allow to set MTU that is higher than the least of all device MTUs on
|
||||
# the bridge
|
||||
mtu = self.conf.network_device_mtu or mtu
|
||||
if mtu:
|
||||
ns_dev.link.set_mtu(mtu)
|
||||
@@ -350,10 +359,6 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
|
||||
root_dev.link.set_mtu(mtu)
|
||||
else:
|
||||
LOG.warning(_LW("No MTU configured for port %s"), port_id)
|
||||
# Add an interface created by ovs to the namespace.
|
||||
if not self.conf.ovs_use_veth and namespace:
|
||||
namespace_obj = ip.ensure_namespace(namespace)
|
||||
namespace_obj.add_device_to_namespace(ns_dev)
|
||||
|
||||
ns_dev.link.set_up()
|
||||
if self.conf.ovs_use_veth:
|
||||
|
@@ -56,3 +56,39 @@ class OVSInterfaceDriverTestCase(base.BaseOVSLinuxTestCase):
|
||||
namespace=namespace)
|
||||
self.assertIn(device_name, bridge.get_port_name_list())
|
||||
self.assertTrue(ip_lib.device_exists(device_name, namespace))
|
||||
|
||||
def test_plug_with_namespace_sets_mtu_higher_than_bridge(self):
|
||||
device_mtu = 1450
|
||||
|
||||
# Create a new OVS bridge
|
||||
ovs_bridge = self.useFixture(net_helpers.OVSBridgeFixture()).bridge
|
||||
self.assertFalse(ovs_bridge.get_port_name_list())
|
||||
|
||||
# Add a new linuxbridge port with reduced MTU to OVS bridge
|
||||
lb_bridge = self.useFixture(
|
||||
net_helpers.LinuxBridgeFixture()).bridge
|
||||
lb_bridge_port = self.useFixture(
|
||||
net_helpers.LinuxBridgePortFixture(lb_bridge))
|
||||
lb_bridge_port.port.link.set_mtu(device_mtu - 1)
|
||||
ovs_bridge.add_port(lb_bridge_port.port.name)
|
||||
|
||||
# Now plug a device with intended MTU that is higher than for the port
|
||||
# above and validate that its MTU is not reduced to the least MTU on
|
||||
# the bridge
|
||||
device_name = tests_base.get_rand_name()
|
||||
mac_address = utils.get_random_mac('fa:16:3e:00:00:00'.split(':'))
|
||||
namespace = self.useFixture(net_helpers.NamespaceFixture()).name
|
||||
self.interface.plug(network_id=uuidutils.generate_uuid(),
|
||||
port_id=uuidutils.generate_uuid(),
|
||||
device_name=device_name,
|
||||
mac_address=mac_address,
|
||||
bridge=ovs_bridge.br_name,
|
||||
namespace=namespace,
|
||||
mtu=device_mtu)
|
||||
|
||||
self.assertIn(device_name, ovs_bridge.get_port_name_list())
|
||||
self.assertTrue(ip_lib.device_exists(device_name, namespace))
|
||||
self.assertEqual(
|
||||
device_mtu,
|
||||
ip_lib.IPDevice(device_name, namespace=namespace).link.mtu
|
||||
)
|
||||
|
Reference in New Issue
Block a user