Who's supposed to set the MTU on a nova instance's VIF's tap interface?
Asking here before filing a bug, in case I'm missing something.
OpenStack Ocata, ML2 with linuxbridge. global_physnet_mtu and path_mtu set to 9000. Create a VLAN network (it gets MTU 9000 by default). When I launch the first nova instance, the bridge gets created (by os_vif under nova-compute), then the libvirt domain is started, which creates the tap interface and adds it to the bridge. At this point, both the bridge and the tap interface have the default MTU of 1500. neutron-linuxbridge-agent then notices that the tap interface showed up, and does vif plugging, which results in the VLAN interface getting created, and added to the bridge. Because (in my case), the physical network device has MTU 9000, the VLAN interface inherits that. However, the bridge interface still has MTU 1500, because it assumes the lowest amongst its member ports (i.e. the tap interface). The VM them gets told by DHCP that its MTU is 9000, so when it tries to do anything involving large packets, they get dropped.
Just for interest: if I then delete the first instance, the tap interface goes away, so now the lowest MTU member of the bridge is the VLAN interface, so the bridge MTU goes up to 9000. If then create a new nova instance, its tap interface picks up the bridge's MTU of 9000, and it works.
This issue was previously addressed by https://bugs.launchpad.net/networking-cisco/+bug/1443607 (https://bugs.launchpad.net/networking...) but that was later reverted by https://bugs.launchpad.net/neutron/+bug/1605271 (https://bugs.launchpad.net/neutron/+b...) , which claims that "Now that we have proper MTU behaviour in interface drivers, this is not needed."... but that does not appear to be the case. If I "unrevert" the fix, it works (for the first VM, when the bridge doesn't yet exist) as I expect. The revert bug also notes that "This could have been achieved by setting network_device_mtu on Nova side", so it's not clear to me whose responsibility it should be to set the tap interface's MTU - nova-compute, or the neutron l2 agent??
Or am I missing something?