X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_cli.c;h=b803a31c05f7b1affb57edc93b788f497ee4f72c;hb=525c9d0f8645ef9901316f042c195adc970b4546;hp=5509e3ffa579878622fd8af16809c9384c2882fa;hpb=4478d8edc35757c1da66e1c3c108af24940fbdd3;p=vpp.git diff --git a/src/vnet/interface_cli.c b/src/vnet/interface_cli.c index 5509e3ffa57..b803a31c05f 100644 --- a/src/vnet/interface_cli.c +++ b/src/vnet/interface_cli.c @@ -270,36 +270,47 @@ show_sw_interfaces (vlib_main_t * vm, { clib_error_t *error = 0; vnet_main_t *vnm = vnet_get_main (); + unformat_input_t _linput, *linput = &_linput; vnet_interface_main_t *im = &vnm->interface_main; vnet_sw_interface_t *si, *sorted_sis = 0; u32 sw_if_index = ~(u32) 0; u8 show_addresses = 0; u8 show_features = 0; u8 show_tag = 0; + int verbose = 0; - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + /* + * Get a line of input. Won't work if the user typed + * "show interface" and nothing more. + */ + if (unformat_user (input, unformat_line_input, linput)) { - /* See if user wants to show specific interface */ - if (unformat - (input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)) - { - si = pool_elt_at_index (im->sw_interfaces, sw_if_index); - vec_add1 (sorted_sis, si[0]); - } - else if (unformat (input, "address") || unformat (input, "addr")) - show_addresses = 1; - else if (unformat (input, "features") || unformat (input, "feat")) - show_features = 1; - else if (unformat (input, "tag")) - show_tag = 1; - else + while (unformat_check_input (linput) != UNFORMAT_END_OF_INPUT) { - error = clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); - goto done; + /* See if user wants to show specific interface */ + if (unformat + (linput, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)) + { + si = pool_elt_at_index (im->sw_interfaces, sw_if_index); + vec_add1 (sorted_sis, si[0]); + } + else if (unformat (linput, "address") || unformat (linput, "addr")) + show_addresses = 1; + else if (unformat (linput, "features") || unformat (linput, "feat")) + show_features = 1; + else if (unformat (linput, "tag")) + show_tag = 1; + else if (unformat (linput, "verbose")) + verbose = 1; + else + { + error = clib_error_return (0, "unknown input `%U'", + format_unformat_error, linput); + goto done; + } } + unformat_free (linput); } - if (show_features || show_tag) { if (sw_if_index == ~(u32) 0) @@ -308,7 +319,7 @@ show_sw_interfaces (vlib_main_t * vm, if (show_features) { - vnet_interface_features_show (vm, sw_if_index); + vnet_interface_features_show (vm, sw_if_index, verbose); l2_input_config_t *l2_input = l2input_intf_config (sw_if_index); u32 fb = l2_input->feature_bitmap; @@ -344,14 +355,14 @@ show_sw_interfaces (vlib_main_t * vm, sorted_sis = vec_new (vnet_sw_interface_t, pool_elts (im->sw_interfaces)); _vec_len (sorted_sis) = 0; - pool_foreach (si, im->sw_interfaces, ( - { - int visible = - vnet_swif_is_api_visible (si); - if (visible) - vec_add1 (sorted_sis, si[0]);} - )); - + /* *INDENT-OFF* */ + pool_foreach (si, im->sw_interfaces, + ({ + int visible = vnet_swif_is_api_visible (si); + if (visible) + vec_add1 (sorted_sis, si[0]);} + )); + /* *INDENT-OFF* */ /* Sort by name. */ vec_sort_with_function (sorted_sis, sw_interface_name_compare); } @@ -438,25 +449,26 @@ show_sw_interfaces (vlib_main_t * vm, format_ip6_address, r6, ia->address_length); })); /* *INDENT-ON* */ - } - } - else - { - vec_foreach (si, sorted_sis) - { - vlib_cli_output (vm, "%U\n", format_vnet_sw_interface, vnm, si); - } } +} + +else +{ + vec_foreach (si, sorted_sis) + { + vlib_cli_output (vm, "%U\n", format_vnet_sw_interface, vnm, si); + } +} done: - vec_free (sorted_sis); - return error; +vec_free (sorted_sis); +return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_sw_interfaces_command, static) = { .path = "show interface", - .short_help = "show interface [address|addr|features|feat] [ [ [..]]]", + .short_help = "show interface [address|addr|features|feat] [ [ [..]]] [verbose]", .function = show_sw_interfaces, }; /* *INDENT-ON* */ @@ -934,60 +946,32 @@ set_unnumbered (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { vnet_main_t *vnm = vnet_get_main (); - u32 unnumbered_sw_if_index; - u32 inherit_from_sw_if_index; - vnet_sw_interface_t *si; - int is_set = 0; - int is_del = 0; - u32 was_unnum; + u32 unnumbered_sw_if_index = ~0; + u32 inherit_from_sw_if_index = ~0; + int enable = 1; if (unformat (input, "%U use %U", unformat_vnet_sw_interface, vnm, &unnumbered_sw_if_index, unformat_vnet_sw_interface, vnm, &inherit_from_sw_if_index)) - is_set = 1; + enable = 1; else if (unformat (input, "del %U", unformat_vnet_sw_interface, vnm, &unnumbered_sw_if_index)) - is_del = 1; + enable = 0; else return clib_error_return (0, "parse error '%U'", format_unformat_error, input); - si = vnet_get_sw_interface (vnm, unnumbered_sw_if_index); - was_unnum = (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED); - - if (is_del) - { - si->flags &= ~(VNET_SW_INTERFACE_FLAG_UNNUMBERED); - si->unnumbered_sw_if_index = (u32) ~ 0; - - ip4_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = ~0; - ip6_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = ~0; - } - else if (is_set) - { - si->flags |= VNET_SW_INTERFACE_FLAG_UNNUMBERED; - si->unnumbered_sw_if_index = inherit_from_sw_if_index; - - ip4_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = - ip4_main.lookup_main.if_address_pool_index_by_sw_if_index - [inherit_from_sw_if_index]; - ip6_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = - ip6_main.lookup_main.if_address_pool_index_by_sw_if_index - [inherit_from_sw_if_index]; - } + if (~0 == unnumbered_sw_if_index) + return clib_error_return (0, "Specify the unnumbered interface"); + if (enable && ~0 == inherit_from_sw_if_index) + return clib_error_return (0, "When enabling unnumberered specify the" + " IP enabled interface that it uses"); - if (was_unnum != (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED)) - { - ip4_sw_interface_enable_disable (unnumbered_sw_if_index, !is_del); - ip6_sw_interface_enable_disable (unnumbered_sw_if_index, !is_del); - } + vnet_sw_interface_update_unnumbered (unnumbered_sw_if_index, + inherit_from_sw_if_index, enable); - return 0; + return (NULL); } /* *INDENT-OFF* */ @@ -1132,7 +1116,6 @@ mtu_cmd (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { vnet_main_t *vnm = vnet_get_main (); u32 hw_if_index, mtu; - u32 flags = ETHERNET_INTERFACE_FLAG_MTU; ethernet_main_t *em = ðernet_main; if (unformat (input, "%d %U", &mtu, @@ -1153,11 +1136,7 @@ mtu_cmd (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) return clib_error_return (0, "Invalid mtu (%d): must be <= (%d)", mtu, hi->max_supported_packet_bytes); - if (hi->max_packet_bytes != mtu) - { - hi->max_packet_bytes = mtu; - ethernet_set_flags (vnm, hw_if_index, flags); - } + vnet_hw_interface_set_mtu (vnm, hw_if_index, mtu); } else return clib_error_return (0, "unknown input `%U'",