diff options
author | Ivan Shvedunov <ivan4th@gmail.com> | 2021-02-19 23:32:18 +0300 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-02-22 15:18:41 +0000 |
commit | f86b967c368ed982ca439a96bab4604025345c00 (patch) | |
tree | 44ae6e1283e543abd331590b5f473ac3b6b1d611 | |
parent | 255554fd7e75a803569e311c28e8ec8da8e7a286 (diff) |
ip-neighbor: add set ip neighbor-config CLI command
Type: improvement
Signed-off-by: Ivan Shvedunov <ivan4th@gmail.com>
Change-Id: I77ade50425e88d2da979f732d2248bed383f4ba4
-rw-r--r-- | src/vnet/ip-neighbor/ip_neighbor.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/vnet/ip-neighbor/ip_neighbor.c b/src/vnet/ip-neighbor/ip_neighbor.c index 78b45a27c9d..8637e16fd8e 100644 --- a/src/vnet/ip-neighbor/ip_neighbor.c +++ b/src/vnet/ip-neighbor/ip_neighbor.c @@ -23,6 +23,7 @@ #include <vnet/ip-neighbor/ip_neighbor_watch.h> #include <vnet/ip/ip6_ll_table.h> +#include <vnet/ip/ip46_address.h> #include <vnet/fib/fib_table.h> #include <vnet/adj/adj_mcast.h> @@ -1717,12 +1718,65 @@ ip_neighbor_config_show (vlib_main_t * vm, return (NULL); } +static clib_error_t * +ip_neighbor_config_set (vlib_main_t *vm, unformat_input_t *input, + vlib_cli_command_t *cmd) +{ + unformat_input_t _line_input, *line_input = &_line_input; + clib_error_t *error = NULL; + ip_address_family_t af; + u32 limit, age; + bool recycle; + + if (!unformat_user (input, unformat_line_input, line_input)) + return 0; + + if (!unformat (line_input, "%U", unformat_ip_address_family, &af)) + { + error = unformat_parse_error (line_input); + goto done; + } + + limit = ip_neighbor_db[af].ipndb_limit; + age = ip_neighbor_db[af].ipndb_age; + recycle = ip_neighbor_db[af].ipndb_recycle; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "limit %u", &limit)) + ; + else if (unformat (line_input, "age %u", &age)) + ; + else if (unformat (line_input, "recycle")) + recycle = true; + else if (unformat (line_input, "norecycle")) + recycle = false; + else + { + error = unformat_parse_error (line_input); + goto done; + } + } + + ip_neighbor_config (af, limit, age, recycle); + +done: + unformat_free (line_input); + return error; +} + /* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_ip_neighbor_cfg_cmd_node, static) = { .path = "show ip neighbor-config", .function = ip_neighbor_config_show, .short_help = "show ip neighbor-config", }; +VLIB_CLI_COMMAND (set_ip_neighbor_cfg_cmd_node, static) = { + .path = "set ip neighbor-config", + .function = ip_neighbor_config_set, + .short_help = "set ip neighbor-config ip4|ip6 [limit <limit>] [age <age>] " + "[recycle|norecycle]", +}; /* *INDENT-ON* */ static clib_error_t * |