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