]> git.proxmox.com Git - ovs.git/blame - datapath/linux/compat/include/net/genetlink.h
compat: Remove unsupported kernel compat code
[ovs.git] / datapath / linux / compat / include / net / genetlink.h
CommitLineData
064af421
BP
1#ifndef __NET_GENERIC_NETLINK_WRAPPER_H
2#define __NET_GENERIC_NETLINK_WRAPPER_H 1
3
aaff4b55 4#include <linux/version.h>
064af421 5#include <linux/netlink.h>
8ce41058 6#include <net/net_namespace.h>
b3dcb73c 7#include_next <net/genetlink.h>
aaff4b55 8
13dd4a97 9#ifndef HAVE_GENL_NOTIFY_TAKES_FAMILY
cb25142c
PS
10struct rpl_genl_family {
11 struct genl_family compat_family;
12 unsigned int id;
13 unsigned int hdrsize;
14 char name[GENL_NAMSIZ];
15 unsigned int version;
16 unsigned int maxattr;
17 bool netnsok;
18 bool parallel_ops;
19 int (*pre_doit)(const struct genl_ops *ops,
20 struct sk_buff *skb,
21 struct genl_info *info);
22 void (*post_doit)(const struct genl_ops *ops,
23 struct sk_buff *skb,
24 struct genl_info *info);
25 struct nlattr ** attrbuf; /* private */
26 const struct genl_ops * ops; /* private */
27 const struct genl_multicast_group *mcgrps; /* private */
28 unsigned int n_ops; /* private */
29 unsigned int n_mcgrps; /* private */
30 unsigned int mcgrp_offset; /* private */
31 struct list_head family_list; /* private */
32 struct module *module;
33};
34
35#define genl_family rpl_genl_family
cb25142c
PS
36static inline void *rpl_genlmsg_put(struct sk_buff *skb, u32 portid, u32 seq,
37 struct genl_family *family, int flags, u8 cmd)
38{
39 return genlmsg_put(skb, portid, seq, &family->compat_family, flags, cmd);
40}
41
42#define genlmsg_put rpl_genlmsg_put
43
44static inline int rpl_genl_unregister_family(struct genl_family *family)
45{
46 return genl_unregister_family(&family->compat_family);
47}
48#define genl_unregister_family rpl_genl_unregister_family
49
50#define genl_set_err rpl_genl_set_err
51static inline int genl_set_err(struct genl_family *family, struct net *net,
52 u32 portid, u32 group, int code)
53{
6dbd98e6 54#ifdef HAVE_VOID_NETLINK_SET_ERR
cb25142c
PS
55 netlink_set_err(net->genl_sock, portid, group, code);
56 return 0;
57#else
58 return netlink_set_err(net->genl_sock, portid, group, code);
59#endif
60}
61
62#define genlmsg_multicast_netns rpl_genlmsg_multicast_netns
63static inline int genlmsg_multicast_netns(struct genl_family *family,
64 struct net *net, struct sk_buff *skb,
65 u32 portid, unsigned int group, gfp_t flags)
66{
67 return nlmsg_multicast(net->genl_sock, skb, portid, group, flags);
68}
69
70
71#define __genl_register_family rpl___genl_register_family
72int rpl___genl_register_family(struct genl_family *family);
73
74#define genl_register_family rpl_genl_register_family
75static inline int rpl_genl_register_family(struct genl_family *family)
76{
77 family->module = THIS_MODULE;
78 return rpl___genl_register_family(family);
79}
0643a78b 80#endif
cb25142c 81
0643a78b
PS
82#ifdef HAVE_GENL_NOTIFY_TAKES_NET
83#define genl_notify rpl_genl_notify
84void rpl_genl_notify(struct genl_family *family, struct sk_buff *skb,
85 struct genl_info *info , u32 group, gfp_t flags);
cb25142c 86#endif
aaff4b55 87
114fce23
SG
88#ifndef HAVE_GENL_HAS_LISTENERS
89static inline int genl_has_listeners(struct genl_family *family,
6233a1bd 90 struct net *net, unsigned int group)
114fce23
SG
91{
92#ifdef HAVE_MCGRP_OFFSET
93 if (WARN_ON_ONCE(group >= family->n_mcgrps))
94 return -EINVAL;
95 group = family->mcgrp_offset + group;
114fce23 96#endif
6233a1bd 97 return netlink_has_listeners(net->genl_sock, group);
114fce23 98}
6233a1bd
TG
99#else
100
101#ifndef HAVE_GENL_HAS_LISTENERS_TAKES_NET
102static inline int rpl_genl_has_listeners(struct genl_family *family,
103 struct net *net, unsigned int group)
104{
13dd4a97 105#ifdef HAVE_GENL_NOTIFY_TAKES_FAMILY
6233a1bd 106 return genl_has_listeners(family, net->genl_sock, group);
13dd4a97
JS
107#else
108 return genl_has_listeners(&family->compat_family, net->genl_sock, group);
109#endif
6233a1bd
TG
110}
111
112#define genl_has_listeners rpl_genl_has_listeners
114fce23
SG
113#endif
114
6233a1bd
TG
115#endif /* HAVE_GENL_HAS_LISTENERS */
116
15702dc9
JB
117#ifndef HAVE_NETLINK_EXT_ACK
118struct netlink_ext_ack;
119
120static inline int rpl_genlmsg_parse(const struct nlmsghdr *nlh,
121 const struct genl_family *family,
122 struct nlattr *tb[], int maxtype,
123 const struct nla_policy *policy,
124 struct netlink_ext_ack *extack)
c623ba49 125{
15702dc9
JB
126#ifdef HAVE_GENLMSG_PARSE
127 return genlmsg_parse(nlh, family, tb, maxtype, policy);
128#else
c623ba49
JS
129 return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
130 policy);
15702dc9 131#endif
c623ba49 132}
15702dc9 133#define genlmsg_parse rpl_genlmsg_parse
c623ba49
JS
134#endif
135
064af421 136#endif /* genetlink.h */