}
vnet_hw_interface_assign_rx_thread (vnm, mif->hw_if_index, i, ~0);
rv = vnet_hw_interface_set_rx_mode (vnm, mif->hw_if_index, i,
- VNET_HW_INTERFACE_RX_MODE_INTERRUPT);
+ VNET_HW_INTERFACE_RX_MODE_DEFAULT);
if (rv)
clib_warning
("Warning: unable to set rx mode for interface %d queue %d: "
vnet_device_input_runtime_t *rt;
int is_polling = 0;
+ if (mode == VNET_HW_INTERFACE_RX_MODE_DEFAULT)
+ mode = hw->default_rx_mode;
+
if (hw->input_node_thread_index_by_queue == 0 || hw->rx_mode_by_queue == 0)
return VNET_API_ERROR_INVALID_INTERFACE;
hw_index = hw - im->hw_interfaces;
hw->hw_if_index = hw_index;
+ hw->default_rx_mode = VNET_HW_INTERFACE_RX_MODE_POLLING;
if (dev_class->format_device_name)
hw->name = format (0, "%U", dev_class->format_device_name, dev_instance);
VNET_HW_INTERFACE_RX_MODE_POLLING,
VNET_HW_INTERFACE_RX_MODE_INTERRUPT,
VNET_HW_INTERFACE_RX_MODE_ADAPTIVE,
+ VNET_HW_INTERFACE_RX_MODE_DEFAULT,
VNET_HW_INTERFACE_NUM_RX_MODES,
} vnet_hw_interface_rx_mode;
/* vnet_hw_interface_rx_mode by queue */
u8 *rx_mode_by_queue;
+ vnet_hw_interface_rx_mode default_rx_mode;
/* device input device_and_queue runtime index */
uword *dq_runtime_index_by_queue;
vnet_hw_interface_rx_mode old_mode;
int rv;
+ if (mode == VNET_HW_INTERFACE_RX_MODE_DEFAULT)
+ mode = hw->default_rx_mode;
+
rv = vnet_hw_interface_get_rx_mode (vnm, hw_if_index, queue_id, &old_mode);
switch (rv)
{
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;
- }
+ {
+ 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);