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>