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?
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to