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,
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
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 (~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 (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 (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* */
{
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,
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'",
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))
{
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;
}
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");
}
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");
}
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)
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;
(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"))
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);
}