tcp: cc improvements and fixes
[vpp.git] / src / vnet / tcp / tcp_newreno.c
index 103fea4..0f43d21 100644 (file)
@@ -36,8 +36,16 @@ newreno_rcv_ack (tcp_connection_t * tc)
     }
   else
     {
-      /* Round up to 1 if needed */
-      tc->cwnd += clib_max ((tc->snd_mss * tc->snd_mss) / tc->cwnd, 1);
+      /* tc->cwnd += clib_max ((tc->snd_mss * tc->snd_mss) / tc->cwnd, 1); */
+      tc->cwnd_acc_bytes += tc->bytes_acked;
+      if (tc->cwnd_acc_bytes >= tc->cwnd)
+       {
+         u32 inc = tc->cwnd_acc_bytes / tc->cwnd;
+         tc->cwnd += inc * tc->snd_mss;
+         tc->cwnd_acc_bytes -= inc * tc->cwnd;
+       }
+      tc->cwnd = clib_min (tc->cwnd,
+                          transport_tx_fifo_size (&tc->connection));
     }
 }