diff options
-rw-r--r-- | src/plugins/nat/nat44-ed/nat44_ed.c | 9 | ||||
-rw-r--r-- | src/plugins/nat/nat44-ed/nat44_ed.h | 2 | ||||
-rw-r--r-- | src/vpp/stats/stat_segment.c | 3 |
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 (); |