Skip to content

Commit

Permalink
NFSD: introduce netlink stubs
Browse files Browse the repository at this point in the history
Generate stubs and uAPI for nfsd netlink protocol. For the moment,
the new protocol has one operation: rpc_status.

The generated header and source files are created by running:

  tools/net/ynl/ynl-regen.sh

Tested-by: Jeff Layton <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Acked-by: Jeff Layton <[email protected]>
Signed-off-by: Chuck Lever <[email protected]>
  • Loading branch information
LorenzoBianconi authored and chucklever committed Oct 16, 2023
1 parent 6c41d9a commit 13727f8
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 1 deletion.
89 changes: 89 additions & 0 deletions Documentation/netlink/specs/nfsd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: nfsd
protocol: genetlink
uapi-header: linux/nfsd_netlink.h

doc: NFSD configuration over generic netlink.

attribute-sets:
-
name: rpc-status
attributes:
-
name: xid
type: u32
byte-order: big-endian
-
name: flags
type: u32
-
name: prog
type: u32
-
name: version
type: u8
-
name: proc
type: u32
-
name: service_time
type: s64
-
name: pad
type: pad
-
name: saddr4
type: u32
byte-order: big-endian
display-hint: ipv4
-
name: daddr4
type: u32
byte-order: big-endian
display-hint: ipv4
-
name: saddr6
type: binary
display-hint: ipv6
-
name: daddr6
type: binary
display-hint: ipv6
-
name: sport
type: u16
byte-order: big-endian
-
name: dport
type: u16
byte-order: big-endian
-
name: compound-ops
type: u32
multi-attr: true

operations:
list:
-
name: rpc-status-get
doc: dump pending nfsd rpc
attribute-set: rpc-status
dump:
pre: nfsd-nl-rpc-status-get-start
post: nfsd-nl-rpc-status-get-done
reply:
attributes:
- xid
- flags
- prog
- version
- proc
- service_time
- saddr4
- daddr4
- saddr6
- daddr6
- sport
- dport
- compound-ops
3 changes: 2 additions & 1 deletion fs/nfsd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ nfsd-y += trace.o

nfsd-y += nfssvc.o nfsctl.o nfsfh.o vfs.o \
export.o auth.o lockd.o nfscache.o \
stats.o filecache.o nfs3proc.o nfs3xdr.o
stats.o filecache.o nfs3proc.o nfs3xdr.o \
netlink.o
nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o
nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
Expand Down
32 changes: 32 additions & 0 deletions fs/nfsd/netlink.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// 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 kernel source */

#include <net/netlink.h>
#include <net/genetlink.h>

#include "netlink.h"

#include <uapi/linux/nfsd_netlink.h>

/* Ops table for nfsd */
static const struct genl_split_ops nfsd_nl_ops[] = {
{
.cmd = NFSD_CMD_RPC_STATUS_GET,
.start = nfsd_nl_rpc_status_get_start,
.dumpit = nfsd_nl_rpc_status_get_dumpit,
.done = nfsd_nl_rpc_status_get_done,
.flags = GENL_CMD_CAP_DUMP,
},
};

struct genl_family nfsd_nl_family __ro_after_init = {
.name = NFSD_FAMILY_NAME,
.version = NFSD_FAMILY_VERSION,
.netnsok = true,
.parallel_ops = true,
.module = THIS_MODULE,
.split_ops = nfsd_nl_ops,
.n_split_ops = ARRAY_SIZE(nfsd_nl_ops),
};
22 changes: 22 additions & 0 deletions fs/nfsd/netlink.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/* 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 kernel header */

#ifndef _LINUX_NFSD_GEN_H
#define _LINUX_NFSD_GEN_H

#include <net/netlink.h>
#include <net/genetlink.h>

#include <uapi/linux/nfsd_netlink.h>

int nfsd_nl_rpc_status_get_start(struct netlink_callback *cb);
int nfsd_nl_rpc_status_get_done(struct netlink_callback *cb);

int nfsd_nl_rpc_status_get_dumpit(struct sk_buff *skb,
struct netlink_callback *cb);

extern struct genl_family nfsd_nl_family;

#endif /* _LINUX_NFSD_GEN_H */
17 changes: 17 additions & 0 deletions fs/nfsd/nfsctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "pnfs.h"
#include "filecache.h"
#include "trace.h"
#include "netlink.h"

/*
* We have a single directory with several nodes in it.
Expand Down Expand Up @@ -1495,6 +1496,22 @@ static int create_proc_exports_entry(void)

unsigned int nfsd_net_id;

int nfsd_nl_rpc_status_get_start(struct netlink_callback *cb)
{
return 0;
}

int nfsd_nl_rpc_status_get_dumpit(struct sk_buff *skb,
struct netlink_callback *cb)
{
return 0;
}

int nfsd_nl_rpc_status_get_done(struct netlink_callback *cb)
{
return 0;
}

/**
* nfsd_net_init - Prepare the nfsd_net portion of a new net namespace
* @net: a freshly-created network namespace
Expand Down
39 changes: 39 additions & 0 deletions include/uapi/linux/nfsd_netlink.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* 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 uapi header */

#ifndef _UAPI_LINUX_NFSD_H
#define _UAPI_LINUX_NFSD_H

#define NFSD_FAMILY_NAME "nfsd"
#define NFSD_FAMILY_VERSION 1

enum {
NFSD_A_RPC_STATUS_XID = 1,
NFSD_A_RPC_STATUS_FLAGS,
NFSD_A_RPC_STATUS_PROG,
NFSD_A_RPC_STATUS_VERSION,
NFSD_A_RPC_STATUS_PROC,
NFSD_A_RPC_STATUS_SERVICE_TIME,
NFSD_A_RPC_STATUS_PAD,
NFSD_A_RPC_STATUS_SADDR4,
NFSD_A_RPC_STATUS_DADDR4,
NFSD_A_RPC_STATUS_SADDR6,
NFSD_A_RPC_STATUS_DADDR6,
NFSD_A_RPC_STATUS_SPORT,
NFSD_A_RPC_STATUS_DPORT,
NFSD_A_RPC_STATUS_COMPOUND_OPS,

__NFSD_A_RPC_STATUS_MAX,
NFSD_A_RPC_STATUS_MAX = (__NFSD_A_RPC_STATUS_MAX - 1)
};

enum {
NFSD_CMD_RPC_STATUS_GET = 1,

__NFSD_CMD_MAX,
NFSD_CMD_MAX = (__NFSD_CMD_MAX - 1)
};

#endif /* _UAPI_LINUX_NFSD_H */

0 comments on commit 13727f8

Please sign in to comment.