X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Flookup.c;h=192c4c7cebcc0a68b97bd2c4fd37e883f82287f9;hb=275bd796346c3b1618170f4eda36b9a41ade9c87;hp=f674fec48231b744c24940b9134cb83b86a9c800;hpb=f2984bbb013acb0d6872e8fbb2f9d57d3e4f49b9;p=vpp.git diff --git a/src/vnet/ip/lookup.c b/src/vnet/ip/lookup.c index f674fec4823..192c4c7cebc 100644 --- a/src/vnet/ip/lookup.c +++ b/src/vnet/ip/lookup.c @@ -399,27 +399,32 @@ vnet_ip_table_cmd (vlib_main_t * vm, } } - if (~0 == table_id) - { - error = clib_error_return (0, "No table id"); - goto done; - } - else if (0 == table_id) + if (0 == table_id) { error = clib_error_return (0, "Can't change the default table"); goto done; } else - { - if (is_add) - { - ip_table_create (fproto, table_id, 0, name); - } - else { - ip_table_delete (fproto, table_id, 0); + if (is_add) + { + if (~0 == table_id) + { + table_id = ip_table_get_unused_id (fproto); + vlib_cli_output (vm, "%u\n", table_id); + } + ip_table_create (fproto, table_id, 0, name); + } + else + { + if (~0 == table_id) + { + error = clib_error_return (0, "No table id"); + goto done; + } + ip_table_delete (fproto, table_id, 0); + } } - } done: unformat_free (line_input); @@ -440,6 +445,71 @@ vnet_ip6_table_cmd (vlib_main_t * vm, return (vnet_ip_table_cmd (vm, main_input, cmd, FIB_PROTOCOL_IP6)); } +clib_error_t * +vnet_show_ip_table_cmd (vlib_main_t *vm, unformat_input_t *main_input, + vlib_cli_command_t *cmd, fib_protocol_t fproto) +{ + unformat_input_t _line_input, *line_input = &_line_input; + fib_table_t *fib, *fibs; + clib_error_t *error = NULL; + u32 table_id = ~0, fib_index; + /* Get a line of input. */ + if (unformat_user (main_input, unformat_line_input, line_input)) + { + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "%d", &table_id)) + ; + else + { + error = unformat_parse_error (line_input); + goto done; + } + } + unformat_free (line_input); + } + + fibs = (fproto == FIB_PROTOCOL_IP4) ? ip4_main.fibs : ip6_main.fibs; + + if (table_id != (u32) ~0) + { + fib_index = fib_table_find (fproto, table_id); + if (fib_index == (u32) ~0) + { + error = clib_error_return (0, "Couldn't find table with table_id %u", + table_id); + goto done; + } + + fib = fib_table_get (fib_index, fproto); + vlib_cli_output (vm, "[%3u] table_id:%3u %v", fib->ft_index, + fib->ft_table_id, fib->ft_desc); + } + else + { + pool_foreach (fib, fibs) + vlib_cli_output (vm, "[%3u] table_id:%3u %v", fib->ft_index, + fib->ft_table_id, fib->ft_desc); + } + +done: + return error; +} + +clib_error_t * +vnet_show_ip4_table_cmd (vlib_main_t *vm, unformat_input_t *main_input, + vlib_cli_command_t *cmd) +{ + return (vnet_show_ip_table_cmd (vm, main_input, cmd, FIB_PROTOCOL_IP4)); +} + +clib_error_t * +vnet_show_ip6_table_cmd (vlib_main_t *vm, unformat_input_t *main_input, + vlib_cli_command_t *cmd) +{ + return (vnet_show_ip_table_cmd (vm, main_input, cmd, FIB_PROTOCOL_IP6)); +} + /* *INDENT-OFF* */ VLIB_CLI_COMMAND (vlib_cli_ip_command, static) = { .path = "ip", @@ -532,6 +602,18 @@ VLIB_CLI_COMMAND (ip6_table_command, static) = { .function = vnet_ip6_table_cmd, }; +VLIB_CLI_COMMAND (show_ip4_table_command, static) = { + .path = "show ip table", + .short_help = "show ip table ", + .function = vnet_show_ip4_table_cmd, +}; + +VLIB_CLI_COMMAND (show_ip6_table_command, static) = { + .path = "show ip6 table", + .short_help = "show ip6 table ", + .function = vnet_show_ip6_table_cmd, +}; + static clib_error_t * ip_table_bind_cmd (vlib_main_t * vm, unformat_input_t * input, @@ -561,7 +643,7 @@ ip_table_bind_cmd (vlib_main_t * vm, goto done; } - rv = ip_table_bind (fproto, sw_if_index, table_id, 0); + rv = ip_table_bind (fproto, sw_if_index, table_id); if (VNET_API_ERROR_ADDRESS_FOUND_FOR_INTERFACE == rv) {