tcp: avoid initializing counters multiple times 30/39130/3
authorFlorin Coras <[email protected]>
Sun, 25 Jun 2023 01:57:17 +0000 (18:57 -0700)
committerFlorin Coras <[email protected]>
Sun, 25 Jun 2023 01:49:58 +0000 (01:49 +0000)
Type: fix

Signed-off-by: Florin Coras <[email protected]>
Change-Id: Ia98dae5fdde16426d5457742aff0a1b04db4d034

src/vnet/tcp/tcp.c
src/vnet/tcp/tcp.h

index 2f90d9a..c7121b4 100644 (file)
@@ -1482,11 +1482,14 @@ tcp_stats_collector_fn (vlib_stats_collector_data_t *d)
 }
 
 static void
-tcp_counters_init (void)
+tcp_counters_init (tcp_main_t *tm)
 {
   vlib_stats_collector_reg_t r = {};
   u32 idx;
 
+  if (tm->counters_init)
+    return;
+
   r.entry_index = idx = vlib_stats_add_counter_vector ("/sys/tcp");
   r.collect_fn = tcp_stats_collector_fn;
   vlib_stats_validate (idx, 0, TCP_STAT_no_buffer);
@@ -1498,6 +1501,8 @@ tcp_counters_init (void)
 #undef _
 
     vlib_stats_register_collector_fn (&r);
+
+  tm->counters_init = 1;
 }
 
 static clib_error_t *
@@ -1576,7 +1581,7 @@ tcp_main_enable (vlib_main_t * vm)
   tm->bytes_per_buffer = vlib_buffer_get_default_data_size (vm);
   tm->cc_last_type = TCP_CC_LAST;
 
-  tcp_counters_init ();
+  tcp_counters_init (tm);
 
   return error;
 }
index 962324e..2362a8b 100644 (file)
@@ -240,6 +240,9 @@ typedef struct _tcp_main
   /** Flag that indicates if stack is on or off */
   u8 is_enabled;
 
+  /** Set if counters on stats segment initialized */
+  u8 counters_init;
+
   /** Flag that indicates if v4 punting is enabled */
   u8 punt_unknown4;