xref: /dpdk/app/test-pipeline/main.h (revision 0efea35a2bb0ae9df6e204151c7f96b5eb93e130)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2016 Intel Corporation
3  */
4 
5 #ifndef _MAIN_H_
6 #define _MAIN_H_
7 
8 #ifndef APP_MBUF_ARRAY_SIZE
9 #define APP_MBUF_ARRAY_SIZE 256
10 #endif
11 
12 struct app_mbuf_array {
13 	struct rte_mbuf *array[APP_MBUF_ARRAY_SIZE];
14 	uint16_t n_mbufs;
15 };
16 
17 #ifndef APP_MAX_PORTS
18 #define APP_MAX_PORTS 4
19 #endif
20 
21 struct __rte_cache_aligned app_params {
22 	/* CPU cores */
23 	uint32_t core_rx;
24 	uint32_t core_worker;
25 	uint32_t core_tx;
26 
27 	/* Ports*/
28 	uint32_t ports[APP_MAX_PORTS];
29 	uint32_t n_ports;
30 	uint32_t port_rx_ring_size;
31 	uint32_t port_tx_ring_size;
32 
33 	/* Rings */
34 	struct rte_ring *rings_rx[APP_MAX_PORTS];
35 	struct rte_ring *rings_tx[APP_MAX_PORTS];
36 	uint32_t ring_rx_size;
37 	uint32_t ring_tx_size;
38 
39 	/* Internal buffers */
40 	struct app_mbuf_array mbuf_rx;
41 	struct app_mbuf_array mbuf_tx[APP_MAX_PORTS];
42 
43 	/* Buffer pool */
44 	struct rte_mempool *pool;
45 	uint32_t pool_buffer_size;
46 	uint32_t pool_size;
47 	uint32_t pool_cache_size;
48 
49 	/* Burst sizes */
50 	uint32_t burst_size_rx_read;
51 	uint32_t burst_size_rx_write;
52 	uint32_t burst_size_worker_read;
53 	uint32_t burst_size_worker_write;
54 	uint32_t burst_size_tx_read;
55 	uint32_t burst_size_tx_write;
56 
57 	/* App behavior */
58 	uint32_t pipeline_type;
59 };
60 
61 extern struct app_params app;
62 
63 extern bool force_quit;
64 
65 int app_parse_args(int argc, char **argv);
66 void app_print_usage(void);
67 void app_init(void);
68 int app_lcore_main_loop(void *arg);
69 
70 /* Pipeline */
71 enum {
72 	e_APP_PIPELINE_NONE = 0,
73 	e_APP_PIPELINE_STUB,
74 
75 	e_APP_PIPELINE_HASH_KEY8_EXT,
76 	e_APP_PIPELINE_HASH_KEY8_LRU,
77 	e_APP_PIPELINE_HASH_KEY16_EXT,
78 	e_APP_PIPELINE_HASH_KEY16_LRU,
79 	e_APP_PIPELINE_HASH_KEY32_EXT,
80 	e_APP_PIPELINE_HASH_KEY32_LRU,
81 
82 	e_APP_PIPELINE_HASH_SPEC_KEY8_EXT,
83 	e_APP_PIPELINE_HASH_SPEC_KEY8_LRU,
84 	e_APP_PIPELINE_HASH_SPEC_KEY16_EXT,
85 	e_APP_PIPELINE_HASH_SPEC_KEY16_LRU,
86 	e_APP_PIPELINE_HASH_SPEC_KEY32_EXT,
87 	e_APP_PIPELINE_HASH_SPEC_KEY32_LRU,
88 
89 	e_APP_PIPELINE_ACL,
90 	e_APP_PIPELINE_LPM,
91 	e_APP_PIPELINE_LPM_IPV6,
92 
93 	e_APP_PIPELINE_HASH_CUCKOO_KEY8,
94 	e_APP_PIPELINE_HASH_CUCKOO_KEY16,
95 	e_APP_PIPELINE_HASH_CUCKOO_KEY32,
96 	e_APP_PIPELINE_HASH_CUCKOO_KEY48,
97 	e_APP_PIPELINE_HASH_CUCKOO_KEY64,
98 	e_APP_PIPELINE_HASH_CUCKOO_KEY80,
99 	e_APP_PIPELINE_HASH_CUCKOO_KEY96,
100 	e_APP_PIPELINE_HASH_CUCKOO_KEY112,
101 	e_APP_PIPELINE_HASH_CUCKOO_KEY128,
102 	e_APP_PIPELINES
103 };
104 
105 void app_main_loop_rx(void);
106 void app_main_loop_rx_metadata(void);
107 uint64_t test_hash(void *key,
108 	void *key_mask,
109 	uint32_t key_size,
110 	uint64_t seed);
111 
112 uint32_t test_hash_cuckoo(const void *key,
113 	uint32_t key_size,
114 	uint32_t seed);
115 
116 void app_main_loop_worker(void);
117 void app_main_loop_worker_pipeline_stub(void);
118 void app_main_loop_worker_pipeline_hash(void);
119 void app_main_loop_worker_pipeline_acl(void);
120 void app_main_loop_worker_pipeline_lpm(void);
121 void app_main_loop_worker_pipeline_lpm_ipv6(void);
122 
123 void app_main_loop_tx(void);
124 
125 #define APP_FLUSH 0
126 #ifndef APP_FLUSH
127 #define APP_FLUSH 0x3FF
128 #endif
129 
130 #define APP_METADATA_OFFSET(offset) (sizeof(struct rte_mbuf) + (offset))
131 
132 #endif /* _MAIN_H_ */
133