Stephen Hemminger <stephen@xxxxxxxxxxxxxxxxxx> writes: > On Wed, 10 Apr 2019 02:32:08 +0000 > Huang Rui <huangruippp@xxxxxxxxx> wrote: > >> For example. >> My purpose is to create a bridge br0 and join eth0 into br0. >> if we use this following way, the auto-tuning flag will not be disabled. >> >> If eth0's mtu is 1200 >> step 1.brctl addbr br0 >> step 2.brctl addif br0 eth0 >> step 3.ifconfig br0 mtu 1200 >> step 4.ifconfig eth0 mtu 1500 >> >> Result: >> br0's MTU: 1500, eth0's MTU: 1500 >> >> Expected: >> br0's MTU: 1200, eth0's MTU: 1500 >> >> I have specified br0's MTU, but auto-min policy works. So the MTU is >> not the result what we expected. >> As expected, if i have specified bridge's MTU, it will set the flag: >> BROPT_MTU_SET_BY_USER in net_bridge_opts disabled and auto-min/max >> policy will not work.But in this case, because the dev_set_mtu return >> early, the BROPT_MTU_SET_BY_USER flag will not be disabled and >> auto-min/max policy will still work. >> >> Signed-off-by: Huang Rui <huangruiPPP@xxxxxxxxx> > > A bridge like this going to drop frames. > A frame received with MTU of 1200 will get dropped. That's true even if above you set br0's MTU to 1201, but then the auto-tuning is disabled as expected. The problem is that setting MTU to 1200 is perceived as a non-change, whereas it should instead be perceived as a signal that the user takes over the MTU management. > The proper way to do this is to change MTU of both interfaces to match.