nfsd: regenerate user space parsers after ynl-gen changes
Commit 8cea95b0bd
("tools: ynl-gen: handle do ops with no input attrs")
added support for some of the previously-skipped ops in nfsd.
Regenerate the user space parsers to fill them in.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0a8e987dcc
commit
d93f952857
@ -3,8 +3,8 @@
|
||||
/* Documentation/netlink/specs/nfsd.yaml */
|
||||
/* YNL-GEN uapi header */
|
||||
|
||||
#ifndef _UAPI_LINUX_NFSD_H
|
||||
#define _UAPI_LINUX_NFSD_H
|
||||
#ifndef _UAPI_LINUX_NFSD_NETLINK_H
|
||||
#define _UAPI_LINUX_NFSD_NETLINK_H
|
||||
|
||||
#define NFSD_FAMILY_NAME "nfsd"
|
||||
#define NFSD_FAMILY_VERSION 1
|
||||
@ -36,4 +36,4 @@ enum {
|
||||
NFSD_CMD_MAX = (__NFSD_CMD_MAX - 1)
|
||||
};
|
||||
|
||||
#endif /* _UAPI_LINUX_NFSD_H */
|
||||
#endif /* _UAPI_LINUX_NFSD_NETLINK_H */
|
||||
|
@ -50,9 +50,116 @@ struct ynl_policy_nest nfsd_rpc_status_nest = {
|
||||
/* Common nested types */
|
||||
/* ============== NFSD_CMD_RPC_STATUS_GET ============== */
|
||||
/* NFSD_CMD_RPC_STATUS_GET - dump */
|
||||
void nfsd_rpc_status_get_list_free(struct nfsd_rpc_status_get_list *rsp)
|
||||
int nfsd_rpc_status_get_rsp_dump_parse(const struct nlmsghdr *nlh, void *data)
|
||||
{
|
||||
struct nfsd_rpc_status_get_list *next = rsp;
|
||||
struct nfsd_rpc_status_get_rsp_dump *dst;
|
||||
struct ynl_parse_arg *yarg = data;
|
||||
unsigned int n_compound_ops = 0;
|
||||
const struct nlattr *attr;
|
||||
int i;
|
||||
|
||||
dst = yarg->data;
|
||||
|
||||
if (dst->compound_ops)
|
||||
return ynl_error_parse(yarg, "attribute already present (rpc-status.compound-ops)");
|
||||
|
||||
mnl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) {
|
||||
unsigned int type = mnl_attr_get_type(attr);
|
||||
|
||||
if (type == NFSD_A_RPC_STATUS_XID) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.xid = 1;
|
||||
dst->xid = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_FLAGS) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.flags = 1;
|
||||
dst->flags = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_PROG) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.prog = 1;
|
||||
dst->prog = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_VERSION) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.version = 1;
|
||||
dst->version = mnl_attr_get_u8(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_PROC) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.proc = 1;
|
||||
dst->proc = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_SERVICE_TIME) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.service_time = 1;
|
||||
dst->service_time = mnl_attr_get_u64(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_SADDR4) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.saddr4 = 1;
|
||||
dst->saddr4 = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_DADDR4) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.daddr4 = 1;
|
||||
dst->daddr4 = mnl_attr_get_u32(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_SADDR6) {
|
||||
unsigned int len;
|
||||
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
|
||||
len = mnl_attr_get_payload_len(attr);
|
||||
dst->_present.saddr6_len = len;
|
||||
dst->saddr6 = malloc(len);
|
||||
memcpy(dst->saddr6, mnl_attr_get_payload(attr), len);
|
||||
} else if (type == NFSD_A_RPC_STATUS_DADDR6) {
|
||||
unsigned int len;
|
||||
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
|
||||
len = mnl_attr_get_payload_len(attr);
|
||||
dst->_present.daddr6_len = len;
|
||||
dst->daddr6 = malloc(len);
|
||||
memcpy(dst->daddr6, mnl_attr_get_payload(attr), len);
|
||||
} else if (type == NFSD_A_RPC_STATUS_SPORT) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.sport = 1;
|
||||
dst->sport = mnl_attr_get_u16(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_DPORT) {
|
||||
if (ynl_attr_validate(yarg, attr))
|
||||
return MNL_CB_ERROR;
|
||||
dst->_present.dport = 1;
|
||||
dst->dport = mnl_attr_get_u16(attr);
|
||||
} else if (type == NFSD_A_RPC_STATUS_COMPOUND_OPS) {
|
||||
n_compound_ops++;
|
||||
}
|
||||
}
|
||||
|
||||
if (n_compound_ops) {
|
||||
dst->compound_ops = calloc(n_compound_ops, sizeof(*dst->compound_ops));
|
||||
dst->n_compound_ops = n_compound_ops;
|
||||
i = 0;
|
||||
mnl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) {
|
||||
if (mnl_attr_get_type(attr) == NFSD_A_RPC_STATUS_COMPOUND_OPS) {
|
||||
dst->compound_ops[i] = mnl_attr_get_u32(attr);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return MNL_CB_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nfsd_rpc_status_get_rsp_list_free(struct nfsd_rpc_status_get_rsp_list *rsp)
|
||||
{
|
||||
struct nfsd_rpc_status_get_rsp_list *next = rsp;
|
||||
|
||||
while ((void *)next != YNL_LIST_END) {
|
||||
rsp = next;
|
||||
@ -65,15 +172,16 @@ void nfsd_rpc_status_get_list_free(struct nfsd_rpc_status_get_list *rsp)
|
||||
}
|
||||
}
|
||||
|
||||
struct nfsd_rpc_status_get_list *nfsd_rpc_status_get_dump(struct ynl_sock *ys)
|
||||
struct nfsd_rpc_status_get_rsp_list *
|
||||
nfsd_rpc_status_get_dump(struct ynl_sock *ys)
|
||||
{
|
||||
struct ynl_dump_state yds = {};
|
||||
struct nlmsghdr *nlh;
|
||||
int err;
|
||||
|
||||
yds.ys = ys;
|
||||
yds.alloc_sz = sizeof(struct nfsd_rpc_status_get_list);
|
||||
yds.cb = nfsd_rpc_status_get_rsp_parse;
|
||||
yds.alloc_sz = sizeof(struct nfsd_rpc_status_get_rsp_list);
|
||||
yds.cb = nfsd_rpc_status_get_rsp_dump_parse;
|
||||
yds.rsp_cmd = NFSD_CMD_RPC_STATUS_GET;
|
||||
yds.rsp_policy = &nfsd_rpc_status_nest;
|
||||
|
||||
@ -86,7 +194,7 @@ struct nfsd_rpc_status_get_list *nfsd_rpc_status_get_dump(struct ynl_sock *ys)
|
||||
return yds.first;
|
||||
|
||||
free_list:
|
||||
nfsd_rpc_status_get_list_free(yds.first);
|
||||
nfsd_rpc_status_get_rsp_list_free(yds.first);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -21,13 +21,47 @@ const char *nfsd_op_str(int op);
|
||||
/* Common nested types */
|
||||
/* ============== NFSD_CMD_RPC_STATUS_GET ============== */
|
||||
/* NFSD_CMD_RPC_STATUS_GET - dump */
|
||||
struct nfsd_rpc_status_get_list {
|
||||
struct nfsd_rpc_status_get_list *next;
|
||||
struct nfsd_rpc_status_get_rsp obj __attribute__ ((aligned (8)));
|
||||
struct nfsd_rpc_status_get_rsp_dump {
|
||||
struct {
|
||||
__u32 xid:1;
|
||||
__u32 flags:1;
|
||||
__u32 prog:1;
|
||||
__u32 version:1;
|
||||
__u32 proc:1;
|
||||
__u32 service_time:1;
|
||||
__u32 saddr4:1;
|
||||
__u32 daddr4:1;
|
||||
__u32 saddr6_len;
|
||||
__u32 daddr6_len;
|
||||
__u32 sport:1;
|
||||
__u32 dport:1;
|
||||
} _present;
|
||||
|
||||
__u32 xid /* big-endian */;
|
||||
__u32 flags;
|
||||
__u32 prog;
|
||||
__u8 version;
|
||||
__u32 proc;
|
||||
__s64 service_time;
|
||||
__u32 saddr4 /* big-endian */;
|
||||
__u32 daddr4 /* big-endian */;
|
||||
void *saddr6;
|
||||
void *daddr6;
|
||||
__u16 sport /* big-endian */;
|
||||
__u16 dport /* big-endian */;
|
||||
unsigned int n_compound_ops;
|
||||
__u32 *compound_ops;
|
||||
};
|
||||
|
||||
void nfsd_rpc_status_get_list_free(struct nfsd_rpc_status_get_list *rsp);
|
||||
struct nfsd_rpc_status_get_rsp_list {
|
||||
struct nfsd_rpc_status_get_rsp_list *next;
|
||||
struct nfsd_rpc_status_get_rsp_dump obj __attribute__((aligned(8)));
|
||||
};
|
||||
|
||||
struct nfsd_rpc_status_get_list *nfsd_rpc_status_get_dump(struct ynl_sock *ys);
|
||||
void
|
||||
nfsd_rpc_status_get_rsp_list_free(struct nfsd_rpc_status_get_rsp_list *rsp);
|
||||
|
||||
struct nfsd_rpc_status_get_rsp_list *
|
||||
nfsd_rpc_status_get_dump(struct ynl_sock *ys);
|
||||
|
||||
#endif /* _LINUX_NFSD_GEN_H */
|
||||
|
Loading…
Reference in New Issue
Block a user