diff options
author | Matus Fabian <matfabia@cisco.com> | 2018-09-04 03:55:45 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-09-04 17:50:51 +0000 |
commit | 5d28c7afbc0abd172d0053768b2ebe37b7a6c348 (patch) | |
tree | afdef90641a9fc25c9d24e166488e66d3e9049b7 /src/plugins/nat/nat44_cli.c | |
parent | b17cd37bb9c86ea5d8b43efad7ce5b7fc808e528 (diff) |
NAT: add support for configurable port range (VPP-1346)
Change-Id: I6882b6daa05db866fe6e78a62b380ec331507f74
Signed-off-by: Matus Fabian <matfabia@cisco.com>
Diffstat (limited to 'src/plugins/nat/nat44_cli.c')
-rw-r--r-- | src/plugins/nat/nat44_cli.c | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/src/plugins/nat/nat44_cli.c b/src/plugins/nat/nat44_cli.c index 3847502ca7e..17a3827dee6 100644 --- a/src/plugins/nat/nat44_cli.c +++ b/src/plugins/nat/nat44_cli.c @@ -214,7 +214,7 @@ nat44_set_alloc_addr_and_port_alg_command_fn (vlib_main_t * vm, unformat_input_t _line_input, *line_input = &_line_input; snat_main_t *sm = &snat_main; clib_error_t *error = 0; - u32 psid, psid_offset, psid_length; + u32 psid, psid_offset, psid_length, port_start, port_end; if (sm->deterministic) return clib_error_return (0, UNSUPPORTED_IN_DET_MODE_STR); @@ -234,6 +234,20 @@ nat44_set_alloc_addr_and_port_alg_command_fn (vlib_main_t * vm, nat_set_alloc_addr_and_port_mape ((u16) psid, (u16) psid_offset, (u16) psid_length); else + if (unformat + (line_input, "port-range %d - %d", &port_start, &port_end)) + { + if (port_end <= port_start) + { + error = + clib_error_return (0, + "The end-port must be greater than start-port"); + goto done; + } + nat_set_alloc_addr_and_port_range ((u16) port_start, + (u16) port_end); + } + else { error = clib_error_return (0, "unknown input '%U'", format_unformat_error, line_input); @@ -248,6 +262,36 @@ done: }; static clib_error_t * +nat44_show_alloc_addr_and_port_alg_command_fn (vlib_main_t * vm, + unformat_input_t * input, + vlib_cli_command_t * cmd) +{ + snat_main_t *sm = &snat_main; + + if (sm->deterministic) + return clib_error_return (0, UNSUPPORTED_IN_DET_MODE_STR); + + vlib_cli_output (vm, "NAT address and port: %U", + format_nat_addr_and_port_alloc_alg, + sm->addr_and_port_alloc_alg); + switch (sm->addr_and_port_alloc_alg) + { + case NAT_ADDR_AND_PORT_ALLOC_ALG_MAPE: + vlib_cli_output (vm, " psid %d psid-offset %d psid-len %d", sm->psid, + sm->psid_offset, sm->psid_length); + break; + case NAT_ADDR_AND_PORT_ALLOC_ALG_RANGE: + vlib_cli_output (vm, " start-port %d end-port %d", sm->start_port, + sm->end_port); + break; + default: + break; + } + + return 0; +} + +static clib_error_t * add_address_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { @@ -1634,6 +1678,8 @@ VLIB_CLI_COMMAND (snat_ipfix_logging_enable_disable_command, static) = { * Set address and port assignment algorithm * For the MAP-E CE limit port choice based on PSID use: * vpp# nat addr-port-assignment-alg map-e psid 10 psid-offset 6 psid-len 6 + * For port range use: + * vpp# nat addr-port-assignment-alg port-range <start-port> - <end-port> * To set standard (default) address and port assignment algorithm use: * vpp# nat addr-port-assignment-alg default * @cliexend @@ -1646,6 +1692,18 @@ VLIB_CLI_COMMAND (nat44_set_alloc_addr_and_port_alg_command, static) = { /*? * @cliexpar + * @cliexstart{show nat addr-port-assignment-alg} + * Show address and port assignment algorithm + * @cliexend +?*/ +VLIB_CLI_COMMAND (nat44_show_alloc_addr_and_port_alg_command, static) = { + .path = "show nat addr-port-assignment-alg", + .short_help = "show nat addr-port-assignment-alg", + .function = nat44_show_alloc_addr_and_port_alg_command_fn, +}; + +/*? + * @cliexpar * @cliexstart{show nat44 hash tables} * Show NAT44 hash tables * @cliexend |