diff options
Diffstat (limited to 'src/plugins/nat/nat66')
-rw-r--r-- | src/plugins/nat/nat66/nat66_cli.c | 131 |
1 files changed, 67 insertions, 64 deletions
diff --git a/src/plugins/nat/nat66/nat66_cli.c b/src/plugins/nat/nat66/nat66_cli.c index 4ba46cb0b75..0ca40875584 100644 --- a/src/plugins/nat/nat66/nat66_cli.c +++ b/src/plugins/nat/nat66/nat66_cli.c @@ -20,30 +20,45 @@ #include <nat/nat66/nat66.h> #include <vnet/fib/fib_table.h> +#define NAT66_EXPECTED_ARGUMENT "expected required argument(s)" +#define NAT66_PLUGIN_DISABLED "error plugin disabled" + +#define CHECK_ENABLED() \ + do \ + { \ + if (PREDICT_FALSE (!nat66_main.enabled)) \ + { \ + return clib_error_return (0, NAT66_PLUGIN_DISABLED); \ + } \ + } \ + while (0) + static clib_error_t * -nat66_enable_command_fn (vlib_main_t *vm, unformat_input_t *input, - vlib_cli_command_t *cmd) +nat66_enable_disable_command_fn (vlib_main_t *vm, unformat_input_t *input, + vlib_cli_command_t *cmd) { nat66_main_t *nm = &nat66_main; unformat_input_t _line_input, *line_input = &_line_input; clib_error_t *error = 0; - u32 outside_vrf = 0; - if (nm->enabled) - return clib_error_return (0, "nat66 already enabled"); + u32 outside_vrf = 0; + u8 enable_set = 0, enable = 0; - /* Get a line of input. */ if (!unformat_user (input, unformat_line_input, line_input)) - { - if (nat66_plugin_enable (outside_vrf) != 0) - return clib_error_return (0, "nat66 enable failed"); - return 0; - } + return clib_error_return (0, NAT66_EXPECTED_ARGUMENT); while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "outside-vrf %u", &outside_vrf)) ; + else if (!enable_set) + { + enable_set = 1; + if (unformat (line_input, "disable")) + ; + else if (unformat (line_input, "enable")) + enable = 1; + } else { error = clib_error_return (0, "unknown input '%U'", @@ -52,26 +67,37 @@ nat66_enable_command_fn (vlib_main_t *vm, unformat_input_t *input, } } - if (nat66_plugin_enable (outside_vrf) != 0) - error = clib_error_return (0, "nat66 enable failed"); -done: - unformat_free (line_input); - return error; -} + if (!enable_set) + { + error = clib_error_return (0, "expected enable | disable"); + goto done; + } -static clib_error_t * -nat66_disable_command_fn (vlib_main_t *vm, unformat_input_t *input, - vlib_cli_command_t *cmd) -{ - nat66_main_t *nm = &nat66_main; - clib_error_t *error = 0; + if (enable) + { + if (nm->enabled) + { + error = clib_error_return (0, "already enabled"); + goto done; + } - if (!nm->enabled) - return clib_error_return (0, "nat66 already disabled"); + if (nat66_plugin_enable (outside_vrf) != 0) + error = clib_error_return (0, "enable failed"); + } + else + { + if (!nm->enabled) + { + error = clib_error_return (0, "already disabled"); + goto done; + } - if (nat66_plugin_disable () != 0) - error = clib_error_return (0, "nat66 disable failed"); + if (nat66_plugin_disable () != 0) + error = clib_error_return (0, "disable failed"); + } +done: + unformat_free (line_input); return error; } @@ -82,7 +108,6 @@ nat66_interface_feature_command_fn (vlib_main_t * vm, { unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); - nat66_main_t *nm = &nat66_main; clib_error_t *error = 0; u32 sw_if_index; u32 *inside_sw_if_indices = 0; @@ -90,12 +115,10 @@ nat66_interface_feature_command_fn (vlib_main_t * vm, u8 is_add = 1; int i, rv; - if (!nm->enabled) - return clib_error_return (0, "nat66 disabled"); + CHECK_ENABLED (); - /* Get a line of input. */ if (!unformat_user (input, unformat_line_input, line_input)) - return 0; + return clib_error_return (0, NAT66_EXPECTED_ARGUMENT); while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { @@ -208,9 +231,7 @@ static clib_error_t * nat66_show_interfaces_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { - nat66_main_t *nm = &nat66_main; - if (!nm->enabled) - return clib_error_return (0, "nat66 disabled"); + CHECK_ENABLED (); vlib_cli_output (vm, "NAT66 interfaces:"); nat66_interfaces_walk (nat66_cli_interface_walk, vm); return 0; @@ -221,20 +242,17 @@ nat66_add_del_static_mapping_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { - nat66_main_t *nm = &nat66_main; unformat_input_t _line_input, *line_input = &_line_input; clib_error_t *error = 0; - u8 is_add = 1; ip6_address_t l_addr, e_addr; u32 vrf_id = 0; + u8 is_add = 1; int rv; - if (!nm->enabled) - return clib_error_return (0, "nat66 disabled"); + CHECK_ENABLED (); - /* Get a line of input. */ if (!unformat_user (input, unformat_line_input, line_input)) - return 0; + return clib_error_return (0, NAT66_EXPECTED_ARGUMENT); while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { @@ -302,9 +320,7 @@ nat66_show_static_mappings_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { - nat66_main_t *nm = &nat66_main; - if (!nm->enabled) - return clib_error_return (0, "nat66 disabled"); + CHECK_ENABLED (); vlib_cli_output (vm, "NAT66 static mappings:"); nat66_static_mappings_walk (nat66_cli_static_mapping_walk, vm); return 0; @@ -312,32 +328,19 @@ nat66_show_static_mappings_command_fn (vlib_main_t * vm, /*? * @cliexpar - * @cliexstart{nat66 enable} - * Enable NAT66 plugin + * @cliexstart{nat66} * To enable NAT66 plugin * vpp# nat66 enable - * To enable NAT66 plugin with outside-vrf id 10 - * vpp# nat66 enable outside-vrf 10 - * @cliexend -?*/ -VLIB_CLI_COMMAND (nat66_enable_command, static) = { - .path = "nat66 enable", - .short_help = "nat66 enable [outside-vrf <vrf-id>]", - .function = nat66_enable_command_fn, -}; - -/*? - * @cliexpar - * @cliexstart{nat66 disable} - * Disable NAT66 plugin * To disable NAT66 plugin * vpp# nat66 disable + * To enable NAT66 plugin with outside-vrf id 10 + * vpp# nat66 enable outside-vrf 10 * @cliexend ?*/ -VLIB_CLI_COMMAND (nat66_disable_command, static) = { - .path = "nat66 disable", - .short_help = "nat66 disable", - .function = nat66_disable_command_fn, +VLIB_CLI_COMMAND (nat66_enable_disable_command, static) = { + .path = "nat66", + .short_help = "nat66 <enable [outside-vrf <vrf-id>]>|disable", + .function = nat66_enable_disable_command_fn, }; /*? |