Fix for a SACK (receiver) bug where incorrect SACK blocks are

reported to the sender - in the case where the sender sends data
outside the window (as WinXP does :().

Reported by:	Sam Jensen <sam at wand dot net dot nz>
Submitted by:	Mohan Srinivasan
This commit is contained in:
ps 2005-02-16 01:46:17 +00:00
parent a4a07104a2
commit 050a349d74
2 changed files with 10 additions and 8 deletions

View File

@ -1102,8 +1102,6 @@ after_listen:
if (tp->sack_enable) {
/* Delete stale (cumulatively acked) SACK holes */
tcp_del_sackholes(tp, th);
tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
tp->rcv_lastend = th->th_seq + tlen;
}
/*
@ -2297,8 +2295,11 @@ dodata: /* XXX */
thflags = tcp_reass(tp, th, &tlen, m);
tp->t_flags |= TF_ACKNOW;
}
if (tp->sack_enable)
tcp_update_sack_list(tp);
if (tp->sack_enable) {
tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
tp->rcv_lastend = th->th_seq + tlen;
tcp_update_sack_list(tp);
}
/*
* Note the amount of data that peer has sent into
* our window, in order to estimate the sender's

View File

@ -1102,8 +1102,6 @@ after_listen:
if (tp->sack_enable) {
/* Delete stale (cumulatively acked) SACK holes */
tcp_del_sackholes(tp, th);
tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
tp->rcv_lastend = th->th_seq + tlen;
}
/*
@ -2297,8 +2295,11 @@ dodata: /* XXX */
thflags = tcp_reass(tp, th, &tlen, m);
tp->t_flags |= TF_ACKNOW;
}
if (tp->sack_enable)
tcp_update_sack_list(tp);
if (tp->sack_enable) {
tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
tp->rcv_lastend = th->th_seq + tlen;
tcp_update_sack_list(tp);
}
/*
* Note the amount of data that peer has sent into
* our window, in order to estimate the sender's