// 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 #include #include "nfsd-user.h" #include "ynl.h" #include #include #include /* 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", };