aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogdan Pricope <bogdan.pricope@linaro.org>2017-09-21 14:38:53 +0300
committerYi He <yi.he@linaro.org>2017-10-20 09:48:51 +0800
commita9c61e3590ea4e9bc3fb30337cfa24b32ff4ea41 (patch)
treec4dce09a41da71c38e4a7f0798a9b4e070779854
parent613f352da705b0076cf82c0a96e2e69473018ccd (diff)
linux-gen: pktio: loopback: use generic pktio_ops data storage
Signed-off-by: Bogdan Pricope <bogdan.pricope@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Yi He <yi.he@linaro.org>
-rw-r--r--platform/linux-generic/include/odp_pktio_ops_subsystem.h2
-rw-r--r--platform/linux-generic/pktio/loopback.c33
2 files changed, 25 insertions, 10 deletions
diff --git a/platform/linux-generic/include/odp_pktio_ops_subsystem.h b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
index 07c5dbee7..241ce4673 100644
--- a/platform/linux-generic/include/odp_pktio_ops_subsystem.h
+++ b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
@@ -82,7 +82,6 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
/* All implementations of this subsystem */
#include <odp_pktio_ops_ipc.h>
-#include <odp_pktio_ops_loopback.h>
#include <odp_pktio_ops_netmap.h>
#include <odp_pktio_ops_pcap.h>
#include <odp_pktio_ops_socket.h>
@@ -94,7 +93,6 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
typedef union {
void *dpdk;
pktio_ops_ipc_data_t ipc;
- pktio_ops_loopback_data_t loopback;
pktio_ops_netmap_data_t netmap;
pktio_ops_pcap_data_t pcap;
pktio_ops_socket_data_t socket;
diff --git a/platform/linux-generic/pktio/loopback.c b/platform/linux-generic/pktio/loopback.c
index b17868a39..01bbc8bc6 100644
--- a/platform/linux-generic/pktio/loopback.c
+++ b/platform/linux-generic/pktio/loopback.c
@@ -14,6 +14,7 @@
#include <odp_debug_internal.h>
#include <odp/api/hints.h>
#include <odp_queue_if.h>
+#include <odp_pktio_ops_loopback.h>
#include <protocols/eth.h>
#include <protocols/ip.h>
@@ -21,6 +22,7 @@
#include <errno.h>
#include <inttypes.h>
#include <limits.h>
+#include <linux/if_ether.h>
/* MAC address for the "loop" interface */
static const char pktio_loop_mac[] = {0x02, 0xe9, 0x34, 0x80, 0x73, 0x01};
@@ -30,6 +32,9 @@ static int loopback_stats_reset(pktio_entry_t *pktio_entry);
static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry,
const char *devname, odp_pool_t pool ODP_UNUSED)
{
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
+
if (strcmp(devname, "loop"))
return -1;
@@ -37,10 +42,9 @@ static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry,
snprintf(loopq_name, sizeof(loopq_name), "%" PRIu64 "-pktio_loopq",
odp_pktio_to_u64(id));
- pktio_entry->ops_data(loopback).loopq =
- odp_queue_create(loopq_name, NULL);
+ pkt_lbk->loopq = odp_queue_create(loopq_name, NULL);
- if (pktio_entry->ops_data(loopback).loopq == ODP_QUEUE_INVALID)
+ if (pkt_lbk->loopq == ODP_QUEUE_INVALID)
return -1;
loopback_stats_reset(pktio_entry);
@@ -50,7 +54,10 @@ static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry,
static int loopback_close(pktio_entry_t *pktio_entry)
{
- return odp_queue_destroy(pktio_entry->ops_data(loopback).loopq);
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
+
+ return odp_queue_destroy(pkt_lbk->loopq);
}
static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
@@ -65,13 +72,15 @@ static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
odp_time_t *ts = NULL;
int num_rx = 0;
int failed = 0;
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
if (odp_unlikely(len > QUEUE_MULTI_MAX))
len = QUEUE_MULTI_MAX;
odp_ticketlock_lock(&pktio_entry->s.rxl);
- queue = queue_fn->from_ext(pktio_entry->ops_data(loopback).loopq);
+ queue = queue_fn->from_ext(pkt_lbk->loopq);
nbr = queue_fn->deq_multi(queue, hdr_tbl, len);
if (pktio_entry->s.config.pktin.bit.ts_all ||
@@ -155,6 +164,8 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
int i;
int ret;
uint32_t bytes = 0;
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
if (odp_unlikely(len > QUEUE_MULTI_MAX))
len = QUEUE_MULTI_MAX;
@@ -166,7 +177,7 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
odp_ticketlock_lock(&pktio_entry->s.txl);
- queue = queue_fn->from_ext(pktio_entry->ops_data(loopback).loopq);
+ queue = queue_fn->from_ext(pkt_lbk->loopq);
ret = queue_fn->enq_multi(queue, hdr_tbl, len);
if (ret > 0) {
@@ -219,13 +230,19 @@ static int loopback_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
static int loopback_promisc_mode_set(pktio_entry_t *pktio_entry,
odp_bool_t enable)
{
- pktio_entry->ops_data(loopback).promisc = enable;
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
+
+ pkt_lbk->promisc = enable;
return 0;
}
static int loopback_promisc_mode_get(pktio_entry_t *pktio_entry)
{
- return pktio_entry->ops_data(loopback).promisc ? 1 : 0;
+ pktio_ops_loopback_data_t *pkt_lbk =
+ odp_ops_data(pktio_entry, loopback);
+
+ return pkt_lbk->promisc ? 1 : 0;
}
static int loopback_stats(pktio_entry_t *pktio_entry,