On 9/23/20 2:46 AM, Eric Dumazet wrote: >> diff --git a/include/net/ip.h b/include/net/ip.h >> index b09c48d862cc..c2188bebbc54 100644 >> --- a/include/net/ip.h >> +++ b/include/net/ip.h >> @@ -436,12 +436,17 @@ static inline unsigned int >> ip_dst_mtu_maybe_forward(const struct dst_entry *dst, >> bool forwarding) >> { >> struct net *net = dev_net(dst->dev); >> + unsigned int mtu; >> >> if (net->ipv4.sysctl_ip_fwd_use_pmtu || >> ip_mtu_locked(dst) || >> !forwarding) >> return dst_mtu(dst); >> >> + /* 'forwarding = true' case should always honour route mtu */ >> + mtu = dst_metric_raw(dst, RTAX_MTU); >> + if (mtu) return mtu; > > > if (mtu) > return mtu; > > Apparently route mtu are capped to 65520, not sure where it is done exactly > IP_MAX_MTU being 65535)
ip_metrics_convert seems to be the place" if (type == RTAX_MTU && val > 65535 - 15) val = 65535 - 15; going back through the code moves, and it was added by Dave with 710ab6c03122c > > # ip ro add 1.1.1.4 dev wlp2s0 mtu 100000 > # ip ro get 1.1.1.4 > 1.1.1.4 dev wlp2s0 src 192.168.8.147 uid 0 > cache mtu 65520 > > > > >> + >> return min(READ_ONCE(dst->dev->mtu), IP_MAX_MTU); >> } >> >>