iPXE - Open Source Boot Firmware

[tcp] Use a dedicated timer for the TIME_WAIT state
authorMichael Brown <mcb30@ipxe.org>
Thu, 15 Jul 2010 17:57:34 +0000 (18:57 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 15 Jul 2010 18:59:34 +0000 (19:59 +0100)
commitc57e26381c744d4030d6490f6b46afbc765155dd
treefcc540794464b9433ff1c978c1c433f2337175e5
parent770317a57d89bc5aaeadf8dc72439b9fd0c6c260
[tcp] Use a dedicated timer for the TIME_WAIT state

iPXE currently repurposes the retransmission timer to hold the TCP
connection in the TIME_WAIT state (i.e. waiting for up to 2*MSL in
case we are required to re-ACK our peer's FIN due to a lost ACK).
However, the fact that this timer is running will prevent such an ACK
from ever being sent, since the logic in tcp_xmit() assumes that a
running timer indicates that we ourselves are waiting for an ACK and
so blocks the transmission.  (We always wait for an ACK before sending
our next packet, to keep our transmit data path as simple as
possible.)

Fix by using an entirely separate timer for the TIME_WAIT state, so
that packets can still be sent.

Reported-by: Piotr JaroszyƄski <p.jaroszynski@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/tcp.c