DPDK
20.05.0
|
Go to the source code of this file.
Data Structures | |
struct | rte_event_eth_tx_adapter_conf |
struct | rte_event_eth_tx_adapter_stats |
Macros | |
#define | RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST 0x1 |
Typedefs | |
typedef int(* | rte_event_eth_tx_adapter_conf_cb) (uint8_t id, uint8_t dev_id, struct rte_event_eth_tx_adapter_conf *conf, void *arg) |
RTE Event Ethernet Tx Adapter
The event ethernet Tx adapter provides configuration and data path APIs for the ethernet transmit stage of an event driven packet processing application. These APIs abstract the implementation of the transmit stage and allow the application to use eventdev PMD support or a common implementation.
In the common implementation, the application enqueues mbufs to the adapter which runs as a rte_service function. The service function dequeues events from its event port and transmits the mbufs referenced by these events.
The ethernet Tx event adapter APIs are:
The application creates the adapter using rte_event_eth_tx_adapter_create() or rte_event_eth_tx_adapter_create_ext().
The adapter will use the common implementation when the eventdev PMD does not have the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability. The common implementation uses an event port that is created using the port configuration parameter passed to rte_event_eth_tx_adapter_create(). The application can get the port identifier using rte_event_eth_tx_adapter_event_port_get() and must link an event queue to this port.
If the eventdev PMD has the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT flags set, Tx adapter events should be enqueued using the rte_event_eth_tx_adapter_enqueue() function, else the application should use rte_event_enqueue_burst().
Transmit queues can be added and deleted from the adapter using rte_event_eth_tx_adapter_queue_add()/del() APIs respectively.
The application can start and stop the adapter using the rte_event_eth_tx_adapter_start/stop() calls.
The common adapter implementation uses an EAL service function as described before and its execution is controlled using the rte_service APIs. The rte_event_eth_tx_adapter_service_id_get() function can be used to retrieve the adapter's service function ID.
The ethernet port and transmit queue index to transmit the mbuf on are specified using the mbuf port struct rte_mbuf::hash::txadapter:txq. The application should use the rte_event_eth_tx_adapter_txq_set() and rte_event_eth_tx_adapter_txq_get() functions to access the transmit queue index, using these macros will help with minimizing application impact due to a change in how the transmit queue index is specified.
Definition in file rte_event_eth_tx_adapter.h.
#define RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST 0x1 |
This flag is used when all the packets enqueued in the tx adapter are destined for the same Ethernet port & Tx queue.
Definition at line 303 of file rte_event_eth_tx_adapter.h.
typedef int(* rte_event_eth_tx_adapter_conf_cb) (uint8_t id, uint8_t dev_id, struct rte_event_eth_tx_adapter_conf *conf, void *arg) |
Function type used for adapter configuration callback. The callback is used to fill in members of the struct rte_event_eth_tx_adapter_conf, this callback is invoked when creating a RTE service function based adapter implementation.
id | Adapter identifier. | |
dev_id | Event device identifier. | |
[out] | conf | Structure that needs to be populated by this callback. |
arg | Argument to the callback. This is the same as the conf_arg passed to the rte_event_eth_tx_adapter_create_ext(). |
Definition at line 122 of file rte_event_eth_tx_adapter.h.
int rte_event_eth_tx_adapter_create | ( | uint8_t | id, |
uint8_t | dev_id, | ||
struct rte_event_port_conf * | port_config | ||
) |
Create a new ethernet Tx adapter with the specified identifier.
id | The identifier of the ethernet Tx adapter. |
dev_id | The event device identifier. |
port_config | Event port configuration, the adapter uses this configuration to create an event port if needed. |
int rte_event_eth_tx_adapter_create_ext | ( | uint8_t | id, |
uint8_t | dev_id, | ||
rte_event_eth_tx_adapter_conf_cb | conf_cb, | ||
void * | conf_arg | ||
) |
Create a new ethernet Tx adapter with the specified identifier.
id | The identifier of the ethernet Tx adapter. |
dev_id | The event device identifier. |
conf_cb | Callback function that initializes members of the struct rte_event_eth_tx_adapter_conf struct passed into it. |
conf_arg | Argument that is passed to the conf_cb function. |
int rte_event_eth_tx_adapter_free | ( | uint8_t | id | ) |
Free an ethernet Tx adapter
id | Adapter identifier. |
int rte_event_eth_tx_adapter_start | ( | uint8_t | id | ) |
Start ethernet Tx adapter
id | Adapter identifier. |
int rte_event_eth_tx_adapter_stop | ( | uint8_t | id | ) |
Stop ethernet Tx adapter
id | Adapter identifier. |
int rte_event_eth_tx_adapter_queue_add | ( | uint8_t | id, |
uint16_t | eth_dev_id, | ||
int32_t | queue | ||
) |
Add a Tx queue to the adapter. A queue value of -1 is used to indicate all queues within the device.
id | Adapter identifier. |
eth_dev_id | Ethernet Port Identifier. |
queue | Tx queue index. |
int rte_event_eth_tx_adapter_queue_del | ( | uint8_t | id, |
uint16_t | eth_dev_id, | ||
int32_t | queue | ||
) |
Delete a Tx queue from the adapter. A queue value of -1 is used to indicate all queues within the device, that have been added to this adapter.
id | Adapter identifier. |
eth_dev_id | Ethernet Port Identifier. |
queue | Tx queue index. |
|
static |
Set Tx queue in the mbuf. This queue is used by the adapter to transmit the mbuf.
pkt | Pointer to the mbuf. |
queue | Tx queue index. |
Definition at line 266 of file rte_event_eth_tx_adapter.h.
|
static |
Retrieve Tx queue from the mbuf.
pkt | Pointer to the mbuf. |
Definition at line 282 of file rte_event_eth_tx_adapter.h.
int rte_event_eth_tx_adapter_event_port_get | ( | uint8_t | id, |
uint8_t * | event_port_id | ||
) |
Retrieve the adapter event port. The adapter creates an event port if the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT is not set in the ethernet Tx capabilities of the event device.
id | Adapter Identifier. | |
[out] | event_port_id | Event port pointer. |
|
inlinestatic |
Enqueue a burst of events objects or an event object supplied in rte_event structure on an event device designated by its dev_id through the event port specified by port_id. This function is supported if the eventdev PMD has the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability flag set.
The nb_events parameter is the number of event objects to enqueue which are supplied in the ev array of rte_event structure.
The rte_event_eth_tx_adapter_enqueue() function returns the number of events objects it actually enqueued. A return value equal to nb_events means that all event objects have been enqueued.
dev_id | The identifier of the device. |
port_id | The identifier of the event port. |
ev | Points to an array of nb_events objects of type rte_event structure which contain the event object enqueue operations to be processed. |
nb_events | The number of event objects to enqueue, typically number of rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...) available for this port. |
flags | RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_ flags. RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST signifies that all the packets which are enqueued are destined for the same Ethernet port & Tx queue. |
Definition at line 352 of file rte_event_eth_tx_adapter.h.
int rte_event_eth_tx_adapter_stats_get | ( | uint8_t | id, |
struct rte_event_eth_tx_adapter_stats * | stats | ||
) |
Retrieve statistics for an adapter
id | Adapter identifier. | |
[out] | stats | A pointer to structure used to retrieve statistics for an adapter. |
int rte_event_eth_tx_adapter_stats_reset | ( | uint8_t | id | ) |
Reset statistics for an adapter.
id | Adapter identifier. |
int rte_event_eth_tx_adapter_service_id_get | ( | uint8_t | id, |
uint32_t * | service_id | ||
) |
Retrieve the service ID of an adapter. If the adapter doesn't use a rte_service function, this function returns -ESRCH.
id | Adapter identifier. | |
[out] | service_id | A pointer to a uint32_t, to be filled in with the service id. |