datapath: Add support for namespace.
[sliver-openvswitch.git] / datapath / linux / compat / include / net / net_namespace.h
index 9ce9fcd..77f0a16 100644 (file)
@@ -4,12 +4,86 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 /* <net/net_namespace.h> exists, go ahead and include it. */
 #include_next <net/net_namespace.h>
-#endif
+#else
+/* No network namespace support. */
+struct net;
+
+static inline struct net *hold_net(struct net *net)
+{
+       return net;
+}
+
+static inline void release_net(struct net *net)
+{
+}
+
+#define __net_init      __init
+#define __net_exit      __exit
+#endif /* 2.6.24 */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
+#ifdef CONFIG_NET_NS
+static inline
+int net_eq(const struct net *net1, const struct net *net2)
+{
+       return net1 == net2;
+}
+#else
+static inline
+int net_eq(const struct net *net1, const struct net *net2)
+{
+       return 1;
+}
+#endif /* CONFIG_NET_NS */
+#endif /* 2.6.26 */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+#ifdef CONFIG_NET_NS
+
+static inline void write_pnet(struct net **pnet, struct net *net)
+{
+       *pnet = net;
+}
+
+static inline struct net *read_pnet(struct net * const *pnet)
+{
+       return *pnet;
+}
+
+#else
+
+#define write_pnet(pnet, net)   do { (void)(net); } while (0)
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)
-#define INIT_NET_GENL_SOCK init_net.genl_sock
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#define read_pnet(pnet)         (&init_net)
 #else
-#define INIT_NET_GENL_SOCK genl_sock
-#endif
+#define read_pnet(pnet)         (NULL)
+#endif /* 2.6.24 */
+
+#endif /* CONFIG_NET_NS */
+#endif /* 2.6.29 */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
+#define pernet_operations rpl_pernet_operations
+struct pernet_operations {
+       int (*init)(struct net *net);
+       void (*exit)(struct net *net);
+       int *id;
+       size_t size;
+};
+
+extern int rpl_register_pernet_gen_device(struct rpl_pernet_operations *ops);
+extern void rpl_unregister_pernet_gen_device(struct rpl_pernet_operations *ops);
+
+#define register_pernet_device rpl_register_pernet_gen_device
+#define unregister_pernet_device rpl_unregister_pernet_gen_device
+
+#endif /* 2.6.33 */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
+#undef for_each_net
+#define for_each_net(net)   { net = NULL; }
+
+#endif /* 2.6.32 */
 
 #endif /* net/net_namespace.h wrapper */