rdma: Autoload netlink client modules

If a message comes in and we do not have the client in the table, then
try to load the module supplying that client using MODULE_ALIAS to find
it.

This duplicates the scheme seen in other netlink muxes (eg nfnetlink).

Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Jason Gunthorpe
2017-08-14 14:57:39 -06:00
committed by Doug Ledford
parent 1eb5be0ec7
commit e3bf14bdc1
6 changed files with 30 additions and 0 deletions

View File

@@ -17,6 +17,18 @@ enum rdma_nl_flags {
RDMA_NL_ADMIN_PERM = 1 << 0,
};
/* Define this module as providing netlink services for NETLINK_RDMA, with
* index _index. Since the client indexes were setup in a uapi header as an
* enum and we do no want to change that, the user must supply the expanded
* constant as well and the compiler checks they are the same.
*/
#define MODULE_ALIAS_RDMA_NETLINK(_index, _val) \
static inline void __chk_##_index(void) \
{ \
BUILD_BUG_ON(_index != _val); \
} \
MODULE_ALIAS("rdma-netlink-subsys-" __stringify(_val))
/**
* Register client in RDMA netlink.
* @index: Index of the added client