aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2016-02-25 13:31:27 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2016-03-04 13:24:49 +0300
commitbac65460c608a5dd79a7e8a25f5d69f240ea4be7 (patch)
treeac1c5d04395ba414f3a210343251b1aab34cf495 /test
parente4ac2e3a4d71898439723a4f44b7a7db4ecdfa07 (diff)
validation: pktio: add output event queue tests
Added validation test cases for packet output through event queues (ODP_PKTOUT_MODE_QUEUE). Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-and-tested-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'test')
-rw-r--r--test/validation/pktio/pktio.c74
-rw-r--r--test/validation/pktio/pktio.h3
2 files changed, 71 insertions, 6 deletions
diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index f2cb08fa4..fa0e17bbc 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -44,6 +44,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;
@@ -67,7 +68,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 */
@@ -448,6 +450,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)
{
@@ -502,8 +529,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 */
@@ -530,20 +559,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)
@@ -585,6 +626,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);
@@ -597,6 +644,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);
@@ -607,6 +660,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;
@@ -1714,6 +1773,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 04819552d..14db6e196 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);