X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_cli.c;h=8880d9749b8ab1f591ebdc964459fcbadd1a5e75;hb=ffd78d1ef8fe80d1b756a71d42d5eadda60ae996;hp=f37f139b48a12f4c3502441239579c9d2b46deff;hpb=e9bac6953d03440f2f7437f4e3f0a4e3bf7f8a60;p=vpp.git diff --git a/src/vnet/interface_cli.c b/src/vnet/interface_cli.c index f37f139b48a..8880d9749b8 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 @@ -1152,7 +1132,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, @@ -1173,11 +1152,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'", @@ -1198,9 +1173,10 @@ set_interface_mac_address (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { vnet_main_t *vnm = vnet_get_main (); + 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)) { @@ -1208,13 +1184,14 @@ 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); goto done; } - error = vnet_hw_interface_change_mac_address (vnm, sw_if_index, mac); + si = vnet_get_sw_interface (vnm, sw_if_index); + error = vnet_hw_interface_change_mac_address (vnm, si->hw_if_index, mac); done: return error; } @@ -1313,6 +1290,8 @@ set_hw_interface_rx_mode (vnet_main_t * vnm, u32 hw_if_index, break; case VNET_API_ERROR_INVALID_INTERFACE: return clib_error_return (0, "invalid interface"); + case VNET_API_ERROR_INVALID_QUEUE: + return clib_error_return (0, "invalid queue"); default: return clib_error_return (0, "unknown error"); } @@ -1334,6 +1313,8 @@ set_hw_interface_rx_mode (vnet_main_t * vnm, u32 hw_if_index, return clib_error_return (0, "unsupported"); case VNET_API_ERROR_INVALID_INTERFACE: return clib_error_return (0, "invalid interface"); + case VNET_API_ERROR_INVALID_QUEUE: + return clib_error_return (0, "invalid queue"); default: return clib_error_return (0, "unknown error"); } @@ -1341,6 +1322,33 @@ set_hw_interface_rx_mode (vnet_main_t * vnm, u32 hw_if_index, return 0; } +clib_error_t * +set_hw_interface_change_rx_mode (vnet_main_t * vnm, u32 hw_if_index, + u8 queue_id_valid, u32 queue_id, + vnet_hw_interface_rx_mode mode) +{ + clib_error_t *error = 0; + vnet_hw_interface_t *hw; + int i; + + hw = vnet_get_hw_interface (vnm, hw_if_index); + + if (queue_id_valid == 0) + { + for (i = 0; i < vec_len (hw->dq_runtime_index_by_queue); i++) + { + error = set_hw_interface_rx_mode (vnm, hw_if_index, i, mode); + if (error) + break; + } + hw->default_rx_mode = mode; + } + else + error = set_hw_interface_rx_mode (vnm, hw_if_index, queue_id, mode); + + return (error); +} + static clib_error_t * set_interface_rx_mode (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -1348,11 +1356,10 @@ set_interface_rx_mode (vlib_main_t * vm, unformat_input_t * input, clib_error_t *error = 0; unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); - vnet_hw_interface_t *hw; u32 hw_if_index = (u32) ~ 0; u32 queue_id = (u32) ~ 0; vnet_hw_interface_rx_mode mode = VNET_HW_INTERFACE_RX_MODE_UNKNOWN; - int i; + u8 queue_id_valid = 0; if (!unformat_user (input, unformat_line_input, line_input)) return 0; @@ -1363,7 +1370,7 @@ set_interface_rx_mode (vlib_main_t * vm, unformat_input_t * input, (line_input, "%U", unformat_vnet_hw_interface, vnm, &hw_if_index)) ; else if (unformat (line_input, "queue %d", &queue_id)) - ; + queue_id_valid = 1; else if (unformat (line_input, "polling")) mode = VNET_HW_INTERFACE_RX_MODE_POLLING; else if (unformat (line_input, "interrupt")) @@ -1387,20 +1394,8 @@ set_interface_rx_mode (vlib_main_t * vm, unformat_input_t * input, if (mode == VNET_HW_INTERFACE_RX_MODE_UNKNOWN) return clib_error_return (0, "please specify valid rx-mode"); - hw = vnet_get_hw_interface (vnm, hw_if_index); - - if (queue_id == ~0) - { - for (i = 0; i < vec_len (hw->dq_runtime_index_by_queue); i++) - { - error = set_hw_interface_rx_mode (vnm, hw_if_index, i, mode); - if (error) - break; - } - hw->default_rx_mode = mode; - } - else - error = set_hw_interface_rx_mode (vnm, hw_if_index, queue_id, mode); + error = set_hw_interface_change_rx_mode (vnm, hw_if_index, queue_id_valid, + queue_id, mode); return (error); }