xref: /dpdk/examples/pipeline/obj.h (revision daa02b5cddbb8e11b31d41e2bf7bb1ae64dcae2f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Intel Corporation
3  */
4 
5 #ifndef _INCLUDE_OBJ_H_
6 #define _INCLUDE_OBJ_H_
7 
8 #include <stdint.h>
9 #include <sys/queue.h>
10 
11 #include <rte_mempool.h>
12 #include <rte_swx_pipeline.h>
13 #include <rte_swx_ctl.h>
14 
15 #ifndef NAME_SIZE
16 #define NAME_SIZE 64
17 #endif
18 
19 /*
20  * obj
21  */
22 struct obj;
23 
24 struct obj *
25 obj_init(void);
26 
27 /*
28  * mempool
29  */
30 struct mempool_params {
31 	uint32_t buffer_size;
32 	uint32_t pool_size;
33 	uint32_t cache_size;
34 	uint32_t cpu_id;
35 };
36 
37 struct mempool {
38 	TAILQ_ENTRY(mempool) node;
39 	char name[NAME_SIZE];
40 	struct rte_mempool *m;
41 	uint32_t buffer_size;
42 };
43 
44 struct mempool *
45 mempool_create(struct obj *obj,
46 	       const char *name,
47 	       struct mempool_params *params);
48 
49 struct mempool *
50 mempool_find(struct obj *obj,
51 	     const char *name);
52 
53 /*
54  * link
55  */
56 #ifndef LINK_RXQ_RSS_MAX
57 #define LINK_RXQ_RSS_MAX                                   16
58 #endif
59 
60 struct link_params_rss {
61 	uint32_t queue_id[LINK_RXQ_RSS_MAX];
62 	uint32_t n_queues;
63 };
64 
65 struct link_params {
66 	const char *dev_name;
67 	uint16_t port_id; /**< Valid only when *dev_name* is NULL. */
68 
69 	struct {
70 		uint32_t n_queues;
71 		uint32_t queue_size;
72 		const char *mempool_name;
73 		struct link_params_rss *rss;
74 	} rx;
75 
76 	struct {
77 		uint32_t n_queues;
78 		uint32_t queue_size;
79 	} tx;
80 
81 	int promiscuous;
82 };
83 
84 struct link {
85 	TAILQ_ENTRY(link) node;
86 	char name[NAME_SIZE];
87 	char dev_name[NAME_SIZE];
88 	uint16_t port_id;
89 	uint32_t n_rxq;
90 	uint32_t n_txq;
91 };
92 
93 struct link *
94 link_create(struct obj *obj,
95 	    const char *name,
96 	    struct link_params *params);
97 
98 int
99 link_is_up(struct obj *obj, const char *name);
100 
101 struct link *
102 link_find(struct obj *obj, const char *name);
103 
104 struct link *
105 link_next(struct obj *obj, struct link *link);
106 
107 /*
108  * ring
109  */
110 struct ring_params {
111 	uint32_t size;
112 	uint32_t numa_node;
113 };
114 
115 struct ring {
116 	TAILQ_ENTRY(ring) node;
117 	char name[NAME_SIZE];
118 };
119 
120 struct ring *
121 ring_create(struct obj *obj,
122 	   const char *name,
123 	   struct ring_params *params);
124 
125 struct ring *
126 ring_find(struct obj *obj, const char *name);
127 
128 /*
129  * tap
130  */
131 struct tap {
132 	TAILQ_ENTRY(tap) node;
133 	char name[NAME_SIZE];
134 	int fd;
135 };
136 
137 struct tap *
138 tap_find(struct obj *obj, const char *name);
139 
140 struct tap *
141 tap_next(struct obj *obj, struct tap *tap);
142 
143 struct tap *
144 tap_create(struct obj *obj, const char *name);
145 
146 /*
147  * pipeline
148  */
149 struct pipeline {
150 	TAILQ_ENTRY(pipeline) node;
151 	char name[NAME_SIZE];
152 
153 	struct rte_swx_pipeline *p;
154 	struct rte_swx_ctl_pipeline *ctl;
155 
156 	uint32_t timer_period_ms;
157 	int enabled;
158 	uint32_t thread_id;
159 	uint32_t cpu_id;
160 };
161 
162 struct pipeline *
163 pipeline_create(struct obj *obj,
164 		const char *name,
165 		int numa_node);
166 
167 struct pipeline *
168 pipeline_find(struct obj *obj, const char *name);
169 
170 #endif /* _INCLUDE_OBJ_H_ */
171