net: tcp: Account for TCP options when using MSS
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 19 Jun 2017 18:22:46 +0000 (14:22 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 20 Jul 2017 12:19:46 +0000 (08:19 -0400)
commitac0d644280534fe7f2259e5808b58181ff4b0db0
treeaff23db372d6d7d874d7bab8ddd9839d20c92127
parent37594eec344a0af25ca59fb4bf84122d8dbf7c84
net: tcp: Account for TCP options when using MSS

The advertised MSS reflects the MTU of the host.  It is the largest packet
we'll send out, not including MAC, default IP, and default TCP headers.  If
we have extra TCP options, like the timestamps or SACKs, then those bytes
count against the advertised MSS.

We have a couple uses of the MSS.  The typical_mss is used for cwnd
calculations - it's the amount of data (not options) we expect to send.
The payload_mss is the actual amount we send for a given packet.  This may
vary since some options are only added to some packets for a given stream.

This wasn't a problem before since we only sent TCP opts on SYN or SYN/ACK
packets, which weren't close to the MSS.  We don't use this feature in this
commit, but we will shortly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/net/tcp.c