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().
Showing the changes to include/uapi (1 of 8 files). Show all
Unified · Split
| @@ -0,0 +1,35 @@ | |||
| 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/sunrpc_cache.yaml */ | ||
| 4 | /* YNL-GEN uapi header */ | ||
| 5 | /* To regenerate run: tools/net/ynl/ynl-regen.sh */ | ||
| 6 | |||
| 7 | #ifndef _UAPI_LINUX_SUNRPC_NETLINK_H | ||
| 8 | #define _UAPI_LINUX_SUNRPC_NETLINK_H | ||
| 9 | |||
| 10 | #define SUNRPC_FAMILY_NAME "sunrpc" | ||
| 11 | #define SUNRPC_FAMILY_VERSION 1 | ||
| 12 | |||
| 13 | enum sunrpc_cache_type { | ||
| 14 | SUNRPC_CACHE_TYPE_IP_MAP = 1, | ||
| 15 | SUNRPC_CACHE_TYPE_UNIX_GID = 2, | ||
| 16 | }; | ||
| 17 | |||
| 18 | enum { | ||
| 19 | SUNRPC_A_CACHE_NOTIFY_CACHE_TYPE = 1, | ||
| 20 | |||
| 21 | __SUNRPC_A_CACHE_NOTIFY_MAX, | ||
| 22 | SUNRPC_A_CACHE_NOTIFY_MAX = (__SUNRPC_A_CACHE_NOTIFY_MAX - 1) | ||
| 23 | }; | ||
| 24 | |||
| 25 | enum { | ||
| 26 | SUNRPC_CMD_CACHE_NOTIFY = 1, | ||
| 27 | |||
| 28 | __SUNRPC_CMD_MAX, | ||
| 29 | SUNRPC_CMD_MAX = (__SUNRPC_CMD_MAX - 1) | ||
| 30 | }; | ||
| 31 | |||
| 32 | #define SUNRPC_MCGRP_NONE "none" | ||
| 33 | #define SUNRPC_MCGRP_EXPORTD "exportd" | ||
| 34 | |||
| 35 | #endif /* _UAPI_LINUX_SUNRPC_NETLINK_H */ | ||