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)
|
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
|
mtu = self.conf.network_device_mtu or mtu
|
||||||
if mtu:
|
if mtu:
|
||||||
ns_dev.link.set_mtu(mtu)
|
ns_dev.link.set_mtu(mtu)
|
||||||
@@ -350,10 +359,6 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
|
|||||||
root_dev.link.set_mtu(mtu)
|
root_dev.link.set_mtu(mtu)
|
||||||
else:
|
else:
|
||||||
LOG.warning(_LW("No MTU configured for port %s"), port_id)
|
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()
|
ns_dev.link.set_up()
|
||||||
if self.conf.ovs_use_veth:
|
if self.conf.ovs_use_veth:
|
||||||
|
@@ -56,3 +56,39 @@ class OVSInterfaceDriverTestCase(base.BaseOVSLinuxTestCase):
|
|||||||
namespace=namespace)
|
namespace=namespace)
|
||||||
self.assertIn(device_name, bridge.get_port_name_list())
|
self.assertIn(device_name, bridge.get_port_name_list())
|
||||||
self.assertTrue(ip_lib.device_exists(device_name, namespace))
|
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