mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
a149a3a13b
Remember to set the length field in the request setters. Reviewed-by: Donald Hunter <donald.hunter@gmail.com> Link: https://lore.kernel.org/r/20230824003056.1436637-3-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
344 lines
7.7 KiB
C
344 lines
7.7 KiB
C
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
|
|
/* Do not edit directly, auto-generated from: */
|
|
/* Documentation/netlink/specs/fou.yaml */
|
|
/* YNL-GEN user header */
|
|
|
|
#ifndef _LINUX_FOU_GEN_H
|
|
#define _LINUX_FOU_GEN_H
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <linux/types.h>
|
|
#include <linux/fou.h>
|
|
|
|
struct ynl_sock;
|
|
|
|
extern const struct ynl_family ynl_fou_family;
|
|
|
|
/* Enums */
|
|
const char *fou_op_str(int op);
|
|
const char *fou_encap_type_str(int value);
|
|
|
|
/* Common nested types */
|
|
/* ============== FOU_CMD_ADD ============== */
|
|
/* FOU_CMD_ADD - do */
|
|
struct fou_add_req {
|
|
struct {
|
|
__u32 port:1;
|
|
__u32 ipproto:1;
|
|
__u32 type:1;
|
|
__u32 remcsum_nopartial:1;
|
|
__u32 local_v4:1;
|
|
__u32 peer_v4:1;
|
|
__u32 local_v6_len;
|
|
__u32 peer_v6_len;
|
|
__u32 peer_port:1;
|
|
__u32 ifindex:1;
|
|
} _present;
|
|
|
|
__u16 port /* big-endian */;
|
|
__u8 ipproto;
|
|
__u8 type;
|
|
__u32 local_v4;
|
|
__u32 peer_v4;
|
|
void *local_v6;
|
|
void *peer_v6;
|
|
__u16 peer_port /* big-endian */;
|
|
__s32 ifindex;
|
|
};
|
|
|
|
static inline struct fou_add_req *fou_add_req_alloc(void)
|
|
{
|
|
return calloc(1, sizeof(struct fou_add_req));
|
|
}
|
|
void fou_add_req_free(struct fou_add_req *req);
|
|
|
|
static inline void
|
|
fou_add_req_set_port(struct fou_add_req *req, __u16 port /* big-endian */)
|
|
{
|
|
req->_present.port = 1;
|
|
req->port = port;
|
|
}
|
|
static inline void
|
|
fou_add_req_set_ipproto(struct fou_add_req *req, __u8 ipproto)
|
|
{
|
|
req->_present.ipproto = 1;
|
|
req->ipproto = ipproto;
|
|
}
|
|
static inline void fou_add_req_set_type(struct fou_add_req *req, __u8 type)
|
|
{
|
|
req->_present.type = 1;
|
|
req->type = type;
|
|
}
|
|
static inline void fou_add_req_set_remcsum_nopartial(struct fou_add_req *req)
|
|
{
|
|
req->_present.remcsum_nopartial = 1;
|
|
}
|
|
static inline void
|
|
fou_add_req_set_local_v4(struct fou_add_req *req, __u32 local_v4)
|
|
{
|
|
req->_present.local_v4 = 1;
|
|
req->local_v4 = local_v4;
|
|
}
|
|
static inline void
|
|
fou_add_req_set_peer_v4(struct fou_add_req *req, __u32 peer_v4)
|
|
{
|
|
req->_present.peer_v4 = 1;
|
|
req->peer_v4 = peer_v4;
|
|
}
|
|
static inline void
|
|
fou_add_req_set_local_v6(struct fou_add_req *req, const void *local_v6,
|
|
size_t len)
|
|
{
|
|
free(req->local_v6);
|
|
req->_present.local_v6_len = len;
|
|
req->local_v6 = malloc(req->_present.local_v6_len);
|
|
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
|
|
}
|
|
static inline void
|
|
fou_add_req_set_peer_v6(struct fou_add_req *req, const void *peer_v6,
|
|
size_t len)
|
|
{
|
|
free(req->peer_v6);
|
|
req->_present.peer_v6_len = len;
|
|
req->peer_v6 = malloc(req->_present.peer_v6_len);
|
|
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
|
|
}
|
|
static inline void
|
|
fou_add_req_set_peer_port(struct fou_add_req *req,
|
|
__u16 peer_port /* big-endian */)
|
|
{
|
|
req->_present.peer_port = 1;
|
|
req->peer_port = peer_port;
|
|
}
|
|
static inline void
|
|
fou_add_req_set_ifindex(struct fou_add_req *req, __s32 ifindex)
|
|
{
|
|
req->_present.ifindex = 1;
|
|
req->ifindex = ifindex;
|
|
}
|
|
|
|
/*
|
|
* Add port.
|
|
*/
|
|
int fou_add(struct ynl_sock *ys, struct fou_add_req *req);
|
|
|
|
/* ============== FOU_CMD_DEL ============== */
|
|
/* FOU_CMD_DEL - do */
|
|
struct fou_del_req {
|
|
struct {
|
|
__u32 af:1;
|
|
__u32 ifindex:1;
|
|
__u32 port:1;
|
|
__u32 peer_port:1;
|
|
__u32 local_v4:1;
|
|
__u32 peer_v4:1;
|
|
__u32 local_v6_len;
|
|
__u32 peer_v6_len;
|
|
} _present;
|
|
|
|
__u8 af;
|
|
__s32 ifindex;
|
|
__u16 port /* big-endian */;
|
|
__u16 peer_port /* big-endian */;
|
|
__u32 local_v4;
|
|
__u32 peer_v4;
|
|
void *local_v6;
|
|
void *peer_v6;
|
|
};
|
|
|
|
static inline struct fou_del_req *fou_del_req_alloc(void)
|
|
{
|
|
return calloc(1, sizeof(struct fou_del_req));
|
|
}
|
|
void fou_del_req_free(struct fou_del_req *req);
|
|
|
|
static inline void fou_del_req_set_af(struct fou_del_req *req, __u8 af)
|
|
{
|
|
req->_present.af = 1;
|
|
req->af = af;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_ifindex(struct fou_del_req *req, __s32 ifindex)
|
|
{
|
|
req->_present.ifindex = 1;
|
|
req->ifindex = ifindex;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_port(struct fou_del_req *req, __u16 port /* big-endian */)
|
|
{
|
|
req->_present.port = 1;
|
|
req->port = port;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_peer_port(struct fou_del_req *req,
|
|
__u16 peer_port /* big-endian */)
|
|
{
|
|
req->_present.peer_port = 1;
|
|
req->peer_port = peer_port;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_local_v4(struct fou_del_req *req, __u32 local_v4)
|
|
{
|
|
req->_present.local_v4 = 1;
|
|
req->local_v4 = local_v4;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_peer_v4(struct fou_del_req *req, __u32 peer_v4)
|
|
{
|
|
req->_present.peer_v4 = 1;
|
|
req->peer_v4 = peer_v4;
|
|
}
|
|
static inline void
|
|
fou_del_req_set_local_v6(struct fou_del_req *req, const void *local_v6,
|
|
size_t len)
|
|
{
|
|
free(req->local_v6);
|
|
req->_present.local_v6_len = len;
|
|
req->local_v6 = malloc(req->_present.local_v6_len);
|
|
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
|
|
}
|
|
static inline void
|
|
fou_del_req_set_peer_v6(struct fou_del_req *req, const void *peer_v6,
|
|
size_t len)
|
|
{
|
|
free(req->peer_v6);
|
|
req->_present.peer_v6_len = len;
|
|
req->peer_v6 = malloc(req->_present.peer_v6_len);
|
|
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
|
|
}
|
|
|
|
/*
|
|
* Delete port.
|
|
*/
|
|
int fou_del(struct ynl_sock *ys, struct fou_del_req *req);
|
|
|
|
/* ============== FOU_CMD_GET ============== */
|
|
/* FOU_CMD_GET - do */
|
|
struct fou_get_req {
|
|
struct {
|
|
__u32 af:1;
|
|
__u32 ifindex:1;
|
|
__u32 port:1;
|
|
__u32 peer_port:1;
|
|
__u32 local_v4:1;
|
|
__u32 peer_v4:1;
|
|
__u32 local_v6_len;
|
|
__u32 peer_v6_len;
|
|
} _present;
|
|
|
|
__u8 af;
|
|
__s32 ifindex;
|
|
__u16 port /* big-endian */;
|
|
__u16 peer_port /* big-endian */;
|
|
__u32 local_v4;
|
|
__u32 peer_v4;
|
|
void *local_v6;
|
|
void *peer_v6;
|
|
};
|
|
|
|
static inline struct fou_get_req *fou_get_req_alloc(void)
|
|
{
|
|
return calloc(1, sizeof(struct fou_get_req));
|
|
}
|
|
void fou_get_req_free(struct fou_get_req *req);
|
|
|
|
static inline void fou_get_req_set_af(struct fou_get_req *req, __u8 af)
|
|
{
|
|
req->_present.af = 1;
|
|
req->af = af;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_ifindex(struct fou_get_req *req, __s32 ifindex)
|
|
{
|
|
req->_present.ifindex = 1;
|
|
req->ifindex = ifindex;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_port(struct fou_get_req *req, __u16 port /* big-endian */)
|
|
{
|
|
req->_present.port = 1;
|
|
req->port = port;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_peer_port(struct fou_get_req *req,
|
|
__u16 peer_port /* big-endian */)
|
|
{
|
|
req->_present.peer_port = 1;
|
|
req->peer_port = peer_port;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_local_v4(struct fou_get_req *req, __u32 local_v4)
|
|
{
|
|
req->_present.local_v4 = 1;
|
|
req->local_v4 = local_v4;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_peer_v4(struct fou_get_req *req, __u32 peer_v4)
|
|
{
|
|
req->_present.peer_v4 = 1;
|
|
req->peer_v4 = peer_v4;
|
|
}
|
|
static inline void
|
|
fou_get_req_set_local_v6(struct fou_get_req *req, const void *local_v6,
|
|
size_t len)
|
|
{
|
|
free(req->local_v6);
|
|
req->_present.local_v6_len = len;
|
|
req->local_v6 = malloc(req->_present.local_v6_len);
|
|
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
|
|
}
|
|
static inline void
|
|
fou_get_req_set_peer_v6(struct fou_get_req *req, const void *peer_v6,
|
|
size_t len)
|
|
{
|
|
free(req->peer_v6);
|
|
req->_present.peer_v6_len = len;
|
|
req->peer_v6 = malloc(req->_present.peer_v6_len);
|
|
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
|
|
}
|
|
|
|
struct fou_get_rsp {
|
|
struct {
|
|
__u32 port:1;
|
|
__u32 ipproto:1;
|
|
__u32 type:1;
|
|
__u32 remcsum_nopartial:1;
|
|
__u32 local_v4:1;
|
|
__u32 peer_v4:1;
|
|
__u32 local_v6_len;
|
|
__u32 peer_v6_len;
|
|
__u32 peer_port:1;
|
|
__u32 ifindex:1;
|
|
} _present;
|
|
|
|
__u16 port /* big-endian */;
|
|
__u8 ipproto;
|
|
__u8 type;
|
|
__u32 local_v4;
|
|
__u32 peer_v4;
|
|
void *local_v6;
|
|
void *peer_v6;
|
|
__u16 peer_port /* big-endian */;
|
|
__s32 ifindex;
|
|
};
|
|
|
|
void fou_get_rsp_free(struct fou_get_rsp *rsp);
|
|
|
|
/*
|
|
* Get tunnel info.
|
|
*/
|
|
struct fou_get_rsp *fou_get(struct ynl_sock *ys, struct fou_get_req *req);
|
|
|
|
/* FOU_CMD_GET - dump */
|
|
struct fou_get_list {
|
|
struct fou_get_list *next;
|
|
struct fou_get_rsp obj __attribute__ ((aligned (8)));
|
|
};
|
|
|
|
void fou_get_list_free(struct fou_get_list *rsp);
|
|
|
|
struct fou_get_list *fou_get_dump(struct ynl_sock *ys);
|
|
|
|
#endif /* _LINUX_FOU_GEN_H */
|