net: tcp: Don't increment snd.nxt
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Nov 2017 15:32:59 +0000 (10:32 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Nov 2017 15:46:54 +0000 (10:46 -0500)
commita405d5cab044a2755467e05710db3dc8b750ef98
treed9d51e22a8a5078e2e386d256a7fe730def73fff
parente5d32777b4b9e08aafe9f34178bb1363e1f7c581
net: tcp: Don't increment snd.nxt

Ever since commit 682b414ddb84 ("net: tcp: Support SACK"), we weren't
sending FINs when our connections were shutdown or closed.

For the sackless, normal case, that commit changed the from_seq from
snd.rtx to snd.nxt.  Those are supposed to be in sync for normal operation.
However, the old Plan 9 stack was incrementing snd.nxt whenever it wanted
to send a FIN.  It should *only* increment flgcnt, which is the weird
signal that means to send a FIN, since we end up trying to send one more
byte than we have bytes in the qio.  (And the extra byte is interpreted as
a FIN at some point).

Anyway, the old code, before the SACK overhaul, got away with it since it
was sending with from_seq being snd.rtx (the retrans point).  That's a
little messed up, but no one ever noticed since the old snd.rtx usually had
the value that snd.nxt *should* have had.

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