X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=095fe9617e2d7430bcb2e65776c6890d8d20b5e6;hb=388e51aaae5a845524410a8acdf1c0cbb4a13897;hp=d42e5fda84c092547a7779dbc9c51d9cafbe61f2;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index d42e5fda84c..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; @@ -240,6 +257,7 @@ typedef enum vnet_link_t_ VNET_LINK_MPLS, VNET_LINK_ETHERNET, VNET_LINK_ARP, + VNET_LINK_NSH, } __attribute__ ((packed)) vnet_link_t; #define VNET_LINKS { \ @@ -248,13 +266,14 @@ typedef enum vnet_link_t_ [VNET_LINK_IP6] = "ipv6", \ [VNET_LINK_MPLS] = "mpls", \ [VNET_LINK_ARP] = "arp", \ + [VNET_LINK_NSH] = "nsh", \ } /** * @brief Number of link types. Not part of the enum so it does not have to be included in * switch statements */ -#define VNET_LINK_NUM (VNET_LINK_ARP+1) +#define VNET_LINK_NUM (VNET_LINK_NSH+1) /** * @brief Convert a link to to an Ethertype @@ -403,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; @@ -462,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; @@ -536,6 +570,12 @@ typedef struct #define VNET_SW_INTERFACE_FLAG_BOND_SLAVE (1 << 4) +/* 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;