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
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__ */
/*
#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>
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,
.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}
#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>
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)
{
_(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) \