On 3/6/18 3:10 AM, Stefano Brivio wrote: > Currently, administrative MTU changes on a given netdevice are > not reflected on route exceptions for MTU-less routes, with a > set PMTU value, for that device: > > # ip -6 route get 2001:db8::b > 2001:db8::b from :: dev vti_a proto kernel src 2001:db8::a metric 256 pref > medium > # ping6 -c 1 -q -s10000 2001:db8::b > /dev/null > # ip netns exec a ip -6 route get 2001:db8::b > 2001:db8::b from :: dev vti_a src 2001:db8::a metric 0 > cache expires 571sec mtu 4926 pref medium > # ip link set dev vti_a mtu 3000 > # ip -6 route get 2001:db8::b > 2001:db8::b from :: dev vti_a src 2001:db8::a metric 0 > cache expires 571sec mtu 4926 pref medium > # ip link set dev vti_a mtu 9000 > # ip -6 route get 2001:db8::b > 2001:db8::b from :: dev vti_a src 2001:db8::a metric 0 > cache expires 571sec mtu 4926 pref medium > > The first issue is that since commit fb56be83e43d ("net-ipv6: on > device mtu change do not add mtu to mtu-less routes") we don't > call rt6_exceptions_update_pmtu() from rt6_mtu_change_route(), > which handles administrative MTU changes, if the regular route > is MTU-less. > > However, PMTU exceptions should be always updated, as long as > RTAX_MTU is not locked. Keep the check for MTU-less main route, > as introduced by that commit, but, for exceptions, > call rt6_exceptions_update_pmtu() regardless of that check. > > Once that is fixed, one problem remains: MTU changes are not > reflected if the new MTU is higher than the previous one, > because rt6_exceptions_update_pmtu() doesn't allow that. We > should instead allow PMTU increase if the old PMTU matches the > local MTU, as that implies that the old MTU was the lowest in the > path, and PMTU discovery might lead to different results. > > The existing check in rt6_mtu_change_route() correctly took that > case into account (for regular routes only), so factor it out > and re-use it also in rt6_exceptions_update_pmtu(). > > While at it, fix comments style and grammar, and try to be a bit > more descriptive. > > Reported-by: Xiumei Mu <x...@redhat.com> > Fixes: fb56be83e43d ("net-ipv6: on device mtu change do not add mtu to > mtu-less routes") > Fixes: f5bbe7ee79c2 ("ipv6: prepare rt6_mtu_change() for exception table") > Signed-off-by: Stefano Brivio <sbri...@redhat.com> > ---
Acked-by: David Ahern <dsah...@gmail.com>