Fix congestion recovery check 15/19815/1 v19.01.3-rc0
authorJohn Lo <[email protected]>
Fri, 24 May 2019 11:16:12 +0000 (07:16 -0400)
committerJohn Lo <[email protected]>
Fri, 24 May 2019 11:16:12 +0000 (07:16 -0400)
Change-Id: Ia9347c8cb6175c6bec3f9c27a7e0a71c4e58fe28
Signed-off-by: John Lo <[email protected]>
src/vnet/tcp/tcp_input.c

index 392d694..b345e40 100644 (file)
@@ -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))