Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[tcp] Reduce path MTU to 1280 bytes
The path MTU is currently hardcoded to 1460 bytes, which fails to
allow space for TCP options.  Sending a maximum-sized datagram (which
is viable when using HTTP POST) will therefore fail since the Ethernet
MTU will be exceeded.

Reduce the hardcoded path MTU to produce a maximum datagram of 1280
bytes, which is the size required of data link layers by IPv6.  It is
a reasonable assumption that all intermediary data link layers will be
able to convey this packet without fragmentation, even for IPv4.

Note that this reduction has a minimal impact upon download
throughput, since it affects only the transmit data path.

Originally-fixed-by: Suresh Sundriyal <ssundriy@vmware.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Sep 4, 2013
1 parent 8aaa48b commit 8dd180f
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/include/ipxe/tcp.h
Expand Up @@ -316,10 +316,19 @@ struct tcp_options {
/**
* Path MTU
*
* We really ought to implement Path MTU discovery. Until we do,
* anything with a path MTU greater than this may fail.
* IPv6 requires all data link layers to support a datagram size of
* 1280 bytes. We choose to use this as our maximum transmitted
* datagram size, on the assumption that any practical link layer we
* encounter will allow this size. This is a very conservative
* assumption in practice, but the impact of making such a
* conservative assumption is insignificant since the amount of data
* that we transmit (rather than receive) is negligible.
*
* We allow space within this 1280 bytes for an IPv6 header, a TCP
* header, and a (padded) TCP timestamp option.
*/
#define TCP_PATH_MTU 1460
#define TCP_PATH_MTU \
( 1280 - 40 /* IPv6 */ - 20 /* TCP */ - 12 /* TCP timestamp */ )

/**
* Advertised TCP MSS
Expand Down

0 comments on commit 8dd180f

Please sign in to comment.