summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2019-05-24 07:16:12 -0400
committerJohn Lo <loj@cisco.com>2019-05-24 07:16:12 -0400
commit6af82438144fca93af4df4c2808827dbbc392699 (patch)
treed108549586e53a785dce9816cff1ce243f7708a5 /src
parentfa63602fcba1dffee77ee86f9a1a67a11a911b79 (diff)
Fix congestion recovery checkv19.01.3-rc0
Change-Id: Ia9347c8cb6175c6bec3f9c27a7e0a71c4e58fe28 Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src')
-rw-r--r--src/vnet/tcp/tcp_input.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c
index 392d694030e..b345e40d4c0 100644
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -1526,8 +1526,10 @@ tcp_rcv_ack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc, vlib_buffer_t * b,
/* When we entered cong recovery, we reset snd_nxt to snd_una. Seems
* peer still has the data so accept the ack */
if (tcp_in_cong_recovery (tc)
- && seq_leq (vnet_buffer (b)->tcp.ack_number,
- tc->snd_una + tc->snd_wnd))
+ && (seq_leq (vnet_buffer (b)->tcp.ack_number,
+ tc->snd_una + tc->snd_wnd)
+ || seq_leq (vnet_buffer (b)->tcp.ack_number,
+ tc->snd_congestion)))
{
tc->snd_nxt = vnet_buffer (b)->tcp.ack_number;
if (seq_gt (tc->snd_nxt, tc->snd_una_max))