Added validation test cases for packet output through event
queues (ODP_PKTOUT_MODE_QUEUE).

Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
---
 test/validation/pktio/pktio.c | 74 +++++++++++++++++++++++++++++++++++++++----
 test/validation/pktio/pktio.h |  3 ++
 2 files changed, 71 insertions(+), 6 deletions(-)

diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index 13baffe..0a579e3 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -42,6 +42,7 @@ typedef struct {
        const char *name;
        odp_pktio_t id;
        odp_pktout_queue_t pktout;
+       odp_queue_t queue_out;
        odp_queue_t inq;
        odp_pktin_mode_t in_mode;
 } pktio_info_t;
@@ -65,7 +66,8 @@ typedef enum {
 
 typedef enum {
        TXRX_MODE_SINGLE,
-       TXRX_MODE_MULTI
+       TXRX_MODE_MULTI,
+       TXRX_MODE_MULTI_EVENT
 } txrx_mode_e;
 
 /** size of transmitted packets */
@@ -446,6 +448,31 @@ static int send_packets(odp_pktout_queue_t pktout,
        return 0;
 }
 
+static int send_packet_events(odp_queue_t queue,
+                             odp_packet_t *pkt_tbl, unsigned pkts)
+{
+       int ret;
+       unsigned i;
+       unsigned sent = 0;
+       odp_event_t ev_tbl[pkts];
+
+       for (i = 0; i < pkts; i++)
+               ev_tbl[i] = odp_packet_to_event(pkt_tbl[i]);
+
+       while (sent < pkts) {
+               ret = odp_queue_enq_multi(queue, &ev_tbl[sent], pkts - sent);
+
+               if (ret < 0) {
+                       CU_FAIL_FATAL("failed to send test packet as events");
+                       return -1;
+               }
+
+               sent += ret;
+       }
+
+       return 0;
+}
+
 static void pktio_txrx_multi(pktio_info_t *pktio_a, pktio_info_t *pktio_b,
                             int num_pkts, txrx_mode_e mode)
 {
@@ -488,8 +515,10 @@ static void pktio_txrx_multi(pktio_info_t *pktio_a, 
pktio_info_t *pktio_b,
                                return;
                        }
                }
-       } else {
+       } else if (mode == TXRX_MODE_MULTI) {
                send_packets(pktio_a->pktout, tx_pkt, num_pkts);
+       } else {
+               send_packet_events(pktio_a->queue_out, tx_pkt, num_pkts);
        }
 
        /* and wait for them to arrive back */
@@ -516,20 +545,32 @@ static void test_txrx(odp_pktin_mode_t in_mode, int 
num_pkts,
        for (i = 0; i < num_ifaces; ++i) {
                odp_pktout_queue_t pktout;
                odp_queue_t queue;
+               odp_pktin_mode_t out_mode = ODP_PKTOUT_MODE_DIRECT;
+
+               if (mode == TXRX_MODE_MULTI_EVENT)
+                       out_mode = ODP_PKTOUT_MODE_QUEUE;
 
                io = &pktios[i];
 
                io->name = iface_name[i];
-               io->id   = create_pktio(i, in_mode, ODP_PKTOUT_MODE_DIRECT);
+               io->id   = create_pktio(i, in_mode, out_mode);
                if (io->id == ODP_PKTIO_INVALID) {
                        CU_FAIL("failed to open iface");
                        return;
                }
 
-               CU_ASSERT_FATAL(odp_pktout_queue(io->id, &pktout, 1) == 1);
+               if (mode == TXRX_MODE_MULTI_EVENT) {
+                       CU_ASSERT_FATAL(odp_pktout_event_queue(io->id,
+                                                              &queue, 1) == 1);
+               } else {
+                       CU_ASSERT_FATAL(odp_pktout_queue(io->id,
+                                                        &pktout, 1) == 1);
+                       io->pktout = pktout;
+                       queue = ODP_QUEUE_INVALID;
+               }
 
-               io->pktout  = pktout;
-               io->in_mode = in_mode;
+               io->queue_out = queue;
+               io->in_mode   = in_mode;
 
                if (in_mode == ODP_PKTIN_MODE_QUEUE) {
                        CU_ASSERT_FATAL(odp_pktin_event_queue(io->id, &queue, 1)
@@ -571,6 +612,12 @@ void pktio_test_plain_multi(void)
        test_txrx(ODP_PKTIN_MODE_QUEUE, 1, TXRX_MODE_MULTI);
 }
 
+void pktio_test_plain_multi_event(void)
+{
+       test_txrx(ODP_PKTIN_MODE_QUEUE, 1, TXRX_MODE_MULTI_EVENT);
+       test_txrx(ODP_PKTIN_MODE_QUEUE, TX_BATCH_LEN, TXRX_MODE_MULTI_EVENT);
+}
+
 void pktio_test_sched_queue(void)
 {
        test_txrx(ODP_PKTIN_MODE_SCHED, 1, TXRX_MODE_SINGLE);
@@ -583,6 +630,12 @@ void pktio_test_sched_multi(void)
        test_txrx(ODP_PKTIN_MODE_SCHED, 1, TXRX_MODE_MULTI);
 }
 
+void pktio_test_sched_multi_event(void)
+{
+       test_txrx(ODP_PKTIN_MODE_SCHED, 1, TXRX_MODE_MULTI_EVENT);
+       test_txrx(ODP_PKTIN_MODE_SCHED, TX_BATCH_LEN, TXRX_MODE_MULTI_EVENT);
+}
+
 void pktio_test_recv(void)
 {
        test_txrx(ODP_PKTIN_MODE_DIRECT, 1, TXRX_MODE_SINGLE);
@@ -593,6 +646,12 @@ void pktio_test_recv_multi(void)
        test_txrx(ODP_PKTIN_MODE_DIRECT, TX_BATCH_LEN, TXRX_MODE_MULTI);
 }
 
+void pktio_test_recv_multi_event(void)
+{
+       test_txrx(ODP_PKTIN_MODE_DIRECT, 1, TXRX_MODE_MULTI_EVENT);
+       test_txrx(ODP_PKTIN_MODE_DIRECT, TX_BATCH_LEN, TXRX_MODE_MULTI_EVENT);
+}
+
 void pktio_test_recv_queue(void)
 {
        odp_pktio_t pktio_tx, pktio_rx;
@@ -1679,6 +1738,9 @@ odp_testinfo_t pktio_suite_unsegmented[] = {
        ODP_TEST_INFO(pktio_test_start_stop),
        ODP_TEST_INFO(pktio_test_recv_on_wonly),
        ODP_TEST_INFO(pktio_test_send_on_ronly),
+       ODP_TEST_INFO(pktio_test_plain_multi_event),
+       ODP_TEST_INFO(pktio_test_sched_multi_event),
+       ODP_TEST_INFO(pktio_test_recv_multi_event),
        ODP_TEST_INFO_CONDITIONAL(pktio_test_statistics_counters,
                                  pktio_check_statistics_counters),
        ODP_TEST_INFO_NULL
diff --git a/test/validation/pktio/pktio.h b/test/validation/pktio/pktio.h
index 22fd814..10a573d 100644
--- a/test/validation/pktio/pktio.h
+++ b/test/validation/pktio/pktio.h
@@ -34,6 +34,9 @@ int pktio_check_send_failure(void);
 void pktio_test_send_failure(void);
 void pktio_test_recv_on_wonly(void);
 void pktio_test_send_on_ronly(void);
+void pktio_test_plain_multi_event(void);
+void pktio_test_sched_multi_event(void);
+void pktio_test_recv_multi_event(void);
 int pktio_check_statistics_counters(void);
 void pktio_test_statistics_counters(void);
 
-- 
2.7.1

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to