nat: api & cli command for forcing session cleanup
Ticket: VPP-1836 Type: feature Signed-off-by: Filip Varga <fivarga@cisco.com> Change-Id: I8f7fc011bac435445a8916a4948d130ca9162f67
This commit is contained in:
src/plugins/nat
@ -130,6 +130,15 @@ enum nat_log_level : u8
|
||||
NAT_LOG_DEBUG = 0x05,
|
||||
};
|
||||
|
||||
/** \brief Run nat44 garbage collection
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
*/
|
||||
autoreply define nat44_session_cleanup {
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
};
|
||||
|
||||
/** \brief Set NAT logging level
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
|
@ -108,6 +108,43 @@ nat44_session_try_cleanup (ip4_address_t * addr,
|
||||
thread_index, now);
|
||||
}
|
||||
|
||||
static_always_inline void
|
||||
nat44_force_session_cleanup (void)
|
||||
{
|
||||
snat_user_t *u = 0;
|
||||
|
||||
snat_main_t *sm = &snat_main;
|
||||
snat_main_per_thread_data_t *tsm;
|
||||
|
||||
vlib_main_t *vm = vlib_get_main ();
|
||||
f64 now = vlib_time_now (vm);
|
||||
|
||||
// TODO: consider own timeouts
|
||||
|
||||
if (sm->num_workers > 1)
|
||||
{
|
||||
/* *INDENT-OFF* */
|
||||
vec_foreach (tsm, sm->per_thread_data)
|
||||
{
|
||||
pool_foreach (u, tsm->users,
|
||||
({
|
||||
nat44_user_try_cleanup (u, tsm->thread_index, now);
|
||||
}));
|
||||
}
|
||||
/* *INDENT-ON* */
|
||||
}
|
||||
else
|
||||
{
|
||||
tsm = vec_elt_at_index (sm->per_thread_data, sm->num_workers);
|
||||
/* *INDENT-OFF* */
|
||||
pool_foreach (u, tsm->users,
|
||||
({
|
||||
nat44_user_try_cleanup (u, tsm->thread_index, now);
|
||||
}));
|
||||
/* *INDENT-ON* */
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* included_nat44_inlines_h__ */
|
||||
|
||||
/*
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <nat/nat_det.h>
|
||||
#include <nat/nat64.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
#include <nat/nat44/inlines.h>
|
||||
#include <nat/nat_affinity.h>
|
||||
#include <vnet/fib/fib_table.h>
|
||||
#include <nat/nat_ha.h>
|
||||
@ -115,6 +116,18 @@ nat_show_workers_commnad_fn (vlib_main_t * vm, unformat_input_t * input,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
nat44_session_cleanup_command_fn (vlib_main_t * vm,
|
||||
unformat_input_t * input,
|
||||
vlib_cli_command_t * cmd)
|
||||
{
|
||||
clib_error_t *error = 0;
|
||||
|
||||
nat44_force_session_cleanup ();
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
snat_set_log_level_command_fn (vlib_main_t * vm,
|
||||
unformat_input_t * input,
|
||||
@ -1976,6 +1989,19 @@ VLIB_CLI_COMMAND (nat_show_timeouts_command, static) = {
|
||||
.function = nat_show_timeouts_command_fn,
|
||||
};
|
||||
|
||||
/*?
|
||||
* @cliexpar
|
||||
* @cliexstart{nat set logging level}
|
||||
* To force garbage collection of nat sessions
|
||||
* vpp# nat44 session cleanup
|
||||
* @cliexend
|
||||
?*/
|
||||
VLIB_CLI_COMMAND (nat44_session_cleanup_command, static) = {
|
||||
.path = "nat44 session cleanup",
|
||||
.function = nat44_session_cleanup_command_fn,
|
||||
.short_help = "nat44 session cleanup",
|
||||
};
|
||||
|
||||
/*?
|
||||
* @cliexpar
|
||||
* @cliexstart{nat set logging level}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <nat/nat64.h>
|
||||
#include <nat/nat66.h>
|
||||
#include <nat/nat_inlines.h>
|
||||
#include <nat/nat44/inlines.h>
|
||||
#include <nat/nat_ha.h>
|
||||
#include <vlibapi/api.h>
|
||||
#include <vlibmemory/api.h>
|
||||
@ -240,6 +241,30 @@ vl_api_nat_worker_dump_t_print (vl_api_nat_worker_dump_t * mp, void *handle)
|
||||
FINISH;
|
||||
}
|
||||
|
||||
static void
|
||||
vl_api_nat44_session_cleanup_t_handler (vl_api_nat44_session_cleanup_t * mp)
|
||||
{
|
||||
snat_main_t *sm = &snat_main;
|
||||
vl_api_nat44_session_cleanup_reply_t *rmp;
|
||||
int rv = 0;
|
||||
|
||||
nat44_force_session_cleanup ();
|
||||
|
||||
REPLY_MACRO (VL_API_NAT44_SESSION_CLEANUP_REPLY);
|
||||
}
|
||||
|
||||
static void *
|
||||
vl_api_nat44_session_cleanup_t_print (vl_api_nat44_session_cleanup_t * mp,
|
||||
void *handle)
|
||||
{
|
||||
u8 *s;
|
||||
|
||||
s = format (0, "SCRIPT: nat44_session_cleanup");
|
||||
|
||||
FINISH;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
vl_api_nat_set_log_level_t_handler (vl_api_nat_set_log_level_t * mp)
|
||||
{
|
||||
@ -3094,6 +3119,7 @@ _(NAT_CONTROL_PING, nat_control_ping) \
|
||||
_(NAT_SHOW_CONFIG, nat_show_config) \
|
||||
_(NAT_SET_WORKERS, nat_set_workers) \
|
||||
_(NAT_WORKER_DUMP, nat_worker_dump) \
|
||||
_(NAT44_SESSION_CLEANUP, nat44_session_cleanup) \
|
||||
_(NAT_SET_LOG_LEVEL, nat_set_log_level) \
|
||||
_(NAT_IPFIX_ENABLE_DISABLE, nat_ipfix_enable_disable) \
|
||||
_(NAT_SET_TIMEOUTS, nat_set_timeouts) \
|
||||
|
Reference in New Issue
Block a user