Setting tag sliver-openvswitch-2.2.90-1
[sliver-openvswitch.git] / datapath / linux / compat / include / net / net_namespace.h
1 #ifndef __NET_NET_NAMESPACE_WRAPPER_H
2 #define __NET_NET_NAMESPACE_WRAPPER_H 1
3
4 #include_next <net/net_namespace.h>
5
6 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
7 /* for 2.6.32* */
8 struct rpl_pernet_operations {
9         int (*init)(struct net *net);
10         void (*exit)(struct net *net);
11         int *id;
12         size_t size;
13         struct pernet_operations ops;
14 };
15 #define pernet_operations rpl_pernet_operations
16
17 #define register_pernet_device rpl_register_pernet_gen_device
18 #define unregister_pernet_device rpl_unregister_pernet_gen_device
19
20 int compat_init_net(struct net *net, struct rpl_pernet_operations *pnet);
21 void compat_exit_net(struct net *net, struct rpl_pernet_operations *pnet);
22
23 #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE)                                       \
24                                                                         \
25 static struct rpl_pernet_operations *pnet_gen_##TYPE;                   \
26 static int compat_init_net_gen_##TYPE(struct net *net)  \
27 {                                                                       \
28         return compat_init_net(net, pnet_gen_##TYPE);                   \
29 }                                                                       \
30                                                                         \
31 static void compat_exit_net_gen_##TYPE(struct net *net) \
32 {                                                                       \
33         compat_exit_net(net, pnet_gen_##TYPE);                          \
34 }                                                                       \
35                                                                         \
36 static int rpl_register_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_pnet)       \
37 {                                                                               \
38         pnet_gen_##TYPE = rpl_pnet;                                             \
39         rpl_pnet->ops.init = compat_init_net_gen_##TYPE;                        \
40         rpl_pnet->ops.exit = compat_exit_net_gen_##TYPE;                        \
41         return register_pernet_gen_##TYPE(pnet_gen_##TYPE->id, &rpl_pnet->ops); \
42 }                                                                                       \
43                                                                                         \
44 static void rpl_unregister_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_pnet)            \
45 {                                                                                       \
46         unregister_pernet_gen_##TYPE(*pnet_gen_##TYPE->id, &rpl_pnet->ops);             \
47 }
48 #else
49 #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE)
50 #endif /* 2.6.33 */
51
52 #endif /* net/net_namespace.h wrapper */