diff options
| author | Jayanth Vijayaraghavan <jayanth@FreeBSD.org> | 2004-07-01 23:34:06 +0000 |
|---|---|---|
| committer | Jayanth Vijayaraghavan <jayanth@FreeBSD.org> | 2004-07-01 23:34:06 +0000 |
| commit | a0445c2e2ca2615b5d2f5a43c4b694d3ac7bf297 (patch) | |
| tree | 8b7987e999d9e82d18517e3f3328293db657f082 /sys/netinet/tcp_input.c | |
| parent | 6ff8a07467dc5732d43402777d9f253c353563ed (diff) | |
Notes
Diffstat (limited to 'sys/netinet/tcp_input.c')
| -rw-r--r-- | sys/netinet/tcp_input.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index ee6d3cec1f10..78b1fadcfba7 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1931,12 +1931,25 @@ trimthenstep6: } else if (tp->t_dupacks == tcprexmtthresh) { tcp_seq onxt = tp->snd_nxt; u_int win; - if ((tcp_do_newreno || - tp->sack_enable) && - SEQ_LEQ(th->th_ack, - tp->snd_recover)) { - tp->t_dupacks = 0; - break; + + /* + * If we're doing sack, check to + * see if we're already in sack + * recovery. If we're not doing sack, + * check to see if we're in newreno + * recovery. + */ + if (tp->sack_enable) { + if (IN_FASTRECOVERY(tp)) { + tp->t_dupacks = 0; + break; + } + } else if (tcp_do_newreno) { + if (SEQ_LEQ(th->th_ack, + tp->snd_recover)) { + tp->t_dupacks = 0; + break; + } } win = min(tp->snd_wnd, tp->snd_cwnd) / 2 / tp->t_maxseg; @@ -1953,7 +1966,7 @@ trimthenstep6: tp->t_maxseg * tp->t_dupacks; (void) tcp_output(tp); - tp->snd_cwnd = + tp->snd_cwnd += tp->snd_ssthresh; goto drop; } |
