xref: /f-stack/dpdk/app/test/test_table_ports.c (revision 4418919f)
1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  * Copyright(c) 2010-2014 Intel Corporation
3*4418919fSjohnjiang  */
4*4418919fSjohnjiang 
5*4418919fSjohnjiang #include "test_table_ports.h"
6*4418919fSjohnjiang #include "test_table.h"
7*4418919fSjohnjiang 
8*4418919fSjohnjiang port_test port_tests[] = {
9*4418919fSjohnjiang 	test_port_ring_reader,
10*4418919fSjohnjiang 	test_port_ring_writer,
11*4418919fSjohnjiang };
12*4418919fSjohnjiang 
13*4418919fSjohnjiang unsigned n_port_tests = RTE_DIM(port_tests);
14*4418919fSjohnjiang 
15*4418919fSjohnjiang /* Port tests */
16*4418919fSjohnjiang int
test_port_ring_reader(void)17*4418919fSjohnjiang test_port_ring_reader(void)
18*4418919fSjohnjiang {
19*4418919fSjohnjiang 	int status, i;
20*4418919fSjohnjiang 	struct rte_port_ring_reader_params port_ring_reader_params;
21*4418919fSjohnjiang 	void *port;
22*4418919fSjohnjiang 
23*4418919fSjohnjiang 	/* Invalid params */
24*4418919fSjohnjiang 	port = rte_port_ring_reader_ops.f_create(NULL, 0);
25*4418919fSjohnjiang 	if (port != NULL)
26*4418919fSjohnjiang 		return -1;
27*4418919fSjohnjiang 
28*4418919fSjohnjiang 	status = rte_port_ring_reader_ops.f_free(port);
29*4418919fSjohnjiang 	if (status >= 0)
30*4418919fSjohnjiang 		return -2;
31*4418919fSjohnjiang 
32*4418919fSjohnjiang 	/* Create and free */
33*4418919fSjohnjiang 	port_ring_reader_params.ring = RING_RX;
34*4418919fSjohnjiang 	port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
35*4418919fSjohnjiang 	if (port == NULL)
36*4418919fSjohnjiang 		return -3;
37*4418919fSjohnjiang 
38*4418919fSjohnjiang 	status = rte_port_ring_reader_ops.f_free(port);
39*4418919fSjohnjiang 	if (status != 0)
40*4418919fSjohnjiang 		return -4;
41*4418919fSjohnjiang 
42*4418919fSjohnjiang 	/* -- Traffic RX -- */
43*4418919fSjohnjiang 	int expected_pkts, received_pkts;
44*4418919fSjohnjiang 	struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
45*4418919fSjohnjiang 	void *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
46*4418919fSjohnjiang 
47*4418919fSjohnjiang 	port_ring_reader_params.ring = RING_RX;
48*4418919fSjohnjiang 	port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
49*4418919fSjohnjiang 
50*4418919fSjohnjiang 	/* Single packet */
51*4418919fSjohnjiang 	mbuf[0] = (void *)rte_pktmbuf_alloc(pool);
52*4418919fSjohnjiang 
53*4418919fSjohnjiang 	expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
54*4418919fSjohnjiang 		mbuf, 1, NULL);
55*4418919fSjohnjiang 	received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf, 1);
56*4418919fSjohnjiang 
57*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
58*4418919fSjohnjiang 		return -5;
59*4418919fSjohnjiang 
60*4418919fSjohnjiang 	rte_pktmbuf_free(res_mbuf[0]);
61*4418919fSjohnjiang 
62*4418919fSjohnjiang 	/* Multiple packets */
63*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
64*4418919fSjohnjiang 		mbuf[i] = rte_pktmbuf_alloc(pool);
65*4418919fSjohnjiang 
66*4418919fSjohnjiang 	expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
67*4418919fSjohnjiang 		(void * const *) mbuf, RTE_PORT_IN_BURST_SIZE_MAX, NULL);
68*4418919fSjohnjiang 	received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf,
69*4418919fSjohnjiang 		RTE_PORT_IN_BURST_SIZE_MAX);
70*4418919fSjohnjiang 
71*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
72*4418919fSjohnjiang 		return -6;
73*4418919fSjohnjiang 
74*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
75*4418919fSjohnjiang 		rte_pktmbuf_free(res_mbuf[i]);
76*4418919fSjohnjiang 
77*4418919fSjohnjiang 	return 0;
78*4418919fSjohnjiang }
79*4418919fSjohnjiang 
80*4418919fSjohnjiang int
test_port_ring_writer(void)81*4418919fSjohnjiang test_port_ring_writer(void)
82*4418919fSjohnjiang {
83*4418919fSjohnjiang 	int status, i;
84*4418919fSjohnjiang 	struct rte_port_ring_writer_params port_ring_writer_params;
85*4418919fSjohnjiang 	void *port;
86*4418919fSjohnjiang 
87*4418919fSjohnjiang 	/* Invalid params */
88*4418919fSjohnjiang 	port = rte_port_ring_writer_ops.f_create(NULL, 0);
89*4418919fSjohnjiang 	if (port != NULL)
90*4418919fSjohnjiang 		return -1;
91*4418919fSjohnjiang 
92*4418919fSjohnjiang 	status = rte_port_ring_writer_ops.f_free(port);
93*4418919fSjohnjiang 	if (status >= 0)
94*4418919fSjohnjiang 		return -2;
95*4418919fSjohnjiang 
96*4418919fSjohnjiang 	port_ring_writer_params.ring = NULL;
97*4418919fSjohnjiang 
98*4418919fSjohnjiang 	port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
99*4418919fSjohnjiang 	if (port != NULL)
100*4418919fSjohnjiang 		return -3;
101*4418919fSjohnjiang 
102*4418919fSjohnjiang 	port_ring_writer_params.ring = RING_TX;
103*4418919fSjohnjiang 	port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX + 1;
104*4418919fSjohnjiang 
105*4418919fSjohnjiang 	port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
106*4418919fSjohnjiang 	if (port != NULL)
107*4418919fSjohnjiang 		return -4;
108*4418919fSjohnjiang 
109*4418919fSjohnjiang 	/* Create and free */
110*4418919fSjohnjiang 	port_ring_writer_params.ring = RING_TX;
111*4418919fSjohnjiang 	port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
112*4418919fSjohnjiang 
113*4418919fSjohnjiang 	port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
114*4418919fSjohnjiang 	if (port == NULL)
115*4418919fSjohnjiang 		return -5;
116*4418919fSjohnjiang 
117*4418919fSjohnjiang 	status = rte_port_ring_writer_ops.f_free(port);
118*4418919fSjohnjiang 	if (status != 0)
119*4418919fSjohnjiang 		return -6;
120*4418919fSjohnjiang 
121*4418919fSjohnjiang 	/* -- Traffic TX -- */
122*4418919fSjohnjiang 	int expected_pkts, received_pkts;
123*4418919fSjohnjiang 	struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
124*4418919fSjohnjiang 	struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
125*4418919fSjohnjiang 
126*4418919fSjohnjiang 	port_ring_writer_params.ring = RING_TX;
127*4418919fSjohnjiang 	port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
128*4418919fSjohnjiang 	port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
129*4418919fSjohnjiang 
130*4418919fSjohnjiang 	/* Single packet */
131*4418919fSjohnjiang 	mbuf[0] = rte_pktmbuf_alloc(pool);
132*4418919fSjohnjiang 
133*4418919fSjohnjiang 	rte_port_ring_writer_ops.f_tx(port, mbuf[0]);
134*4418919fSjohnjiang 	rte_port_ring_writer_ops.f_flush(port);
135*4418919fSjohnjiang 	expected_pkts = 1;
136*4418919fSjohnjiang 	received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
137*4418919fSjohnjiang 		(void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
138*4418919fSjohnjiang 
139*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
140*4418919fSjohnjiang 		return -7;
141*4418919fSjohnjiang 
142*4418919fSjohnjiang 	rte_pktmbuf_free(res_mbuf[0]);
143*4418919fSjohnjiang 
144*4418919fSjohnjiang 	/* Multiple packets */
145*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) {
146*4418919fSjohnjiang 		mbuf[i] = rte_pktmbuf_alloc(pool);
147*4418919fSjohnjiang 		rte_port_ring_writer_ops.f_tx(port, mbuf[i]);
148*4418919fSjohnjiang 	}
149*4418919fSjohnjiang 
150*4418919fSjohnjiang 	expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
151*4418919fSjohnjiang 	received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
152*4418919fSjohnjiang 		(void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
153*4418919fSjohnjiang 
154*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
155*4418919fSjohnjiang 		return -8;
156*4418919fSjohnjiang 
157*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
158*4418919fSjohnjiang 		rte_pktmbuf_free(res_mbuf[i]);
159*4418919fSjohnjiang 
160*4418919fSjohnjiang 	/* TX Bulk */
161*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
162*4418919fSjohnjiang 		mbuf[i] = rte_pktmbuf_alloc(pool);
163*4418919fSjohnjiang 	rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-1);
164*4418919fSjohnjiang 
165*4418919fSjohnjiang 	expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
166*4418919fSjohnjiang 	received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
167*4418919fSjohnjiang 		(void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
168*4418919fSjohnjiang 
169*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
170*4418919fSjohnjiang 		return -8;
171*4418919fSjohnjiang 
172*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
173*4418919fSjohnjiang 		rte_pktmbuf_free(res_mbuf[i]);
174*4418919fSjohnjiang 
175*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
176*4418919fSjohnjiang 		mbuf[i] = rte_pktmbuf_alloc(pool);
177*4418919fSjohnjiang 	rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-3);
178*4418919fSjohnjiang 	rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)2);
179*4418919fSjohnjiang 
180*4418919fSjohnjiang 	expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
181*4418919fSjohnjiang 	received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
182*4418919fSjohnjiang 		(void **)res_mbuf, port_ring_writer_params.tx_burst_sz, NULL);
183*4418919fSjohnjiang 
184*4418919fSjohnjiang 	if (received_pkts < expected_pkts)
185*4418919fSjohnjiang 		return -9;
186*4418919fSjohnjiang 
187*4418919fSjohnjiang 	for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
188*4418919fSjohnjiang 		rte_pktmbuf_free(res_mbuf[i]);
189*4418919fSjohnjiang 
190*4418919fSjohnjiang 	return 0;
191*4418919fSjohnjiang }
192