
So the prime driver behind pinning the MTU down on our interfaces is so traffic can cross mutlinode vxlan tunnels between nodes where the devstack plugin is executing to support more complex tests. But the reality is that doesn't always make sense, and when Neutron has a default mtu override based upon "upstream" traffic constraints, that is likey okay as well. Part of the CI configuration auto-pins the MTU down, which is fine for single node testing, however with multinode we need to pin the MTU further down to try and prevent packets from being dropped on the internal interfaces use to wire up test VMs. Change-Id: Idc145f4eea87a8db69202b8d7953975d7d5cba2c
36 lines
1.6 KiB
Plaintext
36 lines
1.6 KiB
Plaintext
enable_service ironic ir-api ir-cond
|
|
|
|
source $DEST/ironic/devstack/common_settings
|
|
|
|
# Set a default, so we can overwrite it if we need to.
|
|
PUBLIC_BRIDGE_MTU=${PUBLIC_BRIDGE_MTU:-1500}
|
|
|
|
# NOTE(vsaienko) mtu calculation has been changed recently to 1450
|
|
# https://github.com/openstack/neutron/commit/51a697
|
|
# and caused https://bugs.launchpad.net/ironic/+bug/1631875
|
|
# Get the smallest local MTU
|
|
local_mtu=$(ip link show | sed -ne 's/.*mtu \([0-9]\+\).*/\1/p' | sort -n | head -1)
|
|
|
|
# At some point, devstack started pre-populating a public bridge mtu,
|
|
# which is fine, but that also got set and used in neutron as the MTU,
|
|
# which is fine, but if our MTU is lower, then that can create headaches,
|
|
# unless we *need* it lower for specific multinode testing.
|
|
# so if the calculated local_mtu *is* higher, then we are wrong, and trust
|
|
# a prepopulated variable (1500-40-30=1430 bytes)
|
|
if [ $local_mtu -gt $PUBLIC_BRIDGE_MTU ]; then
|
|
local_mtu=$PUBLIC_BRIDGE_MTU
|
|
fi
|
|
|
|
# 50 bytes is overhead for vxlan (which is greater than GRE
|
|
# allowing us to use either overlay option with this MTU).
|
|
# However, if traffic is flowing over IPv6 tunnels, then
|
|
# The overhead is essentially another 78 bytes. In order to
|
|
# handle both cases, lets go ahead and drop the maximum by
|
|
# 78 bytes, while not going below 1280 to make IPv6 work at all.
|
|
if [[ "$HOST_TOPOLOGY" == "multinode" ]]; then
|
|
# This logic is to artificially pin down the PUBLIC_BRIDGE_MTU for
|
|
# when we are using mutlinode architecture, as to transfer the
|
|
# bytes over the multinode VXLAN tunnel, we need to drop the mtu.
|
|
PUBLIC_BRIDGE_MTU=${OVERRIDE_PUBLIC_BRIDGE_MTU:-$((local_mtu - 78))}
|
|
fi
|