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

Reply via email to