tcp: update persist timer if data acked 46/35646/2
authorFlorin Coras <fcoras@cisco.com>
Mon, 14 Mar 2022 21:23:39 +0000 (14:23 -0700)
committerDamjan Marion <dmarion@me.com>
Tue, 15 Mar 2022 16:27:02 +0000 (16:27 +0000)
Update persist timer if data sent during snd_wnd < snd_mss was acked.

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I5c75ff8ddc0e49750b2088237d32afa4eda99e7f

src/vnet/tcp/tcp_input.c

index 64b9334..c15c328 100644 (file)
@@ -629,11 +629,15 @@ tcp_update_snd_wnd (tcp_connection_t * tc, u32 seq, u32 ack, u32 snd_wnd)
 
       if (PREDICT_FALSE (tc->snd_wnd < tc->snd_mss))
        {
-         /* Set persist timer if not set and we just got 0 wnd */
-         if (!tcp_timer_is_active (tc, TCP_TIMER_PERSIST)
-             && !tcp_timer_is_active (tc, TCP_TIMER_RETRANSMIT))
+         if (!tcp_timer_is_active (tc, TCP_TIMER_RETRANSMIT))
            {
              tcp_worker_ctx_t *wrk = tcp_get_worker (tc->c_thread_index);
+
+             /* Set persist timer if we just got 0 wnd. If already set,
+              * update it because some data sent with snd_wnd < snd_mss was
+              * acked. */
+             if (tcp_timer_is_active (tc, TCP_TIMER_PERSIST))
+               tcp_persist_timer_reset (&wrk->timer_wheel, tc);
              tcp_persist_timer_set (&wrk->timer_wheel, tc);
            }
        }