Fixes a bug in SACK causing us to send data beyond the receive window.

Found by: Pawel Worach and Daniel Hartmeier
Submitted by: Mohan Srinivasan mohans at yahoo-inc dot com
This commit is contained in:
Paul Saab 2004-11-29 18:47:27 +00:00
parent 0508c09a41
commit 7d5ed1ceea
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=138199

View File

@ -310,8 +310,10 @@ tcp_output(struct tcpcb *tp)
* sending new data, having retransmitted all the
* data possible in the scoreboard.
*/
len = so->so_snd.sb_cc - off;
cwin = sendwin - (tp->snd_nxt - tp->sack_newdata) -
len = ((long)ulmin(so->so_snd.sb_cc, tp->snd_wnd)
- off);
cwin = tp->snd_cwnd -
(tp->snd_nxt - tp->sack_newdata) -
sack_bytes_rxmt;
if (cwin < 0)
cwin = 0;