Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rte_ethdev.h(3)			     DPDK		       rte_ethdev.h(3)

NAME
       rte_ethdev.h

SYNOPSIS
       #include	<stdint.h>
       #include	<rte_cman.h>
       #include	<rte_compat.h>
       #include	<rte_log.h>
       #include	<rte_interrupts.h>
       #include	<rte_dev.h>
       #include	<rte_devargs.h>
       #include	<rte_bitops.h>
       #include	<rte_errno.h>
       #include	<rte_common.h>
       #include	<rte_config.h>
       #include	<rte_power_intrinsics.h>
       #include	'rte_ethdev_trace_fp.h'
       #include	'rte_dev_info.h'
       #include	'rte_eth_ctrl.h'
       #include	<rte_ethdev_core.h>

   Data	Structures
       struct rte_eth_stats
       struct rte_eth_link
       struct rte_eth_speed_lanes_capa
       struct rte_eth_thresh
       struct rte_eth_rxmode
       struct rte_vlan_filter_conf
       struct rte_eth_rss_conf
       struct rte_eth_rss_reta_entry64
       struct rte_eth_vmdq_dcb_conf
       struct rte_eth_vmdq_rx_conf
       struct rte_eth_txmode
       struct rte_eth_rxseg_split
       union rte_eth_rxseg
       struct rte_eth_rxconf
       struct rte_eth_txconf
       struct rte_eth_hairpin_queue_cap
       struct rte_eth_hairpin_cap
       struct rte_eth_hairpin_peer
       struct rte_eth_hairpin_conf
       struct rte_eth_desc_lim
       struct rte_eth_fc_conf
       struct rte_eth_pfc_conf
       struct rte_eth_pfc_queue_info
       struct rte_eth_pfc_queue_conf
       struct rte_eth_udp_tunnel
       struct rte_eth_intr_conf
       struct rte_eth_conf
       struct rte_eth_dev_portconf
       struct rte_eth_switch_info
       struct rte_eth_rxseg_capa
       struct rte_eth_dev_info
       struct rte_eth_rxq_info
       struct rte_eth_txq_info
       struct rte_eth_recycle_rxq_info
       struct rte_eth_burst_mode
       struct rte_eth_xstat
       struct rte_eth_xstat_name
       struct rte_eth_dcb_tc_queue_mapping
       struct rte_eth_dcb_info
       struct rte_eth_dev_tx_buffer
       struct rte_eth_event_macsec_desc
       struct rte_eth_event_ipsec_desc
       struct rte_eth_representor_range
       struct rte_eth_representor_info
       struct rte_eth_ip_reassembly_params
       struct rte_eth_ip_reassembly_dynfield_t
       struct rte_eth_cman_info
       struct rte_eth_cman_config

   Macros
       #define RTE_ETH_FOREACH_MATCHING_DEV(id,	 devargs,  iter)
       #define RTE_ETH_SPEED_LANES_TO_CAPA(x)	RTE_BIT32(x)
       #define RTE_ETH_FLOW_PORT   18
       #define RTE_ETH_FLOW_VXLAN   19
       #define RTE_ETH_FLOW_GENEVE   20
       #define RTE_ETH_FLOW_NVGRE   21
       #define RTE_ETH_FLOW_VXLAN_GPE	22
       #define RTE_ETH_FLOW_GTPU   23
       #define RTE_ETH_RSS_L4_CHKSUM   RTE_BIT64(35)
       #define RTE_ETH_RSS_IB_BTH   RTE_BIT64(38)
       #define RTE_ETH_RSS_LEVEL_PMD_DEFAULT   (UINT64_C(0) << 50)
       #define RTE_ETH_RSS_LEVEL_OUTERMOST   (UINT64_C(1) << 50)
       #define RTE_ETH_RSS_LEVEL_INNERMOST   (UINT64_C(2) << 50)
       #define RTE_ETH_RSS_PROTO_MASK
       #define RTE_ETH_NUM_RECEIVE_MAC_ADDR   128
       #define RTE_ETH_VMDQ_NUM_UC_HASH_ARRAY	128
       #define RTE_ETH_RX_OFFLOAD_VLAN_STRIP   RTE_BIT64(0)
       #define RTE_ETH_RX_OFFLOAD_TIMESTAMP   RTE_BIT64(14)
       #define RTE_ETH_TX_OFFLOAD_VLAN_INSERT	RTE_BIT64(0)
       #define RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM   RTE_BIT64(7)
       #define RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO	  RTE_BIT64(9)
       #define RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO	RTE_BIT64(10)
       #define RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO	 RTE_BIT64(11)
       #define RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO   RTE_BIT64(12)
       #define RTE_ETH_TX_OFFLOAD_MT_LOCKFREE	RTE_BIT64(14)
       #define RTE_ETH_TX_OFFLOAD_MULTI_SEGS   RTE_BIT64(15)
       #define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE   RTE_BIT64(16)
       #define RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO	RTE_BIT64(18)
       #define RTE_ETH_TX_OFFLOAD_IP_TNL_TSO   RTE_BIT64(19)
       #define RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM   RTE_BIT64(20)
       #define RTE_ETH_TX_OFFLOAD_SEND_ON_TIMESTAMP   RTE_BIT64(21)
       #define RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID   (UINT16_MAX)
       #define RTE_ETH_BURST_FLAG_PER_QUEUE   RTE_BIT64(0)
       #define RTE_ETH_BURST_MODE_INFO_SIZE   1024
       #define RTE_ETH_XSTATS_NAME_SIZE	  64
       #define RTE_ETH_FOREACH_DEV_OWNED_BY(p,	o)
       #define RTE_ETH_FOREACH_DEV(p)	  RTE_ETH_FOREACH_DEV_OWNED_BY(p,
	   RTE_ETH_DEV_NO_OWNER)
       #define RTE_ETH_FOREACH_DEV_OF(port_id,	parent)
       #define RTE_ETH_FOREACH_DEV_SIBLING(port_id,  ref_port_id)
       #define RTE_ETH_TX_BUFFER_SIZE(sz)      (sizeof(struct
	   rte_eth_dev_tx_buffer) + (sz) * sizeof(struct rte_mbuf *))
       #define RTE_ETH_RX_METADATA_USER_FLAG   RTE_BIT64(0)
       #define RTE_ETH_RX_METADATA_USER_MARK   RTE_BIT64(1)
       #define RTE_ETH_RX_METADATA_TUNNEL_ID   RTE_BIT64(2)
       #define RTE_ETH_DEV_REASSEMBLY_F_IPV4   (RTE_BIT32(0))
       #define RTE_ETH_DEV_REASSEMBLY_F_IPV6   (RTE_BIT32(1))

       Link speed capabilities
       Device supported	speeds bitmap flags

	   #define RTE_ETH_LINK_SPEED_AUTONEG	0
	   #define RTE_ETH_LINK_SPEED_FIXED   RTE_BIT32(0)
	   #define RTE_ETH_LINK_SPEED_10M_HD   RTE_BIT32(1)
	   #define RTE_ETH_LINK_SPEED_10M   RTE_BIT32(2)
	   #define RTE_ETH_LINK_SPEED_100M_HD	RTE_BIT32(3)
	   #define RTE_ETH_LINK_SPEED_100M   RTE_BIT32(4)
	   #define RTE_ETH_LINK_SPEED_1G   RTE_BIT32(5)
	   #define RTE_ETH_LINK_SPEED_2_5G   RTE_BIT32(6)
	   #define RTE_ETH_LINK_SPEED_5G   RTE_BIT32(7)
	   #define RTE_ETH_LINK_SPEED_10G   RTE_BIT32(8)
	   #define RTE_ETH_LINK_SPEED_20G   RTE_BIT32(9)
	   #define RTE_ETH_LINK_SPEED_25G   RTE_BIT32(10)
	   #define RTE_ETH_LINK_SPEED_40G   RTE_BIT32(11)
	   #define RTE_ETH_LINK_SPEED_50G   RTE_BIT32(12)
	   #define RTE_ETH_LINK_SPEED_56G   RTE_BIT32(13)
	   #define RTE_ETH_LINK_SPEED_100G   RTE_BIT32(14)
	   #define RTE_ETH_LINK_SPEED_200G   RTE_BIT32(15)
	   #define RTE_ETH_LINK_SPEED_400G   RTE_BIT32(16)
	   #define RTE_ETH_LINK_SPEED_800G   RTE_BIT32(17)

       Link speed
       Ethernet	numeric	link speeds in Mbps

	   #define RTE_ETH_SPEED_NUM_NONE   0
	   #define RTE_ETH_SPEED_NUM_10M   10
	   #define RTE_ETH_SPEED_NUM_100M   100
	   #define RTE_ETH_SPEED_NUM_1G	  1000
	   #define RTE_ETH_SPEED_NUM_2_5G   2500
	   #define RTE_ETH_SPEED_NUM_5G	  5000
	   #define RTE_ETH_SPEED_NUM_10G   10000
	   #define RTE_ETH_SPEED_NUM_20G   20000
	   #define RTE_ETH_SPEED_NUM_25G   25000
	   #define RTE_ETH_SPEED_NUM_40G   40000
	   #define RTE_ETH_SPEED_NUM_50G   50000
	   #define RTE_ETH_SPEED_NUM_56G   56000
	   #define RTE_ETH_SPEED_NUM_100G   100000
	   #define RTE_ETH_SPEED_NUM_200G   200000
	   #define RTE_ETH_SPEED_NUM_400G   400000
	   #define RTE_ETH_SPEED_NUM_800G   800000
	   #define RTE_ETH_SPEED_NUM_UNKNOWN   UINT32_MAX

       Link negotiation
       Constants used in link management.

	   #define RTE_ETH_LINK_HALF_DUPLEX   0
	   #define RTE_ETH_LINK_FULL_DUPLEX   1
	   #define RTE_ETH_LINK_DOWN   0
	   #define RTE_ETH_LINK_UP   1
	   #define RTE_ETH_LINK_FIXED	0
	   #define RTE_ETH_LINK_AUTONEG	  1
	   #define RTE_ETH_LINK_MAX_STR_LEN   40

       Multi-queue mode

       See also
	   rte_eth_conf.rxmode.mq_mode.

	   #define RTE_ETH_MQ_RX_RSS_FLAG   RTE_BIT32(0)
	   #define RTE_ETH_MQ_RX_DCB_FLAG   RTE_BIT32(1)
	   #define RTE_ETH_MQ_RX_VMDQ_FLAG   RTE_BIT32(2)

       VMDq and	DCB maximums

	   #define RTE_ETH_VMDQ_MAX_VLAN_FILTERS   64
	   #define RTE_ETH_DCB_NUM_USER_PRIORITIES   8
	   #define RTE_ETH_VMDQ_DCB_NUM_QUEUES	 128
	   #define RTE_ETH_DCB_NUM_QUEUES   128

       DCB capabilities

	   #define RTE_ETH_DCB_PG_SUPPORT   RTE_BIT32(0)
	   #define RTE_ETH_DCB_PFC_SUPPORT   RTE_BIT32(1)

       VLAN offload bits

	   #define RTE_ETH_VLAN_STRIP_OFFLOAD	0x0001
	   #define RTE_ETH_VLAN_FILTER_OFFLOAD	 0x0002
	   #define RTE_ETH_VLAN_EXTEND_OFFLOAD	 0x0004
	   #define RTE_ETH_QINQ_STRIP_OFFLOAD	0x0008
	   #define RTE_ETH_VLAN_STRIP_MASK   0x0001
	   #define RTE_ETH_VLAN_FILTER_MASK   0x0002
	   #define RTE_ETH_VLAN_EXTEND_MASK   0x0004
	   #define RTE_ETH_QINQ_STRIP_MASK   0x0008
	   #define RTE_ETH_VLAN_ID_MAX	 0x0FFF

       VMDq Rx mode

       See also
	   rte_eth_vmdq_rx_conf.rx_mode

	   #define RTE_ETH_VMDQ_ACCEPT_UNTAG   RTE_BIT32(0)
	   #define RTE_ETH_VMDQ_ACCEPT_HASH_MC	 RTE_BIT32(1)
	   #define RTE_ETH_VMDQ_ACCEPT_HASH_UC	 RTE_BIT32(2)
	   #define RTE_ETH_VMDQ_ACCEPT_BROADCAST   RTE_BIT32(3)
	   #define RTE_ETH_VMDQ_ACCEPT_MULTICAST   RTE_BIT32(4)

       Device capabilities
       Non-offload capabilities	reported in rte_eth_dev_info.dev_capa.

	   #define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP   RTE_BIT64(0)
	   #define RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP   RTE_BIT64(1)
	   #define RTE_ETH_DEV_CAPA_RXQ_SHARE	RTE_BIT64(2)
	   #define RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP   RTE_BIT64(3)
	   #define RTE_ETH_DEV_CAPA_FLOW_SHARED_OBJECT_KEEP   RTE_BIT64(4)

       Rx/Tx queue states

	   #define RTE_ETH_QUEUE_STATE_STOPPED	 0
	   #define RTE_ETH_QUEUE_STATE_STARTED	 1
	   #define RTE_ETH_QUEUE_STATE_HAIRPIN	 2

       Device flags
       Flags internally	saved in rte_eth_dev_data.dev_flags and	reported in
       rte_eth_dev_info.dev_flags.

	   #define RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE   RTE_BIT32(0)
	   #define RTE_ETH_DEV_INTR_LSC	  RTE_BIT32(1)
	   #define RTE_ETH_DEV_BONDING_MEMBER	RTE_BIT32(2)
	   #define RTE_ETH_DEV_INTR_RMV	  RTE_BIT32(3)
	   #define RTE_ETH_DEV_REPRESENTOR   RTE_BIT32(4)
	   #define RTE_ETH_DEV_NOLIVE_MAC_ADDR	 RTE_BIT32(5)
	   #define RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS   RTE_BIT32(6)

       Rx hardware descriptor states

       See also
	   rte_eth_rx_descriptor_status

	   #define RTE_ETH_RX_DESC_AVAIL   0
	   #define RTE_ETH_RX_DESC_DONE	  1
	   #define RTE_ETH_RX_DESC_UNAVAIL   2

       Tx hardware descriptor states

       See also
	   rte_eth_tx_descriptor_status

	   #define RTE_ETH_TX_DESC_FULL	  0
	   #define RTE_ETH_TX_DESC_DONE	  1
	   #define RTE_ETH_TX_DESC_UNAVAIL   2

   Typedefs
       typedef uint16_t(* rte_rx_callback_fn) (uint16_t	port_id, uint16_t
	   queue, struct rte_mbuf *pkts[], uint16_t nb_pkts, uint16_t
	   max_pkts, void *user_param)
       typedef uint16_t(* rte_tx_callback_fn) (uint16_t	port_id, uint16_t
	   queue, struct rte_mbuf *pkts[], uint16_t nb_pkts, void *user_param)
       typedef int(* rte_eth_dev_cb_fn)	(uint16_t port_id, enum
	   rte_eth_event_type event, void *cb_arg, void	*ret_param)

   Enumerations
       enum rte_eth_link_connector { RTE_ETH_LINK_CONNECTOR_NONE = 0,
	   RTE_ETH_LINK_CONNECTOR_TP, RTE_ETH_LINK_CONNECTOR_AUI,
	   RTE_ETH_LINK_CONNECTOR_MII, RTE_ETH_LINK_CONNECTOR_FIBER,
	   RTE_ETH_LINK_CONNECTOR_BNC, RTE_ETH_LINK_CONNECTOR_DAC,
	   RTE_ETH_LINK_CONNECTOR_SGMII, RTE_ETH_LINK_CONNECTOR_QSGMII,
	   RTE_ETH_LINK_CONNECTOR_XFI, RTE_ETH_LINK_CONNECTOR_SFI,
	   RTE_ETH_LINK_CONNECTOR_XLAUI, RTE_ETH_LINK_CONNECTOR_GAUI,
	   RTE_ETH_LINK_CONNECTOR_XAUI,	RTE_ETH_LINK_CONNECTOR_CAUI,
	   RTE_ETH_LINK_CONNECTOR_LAUI,	RTE_ETH_LINK_CONNECTOR_SFP,
	   RTE_ETH_LINK_CONNECTOR_SFP_PLUS, RTE_ETH_LINK_CONNECTOR_SFP28,
	   RTE_ETH_LINK_CONNECTOR_SFP_DD, RTE_ETH_LINK_CONNECTOR_QSFP,
	   RTE_ETH_LINK_CONNECTOR_QSFP_PLUS, RTE_ETH_LINK_CONNECTOR_QSFP28,
	   RTE_ETH_LINK_CONNECTOR_QSFP56, RTE_ETH_LINK_CONNECTOR_QSFP_DD,
	   RTE_ETH_LINK_CONNECTOR_OTHER	= 63 }
       enum rte_eth_rx_mq_mode { RTE_ETH_MQ_RX_NONE = 0, RTE_ETH_MQ_RX_RSS =
	   RTE_ETH_MQ_RX_RSS_FLAG, RTE_ETH_MQ_RX_DCB = RTE_ETH_MQ_RX_DCB_FLAG,
	   RTE_ETH_MQ_RX_DCB_RSS = RTE_ETH_MQ_RX_RSS_FLAG |
	   RTE_ETH_MQ_RX_DCB_FLAG, RTE_ETH_MQ_RX_VMDQ_ONLY =
	   RTE_ETH_MQ_RX_VMDQ_FLAG, RTE_ETH_MQ_RX_VMDQ_RSS =
	   RTE_ETH_MQ_RX_RSS_FLAG | RTE_ETH_MQ_RX_VMDQ_FLAG,
	   RTE_ETH_MQ_RX_VMDQ_DCB = RTE_ETH_MQ_RX_VMDQ_FLAG |
	   RTE_ETH_MQ_RX_DCB_FLAG, RTE_ETH_MQ_RX_VMDQ_DCB_RSS }
       enum rte_eth_tx_mq_mode { RTE_ETH_MQ_TX_NONE = 0, RTE_ETH_MQ_TX_DCB,
	   RTE_ETH_MQ_TX_VMDQ_DCB, RTE_ETH_MQ_TX_VMDQ_ONLY }
       enum rte_vlan_type {  }
       enum rte_eth_hash_function { RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
	   RTE_ETH_HASH_FUNCTION_TOEPLITZ, RTE_ETH_HASH_FUNCTION_SIMPLE_XOR,
	   RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ,
	   RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT,
	   RTE_ETH_HASH_FUNCTION_MAX }
       enum rte_eth_nb_tcs { RTE_ETH_4_TCS = 4,	RTE_ETH_8_TCS =	8 }
       enum rte_eth_nb_pools { RTE_ETH_8_POOLS = 8, RTE_ETH_16_POOLS = 16,
	   RTE_ETH_32_POOLS = 32, RTE_ETH_64_POOLS = 64	}
       enum rte_eth_fc_mode { RTE_ETH_FC_NONE =	0, RTE_ETH_FC_RX_PAUSE,
	   RTE_ETH_FC_TX_PAUSE,	RTE_ETH_FC_FULL	}
       enum rte_eth_tunnel_type
       enum rte_eth_representor_type { RTE_ETH_REPRESENTOR_NONE,
	   RTE_ETH_REPRESENTOR_VF, RTE_ETH_REPRESENTOR_SF,
	   RTE_ETH_REPRESENTOR_PF }
       enum rte_eth_err_handle_mode { RTE_ETH_ERROR_HANDLE_MODE_NONE,
	   RTE_ETH_ERROR_HANDLE_MODE_PASSIVE,
	   RTE_ETH_ERROR_HANDLE_MODE_PROACTIVE }
       enum rte_eth_fec_mode { RTE_ETH_FEC_NOFEC = 0, RTE_ETH_FEC_AUTO,
	   RTE_ETH_FEC_BASER, RTE_ETH_FEC_RS, RTE_ETH_FEC_LLRS }
       enum rte_eth_dev_state {	RTE_ETH_DEV_UNUSED = 0,	RTE_ETH_DEV_ATTACHED,
	   RTE_ETH_DEV_REMOVED }
       enum rte_eth_event_macsec_subtype { RTE_ETH_SUBEVENT_MACSEC_UNKNOWN,
	   RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_V_EQ1,
	   RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_E_EQ0_C_EQ1,
	   RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_SL_GTE48,
	   RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_ES_EQ1_SC_EQ1,
	   RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_SC_EQ1_SCB_EQ1 }
       enum rte_eth_event_macsec_type {	RTE_ETH_EVENT_MACSEC_UNKNOWN,
	   RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR,
	   RTE_ETH_EVENT_MACSEC_RX_SA_PN_HARD_EXP,
	   RTE_ETH_EVENT_MACSEC_RX_SA_PN_SOFT_EXP,
	   RTE_ETH_EVENT_MACSEC_TX_SA_PN_HARD_EXP,
	   RTE_ETH_EVENT_MACSEC_TX_SA_PN_SOFT_EXP,
	   RTE_ETH_EVENT_MACSEC_SA_NOT_VALID }
       enum rte_eth_event_ipsec_subtype	{ RTE_ETH_EVENT_IPSEC_PMD_ERROR_START
	   = -256, RTE_ETH_EVENT_IPSEC_PMD_ERROR_END = -1,
	   RTE_ETH_EVENT_IPSEC_UNKNOWN = 0, RTE_ETH_EVENT_IPSEC_ESN_OVERFLOW,
	   RTE_ETH_EVENT_IPSEC_SA_TIME_EXPIRY,
	   RTE_ETH_EVENT_IPSEC_SA_BYTE_EXPIRY,
	   RTE_ETH_EVENT_IPSEC_SA_PKT_EXPIRY,
	   RTE_ETH_EVENT_IPSEC_SA_BYTE_HARD_EXPIRY,
	   RTE_ETH_EVENT_IPSEC_SA_PKT_HARD_EXPIRY, RTE_ETH_EVENT_IPSEC_MAX }
       enum rte_eth_event_type { RTE_ETH_EVENT_UNKNOWN,
	   RTE_ETH_EVENT_INTR_LSC, RTE_ETH_EVENT_QUEUE_STATE,
	   RTE_ETH_EVENT_INTR_RESET, RTE_ETH_EVENT_VF_MBOX,
	   RTE_ETH_EVENT_MACSEC, RTE_ETH_EVENT_INTR_RMV, RTE_ETH_EVENT_NEW,
	   RTE_ETH_EVENT_DESTROY, RTE_ETH_EVENT_IPSEC,
	   RTE_ETH_EVENT_FLOW_AGED, RTE_ETH_EVENT_RX_AVAIL_THRESH,
	   RTE_ETH_EVENT_ERR_RECOVERING, RTE_ETH_EVENT_RECOVERY_SUCCESS,
	   RTE_ETH_EVENT_RECOVERY_FAILED, RTE_ETH_EVENT_MAX }
       enum rte_eth_cman_obj { RTE_ETH_CMAN_OBJ_RX_QUEUE = RTE_BIT32(0),
	   RTE_ETH_CMAN_OBJ_RX_QUEUE_MEMPOOL = RTE_BIT32(1) }

   Functions
       int rte_eth_iterator_init (struct rte_dev_iterator *iter, const char
	   *devargs)
       uint16_t	rte_eth_iterator_next (struct rte_dev_iterator *iter)
       void rte_eth_iterator_cleanup (struct rte_dev_iterator *iter)
       static uint64_t rte_eth_rss_hf_refine (uint64_t rss_hf)
       uint64_t	rte_eth_find_next_owned_by (uint16_t port_id, const uint64_t
	   owner_id)
       uint16_t	rte_eth_find_next (uint16_t port_id)
       uint16_t	rte_eth_find_next_of (uint16_t port_id_start, const struct
	   rte_device *parent)
       uint16_t	rte_eth_find_next_sibling (uint16_t port_id_start, uint16_t
	   ref_port_id)
       int rte_eth_dev_owner_new (uint64_t *owner_id)
       int rte_eth_dev_owner_set (const	uint16_t port_id, const	struct
	   rte_eth_dev_owner *owner)
       int rte_eth_dev_owner_unset (const uint16_t port_id, const uint64_t
	   owner_id)
       int rte_eth_dev_owner_delete (const uint64_t owner_id)
       int rte_eth_dev_owner_get (const	uint16_t port_id, struct
	   rte_eth_dev_owner *owner)
       uint16_t	rte_eth_dev_count_avail	(void)
       uint16_t	rte_eth_dev_count_total	(void)
       uint32_t	rte_eth_speed_bitflag (uint32_t	speed, int duplex)
       const char * rte_eth_dev_rx_offload_name	(uint64_t offload)
       const char * rte_eth_dev_tx_offload_name	(uint64_t offload)
       __rte_experimental const	char * rte_eth_dev_capability_name (uint64_t
	   capability)
       int rte_eth_dev_configure (uint16_t port_id, uint16_t nb_rx_queue,
	   uint16_t nb_tx_queue, const struct rte_eth_conf *eth_conf)
       int rte_eth_dev_is_removed (uint16_t port_id)
       int rte_eth_rx_queue_setup (uint16_t port_id, uint16_t rx_queue_id,
	   uint16_t nb_rx_desc,	unsigned int socket_id,	const struct
	   rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool)
       __rte_experimental int rte_eth_rx_hairpin_queue_setup (uint16_t
	   port_id, uint16_t rx_queue_id, uint16_t nb_rx_desc, const struct
	   rte_eth_hairpin_conf	*conf)
       int rte_eth_tx_queue_setup (uint16_t port_id, uint16_t tx_queue_id,
	   uint16_t nb_tx_desc,	unsigned int socket_id,	const struct
	   rte_eth_txconf *tx_conf)
       __rte_experimental int rte_eth_tx_hairpin_queue_setup (uint16_t
	   port_id, uint16_t tx_queue_id, uint16_t nb_tx_desc, const struct
	   rte_eth_hairpin_conf	*conf)
       __rte_experimental int rte_eth_hairpin_get_peer_ports (uint16_t
	   port_id, uint16_t *peer_ports, size_t len, uint32_t direction)
       __rte_experimental int rte_eth_hairpin_bind (uint16_t tx_port, uint16_t
	   rx_port)
       __rte_experimental int rte_eth_hairpin_unbind (uint16_t tx_port,
	   uint16_t rx_port)
       __rte_experimental int rte_eth_dev_count_aggr_ports (uint16_t port_id)
       __rte_experimental int rte_eth_dev_map_aggr_tx_affinity (uint16_t
	   port_id, uint16_t tx_queue_id, uint8_t affinity)
       int rte_eth_dev_socket_id (uint16_t port_id)
       int rte_eth_dev_is_valid_port (uint16_t port_id)
       __rte_experimental int rte_eth_rx_queue_is_valid	(uint16_t port_id,
	   uint16_t queue_id)
       __rte_experimental int rte_eth_tx_queue_is_valid	(uint16_t port_id,
	   uint16_t queue_id)
       int rte_eth_dev_rx_queue_start (uint16_t	port_id, uint16_t rx_queue_id)
       int rte_eth_dev_rx_queue_stop (uint16_t port_id,	uint16_t rx_queue_id)
       int rte_eth_dev_tx_queue_start (uint16_t	port_id, uint16_t tx_queue_id)
       int rte_eth_dev_tx_queue_stop (uint16_t port_id,	uint16_t tx_queue_id)
       int rte_eth_dev_start (uint16_t port_id)
       int rte_eth_dev_stop (uint16_t port_id)
       int rte_eth_dev_set_link_up (uint16_t port_id)
       int rte_eth_dev_set_link_down (uint16_t port_id)
       int rte_eth_dev_close (uint16_t port_id)
       int rte_eth_dev_reset (uint16_t port_id)
       int rte_eth_promiscuous_enable (uint16_t	port_id)
       int rte_eth_promiscuous_disable (uint16_t port_id)
       int rte_eth_promiscuous_get (uint16_t port_id)
       int rte_eth_allmulticast_enable (uint16_t port_id)
       int rte_eth_allmulticast_disable	(uint16_t port_id)
       int rte_eth_allmulticast_get (uint16_t port_id)
       int rte_eth_link_get (uint16_t port_id, struct rte_eth_link *link)
	   __rte_warn_unused_result
       int rte_eth_link_get_nowait (uint16_t port_id, struct rte_eth_link
	   *link) __rte_warn_unused_result
       __rte_experimental const	char * rte_eth_link_speed_to_str (uint32_t
	   link_speed)
       __rte_experimental const	char * rte_eth_link_connector_to_str (enum
	   rte_eth_link_connector link_connector)
       __rte_experimental int rte_eth_link_to_str (char	*str, size_t len,
	   const struct	rte_eth_link *eth_link)
       __rte_experimental int rte_eth_speed_lanes_get (uint16_t	port_id,
	   uint32_t *lanes)
       __rte_experimental int rte_eth_speed_lanes_set (uint16_t	port_id,
	   uint32_t speed_lanes)
       __rte_experimental int rte_eth_speed_lanes_get_capability (uint16_t
	   port_id, struct rte_eth_speed_lanes_capa *speed_lanes_capa,
	   unsigned int	num)
       int rte_eth_stats_get (uint16_t port_id,	struct rte_eth_stats *stats)
       int rte_eth_stats_reset (uint16_t port_id)
       int rte_eth_xstats_get_names (uint16_t port_id, struct
	   rte_eth_xstat_name *xstats_names, unsigned int size)
       int rte_eth_xstats_get (uint16_t	port_id, struct	rte_eth_xstat *xstats,
	   unsigned int	n)
       int rte_eth_xstats_get_names_by_id (uint16_t port_id, struct
	   rte_eth_xstat_name *xstats_names, unsigned int size,	uint64_t *ids)
       int rte_eth_xstats_get_by_id (uint16_t port_id, const uint64_t *ids,
	   uint64_t *values, unsigned int size)
       int rte_eth_xstats_get_id_by_name (uint16_t port_id, const char
	   *xstat_name,	uint64_t *id)
       __rte_experimental int rte_eth_xstats_set_counter (uint16_t port_id,
	   uint64_t id,	int on_off)
       __rte_experimental int rte_eth_xstats_query_state (uint16_t port_id,
	   uint64_t id)
       int rte_eth_xstats_reset	(uint16_t port_id)
       __rte_deprecated	int rte_eth_dev_set_tx_queue_stats_mapping (uint16_t
	   port_id, uint16_t tx_queue_id, uint8_t stat_idx)
       __rte_deprecated	int rte_eth_dev_set_rx_queue_stats_mapping (uint16_t
	   port_id, uint16_t rx_queue_id, uint8_t stat_idx)
       int rte_eth_macaddr_get (uint16_t port_id, struct rte_ether_addr
	   *mac_addr)
       __rte_experimental int rte_eth_macaddrs_get (uint16_t port_id, struct
	   rte_ether_addr *ma, unsigned	int num)
       int rte_eth_dev_info_get	(uint16_t port_id, struct rte_eth_dev_info
	   *dev_info) __rte_warn_unused_result
       __rte_experimental int rte_eth_dev_conf_get (uint16_t port_id, struct
	   rte_eth_conf	*dev_conf) __rte_warn_unused_result
       int rte_eth_dev_fw_version_get (uint16_t	port_id, char *fw_version,
	   size_t fw_size) __rte_warn_unused_result
       int rte_eth_dev_get_supported_ptypes (uint16_t port_id, uint32_t
	   ptype_mask, uint32_t	*ptypes, int num) __rte_warn_unused_result
       int rte_eth_dev_set_ptypes (uint16_t port_id, uint32_t ptype_mask,
	   uint32_t *set_ptypes, unsigned int num)
       int rte_eth_dev_get_mtu (uint16_t port_id, uint16_t *mtu)
       int rte_eth_dev_set_mtu (uint16_t port_id, uint16_t mtu)
       int rte_eth_dev_vlan_filter (uint16_t port_id, uint16_t vlan_id,	int
	   on)
       int rte_eth_dev_set_vlan_strip_on_queue (uint16_t port_id, uint16_t
	   rx_queue_id,	int on)
       int rte_eth_dev_set_vlan_ether_type (uint16_t port_id, enum
	   rte_vlan_type vlan_type, uint16_t tag_type)
       int rte_eth_dev_set_vlan_offload	(uint16_t port_id, int offload_mask)
       int rte_eth_dev_get_vlan_offload	(uint16_t port_id)
       int rte_eth_dev_set_vlan_pvid (uint16_t port_id,	uint16_t pvid, int on)
       __rte_experimental int rte_eth_rx_avail_thresh_set (uint16_t port_id,
	   uint16_t queue_id, uint8_t avail_thresh)
       __rte_experimental int rte_eth_rx_avail_thresh_query (uint16_t port_id,
	   uint16_t *queue_id, uint8_t *avail_thresh)
       int rte_eth_tx_buffer_init (struct rte_eth_dev_tx_buffer	*buffer,
	   uint16_t size)
       int rte_eth_tx_buffer_set_err_callback (struct rte_eth_dev_tx_buffer
	   *buffer, buffer_tx_error_fn callback, void *userdata)
       void rte_eth_tx_buffer_drop_callback (struct rte_mbuf **pkts, uint16_t
	   unsent, void	*userdata)
       void rte_eth_tx_buffer_count_callback (struct rte_mbuf **pkts, uint16_t
	   unsent, void	*userdata)
       int rte_eth_tx_done_cleanup (uint16_t port_id, uint16_t queue_id,
	   uint32_t free_cnt)
       int rte_eth_dev_callback_register (uint16_t port_id, enum
	   rte_eth_event_type event, rte_eth_dev_cb_fn cb_fn, void *cb_arg)
       int rte_eth_dev_callback_unregister (uint16_t port_id, enum
	   rte_eth_event_type event, rte_eth_dev_cb_fn cb_fn, void *cb_arg)
       int rte_eth_dev_rx_intr_enable (uint16_t	port_id, uint16_t queue_id)
       int rte_eth_dev_rx_intr_disable (uint16_t port_id, uint16_t queue_id)
       int rte_eth_dev_rx_intr_ctl (uint16_t port_id, int epfd,	int op,	void
	   *data)
       int rte_eth_dev_rx_intr_ctl_q (uint16_t port_id,	uint16_t queue_id, int
	   epfd, int op, void *data)
       int rte_eth_dev_rx_intr_ctl_q_get_fd (uint16_t port_id, uint16_t
	   queue_id)
       int rte_eth_led_on (uint16_t port_id)
       int rte_eth_led_off (uint16_t port_id)
       __rte_experimental int rte_eth_fec_get_capability (uint16_t port_id,
	   struct rte_eth_fec_capa *speed_fec_capa, unsigned int num)
       __rte_experimental int rte_eth_fec_get (uint16_t	port_id, uint32_t
	   *fec_capa)
       __rte_experimental int rte_eth_fec_set (uint16_t	port_id, uint32_t
	   fec_capa)
       int rte_eth_dev_flow_ctrl_get (uint16_t port_id,	struct rte_eth_fc_conf
	   *fc_conf)
       int rte_eth_dev_flow_ctrl_set (uint16_t port_id,	struct rte_eth_fc_conf
	   *fc_conf)
       int rte_eth_dev_priority_flow_ctrl_set (uint16_t	port_id, struct
	   rte_eth_pfc_conf *pfc_conf)
       int rte_eth_dev_mac_addr_add (uint16_t port_id, struct rte_ether_addr
	   *mac_addr, uint32_t pool)
       __rte_experimental int rte_eth_dev_priority_flow_ctrl_queue_info_get
	   (uint16_t port_id, struct rte_eth_pfc_queue_info *pfc_queue_info)
       __rte_experimental int rte_eth_dev_priority_flow_ctrl_queue_configure
	   (uint16_t port_id, struct rte_eth_pfc_queue_conf *pfc_queue_conf)
       int rte_eth_dev_mac_addr_remove (uint16_t port_id, struct
	   rte_ether_addr *mac_addr)
       int rte_eth_dev_default_mac_addr_set (uint16_t port_id, struct
	   rte_ether_addr *mac_addr)
       int rte_eth_dev_rss_reta_update (uint16_t port_id, struct
	   rte_eth_rss_reta_entry64 *reta_conf,	uint16_t reta_size)
       int rte_eth_dev_rss_reta_query (uint16_t	port_id, struct
	   rte_eth_rss_reta_entry64 *reta_conf,	uint16_t reta_size)
       int rte_eth_dev_uc_hash_table_set (uint16_t port_id, struct
	   rte_ether_addr *addr, uint8_t on)
       int rte_eth_dev_uc_all_hash_table_set (uint16_t port_id,	uint8_t	on)
       int rte_eth_set_queue_rate_limit	(uint16_t port_id, uint16_t queue_idx,
	   uint32_t tx_rate)
       int rte_eth_dev_rss_hash_update (uint16_t port_id, struct
	   rte_eth_rss_conf *rss_conf)
       int rte_eth_dev_rss_hash_conf_get (uint16_t port_id, struct
	   rte_eth_rss_conf *rss_conf)
       __rte_experimental const	char * rte_eth_dev_rss_algo_name (enum
	   rte_eth_hash_function rss_algo)
       __rte_experimental int rte_eth_find_rss_algo (const char	*name,
	   uint32_t *algo)
       int rte_eth_dev_udp_tunnel_port_add (uint16_t port_id, struct
	   rte_eth_udp_tunnel *tunnel_udp)
       int rte_eth_dev_udp_tunnel_port_delete (uint16_t	port_id, struct
	   rte_eth_udp_tunnel *tunnel_udp)
       int rte_eth_dev_get_dcb_info (uint16_t port_id, struct rte_eth_dcb_info
	   *dcb_info)
       const struct rte_eth_rxtx_callback * rte_eth_add_rx_callback (uint16_t
	   port_id, uint16_t queue_id, rte_rx_callback_fn fn, void
	   *user_param)
       const struct rte_eth_rxtx_callback * rte_eth_add_first_rx_callback
	   (uint16_t port_id, uint16_t queue_id, rte_rx_callback_fn fn,	void
	   *user_param)
       const struct rte_eth_rxtx_callback * rte_eth_add_tx_callback (uint16_t
	   port_id, uint16_t queue_id, rte_tx_callback_fn fn, void
	   *user_param)
       int rte_eth_remove_rx_callback (uint16_t	port_id, uint16_t queue_id,
	   const struct	rte_eth_rxtx_callback *user_cb)
       int rte_eth_remove_tx_callback (uint16_t	port_id, uint16_t queue_id,
	   const struct	rte_eth_rxtx_callback *user_cb)
       int rte_eth_rx_queue_info_get (uint16_t port_id,	uint16_t queue_id,
	   struct rte_eth_rxq_info *qinfo)
       int rte_eth_tx_queue_info_get (uint16_t port_id,	uint16_t queue_id,
	   struct rte_eth_txq_info *qinfo)
       __rte_experimental int rte_eth_recycle_rx_queue_info_get	(uint16_t
	   port_id, uint16_t queue_id, struct rte_eth_recycle_rxq_info
	   *recycle_rxq_info)
       int rte_eth_rx_burst_mode_get (uint16_t port_id,	uint16_t queue_id,
	   struct rte_eth_burst_mode *mode)
       int rte_eth_tx_burst_mode_get (uint16_t port_id,	uint16_t queue_id,
	   struct rte_eth_burst_mode *mode)
       __rte_experimental int rte_eth_get_monitor_addr (uint16_t port_id,
	   uint16_t queue_id, struct rte_power_monitor_cond *pmc)
       __rte_experimental int rte_eth_dev_get_reg_info_ext (uint16_t port_id,
	   struct rte_dev_reg_info *info)
       int rte_eth_dev_get_reg_info (uint16_t port_id, struct rte_dev_reg_info
	   *info) __rte_warn_unused_result
       int rte_eth_dev_get_eeprom_length (uint16_t port_id)
       int rte_eth_dev_get_eeprom (uint16_t port_id, struct
	   rte_dev_eeprom_info *info)
       int rte_eth_dev_set_eeprom (uint16_t port_id, struct
	   rte_dev_eeprom_info *info)
       __rte_experimental int rte_eth_dev_get_module_info (uint16_t port_id,
	   struct rte_eth_dev_module_info *modinfo) __rte_warn_unused_result
       __rte_experimental int rte_eth_dev_get_module_eeprom (uint16_t port_id,
	   struct rte_dev_eeprom_info *info) __rte_warn_unused_result
       int rte_eth_dev_set_mc_addr_list	(uint16_t port_id, struct
	   rte_ether_addr *mc_addr_set,	uint32_t nb_mc_addr)
       int rte_eth_timesync_enable (uint16_t port_id)
       int rte_eth_timesync_disable (uint16_t port_id)
       int rte_eth_timesync_read_rx_timestamp (uint16_t	port_id, struct
	   timespec *timestamp,	uint32_t flags)
       int rte_eth_timesync_read_tx_timestamp (uint16_t	port_id, struct
	   timespec *timestamp)
       int rte_eth_timesync_adjust_time	(uint16_t port_id, int64_t delta)
       __rte_experimental int rte_eth_timesync_adjust_freq (uint16_t port_id,
	   int64_t ppm)
       int rte_eth_timesync_read_time (uint16_t	port_id, struct	timespec
	   *time)
       int rte_eth_timesync_write_time (uint16_t port_id, const	struct
	   timespec *time)
       __rte_experimental int rte_eth_read_clock (uint16_t port_id, uint64_t
	   *clock)
       int rte_eth_dev_get_port_by_name	(const char *name, uint16_t *port_id)
       int rte_eth_dev_get_name_by_port	(uint16_t port_id, char	*name)
       int rte_eth_dev_adjust_nb_rx_tx_desc (uint16_t port_id, uint16_t
	   *nb_rx_desc,	uint16_t *nb_tx_desc)
       int rte_eth_dev_pool_ops_supported (uint16_t port_id, const char	*pool)
       void * rte_eth_dev_get_sec_ctx (uint16_t	port_id)
       __rte_experimental int rte_eth_dev_hairpin_capability_get (uint16_t
	   port_id, struct rte_eth_hairpin_cap *cap)
       __rte_experimental int rte_eth_representor_info_get (uint16_t port_id,
	   struct rte_eth_representor_info *info)
       int rte_eth_rx_metadata_negotiate (uint16_t port_id, uint64_t
	   *features)
       __rte_experimental int rte_eth_ip_reassembly_capability_get (uint16_t
	   port_id, struct rte_eth_ip_reassembly_params	*capa)
       __rte_experimental int rte_eth_ip_reassembly_conf_get (uint16_t
	   port_id, struct rte_eth_ip_reassembly_params	*conf)
       __rte_experimental int rte_eth_ip_reassembly_conf_set (uint16_t
	   port_id, const struct rte_eth_ip_reassembly_params *conf)
       __rte_experimental int rte_eth_dev_priv_dump (uint16_t port_id, FILE
	   *file)
       __rte_experimental int rte_eth_rx_descriptor_dump (uint16_t port_id,
	   uint16_t queue_id, uint16_t offset, uint16_t	num, FILE *file)
       __rte_experimental int rte_eth_tx_descriptor_dump (uint16_t port_id,
	   uint16_t queue_id, uint16_t offset, uint16_t	num, FILE *file)
       __rte_experimental int rte_eth_cman_info_get (uint16_t port_id, struct
	   rte_eth_cman_info *info)
       __rte_experimental int rte_eth_cman_config_init (uint16_t port_id,
	   struct rte_eth_cman_config *config)
       __rte_experimental int rte_eth_cman_config_set (uint16_t	port_id, const
	   struct rte_eth_cman_config *config)
       __rte_experimental int rte_eth_cman_config_get (uint16_t	port_id,
	   struct rte_eth_cman_config *config)
       static uint16_t rte_eth_rx_burst	(uint16_t port_id, uint16_t queue_id,
	   struct rte_mbuf **rx_pkts, const uint16_t nb_pkts)
       static int rte_eth_rx_queue_count (uint16_t port_id, uint16_t queue_id)
       static int rte_eth_rx_descriptor_status (uint16_t port_id, uint16_t
	   queue_id, uint16_t offset)
       static int rte_eth_tx_descriptor_status (uint16_t port_id, uint16_t
	   queue_id, uint16_t offset)
       static uint16_t rte_eth_tx_burst	(uint16_t port_id, uint16_t queue_id,
	   struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
       static uint16_t rte_eth_tx_prepare (uint16_t port_id, uint16_t
	   queue_id, struct rte_mbuf **tx_pkts,	uint16_t nb_pkts)
       static uint16_t rte_eth_tx_buffer_flush (uint16_t port_id, uint16_t
	   queue_id, struct rte_eth_dev_tx_buffer *buffer)
       static __rte_always_inline uint16_t rte_eth_tx_buffer (uint16_t
	   port_id, uint16_t queue_id, struct rte_eth_dev_tx_buffer *buffer,
	   struct rte_mbuf *tx_pkt)
       static __rte_experimental uint16_t rte_eth_recycle_mbufs	(uint16_t
	   rx_port_id, uint16_t	rx_queue_id, uint16_t tx_port_id, uint16_t
	   tx_queue_id,	struct rte_eth_recycle_rxq_info	*recycle_rxq_info)
       __rte_experimental int rte_eth_buffer_split_get_supported_hdr_ptypes
	   (uint16_t port_id, uint32_t *ptypes,	int num)
	   __rte_warn_unused_result
       static __rte_experimental int rte_eth_tx_queue_count (uint16_t port_id,
	   uint16_t queue_id)

Detailed Description
       RTE Ethernet Device API

       The Ethernet Device API is composed of two parts:

        The  application-oriented  Ethernet  API  that	 includes functions to
	 setup an Ethernet device (configure it, setup its Rx  and  Tx	queues
	 and  start  it),  to get its MAC address, the speed and the status of
	 its physical link, to receive and to transmit packets,	and so on.

        The driver-oriented Ethernet API that exports functions  allowing  an
	 Ethernet  Poll	 Mode  Driver  (PMD)  to  allocate  an Ethernet	device
	 instance,  create  memzone  for  HW  rings  and  process   registered
	 callbacks,  and so on.	PMDs should include ethdev_driver.h instead of
	 this header.

       By default, all the functions of	the Ethernet Device API	exported by  a
       PMD  are	lock-free functions which assume to not	be invoked in parallel
       on different logical cores to work  on  the  same  target  object.  For
       instance,  the  receive function	of a PMD cannot	be invoked in parallel
       on two logical cores to poll the	same Rx	queue [of the same  port].  Of
       course,	this  function can be invoked in parallel by different logical
       cores on	different Rx queues. It	is the	responsibility	of  the	 upper
       level application to enforce this rule.

       If needed, parallel accesses by multiple	logical	cores to shared	queues
       shall  be explicitly protected by dedicated inline lock-aware functions
       built on	top of their corresponding lock-free functions of the PMD API.

       In all functions	of the Ethernet	API, the Ethernet device is designated
       by an integer >=	0 named	the device port	identifier.

       At the Ethernet driver level, Ethernet devices  are  represented	 by  a
       generic data structure of type rte_eth_dev.

       Ethernet	 devices  are  dynamically  registered	during the PCI probing
       phase performed at EAL initialization time. When	an Ethernet device  is
       being  probed,  an  rte_eth_dev structure and a new port	identifier are
       allocated for that device. Then,	the eth_dev_init()  function  supplied
       by  the	Ethernet  driver  matching the probed PCI device is invoked to
       properly	initialize the device.

       The role	 of  the  device  init	function  consists  of	resetting  the
       hardware, checking access to Non-volatile Memory	(NVM), reading the MAC
       address from NVM	etc.

       If  the device init operation is	successful, the	correspondence between
       the port	identifier assigned to	the  new  device  and  its  associated
       rte_eth_dev  structure  is  effectively registered. Otherwise, both the
       rte_eth_dev structure and the port identifier are freed.

       The functions exported by the  application  Ethernet  API  to  setup  a
       device  designated  by  its  port  identifier  must  be	invoked	in the
       following order:

        rte_eth_dev_configure()

        rte_eth_tx_queue_setup()

        rte_eth_rx_queue_setup()

        rte_eth_dev_start()

       Then, the network application can invoke, in any	order,	the  functions
       exported	 by the	Ethernet API to	get the	MAC address of a given device,
       to get the  speed  and  the  status  of	a  device  physical  link,  to
       receive/transmit	[burst of] packets, and	so on.

       If  the	application  wants  to	change	the  configuration  (i.e. call
       rte_eth_dev_configure(),		 rte_eth_tx_queue_setup(),	    or
       rte_eth_rx_queue_setup()),  it  must  call  rte_eth_dev_stop() first to
       stop  the  device  and  then  do	 the  reconfiguration  before  calling
       rte_eth_dev_start()  again.  The	 transmit and receive functions	should
       not be invoked when the device or the queue is stopped.

       Please note that	some configuration is  not  stored  between  calls  to
       rte_eth_dev_stop()/rte_eth_dev_start().	 The  following	 configuration
       will be retained:

       - MTU
       - flow control settings
       - receive mode configuration (promiscuous mode, all-multicast mode,
	 hardware checksum mode, RSS/VMDq settings etc.)
       - VLAN filtering	configuration
       - default MAC address
       - MAC addresses supplied	to MAC address array
       - flow director filtering mode (but not filtering rules)
       - NIC queue statistics mappings

	The following configuration may	be retained or not  depending  on  the
       device capabilities:

       - flow rules
       - flow-related shared objects, e.g. indirect actions

	Any  other  configuration  will	 not be	stored and will	need to	be re-
       entered before a	call to	rte_eth_dev_start().

       Finally,	a network application can close	an Ethernet device by invoking
       the rte_eth_dev_close() function.

       Each function of	 the  application  Ethernet  API  invokes  a  specific
       function	 of  the PMD that controls the target device designated	by its
       port identifier.	For this purpose, all device-specific functions	of  an
       Ethernet	 driver	 are supplied through a	set of pointers	contained in a
       generic structure of type eth_dev_ops. The address of  the  eth_dev_ops
       structure  is  stored  in  the rte_eth_dev structure by the device init
       function	of the Ethernet	 driver,  which	 is  invoked  during  the  PCI
       probing phase, as explained earlier.

       In  other words,	each function of the Ethernet API simply retrieves the
       rte_eth_dev structure associated	with the device	 port  identifier  and
       performs	 an  indirect  invocation of the corresponding driver function
       supplied	in the eth_dev_ops structure of	the rte_eth_dev	structure.

       For performance reasons,	the address of the burst-oriented  Rx  and  Tx
       functions  of  the Ethernet driver are not contained in the eth_dev_ops
       structure. Instead, they	are directly stored at the  beginning  of  the
       rte_eth_dev  structure  to avoid	an extra indirect memory access	during
       their invocation.

       RTE Ethernet device drivers do not use interrupts for  transmitting  or
       receiving.  Instead,  Ethernet  drivers	export	Poll-Mode  receive and
       transmit	functions to applications. Both	receive	and transmit functions
       are packet-burst	oriented to minimize their cost	per packet through the
       following optimizations:

        Sharing  among	 multiple  packets  the	 incompressible	 cost  of  the
	 invocation of receive/transmit	functions.

        Enabling  receive/transmit  functions	to  take  advantage  of	burst-
	 oriented hardware features  (L1  cache,  prefetch  instructions,  NIC
	 head/tail registers) to minimize the number of	CPU cycles per packet,
	 for  instance,	 by  avoiding  useless	read  memory  accesses to ring
	 descriptors, or by  systematically  using  arrays  of	pointers  that
	 exactly fit L1	cache line boundaries and sizes.

       The   burst-oriented  receive  function	does  not  provide  any	 error
       notification, to	avoid the  corresponding  overhead.  As	 a  hint,  the
       upper-level  application	might check the	status of the device link once
       being systematically returned a 0 value by the receive function of  the
       driver for a given number of tries.

       Definition in file rte_ethdev.h.

Macro Definition Documentation
   #define RTE_ETH_FOREACH_MATCHING_DEV(id, devargs, iter)
       Value:.PP
	   for (rte_eth_iterator_init(iter, devargs), \
		id = rte_eth_iterator_next(iter); \
		id != RTE_MAX_ETHPORTS;	\
		id = rte_eth_iterator_next(iter))
       Macro to	iterate	over all ethdev	ports matching some devargs.

       If  a  break  is	 done  before  the  end	 of  the  loop,	 the  function
       rte_eth_iterator_cleanup() must be called.

       Parameters
	   id Iterated port ID of type uint16_t.
	   devargs Device parameters input as string of	type char*.
	   iter	 Iterator  handle  of  type  struct   rte_dev_iterator,	  used
	   internally.

       Definition at line 247 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_AUTONEG	0
       Autonegotiate (all speeds)

       Definition at line 280 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_FIXED   RTE_BIT32(0)
       Disable autoneg (fixed speed)

       Definition at line 281 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_10M_HD   RTE_BIT32(1)
       10 Mbps half-duplex

       Definition at line 282 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_10M   RTE_BIT32(2)
       10 Mbps full-duplex

       Definition at line 283 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_100M_HD	RTE_BIT32(3)
       100 Mbps	half-duplex

       Definition at line 284 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_100M   RTE_BIT32(4)
       100 Mbps	full-duplex

       Definition at line 285 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_1G   RTE_BIT32(5)
       1 Gbps

       Definition at line 286 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_2_5G   RTE_BIT32(6)
       2.5 Gbps

       Definition at line 287 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_5G   RTE_BIT32(7)
       5 Gbps

       Definition at line 288 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_10G   RTE_BIT32(8)
       10 Gbps

       Definition at line 289 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_20G   RTE_BIT32(9)
       20 Gbps

       Definition at line 290 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_25G   RTE_BIT32(10)
       25 Gbps

       Definition at line 291 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_40G   RTE_BIT32(11)
       40 Gbps

       Definition at line 292 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_50G   RTE_BIT32(12)
       50 Gbps

       Definition at line 293 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_56G   RTE_BIT32(13)
       56 Gbps

       Definition at line 294 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_100G   RTE_BIT32(14)
       100 Gbps

       Definition at line 295 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_200G   RTE_BIT32(15)
       200 Gbps

       Definition at line 296 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_400G   RTE_BIT32(16)
       400 Gbps

       Definition at line 297 of file rte_ethdev.h.

   #define RTE_ETH_LINK_SPEED_800G   RTE_BIT32(17)
       800 Gbps

       Definition at line 298 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_NONE   0
       Not defined

       Definition at line 304 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_10M   10
       10 Mbps

       Definition at line 305 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_100M   100
       100 Mbps

       Definition at line 306 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_1G	  1000
       1 Gbps

       Definition at line 307 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_2_5G   2500
       2.5 Gbps

       Definition at line 308 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_5G	  5000
       5 Gbps

       Definition at line 309 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_10G   10000
       10 Gbps

       Definition at line 310 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_20G   20000
       20 Gbps

       Definition at line 311 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_25G   25000
       25 Gbps

       Definition at line 312 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_40G   40000
       40 Gbps

       Definition at line 313 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_50G   50000
       50 Gbps

       Definition at line 314 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_56G   56000
       56 Gbps

       Definition at line 315 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_100G   100000
       100 Gbps

       Definition at line 316 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_200G   200000
       200 Gbps

       Definition at line 317 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_400G   400000
       400 Gbps

       Definition at line 318 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_800G   800000
       800 Gbps

       Definition at line 319 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_NUM_UNKNOWN   UINT32_MAX
       Unknown

       Definition at line 320 of file rte_ethdev.h.

   #define RTE_ETH_LINK_HALF_DUPLEX   0
       Half-duplex connection (see link_duplex).

       Definition at line 379 of file rte_ethdev.h.

   #define RTE_ETH_LINK_FULL_DUPLEX   1
       Full-duplex connection (see link_duplex).

       Definition at line 380 of file rte_ethdev.h.

   #define RTE_ETH_LINK_DOWN   0
       Link is down (see link_status).

       Definition at line 381 of file rte_ethdev.h.

   #define RTE_ETH_LINK_UP   1
       Link is up (see link_status).

       Definition at line 382 of file rte_ethdev.h.

   #define RTE_ETH_LINK_FIXED	0
       No autonegotiation (see link_autoneg).

       Definition at line 383 of file rte_ethdev.h.

   #define RTE_ETH_LINK_AUTONEG	  1
       Autonegotiated (see link_autoneg).

       Definition at line 384 of file rte_ethdev.h.

   #define RTE_ETH_LINK_MAX_STR_LEN   40
       Max length of default link string.

       Definition at line 385 of file rte_ethdev.h.

   #define RTE_ETH_SPEED_LANES_TO_CAPA(x)   RTE_BIT32(x)
       Translate from link speed lanes to speed	lanes capabilities.

       Definition at line 389 of file rte_ethdev.h.

   #define RTE_ETH_MQ_RX_RSS_FLAG   RTE_BIT32(0)
       Enable RSS.

       See also
	   rte_eth_rss_conf

       Definition at line 410 of file rte_ethdev.h.

   #define RTE_ETH_MQ_RX_DCB_FLAG   RTE_BIT32(1)
       Enable DCB.

       Definition at line 411 of file rte_ethdev.h.

   #define RTE_ETH_MQ_RX_VMDQ_FLAG   RTE_BIT32(2)
       Enable VMDq.

       Definition at line 412 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_PORT   18
       Consider	device port number as a	flow differentiator

       Definition at line 572 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_VXLAN	19
       VXLAN protocol based flow

       Definition at line 573 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_GENEVE	 20
       GENEVE protocol based flow

       Definition at line 574 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_NVGRE	21
       NVGRE protocol based flow

       Definition at line 575 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_VXLAN_GPE   22
       VXLAN-GPE protocol based	flow

       Definition at line 576 of file rte_ethdev.h.

   #define RTE_ETH_FLOW_GTPU   23
       GTPU protocol based flow

       Definition at line 577 of file rte_ethdev.h.

   #define RTE_ETH_RSS_L4_CHKSUM   RTE_BIT64(35)
       The  RTE_ETH_RSS_L4_CHKSUM works	on checksum field of any L4 header. It
       is similar to RTE_ETH_RSS_PORT that they	 don't	specify	 the  specific
       type  of	 L4  header. This macro	is defined to replace some specific L4
       (TCP/UDP/SCTP) checksum type for	constructing the use  of  RSS  offload
       bits.

       Due  to	above  reason, some old	APIs (and configuration) don't support
       RTE_ETH_RSS_L4_CHKSUM. The rte_flow RSS API supports it.

       For the case that checksum is not used in an UDP	header,	it  takes  the
       reserved	value 0	as input for the hash function.

       Definition at line 629 of file rte_ethdev.h.

   #define RTE_ETH_RSS_IB_BTH	RTE_BIT64(38)
       RSS with	RoCE InfiniBand	BTH (Base Transport Header)

       Definition at line 635 of file rte_ethdev.h.

   #define RTE_ETH_RSS_LEVEL_PMD_DEFAULT   (UINT64_C(0)	<< 50)
       level  0,  requests the default behavior. Depending on the packet type,
       it can mean outermost, innermost, anything in between or	even  no  RSS.
       It  basically  stands  for the innermost	encapsulation level RSS	can be
       performed on according to PMD and device	capabilities.

       Definition at line 679 of file rte_ethdev.h.

   #define RTE_ETH_RSS_LEVEL_OUTERMOST	 (UINT64_C(1) << 50)
       level  1,  requests  RSS	 to  be	 performed  on	the  outermost	packet
       encapsulation level.

       Definition at line 685 of file rte_ethdev.h.

   #define RTE_ETH_RSS_LEVEL_INNERMOST	 (UINT64_C(2) << 50)
       level  2,  requests  RSS	 to be performed on the	specified inner	packet
       encapsulation level, from  outermost  to	 innermost  (lower  to	higher
       values).

       Definition at line 691 of file rte_ethdev.h.

   #define RTE_ETH_RSS_PROTO_MASK
       Value:.PP
	   ( \
	   RTE_ETH_RSS_IPV4 | \
	   RTE_ETH_RSS_FRAG_IPV4 | \
	   RTE_ETH_RSS_NONFRAG_IPV4_TCP	| \
	   RTE_ETH_RSS_NONFRAG_IPV4_UDP	| \
	   RTE_ETH_RSS_NONFRAG_IPV4_SCTP | \
	   RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \
	   RTE_ETH_RSS_IPV6 | \
	   RTE_ETH_RSS_FRAG_IPV6 | \
	   RTE_ETH_RSS_NONFRAG_IPV6_TCP	| \
	   RTE_ETH_RSS_NONFRAG_IPV6_UDP	| \
	   RTE_ETH_RSS_NONFRAG_IPV6_SCTP | \
	   RTE_ETH_RSS_NONFRAG_IPV6_OTHER | \
	   RTE_ETH_RSS_L2_PAYLOAD | \
	   RTE_ETH_RSS_IPV6_EX | \
	   RTE_ETH_RSS_IPV6_TCP_EX | \
	   RTE_ETH_RSS_IPV6_UDP_EX | \
	   RTE_ETH_RSS_PORT  | \
	   RTE_ETH_RSS_VXLAN | \
	   RTE_ETH_RSS_GENEVE |	\
	   RTE_ETH_RSS_NVGRE | \
	   RTE_ETH_RSS_MPLS)
       Mask of valid RSS hash protocols

       Definition at line 847 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_MAX_VLAN_FILTERS   64
       Maximum nb. of VMDq VLAN	filters.

       Definition at line 882 of file rte_ethdev.h.

   #define RTE_ETH_DCB_NUM_USER_PRIORITIES   8
       Maximum nb. of DCB priorities.

       Definition at line 883 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_DCB_NUM_QUEUES	 128
       Maximum nb. of VMDq DCB queues.

       Definition at line 884 of file rte_ethdev.h.

   #define RTE_ETH_DCB_NUM_QUEUES   128
       Maximum nb. of DCB queues.

       Definition at line 885 of file rte_ethdev.h.

   #define RTE_ETH_DCB_PG_SUPPORT   RTE_BIT32(0)
       Priority	Group(ETS) support.

       Definition at line 889 of file rte_ethdev.h.

   #define RTE_ETH_DCB_PFC_SUPPORT   RTE_BIT32(1)
       Priority	Flow Control support.

       Definition at line 890 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_STRIP_OFFLOAD	0x0001
       VLAN Strip On/Off

       Definition at line 894 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_FILTER_OFFLOAD	 0x0002
       VLAN Filter On/Off

       Definition at line 895 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_EXTEND_OFFLOAD	 0x0004
       VLAN Extend On/Off

       Definition at line 896 of file rte_ethdev.h.

   #define RTE_ETH_QINQ_STRIP_OFFLOAD	0x0008
       QINQ Strip On/Off

       Definition at line 897 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_STRIP_MASK   0x0001
       VLAN Strip setting mask

       Definition at line 899 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_FILTER_MASK   0x0002
       VLAN Filter setting mask

       Definition at line 900 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_EXTEND_MASK   0x0004
       VLAN Extend setting mask

       Definition at line 901 of file rte_ethdev.h.

   #define RTE_ETH_QINQ_STRIP_MASK   0x0008
       QINQ Strip setting mask

       Definition at line 902 of file rte_ethdev.h.

   #define RTE_ETH_VLAN_ID_MAX	 0x0FFF
       VLAN ID is in lower 12 bits

       Definition at line 903 of file rte_ethdev.h.

   #define RTE_ETH_NUM_RECEIVE_MAC_ADDR	  128
       Maximum nb. of receive mac addr.

       Definition at line 907 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_NUM_UC_HASH_ARRAY   128
       Maximum nb. of UC hash array.

       Definition at line 910 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_ACCEPT_UNTAG   RTE_BIT32(0)
       Accept untagged packets.

       Definition at line 916 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_ACCEPT_HASH_MC	 RTE_BIT32(1)
       Accept packets in multicast table.

       Definition at line 918 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_ACCEPT_HASH_UC	 RTE_BIT32(2)
       Accept packets in unicast table.

       Definition at line 920 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_ACCEPT_BROADCAST   RTE_BIT32(3)
       Accept broadcast	packets.

       Definition at line 922 of file rte_ethdev.h.

   #define RTE_ETH_VMDQ_ACCEPT_MULTICAST   RTE_BIT32(4)
       Multicast promiscuous.

       Definition at line 924 of file rte_ethdev.h.

   #define RTE_ETH_RX_OFFLOAD_VLAN_STRIP   RTE_BIT64(0)
       Rx offload capabilities of a device.

       Definition at line 1583 of file rte_ethdev.h.

   #define RTE_ETH_RX_OFFLOAD_TIMESTAMP	  RTE_BIT64(14)
       Timestamp  is set by the	driver in RTE_MBUF_DYNFIELD_TIMESTAMP_NAME and
       RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME is set in ol_flags. The  mbuf	 field
       and flag	are registered when the	offload	is configured.

       Definition at line 1599 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_VLAN_INSERT   RTE_BIT64(0)
       Tx offload capabilities of a device.

       Definition at line 1623 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM	 RTE_BIT64(7)
       Used for	tunneling packet.

       Definition at line 1630 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO   RTE_BIT64(9)
       Used for	tunneling packet.

       Definition at line 1632 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO   RTE_BIT64(10)
       Used for	tunneling packet.

       Definition at line 1633 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO   RTE_BIT64(11)
       Used for	tunneling packet.

       Definition at line 1634 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO   RTE_BIT64(12)
       Used for	tunneling packet.

       Definition at line 1635 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_MT_LOCKFREE   RTE_BIT64(14)
       Multiple	threads	can invoke rte_eth_tx_burst() concurrently on the same
       Tx queue	without	SW lock.

       Definition at line 1641 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_MULTI_SEGS   RTE_BIT64(15)
       Device supports multi segment send.

       Definition at line 1643 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE   RTE_BIT64(16)
       Device  supports	 optimization  for  fast  release  of  mbufs. When set
       application must	guarantee that per-queue all mbufs come	from the  same
       mempool,	are direct, have refcnt=1, next=NULL and nb_segs=1, as done by
       rte_pktmbuf_prefree_seg().

       See also
	   rte_mbuf_raw_free_bulk()

       Definition at line 1651 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO   RTE_BIT64(18)
       Device  supports	 generic UDP tunneled packet TSO. Application must set
       RTE_MBUF_F_TX_TUNNEL_UDP	and other mbuf fields required for tunnel TSO.

       Definition at line 1658 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_IP_TNL_TSO   RTE_BIT64(19)
       Device supports generic IP tunneled packet TSO.	Application  must  set
       RTE_MBUF_F_TX_TUNNEL_IP and other mbuf fields required for tunnel TSO.

       Definition at line 1664 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM	RTE_BIT64(20)
       Device supports outer UDP checksum

       Definition at line 1666 of file rte_ethdev.h.

   #define RTE_ETH_TX_OFFLOAD_SEND_ON_TIMESTAMP	  RTE_BIT64(21)
       Device  sends  on  time	read  from RTE_MBUF_DYNFIELD_TIMESTAMP_NAME if
       RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME is set in ol_flags. The  mbuf	 field
       and flag	are registered when the	offload	is configured.

       Definition at line 1672 of file rte_ethdev.h.

   #define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP   RTE_BIT64(0)
       Device supports Rx queue	setup after device started.

       Definition at line 1682 of file rte_ethdev.h.

   #define RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP   RTE_BIT64(1)
       Device supports Tx queue	setup after device started.

       Definition at line 1684 of file rte_ethdev.h.

   #define RTE_ETH_DEV_CAPA_RXQ_SHARE	RTE_BIT64(2)
       Device supports shared Rx queue among ports within Rx domain and	switch
       domain.	Mbufs  are  consumed by	shared Rx queue	instead	of each	queue.
       Multiple	groups are supported by	share_group of Rx queue	configuration.
       Shared Rx queue is identified  by  PMD  using  share_qid	 of  Rx	 queue
       configuration.  Polling	any  port  in the group	receive	packets	of all
       member ports, source port identified by mbuf->port field.

       Definition at line 1694 of file rte_ethdev.h.

   #define RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP   RTE_BIT64(3)
       Device supports keeping flow rules across restart.

       Definition at line 1696 of file rte_ethdev.h.

   #define RTE_ETH_DEV_CAPA_FLOW_SHARED_OBJECT_KEEP   RTE_BIT64(4)
       Device supports keeping shared flow objects across restart.

       Definition at line 1698 of file rte_ethdev.h.

   #define RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID	  (UINT16_MAX)
       Default values for switch domain	ID when	ethdev does not	support	switch
       domain definitions.

       Definition at line 1726 of file rte_ethdev.h.

   #define RTE_ETH_QUEUE_STATE_STOPPED	 0
       Queue stopped.

       Definition at line 1885 of file rte_ethdev.h.

   #define RTE_ETH_QUEUE_STATE_STARTED	 1
       Queue started.

       Definition at line 1886 of file rte_ethdev.h.

   #define RTE_ETH_QUEUE_STATE_HAIRPIN	 2
       Queue used for hairpin.

       Definition at line 1887 of file rte_ethdev.h.

   #define RTE_ETH_BURST_FLAG_PER_QUEUE	  RTE_BIT64(0)
       If the queues have different burst mode description, this bit  will  be
       set  by	PMD,  then  the	 application  can  iterate  to	retrieve burst
       description for all other queues.

       Definition at line 1951 of file rte_ethdev.h.

   #define RTE_ETH_BURST_MODE_INFO_SIZE	  1024
       Maximum size for	information

       Definition at line 1960 of file rte_ethdev.h.

   #define RTE_ETH_XSTATS_NAME_SIZE   64
       Maximum name length for extended	statistics counters

       Definition at line 1965 of file rte_ethdev.h.

   #define RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE   RTE_BIT32(0)
       PMD supports thread-safe	flow operations

       Definition at line 2157 of file rte_ethdev.h.

   #define RTE_ETH_DEV_INTR_LSC	  RTE_BIT32(1)
       Device supports link state interrupt

       Definition at line 2159 of file rte_ethdev.h.

   #define RTE_ETH_DEV_BONDING_MEMBER	RTE_BIT32(2)
       Device is a bonding member

       Definition at line 2161 of file rte_ethdev.h.

   #define RTE_ETH_DEV_INTR_RMV	  RTE_BIT32(3)
       Device supports device removal interrupt

       Definition at line 2163 of file rte_ethdev.h.

   #define RTE_ETH_DEV_REPRESENTOR   RTE_BIT32(4)
       Device is port representor

       Definition at line 2165 of file rte_ethdev.h.

   #define RTE_ETH_DEV_NOLIVE_MAC_ADDR	 RTE_BIT32(5)
       Device does not support MAC change after	started

       Definition at line 2167 of file rte_ethdev.h.

   #define RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS   RTE_BIT32(6)
       Queue xstats filled automatically by ethdev  layer.  PMDs  filling  the
       queue xstats themselves should not set this flag

       Definition at line 2172 of file rte_ethdev.h.

   #define RTE_ETH_FOREACH_DEV_OWNED_BY(p, o)
       Value:.PP
	   for (p = rte_eth_find_next_owned_by(0, o); \
		(unsigned int)p	< (unsigned int)RTE_MAX_ETHPORTS; \
		p = rte_eth_find_next_owned_by(p + 1, o))
       Macro  to  iterate  over	 all  enabled ethdev ports owned by a specific
       owner.

       Definition at line 2192 of file rte_ethdev.h.

   #define     RTE_ETH_FOREACH_DEV(p)	       RTE_ETH_FOREACH_DEV_OWNED_BY(p,
       RTE_ETH_DEV_NO_OWNER)
       Macro to	iterate	over all enabled and ownerless ethdev ports.

       Definition at line 2210 of file rte_ethdev.h.

   #define RTE_ETH_FOREACH_DEV_OF(port_id, parent)
       Value:.PP
	   for (port_id	= rte_eth_find_next_of(0, parent); \
	       port_id < RTE_MAX_ETHPORTS; \
	       port_id = rte_eth_find_next_of(port_id +	1, parent))
       Macro to	iterate	over all ethdev	ports of a specified device.

       Parameters
	   port_id The ID of the matching port being iterated.
	   parent The rte_device pointer matching the iterated ports.

       Definition at line 2236 of file rte_ethdev.h.

   #define RTE_ETH_FOREACH_DEV_SIBLING(port_id,	ref_port_id)
       Value:.PP
	   for (port_id	= rte_eth_find_next_sibling(0, ref_port_id); \
	       port_id < RTE_MAX_ETHPORTS; \
	       port_id = rte_eth_find_next_sibling(port_id + 1,	ref_port_id))
       Macro  to  iterate over all ethdev ports	sharing	the same rte_device as
       the specified port. Note: the specified reference port is part  of  the
       loop iterations.

       Parameters
	   port_id The ID of the matching port being iterated.
	   ref_port_id The ID of the port being	compared.

       Definition at line 2265 of file rte_ethdev.h.

   #define	      RTE_ETH_TX_BUFFER_SIZE(sz)		(sizeof(struct
       rte_eth_dev_tx_buffer) +	(sz) * sizeof(struct rte_mbuf *))
       Calculate the size of the Tx buffer.

       Parameters
	   sz Number of	stored packets.

       Definition at line 3931 of file rte_ethdev.h.

   #define RTE_ETH_RX_METADATA_USER_FLAG   RTE_BIT64(0)
       The NIC is able to deliver flag (if set)	with packets to	the PMD.

       Definition at line 5809 of file rte_ethdev.h.

   #define RTE_ETH_RX_METADATA_USER_MARK   RTE_BIT64(1)
       The NIC is able to deliver mark ID with packets to the PMD.

       Definition at line 5812 of file rte_ethdev.h.

   #define RTE_ETH_RX_METADATA_TUNNEL_ID   RTE_BIT64(2)
       The NIC is able to deliver tunnel ID with packets to the	PMD.

       Definition at line 5815 of file rte_ethdev.h.

   #define RTE_ETH_DEV_REASSEMBLY_F_IPV4   (RTE_BIT32(0))
       Flag to offload IP reassembly for IPv4 packets.

       Definition at line 5859 of file rte_ethdev.h.

   #define RTE_ETH_DEV_REASSEMBLY_F_IPV6   (RTE_BIT32(1))
       Flag to offload IP reassembly for IPv6 packets.

       Definition at line 5861 of file rte_ethdev.h.

   #define RTE_ETH_RX_DESC_AVAIL   0
       Desc available for hw.

       Definition at line 6457 of file rte_ethdev.h.

   #define RTE_ETH_RX_DESC_DONE	  1
       Desc done, filled by hw.

       Definition at line 6458 of file rte_ethdev.h.

   #define RTE_ETH_RX_DESC_UNAVAIL   2
       Desc used by driver or hw.

       Definition at line 6459 of file rte_ethdev.h.

   #define RTE_ETH_TX_DESC_FULL	  0
       Desc filled for hw, waiting xmit.

       Definition at line 6527 of file rte_ethdev.h.

   #define RTE_ETH_TX_DESC_DONE	  1
       Desc done, packet is transmitted.

       Definition at line 6528 of file rte_ethdev.h.

   #define RTE_ETH_TX_DESC_UNAVAIL   2
       Desc used by driver or hw.

       Definition at line 6529 of file rte_ethdev.h.

Typedef	Documentation
   typedef uint16_t(* rte_rx_callback_fn) (uint16_t port_id,  uint16_t	queue,
       struct  rte_mbuf	 *pkts[],  uint16_t  nb_pkts,  uint16_t	max_pkts, void
       *user_param)
       Function	type used for Rx packet	processing packet callbacks.

       The callback function is	called on Rx with a burst of packets that have
       been received on	the given port and queue.

       Parameters
	   port_id The Ethernet	port on	which Rx is being performed.
	   queue The queue on the Ethernet port	which is being used to receive
	   the packets.
	   pkts	The burst of packets that have just been received.
	   nb_pkts The number of packets in the	burst pointed to by 'pkts'.
	   max_pkts The	max number of packets that can be stored in the	'pkts'
	   array.
	   user_param  The  arbitrary  user  parameter	passed	 in   by   the
	   application when the	callback was originally	configured.

       Returns
	   The number of packets returned to the user.

       Definition at line 2094 of file rte_ethdev.h.

   typedef  uint16_t(*	rte_tx_callback_fn) (uint16_t port_id, uint16_t	queue,
       struct rte_mbuf *pkts[],	uint16_t nb_pkts, void *user_param)
       Function	type used for Tx packet	processing packet callbacks.

       The callback  function  is  called  on  Tx  with	 a  burst  of  packets
       immediately  before  the	 packets  are  put onto	the hardware queue for
       transmission.

       Parameters
	   port_id The Ethernet	port on	which Tx is being performed.
	   queue The queue on  the  Ethernet  port  which  is  being  used  to
	   transmit the	packets.
	   pkts	The burst of packets that are about to be transmitted.
	   nb_pkts The number of packets in the	burst pointed to by 'pkts'.
	   user_param	The   arbitrary	  user	parameter  passed  in  by  the
	   application when the	callback was originally	configured.

       Returns
	   The number of packets to be written to the NIC.

       Definition at line 2118 of file rte_ethdev.h.

   typedef int(* rte_eth_dev_cb_fn) (uint16_t port_id, enum rte_eth_event_type
       event, void *cb_arg, void *ret_param)
       User application	callback to be registered for interrupts.

       Note: there is no guarantee in the DPDK drivers that a  callback	 won't
       be  called in the middle	of other parts of the ethdev API. For example,
       imagine that thread A calls rte_eth_dev_start() and  as	part  of  this
       call,   a   RTE_ETH_EVENT_INTR_RESET   event  gets  generated  and  the
       associated callback is ran  on  thread  A.  In  that  example,  if  the
       application  protects  its  internal  data  using  locks	before calling
       rte_eth_dev_start(), and	the callback takes a  same  lock,  a  deadlock
       occurs.	Because	of this, it is highly recommended NOT to take locks in
       those callbacks.

       Definition at line 4295 of file rte_ethdev.h.

Enumeration Type Documentation
   enum	rte_eth_link_connector
       Ethernet	port link connector type.

       Enumerator

       RTE_ETH_LINK_CONNECTOR_NONE
	      None. Default unless driver specifies it

       RTE_ETH_LINK_CONNECTOR_TP
	      Twisted Pair

       RTE_ETH_LINK_CONNECTOR_AUI
	      Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_MII
	      Media Independent	Interface

       RTE_ETH_LINK_CONNECTOR_FIBER
	      Optical Fiber Link

       RTE_ETH_LINK_CONNECTOR_BNC
	      BNC Link type for	RF connection

       RTE_ETH_LINK_CONNECTOR_DAC
	      Direct Attach copper

       RTE_ETH_LINK_CONNECTOR_SGMII
	      Serial Gigabit Media Independent Interface

       RTE_ETH_LINK_CONNECTOR_QSGMII
	      Link to multiplex	4 SGMII	over one serial	link

       RTE_ETH_LINK_CONNECTOR_XFI
	      10 Gigabit Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_SFI
	      10 Gigabit Serial	Interface for optical network

       RTE_ETH_LINK_CONNECTOR_XLAUI
	      40 Gigabit Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_GAUI
	      Gigabit Interface	for 50/100/200 Gbps

       RTE_ETH_LINK_CONNECTOR_XAUI
	      10 Gigabit Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_CAUI
	      100 Gigabit Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_LAUI
	      50 Gigabit Attachment Unit Interface

       RTE_ETH_LINK_CONNECTOR_SFP
	      Pluggable	module for 1 Gigabit

       RTE_ETH_LINK_CONNECTOR_SFP_PLUS
	      Pluggable	module for 10 Gigabit

       RTE_ETH_LINK_CONNECTOR_SFP28
	      Pluggable	module for 25 Gigabit

       RTE_ETH_LINK_CONNECTOR_SFP_DD
	      Pluggable	module for 100 Gigabit

       RTE_ETH_LINK_CONNECTOR_QSFP
	      Module to	mutiplex 4 SFP i.e. 4*1=4 Gbps

       RTE_ETH_LINK_CONNECTOR_QSFP_PLUS
	      Module to	mutiplex 4 SFP_PLUS i.e. 4*10=40 Gbps

       RTE_ETH_LINK_CONNECTOR_QSFP28
	      Module to	mutiplex 4 SFP28 i.e. 4*25=100 Gbps

       RTE_ETH_LINK_CONNECTOR_QSFP56
	      Module to	mutiplex 4 SFP56 i.e. 4*50=200 Gbps

       RTE_ETH_LINK_CONNECTOR_QSFP_DD
	      Module to	mutiplex 4 SFP_DD i.e. 4*100=400 Gbps

       RTE_ETH_LINK_CONNECTOR_OTHER
	      non-physical interfaces like virtio, ring	etc. It	also  includes
	      unknown  connector  types,  i.e.	physical  connectors  not  yet
	      defined in this list of connector	types.

       Definition at line 326 of file rte_ethdev.h.

   enum	rte_eth_rx_mq_mode
       A set of	values to identify what	method is to be	used to	route  packets
       to multiple queues.

       Enumerator

       RTE_ETH_MQ_RX_NONE
	      None of DCB, RSS or VMDq mode

       RTE_ETH_MQ_RX_RSS
	      For Rx side, only	RSS is on

       RTE_ETH_MQ_RX_DCB
	      For Rx side,only DCB is on.

       RTE_ETH_MQ_RX_DCB_RSS
	      Both DCB and RSS enable

       RTE_ETH_MQ_RX_VMDQ_ONLY
	      Only VMDq, no RSS	nor DCB

       RTE_ETH_MQ_RX_VMDQ_RSS
	      RSS mode with VMDq

       RTE_ETH_MQ_RX_VMDQ_DCB
	      Use VMDq+DCB to route traffic to queues

       RTE_ETH_MQ_RX_VMDQ_DCB_RSS
	      Enable both VMDq and DCB in VMDq

       Definition at line 419 of file rte_ethdev.h.

   enum	rte_eth_tx_mq_mode
       A  set  of  values  to  identify	 what method is	to be used to transmit
       packets using multi-TCs.

       Enumerator

       RTE_ETH_MQ_TX_NONE
	      It is in neither DCB nor VT mode.

       RTE_ETH_MQ_TX_DCB
	      For Tx side,only DCB is on.

       RTE_ETH_MQ_TX_VMDQ_DCB
	      For Tx side,both DCB and VT is on.

       RTE_ETH_MQ_TX_VMDQ_ONLY
	      Only VT on, no DCB

       Definition at line 445 of file rte_ethdev.h.

   enum	rte_vlan_type
       VLAN types to indicate if it is for single VLAN,	inner  VLAN  or	 outer
       VLAN. Note that single VLAN is treated the same as inner	VLAN.

       Enumerator

       RTE_ETH_VLAN_TYPE_INNER
	      Inner VLAN.

       RTE_ETH_VLAN_TYPE_OUTER
	      Single VLAN, or outer VLAN.

       Definition at line 476 of file rte_ethdev.h.

   enum	rte_eth_hash_function
       Hash function types.

       Enumerator

       RTE_ETH_HASH_FUNCTION_DEFAULT
	      DEFAULT means driver decides which hash algorithm	to pick.

       RTE_ETH_HASH_FUNCTION_TOEPLITZ
	      Toeplitz

       RTE_ETH_HASH_FUNCTION_SIMPLE_XOR
	      Simple XOR

       RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ
	      Symmetric	 Toeplitz: src,	dst will be replaced by	xor(src, dst).
	      For the case with	src/dst	only, src or dst address will xor with
	      zero pair.

       RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT
	      Symmetric	Toeplitz: L3 and L4 fields are	sorted	prior  to  the
	      hash  function.  If  src_ip > dst_ip, swap src_ip	and dst_ip. If
	      src_port > dst_port, swap	src_port and dst_port.

       Definition at line 494 of file rte_ethdev.h.

   enum	rte_eth_nb_tcs
       This enum indicates the possible	 number	 of  traffic  classes  in  DCB
       configurations

       Enumerator

       RTE_ETH_4_TCS
	      4	TCs with DCB.

       RTE_ETH_8_TCS
	      8	TCs with DCB.

       Definition at line 944 of file rte_ethdev.h.

   enum	rte_eth_nb_pools
       This  enum  indicates  the  possible  number  of	 queue	pools  in VMDq
       configurations.

       Enumerator

       RTE_ETH_8_POOLS
	      8	VMDq pools.

       RTE_ETH_16_POOLS
	      16 VMDq pools.

       RTE_ETH_32_POOLS
	      32 VMDq pools.

       RTE_ETH_64_POOLS
	      64 VMDq pools.

       Definition at line 953 of file rte_ethdev.h.

   enum	rte_eth_fc_mode
       This enum indicates the flow control mode

       Enumerator

       RTE_ETH_FC_NONE
	      Disable flow control.

       RTE_ETH_FC_RX_PAUSE
	      Rx pause frame, enable flowctrl on Tx side.

       RTE_ETH_FC_TX_PAUSE
	      Tx pause frame, enable flowctrl on Rx side.

       RTE_ETH_FC_FULL
	      Enable flow control on both side.

       Definition at line 1396 of file rte_ethdev.h.

   enum	rte_eth_tunnel_type
       Tunnel type for device-specific classifier configuration.

       See also
	   rte_eth_udp_tunnel

       Definition at line 1485 of file rte_ethdev.h.

   enum	rte_eth_representor_type
       Ethernet	device information Ethernet device representor port type.

       Enumerator

       RTE_ETH_REPRESENTOR_NONE
	      not a representor.

       RTE_ETH_REPRESENTOR_VF
	      representor of Virtual Function.

       RTE_ETH_REPRESENTOR_SF
	      representor of Sub Function.

       RTE_ETH_REPRESENTOR_PF
	      representor of Physical Function.

       Definition at line 1772 of file rte_ethdev.h.

   enum	rte_eth_err_handle_mode
       Warning
	   EXPERIMENTAL: this enumeration may change without prior notice.

       Ethernet	device error handling mode.

       Enumerator

       RTE_ETH_ERROR_HANDLE_MODE_NONE
	      No error handling	modes are supported.

       RTE_ETH_ERROR_HANDLE_MODE_PASSIVE
	      Passive error handling, after the	PMD detects that  a  reset  is
	      required,	the PMD	reports

       See also
	   RTE_ETH_EVENT_INTR_RESET event, and the application invokes

	   rte_eth_dev_reset to	recover	the port.

       RTE_ETH_ERROR_HANDLE_MODE_PROACTIVE
	      Proactive	 error handling, after the PMD detects that a reset is
	      required,	the PMD	reports

       See also
	   RTE_ETH_EVENT_ERR_RECOVERING	event,	do  recovery  internally,  and
	   finally reports the recovery	result event (

	   RTE_ETH_EVENT_RECOVERY_*).

       Definition at line 1785 of file rte_ethdev.h.

   enum	rte_eth_fec_mode
       This  enum  indicates the possible Forward Error	Correction (FEC) modes
       of an ethdev port.

       Enumerator

       RTE_ETH_FEC_NOFEC
	      FEC is off

       RTE_ETH_FEC_AUTO
	      FEC autonegotiation modes

       RTE_ETH_FEC_BASER
	      FEC using	common algorithm

       RTE_ETH_FEC_RS
	      FEC using	RS algorithm

       RTE_ETH_FEC_LLRS
	      FEC using	LLRS algorithm

       Definition at line 2035 of file rte_ethdev.h.

   enum	rte_eth_dev_state
       Possible	states of an ethdev port.

       Enumerator

       RTE_ETH_DEV_UNUSED
	      Device is	unused before being probed.

       RTE_ETH_DEV_ATTACHED
	      Device is	attached when allocated	in probing.

       RTE_ETH_DEV_REMOVED
	      Device is	in removed state when plug-out is detected.

       Definition at line 2124 of file rte_ethdev.h.

   enum	rte_eth_event_macsec_subtype
       Subtypes	for MACsec  offload  event  (RTE_ETH_EVENT_MACSEC)  raised  by
       Ethernet	device.

       Enumerator

       RTE_ETH_SUBEVENT_MACSEC_UNKNOWN
	      Notifies unknown MACsec subevent.

       RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_V_EQ1
	      Subevent	   of	 RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR	sectag
	      validation events	Validation check: SecTag.TCI.V = 1

       RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_E_EQ0_C_EQ1
	      Subevent	  of	RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR	sectag
	      validation   events   Validation	check:	SecTag.TCI.E  =	 0  &&
	      SecTag.TCI.C = 1

       RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_SL_GTE48
	      Subevent	  of	RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR	sectag
	      validation events	Validation check: SecTag.SL >= 'd48

       RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_ES_EQ1_SC_EQ1
	      Subevent	   of	 RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR	sectag
	      validation  events  Validation  check:  SecTag.TCI.ES  =	1   &&
	      SecTag.TCI.SC = 1

       RTE_ETH_SUBEVENT_MACSEC_RX_SECTAG_SC_EQ1_SCB_EQ1
	      Subevent	   of	 RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR	sectag
	      validation  events  Validation  check:  SecTag.TCI.SC  =	1   &&
	      SecTag.TCI.SCB = 1

       Definition at line 4060 of file rte_ethdev.h.

   enum	rte_eth_event_macsec_type
       Event  types  for MACsec	offload	event (RTE_ETH_EVENT_MACSEC) raised by
       eth device.

       Enumerator

       RTE_ETH_EVENT_MACSEC_UNKNOWN
	      Notifies unknown MACsec event.

       RTE_ETH_EVENT_MACSEC_SECTAG_VAL_ERR
	      Notifies Sectag validation failure events.

       RTE_ETH_EVENT_MACSEC_RX_SA_PN_HARD_EXP
	      Notifies Rx SA hard expiry events.

       RTE_ETH_EVENT_MACSEC_RX_SA_PN_SOFT_EXP
	      Notifies Rx SA soft expiry events.

       RTE_ETH_EVENT_MACSEC_TX_SA_PN_HARD_EXP
	      Notifies Tx SA hard expiry events.

       RTE_ETH_EVENT_MACSEC_TX_SA_PN_SOFT_EXP
	      Notifies Tx SA soft events.

       RTE_ETH_EVENT_MACSEC_SA_NOT_VALID
	      Notifies Invalid SA event.

       Definition at line 4094 of file rte_ethdev.h.

   enum	rte_eth_event_ipsec_subtype
       Subtypes	for IPsec offload  event(RTE_ETH_EVENT_IPSEC)  raised  by  eth
       device.

       Enumerator

       RTE_ETH_EVENT_IPSEC_PMD_ERROR_START
	      PMD specific error start

       RTE_ETH_EVENT_IPSEC_PMD_ERROR_END
	      PMD specific error end

       RTE_ETH_EVENT_IPSEC_UNKNOWN
	      Unknown event type

       RTE_ETH_EVENT_IPSEC_ESN_OVERFLOW
	      Sequence number overflow

       RTE_ETH_EVENT_IPSEC_SA_TIME_EXPIRY
	      Soft time	expiry of SA

       RTE_ETH_EVENT_IPSEC_SA_BYTE_EXPIRY
	      Soft	byte	  expiry      of      SA     determined	    by
	      rte_security_ipsec_lifetime::bytes_soft_limit

       RTE_ETH_EVENT_IPSEC_SA_PKT_EXPIRY
	      Soft     packet	  expiry     of	    SA	    determined	    by
	      rte_security_ipsec_lifetime::packets_soft_limit

       RTE_ETH_EVENT_IPSEC_SA_BYTE_HARD_EXPIRY
	      Hard	byte	  expiry      of      SA     determined	    by
	      rte_security_ipsec_lifetime::bytes_hard_limit

       RTE_ETH_EVENT_IPSEC_SA_PKT_HARD_EXPIRY
	      Hard     packet	  expiry     of	    SA	    determined	    by
	      rte_security_ipsec_lifetime::packets_hard_limit

       RTE_ETH_EVENT_IPSEC_MAX
	      Max value	of this	enum

       Definition at line 4136 of file rte_ethdev.h.

   enum	rte_eth_event_type
       The  eth	 device	 event	type  for  interrupt,  and maybe others	in the
       future.

       Enumerator

       RTE_ETH_EVENT_UNKNOWN
	      unknown event type

       RTE_ETH_EVENT_INTR_LSC
	      lsc interrupt event

       RTE_ETH_EVENT_QUEUE_STATE
	      queue state event	(enabled/disabled)

       RTE_ETH_EVENT_INTR_RESET
	      reset interrupt event, sent to VF	on PF reset

       RTE_ETH_EVENT_VF_MBOX
	      message from the VF received by PF

       RTE_ETH_EVENT_MACSEC
	      MACsec offload related event

       RTE_ETH_EVENT_INTR_RMV
	      device removal event

       RTE_ETH_EVENT_NEW
	      The port is being	probed,	i.e. allocated and not yet  available.
	      It  is  too  early to check validity, query infos, and configure
	      the port.	But some functions, like  rte_eth_dev_socket_id()  and
	      rte_eth_dev_owner_*() are	available to the application.

       RTE_ETH_EVENT_DESTROY
	      port is released

       RTE_ETH_EVENT_IPSEC
	      IPsec offload related event

       RTE_ETH_EVENT_FLOW_AGED
	      New aged-out flows is detected

       RTE_ETH_EVENT_RX_AVAIL_THRESH
	      Number   of   available  Rx  descriptors	is  smaller  than  the
	      threshold.

       See also
	   rte_eth_rx_avail_thresh_set()

       RTE_ETH_EVENT_ERR_RECOVERING
	      Port recovering from  a  hardware	 or  firmware  error.  If  PMD
	      supports	proactive error	recovery, it should trigger this event
	      to notify	application that it detected an	error and the recovery
	      is being started.	Upon  receiving	 the  event,  the  application
	      should	not   invoke   any   control   path   API   (such   as
	      rte_eth_dev_configure/rte_eth_dev_stop...)    until    receiving
	      RTE_ETH_EVENT_RECOVERY_SUCCESS  or RTE_ETH_EVENT_RECOVERY_FAILED
	      event. The  PMD  will  set  the  data  path  pointers  to	 dummy
	      functions,  and  re-set  the  data  path	pointers  to non-dummy
	      functions	before reporting RTE_ETH_EVENT_RECOVERY_SUCCESS	event.
	      It means that the	application cannot send	or receive any packets
	      during this period.

       Note
	   Before the PMD reports the recovery result, the PMD may report  the
	   RTE_ETH_EVENT_ERR_RECOVERING	 event	again,	because	a larger error
	   may occur during the	recovery.

       RTE_ETH_EVENT_RECOVERY_SUCCESS
	      Port recovers successfully from the error. The PMD  already  re-
	      configured  the  port,  and  the effect is the same as a restart
	      operation.  a)  The  following  operation	 will	be   retained:
	      (alphabetically)

        DCB configuration

        FEC configuration

        Flow control configuration

        LRO configuration

        LSC configuration

        MTU

        MAC address (default and those	supplied by MAC	address	array)

        Promiscuous and allmulticast mode

        PTP configuration

        Queue (Rx/Tx) settings

        Queue statistics mappings

        RSS configuration by rte_eth_dev_rss_xxx() family

        Rx checksum configuration

        Rx interrupt settings

        Traffic management configuration

        VLAN configuration (including filtering, tpid,	strip, pvid)

        VMDq  configuration  b) The following configuration maybe retained or
	 not depending on the device capabilities:

        flow rules (

       See also
	   RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP)

        shared	flow objects (

       See also
	   RTE_ETH_DEV_CAPA_FLOW_SHARED_OBJECT_KEEP)	 c)	Any	 other
	   configuration will not be stored and	will need to be	re-configured.

       RTE_ETH_EVENT_RECOVERY_FAILED
	      Port  recovery  failed.  It  means  that	the port should	not be
	      usable anymore. The application should close the port.

       RTE_ETH_EVENT_MAX
	      max value	of this	enum

       Definition at line 4201 of file rte_ethdev.h.

   enum	rte_eth_cman_obj
       Enumerate list of ethdev	congestion management objects

       Enumerator

       RTE_ETH_CMAN_OBJ_RX_QUEUE
	      Congestion management based on Rx	queue depth

       RTE_ETH_CMAN_OBJ_RX_QUEUE_MEMPOOL
	      Congestion management based on mempool depth associated with  Rx
	      queue

       See also
	   rte_eth_rx_queue_setup()

       Definition at line 6063 of file rte_ethdev.h.

Function Documentation
   int	rte_eth_iterator_init  (struct	rte_dev_iterator  * iter, const	char *
       devargs)
       Initializes a device iterator.

       This iterator allows accessing a	list of	devices	matching some devargs.

       Parameters
	   iter	Device iterator	handle initialized by the function. The	fields
	   bus_str and cls_str might be	dynamically allocated,	and  could  be
	   freed by calling rte_eth_iterator_cleanup().
	   devargs Device description string.

       Returns
	   0 on	successful initialization, negative otherwise.

   uint16_t rte_eth_iterator_next (struct rte_dev_iterator * iter)
       Iterates	on devices with	devargs	filter.	The ownership is not checked.

       The next	port ID	is returned, and the iterator is updated.

       Parameters
	   iter	Device iterator	handle initialized by rte_eth_iterator_init().
	   Some	fields bus_str and cls_str might be freed when no more port is
	   found, by calling rte_eth_iterator_cleanup().

       Returns
	   A port ID if	found, RTE_MAX_ETHPORTS	otherwise.

   void	rte_eth_iterator_cleanup (struct rte_dev_iterator * iter)
       Free some allocated fields of the iterator.

       This function is	automatically called by	rte_eth_iterator_next()	on the
       last iteration (i.e. when no more matching port is found).

       It is safe to call this function	twice; it will do nothing more.

       Parameters
	   iter	Device iterator	handle initialized by rte_eth_iterator_init().
	   The fields bus_str and cls_str are freed if needed.

   static uint64_t rte_eth_rss_hf_refine (uint64_t rss_hf) [inline],  [static]

       For  input  set	change of hash filter, if SRC_ONLY and DST_ONLY	of the
       same level are used simultaneously, it is the same case as none of them
       are added.

       Parameters
	   rss_hf RSS types with SRC/DST_ONLY.

       Returns
	   RSS types.

       Definition at line 707 of file rte_ethdev.h.

   uint64_t  rte_eth_find_next_owned_by	 (uint16_t  port_id,  const   uint64_t
       owner_id)
       Iterates	over valid ethdev ports	owned by a specific owner.

       Parameters
	   port_id The ID of the next possible valid owned port.
	   owner_id  The  owner	identifier. RTE_ETH_DEV_NO_OWNER means iterate
	   over	all valid ownerless ports.

       Returns
	   Next	valid port ID owned by owner_id, RTE_MAX_ETHPORTS if there  is
	   none.

   uint16_t rte_eth_find_next (uint16_t	port_id)
       Iterates	over valid ethdev ports.

       Parameters
	   port_id The ID of the next possible valid port.

       Returns
	   Next	valid port ID, RTE_MAX_ETHPORTS	if there is none.

   uint16_t   rte_eth_find_next_of   (uint16_t	 port_id_start,	 const	struct
       rte_device * parent)
       Iterates	over ethdev ports of a specified device.

       Parameters
	   port_id_start The ID	of the next possible valid port.
	   parent The generic device behind the	ports to iterate.

       Returns
	   Next	  port	 ID   of   the	 device,    possibly	port_id_start,
	   RTE_MAX_ETHPORTS if there is	none.

   uint16_t   rte_eth_find_next_sibling	  (uint16_t   port_id_start,  uint16_t
       ref_port_id)
       Iterates	over sibling ethdev ports (i.e.	sharing	the same rte_device).

       Parameters
	   port_id_start The ID	of the next possible valid sibling port.
	   ref_port_id The ID of a reference port to compare rte_device	with.

       Returns
	   Next	sibling	port ID, possibly port_id_start	or ref_port_id itself,
	   RTE_MAX_ETHPORTS if there is	none.

   int rte_eth_dev_owner_new (uint64_t * owner_id)
       Get a new unique	owner identifier. An owner identifier is used to  owns
       Ethernet	 devices  by only one DPDK entity to avoid multiple management
       of device by different entities.

       Parameters
	   owner_id Owner identifier pointer.

       Returns
	   Negative errno value	on error, 0 on success.

   int	 rte_eth_dev_owner_set	 (const	  uint16_t   port_id,	const	struct
       rte_eth_dev_owner * owner)
       Set an Ethernet device owner.

       Parameters
	   port_id The identifier of the port to own.
	   owner The owner pointer.

       Returns
	   Negative errno value	on error, 0 on success.

   int	 rte_eth_dev_owner_unset   (const  uint16_t  port_id,  const  uint64_t
       owner_id)
       Unset Ethernet device owner to make the device ownerless.

       Parameters
	   port_id The identifier of port to make ownerless.
	   owner_id The	owner identifier.

       Returns
	   0 on	success, negative errno	value on error.

   int rte_eth_dev_owner_delete	(const uint64_t	owner_id)
       Remove owner from all Ethernet devices owned by a specific owner.

       Parameters
	   owner_id The	owner identifier.

       Returns
	   0 on	success, negative errno	value on error.

   int rte_eth_dev_owner_get (const uint16_t port_id, struct rte_eth_dev_owner
       * owner)
       Get the owner of	an Ethernet device.

       Parameters
	   port_id The port identifier.
	   owner The owner structure pointer to	fill.

       Returns
	   0 on	success, negative errno	value on error..

   uint16_t rte_eth_dev_count_avail (void)
       Get the number of ports which are usable	for the	application.

       These devices must be iterated by using the  macro  RTE_ETH_FOREACH_DEV
       or  RTE_ETH_FOREACH_DEV_OWNED_BY	 to deal with non-contiguous ranges of
       devices.

       Returns
	   The count of	available Ethernet devices.

   uint16_t rte_eth_dev_count_total (void)
       Get the total number of ports which are allocated.

       Some devices may	not be available for the application.

       Returns
	   The total count of Ethernet devices.

   uint32_t rte_eth_speed_bitflag (uint32_t speed, int duplex)
       Convert a numerical speed in Mbps to a bitmap flag that can be used  in
       the bitmap link_speeds of the struct rte_eth_conf

       Parameters
	   speed Numerical speed value in Mbps
	   duplex RTE_ETH_LINK_[HALF/FULL]_DUPLEX (only	for 10/100M speeds)

       Returns
	   0 if	the speed cannot be mapped

   const char *	rte_eth_dev_rx_offload_name (uint64_t offload)
       Get RTE_ETH_RX_OFFLOAD_*	flag name.

       Parameters
	   offload Offload flag.

       Returns
	   Offload name	or 'UNKNOWN' if	the flag cannot	be recognised.

   const char *	rte_eth_dev_tx_offload_name (uint64_t offload)
       Get RTE_ETH_TX_OFFLOAD_*	flag name.

       Parameters
	   offload Offload flag.

       Returns
	   Offload name	or 'UNKNOWN' if	the flag cannot	be recognised.

   __rte_experimental	const  char  *	rte_eth_dev_capability_name  (uint64_t
       capability)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Get RTE_ETH_DEV_CAPA_* flag name.

       Parameters
	   capability Capability flag.

       Returns
	   Capability name or 'UNKNOWN'	if the flag cannot be recognized.

   int rte_eth_dev_configure (uint16_t port_id,	uint16_t nb_rx_queue, uint16_t
       nb_tx_queue, const struct rte_eth_conf *	eth_conf)
       Configure an Ethernet device.  This  function  must  be	invoked	 first
       before  any  other function in the Ethernet API.	This function can also
       be re-invoked when a device is in the stopped state.

       Parameters
	   port_id The port identifier of the Ethernet device to configure.
	   nb_rx_queue The number of receive queues to set up for the Ethernet
	   device.
	   nb_tx_queue The number  of  transmit	 queues	 to  set  up  for  the
	   Ethernet device.
	   eth_conf  The  pointer to the configuration data to be used for the
	   Ethernet device. The	rte_eth_conf structure includes:

	    the hardware offload features to activate,	with dedicated	fields
	     for   each	  statically  configurable  offload  hardware  feature
	     provided by Ethernet devices, such	as IP  checksum	 or  VLAN  tag
	     stripping	for  example.  The Rx offload bitfield API is obsolete
	     and   will	  be   deprecated.   Applications   should   set   the
	     ignore_bitfield_offloads bit on rxmode structure and use offloads
	     field to set per-port offloads instead.

	    Any offloading set	in eth_conf->[rt]xmode.offloads	must be	within
	     the  [rt]x_offload_capa returned from rte_eth_dev_info_get(). Any
	     type of device supported offloading set  in  the  input  argument
	     eth_conf->[rt]xmode.offloads    to	  rte_eth_dev_configure()   is
	     enabled  on  all	queues	 and   it   can't   be	 disabled   in
	     rte_eth_[rt]x_queue_setup()

	    the  Receive Side Scaling (RSS) configuration when	using multiple
	     Rx	 queues	  per	port.	Any   RSS   hash   function   set   in
	     eth_conf->rss_conf.rss_hf	     must      be      within	   the
	     flow_type_rss_offloads	provided      by      drivers	   via
	     rte_eth_dev_info_get() API.

       Embedding  all  configuration information in a single data structure is
       the more	flexible method	that  allows  the  addition  of	 new  features
       without changing	the syntax of the API.

       Returns

	    0:	Success, device	configured.

	    <0: Error code returned by	the driver configuration function.

   int rte_eth_dev_is_removed (uint16_t	port_id)
       Check if	an Ethernet device was physically removed.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns
	   1 when the Ethernet device is removed, otherwise 0.

   int	 rte_eth_rx_queue_setup	  (uint16_t   port_id,	uint16_t  rx_queue_id,
       uint16_t	  nb_rx_desc,	unsigned   int	 socket_id,    const	struct
       rte_eth_rxconf *	rx_conf, struct	rte_mempool * mb_pool)
       Allocate	and set	up a receive queue for an Ethernet device.

       The  function  allocates	 a  contiguous	block of memory	for nb_rx_desc
       receive descriptors from	a memory zone associated  with	socket_id  and
       initializes  each  receive  descriptor  with a network buffer allocated
       from the	memory pool mb_pool.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rx_queue_id The index of the	receive	queue to  set  up.  The	 value
	   must	 be  in	 the range [0, nb_rx_queue - 1]	previously supplied to
	   rte_eth_dev_configure().
	   nb_rx_desc The number of receive descriptors	to  allocate  for  the
	   receive ring.
	   socket_id  The  socket_id argument is the socket identifier in case
	   of NUMA. The	value  can  be	SOCKET_ID_ANY  if  there  is  no  NUMA
	   constraint for the DMA memory allocated for the receive descriptors
	   of the ring.
	   rx_conf  The	 pointer  to the configuration data to be used for the
	   receive queue. NULL value is	allowed,  in  which  case  default  Rx
	   configuration  will	be  used.  The	rx_conf	 structure contains an
	   rx_thresh structure with the	values	of  the	 Prefetch,  Host,  and
	   Write-Back  threshold registers of the receive ring.	In addition it
	   contains the	hardware  offloads  features  to  activate  using  the
	   RTE_ETH_RX_OFFLOAD_*	   flags.    If	   an	 offloading   set   in
	   rx_conf->offloads  hasn't  been   set   in	the   input   argument
	   eth_conf->rxmode.offloads  to  rte_eth_dev_configure(), it is a new
	   added offloading, it	must be	per-queue type and it is  enabled  for
	   the queue. No need to repeat	any bit	in rx_conf->offloads which has
	   already  been  enabled in rte_eth_dev_configure() at	port level. An
	   offloading enabled at port level can't be disabled at queue	level.
	   The	configuration structure	also contains the pointer to the array
	   of the  receiving  buffer  segment  descriptions,  see  rx_seg  and
	   rx_nseg  fields, this extended configuration	might be used by split
	   offloads like RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT. If  mb_pool  is  not
	   NULL,  the  extended	 configuration	fields must be set to NULL and
	   zero.
	   mb_pool The pointer to the  memory  pool  from  which  to  allocate
	   rte_mbuf  network memory buffers to populate	each descriptor	of the
	   receive  ring.  There  are  two  options  to	 provide   Rx	buffer
	   configuration:

	    single pool: mb_pool is not NULL, rx_conf.rx_nseg is 0.

	    multiple segments description: mb_pool is NULL, rx_conf.rx_seg is
	     not   NULL,   rx_conf.rx_nseg  is	not  0.	 Taken	only  if  flag
	     RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT is	set in offloads.

       Returns

	    0:	Success, receive queue correctly set up.

	    -EIO: if device is	removed.

	    -ENODEV: if port_id is invalid.

	    -EINVAL: The memory pool pointer is null or the size  of  network
	     buffers which can be allocated from this memory pool does not fit
	     the various buffer	sizes allowed by the device controller.

	    -ENOMEM:  Unable  to  allocate the	receive	ring descriptors or to
	     allocate  network	memory	buffers	 from  the  memory  pool  when
	     initializing receive descriptors.

   __rte_experimental  int  rte_eth_rx_hairpin_queue_setup  (uint16_t port_id,
       uint16_t	   rx_queue_id,	   uint16_t    nb_rx_desc,    const	struct
       rte_eth_hairpin_conf * conf)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Allocate	and set	up a hairpin receive queue for an Ethernet device.

       The function set	up the selected	queue to be used in hairpin.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rx_queue_id The index of the	receive	queue to  set  up.  The	 value
	   must	 be  in	 the range [0, nb_rx_queue - 1]	previously supplied to
	   rte_eth_dev_configure().
	   nb_rx_desc The number of receive descriptors	to  allocate  for  the
	   receive ring. 0 means the PMD will use default value.
	   conf	The pointer to the hairpin configuration.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENOMEM) if unable to allocate the resources.

   int	 rte_eth_tx_queue_setup	  (uint16_t   port_id,	uint16_t  tx_queue_id,
       uint16_t	  nb_tx_desc,	unsigned   int	 socket_id,    const	struct
       rte_eth_txconf *	tx_conf)
       Allocate	and set	up a transmit queue for	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   tx_queue_id	The  index  of the transmit queue to set up. The value
	   must	be in the range	[0, nb_tx_queue	- 1]  previously  supplied  to
	   rte_eth_dev_configure().
	   nb_tx_desc  The  number of transmit descriptors to allocate for the
	   transmit ring.
	   socket_id The socket_id argument is the socket identifier  in  case
	   of  NUMA.  Its  value  can  be  SOCKET_ID_ANY  if  there is no NUMA
	   constraint  for  the	 DMA  memory  allocated	  for	the   transmit
	   descriptors of the ring.
	   tx_conf  The	 pointer  to the configuration data to be used for the
	   transmit queue. NULL	value is allowed, in  which  case  default  Tx
	   configuration  will	be  used.  The	tx_conf	structure contains the
	   following data:

	    The tx_thresh structure with the values of	 the  Prefetch,	 Host,
	     and  Write-Back  threshold	 registers  of the transmit ring. When
	     setting Write-Back	threshold to  the  value  greater  then	 zero,
	     tx_rs_thresh value	should be explicitly set to one.

	    The  tx_free_thresh  value	 indicates  the	 [minimum]  number  of
	     network buffers that must be pending  in  the  transmit  ring  to
	     trigger their [implicit] freeing by the driver transmit function.

	    The tx_rs_thresh value indicates the [minimum] number of transmit
	     descriptors  that	must  be  pending  in the transmit ring	before
	     setting the RS  bit  on  a	 descriptor  by	 the  driver  transmit
	     function.	The  tx_rs_thresh  value  should be less or equal then
	     tx_free_thresh value, and	both  of  them	should	be  less  then
	     nb_tx_desc	- 3.

	    The  offloads  member  contains  Tx offloads to be	enabled. If an
	     offloading	set in tx_conf->offloads hasn't	been set in the	 input
	     argument eth_conf->txmode.offloads	to rte_eth_dev_configure(), it
	     is	 a  new	 added offloading, it must be per-queue	type and it is
	     enabled  for  the	queue.	No  need  to   repeat	any   bit   in
	     tx_conf->offloads	  which	   has	 already   been	  enabled   in
	     rte_eth_dev_configure() at	port level. An offloading  enabled  at
	     port level	can't be disabled at queue level.

	   Note	 that setting tx_free_thresh or	tx_rs_thresh value to 0	forces
	   the transmit	function to use	default	values.

       Returns

	    0:	Success, the transmit queue is correctly set up.

	    -ENOMEM: Unable to	allocate the transmit ring descriptors.

   __rte_experimental int  rte_eth_tx_hairpin_queue_setup  (uint16_t  port_id,
       uint16_t	    tx_queue_id,    uint16_t	nb_tx_desc,    const	struct
       rte_eth_hairpin_conf * conf)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Allocate	and set	up a transmit hairpin queue for	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   tx_queue_id	The  index  of the transmit queue to set up. The value
	   must	be in the range	[0, nb_tx_queue	- 1]  previously  supplied  to
	   rte_eth_dev_configure().
	   nb_tx_desc  The  number of transmit descriptors to allocate for the
	   transmit ring. 0 to set default PMD value.
	   conf	The hairpin configuration.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENOMEM) if unable to allocate the resources.

   __rte_experimental int  rte_eth_hairpin_get_peer_ports  (uint16_t  port_id,
       uint16_t	* peer_ports, size_t len, uint32_t direction)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Get all the hairpin peer	Rx / Tx	ports of the current port. The	caller
       should ensure that the array is large enough to save the	ports list.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   peer_ports Pointer to the array to store the	peer ports list.
	   len Length of the array to store the	port identifiers.
	   direction  Current  port  to	peer port direction positive - current
	   used	as Tx to get all peer Rx ports.	zero - current used as	Rx  to
	   get all peer	Tx ports.

       Returns

	    (0	or positive) actual peer ports number.

	    (-EINVAL) if bad parameter.

	    (-ENODEV) if port_id invalid

	    (-ENOTSUP)	if hardware doesn't support.

	    Others detailed errors from PMDs.

   __rte_experimental  int  rte_eth_hairpin_bind  (uint16_t  tx_port, uint16_t
       rx_port)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Bind  all  hairpin  Tx  queues of one port to the Rx queues of the peer
       port. It	is only	allowed	to call	this function after all	hairpin	queues
       are configured properly and the devices are in started state.

       Parameters
	   tx_port The identifier of the Tx port.
	   rx_port The identifier of peer Rx port. RTE_MAX_ETHPORTS is allowed
	   for the traversal of	all devices. Rx	port ID	could  have  the  same
	   value as Tx port ID.

       Returns

	    (0) if successful.

	    (-ENODEV) if Tx port ID is	invalid.

	    (-EBUSY) if device	is not in started state.

	    (-ENOTSUP)	if hardware doesn't support.

	    Others detailed errors from PMDs.

   __rte_experimental  int  rte_eth_hairpin_unbind (uint16_t tx_port, uint16_t
       rx_port)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Unbind all hairpin Tx queues of one port	from the Rx queues of the peer
       port. This should be called before closing the Tx or Rx devices,	if the
       bind function is	called before. After unbinding the hairpin ports pair,
       it  is allowed to bind them again. Changing queues configuration	should
       be after	stopping the device(s).

       Parameters
	   tx_port The identifier of the Tx port.
	   rx_port The identifier of peer Rx port. RTE_MAX_ETHPORTS is allowed
	   for traversal of all	devices. Rx port ID could have the same	 value
	   as Tx port ID.

       Returns

	    (0) if successful.

	    (-ENODEV) if Tx port ID is	invalid.

	    (-EBUSY) if device	is in stopped state.

	    (-ENOTSUP)	if hardware doesn't support.

	    Others detailed errors from PMDs.

   __rte_experimental int rte_eth_dev_count_aggr_ports (uint16_t port_id)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Get  the	 number	 of  aggregated	ports of the DPDK port (specified with
       port_id). It is used when multiple ports	are aggregated into  a	single
       one.

       For the regular physical	port doesn't have aggregated ports, the	number
       of aggregated ports is reported as 0.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (>=0) the number of aggregated port if success.

   __rte_experimental  int rte_eth_dev_map_aggr_tx_affinity (uint16_t port_id,
       uint16_t	tx_queue_id, uint8_t affinity)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Map a Tx	queue with an aggregated port of the DPDK port (specified with
       port_id). When multiple ports are aggregated  into  a  single  one,  it
       allows to choose	which port to use for Tx via a queue.

       The  application	 should	 use  rte_eth_dev_map_aggr_tx_affinity() after
       rte_eth_dev_configure(),	   rte_eth_tx_queue_setup(),	and	before
       rte_eth_dev_start().

       Parameters
	   port_id The identifier of the port used in rte_eth_tx_burst().
	   tx_queue_id	 The   index   of   the	  transmit   queue   used   in
	   rte_eth_tx_burst(). The value must be in the	range [0,  nb_tx_queue
	   - 1]	previously supplied to rte_eth_dev_configure().
	   affinity  The  number  of  the  aggregated  port.  Value 0 means no
	   affinity and	traffic	could be routed	to any	aggregated  port.  The
	   first  aggregated port is number 1 and so on. The maximum number is
	   given by rte_eth_dev_count_aggr_ports().

       Returns
	   Zero	if successful. Non-zero	otherwise.

   int rte_eth_dev_socket_id (uint16_t port_id)
       Return the NUMA socket to which an Ethernet device is connected

       Parameters
	   port_id The port identifier of the Ethernet device

       Returns

	    The NUMA socket ID	which the Ethernet device is connected to.

	    -1	(which translates to SOCKET_ID_ANY) if the socket could	not be
	     determined. rte_errno is then set to:

	      EINVAL is the port_id is	invalid,

	      0 is the	socket could not be determined,

   int rte_eth_dev_is_valid_port (uint16_t port_id)
       Check if	port_id	of device is attached

       Parameters
	   port_id The port identifier of the Ethernet device

       Returns

	    0 if port is out of range or not attached

	    1 if device is attached

   __rte_experimental	int   rte_eth_rx_queue_is_valid	  (uint16_t   port_id,
       uint16_t	queue_id)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice.

       Check if	Rx queue is  valid.  If	 the  queue  has  been	setup,	it  is
       considered valid.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the receive queue.

       Returns

	    -ENODEV: if port_id is invalid.

	    -EINVAL: if queue_id is out of range or queue has not been	setup.

	    0 if Rx queue is valid.

   __rte_experimental	int   rte_eth_tx_queue_is_valid	  (uint16_t   port_id,
       uint16_t	queue_id)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice.

       Check  if  Tx  queue  is	 valid.	 If  the  queue	 has been setup, it is
       considered valid.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the transmit queue.

       Returns

	    -ENODEV: if port_id is invalid.

	    -EINVAL: if queue_id is out of range or queue has not been	setup.

	    0 if Tx queue is valid.

   int rte_eth_dev_rx_queue_start (uint16_t port_id, uint16_t rx_queue_id)
       Start specified Rx queue	of a port. It is used  when  rx_deferred_start
       flag of the specified queue is true.

       Parameters
	   port_id The port identifier of the Ethernet device
	   rx_queue_id The index of the	Rx queue to update the ring. The value
	   must	 be  in	 the range [0, nb_rx_queue - 1]	previously supplied to
	   rte_eth_dev_configure().

       Returns

	    0:	Success, the receive queue is started.

	    -ENODEV: if port_id is invalid.

	    -EINVAL: The queue_id out of range	or belong to hairpin.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function not	supported in PMD.

   int rte_eth_dev_rx_queue_stop (uint16_t port_id, uint16_t rx_queue_id)
       Stop specified Rx queue of a port

       Parameters
	   port_id The port identifier of the Ethernet device
	   rx_queue_id The index of the	Rx queue to update the ring. The value
	   must	be in the range	[0, nb_rx_queue	- 1]  previously  supplied  to
	   rte_eth_dev_configure().

       Returns

	    0:	Success, the receive queue is stopped.

	    -ENODEV: if port_id is invalid.

	    -EINVAL: The queue_id out of range	or belong to hairpin.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function not	supported in PMD.

   int rte_eth_dev_tx_queue_start (uint16_t port_id, uint16_t tx_queue_id)
       Start   Tx   for	  specified   queue   of  a  port.  It	is  used  when
       tx_deferred_start flag of the specified queue is	true.

       Parameters
	   port_id The port identifier of the Ethernet device
	   tx_queue_id The index of the	Tx queue to update the ring. The value
	   must	be in the range	[0, nb_tx_queue	- 1]  previously  supplied  to
	   rte_eth_dev_configure().

       Returns

	    0:	Success, the transmit queue is started.

	    -ENODEV: if port_id is invalid.

	    -EINVAL: The queue_id out of range	or belong to hairpin.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function not	supported in PMD.

   int rte_eth_dev_tx_queue_stop (uint16_t port_id, uint16_t tx_queue_id)
       Stop specified Tx queue of a port

       Parameters
	   port_id The port identifier of the Ethernet device
	   tx_queue_id The index of the	Tx queue to update the ring. The value
	   must	 be  in	 the range [0, nb_tx_queue - 1]	previously supplied to
	   rte_eth_dev_configure().

       Returns

	    0:	Success, the transmit queue is stopped.

	    -ENODEV: if port_id is invalid.

	    -EINVAL: The queue_id out of range	or belong to hairpin.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function not	supported in PMD.

   int rte_eth_dev_start (uint16_t port_id)
       Start an	Ethernet device.

       The device start	step is	the last  one  and  consists  of  setting  the
       configured  offload  features  and  in  starting	 the  transmit and the
       receive units of	the device.

       Device RTE_ETH_DEV_NOLIVE_MAC_ADDR flag causes MAC address  to  be  set
       before PMD port start callback function is invoked.

       All  device queues (except form deferred	start queues) status should be
       RTE_ETH_QUEUE_STATE_STARTED after start.

       On success, all basic functions exported	 by  the  Ethernet  API	 (link
       status, receive/transmit, and so	on) can	be invoked.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    0:	Success, Ethernet device started.

	    -EAGAIN: If start operation must be retried.

	    <0: Error code of the driver device start function.

   int rte_eth_dev_stop	(uint16_t port_id)
       Stop  an	 Ethernet  device.  The	device can be restarted	with a call to
       rte_eth_dev_start()

       All device queues status	should	be  RTE_ETH_QUEUE_STATE_STOPPED	 after
       stop.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    0:	Success, Ethernet device stopped.

	    -EBUSY: If	stopping the port is not allowed in current state.

	    <0: Error code of the driver device stop function.

   int rte_eth_dev_set_link_up (uint16_t port_id)
       Link up an Ethernet device.

       Set  device link	up will	re-enable the device Rx/Tx functionality after
       it is previously	set device linked down.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    0:	Success, Ethernet device linked	up.

	    <0: Error code of the driver device link up function.

   int rte_eth_dev_set_link_down (uint16_t port_id)
       Link down an Ethernet device. The device	Rx/Tx  functionality  will  be
       disabled	 if  success,  and  it	can  be	 re-enabled  with  a  call  to
       rte_eth_dev_set_link_up()

       Parameters
	   port_id The port identifier of the Ethernet device.

   int rte_eth_dev_close (uint16_t port_id)
       Close a stopped Ethernet	device.	The device cannot  be  restarted!  The
       function	frees all port resources.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    Zero if the port is closed	successfully.

	    Negative if something went	wrong.

   int rte_eth_dev_reset (uint16_t port_id)
       Reset a Ethernet	device and keep	its port ID.

       When  a port has	to be reset passively, the DPDK	application can	invoke
       this function. For example when a PF is reset, all its VFs should  also
       be  reset.  Normally  a	DPDK application can invoke this function when
       RTE_ETH_EVENT_INTR_RESET	event is detected, but	can  also  use	it  to
       start a port reset in other circumstances.

       When  this  function  is	called,	it first stops the port	and then calls
       the PMD specific	dev_uninit( ) and dev_init( ) to return	 the  port  to
       initial	state,	in which no Tx and Rx queues are setup,	as if the port
       has been	reset and not started. The port	 keeps	the  port  ID  it  had
       before the function call.

       After   calling	 rte_eth_dev_reset(  ),	 the  application  should  use
       rte_eth_dev_configure(	    ),	     rte_eth_rx_queue_setup(	    ),
       rte_eth_tx_queue_setup(	), and rte_eth_dev_start( ) to reconfigure the
       device as appropriate.

       Note: To	avoid unexpected behavior, the application should stop calling
       Tx and Rx functions before calling  rte_eth_dev_reset(  ).  For	thread
       safety,	all these controlling functions	should be called from the same
       thread.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-ENOTSUP)	if hardware doesn't support this function.

	    (-EPERM) if not ran from the primary process.

	    (-EIO) if re-initialisation failed	or device is removed.

	    (-ENOMEM) if the reset failed due to OOM.

	    (-EAGAIN) if the reset temporarily	failed and should  be  retried
	     later.

   int rte_eth_promiscuous_enable (uint16_t port_id)
       Enable receipt in promiscuous mode for an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for promiscuous_enable() does not exist for
	     the device.

	    (-ENODEV) if port_id invalid.

   int rte_eth_promiscuous_disable (uint16_t port_id)
       Disable receipt in promiscuous mode for an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	 if  support  for promiscuous_disable()	does not exist
	     for the device.

	    (-ENODEV) if port_id invalid.

   int rte_eth_promiscuous_get (uint16_t port_id)
       Return the value	of promiscuous mode for	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (1) if promiscuous	is enabled

	    (0) if promiscuous	is disabled.

	    (-1) on error

   int rte_eth_allmulticast_enable (uint16_t port_id)
       Enable the receipt of any multicast frame by an Ethernet	device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for allmulticast_enable()  does  not	 exist
	     for the device.

	    (-ENODEV) if port_id invalid.

   int rte_eth_allmulticast_disable (uint16_t port_id)
       Disable the receipt of all multicast frames by an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	 if  support for allmulticast_disable()	does not exist
	     for the device.

	    (-ENODEV) if port_id invalid.

   int rte_eth_allmulticast_get	(uint16_t port_id)
       Return the value	of allmulticast	mode for an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (1) if allmulticast is enabled

	    (0) if allmulticast is disabled.

	    (-1) on error

   int rte_eth_link_get	(uint16_t port_id, struct rte_eth_link * link)
       Retrieve	the link status	(up/down), the duplex  mode  (half/full),  the
       negotiation (auto/fixed), and if	available, the speed (Mbps).

       It might	need to	wait up	to 9 seconds.

       See also
	   rte_eth_link_get_nowait.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   link	Link information written back.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if the function	is not supported in PMD.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   int rte_eth_link_get_nowait (uint16_t port_id, struct rte_eth_link *	link)
       Retrieve	 the  link  status (up/down), the duplex mode (half/full), the
       negotiation (auto/fixed), and if	available, the speed (Mbps).

       Parameters
	   port_id The port identifier of the Ethernet device.
	   link	Link information written back.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if the function	is not supported in PMD.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental  const  char   *	 rte_eth_link_speed_to_str   (uint32_t
       link_speed)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       The  function converts a	link_speed to a	string.	It handles all special
       values like unknown or none speed.

       Parameters
	   link_speed link_speed of rte_eth_link struct

       Returns
	   Link	speed in textual format. It's pointer to immutable memory.  No
	   free	is required.

   __rte_experimental	const	char   *  rte_eth_link_connector_to_str	 (enum
       rte_eth_link_connector link_connector)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       This function converts an Ethernet link type to a string.

       Parameters
	   link_connector The link type	to convert.

       Returns
	   NULL	 for  invalid  link  connector	values	otherwise  the	string
	   representation of the link type.

   __rte_experimental  int  rte_eth_link_to_str	(char *	str, size_t len, const
       struct rte_eth_link * eth_link)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       The function converts a rte_eth_link struct representing	a link	status
       to a string.

       Parameters
	   str	A pointer to a string to be filled with	textual	representation
	   of device status. At	least RTE_ETH_LINK_MAX_STR_LEN bytes should be
	   allocated to	store default link status text.
	   len Length of available memory at 'str' string.
	   eth_link Link status	returned by rte_eth_link_get function

       Returns
	   Number of bytes written to str array	or -EINVAL if bad parameter.

   __rte_experimental int rte_eth_speed_lanes_get (uint16_t port_id,  uint32_t
       * lanes)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Get Active lanes.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   lanes Driver	updates	lanes with the number of active	 lanes.	 On  a
	   supported   NIC  on	link  up,  lanes  will	be  a  non-zero	 value
	   irrespective	whether	the link is Autonegotiated or Fixed speed.  No
	   information is displayed for	error.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support. that
	     operation.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

   __rte_experimental  int rte_eth_speed_lanes_set (uint16_t port_id, uint32_t
       speed_lanes)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Set speed lanes supported by the	NIC.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   speed_lanes	A non-zero number of speed lanes, that will be applied
	   to the ethernet PHY	along  with  the  fixed	 speed	configuration.
	   Driver  returns error if the	user lanes is not in speeds capability
	   list.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support. that
	     operation.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if lanes	count not in speeds capability list.

   __rte_experimental	int    rte_eth_speed_lanes_get_capability    (uint16_t
       port_id,	 struct	 rte_eth_speed_lanes_capa * speed_lanes_capa, unsigned
       int num)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Get speed lanes supported by the	NIC.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   speed_lanes_capa  An	 array	of  supported  speed and its supported
	   lanes.
	   num Size of the speed_lanes_capa array. The size is	equal  to  the
	   supported speeds list size. Value of	num is derived by calling this
	   api with speed_lanes_capa=NULL and num=0

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support. that
	     operation.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if speed_lanes invalid

   int rte_eth_stats_get (uint16_t port_id, struct rte_eth_stats * stats)
       Retrieve	the general I/O	statistics of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   stats  A  pointer to	a structure of type rte_eth_stats to be	filled
	   with	the values  of	device	counters  for  the  following  set  of
	   statistics:

	    ipackets with the total of	successfully received packets.

	    opackets with the total of	successfully transmitted packets.

	    ibytes with the total of successfully received bytes.

	    obytes with the total of successfully transmitted bytes.

	    ierrors with the total of erroneous received packets.

	    oerrors with the total of failed transmitted packets.

       Returns
	   Zero	if successful. Non-zero	otherwise.

   int rte_eth_stats_reset (uint16_t port_id)
       Reset the general I/O statistics	of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if device notified to reset stats.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (<0): Error code of the driver stats reset	function.

   int rte_eth_xstats_get_names	(uint16_t port_id, struct rte_eth_xstat_name *
       xstats_names, unsigned int size)
       Retrieve	names of extended statistics of	an Ethernet device.

       There  is  an  assumption  that	'xstat_names'  and 'xstats' arrays are
       matched by array	index: xstats_names[i].name => xstats[i].value

       And the array index is same with	id field  of  'struct  rte_eth_xstat':
       xstats[i].id == i

       This  assumption	 makes	key-value  pair	 matching  less	 flexible  but
       simpler.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   xstats_names	An rte_eth_xstat_name array of at least	size  elements
	   to  be  filled.  If	set to NULL, the function returns the required
	   number of elements.
	   size	The size of the	xstats_names array (number of elements).

       Returns

	    A positive	value lower or equal  to  size:	 success.  The	return
	     value is the number of entries filled in the stats	table.

	    A	positive  value	 higher	than size: error, the given statistics
	     table is too small. The return value corresponds to the size that
	     should be given to	succeed. The entries  in  the  table  are  not
	     valid and shall not be used by the	caller.

	    A negative	value on error (invalid	port ID).

   int	rte_eth_xstats_get  (uint16_t  port_id,	struct rte_eth_xstat * xstats,
       unsigned	int n)
       Retrieve	extended statistics of an Ethernet device.

       There is	an assumption  that  'xstat_names'  and	 'xstats'  arrays  are
       matched by array	index: xstats_names[i].name => xstats[i].value

       And  the	 array	index is same with id field of 'struct rte_eth_xstat':
       xstats[i].id == i

       This  assumption	 makes	key-value  pair	 matching  less	 flexible  but
       simpler.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   xstats  A  pointer to a table of structure of type rte_eth_xstat to
	   be filled with device statistics ids	and values. This parameter can
	   be set to NULL if and only if n is 0.
	   n The size of the xstats array (number of elements).	If lower  than
	   the	required number	of elements, the function returns the required
	   number of elements. If equal	to zero, the xstats must be NULL,  the
	   function returns the	required number	of elements.

       Returns

	    A	positive  value	lower or equal to n: success. The return value
	     is	the number of entries filled in	the stats table.

	    A positive	value higher than n: error, the	given statistics table
	     is	too small. The return  value  corresponds  to  the  size  that
	     should  be	 given	to  succeed.  The entries in the table are not
	     valid and shall not be used by the	caller.

	    A negative	value on error (invalid	port ID).

   int	  rte_eth_xstats_get_names_by_id     (uint16_t	   port_id,	struct
       rte_eth_xstat_name * xstats_names, unsigned int size, uint64_t *	ids)
       Retrieve	names of extended statistics of	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   xstats_names	 Array	to be filled in	with names of requested	device
	   statistics. Must not	be NULL	if ids are specified (not NULL).
	   size	Number of elements in xstats_names array (if not NULL) and  in
	   ids array (if not NULL). Must be 0 if both array pointers are NULL.
	   ids	IDs array given	by app to retrieve specific statistics.	May be
	   NULL	 to  retrieve  names  of  all  available  statistics  or,   if
	   xstats_names	 is  NULL  as  well,  just  the	 number	 of  available
	   statistics.

       Returns

	    A positive	value lower or equal  to  size:	 success.  The	return
	     value is the number of entries filled in the stats	table.

	    A	positive value higher than size: success. The given statistics
	     table is too small. The return value corresponds to the size that
	     should be given to	succeed. The entries  in  the  table  are  not
	     valid and shall not be used by the	caller.

	    A negative	value on error.

   int	rte_eth_xstats_get_by_id  (uint16_t  port_id,  const  uint64_t	* ids,
       uint64_t	* values, unsigned int size)
       Retrieve	extended statistics of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   ids IDs array given by app to retrieve specific statistics. May  be
	   NULL	 to retrieve all available statistics or, if values is NULL as
	   well, just the number of available statistics.
	   values Array	to be filled in	with requested device statistics. Must
	   not be NULL if ids are specified (not NULL).
	   size	Number of elements in values array (if not NULL)  and  in  ids
	   array (if not NULL).	Must be	0 if both array	pointers are NULL.

       Returns

	    A	positive  value	 lower	or  equal to size: success. The	return
	     value is the number of entries filled in the stats	table.

	    A positive	value higher than size:	success: The given  statistics
	     table is too small. The return value corresponds to the size that
	     should  be	 given	to  succeed.  The entries in the table are not
	     valid and shall not be used by the	caller.

	    A negative	value on error.

   int	rte_eth_xstats_get_id_by_name  (uint16_t   port_id,   const   char   *
       xstat_name, uint64_t * id)
       Gets the	ID of a	statistic from its name.

       This function searches for the statistics using string compares,	and as
       such  should  not  be used on the fast-path. For	fast-path retrieval of
       specific	statistics, store the ID as provided in	id from	this function,
       and pass	the ID to rte_eth_xstats_get()

       Parameters
	   port_id The port to look up statistics from
	   xstat_name The name of the statistic	to return
	   id A	pointer	to an app-supplied uint64_t which should be set	to the
	   ID of the stat if the stat exists.

       Returns
	   0 on	success	 -ENODEV  for  invalid	port_id,  -EIO	if  device  is
	   removed, -EINVAL if the xstat_name doesn't exist in port_id -ENOMEM
	   if bad parameter.

   __rte_experimental	int   rte_eth_xstats_set_counter   (uint16_t  port_id,
       uint64_t	id, int	on_off)
       Enable/Disable the xstat	counter	of the given id.

       Parameters
	   port_id The port to look up statistics from
	   id The ID of	the counter to enable
	   on_off The state to set the counter to.

       Returns

	    (0) on success

	    (-EEXIST) counter already enabled

	    (-ENOTSUP)	enable/disable is not implemented

	    (-EINVAL) xstat id	is invalid

	    (-EPERM) enabling this counter is not permitted

	    (-ENOSPC) no resources

   __rte_experimental  int   rte_eth_xstats_query_state	  (uint16_t   port_id,
       uint64_t	id)
       Query the state of the xstat counter.

       Parameters
	   port_id The port to look up statistics from
	   id The ID of	the counter to query

       Returns

	    (0) xstat is enabled

	    (1) xstat is disabled

	    (-ENOTSUP)	enable/disabling is not	implemented

	    (-EINVAL) xstat id	is invalid

   int rte_eth_xstats_reset (uint16_t port_id)
       Reset extended statistics of an Ethernet	device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if device notified to reset extended stats.

	    (-ENOTSUP)	 if  pmd doesn't support both extended stats and basic
	     stats reset.

	    (-ENODEV) if port_id invalid.

	    (<0): Error code of the driver xstats reset function.

   __rte_deprecated   int   rte_eth_dev_set_tx_queue_stats_mapping   (uint16_t
       port_id,	uint16_t tx_queue_id, uint8_t stat_idx)
       Set  a  mapping	for the	specified transmit queue to the	specified per-
       queue statistics	counter.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   tx_queue_id The index of the	transmit queue for which a queue stats
	   mapping is required.	The value must be in the range [0, nb_tx_queue
	   - 1]	previously supplied to rte_eth_dev_configure().
	   stat_idx The	per-queue packet statistics functionality number  that
	   the	transmit  queue	 is  to	 be assigned. The value	must be	in the
	   range     [0,     RTE_ETHDEV_QUEUE_STAT_CNTRS     -	   1].	   Max
	   RTE_ETHDEV_QUEUE_STAT_CNTRS being 256.

       Returns
	   Zero	if successful. Non-zero	otherwise.

   __rte_deprecated   int   rte_eth_dev_set_rx_queue_stats_mapping   (uint16_t
       port_id,	uint16_t rx_queue_id, uint8_t stat_idx)
       Set a mapping for the specified receive queue  to  the  specified  per-
       queue statistics	counter.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rx_queue_id	The index of the receive queue for which a queue stats
	   mapping is required.	The value must be in the range [0, nb_rx_queue
	   - 1]	previously supplied to rte_eth_dev_configure().
	   stat_idx The	per-queue packet statistics functionality number  that
	   the receive queue is	to be assigned.	The value must be in the range
	   [0,	      RTE_ETHDEV_QUEUE_STAT_CNTRS	 -	 1].	   Max
	   RTE_ETHDEV_QUEUE_STAT_CNTRS being 256.

       Returns
	   Zero	if successful. Non-zero	otherwise.

   int	rte_eth_macaddr_get  (uint16_t	port_id,   struct   rte_ether_addr   *
       mac_addr)
       Retrieve	the Ethernet address of	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mac_addr  A	pointer	to a structure of type ether_addr to be	filled
	   with	the Ethernet address of	the Ethernet device.

       Returns

	    (0) if successful

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental  int  rte_eth_macaddrs_get  (uint16_t  port_id,	struct
       rte_ether_addr *	ma, unsigned int num)
       Warning
	   EXPERIMENTAL: this API may change without prior notice

       Retrieve	the Ethernet addresses of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   ma  A  pointer  to  an array	of structures of type ether_addr to be
	   filled with the Ethernet addresses of the Ethernet device.
	   num	 Number	  of   elements	  in   the   ma	  array.   Note	  that
	   rte_eth_dev_info::max_mac_addrs  can	be used	to retrieve max	number
	   of Ethernet addresses for given port.

       Returns

	    number of retrieved addresses if successful

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   int	rte_eth_dev_info_get  (uint16_t	 port_id,  struct  rte_eth_dev_info  *
       dev_info)
       Retrieve	the contextual information of an Ethernet device.

       This  function  returns	the  Ethernet  device information based	on the
       values stored internally	in the	device	specific  data.	 For  example:
       number  of  queues,  descriptor limits, device capabilities and offload
       flags.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   dev_info A pointer to a structure of	type  rte_eth_dev_info	to  be
	   filled with the contextual information of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	 if support for	dev_infos_get()	does not exist for the
	     device.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental  int  rte_eth_dev_conf_get  (uint16_t  port_id,	struct
       rte_eth_conf * dev_conf)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Retrieve	the configuration of an	Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   dev_conf  Location  for  Ethernet device configuration to be	filled
	   in.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   int rte_eth_dev_fw_version_get (uint16_t port_id, char * fw_version,	size_t
       fw_size)
       Retrieve	the firmware version of	a device.

       Parameters
	   port_id The port identifier of the device.
	   fw_version A	pointer	to a string array storing the firmware version
	   of a	device,	the string includes terminating	null. This pointer  is
	   allocated by	caller.
	   fw_size  The	 size of the string array pointed by fw_version, which
	   should be large enough to store firmware version of the device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if operation is	not supported.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if bad parameter.

	    (>0) if fw_size is	not enough to store firmware  version,	return
	     the size of the non truncated string.

   int	  rte_eth_dev_get_supported_ptypes    (uint16_t	   port_id,   uint32_t
       ptype_mask, uint32_t * ptypes, int num)
       Retrieve	the supported packet types of an Ethernet device.

       When a packet type is announced as supported, it	must be	recognized  by
       the  PMD.  For instance,	if RTE_PTYPE_L2_ETHER, RTE_PTYPE_L2_ETHER_VLAN
       and RTE_PTYPE_L3_IPV4 are announced, the	PMD must return	the  following
       packet types for	these packets:

        Ether/IPv4 -> RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4

        Ether/VLAN/IPv4 -> RTE_PTYPE_L2_ETHER_VLAN | RTE_PTYPE_L3_IPV4

        Ether/[anything else] -> RTE_PTYPE_L2_ETHER

        Ether/VLAN/[anything else] -> RTE_PTYPE_L2_ETHER_VLAN

       When  a	packet	is  received  by  a PMD, the most precise type must be
       returned	among the ones supported. However a  PMD  is  allowed  to  set
       packet type that	is not in the supported	list, at the condition that it
       is  more	precise. Therefore, a PMD announcing no	supported packet types
       can still set a matching	packet type in a received packet.

       Note
	   Better to invoke this API after the device is already started or Rx
	   burst function is decided, to obtain	correct	supported ptypes.

	   if a	given PMD does not report what ptypes it  supports,  then  the
	   supported ptype count is reported as	0.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   ptype_mask  A  hint of what kind of packet type which the caller is
	   interested in.
	   ptypes An array pointer to store adequate packet  types,  allocated
	   by caller.
	   num Size of the array pointed by param ptypes.

       Returns

	    (>=0)  Number of supported	ptypes.	If the number of types exceeds
	     num, only num entries will	be filled into the ptypes  array,  but
	     the full count of supported ptypes	will be	returned.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   int rte_eth_dev_set_ptypes (uint16_t	port_id, uint32_t ptype_mask, uint32_t
       * set_ptypes, unsigned int num)
       Inform Ethernet device about reduced range of packet types to handle.

       Application can use this	function to set	only specific ptypes that it's
       interested.  This  information  can  be	used by	the PMD	to optimize Rx
       path.

       The function accepts an array set_ptypes	allocated  by  the  caller  to
       store the packet	types set by the driver, the last element of the array
       is  set to RTE_PTYPE_UNKNOWN. The size of the set_ptype array should be
       rte_eth_dev_get_supported_ptypes() + 1 else it  might  only  be	filled
       partially.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   ptype_mask  The  ptype  family  that	 application  is interested in
	   should be bitwise OR	of RTE_PTYPE_*_MASK or 0.
	   set_ptypes An array pointer to store	set packet types, allocated by
	   caller. The function	marks the end of array with RTE_PTYPE_UNKNOWN.
	   num	Size  of  the  array  pointed  by  param  ptypes.  Should   be
	   rte_eth_dev_get_supported_ptypes()  +  1  to	 accommodate  the  set
	   ptypes.

       Returns

	    (0) if Success.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if ptype_mask is	invalid	(or) set_ptypes	 is  NULL  and
	     num > 0.

   int rte_eth_dev_get_mtu (uint16_t port_id, uint16_t * mtu)
       Retrieve	the MTU	of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mtu	A  pointer  to	a  uint16_t  where  the	retrieved MTU is to be
	   stored.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   int rte_eth_dev_set_mtu (uint16_t port_id, uint16_t mtu)
       Change the MTU of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mtu A uint16_t for the MTU to be applied.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if operation is	not supported.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if mtu invalid, validation  of  mtu  can	 occur	within
	     rte_eth_dev_set_mtu  if  dev_infos_get is supported by the	device
	     or	when the mtu is	set using dev->dev_ops->mtu_set.

	    (-EBUSY) if operation is not allowed when the port	is running

   int rte_eth_dev_vlan_filter (uint16_t port_id, uint16_t vlan_id, int	on)
       Enable/Disable hardware filtering by an	Ethernet  device  of  received
       VLAN packets tagged with	a given	VLAN Tag Identifier.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   vlan_id  The	VLAN Tag Identifier whose filtering must be enabled or
	   disabled.
	   on If > 0, enable  VLAN  filtering  of  VLAN	 packets  tagged  with
	   vlan_id.  Otherwise,	 disable VLAN filtering	of VLAN	packets	tagged
	   with	vlan_id.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware-assisted VLAN filtering not	configured.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-ENOSYS) if VLAN filtering on port_id disabled.

	    (-EINVAL) if vlan_id > 4095.

   int	 rte_eth_dev_set_vlan_strip_on_queue   (uint16_t   port_id,   uint16_t
       rx_queue_id, int	on)
       Enable/Disable hardware VLAN Strip by a Rx queue	of an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rx_queue_id	 The   index   of   the	 receive  queue	 on  which  to
	   enable/disable VLAN stripping. The value must be in the  range  [0,
	   nb_rx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   on If 1, Enable VLAN	Stripping of the receive queue of the Ethernet
	   port.  If  0,  Disable  VLAN	 Stripping of the receive queue	of the
	   Ethernet port.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware-assisted VLAN stripping not	configured.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if rx_queue_id invalid.

   int rte_eth_dev_set_vlan_ether_type (uint16_t port_id,  enum	 rte_vlan_type
       vlan_type, uint16_t tag_type)
       Set the Outer VLAN Ether	Type by	an Ethernet device, it can be inserted
       to the VLAN header.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   vlan_type The VLAN type.
	   tag_type The	Tag Protocol ID

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware-assisted VLAN TPID setup is	not supported.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   int rte_eth_dev_set_vlan_offload (uint16_t port_id, int offload_mask)
       Set VLAN	offload	configuration on an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   offload_mask	 The  VLAN Offload bit mask can	be mixed use with 'OR'
	   RTE_ETH_VLAN_STRIP_OFFLOAD		   RTE_ETH_VLAN_FILTER_OFFLOAD
	   RTE_ETH_VLAN_EXTEND_OFFLOAD RTE_ETH_QINQ_STRIP_OFFLOAD

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware-assisted VLAN filtering not	configured.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   int rte_eth_dev_get_vlan_offload (uint16_t port_id)
       Read VLAN Offload configuration from an Ethernet	device

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (>0)      if     successful.     Bit     mask     to     indicate
	     RTE_ETH_VLAN_STRIP_OFFLOAD		   RTE_ETH_VLAN_FILTER_OFFLOAD
	     RTE_ETH_VLAN_EXTEND_OFFLOAD RTE_ETH_QINQ_STRIP_OFFLOAD

	    (-ENODEV) if port_id invalid.

   int rte_eth_dev_set_vlan_pvid (uint16_t port_id, uint16_t pvid, int on)
       Set port	based Tx VLAN insertion	on or off.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   pvid	Port based Tx VLAN identifier together with user priority.
	   on Turn on or off the port based Tx VLAN insertion.

       Returns

	    (0) if successful.

	    negative if failed.

   __rte_experimental	int   rte_eth_rx_avail_thresh_set  (uint16_t  port_id,
       uint16_t	queue_id, uint8_t avail_thresh)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Set Rx queue available descriptors threshold.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the receive queue.
	   avail_thresh	The available descriptors threshold is	percentage  of
	   Rx  queue  size  which  describes  the availability of Rx queue for
	   hardware. If	the Rx queue  availability  is	below  it,  the	 event
	   RTE_ETH_EVENT_RX_AVAIL_THRESH  is  triggered.  [1-99]  to set a new
	   available descriptors threshold. 0 to disable threshold monitoring.

       Returns

	    0 if successful.

	    (-ENODEV) if port_id is invalid.

	    (-EINVAL) if bad parameter.

	    (-ENOTSUP)	 if  available	Rx  descriptors	  threshold   is   not
	     supported.

	    (-EIO) if device is removed.

   __rte_experimental  int  rte_eth_rx_avail_thresh_query  (uint16_t  port_id,
       uint16_t	* queue_id, uint8_t * avail_thresh)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Find Rx queue with RTE_ETH_EVENT_RX_AVAIL_THRESH	event pending.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id On input starting Rx queue index to	search	from.  If  the
	   queue_id  is	 bigger	 than  maximum queue ID	of the port, search is
	   started from	0. So that application can keep	calling	this  function
	   to handle all pending events	with a simple increment	of queue_id on
	   the	next call. On output if	return value is	1, Rx queue index with
	   the event pending.
	   avail_thresh	Location for available descriptors  threshold  of  the
	   found Rx queue.

       Returns

	    1 if an Rx	queue with pending event is found.

	    0 if no Rx	queue with pending event is found.

	    (-ENODEV) if port_id is invalid.

	    (-EINVAL) if bad parameter	(e.g. queue_id is NULL).

	    (-ENOTSUP)	if operation is	not supported.

	    (-EIO) if device is removed.

   int rte_eth_tx_buffer_init (struct rte_eth_dev_tx_buffer * buffer, uint16_t
       size)
       Initialize default values for buffered transmitting

       Parameters
	   buffer Tx buffer to be initialized.
	   size	Buffer size

       Returns
	   0 if	no error

   int	 rte_eth_tx_buffer_set_err_callback  (struct  rte_eth_dev_tx_buffer  *
       buffer, buffer_tx_error_fn callback, void * userdata)
       Configure a callback for	buffered packets which cannot be sent

       Register	a specific callback to be called when an attempt  is  made  to
       send  all packets buffered on an	Ethernet port, but not all packets can
       successfully be sent. The callback registered here will be called  only
       from  calls  to rte_eth_tx_buffer() and rte_eth_tx_buffer_flush() APIs.
       The default callback configured for each	queue by  default  just	 frees
       the  packets  back  to  the calling mempool. If additional behaviour is
       required,  for  example,	 to  count  dropped  packets,  or   to	 retry
       transmission  of	 packets which cannot be sent, this function should be
       used to register	a suitable callback function to	implement the  desired
       behaviour. The example callback 'rte_eth_tx_buffer_count_callback()' is
       also provided as	reference.

       Parameters
	   buffer The port identifier of the Ethernet device.
	   callback The	function to be used as the callback.
	   userdata Arbitrary parameter	to be passed to	the callback function

       Returns
	   0 on	success, or -EINVAL if bad parameter

   void	 rte_eth_tx_buffer_drop_callback  (struct  rte_mbuf  **	pkts, uint16_t
       unsent, void * userdata)
       Callback	function for silently dropping unsent buffered packets.

       This function can be passed to rte_eth_tx_buffer_set_err_callback()  to
       adjust  the default behavior when buffered packets cannot be sent. This
       function	drops any unsent packets silently and is used by  Tx  buffered
       operations as default behavior.

       NOTE: this function should not be called	directly, instead it should be
       used as a callback for packet buffering.

       NOTE:   when   configuring   this   function   as   a   callback	  with
       rte_eth_tx_buffer_set_err_callback(),  the  final,  userdata  parameter
       should point to an uint64_t value.

       Parameters
	   pkts	The previously buffered	packets	which could not	be sent
	   unsent The number of	unsent packets in the pkts array
	   userdata Not	used

   void	 rte_eth_tx_buffer_count_callback  (struct  rte_mbuf **	pkts, uint16_t
       unsent, void * userdata)
       Callback	function for tracking unsent buffered packets.

       This function can be passed to rte_eth_tx_buffer_set_err_callback()  to
       adjust  the default behavior when buffered packets cannot be sent. This
       function	drops any unsent packets, but  also  updates  a	 user-supplied
       counter	to  track  the	overall	number of packets dropped. The counter
       should be an uint64_t variable.

       NOTE: this function should not be called	directly, instead it should be
       used as a callback for packet buffering.

       NOTE:   when   configuring   this   function   as   a   callback	  with
       rte_eth_tx_buffer_set_err_callback(),  the  final,  userdata  parameter
       should point to an uint64_t value.

       Parameters
	   pkts	The previously buffered	packets	which could not	be sent
	   unsent The number of	unsent packets in the pkts array
	   userdata Pointer to an uint64_t value, which	will be	incremented by
	   unsent

   int rte_eth_tx_done_cleanup (uint16_t port_id, uint16_t queue_id,  uint32_t
       free_cnt)
       Request	the  driver  to	free mbufs currently cached by the driver. The
       driver will only	free the mbuf if it is no longer in  use.  It  is  the
       application's  responsibility  to ensure	rte_eth_tx_buffer_flush(..) is
       called if needed.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of  the  transmit	 queue	through	 which	output
	   packets  must  be  sent.  The  value	 must  be  in  the  range  [0,
	   nb_tx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   free_cnt Maximum number of packets to free. Use 0 to	 indicate  all
	   possible  packets  should be	freed. Note that a packet may be using
	   multiple mbufs.

       Returns
	   Failure: < 0	-ENODEV: Invalid interface  -EIO:  device  is  removed
	   -ENOTSUP:  Driver  does  not	 support  function  Success: >=	0 0-n:
	   Number of packets freed. More packets may still remain in ring that
	   are in use.

   int	   rte_eth_dev_callback_register     (uint16_t	    port_id,	  enum
       rte_eth_event_type event, rte_eth_dev_cb_fn cb_fn, void * cb_arg)
       Register	a callback function for	port event.

       Parameters
	   port_id  Port ID. RTE_ETH_ALL means register	the event for all port
	   ids.
	   event Event interested.
	   cb_fn User supplied callback	function to be called.
	   cb_arg Pointer to the parameters for	the registered callback.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   int	   rte_eth_dev_callback_unregister     (uint16_t     port_id,	  enum
       rte_eth_event_type event, rte_eth_dev_cb_fn cb_fn, void * cb_arg)
       Unregister a callback function for port event.

       Parameters
	   port_id  Port  ID.  RTE_ETH_ALL  means unregister the event for all
	   port	ids.
	   event Event interested.
	   cb_fn User supplied callback	function to be called.
	   cb_arg Pointer to the parameters for	the  registered	 callback.  -1
	   means to remove all for the same callback address and same event.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   int rte_eth_dev_rx_intr_enable (uint16_t port_id, uint16_t queue_id)
       When  there  is no Rx packet coming in Rx Queue for a long time,	we can
       sleep lcore related to  Rx  Queue  for  power  saving,  and  enable  Rx
       interrupt to be triggered when Rx packet	arrives.

       The rte_eth_dev_rx_intr_enable()	function enables Rx queue interrupt on
       specific	Rx queue of a port.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The  index	 of  the  receive queue	from which to retrieve
	   input packets. The value must be in the range [0, nb_rx_queue -  1]
	   previously supplied to rte_eth_dev_configure().

       Returns

	    (0) if successful.

	    (-ENOTSUP)	 if underlying hardware	OR driver doesn't support that
	     operation.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   int rte_eth_dev_rx_intr_disable (uint16_t port_id, uint16_t queue_id)
       When lcore wakes	up from	Rx interrupt indicating	packet coming, disable
       Rx interrupt and	returns	to polling mode.

       The rte_eth_dev_rx_intr_disable() function disables Rx queue  interrupt
       on specific Rx queue of a port.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The  index	 of  the  receive queue	from which to retrieve
	   input packets. The value must be in the range [0, nb_rx_queue -  1]
	   previously supplied to rte_eth_dev_configure().

       Returns

	    (0) if successful.

	    (-ENOTSUP)	 if underlying hardware	OR driver doesn't support that
	     operation.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   int rte_eth_dev_rx_intr_ctl (uint16_t port_id, int epfd,  int  op,  void  *
       data)
       Rx Interrupt control per	port.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   epfd	 Epoll	instance fd which the intr vector associated to. Using
	   RTE_EPOLL_PER_THREAD	allows to use per thread epoll instance.
	   op The operation be performed for the  vector.  Operation  type  of
	   {RTE_INTR_EVENT_ADD,	RTE_INTR_EVENT_DEL}.
	   data	User raw data.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   int	rte_eth_dev_rx_intr_ctl_q  (uint16_t  port_id,	uint16_t queue_id, int
       epfd, int op, void * data)
       Rx Interrupt control per	queue.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the receive  queue  from  which  to  retrieve
	   input  packets. The value must be in	the range [0, nb_rx_queue - 1]
	   previously supplied to rte_eth_dev_configure().
	   epfd	Epoll instance fd which	the intr vector	associated  to.	 Using
	   RTE_EPOLL_PER_THREAD	allows to use per thread epoll instance.
	   op  The  operation  be  performed for the vector. Operation type of
	   {RTE_INTR_EVENT_ADD,	RTE_INTR_EVENT_DEL}.
	   data	User raw data.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   int rte_eth_dev_rx_intr_ctl_q_get_fd	(uint16_t port_id, uint16_t queue_id)
       Get interrupt fd	per Rx queue.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the receive  queue  from  which  to  retrieve
	   input  packets. The value must be in	the range [0, nb_rx_queue - 1]
	   previously supplied to rte_eth_dev_configure().

       Returns

	    (>=0) the interrupt fd associated to the requested	 Rx  queue  if
	     successful.

	    (-1) on error.

   int rte_eth_led_on (uint16_t	port_id)
       Turn  on	the LED	on the Ethernet	device.	This function turns on the LED
       on the Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support  that
	     operation.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   int rte_eth_led_off (uint16_t port_id)
       Turn  off  the  LED on the Ethernet device. This	function turns off the
       LED on the Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support  that
	     operation.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

   __rte_experimental int rte_eth_fec_get_capability (uint16_t port_id,	struct
       rte_eth_fec_capa	* speed_fec_capa, unsigned int num)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Get Forward Error Correction(FEC) capability.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   speed_fec_capa  speed_fec_capa   is	 out   only   with   per-speed
	   capabilities.  If  set  to  NULL, the function returns the required
	   number of required array entries.
	   num a number	of elements in an speed_fec_capa array.

       Returns

	    A non-negative value lower	or equal to num: success.  The	return
	     value is the number of entries filled in the fec capa array.

	    A	non-negative  value higher than	num: error, the	given fec capa
	     array is too small. The return value corresponds to the num  that
	     should be given to	succeed. The entries in	fec capa array are not
	     valid and shall not be used by the	caller.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support. that
	     operation.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if num or speed_fec_capa	invalid

   __rte_experimental	int  rte_eth_fec_get  (uint16_t	 port_id,  uint32_t  *
       fec_capa)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Get  current  Forward  Error  Correction(FEC) mode. If link is down and
       AUTO is enabled,	AUTO is	returned, otherwise, configured	 FEC  mode  is
       returned. If link is up,	current	FEC mode is returned.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   fec_capa A bitmask with the current FEC mode.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support. that
	     operation.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

   __rte_experimental	int   rte_eth_fec_set	(uint16_t   port_id,  uint32_t
       fec_capa)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Set Forward Error Correction(FEC) mode.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   fec_capa  A	bitmask	 of allowed FEC	modes. If only the AUTO	bit is
	   set,	the decision on	which FEC mode to use will be made by HW/FW or
	   driver. If the AUTO bit is set with some FEC	modes, only  specified
	   FEC	modes can be set. If AUTO bit is clear,	specify	FEC mode to be
	   used	(only one valid	mode per speed may be set).

       Returns

	    (0) if successful.

	    (-EINVAL) if the FEC mode is not valid.

	    (-ENOTSUP)	if underlying hardware OR driver doesn't support.

	    (-EIO) if device is removed.

	    (-ENODEV) if port_id invalid.

   int rte_eth_dev_flow_ctrl_get (uint16_t port_id, struct  rte_eth_fc_conf  *
       fc_conf)
       Get  current  status  of	 the  Ethernet	link flow control for Ethernet
       device

       Parameters
	   port_id The port identifier of the Ethernet device.
	   fc_conf The pointer to  the	structure  where  to  store  the  flow
	   control parameters.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support flow control.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if bad parameter.

   int	rte_eth_dev_flow_ctrl_set  (uint16_t port_id, struct rte_eth_fc_conf *
       fc_conf)
       Configure the Ethernet link flow	control	for Ethernet device

       Parameters
	   port_id The port identifier of the Ethernet device.
	   fc_conf  The	 pointer  to  the  structure  of  the	flow   control
	   parameters.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support flow control mode.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter

	    (-EIO) if flow control setup failure or device is removed.

   int	  rte_eth_dev_priority_flow_ctrl_set	(uint16_t    port_id,	struct
       rte_eth_pfc_conf	* pfc_conf)
       Configure the Ethernet priority flow control under DCB environment  for
       Ethernet	device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   pfc_conf  The pointer to the	structure of the priority flow control
	   parameters.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware  doesn't  support  priority	 flow  control
	     mode.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter

	    (-EIO) if flow control setup failure or device is removed.

   int	rte_eth_dev_mac_addr_add  (uint16_t  port_id,  struct rte_ether_addr *
       mac_addr, uint32_t pool)
       Add a MAC address to the	set used for filtering incoming	packets.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mac_addr The	MAC address to add.
	   pool	VMDq  pool  index  to  associate  address  with	 (if  VMDq  is
	   enabled). If	VMDq is	not enabled, this should be set	to 0.

       Returns

	    (0) if successfully added or mac_addr was already added.

	    (-ENOTSUP)	if hardware doesn't support this feature.

	    (-ENODEV) if port is invalid.

	    (-EIO) if device is removed.

	    (-ENOSPC) if no more MAC addresses	can be added.

	    (-EINVAL) if MAC address is invalid.

   __rte_experimental	  int	 rte_eth_dev_priority_flow_ctrl_queue_info_get
       (uint16_t port_id, struct rte_eth_pfc_queue_info	* pfc_queue_info)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Retrieve	the information	for queue based	PFC.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   pfc_queue_info   A	 pointer    to	  a    structure    of	  type
	   rte_eth_pfc_queue_info  to  be  filled  with	 the information about
	   queue based PFC.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for priority_flow_ctrl_queue_info_get  does
	     not exist.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental	 int	rte_eth_dev_priority_flow_ctrl_queue_configure
       (uint16_t port_id, struct rte_eth_pfc_queue_conf	* pfc_queue_conf)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Configure the queue based priority flow control for a given  queue  for
       Ethernet	device.

       Note
	   When	 an  ethdev  port  switches  to	 queue	based  PFC  mode,  the
	   unconfigured	queues shall be	configured by the driver with  default
	   values such as lower	priority value for TC etc.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   pfc_queue_conf  The	pointer	 to the	structure of the priority flow
	   control parameters for the queue.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support queue based	PFC mode.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter

	    (-EIO) if flow control setup queue	failure

   int rte_eth_dev_mac_addr_remove (uint16_t port_id, struct rte_ether_addr  *
       mac_addr)
       Remove a	MAC address from the internal array of addresses.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mac_addr MAC	address	to remove.

       Returns

	    (0) if successful,	or mac_addr didn't exist.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port invalid.

	    (-EADDRINUSE) if attempting to remove the default MAC address.

	    (-EINVAL) if MAC address is invalid.

   int	   rte_eth_dev_default_mac_addr_set    (uint16_t    port_id,	struct
       rte_ether_addr *	mac_addr)
       Set the default MAC address. It replaces	the address at index 0 of  the
       MAC  address  list. If the address was already in the MAC address list,
       please remove it	first.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mac_addr New	default	MAC address.

       Returns

	    (0) if successful,	or mac_addr didn't exist.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port invalid.

	    (-EINVAL) if MAC address is invalid.

	    (-EEXIST) if MAC address was already in the address list.

   int	   rte_eth_dev_rss_reta_update	   (uint16_t	  port_id,	struct
       rte_eth_rss_reta_entry64	* reta_conf, uint16_t reta_size)
       Update  Redirection  Table(RETA)	 of  Receive  Side Scaling of Ethernet
       device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   reta_conf RETA to update.
	   reta_size Redirection table size. The table size can	be queried  by
	   rte_eth_dev_info_get().

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-EIO) if device is removed.

   int	    rte_eth_dev_rss_reta_query	    (uint16_t	   port_id,	struct
       rte_eth_rss_reta_entry64	* reta_conf, uint16_t reta_size)
       Query Redirection Table(RETA)  of  Receive  Side	 Scaling  of  Ethernet
       device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   reta_conf   RETA   to   query.   For	 each  requested  reta	entry,
	   corresponding bit in	mask must be set.
	   reta_size Redirection table size. The table size can	be queried  by
	   rte_eth_dev_info_get().

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-EIO) if device is removed.

   int	rte_eth_dev_uc_hash_table_set (uint16_t	port_id, struct	rte_ether_addr
       * addr, uint8_t on)
       Updates	unicast	 hash  table  for  receiving  packet  with  the	 given
       destination  MAC	address, and the packet	is routed to all VFs for which
       the Rx mode is accept packets that match	the unicast hash table.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   addr	Unicast	MAC address.
	   on 1	- Set an unicast hash bit for receiving	packets	with  the  MAC
	   address. 0 -	Clear an unicast hash bit.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if bad parameter.

   int rte_eth_dev_uc_all_hash_table_set (uint16_t port_id, uint8_t on)
       Updates	all unicast hash bitmaps for receiving packet with any Unicast
       Ethernet	MAC addresses,the packet is routed to all VFs for which	the Rx
       mode is accept packets that match the unicast hash table.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   on 1	- Set all unicast hash bitmaps for receiving all the  Ethernet
	   MAC addresses 0 - Clear all unicast hash bitmaps

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if bad parameter.

   int	rte_eth_set_queue_rate_limit  (uint16_t	 port_id,  uint16_t queue_idx,
       uint32_t	tx_rate)
       Set the rate limitation for a queue on an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_idx The queue ID.
	   tx_rate The Tx rate in Mbps.	Allocated from	the  total  port  link
	   speed.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support this feature.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if bad parameter.

   int	rte_eth_dev_rss_hash_update (uint16_t port_id, struct rte_eth_rss_conf
       * rss_conf)
       Configuration of	Receive	Side  Scaling  hash  computation  of  Ethernet
       device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rss_conf  The  new configuration to use for RSS hash	computation on
	   the port.

       Returns

	    (0) if successful.

	    (-ENODEV) if port identifier is invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

   int	   rte_eth_dev_rss_hash_conf_get     (uint16_t	   port_id,	struct
       rte_eth_rss_conf	* rss_conf)
       Retrieve	current	configuration of Receive Side Scaling hash computation
       of Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   rss_conf  Where  to store the current RSS hash configuration	of the
	   Ethernet device.

       Returns

	    (0) if successful.

	    (-ENODEV) if port identifier is invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if hardware doesn't support RSS.

	    (-EINVAL) if bad parameter.

   __rte_experimental	const	char   *    rte_eth_dev_rss_algo_name	 (enum
       rte_eth_hash_function rss_algo)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice.

       Get the name of RSS hash	algorithm.

       Parameters
	   rss_algo Hash algorithm.

       Returns
	   Hash	 algorithm  name  or  'UNKNOWN'	 if  the  rss_algo  cannot  be
	   recognized.

   __rte_experimental int rte_eth_find_rss_algo	(const char * name, uint32_t *
       algo)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice.

       Get RSS hash algorithm by its name.

       Parameters
	   name	RSS hash algorithm.
	   algo	Return the RSS hash algorithm found,

       See also
	   rte_eth_hash_function.

       Returns

	    (0) if successful.

	    (-EINVAL) if not found.

   int	  rte_eth_dev_udp_tunnel_port_add    (uint16_t	   port_id,	struct
       rte_eth_udp_tunnel * tunnel_udp)
       Add UDP tunneling port for a type of tunnel.

       Some  NICs  may	require	 such configuration to properly	parse a	tunnel
       with any	standard or custom UDP port. The packets with  this  UDP  port
       will  be	 parsed	 for  this type	of tunnel. The device parser will also
       check the rest of the tunnel headers before classifying the packet.

       With some devices, this API will	affect packet classification, i.e.:

        mbuf.packet_type reported on Rx

        rte_flow rules	with tunnel items

       Parameters
	   port_id The port identifier of the Ethernet device.
	   tunnel_udp UDP tunneling configuration.

       Returns

	    (0) if successful.

	    (-ENODEV) if port identifier is invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if hardware doesn't support tunnel type.

   int	 rte_eth_dev_udp_tunnel_port_delete    (uint16_t    port_id,	struct
       rte_eth_udp_tunnel * tunnel_udp)
       Delete UDP tunneling port for a type of tunnel.

       The  packets  with this UDP port	will not be classified as this type of
       tunnel anymore if  the  device  use  such  mapping  for	tunnel	packet
       classification.

       See also
	   rte_eth_dev_udp_tunnel_port_add

       Parameters
	   port_id The port identifier of the Ethernet device.
	   tunnel_udp UDP tunneling configuration.

       Returns

	    (0) if successful.

	    (-ENODEV) if port identifier is invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if hardware doesn't support tunnel type.

   int	rte_eth_dev_get_dcb_info  (uint16_t port_id, struct rte_eth_dcb_info *
       dcb_info)
       Get DCB information on an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   dcb_info DCB	information.

       Returns

	    (0) if successful.

	    (-ENODEV) if port identifier is invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

   const  struct  rte_eth_rxtx_callback	 *  rte_eth_add_rx_callback  (uint16_t
       port_id,	uint16_t queue_id, rte_rx_callback_fn fn, void * user_param)
       Add a callback to be called on packet Rx	on a given port	and queue.

       This  API  configures a function	to be called for each burst of packets
       received	on a given NIC port queue. The return value is a pointer  that
       can     be    used    to	   later    remove    the    callback	 using
       rte_eth_remove_rx_callback().

       Multiple	functions are called in	the order that they are	added.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	queue on the Ethernet device on	which the callback  is
	   to be added.
	   fn The callback function
	   user_param A	generic	pointer	parameter which	will be	passed to each
	   invocation  of the callback function	on this	port and queue.	Inter-
	   thread  synchronization  of	any   user   data   changes   is   the
	   responsibility of the user.

       Returns
	   NULL	 on error. On success, a pointer value which can later be used
	   to remove the callback.

   const   struct   rte_eth_rxtx_callback   *	 rte_eth_add_first_rx_callback
       (uint16_t  port_id,  uint16_t  queue_id,	 rte_rx_callback_fn fn,	void *
       user_param)
       Add a callback that must	be called first	on packet Rx on	a  given  port
       and queue.

       This  API  configures  a	 first function	to be called for each burst of
       packets received	on a given NIC port  queue.  The  return  value	 is  a
       pointer	 that	can  be	 used  to  later  remove  the  callback	 using
       rte_eth_remove_rx_callback().

       Multiple	functions are called in	the order that they are	added.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	queue on the Ethernet device on	which the callback  is
	   to be added.
	   fn The callback function
	   user_param A	generic	pointer	parameter which	will be	passed to each
	   invocation  of the callback function	on this	port and queue.	Inter-
	   thread  synchronization  of	any   user   data   changes   is   the
	   responsibility of the user.

       Returns
	   NULL	 on error. On success, a pointer value which can later be used
	   to remove the callback.

   const  struct  rte_eth_rxtx_callback	 *  rte_eth_add_tx_callback  (uint16_t
       port_id,	uint16_t queue_id, rte_tx_callback_fn fn, void * user_param)
       Add a callback to be called on packet Tx	on a given port	and queue.

       This  API  configures a function	to be called for each burst of packets
       sent on a given NIC port	queue. The return value	is a pointer that  can
       be      used	to     later	 remove	    the	    callback	 using
       rte_eth_remove_tx_callback().

       Multiple	functions are called in	the order that they are	added.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	queue on the Ethernet device on	which the callback  is
	   to be added.
	   fn The callback function
	   user_param A	generic	pointer	parameter which	will be	passed to each
	   invocation  of the callback function	on this	port and queue.	Inter-
	   thread  synchronization  of	any   user   data   changes   is   the
	   responsibility of the user.

       Returns
	   NULL	 on error. On success, a pointer value which can later be used
	   to remove the callback.

   int rte_eth_remove_rx_callback (uint16_t port_id, uint16_t queue_id,	 const
       struct rte_eth_rxtx_callback * user_cb)
       Remove an Rx packet callback from a given port and queue.

       This  function  is  used	 to removed callbacks that were	added to a NIC
       port queue using	rte_eth_add_rx_callback().

       Note: the callback is removed from the callback list but	it isn't freed
       since the it may	still be in use. The memory for	the  callback  can  be
       subsequently freed back by the application by calling rte_free():

        Immediately  -	 if  the  port	is  stopped, or	the user knows that no
	 callbacks are in flight e.g. if called	from the thread	doing Rx/Tx on
	 that queue.

        After a short delay - where the delay is sufficient to	allow any  in-
	 flight	 callbacks  to complete. Alternately, the RCU mechanism	can be
	 used to detect	when data plane	threads	have  ceased  referencing  the
	 callback memory.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The  queue	on the Ethernet	device from which the callback
	   is to be removed.
	   user_cb	User	  supplied	callback      created	   via
	   rte_eth_add_rx_callback().

       Returns

	    0:	Success. Callback was removed.

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: Callback	support	is not available.

	    -EINVAL: The queue_id is out of range, or the callback is NULL or
	     not found for the port/queue.

   int	rte_eth_remove_tx_callback (uint16_t port_id, uint16_t queue_id, const
       struct rte_eth_rxtx_callback * user_cb)
       Remove a	Tx packet callback from	a given	port and queue.

       This function is	used to	removed	callbacks that were  added  to	a  NIC
       port queue using	rte_eth_add_tx_callback().

       Note: the callback is removed from the callback list but	it isn't freed
       since  the  it  may still be in use. The	memory for the callback	can be
       subsequently freed back by the application by calling rte_free():

        Immediately - if the port is stopped,	or  the	 user  knows  that  no
	 callbacks are in flight e.g. if called	from the thread	doing Rx/Tx on
	 that queue.

        After	a short	delay -	where the delay	is sufficient to allow any in-
	 flight	callbacks to complete. Alternately, the	RCU mechanism  can  be
	 used  to  detect  when	data plane threads have	ceased referencing the
	 callback memory.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	queue on the Ethernet device from which	 the  callback
	   is to be removed.
	   user_cb	User	  supplied	callback      created	   via
	   rte_eth_add_tx_callback().

       Returns

	    0:	Success. Callback was removed.

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: Callback	support	is not available.

	    -EINVAL: The queue_id is out of range, or the callback is NULL or
	     not found for the port/queue.

   int rte_eth_rx_queue_info_get (uint16_t port_id, uint16_t queue_id,	struct
       rte_eth_rxq_info	* qinfo)
       Retrieve	information about given	port's Rx queue.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The Rx queue on the Ethernet device for which information
	   will	be retrieved.
	   qinfo A pointer to a	structure of type rte_eth_rxq_info_info	to  be
	   filled with the information of the Ethernet device.

       Returns

	    0:	Success

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: routine is not supported	by the device PMD.

	    -EINVAL:  The  queue_id  is out of	range, or the queue is hairpin
	     queue.

   int rte_eth_tx_queue_info_get (uint16_t port_id, uint16_t queue_id,	struct
       rte_eth_txq_info	* qinfo)
       Retrieve	information about given	port's Tx queue.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The Tx queue on the Ethernet device for which information
	   will	be retrieved.
	   qinfo A pointer to a	structure of type rte_eth_txq_info_info	to  be
	   filled with the information of the Ethernet device.

       Returns

	    0:	Success

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: routine is not supported	by the device PMD.

	    -EINVAL:  The  queue_id  is out of	range, or the queue is hairpin
	     queue.

   __rte_experimental int rte_eth_recycle_rx_queue_info_get (uint16_t port_id,
       uint16_t	queue_id, struct rte_eth_recycle_rxq_info * recycle_rxq_info)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Retrieve	information about given	ports's	Rx queue for recycling mbufs.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The  Rx queue on the Ethernet devicefor which information
	   will	be retrieved.
	   recycle_rxq_info   A	  pointer   to	  a    structure    of	  type
	   rte_eth_recycle_rxq_info to be filled.

       Returns

	    0:	Success

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: routine is not supported	by the device PMD.

	    -EINVAL: The queue_id is out of range.

   int	rte_eth_rx_burst_mode_get (uint16_t port_id, uint16_t queue_id,	struct
       rte_eth_burst_mode * mode)
       Retrieve	information about the Rx packet	burst mode.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	Rx queue on the	Ethernet device	for which  information
	   will	be retrieved.
	   mode	 A  pointer  to	 a  structure of type rte_eth_burst_mode to be
	   filled with the information of the packet burst mode.

       Returns

	    0:	Success

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: routine is not supported	by the device PMD.

	    -EINVAL: The queue_id is out of range.

   int rte_eth_tx_burst_mode_get (uint16_t port_id, uint16_t queue_id,	struct
       rte_eth_burst_mode * mode)
       Retrieve	information about the Tx packet	burst mode.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The Tx queue on the Ethernet device for which information
	   will	be retrieved.
	   mode	A pointer to a structure  of  type  rte_eth_burst_mode	to  be
	   filled with the information of the packet burst mode.

       Returns

	    0:	Success

	    -ENODEV: If port_id is invalid.

	    -ENOTSUP: routine is not supported	by the device PMD.

	    -EINVAL: The queue_id is out of range.

   __rte_experimental int rte_eth_get_monitor_addr (uint16_t port_id, uint16_t
       queue_id, struct	rte_power_monitor_cond * pmc)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Retrieve	the monitor condition for a given receive queue.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id  The Rx queue on the Ethernet device for which information
	   will	be retrieved.
	   pmc The pointer to power-optimized monitoring condition structure.

       Returns

	    0:	Success. -ENOTSUP: Operation not supported.  -EINVAL:  Invalid
	     parameters. -ENODEV: Invalid port ID.

   __rte_experimental	int  rte_eth_dev_get_reg_info_ext  (uint16_t  port_id,
       struct rte_dev_reg_info * info)
       Retrieve	the filtered device registers (values and names) and  register
       attributes (number of registers and register size)

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	Pointer	to rte_dev_reg_info structure to fill in.

	    If	 info->filter  is NULL,	return info for	all registers (seen as
	     filter none).

	    If	info->filter is	not NULL, return error if the driver does  not
	     support  filter.  Fill  the  length  field	with filtered register
	     number.

	    If	info->data is NULL, the	function fills in the width and	length
	     fields.

	    If	info->data is not NULL,	 ethdev	 considers  there  are	enough
	     spaces  to	 store the registers, and the values of	registers with
	     the filter	string as the module name  are	put  into  the	buffer
	     pointed at	by info->data.

	    If	 info->names is	not NULL, drivers should fill it or the	ethdev
	     fills it with default names.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   int rte_eth_dev_get_reg_info	(uint16_t port_id, struct  rte_dev_reg_info  *
       info)
       Retrieve	 device	registers and register attributes (number of registers
       and register size)

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	 Pointer  to  rte_dev_reg_info	structure  to  fill   in.   If
	   info->data  is  NULL	 the  function	fills  in the width and	length
	   fields. If non-NULL the registers are put into the  buffer  pointed
	   at by the data field.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   int rte_eth_dev_get_eeprom_length (uint16_t port_id)
       Retrieve	size of	device EEPROM

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    (>=0) EEPROM size if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   int	rte_eth_dev_get_eeprom (uint16_t port_id, struct rte_dev_eeprom_info *
       info)
       Retrieve	EEPROM and EEPROM attribute

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	The template includes buffer for return	EEPROM data and	EEPROM
	   attributes to be filled.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   int rte_eth_dev_set_eeprom (uint16_t	port_id, struct	rte_dev_eeprom_info  *
       info)
       Program EEPROM with provided data

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	 The  template includes	EEPROM data for	programming and	EEPROM
	   attributes to be filled

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   __rte_experimental  int  rte_eth_dev_get_module_info	  (uint16_t   port_id,
       struct rte_eth_dev_module_info *	modinfo)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Retrieve	the type and size of plugin module EEPROM

       Parameters
	   port_id The port identifier of the Ethernet device.
	   modinfo The type and	size of	plugin module EEPROM.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   __rte_experimental  int  rte_eth_dev_get_module_eeprom  (uint16_t  port_id,
       struct rte_dev_eeprom_info * info)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Retrieve	the data of plugin module EEPROM

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	The template includes the plugin module	EEPROM attributes, and
	   the buffer for return plugin	module EEPROM data.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    others depends on the specific operations implementation.

   int rte_eth_dev_set_mc_addr_list (uint16_t port_id, struct rte_ether_addr *
       mc_addr_set, uint32_t nb_mc_addr)
       Set the list of multicast addresses to filter on	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   mc_addr_set The array of multicast addresses	to set.	Equal to  NULL
	   when	 the  function	is  invoked  to	 flush	the  set  of  filtered
	   addresses.
	   nb_mc_addr The number of multicast  addresses  in  the  mc_addr_set
	   array.  Equal to 0 when the function	is invoked to flush the	set of
	   filtered addresses.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-ENOTSUP)	if PMD of port_id doesn't support multicast filtering.

	    (-ENOSPC)	if  port_id  has  not	enough	 multicast   filtering
	     resources.

	    (-EINVAL) if bad parameter.

   int rte_eth_timesync_enable (uint16_t port_id)
       Enable IEEE1588/802.1AS timestamping for	an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    0:	Success.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   int rte_eth_timesync_disable	(uint16_t port_id)
       Disable IEEE1588/802.1AS	timestamping for an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.

       Returns

	    0:	Success.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   int rte_eth_timesync_read_rx_timestamp (uint16_t port_id, struct timespec *
       timestamp, uint32_t flags)
       Read an IEEE1588/802.1AS	Rx timestamp from an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   timestamp Pointer to	the timestamp struct.
	   flags  Device specific flags. Used to pass the Rx timesync register
	   index to i40e. Unused in igb/ixgbe, pass 0 instead.

       Returns

	    0:	Success.

	    -EINVAL: No timestamp is available.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   int rte_eth_timesync_read_tx_timestamp (uint16_t port_id, struct timespec *
       timestamp)
       Read an IEEE1588/802.1AS	Tx timestamp from an Ethernet device.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   timestamp Pointer to	the timestamp struct.

       Returns

	    0:	Success.

	    -EINVAL: No timestamp is available.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   int rte_eth_timesync_adjust_time (uint16_t port_id, int64_t delta)
       Adjust the timesync clock on an Ethernet	device.

       This  is	 usually  used	in  conjunction	 with  other  Ethdev  timesync
       functions  to  synchronize  the	device time using the IEEE1588/802.1AS
       protocol.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   delta The adjustment	in nanoseconds.

       Returns

	    0:	Success.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   __rte_experimental  int  rte_eth_timesync_adjust_freq  (uint16_t   port_id,
       int64_t ppm)
       Adjust the clock	frequency on an	Ethernet device.

       Adjusts	the base frequency by a	specified percentage of	ppm (parts per
       million). This  is  usually  used  in  conjunction  with	 other	Ethdev
       timesync	  functions   to   synchronize	 the  device  time  using  the
       IEEE1588/802.1AS	protocol.

       The clock is subject to frequency deviation and rate  of	 change	 drift
       due  to	the  environment. The upper layer APP calculates the frequency
       compensation value of the slave clock relative to the master clock  via
       a   servo   algorithm  and  adjusts  the	 device	 clock	frequency  via
       'rte_eth_timesync_adjust_freq()'. Commonly used	servo  algorithms  are
       pi/linreg/ntpshm,   for	 implementation	 see:  https://github.com/nxp-
       archive/openil_linuxptp.git.

       The adjustment value obtained by	the servo algorithm is usually in  ppb
       (parts  per  billion). For consistency with the kernel driver .adjfine,
       the tuning values are in	ppm. Note that 1 ppb is	 approximately	65.536
       scaled  ppm,  see  Linux	 kernel	 upstream  commit  1060707e3809	 (ptp:
       introduce helpers to adjust by scaled parts per million).

       In addition,  the  device  reference  frequency	is  usually  also  the
       stepping	 threshold  for	 the servo algorithm, and the frequency	up and
       down adjustment range is	 limited  by  the  device.  The	 device	 clock
       frequency  should  be  adjusted	with  'rte_eth_timesync_adjust_freq()'
       every	time	the    clock	 is	synchronised.	  Also	   use
       rte_eth_timesync_adjust_time()  to  update the device clock only	if the
       absolute	value of the master/slave clock	 offset	 is  greater  than  or
       equal to	the step threshold.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   ppm Parts per million with 16-bit fractional	field

       Returns

	    0:	Success.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   int rte_eth_timesync_read_time (uint16_t port_id, struct timespec * time)
       Read the	time from the timesync clock on	an Ethernet device.

       This  is	 usually  used	in  conjunction	 with  other  Ethdev  timesync
       functions to synchronize	the device  time  using	 the  IEEE1588/802.1AS
       protocol.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   time	Pointer	to the timespec	struct that holds the time.

       Returns

	    0:	Success.

	    -EINVAL: Bad parameter.

   int	rte_eth_timesync_write_time (uint16_t port_id, const struct timespec *
       time)
       Set the time of the timesync clock on an	Ethernet device.

       This  is	 usually  used	in  conjunction	 with  other  Ethdev  timesync
       functions  to  synchronize  the	device time using the IEEE1588/802.1AS
       protocol.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   time	Pointer	to the timespec	struct that holds the time.

       Returns

	    0:	Success.

	    -EINVAL: No timestamp is available.

	    -ENODEV: The port ID is invalid.

	    -EIO: if device is	removed.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

   __rte_experimental int rte_eth_read_clock  (uint16_t	 port_id,  uint64_t  *
       clock)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Read the	current	clock counter of an Ethernet device

       This returns the	current	raw clock value	of an Ethernet device. It is a
       raw  amount  of ticks, with no given time reference. The	value returned
       here is from the	same clock than	the one	filling	timestamp field	of  Rx
       packets when using hardware timestamp offload. Therefore	it can be used
       to compute a precise conversion of the device clock to the real time.

       E.g,  a	simple	heuristic to derivate the frequency would be: uint64_t
       start,	end;   rte_eth_read_clock(port,	  start);   rte_delay_ms(100);
       rte_eth_read_clock(port,	end); double freq = (end - start) * 10;

       Compute	 a   common   reference	  with:	  uint64_t   base_time_sec   =
       current_time();	  uint64_t    base_clock;     rte_eth_read_clock(port,
       base_clock);

       Then,   convert	 the   raw   mbuf   timestamp  with:  base_time_sec  +
       (double)(*timestamp_dynfield(mbuf) - base_clock)	/ freq;

       This simple example will	not provide a very good	accuracy. One must  at
       least  measure  multiple	 times	the  frequency and do a	regression. To
       avoid deviation from the	system	time,  the  common  reference  can  be
       repeated	 from time to time. The	integer	division can also be converted
       by a multiplication and a shift for better performance.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   clock Pointer to the	uint64_t that holds the	raw clock value.

       Returns

	    0:	Success.

	    -ENODEV: The port ID is invalid.

	    -ENOTSUP: The function is not supported by	the Ethernet driver.

	    -EINVAL: if bad parameter.

   int rte_eth_dev_get_port_by_name (const char	* name,	uint16_t * port_id)
       Get the port ID from device name. The device name should	 be  specified
       as below:

        PCIe address (Domain:Bus:Device.Function), for	example- 0000:2:00.0

        SoC device name, for example- fsl-gmac0

        vdev dpdk name, for example- net_[pcap0|null0|tap0]

       Parameters
	   name	PCI address or name of the device.
	   port_id Pointer to port identifier of the device.

       Returns

	    (0) if successful and port_id is filled.

	    (-ENODEV or -EINVAL) on failure.

   int rte_eth_dev_get_name_by_port (uint16_t port_id, char * name)
       Get  the	 device	 name  from  port  ID. The device name is specified as
       below:

        PCIe address (Domain:Bus:Device.Function), for	example- 0000:02:00.0

        SoC device name, for example- fsl-gmac0

        vdev dpdk name, for example- net_[pcap0|null0|tun0|tap0]

       Parameters
	   port_id Port	identifier of the device.
	   name	Buffer of size RTE_ETH_NAME_MAX_LEN to store the name.

       Returns

	    (0) if successful.

	    (-ENODEV) if port_id is invalid.

	    (-EINVAL) on failure.

   int	rte_eth_dev_adjust_nb_rx_tx_desc   (uint16_t   port_id,	  uint16_t   *
       nb_rx_desc, uint16_t * nb_tx_desc)
       Check  that numbers of Rx and Tx	descriptors satisfy descriptors	limits
       from  the  Ethernet  device  information,  otherwise  adjust  them   to
       boundaries.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   nb_rx_desc  A  pointer  to  a  uint16_t where the number of receive
	   descriptors stored.
	   nb_tx_desc A	pointer	to a uint16_t where  the  number  of  transmit
	   descriptors stored.

       Returns

	    (0) if successful.

	    (-ENOTSUP,	-ENODEV	or -EINVAL) on failure.

   int rte_eth_dev_pool_ops_supported (uint16_t	port_id, const char * pool)
       Test if a port supports specific	mempool	ops.

       Parameters
	   port_id Port	identifier of the Ethernet device.
	   pool	The name of the	pool operations	to test.

       Returns

	    0:	best mempool ops choice	for this port.

	    1:	mempool	ops are	supported for this port.

	    -ENOTSUP: mempool ops not supported for this port.

	    -ENODEV: Invalid port Identifier.

	    -EINVAL: Pool param is null.

   void	* rte_eth_dev_get_sec_ctx (uint16_t port_id)
       Get the security	context	for the	Ethernet device.

       Parameters
	   port_id Port	identifier of the Ethernet device

       Returns

	    NULL on error.

	    pointer to	security context on success.

   __rte_experimental	 int	rte_eth_dev_hairpin_capability_get   (uint16_t
       port_id,	struct rte_eth_hairpin_cap * cap)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Query the device	hairpin	capabilities.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   cap Pointer to a structure that will	hold the hairpin capabilities.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if hardware doesn't support.

	    (-EINVAL) if bad parameter.

   __rte_experimental	int  rte_eth_representor_info_get  (uint16_t  port_id,
       struct rte_eth_representor_info * info)
       Retrieve	the representor	info of	the device.

       Get  device  representor	 info  to  be  able  to	 calculate  a	unique
       representor ID.

       See also
	   rte_eth_representor_id_get helper.

       Parameters
	   port_id The port identifier of the device.
	   info	 A  pointer  to	 a  representor	info structure.	NULL to	return
	   number of range entries and allocate	memory for next	call to	 store
	   detail.  The	number of ranges that were written into	this structure
	   will	be placed into its nb_ranges  field.  This  number  cannot  be
	   larger  than	 the  nb_ranges_alloc  that by the user	before calling
	   this	function. It can be smaller than the  value  returned  by  the
	   function, however.

       Returns

	    (-ENOTSUP)	if operation is	not supported.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (>=0) number of available representor range entries.

   int rte_eth_rx_metadata_negotiate (uint16_t port_id,	uint64_t * features)
       Negotiate  the  NIC's  ability to deliver specific kinds	of metadata to
       the PMD.

       Invoke this API before the first	rte_eth_dev_configure()	invocation  to
       let the PMD make	preparations that are inconvenient to do later.

       The negotiation process is as follows:

        the  application  requests features intending to use at least some of
	 them;

        the PMD responds with the guaranteed subset of	the requested  feature
	 set;

        the application can retry negotiation with another set	of features;

        the application can pass zero to clear	the negotiation	result;

        the last negotiated result takes effect upon the ethdev configure and
	 start.

       Note
	   The	PMD  is	 supposed  to  first  consider	enabling the requested
	   feature set in its entirety.	Only if	it fails to  do	 so,  does  it
	   have	 the  right  to	 respond  with a smaller set of	the originally
	   requested features.

	   Return code (-ENOTSUP) does not necessarily mean that the requested
	   features are	unsupported. In	this case, the application should just
	   assume that these features can be used without prior	negotiations.

       Parameters
	   port_id Port	(ethdev) identifier
	   features Feature selection buffer

       Returns

	    (-EBUSY) if the port can't	handle this in its current state;

	    (-ENOTSUP)	if the method itself is	not supported by the PMD;

	    (-ENODEV) if port_id is invalid;

	    (-EINVAL) if features is NULL;

	    (-EIO) if the device is removed;

	    (0) on success

   __rte_experimental	int   rte_eth_ip_reassembly_capability_get   (uint16_t
       port_id,	struct rte_eth_ip_reassembly_params * capa)
       Warning
	   EXPERIMENTAL: this API may change without prior notice

       Get  IP reassembly capabilities supported by the	PMD. This is the first
       API to be called	for enabling the IP reassembly	offload	 feature.  PMD
       will  return  the maximum values	of parameters that PMD can support and
       user can	call rte_eth_ip_reassembly_conf_set() with param values	 lower
       than capability.

       Parameters
	   port_id The port identifier of the device.
	   capa	A pointer to rte_eth_ip_reassembly_params structure.

       Returns

	    (-ENOTSUP)	if offload configuration is not	supported by device.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL) if device is not	configured or capa passed is NULL.

	    (0) on success.

   __rte_experimental  int  rte_eth_ip_reassembly_conf_get  (uint16_t port_id,
       struct rte_eth_ip_reassembly_params * conf)
       Warning
	   EXPERIMENTAL: this API may change without prior notice

       Get IP reassembly configuration parameters currently set	 in  PMD.  The
       API  will  return  error	 if the	configuration is not already set using
       rte_eth_ip_reassembly_conf_set()	before calling	this  API  or  if  the
       device is not configured.

       Parameters
	   port_id The port identifier of the device.
	   conf	A pointer to rte_eth_ip_reassembly_params structure.

       Returns

	    (-ENOTSUP)	if offload configuration is not	supported by device.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL)	if  device is not configured or	if conf	passed is NULL
	     or	    if	    configuration      is      not	set	 using
	     rte_eth_ip_reassembly_conf_set().

	    (0) on success.

   __rte_experimental  int  rte_eth_ip_reassembly_conf_set  (uint16_t port_id,
       const struct rte_eth_ip_reassembly_params * conf)
       Warning
	   EXPERIMENTAL: this API may change without prior notice

       Set IP reassembly configuration	parameters  if	the  PMD  supports  IP
       reassembly	offload.       User	  should       first	  call
       rte_eth_ip_reassembly_capability_get()  to  check  the  maximum	values
       supported  by the PMD before setting the	configuration. The use of this
       API is mandatory	to enable this feature and  should  be	called	before
       rte_eth_dev_start().

       In  datapath,  PMD  cannot  guarantee  that  IP	reassembly  is	always
       successful. Hence, PMD shall register mbuf dynamic  field  and  dynamic
       flag    using   rte_eth_ip_reassembly_dynfield_register()   to	denote
       incomplete IP reassembly. If dynfield is	not  successfully  registered,
       error will be returned and IP reassembly	offload	cannot be used.

       Parameters
	   port_id The port identifier of the device.
	   conf	A pointer to rte_eth_ip_reassembly_params structure.

       Returns

	    (-ENOTSUP)	if offload configuration is not	supported by device.

	    (-ENODEV) if port_id invalid.

	    (-EIO) if device is removed.

	    (-EINVAL)	if  device  is	not configured or if device is already
	     started or	if conf	passed is NULL or  if  mbuf  dynfield  is  not
	     registered	successfully by	the PMD.

	    (0) on success.

   __rte_experimental  int  rte_eth_dev_priv_dump  (uint16_t  port_id,	FILE *
       file)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Dump  private  info  from device	to a file. Provided data and the order
       depends on the PMD.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   file	A pointer to a file for	output.

       Returns

	    (0) on success.

	    (-ENODEV) if port_id is invalid.

	    (-EINVAL) if null file.

	    (-ENOTSUP)	if the device does not support this function.

	    (-EIO) if device is removed.

   __rte_experimental  int   rte_eth_rx_descriptor_dump	  (uint16_t   port_id,
       uint16_t	queue_id, uint16_t offset, uint16_t num, FILE *	file)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Dump ethdev Rx descriptor info to a file.

       This API	is used	for debugging, not a dataplane API.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id A Rx queue identifier on this port.
	   offset The offset of	the descriptor starting	from tail. (0  is  the
	   next	packet to be received by the driver).
	   num The number of the descriptors to	dump.
	   file	A pointer to a file for	output.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   __rte_experimental	int   rte_eth_tx_descriptor_dump   (uint16_t  port_id,
       uint16_t	queue_id, uint16_t offset, uint16_t num, FILE *	file)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Dump ethdev Tx descriptor info to a file.

       This API	is used	for debugging, not a dataplane API.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id A Tx queue identifier on this port.
	   offset  The	offset of the descriptor starting from tail. (0	is the
	   place where the next	packet will be send).
	   num The number of the descriptors to	dump.
	   file	A pointer to a file for	output.

       Returns

	    On	success, zero.

	    On	failure, a negative value.

   __rte_experimental  int  rte_eth_cman_info_get  (uint16_t  port_id,	struct
       rte_eth_cman_info * info)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Retrieve	the information	for ethdev congestion management

       Parameters
	   port_id The port identifier of the Ethernet device.
	   info	A pointer to a	structure  of  type  rte_eth_cman_info	to  be
	   filled with the information about congestion	management.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for cman_info_get does not exist.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental  int  rte_eth_cman_config_init (uint16_t port_id,	struct
       rte_eth_cman_config * config)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Initialize  the	ethdev	congestion  management configuration structure
       with default values.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   config A pointer to a structure of type rte_eth_cman_config	to  be
	   initialized with default value.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for cman_config_init	does not exist.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental  int  rte_eth_cman_config_set  (uint16_t	port_id, const
       struct rte_eth_cman_config * config)
       Warning
	   EXPERIMENTAL: this API may change, or  be  removed,	without	 prior
	   notice

       Configure ethdev	congestion management

       Parameters
	   port_id The port identifier of the Ethernet device.
	   config  A  pointer to a structure of	type rte_eth_cman_config to be
	   configured.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for cman_config_set does not	exist.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   __rte_experimental int rte_eth_cman_config_get  (uint16_t  port_id,	struct
       rte_eth_cman_config * config)
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Retrieve	the applied ethdev congestion management  parameters  for  the
       given port.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   config  A  pointer  to  a  structure	of type	rte_eth_cman_config to
	   retrieve congestion management parameters  for  the	given  object.
	   Application must fill all parameters	except mode_param parameter in
	   struct rte_eth_cman_config.

       Returns

	    (0) if successful.

	    (-ENOTSUP)	if support for cman_config_get does not	exist.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   static  uint16_t  rte_eth_rx_burst  (uint16_t  port_id,  uint16_t queue_id,
       struct rte_mbuf ** rx_pkts, const uint16_t nb_pkts) [inline],  [static]

       Retrieve	a burst	of input packets from a	receive	queue of  an  Ethernet
       device.	The  retrieved packets are stored in rte_mbuf structures whose
       pointers	are supplied in	the rx_pkts array.

       The rte_eth_rx_burst() function loops,  parsing	the  Rx	 ring  of  the
       receive	queue,	up  to	nb_pkts	 packets,  and	for  each completed Rx
       descriptor in the ring, it performs the following operations:

        Initialize  the  rte_mbuf  data  structure  associated	 with  the  Rx
	 descriptor according to the information provided by the NIC into that
	 Rx descriptor.

        Store	the rte_mbuf data structure into the next entry	of the rx_pkts
	 array.

        Replenish the Rx descriptor with a new	rte_mbuf buffer	allocated from
	 the memory pool associated with the receive queue  at	initialization
	 time.

       When  retrieving	 an  input packet that was scattered by	the controller
       into multiple  receive  descriptors,  the  rte_eth_rx_burst()  function
       appends	the  associated	 rte_mbuf  buffers  to the first buffer	of the
       packet.

       The rte_eth_rx_burst() function returns the number of packets  actually
       retrieved,  which is the	number of rte_mbuf data	structures effectively
       supplied	into the rx_pkts  array.  A  return  value  equal  to  nb_pkts
       indicates  that	the  Rx	 queue contained at least rx_pkts packets, and
       this is likely to signify that other received  packets  remain  in  the
       input  queue.  Applications  implementing  a 'retrieve as much received
       packets as possible' policy can	check  this  specific  case  and  keep
       invoking	 the  rte_eth_rx_burst()  function  until  a  value  less than
       nb_pkts is returned.

       This receive method has the following advantages:

        It allows a run-to-completion network stack engine to retrieve	and to
	 immediately  process  received	 packets  in  a	 fast	burst-oriented
	 approach,  avoiding  the  overhead of unnecessary intermediate	packet
	 queue/dequeue operations.

        Conversely, it	also allows an asynchronous-oriented processing	method
	 to retrieve bursts of received	packets	and to immediately queue  them
	 for   further	parallel  processing  by  another  logical  core,  for
	 instance.  However,  instead  of  having   received   packets	 being
	 individually queued by	the driver, this approach allows the caller of
	 the rte_eth_rx_burst()	function to queue a burst of retrieved packets
	 at   a	  time	 and   therefore   dramatically	 reduce	 the  cost  of
	 enqueue/dequeue operations per	packet.

        It allows the rte_eth_rx_burst()  function  of	 the  driver  to  take
	 advantage  of	burst-oriented	hardware features (CPU cache, prefetch
	 instructions, and so on) to minimize the number  of  CPU  cycles  per
	 packet.

       To  summarize,  the  proposed  receive  API enables many	burst-oriented
       optimizations in	both synchronous and  asynchronous  packet  processing
       environments with no overhead in	both cases.

       Note
	   Some	 drivers  using	 vector	 instructions  require that nb_pkts is
	   divisible by	4 or 8,	depending on the driver	implementation.

       The rte_eth_rx_burst() function does not	provide	any error notification
       to avoid	 the  corresponding  overhead.	As  a  hint,  the  upper-level
       application  might  check  the  status  of  the	device link once being
       systematically returned a 0 value for a given number of tries.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of the receive  queue  from  which  to  retrieve
	   input  packets. The value must be in	the range [0, nb_rx_queue - 1]
	   previously supplied to rte_eth_dev_configure().
	   rx_pkts The address of an array of pointers to rte_mbuf  structures
	   that	must be	large enough to	store nb_pkts pointers in it.
	   nb_pkts  The	 maximum number	of packets to retrieve.	The value must
	   be divisible	by 8 in	order to work with any driver.

       Returns
	   The number of packets actually retrieved, which is  the  number  of
	   pointers to rte_mbuf	structures effectively supplied	to the rx_pkts
	   array.

       Definition at line 6348 of file rte_ethdev.h.

   static  int	rte_eth_rx_queue_count	(uint16_t  port_id, uint16_t queue_id)
       [inline],  [static]
       Get the number of used descriptors of a Rx queue

       Since it's a dataplane function,	no check is performed on  port_id  and
       queue_id. The caller must therefore ensure that the port	is enabled and
       the queue is configured and running.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	queue ID on the	specific port.

       Returns
	   The number of used descriptors in the specific queue, or:

	    (-ENODEV) if port_id is invalid.

	    (-EINVAL) if queue_id is invalid

	    (-ENOTSUP)	if the device does not support this function

       Definition at line 6426 of file rte_ethdev.h.

   static   int	  rte_eth_rx_descriptor_status	 (uint16_t  port_id,  uint16_t
       queue_id, uint16_t offset) [inline],  [static]
       Check the status	of a Rx	descriptor in the queue

       It should be called in a	similar	context	than the Rx function:

        on a dataplane	core

        not concurrently on the same queue

       Since it's a dataplane function,	no check is performed on  port_id  and
       queue_id. The caller must therefore ensure that the port	is enabled and
       the queue is configured and running.

       Note:  accessing	 to  a random descriptor in the	ring may trigger cache
       misses and have a performance impact.

       Parameters
	   port_id A valid port	identifier of the Ethernet device which.
	   queue_id A valid Rx queue identifier	on this	port.
	   offset The offset of	the descriptor starting	from tail  (0  is  the
	   next	packet to be received by the driver).

       Returns

	    (RTE_ETH_RX_DESC_AVAIL): Descriptor is available for the hardware
	     to	receive	a packet.

	    (RTE_ETH_RX_DESC_DONE):  Descriptor  is done, it is filled	by hw,
	     but not yet processed by the driver (i.e. in the receive queue).

	    (RTE_ETH_RX_DESC_UNAVAIL):	Descriptor is unavailable, either hold
	     by	the driver and not yet returned	to hw, or reserved by the hw.

	    (-EINVAL) bad descriptor offset.

	    (-ENOTSUP)	if the device does not support this function.

	    (-ENODEV) bad port	or queue (only if compiled with	debug).

       Definition at line 6496 of file rte_ethdev.h.

   static  int	rte_eth_tx_descriptor_status   (uint16_t   port_id,   uint16_t
       queue_id, uint16_t offset) [inline],  [static]
       Check the status	of a Tx	descriptor in the queue.

       It should be called in a	similar	context	than the Tx function:

        on a dataplane	core

        not concurrently on the same queue

       Since  it's  a dataplane	function, no check is performed	on port_id and
       queue_id. The caller must therefore ensure that the port	is enabled and
       the queue is configured and running.

       Note: accessing to a random descriptor in the ring  may	trigger	 cache
       misses and have a performance impact.

       Parameters
	   port_id A valid port	identifier of the Ethernet device which.
	   queue_id A valid Tx queue identifier	on this	port.
	   offset  The	offset	of the descriptor starting from	tail (0	is the
	   place where the next	packet will be send).

       Returns

	    (RTE_ETH_TX_DESC_FULL) Descriptor is being	processed by  the  hw,
	     i.e. in the transmit queue.

	    (RTE_ETH_TX_DESC_DONE)  Hardware is done with this	descriptor, it
	     can be reused by the driver.

	    (RTE_ETH_TX_DESC_UNAVAIL):	Descriptor is unavailable, reserved by
	     the driver	or the hardware.

	    (-EINVAL) bad descriptor offset.

	    (-ENOTSUP)	if the device does not support this function.

	    (-ENODEV) bad port	or queue (only if compiled with	debug).

       Definition at line 6565 of file rte_ethdev.h.

   static uint16_t  rte_eth_tx_burst  (uint16_t	 port_id,  uint16_t  queue_id,
       struct rte_mbuf ** tx_pkts, uint16_t nb_pkts) [inline],	[static]
       Send  a	burst  of  output  packets  on a transmit queue	of an Ethernet
       device.

       The rte_eth_tx_burst() function is invoked to transmit  output  packets
       on  the	output queue queue_id of the Ethernet device designated	by its
       port_id.	The nb_pkts parameter is the number of packets to  send	 which
       are  supplied in	the tx_pkts array of rte_mbuf structures, each of them
       allocated from  a  pool	created	 with  rte_pktmbuf_pool_create().  The
       rte_eth_tx_burst()  function  loops, sending nb_pkts packets, up	to the
       number of transmit descriptors available	in the Tx ring of the transmit
       queue.  For  each  packet  to  send,  the  rte_eth_tx_burst()  function
       performs	the following operations:

        Pick up the next available descriptor in the transmit ring.

        Free the network buffer previously sent with that descriptor, if any.

        Initialize  the  transmit descriptor with the information provided in
	 the *rte_mbuf data structure.

       In the case of a	segmented  packet  composed  of	 a  list  of  rte_mbuf
       buffers,	  the	rte_eth_tx_burst()   function  uses  several  transmit
       descriptors of the ring.

       The rte_eth_tx_burst()  function	 returns  the  number  of  packets  it
       actually	 sent.	A return value equal to	nb_pkts	means that all packets
       have been sent, and this	is likely to signify that other	output packets
       could be	immediately transmitted	again. Applications that  implement  a
       'send  as  many	packets	to transmit as possible' policy	can check this
       specific	case and keep invoking the rte_eth_tx_burst() function until a
       value less than nb_pkts is returned.

       It  is  the  responsibility  of	the  rte_eth_tx_burst()	 function   to
       transparently  free the memory buffers of packets previously sent. This
       feature	is  driven  by	the  tx_free_thresh  value  supplied  to   the
       rte_eth_dev_configure() function	at device configuration	time. When the
       number	of  free  Tx  descriptors  drops  below	 this  threshold,  the
       rte_eth_tx_burst() function must	[attempt to] free the rte_mbuf buffers
       of those	packets	whose transmission was effectively completed.

       If the PMD is RTE_ETH_TX_OFFLOAD_MT_LOCKFREE capable, multiple  threads
       can  invoke  this function concurrently on the same Tx queue without SW
       lock.

       See also
	   rte_eth_dev_info_get, struct	rte_eth_txconf::offloads

	   rte_eth_tx_prepare to perform some prior checks or adjustments  for
	   offloads.

       Note
	   This	function must not modify mbufs (including packets data)	unless
	   the	refcnt	is  1. An exception is the bonding PMD,	which does not
	   have	'Tx prepare' support, in this case, mbufs may be modified.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of  the  transmit	 queue	through	 which	output
	   packets  must  be  sent.  The  value	 must  be  in  the  range  [0,
	   nb_tx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   tx_pkts The address of an array of  nb_pkts	pointers  to  rte_mbuf
	   structures which contain the	output packets.
	   nb_pkts The maximum number of packets to transmit.

       Returns
	   The	 number	  of   output  packets	actually  stored  in  transmit
	   descriptors of the transmit ring. The return	value can be less than
	   the value of	the tx_pkts parameter when the transmit	ring  is  full
	   or has been filled up.

       Definition at line 6687 of file rte_ethdev.h.

   static  uint16_t  rte_eth_tx_prepare	 (uint16_t port_id, uint16_t queue_id,
       struct rte_mbuf ** tx_pkts, uint16_t nb_pkts) [inline],	[static]
       Process a burst of output packets on a transmit queue  of  an  Ethernet
       device.

       The  rte_eth_tx_prepare() function is invoked to	prepare	output packets
       to be transmitted on the	output queue queue_id of the  Ethernet	device
       designated  by  its  port_id.  The  nb_pkts  parameter is the number of
       packets to be prepared which are	 supplied  in  the  tx_pkts  array  of
       rte_mbuf	 structures,  each  of them allocated from a pool created with
       rte_pktmbuf_pool_create().   For	  each	  packet    to	  send,	   the
       rte_eth_tx_prepare() function performs the following operations:

        Check if packet meets devices requirements for	Tx offloads.

        Check limitations about number	of segments.

        Check additional requirements when debug is enabled.

        Update	 and/or	 reset	required  checksums when Tx offload is set for
	 packet.

       Since this function can modify packet  data,  provided  mbufs  must  be
       safely writable (e.g. modified data cannot be in	shared segment).

       The  rte_eth_tx_prepare()  function returns the number of packets ready
       to be sent. A return value equal	to nb_pkts means that all packets  are
       valid  and  ready  to  be sent, otherwise stops processing on the first
       invalid packet and leaves the rest packets untouched.

       When this functionality is not implemented in the driver,  all  packets
       are are returned	untouched.

       Parameters
	   port_id  The	port identifier	of the Ethernet	device.	The value must
	   be a	valid port ID.
	   queue_id The	index of  the  transmit	 queue	through	 which	output
	   packets  must  be  sent.  The  value	 must  be  in  the  range  [0,
	   nb_tx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   tx_pkts The address of an array of  nb_pkts	pointers  to  rte_mbuf
	   structures which contain the	output packets.
	   nb_pkts The maximum number of packets to process.

       Returns
	   The	number	of  packets  correct  and ready	to be sent. The	return
	   value can be	less than the value of the tx_pkts parameter when some
	   packet  doesn't  meet  devices  requirements	 with  rte_errno   set
	   appropriately:

	    EINVAL: offload flags are not correctly set

	    ENOTSUP: the offload feature is not supported by the hardware

	    ENODEV: if	port_id	is invalid (with debug enabled only)

       Definition at line 6804 of file rte_ethdev.h.

   static   uint16_t   rte_eth_tx_buffer_flush	 (uint16_t  port_id,  uint16_t
       queue_id, struct	rte_eth_dev_tx_buffer *	buffer)	[inline],  [static]
       Send any	packets	queued up for transmission on a	port and HW queue

       This causes an explicit flush of	packets	previously  buffered  via  the
       rte_eth_tx_buffer()   function.	 It  returns  the  number  of  packets
       successfully sent to the	NIC, and calls	the  error  callback  for  any
       unsent  packets.	 Unless	 explicitly  set  up  otherwise,  the  default
       callback	simply frees the unsent	packets	back to	the owning mempool.

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of  the  transmit	 queue	through	 which	output
	   packets  must  be  sent.  The  value	 must  be  in  the  range  [0,
	   nb_tx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   buffer Buffer of packets to be transmit.

       Returns
	   The number of packets successfully sent to the Ethernet device. The
	   error callback is called for	any packets which could	not be sent.

       Definition at line 6888 of file rte_ethdev.h.

   static __rte_always_inline uint16_t	rte_eth_tx_buffer  (uint16_t  port_id,
       uint16_t	  queue_id,  struct  rte_eth_dev_tx_buffer  *  buffer,	struct
       rte_mbuf	* tx_pkt) [static]
       Buffer a	single packet for future transmission on a port	and queue

       This function takes a single  mbuf/packet  and  buffers	it  for	 later
       transmission  on	 the  particular  port	and  queue specified. Once the
       buffer is full of packets, an attempt will be made to transmit all  the
       buffered	 packets.  In  case  of	 error,	 where	not all	packets	can be
       transmitted, a  callback	 is  called  with  the	unsent	packets	 as  a
       parameter.  If no callback is explicitly	set up,	the unsent packets are
       just freed back to the owning mempool. The function returns the	number
       of  packets actually sent i.e. 0	if no buffer flush occurred, otherwise
       the number of packets successfully flushed

       Parameters
	   port_id The port identifier of the Ethernet device.
	   queue_id The	index of  the  transmit	 queue	through	 which	output
	   packets  must  be  sent.  The  value	 must  be  in  the  range  [0,
	   nb_tx_queue - 1] previously supplied	to rte_eth_dev_configure().
	   buffer Buffer used to collect packets to be sent.
	   tx_pkt Pointer to the packet	mbuf to	be sent.

       Returns
	   0 = packet has been buffered	for later transmission N > 0 =	packet
	   has been buffered, and the buffer was subsequently flushed, causing
	   N  packets  to be sent, and the error callback to be	called for the
	   rest.

       Definition at line 6941 of file rte_ethdev.h.

   static   __rte_experimental	 uint16_t   rte_eth_recycle_mbufs    (uint16_t
       rx_port_id,   uint16_t	rx_queue_id,   uint16_t	 tx_port_id,  uint16_t
       tx_queue_id,  struct   rte_eth_recycle_rxq_info	 *   recycle_rxq_info)
       [inline],  [static]
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice

       Recycle used mbufs from a transmit queue	of  an	Ethernet  device,  and
       move  these  mbufs  into	a mbuf ring for	a receive queue	of an Ethernet
       device. This can	bypass mempool path to save CPU	cycles.

       The rte_eth_recycle_mbufs() function loops, with	rte_eth_rx_burst() and
       rte_eth_tx_burst() functions, freeing Tx	used mbufs and replenishing Rx
       descriptors. The	number of recycling mbufs depends on the request of Rx
       mbuf ring, with the constraint of enough	used mbufs from	Tx mbuf	ring.

       For each	recycling mbufs, the rte_eth_recycle_mbufs() function performs
       the following operations:

        Copy used rte_mbuf buffer pointers from Tx mbuf  ring	into  Rx  mbuf
	 ring.

        Replenish  the	Rx descriptors with the	recycling rte_mbuf mbufs freed
	 from the Tx mbuf ring.

       This function spilts Rx and Tx path with	different callback  functions.
       The  callback  function	recycle_tx_mbufs_reuse	is  for	Tx driver. The
       callback	 function  recycle_rx_descriptors_refill  is  for  Rx  driver.
       rte_eth_recycle_mbufs() can support the case that Rx Ethernet device is
       different from Tx Ethernet device.

       It  is  the  responsibility  of users to	select the Rx/Tx queue pair to
       recycle	mbufs.	Before	 call	this   function,   users   must	  call
       rte_eth_recycle_rxq_info_get  function  to  retrieve  selected Rx queue
       information.

       See also
	   rte_eth_recycle_rxq_info_get, struct	rte_eth_recycle_rxq_info

       Currently, the rte_eth_recycle_mbufs() function can support to  feed  1
       Rx  queue from 2	Tx queues in the same thread. Do not pair the Rx queue
       and Tx queue in different threads,  in  order  to  avoid	 memory	 error
       rewriting.

       Parameters
	   rx_port_id Port identifying the receive side.
	   rx_queue_id	The index of the receive queue identifying the receive
	   side. The  value  must  be  in  the	range  [0,  nb_rx_queue	 -  1]
	   previously supplied to rte_eth_dev_configure().
	   tx_port_id Port identifying the transmit side.
	   tx_queue_id	The  index  of	the  transmit  queue  identifying  the
	   transmit side. The value must be in the range [0, nb_tx_queue -  1]
	   previously supplied to rte_eth_dev_configure().
	   recycle_rxq_info    A    pointer    to    a	 structure   of	  type
	   rte_eth_recycle_rxq_info which contains the information of  the  Rx
	   queue mbuf ring.

       Returns
	   The number of recycling mbufs.

       Definition at line 7006 of file rte_ethdev.h.

   __rte_experimental	  int	 rte_eth_buffer_split_get_supported_hdr_ptypes
       (uint16_t port_id, uint32_t * ptypes, int num)
       Warning
	   EXPERIMENTAL: this API may change without prior notice

       Get supported header protocols to split on Rx.

       When a packet type is announced to be split, it must  be	 supported  by
       the  PMD. For instance, if eth-ipv4, eth-ipv4-udp is announced, the PMD
       must return the following packet	types for these	packets:

        Ether/IPv4 -> RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4

        Ether/IPv4/UDP	  ->   RTE_PTYPE_L2_ETHER   |	RTE_PTYPE_L3_IPV4    |
	 RTE_PTYPE_L4_UDP

       Parameters
	   port_id The port identifier of the device.
	   ptypes  An  array  pointer  to  store  supported  protocol headers,
	   allocated by	caller.	These ptypes are composed with RTE_PTYPE_*.
	   num Size of the array pointed by param ptypes.

       Returns

	    (>=0) Number of supported ptypes. If the number of	types  exceeds
	     num,  only	 num entries will be filled into the ptypes array, but
	     the full count of supported ptypes	will be	returned.

	    (-ENOTSUP)	if header protocol is not supported by device.

	    (-ENODEV) if port_id invalid.

	    (-EINVAL) if bad parameter.

   static __rte_experimental  int  rte_eth_tx_queue_count  (uint16_t  port_id,
       uint16_t	queue_id) [inline],  [static]
       Warning
	   EXPERIMENTAL:  this	API  may  change, or be	removed, without prior
	   notice.

       Get the number of used descriptors of a Tx queue.

       This function retrieves the number of used descriptors  of  a  transmit
       queue.  Applications  can  use  this API	in the fast path to inspect Tx
       queue occupancy and take	appropriate actions  based  on	the  available
       free  descriptors. An example action could be implementing Random Early
       Discard (RED).

       Since it's a fast-path function,	no check is performed on  port_id  and
       queue_id. The caller must therefore ensure that the port	is enabled and
       the queue is configured and running.

       Parameters
	   port_id The port identifier of the device.
	   queue_id  The index of the transmit queue. The value	must be	in the
	   range   [0,	 nb_tx_queue   -    1]	  previously	supplied    to
	   rte_eth_dev_configure().

       Returns
	   The number of used descriptors in the specific queue, or:

	    (-ENODEV)	  if   port_id	 is   invalid.	 Enabled   only	  when
	     RTE_ETHDEV_DEBUG_TX is enabled.

	    (-EINVAL)	 if   queue_id	 is   invalid.	 Enabled   only	  when
	     RTE_ETHDEV_DEBUG_TX is enabled.

	    (-ENOTSUP)	if the device does not support this function.

       Note
	   This	function is designed for fast-path use.

	   There   is	no   requirement   to	call   this   function	before
	   rte_eth_tx_burst() invocation.

	   Utilize  this  function  exclusively	 when  the  caller  needs   to
	   determine  the  used	 queue	count  across  all descriptors of a Tx
	   queue. If the use case only	involves  checking  the	 status	 of  a
	   specific  descriptor	 slot,	opt for	rte_eth_tx_descriptor_status()
	   instead.

       Definition at line 7146 of file rte_ethdev.h.

Author
       Generated automatically by Doxygen for DPDK from	the source code.

Version	25.11.0			Thu Jun	11 2026		       rte_ethdev.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rte_eth_xstats_get_by_id&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help