aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/pktio/loop.c
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>2018-05-30 19:14:36 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-06-01 23:06:22 +0300
commit09406916470553a85f30fc14889127443cc4a09b (patch)
tree617d7b16e5aa56371138b6149b8a9a8e52f8a8f3 /platform/linux-generic/pktio/loop.c
parentffc3f2bd0059664273425eb0c34411ac5cd88c3e (diff)
linux-gen: pktio: make loop use generic private data field
Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/pktio/loop.c')
-rw-r--r--platform/linux-generic/pktio/loop.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c
index 0bd1835cd..faaef3ab5 100644
--- a/platform/linux-generic/pktio/loop.c
+++ b/platform/linux-generic/pktio/loop.c
@@ -30,6 +30,20 @@
#define MAX_LOOP 16
#define LOOP_MTU (64 * 1024)
+typedef struct {
+ odp_queue_t loopq; /**< loopback queue for "loop" device */
+ odp_bool_t promisc; /**< promiscuous mode state */
+ uint8_t idx; /**< index of "loop" device */
+} pkt_loop_t;
+
+ODP_STATIC_ASSERT(PKTIO_PRIVATE_SIZE >= sizeof(pkt_loop_t),
+ "PKTIO_PRIVATE_SIZE too small");
+
+static inline pkt_loop_t *pkt_priv(pktio_entry_t *pktio_entry)
+{
+ return (pkt_loop_t *)(uintptr_t)(pktio_entry->s.pkt_priv);
+}
+
/* MAC address for the "loop" interface */
static const char pktio_loop_mac[] = {0x02, 0xe9, 0x34, 0x80, 0x73, 0x01};
@@ -56,11 +70,11 @@ 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->s.pkt_loop.loopq =
+ pkt_priv(pktio_entry)->loopq =
odp_queue_create(loopq_name, NULL);
- pktio_entry->s.pkt_loop.idx = idx;
+ pkt_priv(pktio_entry)->idx = idx;
- if (pktio_entry->s.pkt_loop.loopq == ODP_QUEUE_INVALID)
+ if (pkt_priv(pktio_entry)->loopq == ODP_QUEUE_INVALID)
return -1;
loopback_stats_reset(pktio_entry);
@@ -71,7 +85,7 @@ 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->s.pkt_loop.loopq);
+ return odp_queue_destroy(pkt_priv(pktio_entry)->loopq);
}
static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
@@ -92,7 +106,7 @@ static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
odp_ticketlock_lock(&pktio_entry->s.rxl);
- queue = queue_fn->from_ext(pktio_entry->s.pkt_loop.loopq);
+ queue = queue_fn->from_ext(pkt_priv(pktio_entry)->loopq);
nbr = queue_fn->deq_multi(queue, hdr_tbl, num);
if (pktio_entry->s.config.pktin.bit.ts_all ||
@@ -310,7 +324,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->s.pkt_loop.loopq);
+ queue = queue_fn->from_ext(pkt_priv(pktio_entry)->loopq);
ret = queue_fn->enq_multi(queue, hdr_tbl, nb_tx);
if (ret > 0) {
@@ -335,7 +349,7 @@ static int loopback_mac_addr_get(pktio_entry_t *pktio_entry ODP_UNUSED,
void *mac_addr)
{
memcpy(mac_addr, pktio_loop_mac, ETH_ALEN);
- ((uint8_t *)mac_addr)[ETH_ALEN - 1] += pktio_entry->s.pkt_loop.idx;
+ ((uint8_t *)mac_addr)[ETH_ALEN - 1] += pkt_priv(pktio_entry)->idx;
return ETH_ALEN;
}
@@ -387,13 +401,13 @@ 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->s.pkt_loop.promisc = enable;
+ pkt_priv(pktio_entry)->promisc = enable;
return 0;
}
static int loopback_promisc_mode_get(pktio_entry_t *pktio_entry)
{
- return pktio_entry->s.pkt_loop.promisc ? 1 : 0;
+ return pkt_priv(pktio_entry)->promisc ? 1 : 0;
}
static int loopback_stats(pktio_entry_t *pktio_entry,