Signed-off-by: Nicolas Morey-Chaisemartin <[email protected]>
---
platform/linux-generic/Makefile.am | 1 +
.../linux-generic/include/odp_packet_io_internal.h | 6 ++
platform/linux-generic/odp_packet_io.c | 52 +----------------
platform/linux-generic/pktio/loop.c | 68 ++++++++++++++++++++++
4 files changed, 78 insertions(+), 49 deletions(-)
create mode 100644 platform/linux-generic/pktio/loop.c
diff --git a/platform/linux-generic/Makefile.am
b/platform/linux-generic/Makefile.am
index d54ed86..26492c0 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -140,6 +140,7 @@ __LIB__libodp_la_SOURCES = \
odp_packet.c \
odp_packet_flags.c \
odp_packet_io.c \
+ pktio/loop.c \
pktio/socket.c \
pktio/socket_mmap.c \
odp_pool.c \
diff --git a/platform/linux-generic/include/odp_packet_io_internal.h
b/platform/linux-generic/include/odp_packet_io_internal.h
index b3e29bf..63315af 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -88,6 +88,12 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t
pktio)
int pktin_poll(pktio_entry_t *entry);
+int init_loopback(pktio_entry_t *pktio_entry, odp_pktio_t id);
+int recv_pkt_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
+ unsigned len);
+int send_pkt_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
+ unsigned len);
+
#ifdef __cplusplus
}
#endif
diff --git a/platform/linux-generic/odp_packet_io.c
b/platform/linux-generic/odp_packet_io.c
index afda1b8..79e907e 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -223,22 +223,6 @@ static int init_socket(pktio_entry_t *entry, const char
*dev,
return 0;
}
-static int init_loop(pktio_entry_t *entry, odp_pktio_t id)
-{
- char loopq_name[ODP_QUEUE_NAME_LEN];
-
- entry->s.type = ODP_PKTIO_TYPE_LOOPBACK;
- snprintf(loopq_name, sizeof(loopq_name), "%" PRIu64 "-pktio_loopq",
- odp_pktio_to_u64(id));
- entry->s.loopq = odp_queue_create(loopq_name,
- ODP_QUEUE_TYPE_POLL, NULL);
-
- if (entry->s.loopq == ODP_QUEUE_INVALID)
- return -1;
-
- return 0;
-}
-
static odp_pktio_t setup_pktio_entry(const char *dev, odp_pool_t pool)
{
odp_pktio_t id;
@@ -264,7 +248,7 @@ static odp_pktio_t setup_pktio_entry(const char *dev,
odp_pool_t pool)
return ODP_PKTIO_INVALID;
if (strcmp(dev, "loop") == 0)
- ret = init_loop(pktio_entry, id);
+ ret = init_loopback(pktio_entry, id);
else
ret = init_socket(pktio_entry, dev, pool);
@@ -366,23 +350,7 @@ odp_pktio_t odp_pktio_lookup(const char *dev)
return id;
}
-static int deq_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
- unsigned len)
-{
- int nbr, i;
- odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
- queue_entry_t *qentry;
- qentry = queue_to_qentry(pktio_entry->s.loopq);
- nbr = queue_deq_multi(qentry, hdr_tbl, len);
-
- for (i = 0; i < nbr; ++i) {
- pkts[i] = _odp_packet_from_buffer(odp_hdr_to_buf(hdr_tbl[i]));
- _odp_packet_reset_parse(pkts[i]);
- }
-
- return nbr;
-}
int odp_pktio_recv(odp_pktio_t id, odp_packet_t pkt_table[], int len)
{
@@ -408,7 +376,7 @@ int odp_pktio_recv(odp_pktio_t id, odp_packet_t
pkt_table[], int len)
pkt_table, len);
break;
case ODP_PKTIO_TYPE_LOOPBACK:
- pkts = deq_loopback(pktio_entry, pkt_table, len);
+ pkts = recv_pkt_loopback(pktio_entry, pkt_table, len);
break;
default:
pkts = -1;
@@ -425,20 +393,6 @@ int odp_pktio_recv(odp_pktio_t id, odp_packet_t
pkt_table[], int len)
return pkts;
}
-static int enq_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
- unsigned len)
-{
- odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
- queue_entry_t *qentry;
- unsigned i;
-
- for (i = 0; i < len; ++i)
- hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i]));
-
- qentry = queue_to_qentry(pktio_entry->s.loopq);
- return queue_enq_multi(qentry, hdr_tbl, len);
-}
-
int odp_pktio_send(odp_pktio_t id, odp_packet_t pkt_table[], int len)
{
pktio_entry_t *pktio_entry = get_pktio_entry(id);
@@ -462,7 +416,7 @@ int odp_pktio_send(odp_pktio_t id, odp_packet_t
pkt_table[], int len)
pkt_table, len);
break;
case ODP_PKTIO_TYPE_LOOPBACK:
- pkts = enq_loopback(pktio_entry, pkt_table, len);
+ pkts = send_pkt_loopback(pktio_entry, pkt_table, len);
break;
default:
pkts = -1;
diff --git a/platform/linux-generic/pktio/loop.c
b/platform/linux-generic/pktio/loop.c
new file mode 100644
index 0000000..26b4a33
--- /dev/null
+++ b/platform/linux-generic/pktio/loop.c
@@ -0,0 +1,68 @@
+/* Copyright (c) 2013, Linaro Limited
+ * Copyright (c) 2013, Nokia Solutions and Networks
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <odp.h>
+#include <odp_packet_socket.h>
+#include <odp_packet_internal.h>
+#include <odp_packet_io_internal.h>
+#include <odp_debug_internal.h>
+#include <odp/hints.h>
+
+#include <odp/helper/eth.h>
+#include <odp/helper/ip.h>
+
+int init_loopback(pktio_entry_t *pktio_entry, odp_pktio_t id)
+{
+ char loopq_name[ODP_QUEUE_NAME_LEN];
+
+ pktio_entry->s.type = ODP_PKTIO_TYPE_LOOPBACK;
+ snprintf(loopq_name, sizeof(loopq_name), "%" PRIu64 "-pktio_loopq",
+ odp_pktio_to_u64(id));
+ pktio_entry->s.loopq = odp_queue_create(loopq_name,
+ ODP_QUEUE_TYPE_POLL, NULL);
+
+ if (pktio_entry->s.loopq == ODP_QUEUE_INVALID)
+ return -1;
+
+ return 0;
+}
+
+int recv_pkt_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
+ unsigned len)
+{
+ int nbr, i;
+ odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
+ queue_entry_t *qentry;
+
+ qentry = queue_to_qentry(pktio_entry->s.loopq);
+ nbr = queue_deq_multi(qentry, hdr_tbl, len);
+
+ for (i = 0; i < nbr; ++i) {
+ pkts[i] = _odp_packet_from_buffer(odp_hdr_to_buf(hdr_tbl[i]));
+ _odp_packet_reset_parse(pkts[i]);
+ }
+
+ return nbr;
+}
+
+int send_pkt_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
+ unsigned len)
+{
+ odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
+ queue_entry_t *qentry;
+ unsigned i;
+
+ for (i = 0; i < len; ++i)
+ hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i]));
+
+ qentry = queue_to_qentry(pktio_entry->s.loopq);
+ return queue_enq_multi(qentry, hdr_tbl, len);
+}
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp