nat: add maximum configured sessions to stat segment 61/32361/3
authorOle Troan <ot@cisco.com>
Tue, 18 May 2021 13:05:23 +0000 (15:05 +0200)
committerDamjan Marion <dmarion@me.com>
Fri, 21 May 2021 16:49:30 +0000 (16:49 +0000)
Add /nat44-ed/max-cfg-sessions gauge.
Reflects the configured value for configured sessions (per thread).

Type: improvement
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I618c8aa0daab0981399cfe9273d191fa1990ef60
Signed-off-by: Ole Troan <ot@cisco.com>
src/plugins/nat/nat44-ed/nat44_ed.c
src/plugins/nat/nat44-ed/nat44_ed.h
src/vpp/stats/stat_segment.c

index 58aade5..d42d303 100644 (file)
@@ -36,6 +36,8 @@
 #include <nat/nat44-ed/nat44_ed_affinity.h>
 #include <nat/nat44-ed/nat44_ed_inlines.h>
 
+#include <vpp/stats/stat_segment.h>
+
 snat_main_t snat_main;
 
 static_always_inline void nat_validate_interface_counters (snat_main_t *sm,
@@ -2025,6 +2027,8 @@ nat_init (vlib_main_t * vm)
 
   nat_init_simple_counter (sm->total_sessions, "total-sessions",
                           "/nat44-ed/total-sessions");
+  sm->max_cfg_sessions_gauge = stat_segment_new_entry (
+    (u8 *) "/nat44-ed/max-cfg-sessions", STAT_DIR_TYPE_SCALAR_INDEX);
 
 #define _(x)                                                                  \
   nat_init_simple_counter (sm->counters.fastpath.in2out.x, #x,                \
@@ -2123,6 +2127,8 @@ nat44_plugin_enable (nat44_config_t c)
     c.sessions = 63 * 1024;
 
   sm->max_translations_per_thread = c.sessions;
+  stat_segment_set_state_counter (sm->max_cfg_sessions_gauge,
+                                 sm->max_translations_per_thread);
   sm->translation_buckets = nat_calc_bihash_buckets (c.sessions);
 
   // ED only feature
@@ -2788,6 +2794,9 @@ nat44_update_session_limit (u32 session_limit, u32 vrf_id)
     return 1;
   sm->max_translations_per_thread = nat44_get_max_session_limit ();
 
+  stat_segment_set_state_counter (sm->max_cfg_sessions_gauge,
+                                 sm->max_translations_per_thread);
+
   sm->translation_buckets =
     nat_calc_bihash_buckets (sm->max_translations_per_thread);
 
index c9ae089..1668d02 100644 (file)
@@ -608,6 +608,8 @@ typedef struct snat_main_s
 
   /* counters */
   vlib_simple_counter_main_t total_sessions;
+  u32 max_cfg_sessions_gauge; /* Index of max configured sessions gauge in
+                                stats */
 
 #define _(x) vlib_simple_counter_main_t x;
   struct
index 24ab3e6..1ca9f5b 100644 (file)
@@ -387,6 +387,7 @@ vlib_stats_pop_heap2 (u64 * error_vector, u32 thread_index, void *oldheap,
  * Create a new entry and add name to directory hash.
  * Returns ~0 if name exists.
  * Called from main heap.
+ * The name is either C-string or nul-terminated vector
  */
 u32
 stat_segment_new_entry (u8 *name, stat_directory_type_t t)
@@ -404,7 +405,7 @@ stat_segment_new_entry (u8 *name, stat_directory_type_t t)
 
   memset (&e, 0, sizeof (e));
   e.type = t;
-  memcpy (e.name, name, vec_len (name));
+  strcpy_s (e.name, sizeof (e.name), (char *) name);
 
   oldheap = vlib_stats_push_heap (NULL);
   vlib_stat_segment_lock ();