diff options
author | Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 2018-03-30 13:46:19 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-03-31 22:19:00 -0400 |
commit | 804b854d374e39f5f8bff9638fd274b9a9ca7d33 (patch) | |
tree | 3c81eed86eff79013e00169ac749661b7d6b4ca4 /net/bridge/br_device.c | |
parent | f40aa23339e2d06b1a8daaece5a511bb1c4f704c (diff) | |
download | linux-804b854d374e39f5f8bff9638fd274b9a9ca7d33.tar.gz |
net: bridge: disable bridge MTU auto tuning if it was set manually
As Roopa noted today the biggest source of problems when configuring
bridge and ports is that the bridge MTU keeps changing automatically on
port events (add/del/changemtu). That leads to inconsistent behaviour
and network config software needs to chase the MTU and fix it on each
such event. Let's improve on that situation and allow for the user to
set any MTU within ETH_MIN/MAX limits, but once manually configured it
is the user's responsibility to keep it correct afterwards.
In case the MTU isn't manually set - the behaviour reverts to the
previous and the bridge follows the minimum MTU.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_device.c')
-rw-r--r-- | net/bridge/br_device.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index edb9967eb165..e682a668ce57 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -225,11 +225,10 @@ static int br_change_mtu(struct net_device *dev, int new_mtu) { struct net_bridge *br = netdev_priv(dev); - if (new_mtu > br_mtu(br, br_vlan_enabled(dev))) - return -EINVAL; - dev->mtu = new_mtu; + /* this flag will be cleared if the MTU was automatically adjusted */ + br->mtu_set_by_user = true; #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) /* remember the MTU in the rtable for PMTU */ dst_metric_set(&br->fake_rtable.dst, RTAX_MTU, new_mtu); |