Bug 1914388

Summary: VLAN Transparency: neutron network mtu should be 4 bytes lower for transparent-vlan networks
Product: Red Hat OpenStack Reporter: Eduardo Olivares <eolivare>
Component: documentationAssignee: James Smith <jamsmith>
Status: CLOSED DUPLICATE QA Contact: RHOS Documentation Team <rhos-docs>
Severity: high Docs Contact:
Priority: high    
Version: 16.1 (Train)CC: dcha, jamsmith, skaplons, sputhenp
Target Milestone: ---Keywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard: docs-accepted
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-02-17 19:21:03 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1846019    

Description Eduardo Olivares 2021-01-08 17:33:32 UTC
Description of problem:
When VLAN transparency is configured (only supported on OVN, see BZ1846019), tenant or provider networks can be created with is_vlan_transparent=true
In those cases, a VLAN can be manually created on VM instances. For example:
- vm1, whose port eth0 is connected to tenant network net1 - vlan10 is created on eth0 with IP 192.168.0.10
- vm2, whose port eth0 is connected to tenant network net1 - vlan10 is created on eth0 with IP 192.168.0.20

Connectivity between 192.168.0.10 and 192.168.0.20 should work fine.
However, there might be a problem with MTU due to the 4 bytes added by the vlan 10:
- neutron configured mtu is 1500:
[root@controller-1 ~]# crudini --get /var/lib/config-data/puppet-generated/neutron/etc/neutron/neutron.conf DEFAULT global_physnet_mtu                                                                                                       
1500
- in that case, neutron network mtu will 1500 too:
(overcloud) [stack@undercloud-0 ~]$ openstack network show db0f1ae2-2a58-4590-9f92-0beb741c1e2f -c mtu -f value
1500
- eth0 default MTU will be 1500 too

In this case, compute interface mtu should be configured to 1504 or higher in order to avoid packet drops. With a lower value, VLAN header with 4 bytes are added to packets with size 1500 and they are dropped on the compute node.

Comment 1 Sadique Puthen 2021-01-09 06:44:31 UTC
Isn't it better to advise to use 1496 (like we set for vxlan) as MTU for networks than requesting to set 1504 as the MTU for infrastructure?

Comment 2 Eduardo Olivares 2021-01-11 08:57:52 UTC
(In reply to Sadique Puthen from comment #1)
> Isn't it better to advise to use 1496 (like we set for vxlan) as MTU for
> networks than requesting to set 1504 as the MTU for infrastructure?

You are right. Thanks.

Let me add some more details about this bug:
- There is an upstream bug to modify default neutron network's mtu value when vlan transparency is enabled: https://bugs.launchpad.net/neutron/+bug/1906318
This change is not expected for 16.1.4 (when VLAN transparency support for OVN is expected, BZ1846019), so this documentation bug is needed.

- With OVN, the following default MTU values are used at network creation:
flat and vlan networks -> default_mtu = global_physnet_mtu (1500 in the example from the description)
geneve networks -> default_mtu = global_physnet_mtu - 58 (1442) -> the reason for this difference is the lenght of the geneve headers added to the packet
If vlan transparency is enabled and underlay network interfaces mtu is global_physnet_mtu (1500), some packets might be dropped. 

- Two alternative solutions that could be documented:
a. reduce network mtu in 4 bytes at network creation when vlan-transparency is enabled:
openstack network create --mtu 1438 --transparent-vlan n1
b. increase underlay network interfaces mtu:
[root@compute-0 ~]# ip link set dev ens4 mtu 1504