sunrpc: add a generic netlink family for cache upcalls

The auth.unix.ip and auth.unix.gid caches live in the sunrpc module,
so they cannot use the nfsd generic netlink family. Create a new
"sunrpc" generic netlink family with its own "exportd" multicast
group to support cache upcall notifications for sunrpc-resident
caches.

Define a YAML spec (sunrpc_cache.yaml) with a cache-type enum
(ip_map, unix_gid), a cache-notify multicast event, and the
corresponding uapi header.

Implement sunrpc_cache_notify() in cache.c, which checks for
listeners on the exportd multicast group, builds and sends a
SUNRPC_CMD_CACHE_NOTIFY message with the cache-type attribute.

Register/unregister the sunrpc_nl_family in init_sunrpc() and
cleanup_sunrpc().

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Jeff Layton
2026-03-25 10:40:28 -04:00
committed by Chuck Lever
parent c13ecd4764
commit af81cb247c
8 changed files with 188 additions and 1 deletions

View File

@@ -0,0 +1,35 @@
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
/* Do not edit directly, auto-generated from: */
/* Documentation/netlink/specs/sunrpc_cache.yaml */
/* YNL-GEN uapi header */
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
#ifndef _UAPI_LINUX_SUNRPC_NETLINK_H
#define _UAPI_LINUX_SUNRPC_NETLINK_H
#define SUNRPC_FAMILY_NAME "sunrpc"
#define SUNRPC_FAMILY_VERSION 1
enum sunrpc_cache_type {
SUNRPC_CACHE_TYPE_IP_MAP = 1,
SUNRPC_CACHE_TYPE_UNIX_GID = 2,
};
enum {
SUNRPC_A_CACHE_NOTIFY_CACHE_TYPE = 1,
__SUNRPC_A_CACHE_NOTIFY_MAX,
SUNRPC_A_CACHE_NOTIFY_MAX = (__SUNRPC_A_CACHE_NOTIFY_MAX - 1)
};
enum {
SUNRPC_CMD_CACHE_NOTIFY = 1,
__SUNRPC_CMD_MAX,
SUNRPC_CMD_MAX = (__SUNRPC_CMD_MAX - 1)
};
#define SUNRPC_MCGRP_NONE "none"
#define SUNRPC_MCGRP_EXPORTD "exportd"
#endif /* _UAPI_LINUX_SUNRPC_NETLINK_H */