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 14struct ynl_sock; 15 16extern const struct ynl_family ynl_fou_family; 17 18/* Enums */ 19const char *fou_op_str(int op); 20const char *fou_encap_type_str(int value); 21 22/* Common nested types */ 23/* ============== FOU_CMD_ADD ============== */ 24/* FOU_CMD_ADD - do */ 25struct 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 50static inline struct fou_add_req *fou_add_req_alloc(void) 51{ 52 return calloc(1, sizeof(struct fou_add_req)); 53} 54void fou_add_req_free(struct fou_add_req *req); 55 56static inline void 57fou_add_req_set_port(struct fou_add_req *req, __u16 port /* big-endian */) 58{ 59 req->_present.port = 1; 60 req->port = port; 61} 62static inline void 63fou_add_req_set_ipproto(struct fou_add_req *req, __u8 ipproto) 64{ 65 req->_present.ipproto = 1; 66 req->ipproto = ipproto; 67} 68static 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} 73static inline void fou_add_req_set_remcsum_nopartial(struct fou_add_req *req) 74{ 75 req->_present.remcsum_nopartial = 1; 76} 77static inline void 78fou_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} 83static inline void 84fou_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} 89static inline void 90fou_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->_present.local_v6_len = len; 95 req->local_v6 = malloc(req->_present.local_v6_len); 96 memcpy(req->local_v6, local_v6, req->_present.local_v6_len); 97} 98static inline void 99fou_add_req_set_peer_v6(struct fou_add_req *req, const void *peer_v6, 100 size_t len) 101{ 102 free(req->peer_v6); 103 req->_present.peer_v6_len = len; 104 req->peer_v6 = malloc(req->_present.peer_v6_len); 105 memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len); 106} 107static inline void 108fou_add_req_set_peer_port(struct fou_add_req *req, 109 __u16 peer_port /* big-endian */) 110{ 111 req->_present.peer_port = 1; 112 req->peer_port = peer_port; 113} 114static inline void 115fou_add_req_set_ifindex(struct fou_add_req *req, __s32 ifindex) 116{ 117 req->_present.ifindex = 1; 118 req->ifindex = ifindex; 119} 120 121/* 122 * Add port. 123 */ 124int fou_add(struct ynl_sock *ys, struct fou_add_req *req); 125 126/* ============== FOU_CMD_DEL ============== */ 127/* FOU_CMD_DEL - do */ 128struct fou_del_req { 129 struct { 130 __u32 af:1; 131 __u32 ifindex:1; 132 __u32 port:1; 133 __u32 peer_port:1; 134 __u32 local_v4:1; 135 __u32 peer_v4:1; 136 __u32 local_v6_len; 137 __u32 peer_v6_len; 138 } _present; 139 140 __u8 af; 141 __s32 ifindex; 142 __u16 port /* big-endian */; 143 __u16 peer_port /* big-endian */; 144 __u32 local_v4; 145 __u32 peer_v4; 146 void *local_v6; 147 void *peer_v6; 148}; 149 150static inline struct fou_del_req *fou_del_req_alloc(void) 151{ 152 return calloc(1, sizeof(struct fou_del_req)); 153} 154void fou_del_req_free(struct fou_del_req *req); 155 156static inline void fou_del_req_set_af(struct fou_del_req *req, __u8 af) 157{ 158 req->_present.af = 1; 159 req->af = af; 160} 161static inline void 162fou_del_req_set_ifindex(struct fou_del_req *req, __s32 ifindex) 163{ 164 req->_present.ifindex = 1; 165 req->ifindex = ifindex; 166} 167static inline void 168fou_del_req_set_port(struct fou_del_req *req, __u16 port /* big-endian */) 169{ 170 req->_present.port = 1; 171 req->port = port; 172} 173static inline void 174fou_del_req_set_peer_port(struct fou_del_req *req, 175 __u16 peer_port /* big-endian */) 176{ 177 req->_present.peer_port = 1; 178 req->peer_port = peer_port; 179} 180static inline void 181fou_del_req_set_local_v4(struct fou_del_req *req, __u32 local_v4) 182{ 183 req->_present.local_v4 = 1; 184 req->local_v4 = local_v4; 185} 186static inline void 187fou_del_req_set_peer_v4(struct fou_del_req *req, __u32 peer_v4) 188{ 189 req->_present.peer_v4 = 1; 190 req->peer_v4 = peer_v4; 191} 192static inline void 193fou_del_req_set_local_v6(struct fou_del_req *req, const void *local_v6, 194 size_t len) 195{ 196 free(req->local_v6); 197 req->_present.local_v6_len = len; 198 req->local_v6 = malloc(req->_present.local_v6_len); 199 memcpy(req->local_v6, local_v6, req->_present.local_v6_len); 200} 201static inline void 202fou_del_req_set_peer_v6(struct fou_del_req *req, const void *peer_v6, 203 size_t len) 204{ 205 free(req->peer_v6); 206 req->_present.peer_v6_len = len; 207 req->peer_v6 = malloc(req->_present.peer_v6_len); 208 memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len); 209} 210 211/* 212 * Delete port. 213 */ 214int fou_del(struct ynl_sock *ys, struct fou_del_req *req); 215 216/* ============== FOU_CMD_GET ============== */ 217/* FOU_CMD_GET - do */ 218struct fou_get_req { 219 struct { 220 __u32 af:1; 221 __u32 ifindex:1; 222 __u32 port:1; 223 __u32 peer_port:1; 224 __u32 local_v4:1; 225 __u32 peer_v4:1; 226 __u32 local_v6_len; 227 __u32 peer_v6_len; 228 } _present; 229 230 __u8 af; 231 __s32 ifindex; 232 __u16 port /* big-endian */; 233 __u16 peer_port /* big-endian */; 234 __u32 local_v4; 235 __u32 peer_v4; 236 void *local_v6; 237 void *peer_v6; 238}; 239 240static inline struct fou_get_req *fou_get_req_alloc(void) 241{ 242 return calloc(1, sizeof(struct fou_get_req)); 243} 244void fou_get_req_free(struct fou_get_req *req); 245 246static inline void fou_get_req_set_af(struct fou_get_req *req, __u8 af) 247{ 248 req->_present.af = 1; 249 req->af = af; 250} 251static inline void 252fou_get_req_set_ifindex(struct fou_get_req *req, __s32 ifindex) 253{ 254 req->_present.ifindex = 1; 255 req->ifindex = ifindex; 256} 257static inline void 258fou_get_req_set_port(struct fou_get_req *req, __u16 port /* big-endian */) 259{ 260 req->_present.port = 1; 261 req->port = port; 262} 263static inline void 264fou_get_req_set_peer_port(struct fou_get_req *req, 265 __u16 peer_port /* big-endian */) 266{ 267 req->_present.peer_port = 1; 268 req->peer_port = peer_port; 269} 270static inline void 271fou_get_req_set_local_v4(struct fou_get_req *req, __u32 local_v4) 272{ 273 req->_present.local_v4 = 1; 274 req->local_v4 = local_v4; 275} 276static inline void 277fou_get_req_set_peer_v4(struct fou_get_req *req, __u32 peer_v4) 278{ 279 req->_present.peer_v4 = 1; 280 req->peer_v4 = peer_v4; 281} 282static inline void 283fou_get_req_set_local_v6(struct fou_get_req *req, const void *local_v6, 284 size_t len) 285{ 286 free(req->local_v6); 287 req->_present.local_v6_len = len; 288 req->local_v6 = malloc(req->_present.local_v6_len); 289 memcpy(req->local_v6, local_v6, req->_present.local_v6_len); 290} 291static inline void 292fou_get_req_set_peer_v6(struct fou_get_req *req, const void *peer_v6, 293 size_t len) 294{ 295 free(req->peer_v6); 296 req->_present.peer_v6_len = len; 297 req->peer_v6 = malloc(req->_present.peer_v6_len); 298 memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len); 299} 300 301struct fou_get_rsp { 302 struct { 303 __u32 port:1; 304 __u32 ipproto:1; 305 __u32 type:1; 306 __u32 remcsum_nopartial:1; 307 __u32 local_v4:1; 308 __u32 peer_v4:1; 309 __u32 local_v6_len; 310 __u32 peer_v6_len; 311 __u32 peer_port:1; 312 __u32 ifindex:1; 313 } _present; 314 315 __u16 port /* big-endian */; 316 __u8 ipproto; 317 __u8 type; 318 __u32 local_v4; 319 __u32 peer_v4; 320 void *local_v6; 321 void *peer_v6; 322 __u16 peer_port /* big-endian */; 323 __s32 ifindex; 324}; 325 326void fou_get_rsp_free(struct fou_get_rsp *rsp); 327 328/* 329 * Get tunnel info. 330 */ 331struct fou_get_rsp *fou_get(struct ynl_sock *ys, struct fou_get_req *req); 332 333/* FOU_CMD_GET - dump */ 334struct fou_get_list { 335 struct fou_get_list *next; 336 struct fou_get_rsp obj __attribute__ ((aligned (8))); 337}; 338 339void fou_get_list_free(struct fou_get_list *rsp); 340 341struct fou_get_list *fou_get_dump(struct ynl_sock *ys); 342 343#endif /* _LINUX_FOU_GEN_H */ 344