diff options
| author | Michael Brown | 2013-09-04 18:37:34 +0200 |
|---|---|---|
| committer | Michael Brown | 2013-09-04 18:48:58 +0200 |
| commit | 8dd180f165eb8cd0a8475c0fd19bd6dbf17f95d8 (patch) | |
| tree | 5de3605c195c4bf5e4df00c14bf6ad0d3aaa23c0 /src/include | |
| parent | [ipv6] Fix uninitialised-variable warning (diff) | |
| download | ipxe-8dd180f165eb8cd0a8475c0fd19bd6dbf17f95d8.tar.gz ipxe-8dd180f165eb8cd0a8475c0fd19bd6dbf17f95d8.tar.xz ipxe-8dd180f165eb8cd0a8475c0fd19bd6dbf17f95d8.zip | |
[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>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/tcp.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/include/ipxe/tcp.h b/src/include/ipxe/tcp.h index 6b6691175..eb4b7b222 100644 --- a/src/include/ipxe/tcp.h +++ b/src/include/ipxe/tcp.h @@ -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 |
