|
| 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/nfsd.yaml */ |
| 4 | +/* YNL-GEN user source */ |
| 5 | + |
| 6 | +#include <stdlib.h> |
| 7 | +#include <string.h> |
| 8 | +#include "nfsd-user.h" |
| 9 | +#include "ynl.h" |
| 10 | +#include <linux/nfsd_netlink.h> |
| 11 | + |
| 12 | +#include <libmnl/libmnl.h> |
| 13 | +#include <linux/genetlink.h> |
| 14 | + |
| 15 | +/* Enums */ |
| 16 | +static const char * const nfsd_op_strmap[] = { |
| 17 | + [NFSD_CMD_RPC_STATUS_GET] = "rpc-status-get", |
| 18 | +}; |
| 19 | + |
| 20 | +const char *nfsd_op_str(int op) |
| 21 | +{ |
| 22 | + if (op < 0 || op >= (int)MNL_ARRAY_SIZE(nfsd_op_strmap)) |
| 23 | + return NULL; |
| 24 | + return nfsd_op_strmap[op]; |
| 25 | +} |
| 26 | + |
| 27 | +/* Policies */ |
| 28 | +struct ynl_policy_attr nfsd_rpc_status_policy[NFSD_A_RPC_STATUS_MAX + 1] = { |
| 29 | + [NFSD_A_RPC_STATUS_XID] = { .name = "xid", .type = YNL_PT_U32, }, |
| 30 | + [NFSD_A_RPC_STATUS_FLAGS] = { .name = "flags", .type = YNL_PT_U32, }, |
| 31 | + [NFSD_A_RPC_STATUS_PROG] = { .name = "prog", .type = YNL_PT_U32, }, |
| 32 | + [NFSD_A_RPC_STATUS_VERSION] = { .name = "version", .type = YNL_PT_U8, }, |
| 33 | + [NFSD_A_RPC_STATUS_PROC] = { .name = "proc", .type = YNL_PT_U32, }, |
| 34 | + [NFSD_A_RPC_STATUS_SERVICE_TIME] = { .name = "service_time", .type = YNL_PT_U64, }, |
| 35 | + [NFSD_A_RPC_STATUS_PAD] = { .name = "pad", .type = YNL_PT_IGNORE, }, |
| 36 | + [NFSD_A_RPC_STATUS_SADDR4] = { .name = "saddr4", .type = YNL_PT_U32, }, |
| 37 | + [NFSD_A_RPC_STATUS_DADDR4] = { .name = "daddr4", .type = YNL_PT_U32, }, |
| 38 | + [NFSD_A_RPC_STATUS_SADDR6] = { .name = "saddr6", .type = YNL_PT_BINARY,}, |
| 39 | + [NFSD_A_RPC_STATUS_DADDR6] = { .name = "daddr6", .type = YNL_PT_BINARY,}, |
| 40 | + [NFSD_A_RPC_STATUS_SPORT] = { .name = "sport", .type = YNL_PT_U16, }, |
| 41 | + [NFSD_A_RPC_STATUS_DPORT] = { .name = "dport", .type = YNL_PT_U16, }, |
| 42 | + [NFSD_A_RPC_STATUS_COMPOUND_OPS] = { .name = "compound-ops", .type = YNL_PT_U32, }, |
| 43 | +}; |
| 44 | + |
| 45 | +struct ynl_policy_nest nfsd_rpc_status_nest = { |
| 46 | + .max_attr = NFSD_A_RPC_STATUS_MAX, |
| 47 | + .table = nfsd_rpc_status_policy, |
| 48 | +}; |
| 49 | + |
| 50 | +/* Common nested types */ |
| 51 | +/* ============== NFSD_CMD_RPC_STATUS_GET ============== */ |
| 52 | +/* NFSD_CMD_RPC_STATUS_GET - dump */ |
| 53 | +void nfsd_rpc_status_get_list_free(struct nfsd_rpc_status_get_list *rsp) |
| 54 | +{ |
| 55 | + struct nfsd_rpc_status_get_list *next = rsp; |
| 56 | + |
| 57 | + while ((void *)next != YNL_LIST_END) { |
| 58 | + rsp = next; |
| 59 | + next = rsp->next; |
| 60 | + |
| 61 | + free(rsp->obj.saddr6); |
| 62 | + free(rsp->obj.daddr6); |
| 63 | + free(rsp->obj.compound_ops); |
| 64 | + free(rsp); |
| 65 | + } |
| 66 | +} |
| 67 | + |
| 68 | +struct nfsd_rpc_status_get_list *nfsd_rpc_status_get_dump(struct ynl_sock *ys) |
| 69 | +{ |
| 70 | + struct ynl_dump_state yds = {}; |
| 71 | + struct nlmsghdr *nlh; |
| 72 | + int err; |
| 73 | + |
| 74 | + yds.ys = ys; |
| 75 | + yds.alloc_sz = sizeof(struct nfsd_rpc_status_get_list); |
| 76 | + yds.cb = nfsd_rpc_status_get_rsp_parse; |
| 77 | + yds.rsp_cmd = NFSD_CMD_RPC_STATUS_GET; |
| 78 | + yds.rsp_policy = &nfsd_rpc_status_nest; |
| 79 | + |
| 80 | + nlh = ynl_gemsg_start_dump(ys, ys->family_id, NFSD_CMD_RPC_STATUS_GET, 1); |
| 81 | + |
| 82 | + err = ynl_exec_dump(ys, nlh, &yds); |
| 83 | + if (err < 0) |
| 84 | + goto free_list; |
| 85 | + |
| 86 | + return yds.first; |
| 87 | + |
| 88 | +free_list: |
| 89 | + nfsd_rpc_status_get_list_free(yds.first); |
| 90 | + return NULL; |
| 91 | +} |
| 92 | + |
| 93 | +const struct ynl_family ynl_nfsd_family = { |
| 94 | + .name = "nfsd", |
| 95 | +}; |
0 commit comments