]> git.baikalelectronics.ru Git - kernel.git/commit
ipv4: lock mtu in fnhe when received PMTU < net.ipv4.route.min_pmtu
authorSabrina Dubroca <sd@queasysnail.net>
Wed, 14 Mar 2018 09:21:14 +0000 (10:21 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 14 Mar 2018 17:37:36 +0000 (13:37 -0400)
commitb2efaec26162d78ba780ec093912b348d42660a6
tree27f31c7dc279232da5b67a307e8a2fde449ac098
parent7ca3a9d002eb70d64f14ddf0cdeaa0feab549688
ipv4: lock mtu in fnhe when received PMTU < net.ipv4.route.min_pmtu

Prior to the rework of PMTU information storage in commit
4c4d000e0eff ("ipv4: Cache learned PMTU information in inetpeer."),
when a PMTU event advertising a PMTU smaller than
net.ipv4.route.min_pmtu was received, we would disable setting the DF
flag on packets by locking the MTU metric, and set the PMTU to
net.ipv4.route.min_pmtu.

Since then, we don't disable DF, and set PMTU to
net.ipv4.route.min_pmtu, so the intermediate router that has this link
with a small MTU will have to drop the packets.

This patch reestablishes pre-2.6.39 behavior by splitting
rtable->rt_pmtu into a bitfield with rt_mtu_locked and rt_pmtu.
rt_mtu_locked indicates that we shouldn't set the DF bit on that path,
and is checked in ip_dont_fragment().

One possible workaround is to set net.ipv4.route.min_pmtu to a value low
enough to accommodate the lowest MTU encountered.

Fixes: 4c4d000e0eff ("ipv4: Cache learned PMTU information in inetpeer.")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip.h
include/net/ip_fib.h
include/net/route.h
net/ipv4/route.c
net/ipv4/xfrm4_policy.c