summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/nat/nat44-ed/nat44_ed.c9
-rw-r--r--src/plugins/nat/nat44-ed/nat44_ed.h2
-rw-r--r--src/vpp/stats/stat_segment.c3
3 files changed, 13 insertions, 1 deletions
diff --git a/src/plugins/nat/nat44-ed/nat44_ed.c b/src/plugins/nat/nat44-ed/nat44_ed.c
index 58aade568b9..d42d303d95c 100644
--- a/src/plugins/nat/nat44-ed/nat44_ed.c
+++ b/src/plugins/nat/nat44-ed/nat44_ed.c
@@ -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);
diff --git a/src/plugins/nat/nat44-ed/nat44_ed.h b/src/plugins/nat/nat44-ed/nat44_ed.h
index c9ae089210d..1668d0295d5 100644
--- a/src/plugins/nat/nat44-ed/nat44_ed.h
+++ b/src/plugins/nat/nat44-ed/nat44_ed.h
@@ -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
diff --git a/src/vpp/stats/stat_segment.c b/src/vpp/stats/stat_segment.c
index 24ab3e62ff9..1ca9f5bab0d 100644
--- a/src/vpp/stats/stat_segment.c
+++ b/src/vpp/stats/stat_segment.c
@@ -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 ();