X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=095fe9617e2d7430bcb2e65776c6890d8d20b5e6;hb=259fca789a9f02c5bf60fd0734ba97045d4595bc;hp=ef8f9118fbe3704eb82a0ff524ec4df31f30c039;hpb=3212c57087069c5137abe4919ac1336e79fa93e9;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index ef8f9118fbe..095fe9617e2 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -48,6 +48,15 @@ struct vnet_hw_interface_t; struct vnet_sw_interface_t; struct ip46_address_t; +typedef enum +{ + VNET_HW_INTERFACE_RX_MODE_UNKNOWN, + VNET_HW_INTERFACE_RX_MODE_POLLING, + VNET_HW_INTERFACE_RX_MODE_INTERRUPT, + VNET_HW_INTERFACE_RX_MODE_ADAPTIVE, + VNET_HW_INTERFACE_NUM_RX_MODES, +} vnet_hw_interface_rx_mode; + /* Interface up/down callback. */ typedef clib_error_t *(vnet_interface_function_t) (struct vnet_main_t * vnm, u32 if_index, u32 flags); @@ -61,6 +70,11 @@ typedef clib_error_t *(vnet_subif_add_del_function_t) typedef clib_error_t *(vnet_interface_set_mac_address_function_t) (struct vnet_hw_interface_t * hi, char *address); +/* Interface set rx mode callback. */ +typedef clib_error_t *(vnet_interface_set_rx_mode_function_t) + (struct vnet_main_t * vnm, u32 if_index, u32 queue_id, + vnet_hw_interface_rx_mode mode); + typedef enum vnet_interface_function_priority_t_ { VNET_ITF_FUNC_PRIORITY_LOW, @@ -134,6 +148,9 @@ typedef struct _vnet_device_class /* Function to call when sub-interface is added/deleted */ vnet_subif_add_del_function_t *subif_add_del_function; + /* Function to call interface rx mode is changed */ + vnet_interface_set_rx_mode_function_t *rx_mode_change_function; + /* Redistribute flag changes/existence of this interface class. */ u32 redistribute; @@ -405,6 +422,9 @@ typedef struct vnet_hw_interface_t #define VNET_HW_INTERFACE_FLAG_L2OUTPUT_SHIFT 9 #define VNET_HW_INTERFACE_FLAG_L2OUTPUT_MAPPED (1 << 9) + /* rx mode flags */ +#define VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE (1 << 10) + /* Hardware address as vector. Zero (e.g. zero-length vector) if no address for this class (e.g. PPP). */ u8 *hw_address; @@ -464,6 +484,18 @@ typedef struct vnet_hw_interface_t #define VNET_HW_INTERFACE_BOND_INFO_NONE ((uword *) 0) #define VNET_HW_INTERFACE_BOND_INFO_SLAVE ((uword *) ~0) + /* Input node */ + u32 input_node_index; + + /* input node cpu index by queue */ + u32 *input_node_thread_index_by_queue; + + /* vnet_hw_interface_rx_mode by queue */ + u8 *rx_mode_by_queue; + + /* device input device_and_queue runtime index */ + uword *dq_runtime_index_by_queue; + } vnet_hw_interface_t; extern vnet_device_class_t vnet_local_interface_device_class; @@ -541,6 +573,9 @@ typedef struct /* Interface does not appear in CLI/API */ #define VNET_SW_INTERFACE_FLAG_HIDDEN (1 << 5) +/* Interface in ERROR state */ +#define VNET_SW_INTERFACE_FLAG_ERROR (1 << 6) + /* Index for this interface. */ u32 sw_if_index;