xref: /openbmc/linux/tools/net/ynl/generated/fou-user.h (revision d5a05299)
1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2 /* Do not edit directly, auto-generated from: */
3 /*	Documentation/netlink/specs/fou.yaml */
4 /* YNL-GEN user header */
5 
6 #ifndef _LINUX_FOU_GEN_H
7 #define _LINUX_FOU_GEN_H
8 
9 #include <stdlib.h>
10 #include <string.h>
11 #include <linux/types.h>
12 #include <linux/fou.h>
13 
14 struct ynl_sock;
15 
16 extern const struct ynl_family ynl_fou_family;
17 
18 /* Enums */
19 const char *fou_op_str(int op);
20 const char *fou_encap_type_str(int value);
21 
22 /* Common nested types */
23 /* ============== FOU_CMD_ADD ============== */
24 /* FOU_CMD_ADD - do */
25 struct fou_add_req {
26 	struct {
27 		__u32 port:1;
28 		__u32 ipproto:1;
29 		__u32 type:1;
30 		__u32 remcsum_nopartial:1;
31 		__u32 local_v4:1;
32 		__u32 peer_v4:1;
33 		__u32 local_v6_len;
34 		__u32 peer_v6_len;
35 		__u32 peer_port:1;
36 		__u32 ifindex:1;
37 	} _present;
38 
39 	__u16 port /* big-endian */;
40 	__u8 ipproto;
41 	__u8 type;
42 	__u32 local_v4;
43 	__u32 peer_v4;
44 	void *local_v6;
45 	void *peer_v6;
46 	__u16 peer_port /* big-endian */;
47 	__s32 ifindex;
48 };
49 
50 static inline struct fou_add_req *fou_add_req_alloc(void)
51 {
52 	return calloc(1, sizeof(struct fou_add_req));
53 }
54 void fou_add_req_free(struct fou_add_req *req);
55 
56 static inline void
57 fou_add_req_set_port(struct fou_add_req *req, __u16 port /* big-endian */)
58 {
59 	req->_present.port = 1;
60 	req->port = port;
61 }
62 static inline void
63 fou_add_req_set_ipproto(struct fou_add_req *req, __u8 ipproto)
64 {
65 	req->_present.ipproto = 1;
66 	req->ipproto = ipproto;
67 }
68 static inline void fou_add_req_set_type(struct fou_add_req *req, __u8 type)
69 {
70 	req->_present.type = 1;
71 	req->type = type;
72 }
73 static inline void fou_add_req_set_remcsum_nopartial(struct fou_add_req *req)
74 {
75 	req->_present.remcsum_nopartial = 1;
76 }
77 static inline void
78 fou_add_req_set_local_v4(struct fou_add_req *req, __u32 local_v4)
79 {
80 	req->_present.local_v4 = 1;
81 	req->local_v4 = local_v4;
82 }
83 static inline void
84 fou_add_req_set_peer_v4(struct fou_add_req *req, __u32 peer_v4)
85 {
86 	req->_present.peer_v4 = 1;
87 	req->peer_v4 = peer_v4;
88 }
89 static inline void
90 fou_add_req_set_local_v6(struct fou_add_req *req, const void *local_v6,
91 			 size_t len)
92 {
93 	free(req->local_v6);
94 	req->local_v6 = malloc(req->_present.local_v6_len);
95 	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
96 }
97 static inline void
98 fou_add_req_set_peer_v6(struct fou_add_req *req, const void *peer_v6,
99 			size_t len)
100 {
101 	free(req->peer_v6);
102 	req->peer_v6 = malloc(req->_present.peer_v6_len);
103 	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
104 }
105 static inline void
106 fou_add_req_set_peer_port(struct fou_add_req *req,
107 			  __u16 peer_port /* big-endian */)
108 {
109 	req->_present.peer_port = 1;
110 	req->peer_port = peer_port;
111 }
112 static inline void
113 fou_add_req_set_ifindex(struct fou_add_req *req, __s32 ifindex)
114 {
115 	req->_present.ifindex = 1;
116 	req->ifindex = ifindex;
117 }
118 
119 /*
120  * Add port.
121  */
122 int fou_add(struct ynl_sock *ys, struct fou_add_req *req);
123 
124 /* ============== FOU_CMD_DEL ============== */
125 /* FOU_CMD_DEL - do */
126 struct fou_del_req {
127 	struct {
128 		__u32 af:1;
129 		__u32 ifindex:1;
130 		__u32 port:1;
131 		__u32 peer_port:1;
132 		__u32 local_v4:1;
133 		__u32 peer_v4:1;
134 		__u32 local_v6_len;
135 		__u32 peer_v6_len;
136 	} _present;
137 
138 	__u8 af;
139 	__s32 ifindex;
140 	__u16 port /* big-endian */;
141 	__u16 peer_port /* big-endian */;
142 	__u32 local_v4;
143 	__u32 peer_v4;
144 	void *local_v6;
145 	void *peer_v6;
146 };
147 
148 static inline struct fou_del_req *fou_del_req_alloc(void)
149 {
150 	return calloc(1, sizeof(struct fou_del_req));
151 }
152 void fou_del_req_free(struct fou_del_req *req);
153 
154 static inline void fou_del_req_set_af(struct fou_del_req *req, __u8 af)
155 {
156 	req->_present.af = 1;
157 	req->af = af;
158 }
159 static inline void
160 fou_del_req_set_ifindex(struct fou_del_req *req, __s32 ifindex)
161 {
162 	req->_present.ifindex = 1;
163 	req->ifindex = ifindex;
164 }
165 static inline void
166 fou_del_req_set_port(struct fou_del_req *req, __u16 port /* big-endian */)
167 {
168 	req->_present.port = 1;
169 	req->port = port;
170 }
171 static inline void
172 fou_del_req_set_peer_port(struct fou_del_req *req,
173 			  __u16 peer_port /* big-endian */)
174 {
175 	req->_present.peer_port = 1;
176 	req->peer_port = peer_port;
177 }
178 static inline void
179 fou_del_req_set_local_v4(struct fou_del_req *req, __u32 local_v4)
180 {
181 	req->_present.local_v4 = 1;
182 	req->local_v4 = local_v4;
183 }
184 static inline void
185 fou_del_req_set_peer_v4(struct fou_del_req *req, __u32 peer_v4)
186 {
187 	req->_present.peer_v4 = 1;
188 	req->peer_v4 = peer_v4;
189 }
190 static inline void
191 fou_del_req_set_local_v6(struct fou_del_req *req, const void *local_v6,
192 			 size_t len)
193 {
194 	free(req->local_v6);
195 	req->local_v6 = malloc(req->_present.local_v6_len);
196 	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
197 }
198 static inline void
199 fou_del_req_set_peer_v6(struct fou_del_req *req, const void *peer_v6,
200 			size_t len)
201 {
202 	free(req->peer_v6);
203 	req->peer_v6 = malloc(req->_present.peer_v6_len);
204 	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
205 }
206 
207 /*
208  * Delete port.
209  */
210 int fou_del(struct ynl_sock *ys, struct fou_del_req *req);
211 
212 /* ============== FOU_CMD_GET ============== */
213 /* FOU_CMD_GET - do */
214 struct fou_get_req {
215 	struct {
216 		__u32 af:1;
217 		__u32 ifindex:1;
218 		__u32 port:1;
219 		__u32 peer_port:1;
220 		__u32 local_v4:1;
221 		__u32 peer_v4:1;
222 		__u32 local_v6_len;
223 		__u32 peer_v6_len;
224 	} _present;
225 
226 	__u8 af;
227 	__s32 ifindex;
228 	__u16 port /* big-endian */;
229 	__u16 peer_port /* big-endian */;
230 	__u32 local_v4;
231 	__u32 peer_v4;
232 	void *local_v6;
233 	void *peer_v6;
234 };
235 
236 static inline struct fou_get_req *fou_get_req_alloc(void)
237 {
238 	return calloc(1, sizeof(struct fou_get_req));
239 }
240 void fou_get_req_free(struct fou_get_req *req);
241 
242 static inline void fou_get_req_set_af(struct fou_get_req *req, __u8 af)
243 {
244 	req->_present.af = 1;
245 	req->af = af;
246 }
247 static inline void
248 fou_get_req_set_ifindex(struct fou_get_req *req, __s32 ifindex)
249 {
250 	req->_present.ifindex = 1;
251 	req->ifindex = ifindex;
252 }
253 static inline void
254 fou_get_req_set_port(struct fou_get_req *req, __u16 port /* big-endian */)
255 {
256 	req->_present.port = 1;
257 	req->port = port;
258 }
259 static inline void
260 fou_get_req_set_peer_port(struct fou_get_req *req,
261 			  __u16 peer_port /* big-endian */)
262 {
263 	req->_present.peer_port = 1;
264 	req->peer_port = peer_port;
265 }
266 static inline void
267 fou_get_req_set_local_v4(struct fou_get_req *req, __u32 local_v4)
268 {
269 	req->_present.local_v4 = 1;
270 	req->local_v4 = local_v4;
271 }
272 static inline void
273 fou_get_req_set_peer_v4(struct fou_get_req *req, __u32 peer_v4)
274 {
275 	req->_present.peer_v4 = 1;
276 	req->peer_v4 = peer_v4;
277 }
278 static inline void
279 fou_get_req_set_local_v6(struct fou_get_req *req, const void *local_v6,
280 			 size_t len)
281 {
282 	free(req->local_v6);
283 	req->local_v6 = malloc(req->_present.local_v6_len);
284 	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
285 }
286 static inline void
287 fou_get_req_set_peer_v6(struct fou_get_req *req, const void *peer_v6,
288 			size_t len)
289 {
290 	free(req->peer_v6);
291 	req->peer_v6 = malloc(req->_present.peer_v6_len);
292 	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
293 }
294 
295 struct fou_get_rsp {
296 	struct {
297 		__u32 port:1;
298 		__u32 ipproto:1;
299 		__u32 type:1;
300 		__u32 remcsum_nopartial:1;
301 		__u32 local_v4:1;
302 		__u32 peer_v4:1;
303 		__u32 local_v6_len;
304 		__u32 peer_v6_len;
305 		__u32 peer_port:1;
306 		__u32 ifindex:1;
307 	} _present;
308 
309 	__u16 port /* big-endian */;
310 	__u8 ipproto;
311 	__u8 type;
312 	__u32 local_v4;
313 	__u32 peer_v4;
314 	void *local_v6;
315 	void *peer_v6;
316 	__u16 peer_port /* big-endian */;
317 	__s32 ifindex;
318 };
319 
320 void fou_get_rsp_free(struct fou_get_rsp *rsp);
321 
322 /*
323  * Get tunnel info.
324  */
325 struct fou_get_rsp *fou_get(struct ynl_sock *ys, struct fou_get_req *req);
326 
327 /* FOU_CMD_GET - dump */
328 struct fou_get_list {
329 	struct fou_get_list *next;
330 	struct fou_get_rsp obj __attribute__ ((aligned (8)));
331 };
332 
333 void fou_get_list_free(struct fou_get_list *rsp);
334 
335 struct fou_get_list *fou_get_dump(struct ynl_sock *ys);
336 
337 #endif /* _LINUX_FOU_GEN_H */
338