-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tools: ynl: Add source files for nfsd netlink protocol
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
- Loading branch information
Chuck Lever
committed
Oct 16, 2023
1 parent
bd9d6a3
commit f14122b
Showing
4 changed files
with
130 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) | ||
/* Do not edit directly, auto-generated from: */ | ||
/* Documentation/netlink/specs/nfsd.yaml */ | ||
/* YNL-GEN user source */ | ||
|
||
#include <stdlib.h> | ||
#include <string.h> | ||
#include "nfsd-user.h" | ||
#include "ynl.h" | ||
#include <linux/nfsd_netlink.h> | ||
|
||
#include <libmnl/libmnl.h> | ||
#include <linux/genetlink.h> | ||
|
||
/* Enums */ | ||
static const char * const nfsd_op_strmap[] = { | ||
[NFSD_CMD_RPC_STATUS_GET] = "rpc-status-get", | ||
}; | ||
|
||
const char *nfsd_op_str(int op) | ||
{ | ||
if (op < 0 || op >= (int)MNL_ARRAY_SIZE(nfsd_op_strmap)) | ||
return NULL; | ||
return nfsd_op_strmap[op]; | ||
} | ||
|
||
/* Policies */ | ||
struct ynl_policy_attr nfsd_rpc_status_policy[NFSD_A_RPC_STATUS_MAX + 1] = { | ||
[NFSD_A_RPC_STATUS_XID] = { .name = "xid", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_FLAGS] = { .name = "flags", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_PROG] = { .name = "prog", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_VERSION] = { .name = "version", .type = YNL_PT_U8, }, | ||
[NFSD_A_RPC_STATUS_PROC] = { .name = "proc", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_SERVICE_TIME] = { .name = "service_time", .type = YNL_PT_U64, }, | ||
[NFSD_A_RPC_STATUS_PAD] = { .name = "pad", .type = YNL_PT_IGNORE, }, | ||
[NFSD_A_RPC_STATUS_SADDR4] = { .name = "saddr4", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_DADDR4] = { .name = "daddr4", .type = YNL_PT_U32, }, | ||
[NFSD_A_RPC_STATUS_SADDR6] = { .name = "saddr6", .type = YNL_PT_BINARY,}, | ||
[NFSD_A_RPC_STATUS_DADDR6] = { .name = "daddr6", .type = YNL_PT_BINARY,}, | ||
[NFSD_A_RPC_STATUS_SPORT] = { .name = "sport", .type = YNL_PT_U16, }, | ||
[NFSD_A_RPC_STATUS_DPORT] = { .name = "dport", .type = YNL_PT_U16, }, | ||
[NFSD_A_RPC_STATUS_COMPOUND_OPS] = { .name = "compound-ops", .type = YNL_PT_U32, }, | ||
}; | ||
|
||
struct ynl_policy_nest nfsd_rpc_status_nest = { | ||
.max_attr = NFSD_A_RPC_STATUS_MAX, | ||
.table = nfsd_rpc_status_policy, | ||
}; | ||
|
||
/* 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) | ||
{ | ||
struct nfsd_rpc_status_get_list *next = rsp; | ||
|
||
while ((void *)next != YNL_LIST_END) { | ||
rsp = next; | ||
next = rsp->next; | ||
|
||
free(rsp->obj.saddr6); | ||
free(rsp->obj.daddr6); | ||
free(rsp->obj.compound_ops); | ||
free(rsp); | ||
} | ||
} | ||
|
||
struct nfsd_rpc_status_get_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.rsp_cmd = NFSD_CMD_RPC_STATUS_GET; | ||
yds.rsp_policy = &nfsd_rpc_status_nest; | ||
|
||
nlh = ynl_gemsg_start_dump(ys, ys->family_id, NFSD_CMD_RPC_STATUS_GET, 1); | ||
|
||
err = ynl_exec_dump(ys, nlh, &yds); | ||
if (err < 0) | ||
goto free_list; | ||
|
||
return yds.first; | ||
|
||
free_list: | ||
nfsd_rpc_status_get_list_free(yds.first); | ||
return NULL; | ||
} | ||
|
||
const struct ynl_family ynl_nfsd_family = { | ||
.name = "nfsd", | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ | ||
/* Do not edit directly, auto-generated from: */ | ||
/* Documentation/netlink/specs/nfsd.yaml */ | ||
/* YNL-GEN user header */ | ||
|
||
#ifndef _LINUX_NFSD_GEN_H | ||
#define _LINUX_NFSD_GEN_H | ||
|
||
#include <stdlib.h> | ||
#include <string.h> | ||
#include <linux/types.h> | ||
#include <linux/nfsd_netlink.h> | ||
|
||
struct ynl_sock; | ||
|
||
extern const struct ynl_family ynl_nfsd_family; | ||
|
||
/* Enums */ | ||
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))); | ||
}; | ||
|
||
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); | ||
|
||
#endif /* _LINUX_NFSD_GEN_H */ |