162306a36Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
262306a36Sopenharmony_ci/* Do not edit directly, auto-generated from: */
362306a36Sopenharmony_ci/*	Documentation/netlink/specs/fou.yaml */
462306a36Sopenharmony_ci/* YNL-GEN user header */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _LINUX_FOU_GEN_H
762306a36Sopenharmony_ci#define _LINUX_FOU_GEN_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <stdlib.h>
1062306a36Sopenharmony_ci#include <string.h>
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci#include <linux/fou.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct ynl_sock;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciextern const struct ynl_family ynl_fou_family;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* Enums */
1962306a36Sopenharmony_ciconst char *fou_op_str(int op);
2062306a36Sopenharmony_ciconst char *fou_encap_type_str(int value);
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* Common nested types */
2362306a36Sopenharmony_ci/* ============== FOU_CMD_ADD ============== */
2462306a36Sopenharmony_ci/* FOU_CMD_ADD - do */
2562306a36Sopenharmony_cistruct fou_add_req {
2662306a36Sopenharmony_ci	struct {
2762306a36Sopenharmony_ci		__u32 port:1;
2862306a36Sopenharmony_ci		__u32 ipproto:1;
2962306a36Sopenharmony_ci		__u32 type:1;
3062306a36Sopenharmony_ci		__u32 remcsum_nopartial:1;
3162306a36Sopenharmony_ci		__u32 local_v4:1;
3262306a36Sopenharmony_ci		__u32 peer_v4:1;
3362306a36Sopenharmony_ci		__u32 local_v6_len;
3462306a36Sopenharmony_ci		__u32 peer_v6_len;
3562306a36Sopenharmony_ci		__u32 peer_port:1;
3662306a36Sopenharmony_ci		__u32 ifindex:1;
3762306a36Sopenharmony_ci	} _present;
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	__u16 port /* big-endian */;
4062306a36Sopenharmony_ci	__u8 ipproto;
4162306a36Sopenharmony_ci	__u8 type;
4262306a36Sopenharmony_ci	__u32 local_v4;
4362306a36Sopenharmony_ci	__u32 peer_v4;
4462306a36Sopenharmony_ci	void *local_v6;
4562306a36Sopenharmony_ci	void *peer_v6;
4662306a36Sopenharmony_ci	__u16 peer_port /* big-endian */;
4762306a36Sopenharmony_ci	__s32 ifindex;
4862306a36Sopenharmony_ci};
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cistatic inline struct fou_add_req *fou_add_req_alloc(void)
5162306a36Sopenharmony_ci{
5262306a36Sopenharmony_ci	return calloc(1, sizeof(struct fou_add_req));
5362306a36Sopenharmony_ci}
5462306a36Sopenharmony_civoid fou_add_req_free(struct fou_add_req *req);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistatic inline void
5762306a36Sopenharmony_cifou_add_req_set_port(struct fou_add_req *req, __u16 port /* big-endian */)
5862306a36Sopenharmony_ci{
5962306a36Sopenharmony_ci	req->_present.port = 1;
6062306a36Sopenharmony_ci	req->port = port;
6162306a36Sopenharmony_ci}
6262306a36Sopenharmony_cistatic inline void
6362306a36Sopenharmony_cifou_add_req_set_ipproto(struct fou_add_req *req, __u8 ipproto)
6462306a36Sopenharmony_ci{
6562306a36Sopenharmony_ci	req->_present.ipproto = 1;
6662306a36Sopenharmony_ci	req->ipproto = ipproto;
6762306a36Sopenharmony_ci}
6862306a36Sopenharmony_cistatic inline void fou_add_req_set_type(struct fou_add_req *req, __u8 type)
6962306a36Sopenharmony_ci{
7062306a36Sopenharmony_ci	req->_present.type = 1;
7162306a36Sopenharmony_ci	req->type = type;
7262306a36Sopenharmony_ci}
7362306a36Sopenharmony_cistatic inline void fou_add_req_set_remcsum_nopartial(struct fou_add_req *req)
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	req->_present.remcsum_nopartial = 1;
7662306a36Sopenharmony_ci}
7762306a36Sopenharmony_cistatic inline void
7862306a36Sopenharmony_cifou_add_req_set_local_v4(struct fou_add_req *req, __u32 local_v4)
7962306a36Sopenharmony_ci{
8062306a36Sopenharmony_ci	req->_present.local_v4 = 1;
8162306a36Sopenharmony_ci	req->local_v4 = local_v4;
8262306a36Sopenharmony_ci}
8362306a36Sopenharmony_cistatic inline void
8462306a36Sopenharmony_cifou_add_req_set_peer_v4(struct fou_add_req *req, __u32 peer_v4)
8562306a36Sopenharmony_ci{
8662306a36Sopenharmony_ci	req->_present.peer_v4 = 1;
8762306a36Sopenharmony_ci	req->peer_v4 = peer_v4;
8862306a36Sopenharmony_ci}
8962306a36Sopenharmony_cistatic inline void
9062306a36Sopenharmony_cifou_add_req_set_local_v6(struct fou_add_req *req, const void *local_v6,
9162306a36Sopenharmony_ci			 size_t len)
9262306a36Sopenharmony_ci{
9362306a36Sopenharmony_ci	free(req->local_v6);
9462306a36Sopenharmony_ci	req->_present.local_v6_len = len;
9562306a36Sopenharmony_ci	req->local_v6 = malloc(req->_present.local_v6_len);
9662306a36Sopenharmony_ci	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
9762306a36Sopenharmony_ci}
9862306a36Sopenharmony_cistatic inline void
9962306a36Sopenharmony_cifou_add_req_set_peer_v6(struct fou_add_req *req, const void *peer_v6,
10062306a36Sopenharmony_ci			size_t len)
10162306a36Sopenharmony_ci{
10262306a36Sopenharmony_ci	free(req->peer_v6);
10362306a36Sopenharmony_ci	req->_present.peer_v6_len = len;
10462306a36Sopenharmony_ci	req->peer_v6 = malloc(req->_present.peer_v6_len);
10562306a36Sopenharmony_ci	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
10662306a36Sopenharmony_ci}
10762306a36Sopenharmony_cistatic inline void
10862306a36Sopenharmony_cifou_add_req_set_peer_port(struct fou_add_req *req,
10962306a36Sopenharmony_ci			  __u16 peer_port /* big-endian */)
11062306a36Sopenharmony_ci{
11162306a36Sopenharmony_ci	req->_present.peer_port = 1;
11262306a36Sopenharmony_ci	req->peer_port = peer_port;
11362306a36Sopenharmony_ci}
11462306a36Sopenharmony_cistatic inline void
11562306a36Sopenharmony_cifou_add_req_set_ifindex(struct fou_add_req *req, __s32 ifindex)
11662306a36Sopenharmony_ci{
11762306a36Sopenharmony_ci	req->_present.ifindex = 1;
11862306a36Sopenharmony_ci	req->ifindex = ifindex;
11962306a36Sopenharmony_ci}
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci/*
12262306a36Sopenharmony_ci * Add port.
12362306a36Sopenharmony_ci */
12462306a36Sopenharmony_ciint fou_add(struct ynl_sock *ys, struct fou_add_req *req);
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci/* ============== FOU_CMD_DEL ============== */
12762306a36Sopenharmony_ci/* FOU_CMD_DEL - do */
12862306a36Sopenharmony_cistruct fou_del_req {
12962306a36Sopenharmony_ci	struct {
13062306a36Sopenharmony_ci		__u32 af:1;
13162306a36Sopenharmony_ci		__u32 ifindex:1;
13262306a36Sopenharmony_ci		__u32 port:1;
13362306a36Sopenharmony_ci		__u32 peer_port:1;
13462306a36Sopenharmony_ci		__u32 local_v4:1;
13562306a36Sopenharmony_ci		__u32 peer_v4:1;
13662306a36Sopenharmony_ci		__u32 local_v6_len;
13762306a36Sopenharmony_ci		__u32 peer_v6_len;
13862306a36Sopenharmony_ci	} _present;
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci	__u8 af;
14162306a36Sopenharmony_ci	__s32 ifindex;
14262306a36Sopenharmony_ci	__u16 port /* big-endian */;
14362306a36Sopenharmony_ci	__u16 peer_port /* big-endian */;
14462306a36Sopenharmony_ci	__u32 local_v4;
14562306a36Sopenharmony_ci	__u32 peer_v4;
14662306a36Sopenharmony_ci	void *local_v6;
14762306a36Sopenharmony_ci	void *peer_v6;
14862306a36Sopenharmony_ci};
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_cistatic inline struct fou_del_req *fou_del_req_alloc(void)
15162306a36Sopenharmony_ci{
15262306a36Sopenharmony_ci	return calloc(1, sizeof(struct fou_del_req));
15362306a36Sopenharmony_ci}
15462306a36Sopenharmony_civoid fou_del_req_free(struct fou_del_req *req);
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_cistatic inline void fou_del_req_set_af(struct fou_del_req *req, __u8 af)
15762306a36Sopenharmony_ci{
15862306a36Sopenharmony_ci	req->_present.af = 1;
15962306a36Sopenharmony_ci	req->af = af;
16062306a36Sopenharmony_ci}
16162306a36Sopenharmony_cistatic inline void
16262306a36Sopenharmony_cifou_del_req_set_ifindex(struct fou_del_req *req, __s32 ifindex)
16362306a36Sopenharmony_ci{
16462306a36Sopenharmony_ci	req->_present.ifindex = 1;
16562306a36Sopenharmony_ci	req->ifindex = ifindex;
16662306a36Sopenharmony_ci}
16762306a36Sopenharmony_cistatic inline void
16862306a36Sopenharmony_cifou_del_req_set_port(struct fou_del_req *req, __u16 port /* big-endian */)
16962306a36Sopenharmony_ci{
17062306a36Sopenharmony_ci	req->_present.port = 1;
17162306a36Sopenharmony_ci	req->port = port;
17262306a36Sopenharmony_ci}
17362306a36Sopenharmony_cistatic inline void
17462306a36Sopenharmony_cifou_del_req_set_peer_port(struct fou_del_req *req,
17562306a36Sopenharmony_ci			  __u16 peer_port /* big-endian */)
17662306a36Sopenharmony_ci{
17762306a36Sopenharmony_ci	req->_present.peer_port = 1;
17862306a36Sopenharmony_ci	req->peer_port = peer_port;
17962306a36Sopenharmony_ci}
18062306a36Sopenharmony_cistatic inline void
18162306a36Sopenharmony_cifou_del_req_set_local_v4(struct fou_del_req *req, __u32 local_v4)
18262306a36Sopenharmony_ci{
18362306a36Sopenharmony_ci	req->_present.local_v4 = 1;
18462306a36Sopenharmony_ci	req->local_v4 = local_v4;
18562306a36Sopenharmony_ci}
18662306a36Sopenharmony_cistatic inline void
18762306a36Sopenharmony_cifou_del_req_set_peer_v4(struct fou_del_req *req, __u32 peer_v4)
18862306a36Sopenharmony_ci{
18962306a36Sopenharmony_ci	req->_present.peer_v4 = 1;
19062306a36Sopenharmony_ci	req->peer_v4 = peer_v4;
19162306a36Sopenharmony_ci}
19262306a36Sopenharmony_cistatic inline void
19362306a36Sopenharmony_cifou_del_req_set_local_v6(struct fou_del_req *req, const void *local_v6,
19462306a36Sopenharmony_ci			 size_t len)
19562306a36Sopenharmony_ci{
19662306a36Sopenharmony_ci	free(req->local_v6);
19762306a36Sopenharmony_ci	req->_present.local_v6_len = len;
19862306a36Sopenharmony_ci	req->local_v6 = malloc(req->_present.local_v6_len);
19962306a36Sopenharmony_ci	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
20062306a36Sopenharmony_ci}
20162306a36Sopenharmony_cistatic inline void
20262306a36Sopenharmony_cifou_del_req_set_peer_v6(struct fou_del_req *req, const void *peer_v6,
20362306a36Sopenharmony_ci			size_t len)
20462306a36Sopenharmony_ci{
20562306a36Sopenharmony_ci	free(req->peer_v6);
20662306a36Sopenharmony_ci	req->_present.peer_v6_len = len;
20762306a36Sopenharmony_ci	req->peer_v6 = malloc(req->_present.peer_v6_len);
20862306a36Sopenharmony_ci	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
20962306a36Sopenharmony_ci}
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci/*
21262306a36Sopenharmony_ci * Delete port.
21362306a36Sopenharmony_ci */
21462306a36Sopenharmony_ciint fou_del(struct ynl_sock *ys, struct fou_del_req *req);
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci/* ============== FOU_CMD_GET ============== */
21762306a36Sopenharmony_ci/* FOU_CMD_GET - do */
21862306a36Sopenharmony_cistruct fou_get_req {
21962306a36Sopenharmony_ci	struct {
22062306a36Sopenharmony_ci		__u32 af:1;
22162306a36Sopenharmony_ci		__u32 ifindex:1;
22262306a36Sopenharmony_ci		__u32 port:1;
22362306a36Sopenharmony_ci		__u32 peer_port:1;
22462306a36Sopenharmony_ci		__u32 local_v4:1;
22562306a36Sopenharmony_ci		__u32 peer_v4:1;
22662306a36Sopenharmony_ci		__u32 local_v6_len;
22762306a36Sopenharmony_ci		__u32 peer_v6_len;
22862306a36Sopenharmony_ci	} _present;
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci	__u8 af;
23162306a36Sopenharmony_ci	__s32 ifindex;
23262306a36Sopenharmony_ci	__u16 port /* big-endian */;
23362306a36Sopenharmony_ci	__u16 peer_port /* big-endian */;
23462306a36Sopenharmony_ci	__u32 local_v4;
23562306a36Sopenharmony_ci	__u32 peer_v4;
23662306a36Sopenharmony_ci	void *local_v6;
23762306a36Sopenharmony_ci	void *peer_v6;
23862306a36Sopenharmony_ci};
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_cistatic inline struct fou_get_req *fou_get_req_alloc(void)
24162306a36Sopenharmony_ci{
24262306a36Sopenharmony_ci	return calloc(1, sizeof(struct fou_get_req));
24362306a36Sopenharmony_ci}
24462306a36Sopenharmony_civoid fou_get_req_free(struct fou_get_req *req);
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_cistatic inline void fou_get_req_set_af(struct fou_get_req *req, __u8 af)
24762306a36Sopenharmony_ci{
24862306a36Sopenharmony_ci	req->_present.af = 1;
24962306a36Sopenharmony_ci	req->af = af;
25062306a36Sopenharmony_ci}
25162306a36Sopenharmony_cistatic inline void
25262306a36Sopenharmony_cifou_get_req_set_ifindex(struct fou_get_req *req, __s32 ifindex)
25362306a36Sopenharmony_ci{
25462306a36Sopenharmony_ci	req->_present.ifindex = 1;
25562306a36Sopenharmony_ci	req->ifindex = ifindex;
25662306a36Sopenharmony_ci}
25762306a36Sopenharmony_cistatic inline void
25862306a36Sopenharmony_cifou_get_req_set_port(struct fou_get_req *req, __u16 port /* big-endian */)
25962306a36Sopenharmony_ci{
26062306a36Sopenharmony_ci	req->_present.port = 1;
26162306a36Sopenharmony_ci	req->port = port;
26262306a36Sopenharmony_ci}
26362306a36Sopenharmony_cistatic inline void
26462306a36Sopenharmony_cifou_get_req_set_peer_port(struct fou_get_req *req,
26562306a36Sopenharmony_ci			  __u16 peer_port /* big-endian */)
26662306a36Sopenharmony_ci{
26762306a36Sopenharmony_ci	req->_present.peer_port = 1;
26862306a36Sopenharmony_ci	req->peer_port = peer_port;
26962306a36Sopenharmony_ci}
27062306a36Sopenharmony_cistatic inline void
27162306a36Sopenharmony_cifou_get_req_set_local_v4(struct fou_get_req *req, __u32 local_v4)
27262306a36Sopenharmony_ci{
27362306a36Sopenharmony_ci	req->_present.local_v4 = 1;
27462306a36Sopenharmony_ci	req->local_v4 = local_v4;
27562306a36Sopenharmony_ci}
27662306a36Sopenharmony_cistatic inline void
27762306a36Sopenharmony_cifou_get_req_set_peer_v4(struct fou_get_req *req, __u32 peer_v4)
27862306a36Sopenharmony_ci{
27962306a36Sopenharmony_ci	req->_present.peer_v4 = 1;
28062306a36Sopenharmony_ci	req->peer_v4 = peer_v4;
28162306a36Sopenharmony_ci}
28262306a36Sopenharmony_cistatic inline void
28362306a36Sopenharmony_cifou_get_req_set_local_v6(struct fou_get_req *req, const void *local_v6,
28462306a36Sopenharmony_ci			 size_t len)
28562306a36Sopenharmony_ci{
28662306a36Sopenharmony_ci	free(req->local_v6);
28762306a36Sopenharmony_ci	req->_present.local_v6_len = len;
28862306a36Sopenharmony_ci	req->local_v6 = malloc(req->_present.local_v6_len);
28962306a36Sopenharmony_ci	memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
29062306a36Sopenharmony_ci}
29162306a36Sopenharmony_cistatic inline void
29262306a36Sopenharmony_cifou_get_req_set_peer_v6(struct fou_get_req *req, const void *peer_v6,
29362306a36Sopenharmony_ci			size_t len)
29462306a36Sopenharmony_ci{
29562306a36Sopenharmony_ci	free(req->peer_v6);
29662306a36Sopenharmony_ci	req->_present.peer_v6_len = len;
29762306a36Sopenharmony_ci	req->peer_v6 = malloc(req->_present.peer_v6_len);
29862306a36Sopenharmony_ci	memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
29962306a36Sopenharmony_ci}
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_cistruct fou_get_rsp {
30262306a36Sopenharmony_ci	struct {
30362306a36Sopenharmony_ci		__u32 port:1;
30462306a36Sopenharmony_ci		__u32 ipproto:1;
30562306a36Sopenharmony_ci		__u32 type:1;
30662306a36Sopenharmony_ci		__u32 remcsum_nopartial:1;
30762306a36Sopenharmony_ci		__u32 local_v4:1;
30862306a36Sopenharmony_ci		__u32 peer_v4:1;
30962306a36Sopenharmony_ci		__u32 local_v6_len;
31062306a36Sopenharmony_ci		__u32 peer_v6_len;
31162306a36Sopenharmony_ci		__u32 peer_port:1;
31262306a36Sopenharmony_ci		__u32 ifindex:1;
31362306a36Sopenharmony_ci	} _present;
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci	__u16 port /* big-endian */;
31662306a36Sopenharmony_ci	__u8 ipproto;
31762306a36Sopenharmony_ci	__u8 type;
31862306a36Sopenharmony_ci	__u32 local_v4;
31962306a36Sopenharmony_ci	__u32 peer_v4;
32062306a36Sopenharmony_ci	void *local_v6;
32162306a36Sopenharmony_ci	void *peer_v6;
32262306a36Sopenharmony_ci	__u16 peer_port /* big-endian */;
32362306a36Sopenharmony_ci	__s32 ifindex;
32462306a36Sopenharmony_ci};
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_civoid fou_get_rsp_free(struct fou_get_rsp *rsp);
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci/*
32962306a36Sopenharmony_ci * Get tunnel info.
33062306a36Sopenharmony_ci */
33162306a36Sopenharmony_cistruct fou_get_rsp *fou_get(struct ynl_sock *ys, struct fou_get_req *req);
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci/* FOU_CMD_GET - dump */
33462306a36Sopenharmony_cistruct fou_get_list {
33562306a36Sopenharmony_ci	struct fou_get_list *next;
33662306a36Sopenharmony_ci	struct fou_get_rsp obj __attribute__ ((aligned (8)));
33762306a36Sopenharmony_ci};
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_civoid fou_get_list_free(struct fou_get_list *rsp);
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_cistruct fou_get_list *fou_get_dump(struct ynl_sock *ys);
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci#endif /* _LINUX_FOU_GEN_H */
344