1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2014 Intel Corporation
5 #ifndef RTE_EXEC_ENV_WINDOWS
7 #include "test_table_ports.h"
8 #include "test_table.h"
10 port_test port_tests[] = {
11 test_port_ring_reader,
12 test_port_ring_writer,
15 unsigned n_port_tests = RTE_DIM(port_tests);
19 test_port_ring_reader(void)
22 struct rte_port_ring_reader_params port_ring_reader_params;
26 port = rte_port_ring_reader_ops.f_create(NULL, 0);
30 status = rte_port_ring_reader_ops.f_free(port);
35 port_ring_reader_params.ring = RING_RX;
36 port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
40 status = rte_port_ring_reader_ops.f_free(port);
44 /* -- Traffic RX -- */
45 int expected_pkts, received_pkts;
46 struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
47 void *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
49 port_ring_reader_params.ring = RING_RX;
50 port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
53 mbuf[0] = (void *)rte_pktmbuf_alloc(pool);
55 expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
57 received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf, 1);
59 if (received_pkts < expected_pkts)
62 rte_pktmbuf_free(res_mbuf[0]);
64 /* Multiple packets */
65 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
66 mbuf[i] = rte_pktmbuf_alloc(pool);
68 expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
69 (void * const *) mbuf, RTE_PORT_IN_BURST_SIZE_MAX, NULL);
70 received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf,
71 RTE_PORT_IN_BURST_SIZE_MAX);
73 if (received_pkts < expected_pkts)
76 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
77 rte_pktmbuf_free(res_mbuf[i]);
83 test_port_ring_writer(void)
86 struct rte_port_ring_writer_params port_ring_writer_params;
90 port = rte_port_ring_writer_ops.f_create(NULL, 0);
94 status = rte_port_ring_writer_ops.f_free(port);
98 port_ring_writer_params.ring = NULL;
100 port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
104 port_ring_writer_params.ring = RING_TX;
105 port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX + 1;
107 port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
111 /* Create and free */
112 port_ring_writer_params.ring = RING_TX;
113 port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
115 port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
119 status = rte_port_ring_writer_ops.f_free(port);
123 /* -- Traffic TX -- */
124 int expected_pkts, received_pkts;
125 struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
126 struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
128 port_ring_writer_params.ring = RING_TX;
129 port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
130 port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
133 mbuf[0] = rte_pktmbuf_alloc(pool);
135 rte_port_ring_writer_ops.f_tx(port, mbuf[0]);
136 rte_port_ring_writer_ops.f_flush(port);
138 received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
139 (void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
141 if (received_pkts < expected_pkts)
144 rte_pktmbuf_free(res_mbuf[0]);
146 /* Multiple packets */
147 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) {
148 mbuf[i] = rte_pktmbuf_alloc(pool);
149 rte_port_ring_writer_ops.f_tx(port, mbuf[i]);
152 expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
153 received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
154 (void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
156 if (received_pkts < expected_pkts)
159 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
160 rte_pktmbuf_free(res_mbuf[i]);
163 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
164 mbuf[i] = rte_pktmbuf_alloc(pool);
165 rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-1);
167 expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
168 received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
169 (void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
171 if (received_pkts < expected_pkts)
174 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
175 rte_pktmbuf_free(res_mbuf[i]);
177 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
178 mbuf[i] = rte_pktmbuf_alloc(pool);
179 rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-3);
180 rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)2);
182 expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
183 received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
184 (void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
186 if (received_pkts < expected_pkts)
189 for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
190 rte_pktmbuf_free(res_mbuf[i]);
195 #endif /* !RTE_EXEC_ENV_WINDOWS */