]> git.baikalelectronics.ru Git - kernel.git/commit
ppp_generic: fix multilink fragment MTU calculation (again)
authorHenry Wong <v4l@stuffedcow.net>
Sun, 18 Sep 2011 13:41:49 +0000 (13:41 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Sep 2011 19:20:58 +0000 (15:20 -0400)
commit15bdd5758264027bbe7274e3bc35b3bbb16e9d47
treeda0cf3a2682dbd6dd899fb932dc3cde686862b40
parent300c6d6e30b411c8b67f49e25c3873dc74f161fc
ppp_generic: fix multilink fragment MTU calculation (again)

When using MLPPP, the maximum size of a fragment is incorrectly
calculated with an offset of -2.
This patch reverses the changes in the patch found here:
http://marc.info/?l=linux-netdev&m=123541324010539&w=2

The value of hdrlen includes the size of both the 2-byte PPP protocol
field and the 2- or 4-byte multilink header (2+4=6 for long sequence
numbers, 2+2=4 for short sequence numbers). Section 2 of RFC1661 says
that the MRU that is negotiated (i.e., the MTU of the sending system)
includes only the PPP payload but not the protocol field, thus the
correct MTU should be the link's MTU minus the multilink header (mtu -
(hdrlen-2)).

The incorrect calculation causes Linux to fragment packets to a size two
bytes smaller than the allowed MTU. While not technically illegal, this
behaviour confounds MRU-tuning to avoid PPP-layer fragmentation.

Signed-off-by: Henry Wong <henry@stuffedcow.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ppp_generic.c