tcp: cc algos handle cwnd on congestion signal 32/21732/3
authorFlorin Coras <fcoras@cisco.com>
Tue, 3 Sep 2019 19:37:11 +0000 (12:37 -0700)
committerJohn Lo <loj@cisco.com>
Wed, 4 Sep 2019 16:18:01 +0000 (16:18 +0000)
Type: refactor

Change-Id: I15b10a22d0d0b83075a0eef5ef8c09cf76989866
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/tcp/tcp_cubic.c
src/vnet/tcp/tcp_input.c
src/vnet/tcp/tcp_newreno.c

index 0b4226d..aa31896 100644 (file)
@@ -103,6 +103,10 @@ cubic_congestion (tcp_connection_t * tc)
 
   cd->w_max = w_max;
   tc->ssthresh = clib_max (tc->cwnd * beta_cubic, 2 * tc->snd_mss);
+
+  tc->cwnd = tc->ssthresh;
+  if (!tcp_opts_sack_permitted (&tc->rcv_opts))
+    tc->cwnd += 3 * tc->snd_mss;
 }
 
 static void
index 45a40a2..1a9eff5 100755 (executable)
@@ -1367,20 +1367,9 @@ tcp_cc_handle_event (tcp_connection_t * tc, tcp_rate_sample_t * rs,
            }
 
          tcp_cc_init_congestion (tc);
-         tcp_cc_rcv_cong_ack (tc, TCP_CC_DUPACK, rs);
 
          if (tcp_opts_sack_permitted (&tc->rcv_opts))
-           {
-             tc->cwnd = tc->ssthresh;
-             scoreboard_init_high_rxt (&tc->sack_sb, tc->snd_una);
-           }
-         else
-           {
-             /* Post retransmit update cwnd to ssthresh and account for the
-              * three segments that have left the network and should've been
-              * buffered at the receiver XXX */
-             tc->cwnd = tc->ssthresh + 3 * tc->snd_mss;
-           }
+           scoreboard_init_high_rxt (&tc->sack_sb, tc->snd_una);
 
          /* Constrain rate until we get a partial ack */
          pacer_wnd = clib_max (0.1 * tc->cwnd, 2 * tc->snd_mss);
index 7e37efb..8b704a6 100644 (file)
@@ -19,6 +19,12 @@ static void
 newreno_congestion (tcp_connection_t * tc)
 {
   tc->ssthresh = clib_max (tcp_flight_size (tc) / 2, 2 * tc->snd_mss);
+  tc->cwnd = tc->ssthresh;
+  /* Post retransmit update cwnd to ssthresh and account for the
+   * three segments that have left the network and should've been
+   * buffered at the receiver XXX */
+  if (!tcp_opts_sack_permitted (&tc->rcv_opts))
+    tc->cwnd += 3 * tc->snd_mss;
 }
 
 static void