Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Jan 2005 17:37:51 -0800
From:      Girish Rayas <grayas@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   Bug in TCP window update?
Message-ID:  <9c9fb1860501101737268508be@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
In tcp_input.c, window is updated when below condition is true,

if ((thflags & TH_ACK) &&
(SEQ_LT(tp->snd_wl1, th->th_seq) ||
(tp->snd_wl1 == th->th_seq && (SEQ_LT(tp->snd_wl2, th->th_ack) ||
(tp->snd_wl2 == th->th_ack && tiwin > tp->snd_wnd)))))

This check is to prevent old segments from affecting the send window.
But, left trim logic that was executed earlier in tcp_input.c sets the
th->th_seq to
tp->rcv_nxt for old segments. In many scenarios this effectively causes
snd_wl1 < th_seq and results in incorrect window update by old
segments.

Using actual sequence number of received segment in the above if
statement will fix the problem. Any comments?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9c9fb1860501101737268508be>