tcp: avoid initializing counters multiple times

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ia98dae5fdde16426d5457742aff0a1b04db4d034
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c
index 2f90d9a..c7121b4 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -1482,11 +1482,14 @@
 }
 
 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 @@
 #undef _
 
     vlib_stats_register_collector_fn (&r);
+
+  tm->counters_init = 1;
 }
 
 static clib_error_t *
@@ -1576,7 +1581,7 @@
   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;
 }
diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h
index 962324e..2362a8b 100644
--- a/src/vnet/tcp/tcp.h
+++ b/src/vnet/tcp/tcp.h
@@ -240,6 +240,9 @@
   /** 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;