]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/net/net_namespace.h
iommu/vt-d: Don't copy translation tables if RTT bit needs to be changed
[karo-tx-linux.git] / include / net / net_namespace.h
index 36faf4990c4b6f2604fd2b00178c941d75f540a8..f733656404de0ea5cba33c83a641e37dc4e4d5e5 100644 (file)
@@ -26,6 +26,7 @@
 #endif
 #include <net/netns/nftables.h>
 #include <net/netns/xfrm.h>
+#include <net/netns/mpls.h>
 #include <linux/ns_common.h>
 
 struct user_namespace;
@@ -48,13 +49,10 @@ struct net {
        atomic_t                count;          /* To decided when the network
                                                 *  namespace should be shut down.
                                                 */
-#ifdef NETNS_REFCNT_DEBUG
-       atomic_t                use_count;      /* To track references we
-                                                * destroy on demand
-                                                */
-#endif
        spinlock_t              rules_mod_lock;
 
+       atomic64_t              cookie_gen;
+
        struct list_head        list;           /* list of network namespaces */
        struct list_head        cleanup_list;   /* namespaces on death row */
        struct list_head        exit_list;      /* Use only net_mutex */
@@ -129,6 +127,9 @@ struct net {
 #endif
 #if IS_ENABLED(CONFIG_IP_VS)
        struct netns_ipvs       *ipvs;
+#endif
+#if IS_ENABLED(CONFIG_MPLS)
+       struct netns_mpls       mpls;
 #endif
        struct sock             *diag_nlsk;
        atomic_t                fnhe_genid;
@@ -230,48 +231,27 @@ int net_eq(const struct net *net1, const struct net *net2)
 #endif
 
 
-#ifdef NETNS_REFCNT_DEBUG
-static inline struct net *hold_net(struct net *net)
-{
-       if (net)
-               atomic_inc(&net->use_count);
-       return net;
-}
-
-static inline void release_net(struct net *net)
-{
-       if (net)
-               atomic_dec(&net->use_count);
-}
-#else
-static inline struct net *hold_net(struct net *net)
-{
-       return net;
-}
-
-static inline void release_net(struct net *net)
-{
-}
-#endif
-
+typedef struct {
 #ifdef CONFIG_NET_NS
+       struct net *net;
+#endif
+} possible_net_t;
 
-static inline void write_pnet(struct net **pnet, struct net *net)
+static inline void write_pnet(possible_net_t *pnet, struct net *net)
 {
-       *pnet = net;
+#ifdef CONFIG_NET_NS
+       pnet->net = net;
+#endif
 }
 
-static inline struct net *read_pnet(struct net * const *pnet)
+static inline struct net *read_pnet(const possible_net_t *pnet)
 {
-       return *pnet;
-}
-
+#ifdef CONFIG_NET_NS
+       return pnet->net;
 #else
-
-#define write_pnet(pnet, net)  do { (void)(net);} while (0)
-#define read_pnet(pnet)                (&init_net)
-
+       return &init_net;
 #endif
+}
 
 #define for_each_net(VAR)                              \
        list_for_each_entry(VAR, &net_namespace_list, list)