diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-11-04 12:13:33 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-11-07 12:30:16 +0000 |
commit | 20b0b53aca436af9fece9428ca3ab7c7b9cf4583 (patch) | |
tree | 6dccfe349a1ae4e7de872560d807ffed2d07b6a4 /net/batman-adv | |
parent | 7c3eaa022261d79d273d73ac68ff02cbe2839c10 (diff) | |
download | linux-20b0b53aca436af9fece9428ca3ab7c7b9cf4583.tar.gz linux-20b0b53aca436af9fece9428ca3ab7c7b9cf4583.tar.bz2 linux-20b0b53aca436af9fece9428ca3ab7c7b9cf4583.zip |
genetlink: introduce split op representation
We currently have two forms of operations - small ops and "full" ops
(or just ops). The former does not have pointers for some of the less
commonly used features (namely dump start/done and policy).
The "full" ops, however, still don't contain all the necessary
information. In particular the policy is per command ID, while
do and dump often accept different attributes. It's also not
possible to define different pre_doit and post_doit callbacks
for different commands within the family.
At the same time a lot of commands do not support dumping and
therefore all the dump-related information is wasted space.
Create a new command representation which can hold info about
a do implementation or a dump implementation, but not both at
the same time.
Use this new representation on the command execution path
(genl_family_rcv_msg) as we either run a do or a dump and
don't have to create a "full" op there.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/batman-adv')
-rw-r--r-- | net/batman-adv/netlink.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c index a5e4a4e976cf..ad5714f737be 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c @@ -1267,7 +1267,8 @@ batadv_get_vlan_from_info(struct batadv_priv *bat_priv, struct net *net, * * Return: 0 on success or negative error number in case of failure */ -static int batadv_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, +static int batadv_pre_doit(const struct genl_split_ops *ops, + struct sk_buff *skb, struct genl_info *info) { struct net *net = genl_info_net(info); @@ -1332,7 +1333,8 @@ err_put_softif: * @skb: Netlink message with request data * @info: receiver information */ -static void batadv_post_doit(const struct genl_ops *ops, struct sk_buff *skb, +static void batadv_post_doit(const struct genl_split_ops *ops, + struct sk_buff *skb, struct genl_info *info) { struct batadv_hard_iface *hard_iface; |