nat: api & cli command for forcing session cleanup
[vpp.git] / src / plugins / nat / nat44_cli.c
index ec2d803..659dbb2 100644 (file)
@@ -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,51 @@ 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,
+                              vlib_cli_command_t * cmd)
+{
+  unformat_input_t _line_input, *line_input = &_line_input;
+  snat_main_t *sm = &snat_main;
+  u8 log_level = SNAT_LOG_NONE;
+  clib_error_t *error = 0;
+
+  /* Get a line of input. */
+  if (!unformat_user (input, unformat_line_input, line_input))
+    return 0;
+
+  if (!unformat (line_input, "%d", &log_level))
+    {
+      error = clib_error_return (0, "unknown input '%U'",
+                                format_unformat_error, line_input);
+      goto done;
+    }
+  if (log_level > SNAT_LOG_DEBUG)
+    {
+      error = clib_error_return (0, "unknown logging level '%d'", log_level);
+      goto done;
+    }
+  sm->log_level = log_level;
+
+done:
+  unformat_free (line_input);
+
+  return error;
+}
+
 static clib_error_t *
 snat_ipfix_logging_enable_disable_command_fn (vlib_main_t * vm,
                                              unformat_input_t * input,
@@ -1943,6 +1989,32 @@ 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}
+ * To set NAT logging level use:
+ * Set nat logging level
+ * @cliexend
+?*/
+VLIB_CLI_COMMAND (snat_set_log_level_command, static) = {
+  .path = "nat set logging level",
+  .function = snat_set_log_level_command_fn,
+  .short_help = "nat set logging level <level>",
+};
+
 /*?
  * @cliexpar
  * @cliexstart{snat ipfix logging}
@@ -2202,13 +2274,13 @@ VLIB_CLI_COMMAND (add_static_mapping_command, static) = {
  * To create identity mapping for address 10.0.0.3 use:
  *  vpp# nat44 add identity mapping 10.0.0.3
  * To create identity mapping for DHCP addressed interface use:
- *  vpp# nat44 add identity mapping GigabitEthernet0/a/0 tcp 3606
+ *  vpp# nat44 add identity mapping external GigabitEthernet0/a/0 tcp 3606
  * @cliexend
 ?*/
 VLIB_CLI_COMMAND (add_identity_mapping_command, static) = {
   .path = "nat44 add identity mapping",
   .function = add_identity_mapping_command_fn,
-  .short_help = "nat44 add identity mapping <interface>|<ip4-addr> "
+  .short_help = "nat44 add identity mapping <ip4-addr>|external <interface> "
     "[<protocol> <port>] [vrf <table-id>] [del]",
 };