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->_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 } 98 static inline void 99 fou_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 } 107 static inline void 108 fou_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 } 114 static inline void 115 fou_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 */ 124 int fou_add(struct ynl_sock *ys, struct fou_add_req *req); 125 126 /* ============== FOU_CMD_DEL ============== */ 127 /* FOU_CMD_DEL - do */ 128 struct 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 150 static inline struct fou_del_req *fou_del_req_alloc(void) 151 { 152 return calloc(1, sizeof(struct fou_del_req)); 153 } 154 void fou_del_req_free(struct fou_del_req *req); 155 156 static 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 } 161 static inline void 162 fou_del_req_set_ifindex(struct fou_del_req *req, __s32 ifindex) 163 { 164 req->_present.ifindex = 1; 165 req->ifindex = ifindex; 166 } 167 static inline void 168 fou_del_req_set_port(struct fou_del_req *req, __u16 port /* big-endian */) 169 { 170 req->_present.port = 1; 171 req->port = port; 172 } 173 static inline void 174 fou_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 } 180 static inline void 181 fou_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 } 186 static inline void 187 fou_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 } 192 static inline void 193 fou_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 } 201 static inline void 202 fou_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 */ 214 int fou_del(struct ynl_sock *ys, struct fou_del_req *req); 215 216 /* ============== FOU_CMD_GET ============== */ 217 /* FOU_CMD_GET - do */ 218 struct 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 240 static inline struct fou_get_req *fou_get_req_alloc(void) 241 { 242 return calloc(1, sizeof(struct fou_get_req)); 243 } 244 void fou_get_req_free(struct fou_get_req *req); 245 246 static 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 } 251 static inline void 252 fou_get_req_set_ifindex(struct fou_get_req *req, __s32 ifindex) 253 { 254 req->_present.ifindex = 1; 255 req->ifindex = ifindex; 256 } 257 static inline void 258 fou_get_req_set_port(struct fou_get_req *req, __u16 port /* big-endian */) 259 { 260 req->_present.port = 1; 261 req->port = port; 262 } 263 static inline void 264 fou_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 } 270 static inline void 271 fou_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 } 276 static inline void 277 fou_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 } 282 static inline void 283 fou_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 } 291 static inline void 292 fou_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 301 struct 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 326 void fou_get_rsp_free(struct fou_get_rsp *rsp); 327 328 /* 329 * Get tunnel info. 330 */ 331 struct fou_get_rsp *fou_get(struct ynl_sock *ys, struct fou_get_req *req); 332 333 /* FOU_CMD_GET - dump */ 334 struct fou_get_list { 335 struct fou_get_list *next; 336 struct fou_get_rsp obj __attribute__ ((aligned (8))); 337 }; 338 339 void fou_get_list_free(struct fou_get_list *rsp); 340 341 struct fou_get_list *fou_get_dump(struct ynl_sock *ys); 342 343 #endif /* _LINUX_FOU_GEN_H */ 344