}
always_inline vnet_hw_interface_t *
-vnet_get_hw_interface_safe (vnet_main_t * vnm, u32 hw_if_index)
+vnet_get_hw_interface_or_null (vnet_main_t * vnm, u32 hw_if_index)
{
if (!pool_is_free_index (vnm->interface_main.hw_interfaces, hw_if_index))
return pool_elt_at_index (vnm->interface_main.hw_interfaces, hw_if_index);
}
always_inline vnet_sw_interface_t *
-vnet_get_sw_interface_safe (vnet_main_t * vnm, u32 sw_if_index)
+vnet_get_sw_interface_or_null (vnet_main_t * vnm, u32 sw_if_index)
{
if (!pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index))
return pool_elt_at_index (vnm->interface_main.sw_interfaces, sw_if_index);
return vnet_get_hw_interface (vnm, sw->hw_if_index);
}
+always_inline vnet_hw_interface_t *
+vnet_get_sup_hw_interface_api_visible_or_null (vnet_main_t * vnm,
+ u32 sw_if_index)
+{
+ vnet_sw_interface_t *si;
+ if (PREDICT_FALSE (pool_is_free_index (vnm->interface_main.sw_interfaces,
+ sw_if_index)))
+ return NULL;
+ si = vnet_get_sup_sw_interface (vnm, sw_if_index);
+ if (PREDICT_FALSE (si->flags & VNET_SW_INTERFACE_FLAG_HIDDEN))
+ return NULL;
+ ASSERT ((si->type == VNET_SW_INTERFACE_TYPE_HARDWARE) ||
+ (si->type == VNET_SW_INTERFACE_TYPE_PIPE));
+ return vnet_get_hw_interface (vnm, si->hw_if_index);
+}
+
always_inline vnet_hw_interface_class_t *
vnet_get_hw_interface_class (vnet_main_t * vnm, u32 hw_class_index)
{
void vnet_delete_hw_interface (vnet_main_t * vnm, u32 hw_if_index);
void vnet_delete_sw_interface (vnet_main_t * vnm, u32 sw_if_index);
int vnet_sw_interface_is_p2p (vnet_main_t * vnm, u32 sw_if_index);
+int vnet_sw_interface_is_nbma (vnet_main_t * vnm, u32 sw_if_index);
always_inline vnet_sw_interface_flags_t
vnet_sw_interface_get_flags (vnet_main_t * vnm, u32 sw_if_index)
always_inline uword
vnet_hw_interface_is_link_up (vnet_main_t * vnm, u32 hw_if_index)
{
- return (vnet_hw_interface_get_flags (vnm, hw_if_index) &
- VNET_HW_INTERFACE_FLAG_LINK_UP) != 0;
+ return ((vnet_hw_interface_get_flags (vnm, hw_if_index) &
+ VNET_HW_INTERFACE_FLAG_LINK_UP) != 0);
+}
+
+always_inline uword
+vnet_sw_interface_is_link_up (vnet_main_t * vnm, u32 sw_if_index)
+{
+ vnet_sw_interface_t *sw = vnet_get_sup_sw_interface (vnm, sw_if_index);
+
+ return (vnet_hw_interface_is_link_up (vnm, sw->hw_if_index));
+}
+
+always_inline uword
+vnet_sw_interface_is_up (vnet_main_t * vnm, u32 sw_if_index)
+{
+ return (vnet_sw_interface_is_admin_up (vnm, sw_if_index) &&
+ vnet_sw_interface_is_link_up (vnm, sw_if_index));
}
always_inline vlib_frame_t *
clib_error_t *vnet_sw_interface_set_flags (vnet_main_t * vnm, u32 sw_if_index,
vnet_sw_interface_flags_t flags);
+void vnet_sw_interface_admin_up (vnet_main_t * vnm, u32 sw_if_index);
+void vnet_sw_interface_admin_down (vnet_main_t * vnm, u32 sw_if_index);
+
/* Change interface class. */
clib_error_t *vnet_hw_interface_set_class (vnet_main_t * vnm, u32 hw_if_index,
u32 new_hw_class_index);
clib_error_t *vnet_rename_interface (vnet_main_t * vnm, u32 hw_if_index,
char *new_name);
+/* Add/delete secondary interface mac address*/
+clib_error_t *vnet_hw_interface_add_del_mac_address (vnet_main_t * vnm,
+ u32 hw_if_index,
+ const u8 * mac_address,
+ u8 is_add);
+
/* Change interface mac address*/
clib_error_t *vnet_hw_interface_change_mac_address (vnet_main_t * vnm,
u32 hw_if_index,
void vnet_sw_interface_ip_directed_broadcast (vnet_main_t * vnm,
u32 sw_if_index, u8 enable);
+/* set interface rss queues */
+clib_error_t *vnet_hw_interface_set_rss_queues (vnet_main_t * vnm,
+ vnet_hw_interface_t * hi,
+ clib_bitmap_t * bitmap);
+
/* Formats sw/hw interface. */
format_function_t format_vnet_hw_interface;
format_function_t format_vnet_hw_interface_rx_mode;
/* Parses sw/hw interface name -> index. */
unformat_function_t unformat_vnet_sw_interface;
unformat_function_t unformat_vnet_hw_interface;
+unformat_function_t unformat_vnet_buffer_flags;
/* Parses interface flags (up, down, enable, disable, etc.) */
unformat_function_t unformat_vnet_hw_interface_flags;
unformat_function_t unformat_vnet_sw_interface_flags;
+/* VLAN tag-rewrite */
+format_function_t format_vtr;
+
/* Node runtime for interface output function. */
typedef struct
{
{
VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DOWN,
VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DELETED,
+ VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO,
+ VNET_INTERFACE_OUTPUT_ERROR_UNHANDLED_GSO_TYPE,
} vnet_interface_output_error_t;
/* Format for interface output traces. */