diff options
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/tcp_input.c | 7 | ||||
-rw-r--r-- | sys/netinet/tcp_reass.c | 7 |
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 151e083..2b4c564 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1917,6 +1917,7 @@ trimthenstep6: u_long oldcwnd = tp->snd_cwnd; tcp_seq oldsndmax = tp->snd_max; u_int sent; + KASSERT(tp->t_dupacks == 1 || tp->t_dupacks == 2, ("dupacks not 1 or 2")); @@ -1929,8 +1930,10 @@ trimthenstep6: (void) tcp_output(tp); sent = tp->snd_max - oldsndmax; if (sent > tp->t_maxseg) { - KASSERT(tp->snd_limited == 0 && - tp->t_dupacks == 2, + KASSERT((tp->t_dupacks == 2 && + tp->snd_limited == 0) || + (sent == tp->t_maxseg + 1 && + tp->t_flags & TF_SENTFIN), ("sent too much")); tp->snd_limited = 2; } else if (sent > 0) diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index 151e083..2b4c564 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -1917,6 +1917,7 @@ trimthenstep6: u_long oldcwnd = tp->snd_cwnd; tcp_seq oldsndmax = tp->snd_max; u_int sent; + KASSERT(tp->t_dupacks == 1 || tp->t_dupacks == 2, ("dupacks not 1 or 2")); @@ -1929,8 +1930,10 @@ trimthenstep6: (void) tcp_output(tp); sent = tp->snd_max - oldsndmax; if (sent > tp->t_maxseg) { - KASSERT(tp->snd_limited == 0 && - tp->t_dupacks == 2, + KASSERT((tp->t_dupacks == 2 && + tp->snd_limited == 0) || + (sent == tp->t_maxseg + 1 && + tp->t_flags & TF_SENTFIN), ("sent too much")); tp->snd_limited = 2; } else if (sent > 0) |