@@ -29,7 +29,6 @@ extern "C" {
#define PKTIO_MAX_QUEUES 64
#include <linux/if_ether.h>
-#include <pktio/dpdk.h>
/* Forward declaration */
typedef union pktio_entry_u pktio_entry_t;
@@ -42,10 +41,8 @@ typedef union pktio_entry_u pktio_entry_t;
struct pktio_entry {
const pktio_ops_module_t *ops; /**< Implementation specific methods */
- union {
- pktio_ops_data_t ops_data;
- uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
- };
+ uint8_t ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE]; /**< IO operation
+ specific data */
/* These two locks together lock the whole pktio device */
odp_ticketlock_t rxl; /**< RX ticketlock */
odp_ticketlock_t txl; /**< TX ticketlock */
@@ -4,6 +4,8 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
+#include <config.h>
+
#include <odp_posix_extensions.h>
#include <stdio.h>
#include <errno.h>
@@ -39,18 +41,6 @@ static pktio_ops_module_t dpdk_pktio_ops;
static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry);
-static inline pktio_ops_dpdk_data_t *
- __retrieve_op_data(pktio_entry_t *pktio)
-{
- return (pktio_ops_dpdk_data_t *)(pktio->ops_data(dpdk));
-}
-
-static inline void __release_op_data(pktio_entry_t *pktio)
-{
- free(pktio->ops_data(dpdk));
- pktio->ops_data(dpdk) = NULL;
-}
-
/* Test if s has only digits or not. Dpdk pktio uses only digits.*/
static int _dpdk_netdev_is_valid(const char *s)
{
@@ -108,7 +98,7 @@ static int input_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry,
const odp_pktin_queue_param_t *p)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
odp_pktin_mode_t mode = pktio_entry->s.param.in_mode;
/**
@@ -138,7 +128,7 @@ static int output_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry,
const odp_pktout_queue_param_t *p)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE)
pkt_dpdk->lockless_tx = 1;
@@ -155,7 +145,8 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED,
{
uint8_t portid = 0;
struct rte_eth_dev_info dev_info;
- pktio_ops_dpdk_data_t *pkt_dpdk = NULL;
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
int i;
if (!_dpdk_netdev_is_valid(netdev)) {
@@ -164,9 +155,6 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED,
return -1;
}
- pktio_entry->ops_data(dpdk) = malloc(sizeof(pktio_ops_dpdk_data_t));
- pkt_dpdk = __retrieve_op_data(pktio_entry);
-
if (odp_unlikely(pkt_dpdk == NULL)) {
ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct");
return -1;
@@ -202,12 +190,11 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED,
static int close_pkt_dpdk(pktio_entry_t *pktio_entry)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
if (pktio_entry->s.state == PKTIO_STATE_STOPPED)
rte_eth_dev_close(pkt_dpdk->portid);
- __release_op_data(pktio_entry);
return 0;
}
@@ -215,7 +202,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
{
int ret, i;
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint8_t portid = pkt_dpdk->portid;
int sid = rte_eth_dev_socket_id(pkt_dpdk->portid);
int socket_id = sid < 0 ? 0 : sid;
@@ -324,7 +311,8 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
static int stop_pkt_dpdk(pktio_entry_t *pktio_entry)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
+
rte_eth_dev_stop(pkt_dpdk->portid);
return 0;
}
@@ -373,7 +361,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
{
uint16_t nb_rx, i;
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
odp_packet_t *saved_pkt_table;
uint8_t min = pkt_dpdk->min_rx_burst;
odp_time_t ts_val;
@@ -490,7 +478,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
{
int pkts;
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
if (!pkt_dpdk->lockless_tx)
odp_ticketlock_lock(&pkt_dpdk->tx_lock[index]);
@@ -543,7 +531,7 @@ static uint32_t _dpdk_vdev_mtu(uint8_t port_id)
static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint16_t mtu = 0;
int ret;
@@ -604,7 +592,7 @@ static int _dpdk_vdev_promisc_mode_set(uint8_t port_id, int enable)
static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint8_t portid = pkt_dpdk->portid;
if (enable)
@@ -648,7 +636,7 @@ static int _dpdk_vdev_promisc_mode(uint8_t port_id)
static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint8_t portid = pkt_dpdk->portid;
if (pkt_dpdk->vdev_sysc_promisc)
@@ -660,25 +648,27 @@ static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry)
static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
+
rte_eth_macaddr_get(pkt_dpdk->portid,
(struct ether_addr *)mac_addr);
return ETH_ALEN;
}
-
static int capability_pkt_dpdk(pktio_entry_t *pktio_entry,
odp_pktio_capability_t *capa)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
+
*capa = pkt_dpdk->capa;
return 0;
}
+
static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
struct rte_eth_link link;
rte_eth_link_get(pkt_dpdk->portid, &link);
@@ -702,7 +692,7 @@ static void stats_convert(struct rte_eth_stats *rte_stats,
static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
int ret;
struct rte_eth_stats rte_stats;
@@ -721,7 +711,8 @@ static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
static int stats_reset_pkt_dpdk(pktio_entry_t *pktio_entry)
{
const pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
+
rte_eth_stats_reset(pkt_dpdk->portid);
return 0;
}
@@ -50,10 +50,8 @@ typedef union pktio_entry_u pktio_entry_t;
struct pktio_entry {
const pktio_ops_module_t *ops; /**< Implementation specific methods */
- union {
- pktio_ops_data_t ops_data; /**< IO operation specific data */
- uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
- };
+ uint8_t ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE]; /**< IO operation
+ specific data */
/* These two locks together lock the whole pktio device */
odp_ticketlock_t rxl; /**< RX ticketlock */
odp_ticketlock_t txl; /**< TX ticketlock */
@@ -80,21 +80,11 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
odp_api_proto(pktio_ops, print) print;
} pktio_ops_module_t;
-/* Per implementation private data
- * TODO: refactory each implementation to hide it internally
- */
-typedef union {
- void *dpdk;
-} pktio_ops_data_t;
-
-/* Extract pktio ops data from pktio entry structure */
-#define ops_data(mod) s.ops_data.mod
-
/* Maximum size of pktio specific ops data.*/
#define ODP_PKTIO_ODPS_DATA_MAX_SIZE 80000
/* Extract pktio ops data from pktio entry structure */
#define odp_ops_data(_p, _mod) \
- ((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s._ops_data)
+ ((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s.ops_data)
#endif
@@ -14,6 +14,7 @@
#include <ctype.h>
#include <unistd.h>
#include <math.h>
+#include <linux/if_ether.h>
#include <odp/api/cpumask.h>
@@ -39,18 +40,6 @@
#include <rte_tcp.h>
#include <rte_string_fns.h>
-static inline pktio_ops_dpdk_data_t *
- __retrieve_op_data(pktio_entry_t *pktio)
-{
- return (pktio_ops_dpdk_data_t *)(pktio->ops_data(dpdk));
-}
-
-static inline void __release_op_data(pktio_entry_t *pktio)
-{
- free(pktio->ops_data(dpdk));
- pktio->ops_data(dpdk) = NULL;
-}
-
#if ODP_DPDK_ZERO_COPY
ODP_STATIC_ASSERT(CONFIG_PACKET_HEADROOM == RTE_PKTMBUF_HEADROOM,
"ODP and DPDK headroom sizes not matching!");
@@ -363,6 +352,7 @@ static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry,
struct rte_mbuf *mbuf_table[],
uint16_t mbuf_num, odp_time_t *ts)
{
+ pktio_ops_dpdk_data_t *pkt_dpdk = odp_ops_data(pktio_entry, dpdk);
odp_packet_t pkt;
odp_packet_hdr_t *pkt_hdr;
uint16_t pkt_len;
@@ -371,11 +361,11 @@ static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry,
int i, j;
int nb_pkts = 0;
int alloc_len, num;
- odp_pool_t pool = __retrieve_op_data(pktio_entry)->pool;
odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin;
+ odp_pool_t pool = pkt_dpdk->pool;
/* Allocate maximum sized packets */
- alloc_len = __retrieve_op_data(pktio_entry)->data_room;
+ alloc_len = pkt_dpdk->data_room;
num = packet_alloc_multi(pool, alloc_len, pkt_table, mbuf_num);
if (num != mbuf_num) {
@@ -545,7 +535,7 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry,
const odp_packet_t pkt_table[], uint16_t num)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
int i, j;
char *data;
uint16_t pkt_len;
@@ -589,6 +579,8 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry,
struct rte_mbuf *mbuf_table[],
uint16_t mbuf_num, odp_time_t *ts)
{
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
odp_packet_t pkt;
odp_packet_hdr_t *pkt_hdr;
uint16_t pkt_len;
@@ -596,8 +588,8 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry,
void *data;
int i;
int nb_pkts = 0;
- odp_pool_t pool = __retrieve_op_data(pktio_entry)->pool;
odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin;
+ odp_pool_t pool = pkt_dpdk->pool;
for (i = 0; i < mbuf_num; i++) {
odp_packet_hdr_t parsed_hdr;
@@ -662,7 +654,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry,
uint16_t *copy_count)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->s.config.pktout;
int i;
*copy_count = 0;
@@ -752,7 +744,7 @@ static uint32_t dpdk_vdev_mtu_get(uint8_t port_id)
static uint32_t dpdk_mtu_get(pktio_entry_t *pktio_entry)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint32_t mtu = 0;
if (rte_eth_dev_get_mtu(pkt_dpdk->port_id, (uint16_t *)&mtu))
@@ -846,7 +838,7 @@ static int dpdk_setup_port(pktio_entry_t *pktio_entry)
{
int ret;
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
struct rte_eth_rss_conf rss_conf;
uint16_t hw_ip_checksum = 0;
@@ -895,7 +887,7 @@ static int dpdk_setup_port(pktio_entry_t *pktio_entry)
static int dpdk_close(pktio_entry_t *pktio_entry)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
unsigned idx;
unsigned i, j;
@@ -913,7 +905,6 @@ static int dpdk_close(pktio_entry_t *pktio_entry)
if (!ODP_DPDK_ZERO_COPY)
rte_mempool_free(pkt_dpdk->pkt_pool);
- __release_op_data(pktio_entry);
return 0;
}
@@ -1046,6 +1037,8 @@ static int dpdk_pktio_init_local(void)
static int dpdk_input_queues_config(pktio_entry_t *pktio_entry,
const odp_pktin_queue_param_t *p)
{
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
odp_pktin_mode_t mode = pktio_entry->s.param.in_mode;
odp_bool_t lockless;
@@ -1059,9 +1052,9 @@ static int dpdk_input_queues_config(pktio_entry_t *pktio_entry,
lockless = 0;
if (p->hash_enable && p->num_queues > 1)
- __retrieve_op_data(pktio_entry)->hash = p->hash_proto;
+ pkt_dpdk->hash = p->hash_proto;
- __retrieve_op_data(pktio_entry)->lockless_rx = lockless;
+ pkt_dpdk->lockless_rx = lockless;
return 0;
}
@@ -1070,7 +1063,7 @@ static int dpdk_output_queues_config(pktio_entry_t *pktio_entry,
const odp_pktout_queue_param_t *p)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
odp_bool_t lockless;
if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE)
@@ -1087,7 +1080,7 @@ static void dpdk_init_capability(pktio_entry_t *pktio_entry,
struct rte_eth_dev_info *dev_info)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
odp_pktio_capability_t *capa = &pkt_dpdk->capa;
int ptype_cnt;
int ptype_l3_ipv4 = 0;
@@ -1164,7 +1157,8 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
const char *netdev,
odp_pool_t pool)
{
- pktio_ops_dpdk_data_t *pkt_dpdk = NULL;
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
struct rte_eth_dev_info dev_info;
struct rte_mempool *pkt_pool;
char pool_name[RTE_MEMPOOL_NAMESIZE];
@@ -1192,9 +1186,6 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
dpdk_initialized = 1;
}
- pktio_entry->ops_data(dpdk) = malloc(sizeof(pktio_ops_dpdk_data_t));
- pkt_dpdk = __retrieve_op_data(pktio_entry);
-
if (odp_unlikely(pkt_dpdk == NULL)) {
ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct");
return -1;
@@ -1208,7 +1199,6 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
if (rte_eth_dev_count() == 0) {
ODP_ERR("No DPDK ports found\n");
- __release_op_data(pktio_entry);
return -1;
}
@@ -1217,7 +1207,6 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
mtu = dpdk_mtu_get(pktio_entry);
if (mtu == 0) {
ODP_ERR("Failed to read interface MTU\n");
- __release_op_data(pktio_entry);
return -1;
}
pkt_dpdk->mtu = mtu + _ODP_ETHHDR_LEN;
@@ -1254,7 +1243,6 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
}
if (pkt_pool == NULL) {
ODP_ERR("Cannot init mbuf packet pool\n");
- __release_op_data(pktio_entry);
return -1;
}
@@ -1280,7 +1268,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
static int dpdk_start(pktio_entry_t *pktio_entry)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint8_t port_id = pkt_dpdk->port_id;
int ret;
unsigned i;
@@ -1331,7 +1319,10 @@ static int dpdk_start(pktio_entry_t *pktio_entry)
static int dpdk_stop(pktio_entry_t *pktio_entry)
{
- rte_eth_dev_stop(__retrieve_op_data(pktio_entry)->port_id);
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+
+ rte_eth_dev_stop(pkt_dpdk->port_id);
return 0;
}
@@ -1340,7 +1331,7 @@ static int dpdk_recv(pktio_entry_t *pktio_entry, int index,
odp_packet_t pkt_table[], int num)
{
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
pkt_cache_t *rx_cache = &pkt_dpdk->rx_cache[index];
odp_time_t ts_val;
odp_time_t *ts = NULL;
@@ -1416,7 +1407,7 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index,
{
struct rte_mbuf *tx_mbufs[num];
pktio_ops_dpdk_data_t *pkt_dpdk =
- __retrieve_op_data(pktio_entry);
+ odp_ops_data(pktio_entry, dpdk);
uint16_t copy_count = 0;
int tx_pkts;
int i;
@@ -1479,16 +1470,21 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index,
static int dpdk_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr)
{
- rte_eth_macaddr_get(__retrieve_op_data(pktio_entry)->port_id,
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+
+ rte_eth_macaddr_get(pkt_dpdk->port_id,
(struct ether_addr *)mac_addr);
return ETH_ALEN;
}
static int dpdk_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable)
{
- uint8_t port_id = __retrieve_op_data(pktio_entry)->port_id;
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+ uint8_t port_id = pkt_dpdk->port_id;
- if (__retrieve_op_data(pktio_entry)->vdev_sysc_promisc)
+ if (pkt_dpdk->vdev_sysc_promisc)
return dpdk_vdev_promisc_mode_set(port_id, enable);
if (enable)
@@ -1501,9 +1497,11 @@ static int dpdk_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable)
static int dpdk_promisc_mode_get(pktio_entry_t *pktio_entry)
{
- uint8_t port_id = __retrieve_op_data(pktio_entry)->port_id;
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+ uint8_t port_id = pkt_dpdk->port_id;
- if (__retrieve_op_data(pktio_entry)->vdev_sysc_promisc)
+ if (pkt_dpdk->vdev_sysc_promisc)
return dpdk_vdev_promisc_mode_get(port_id);
else
return rte_eth_promiscuous_get(port_id);
@@ -1512,18 +1510,22 @@ static int dpdk_promisc_mode_get(pktio_entry_t *pktio_entry)
static int dpdk_capability(pktio_entry_t *pktio_entry,
odp_pktio_capability_t *capa)
{
- *capa = __retrieve_op_data(pktio_entry)->capa;
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+
+ *capa = pkt_dpdk->capa;
return 0;
}
static int dpdk_link_status(pktio_entry_t *pktio_entry)
{
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
struct rte_eth_link link;
memset(&link, 0, sizeof(struct rte_eth_link));
- rte_eth_link_get_nowait(
- __retrieve_op_data(pktio_entry)->port_id, &link);
+ rte_eth_link_get_nowait(pkt_dpdk->port_id, &link);
return link.link_status;
}
@@ -1542,11 +1544,12 @@ static void stats_convert(const struct rte_eth_stats *rte_stats,
static int dpdk_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
{
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
int ret;
struct rte_eth_stats rte_stats;
- ret = rte_eth_stats_get(
- __retrieve_op_data(pktio_entry)->port_id, &rte_stats);
+ ret = rte_eth_stats_get(pkt_dpdk->port_id, &rte_stats);
if (ret == 0) {
stats_convert(&rte_stats, stats);
@@ -1557,7 +1560,10 @@ static int dpdk_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
static int dpdk_stats_reset(pktio_entry_t *pktio_entry)
{
- rte_eth_stats_reset(__retrieve_op_data(pktio_entry)->port_id);
+ pktio_ops_dpdk_data_t *pkt_dpdk =
+ odp_ops_data(pktio_entry, dpdk);
+
+ rte_eth_stats_reset(pkt_dpdk->port_id);
return 0;
}