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:
Paul Saab 2005-02-16 01:46:17 +00:00
parent aa4c3a8cd3
commit 7776346f83
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=141961
2 changed files with 10 additions and 8 deletions

View File

@ -1102,8 +1102,6 @@ tcp_input(m, off0)
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 @@ tcp_input(m, off0)
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 @@ tcp_input(m, off0)
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 @@ tcp_input(m, off0)
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