ip: reassembly add missing goto
[vpp.git] / src / vnet / tcp / tcp_bt.c
index fe00754..b550fdd 100644 (file)
@@ -241,8 +241,8 @@ tcp_bt_alloc_tx_sample (tcp_connection_t * tc, u32 min_seq)
   bts = bt_alloc_sample (tc->bt, min_seq);
   bts->delivered = tc->delivered;
   bts->delivered_time = tc->delivered_time;
-  bts->tx_rate = transport_connection_tx_pacer_rate (&tc->connection);
   bts->tx_time = tcp_time_now_us (tc->c_thread_index);
+  bts->first_tx_time = tc->first_tx_time;
   bts->flags |= tc->app_limited ? TCP_BTS_IS_APP_LIMITED : 0;
   return bts;
 }
@@ -270,7 +270,10 @@ tcp_bt_track_tx (tcp_connection_t * tc)
   u32 bts_index;
 
   if (tc->snd_una == tc->snd_nxt)
-    tc->delivered_time = tcp_time_now_us (tc->c_thread_index);
+    {
+      tc->delivered_time = tcp_time_now_us (tc->c_thread_index);
+      tc->first_tx_time = tc->delivered_time;
+    }
 
   bts = tcp_bt_alloc_tx_sample (tc, tc->snd_nxt);
   bts_index = bt_sample_index (bt, bts);
@@ -421,9 +424,10 @@ tcp_bt_sample_to_rate_sample (tcp_connection_t * tc, tcp_bt_sample_t * bts,
 
   rs->prior_delivered = bts->delivered;
   rs->prior_time = bts->delivered_time;
+  rs->interval_time = bts->tx_time - bts->first_tx_time;
   rs->rtt_time = bts->tx_time;
-  rs->tx_rate = bts->tx_rate;
   rs->flags = bts->flags;
+  tc->first_tx_time = bts->tx_time;
 }
 
 static void
@@ -529,7 +533,8 @@ tcp_bt_sample_delivery_rate (tcp_connection_t * tc, tcp_rate_sample_t * rs)
   if (tc->sack_sb.last_sacked_bytes)
     tcp_bt_walk_samples_ooo (tc, rs);
 
-  rs->interval_time = tc->delivered_time - rs->prior_time;
+  rs->interval_time = clib_max (tc->delivered_time - rs->prior_time,
+                               rs->interval_time);
   rs->delivered = tc->delivered - rs->prior_delivered;
   rs->rtt_time = tc->delivered_time - rs->rtt_time;
   rs->acked_and_sacked = delivered;