X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_cli.c;h=fe17c823b36a870d880d45a1ef8b3e7a948baa41;hb=70083ee;hp=e5efb1faef7fe70fdfaa7bacc3ed2ce3fa6b0a1f;hpb=ad8015be47a8d7d4c1f94b51ad9c70e37cc29cbf;p=vpp.git diff --git a/src/vnet/interface_cli.c b/src/vnet/interface_cli.c index e5efb1faef7..fe17c823b36 100644 --- a/src/vnet/interface_cli.c +++ b/src/vnet/interface_cli.c @@ -365,11 +365,7 @@ show_sw_interfaces (vlib_main_t * vm, ip_lookup_main_t *lm4 = &im4->lookup_main; ip_lookup_main_t *lm6 = &im6->lookup_main; ip_interface_address_t *ia = 0; - ip4_address_t *r4; - ip6_address_t *r6; u32 fib_index4 = 0, fib_index6 = 0; - ip4_fib_t *fib4; - ip6_fib_t *fib6; if (vec_len (im4->fib_index_by_sw_if_index) > si->sw_if_index) fib_index4 = vec_elt (im4->fib_index_by_sw_if_index, @@ -379,85 +375,69 @@ show_sw_interfaces (vlib_main_t * vm, fib_index6 = vec_elt (im6->fib_index_by_sw_if_index, si->sw_if_index); - fib4 = ip4_fib_get (fib_index4); - fib6 = ip6_fib_get (fib_index6); + ip4_fib_t *fib4 = ip4_fib_get (fib_index4); + ip6_fib_t *fib6 = ip6_fib_get (fib_index6); if (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED) vlib_cli_output (vm, "%U (%s): \n unnumbered, use %U", - format_vnet_sw_if_index_name, - vnm, si->sw_if_index, + format_vnet_sw_if_index_name, vnm, si->sw_if_index, (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) ? "up" : "dn", format_vnet_sw_if_index_name, vnm, si->unnumbered_sw_if_index); - else - { - vlib_cli_output (vm, "%U (%s):", - format_vnet_sw_if_index_name, - vnm, si->sw_if_index, - (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) - ? "up" : "dn"); - } + vlib_cli_output + (vm, "%U (%s):", + format_vnet_sw_if_index_name, vnm, si->sw_if_index, + (si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) ? "up" : "dn"); /* Display any L2 info */ l2_input_config_t *l2_input = l2input_intf_config (si->sw_if_index); if (l2_input->bridge) { + bd_main_t *bdm = &bd_main; u32 bd_id = l2input_main.bd_configs[l2_input->bd_index].bd_id; - vlib_cli_output (vm, " l2 bridge bd_id %d%s%d", bd_id, - l2_input->bvi ? " bvi shg " : " shg ", - l2_input->shg); + vlib_cli_output (vm, " L2 bridge bd-id %d idx %d shg %d %s", + bd_id, bd_find_index (bdm, bd_id), l2_input->shg, + l2_input->bvi ? "bvi" : " "); } else if (l2_input->xconnect) - { - vlib_cli_output (vm, " l2 xconnect %U", - format_vnet_sw_if_index_name, - vnm, l2_input->output_sw_if_index); - } + vlib_cli_output (vm, " L2 xconnect %U", + format_vnet_sw_if_index_name, vnm, + l2_input->output_sw_if_index); + /* *INDENT-OFF* */ /* Display any IP4 addressing info */ - /* *INDENT-OFF* */ - foreach_ip_interface_address (lm4, ia, si->sw_if_index, - 1 /* honor unnumbered */, - ({ - r4 = ip_interface_address_get_address (lm4, ia); - if (fib4->table_id) - { - vlib_cli_output (vm, " %U/%d table %d", - format_ip4_address, r4, - ia->address_length, - fib4->table_id); - } - else - { - vlib_cli_output (vm, " %U/%d", - format_ip4_address, r4, - ia->address_length); - } - })); - /* *INDENT-ON* */ - + foreach_ip_interface_address (lm4, ia, si->sw_if_index, + 1 /* honor unnumbered */, + ({ + ip4_address_t *r4 = ip_interface_address_get_address (lm4, ia); + if (fib4->table_id) + vlib_cli_output (vm, " L3 %U/%d ip4 table-id %d fib-idx %d", + format_ip4_address, r4, ia->address_length, + fib4->table_id, + ip4_fib_index_from_table_id (fib4->table_id)); + else + vlib_cli_output (vm, " L3 %U/%d", + format_ip4_address, r4, ia->address_length); + })); + /* *INDENT-ON* */ + + /* *INDENT-OFF* */ /* Display any IP6 addressing info */ - /* *INDENT-OFF* */ - foreach_ip_interface_address (lm6, ia, si->sw_if_index, - 1 /* honor unnumbered */, - ({ - r6 = ip_interface_address_get_address (lm6, ia); - if (fib6->table_id) - { - vlib_cli_output (vm, " %U/%d table %d", - format_ip6_address, r6, - ia->address_length, - fib6->table_id); - } - else - { - vlib_cli_output (vm, " %U/%d", - format_ip6_address, r6, - ia->address_length); - } - })); - /* *INDENT-ON* */ + foreach_ip_interface_address (lm6, ia, si->sw_if_index, + 1 /* honor unnumbered */, + ({ + ip6_address_t *r6 = ip_interface_address_get_address (lm6, ia); + if (fib6->table_id) + vlib_cli_output (vm, " L3 %U/%d ip6 table-id %d fib-idx %d", + format_ip6_address, r6, ia->address_length, + fib6->table_id, + ip6_fib_index_from_table_id (fib6->table_id)); + else + vlib_cli_output (vm, " L3 %U/%d", + format_ip6_address, r6, ia->address_length); + })); + /* *INDENT-ON* */ } } else @@ -954,60 +934,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* */ @@ -1151,37 +1103,29 @@ static clib_error_t * 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; + u32 sw_if_index, mtu; - if (unformat (input, "%d %U", &mtu, - unformat_vnet_hw_interface, vnm, &hw_if_index)) + if (unformat (input, "%d %U", &mtu, unformat_vnet_sw_interface, vnm, + &sw_if_index)) { - vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, hw_if_index); - ethernet_interface_t *eif = ethernet_get_interface (em, hw_if_index); - - if (!eif) - return clib_error_return (0, "not supported"); - - if (mtu < hi->min_supported_packet_bytes) - return clib_error_return (0, "Invalid mtu (%d): " - "must be >= min pkt bytes (%d)", mtu, - hi->min_supported_packet_bytes); - - if (mtu > hi->max_supported_packet_bytes) - 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); - } + ; } else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + return clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + } + + int rv = vnet_sw_interface_set_mtu (vnm, sw_if_index, mtu); + if (rv < 0) + { + vnet_hw_interface_t *hi = vnet_get_sw_hw_interface (vnm, sw_if_index); + ASSERT (hi); + return clib_error_return (0, "Invalid mtu (%d): " + "must be between min pkt bytes (%d) and max pkt bytes (%d)", + mtu, hi->min_packet_bytes, + hi->max_packet_bytes); + } return 0; } @@ -1201,7 +1145,7 @@ set_interface_mac_address (vlib_main_t * vm, unformat_input_t * input, vnet_sw_interface_t *si = NULL; clib_error_t *error = 0; u32 sw_if_index = ~0; - u64 mac = 0; + u8 mac[6] = { 0 }; if (!unformat_user (input, unformat_vnet_sw_interface, vnm, &sw_if_index)) { @@ -1209,7 +1153,7 @@ set_interface_mac_address (vlib_main_t * vm, unformat_input_t * input, format_unformat_error, input); goto done; } - if (!unformat_user (input, unformat_ethernet_address, &mac)) + if (!unformat_user (input, unformat_ethernet_address, mac)) { error = clib_error_return (0, "expected mac address `%U'", format_unformat_error, input); @@ -1459,7 +1403,7 @@ set_interface_rx_mode (vlib_main_t * vm, unformat_input_t * input, * @cliexend ?*/ /* *INDENT-OFF* */ -VLIB_CLI_COMMAND (cmd_set_if_rx_mode,static) = { +VLIB_CLI_COMMAND (cmd_set_if_rx_mode, static) = { .path = "set interface rx-mode", .short_help = "set interface rx-mode [queue ] [polling | interrupt | adaptive]", .function = set_interface_rx_mode,