#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
 
 #define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   && \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   && \
         ((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports))      && \
         ((__sk)->sk_family             == AF_INET6)            && \
         ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr))     && \
         (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
 
 #define INET6_TW_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif) \
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   && \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   && \
         (*((__portpair *)&(inet_twsk(__sk)->tw_dport)) == (__ports))   && \
         ((__sk)->sk_family            == PF_INET6)                     && \
         (ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_daddr, (__saddr)))   && \
 
                                   ((__force __u64)(__be32)(__saddr)));
 #endif /* __BIG_ENDIAN */
 #define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   &&      \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   &&      \
         ((*((__addrpair *)&(inet_sk(__sk)->daddr))) == (__cookie))     &&      \
         ((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports))      &&      \
         (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
 #define INET_TW_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   &&      \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   &&      \
         ((*((__addrpair *)&(inet_twsk(__sk)->tw_daddr))) == (__cookie)) &&     \
         ((*((__portpair *)&(inet_twsk(__sk)->tw_dport))) == (__ports)) &&      \
         (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
 #else /* 32-bit arch */
 #define INET_ADDR_COOKIE(__name, __saddr, __daddr)
 #define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)    \
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   &&      \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   &&      \
         (inet_sk(__sk)->daddr          == (__saddr))           &&      \
         (inet_sk(__sk)->rcv_saddr      == (__daddr))           &&      \
         ((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports))      &&      \
         (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
 #define INET_TW_MATCH(__sk, __net, __hash,__cookie, __saddr, __daddr, __ports, __dif)  \
-       (((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net))   &&      \
+       (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net)   &&      \
         (inet_twsk(__sk)->tw_daddr     == (__saddr))           &&      \
         (inet_twsk(__sk)->tw_rcv_saddr == (__daddr))           &&      \
         ((*((__portpair *)&(inet_twsk(__sk)->tw_dport))) == (__ports)) &&      \
 
                               const int timeo, const int timewait_len);
 extern void inet_twsk_deschedule(struct inet_timewait_sock *tw,
                                 struct inet_timewait_death_row *twdr);
+
+static inline
+struct net *twsk_net(const struct inet_timewait_sock *twsk)
+{
+#ifdef CONFIG_NET_NS
+       return twsk->tw_net;
+#else
+       return &init_net;
+#endif
+}
+
+static inline
+void twsk_net_set(struct inet_timewait_sock *twsk, const struct net *net)
+{
+#ifdef CONFIG_NET_NS
+       twsk->tw_net = net;
+#endif
+}
 #endif /* _INET_TIMEWAIT_SOCK_ */
 
                                         .dport = dport } } };
 
        int err;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        if (!dst || !src) {
                err = __ip_route_output_key(net, rp, &fl);
                if (err)
                ip_rt_put(*rp);
                *rp = NULL;
                security_sk_classify_flow(sk, &fl);
-               return ip_route_output_flow(sk->sk_net, rp, &fl, sk, 0);
+               return ip_route_output_flow(sock_net(sk), rp, &fl, sk, 0);
        }
        return 0;
 }
 
        atomic_t                skc_refcnt;
        unsigned int            skc_hash;
        struct proto            *skc_prot;
+#ifdef CONFIG_NET_NS
        struct net              *skc_net;
+#endif
 };
 
 /**
 }
 #endif
 
+static inline
+struct net *sock_net(const struct sock *sk)
+{
+#ifdef CONFIG_NET_NS
+       return sk->sk_net;
+#else
+       return &init_net;
+#endif
+}
+
+static inline
+void sock_net_set(struct sock *sk, const struct net *net)
+{
+#ifdef CONFIG_NET_NS
+       sk->sk_net = net;
+#endif
+}
+
 /*
  * Kernel sockets, f.e. rtnl or icmp_socket, are a part of a namespace.
  * They should not hold a referrence to a namespace in order to allow
  */
 static inline void sk_change_net(struct sock *sk, struct net *net)
 {
-       put_net(sk->sk_net);
-       sk->sk_net = net;
+       put_net(sock_net(sk));
+       sock_net_set(sk, net);
 }
 
 extern void sock_enable_timestamp(struct sock *sk);
 
 
        lock_sock(sk);
 
-       error = svc_create(sk->sk_net, newsock,0);
+       error = svc_create(sock_net(sk), newsock,0);
        if (error)
                goto out;
 
 
        struct sock *sk;
        ax25_cb *ax25, *oax25;
 
-       sk = sk_alloc(osk->sk_net, PF_AX25, GFP_ATOMIC, osk->sk_prot);
+       sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC,       osk->sk_prot);
        if (sk == NULL)
                return NULL;
 
 
                goto response;
        }
 
-       sk = l2cap_sock_alloc(parent->sk_net, NULL, BTPROTO_L2CAP, GFP_ATOMIC);
+       sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
        if (!sk)
                goto response;
 
 
                goto done;
        }
 
-       sk = rfcomm_sock_alloc(parent->sk_net, NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
+       sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
        if (!sk)
                goto done;
 
 
 
                bh_lock_sock(parent);
 
-               sk = sco_sock_alloc(parent->sk_net, NULL, BTPROTO_SCO, GFP_ATOMIC);
+               sk = sco_sock_alloc(sock_net(parent), NULL, BTPROTO_SCO, GFP_ATOMIC);
                if (!sk) {
                        bh_unlock_sock(parent);
                        goto done;
 
  */
 static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct net_device *dev;
        int idx;
 
  */
 static int br_rtm_setlink(struct sk_buff *skb,  struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifinfomsg *ifm;
        struct nlattr *protinfo;
        struct net_device *dev;
 
 
 static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib_rule_hdr *frh = nlmsg_data(nlh);
        struct fib_rules_ops *ops = NULL;
        struct fib_rule *rule, *r, *last = NULL;
 
 static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib_rule_hdr *frh = nlmsg_data(nlh);
        struct fib_rules_ops *ops = NULL;
        struct fib_rule *rule, *tmp;
 
 static int fib_nl_dumprule(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib_rules_ops *ops;
        int idx = 0, family;
 
 
 
 static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ndmsg *ndm;
        struct nlattr *dst_attr;
        struct neigh_table *tbl;
 
 static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ndmsg *ndm;
        struct nlattr *tb[NDA_MAX+1];
        struct neigh_table *tbl;
 
 static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct neigh_table *tbl;
        struct ndtmsg *ndtmsg;
        struct nlattr *tb[NDTA_MAX+1];
 
 static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int family, tidx, nidx = 0;
        int tbl_skip = cb->args[0];
        int neigh_skip = cb->args[1];
 static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
                            struct netlink_callback *cb)
 {
-       struct net * net = skb->sk->sk_net;
+       struct net * net = sock_net(skb->sk);
        struct neighbour *n;
        int rc, h, s_h = cb->args[1];
        int idx, s_idx = idx = cb->args[2];
 
 
 static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int idx;
        int s_idx = cb->args[0];
        struct net_device *dev;
 
 static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifinfomsg *ifm;
        struct net_device *dev;
        int err;
 
 static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        const struct rtnl_link_ops *ops;
        struct net_device *dev;
        struct ifinfomsg *ifm;
 
 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        const struct rtnl_link_ops *ops;
        struct net_device *dev;
        struct ifinfomsg *ifm;
 
 static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifinfomsg *ifm;
        struct nlattr *tb[IFLA_MAX+1];
        struct net_device *dev = NULL;
 
 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        rtnl_doit_func doit;
        int sz_idx, kind;
        int min_len;
 
 {
        int ret = -ENOPROTOOPT;
 #ifdef CONFIG_NETDEVICES
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        char devname[IFNAMSIZ];
        int index;
 
                 */
                sk->sk_prot = sk->sk_prot_creator = prot;
                sock_lock_init(sk);
-               sk->sk_net = get_net(net);
+               sock_net_set(sk, get_net(net));
        }
 
        return sk;
                printk(KERN_DEBUG "%s: optmem leakage (%d bytes) detected.\n",
                       __func__, atomic_read(&sk->sk_omem_alloc));
 
-       put_net(sk->sk_net);
+       put_net(sock_net(sk));
        sk_prot_free(sk->sk_prot_creator, sk);
 }
 
 
        sock_hold(sk);
        sock_release(sk->sk_socket);
-       sk->sk_net = get_net(&init_net);
+       sock_net_set(sk, get_net(&init_net));
        sock_put(sk);
 }
 EXPORT_SYMBOL(sk_release_kernel);
                sock_copy(newsk, sk);
 
                /* SANITY */
-               get_net(newsk->sk_net);
+               get_net(sock_net(newsk));
                sk_node_init(&newsk->sk_node);
                sock_lock_init(newsk);
                bh_lock_sock(newsk);
 
 
        cb = DN_SKB_CB(skb);
        sk->sk_ack_backlog--;
-       newsk = dn_alloc_sock(sk->sk_net, newsock, sk->sk_allocation);
+       newsk = dn_alloc_sock(sock_net(sk), newsock, sk->sk_allocation);
        if (newsk == NULL) {
                release_sock(sk);
                kfree_skb(skb);
 
 
 static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlattr *tb[IFA_MAX+1];
        struct dn_dev *dn_db;
        struct ifaddrmsg *ifm;
 
 static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlattr *tb[IFA_MAX+1];
        struct net_device *dev;
        struct dn_dev *dn_db;
 
 static int dn_nl_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int idx, dn_idx = 0, skip_ndevs, skip_naddr;
        struct net_device *dev;
        struct dn_dev *dn_db;
 
 
 static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct dn_fib_table *tb;
        struct rtattr **rta = arg;
        struct rtmsg *r = NLMSG_DATA(nlh);
 
 static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct dn_fib_table *tb;
        struct rtattr **rta = arg;
        struct rtmsg *r = NLMSG_DATA(nlh);
 
  */
 static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = in_skb->sk->sk_net;
+       struct net *net = sock_net(in_skb->sk);
        struct rtattr **rta = arg;
        struct rtmsg *rtm = NLMSG_DATA(nlh);
        struct dn_route *rt = NULL;
  */
 int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct dn_route *rt;
        int h, s_h;
        int idx, s_idx;
 
 
 int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        unsigned int h, s_h;
        unsigned int e = 0, s_e;
        struct dn_fib_table *tb;
 
        if (addr_len < sizeof(struct sockaddr_in))
                goto out;
 
-       chk_addr_ret = inet_addr_type(sk->sk_net, addr->sin_addr.s_addr);
+       chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr);
 
        /* Not specified by any standard per-se, however it breaks too
         * many applications when removed.  It is unfortunate since
 {
        struct sock *sk = sock->sk;
        int err = 0;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        switch (cmd) {
                case SIOCGSTAMP:
        };
 
        security_sk_classify_flow(sk, &fl);
-       err = ip_route_output_flow(sk->sk_net, &rt, &fl, sk, 0);
+       err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0);
 }
        if (!err)
                sk_setup_caps(sk, &rt->u.dst);
 
 
 static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlattr *tb[IFA_MAX+1];
        struct in_device *in_dev;
        struct ifaddrmsg *ifm;
 
 static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct in_ifaddr *ifa;
 
        ASSERT_RTNL();
 
 static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int idx, ip_idx;
        struct net_device *dev;
        struct in_device *in_dev;
 
 
 static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib_config cfg;
        struct fib_table *tb;
        int err;
 
 static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib_config cfg;
        struct fib_table *tb;
        int err;
 
 static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        unsigned int h, s_h;
        unsigned int e = 0, s_e;
        struct fib_table *tb;
        struct fib_table *tb;
        u32 pid;
 
-       net = skb->sk->sk_net;
+       net = sock_net(skb->sk);
        nlh = nlmsg_hdr(skb);
        if (skb->len < NLMSG_SPACE(0) || skb->len < nlh->nlmsg_len ||
            nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*frn)))
 
                               struct nlmsghdr *nlh, struct fib_rule_hdr *frh,
                               struct nlattr **tb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int err = -EINVAL;
        struct fib4_rule *rule4 = (struct fib4_rule *) rule;
 
 
        if (!ipv4_is_multicast(addr))
                return -EINVAL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
        u32 ifindex;
        int ret = -EADDRNOTAVAIL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
        if (!ipv4_is_multicast(addr))
                return -EINVAL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
            msf->imsf_fmode != MCAST_EXCLUDE)
                return -EINVAL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
        if (!ipv4_is_multicast(addr))
                return -EINVAL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
        if (!ipv4_is_multicast(addr))
                return -EINVAL;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return -EPROTONOSUPPORT;
 
        rtnl_lock();
        if (inet->mc_list == NULL)
                return;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return;
 
        rtnl_lock();
 
        struct hlist_node *node;
        struct inet_bind_bucket *tb;
        int ret;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        local_bh_disable();
        if (!snum) {
                                         .dport = ireq->rmt_port } } };
 
        security_req_classify_flow(req, &fl);
-       if (ip_route_output_flow(sk->sk_net, &rt, &fl, sk, 0)) {
+       if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0)) {
                IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
                return NULL;
        }
 
        sk_for_each(sk, node, head) {
                const struct inet_sock *inet = inet_sk(sk);
 
-               if (sk->sk_net == net && inet->num == hnum &&
+               if (sock_net(sk) == net && inet->num == hnum &&
                                !ipv6_only_sock(sk)) {
                        const __be32 rcv_saddr = inet->rcv_saddr;
                        int score = sk->sk_family == PF_INET ? 1 : 0;
                if (inet->num == hnum && !sk->sk_node.next &&
                    (!inet->rcv_saddr || inet->rcv_saddr == daddr) &&
                    (sk->sk_family == PF_INET || !ipv6_only_sock(sk)) &&
-                   !sk->sk_bound_dev_if && sk->sk_net == net)
+                   !sk->sk_bound_dev_if && sock_net(sk) == net)
                        goto sherry_cache;
                sk = inet_lookup_listener_slow(net, head, daddr, hnum, dif);
        }
        struct sock *sk2;
        const struct hlist_node *node;
        struct inet_timewait_sock *tw;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        prefetch(head->chain.first);
        write_lock(lock);
        struct inet_bind_hashbucket *head;
        struct inet_bind_bucket *tb;
        int ret;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        if (!snum) {
                int i, remaining, low, high, port;
 
                tw->tw_hash         = sk->sk_hash;
                tw->tw_ipv6only     = 0;
                tw->tw_prot         = sk->sk_prot_creator;
-               tw->tw_net          = sk->sk_net;
+               twsk_net_set(tw, sock_net(sk));
                atomic_set(&tw->tw_refcnt, 1);
                inet_twsk_dead_node_init(tw);
                __module_get(tw->tw_prot->owner);
 
                if (sk && inet_sk(sk)->num == protocol &&
                    (!sk->sk_bound_dev_if ||
                     sk->sk_bound_dev_if == dev->ifindex) &&
-                   sk->sk_net == dev_net(dev)) {
+                   sock_net(sk) == dev_net(dev)) {
                        if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
                                if (ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN)) {
                                        read_unlock(&ip_ra_lock);
 
                         * itself out.
                         */
                        security_sk_classify_flow(sk, &fl);
-                       if (ip_route_output_flow(sk->sk_net, &rt, &fl, sk, 0))
+                       if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0))
                                goto no_route;
                }
                sk_setup_caps(sk, &rt->u.dst);
                                                 .dport = tcp_hdr(skb)->source } },
                                    .proto = sk->sk_protocol };
                security_skb_classify_flow(skb, &fl);
-               if (ip_route_output_key(sk->sk_net, &rt, &fl))
+               if (ip_route_output_key(sock_net(sk), &rt, &fl))
                        return;
        }
 
 
                struct ip_options * opt = NULL;
                if (optlen > 40 || optlen < 0)
                        goto e_inval;
-               err = ip_options_get_from_user(sk->sk_net, &opt,
+               err = ip_options_get_from_user(sock_net(sk), &opt,
                                               optval, optlen);
                if (err)
                        break;
                                err = 0;
                                break;
                        }
-                       dev = ip_dev_find(sk->sk_net, mreq.imr_address.s_addr);
+                       dev = ip_dev_find(sock_net(sk), mreq.imr_address.s_addr);
                        if (dev) {
                                mreq.imr_ifindex = dev->ifindex;
                                dev_put(dev);
                        }
                } else
-                       dev = __dev_get_by_index(sk->sk_net, mreq.imr_ifindex);
+                       dev = __dev_get_by_index(sock_net(sk), mreq.imr_ifindex);
 
 
                err = -EADDRNOTAVAIL;
 
 {
        rtnl_lock();
        if (sk == mroute_socket) {
-               IPV4_DEVCONF_ALL(sk->sk_net, MC_FORWARDING)--;
+               IPV4_DEVCONF_ALL(sock_net(sk), MC_FORWARDING)--;
 
                write_lock_bh(&mrt_lock);
                mroute_socket=NULL;
                        mroute_socket=sk;
                        write_unlock_bh(&mrt_lock);
 
-                       IPV4_DEVCONF_ALL(sk->sk_net, MC_FORWARDING)++;
+                       IPV4_DEVCONF_ALL(sock_net(sk), MC_FORWARDING)++;
                }
                rtnl_unlock();
                return ret;
 
 
        switch (cmd) {
        case ARPT_SO_SET_REPLACE:
-               ret = compat_do_replace(sk->sk_net, user, len);
+               ret = compat_do_replace(sock_net(sk), user, len);
                break;
 
        case ARPT_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 1);
+               ret = do_add_counters(sock_net(sk), user, len, 1);
                break;
 
        default:
 
        switch (cmd) {
        case ARPT_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 1);
+               ret = get_info(sock_net(sk), user, len, 1);
                break;
        case ARPT_SO_GET_ENTRIES:
-               ret = compat_get_entries(sk->sk_net, user, len);
+               ret = compat_get_entries(sock_net(sk), user, len);
                break;
        default:
                ret = do_arpt_get_ctl(sk, cmd, user, len);
 
        switch (cmd) {
        case ARPT_SO_SET_REPLACE:
-               ret = do_replace(sk->sk_net, user, len);
+               ret = do_replace(sock_net(sk), user, len);
                break;
 
        case ARPT_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 0);
+               ret = do_add_counters(sock_net(sk), user, len, 0);
                break;
 
        default:
 
        switch (cmd) {
        case ARPT_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 0);
+               ret = get_info(sock_net(sk), user, len, 0);
                break;
 
        case ARPT_SO_GET_ENTRIES:
-               ret = get_entries(sk->sk_net, user, len);
+               ret = get_entries(sock_net(sk), user, len);
                break;
 
        case ARPT_SO_GET_REVISION_TARGET: {
 
 
        switch (cmd) {
        case IPT_SO_SET_REPLACE:
-               ret = compat_do_replace(sk->sk_net, user, len);
+               ret = compat_do_replace(sock_net(sk), user, len);
                break;
 
        case IPT_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 1);
+               ret = do_add_counters(sock_net(sk), user, len, 1);
                break;
 
        default:
 
        switch (cmd) {
        case IPT_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 1);
+               ret = get_info(sock_net(sk), user, len, 1);
                break;
        case IPT_SO_GET_ENTRIES:
-               ret = compat_get_entries(sk->sk_net, user, len);
+               ret = compat_get_entries(sock_net(sk), user, len);
                break;
        default:
                ret = do_ipt_get_ctl(sk, cmd, user, len);
 
        switch (cmd) {
        case IPT_SO_SET_REPLACE:
-               ret = do_replace(sk->sk_net, user, len);
+               ret = do_replace(sock_net(sk), user, len);
                break;
 
        case IPT_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 0);
+               ret = do_add_counters(sock_net(sk), user, len, 0);
                break;
 
        default:
 
        switch (cmd) {
        case IPT_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 0);
+               ret = get_info(sock_net(sk), user, len, 0);
                break;
 
        case IPT_SO_GET_ENTRIES:
-               ret = get_entries(sk->sk_net, user, len);
+               ret = get_entries(sock_net(sk), user, len);
                break;
 
        case IPT_SO_GET_REVISION_MATCH:
 
        sk_for_each_from(sk, node) {
                struct inet_sock *inet = inet_sk(sk);
 
-               if (sk->sk_net == net && inet->num == num               &&
+               if (sock_net(sk) == net && inet->num == num             &&
                    !(inet->daddr && inet->daddr != raddr)              &&
                    !(inet->rcv_saddr && inet->rcv_saddr != laddr)      &&
                    !(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
        ipc.oif = sk->sk_bound_dev_if;
 
        if (msg->msg_controllen) {
-               err = ip_cmsg_send(sk->sk_net, msg, &ipc);
+               err = ip_cmsg_send(sock_net(sk), msg, &ipc);
                if (err)
                        goto out;
                if (ipc.opt)
                }
 
                security_sk_classify_flow(sk, &fl);
-               err = ip_route_output_flow(sk->sk_net, &rt, &fl, sk, 1);
+               err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 1);
        }
        if (err)
                goto done;
 
        if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_in))
                goto out;
-       chk_addr_ret = inet_addr_type(sk->sk_net, addr->sin_addr.s_addr);
+       chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr);
        ret = -EADDRNOTAVAIL;
        if (addr->sin_addr.s_addr && chk_addr_ret != RTN_LOCAL &&
            chk_addr_ret != RTN_MULTICAST && chk_addr_ret != RTN_BROADCAST)
                struct hlist_node *node;
 
                sk_for_each(sk, node, &state->h->ht[state->bucket])
-                       if (sk->sk_net == state->p.net)
+                       if (sock_net(sk) == state->p.net)
                                goto found;
        }
        sk = NULL;
                sk = sk_next(sk);
 try_again:
                ;
-       } while (sk && sk->sk_net != state->p.net);
+       } while (sk && sock_net(sk) != state->p.net);
 
        if (!sk && ++state->bucket < RAW_HTABLE_SIZE) {
                sk = sk_head(&state->h->ht[state->bucket]);
 
 
 static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = in_skb->sk->sk_net;
+       struct net *net = sock_net(in_skb->sk);
        struct rtmsg *rtm;
        struct nlattr *tb[RTA_MAX+1];
        struct rtable *rt = NULL;
        int idx, s_idx;
        struct net *net;
 
-       net = skb->sk->sk_net;
+       net = sock_net(skb->sk);
 
        s_h = cb->args[0];
        if (s_h < 0)
 
        if (req)
                return tcp_check_req(sk, skb, req, prev);
 
-       nsk = inet_lookup_established(sk->sk_net, &tcp_hashinfo, iph->saddr,
+       nsk = inet_lookup_established(sock_net(sk), &tcp_hashinfo, iph->saddr,
                        th->source, iph->daddr, th->dest, inet_iif(skb));
 
        if (nsk) {
                while (1) {
                        while (req) {
                                if (req->rsk_ops->family == st->family &&
-                                   req->sk->sk_net == net) {
+                                   sock_net(req->sk) == net) {
                                        cur = req;
                                        goto out;
                                }
        }
 get_sk:
        sk_for_each_from(sk, node) {
-               if (sk->sk_family == st->family && sk->sk_net == net) {
+               if (sk->sk_family == st->family && sock_net(sk) == net) {
                        cur = sk;
                        goto out;
                }
                read_lock_bh(lock);
                sk_for_each(sk, node, &tcp_hashinfo.ehash[st->bucket].chain) {
                        if (sk->sk_family != st->family ||
-                           sk->sk_net != net) {
+                           sock_net(sk) != net) {
                                continue;
                        }
                        rc = sk;
                inet_twsk_for_each(tw, node,
                                   &tcp_hashinfo.ehash[st->bucket].twchain) {
                        if (tw->tw_family != st->family ||
-                           tw->tw_net != net) {
+                           twsk_net(tw) != net) {
                                continue;
                        }
                        rc = tw;
                tw = cur;
                tw = tw_next(tw);
 get_tw:
-               while (tw && (tw->tw_family != st->family || tw->tw_net != net)) {
+               while (tw && (tw->tw_family != st->family || twsk_net(tw) != net)) {
                        tw = tw_next(tw);
                }
                if (tw) {
                sk = sk_next(sk);
 
        sk_for_each_from(sk, node) {
-               if (sk->sk_family == st->family && sk->sk_net == net)
+               if (sk->sk_family == st->family && sock_net(sk) == net)
                        goto found;
        }
 
 
        struct hlist_node *node;
 
        sk_for_each(sk, node, &udptable[num & (UDP_HTABLE_SIZE - 1)])
-               if (sk->sk_net == net && sk->sk_hash == num)
+               if (sock_net(sk) == net && sk->sk_hash == num)
                        return 1;
        return 0;
 }
        struct hlist_head *head;
        struct sock *sk2;
        int    error = 1;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        write_lock_bh(&udp_hash_lock);
 
                sk_for_each(sk2, node, head)
                        if (sk2->sk_hash == snum                             &&
                            sk2 != sk                                        &&
-                           sk2->sk_net == net                               &&
+                           sock_net(sk2) == net                                     &&
                            (!sk2->sk_reuse        || !sk->sk_reuse)         &&
                            (!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if
                             || sk2->sk_bound_dev_if == sk->sk_bound_dev_if) &&
        sk_for_each(sk, node, &udptable[hnum & (UDP_HTABLE_SIZE - 1)]) {
                struct inet_sock *inet = inet_sk(sk);
 
-               if (sk->sk_net == net && sk->sk_hash == hnum &&
+               if (sock_net(sk) == net && sk->sk_hash == hnum &&
                                !ipv6_only_sock(sk)) {
                        int score = (sk->sk_family == PF_INET ? 1 : 0);
                        if (inet->rcv_saddr) {
 
        ipc.oif = sk->sk_bound_dev_if;
        if (msg->msg_controllen) {
-               err = ip_cmsg_send(sk->sk_net, msg, &ipc);
+               err = ip_cmsg_send(sock_net(sk), msg, &ipc);
                if (err)
                        return err;
                if (ipc.opt)
                                               { .sport = inet->sport,
                                                 .dport = dport } } };
                security_sk_classify_flow(sk, &fl);
-               err = ip_route_output_flow(sk->sk_net, &rt, &fl, sk, 1);
+               err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 1);
                if (err) {
                        if (err == -ENETUNREACH)
                                IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
        for (state->bucket = 0; state->bucket < UDP_HTABLE_SIZE; ++state->bucket) {
                struct hlist_node *node;
                sk_for_each(sk, node, state->hashtable + state->bucket) {
-                       if (sk->sk_net != net)
+                       if (sock_net(sk) != net)
                                continue;
                        if (sk->sk_family == state->family)
                                goto found;
                sk = sk_next(sk);
 try_again:
                ;
-       } while (sk && (sk->sk_net != net || sk->sk_family != state->family));
+       } while (sk && (sock_net(sk) != net || sk->sk_family != state->family));
 
        if (!sk && ++state->bucket < UDP_HTABLE_SIZE) {
                sk = sk_head(state->hashtable + state->bucket);
 
 static int
 inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifaddrmsg *ifm;
        struct nlattr *tb[IFA_MAX+1];
        struct in6_addr *pfx;
 static int
 inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifaddrmsg *ifm;
        struct nlattr *tb[IFA_MAX+1];
        struct in6_addr *pfx;
        struct inet6_ifaddr *ifa;
        struct ifmcaddr6 *ifmca;
        struct ifacaddr6 *ifaca;
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
 
        s_idx = cb->args[0];
        s_ip_idx = ip_idx = cb->args[1];
 static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr* nlh,
                             void *arg)
 {
-       struct net *net = in_skb->sk->sk_net;
+       struct net *net = sock_net(in_skb->sk);
        struct ifaddrmsg *ifm;
        struct nlattr *tb[IFA_MAX+1];
        struct in6_addr *addr = NULL;
 
 static int inet6_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int idx, err;
        int s_idx = cb->args[0];
        struct net_device *dev;
 
 static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh,
                             void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ifaddrlblmsg *ifal;
        struct nlattr *tb[IFAL_MAX+1];
        struct in6_addr *pfx;
 
 static int ip6addrlbl_dump(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct ip6addrlbl_entry *p;
        struct hlist_node *pos;
        int idx = 0, s_idx = cb->args[0];
 static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr* nlh,
                          void *arg)
 {
-       struct net *net = in_skb->sk->sk_net;
+       struct net *net = sock_net(in_skb->sk);
        struct ifaddrlblmsg *ifal;
        struct nlattr *tb[IFAL_MAX+1];
        struct in6_addr *addr;
 
        struct sock *sk = sock->sk;
        struct inet_sock *inet = inet_sk(sk);
        struct ipv6_pinfo *np = inet6_sk(sk);
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        __be32 v4addr = 0;
        unsigned short snum;
        int addr_type = 0;
 int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        switch(cmd)
        {
 
                               struct nlattr **tb)
 {
        int err = -EINVAL;
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct fib6_rule *rule6 = (struct fib6_rule *) rule;
 
        if (rule->action == FR_ACT_TO_TBL) {
 
                                     struct flowi *fl)
 {
        struct dst_entry *dst;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        int res = 0;
 
        /* Informational messages are not limited. */
 
 
        read_lock(&hashinfo->lhash_lock);
        sk_for_each(sk, node, &hashinfo->listening_hash[inet_lhashfn(hnum)]) {
-               if (sk->sk_net == net && inet_sk(sk)->num == hnum &&
+               if (sock_net(sk) == net && inet_sk(sk)->num == hnum &&
                                sk->sk_family == PF_INET6) {
                        const struct ipv6_pinfo *np = inet6_sk(sk);
 
        struct sock *sk2;
        const struct hlist_node *node;
        struct inet_timewait_sock *tw;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        prefetch(head->chain.first);
        write_lock(lock);
 
 
 static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        unsigned int h, s_h;
        unsigned int e = 0, s_e;
        struct rt6_rtnl_dump_arg arg;
 
                               struct dst_entry **dst, struct flowi *fl)
 {
        int err;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        if (*dst == NULL)
                *dst = ip6_route_output(net, sk, fl);
 
                    char __user *optval, int optlen)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        int val, valbool;
        int retv = -ENOPROTOOPT;
 
 
        struct net_device *dev = NULL;
        struct ipv6_mc_socklist *mc_lst;
        struct ipv6_pinfo *np = inet6_sk(sk);
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        int err;
 
        if (!ipv6_addr_is_multicast(addr))
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct ipv6_mc_socklist *mc_lst, **lnk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        write_lock_bh(&ipv6_sk_mc_lock);
        for (lnk = &np->ipv6_mc_list; (mc_lst = *lnk) !=NULL ; lnk = &mc_lst->next) {
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct ipv6_mc_socklist *mc_lst;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        write_lock_bh(&ipv6_sk_mc_lock);
        while ((mc_lst = np->ipv6_mc_list) != NULL) {
        struct inet6_dev *idev;
        struct ipv6_pinfo *inet6 = inet6_sk(sk);
        struct ip6_sf_socklist *psl;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        int i, j, rv;
        int leavegroup = 0;
        int pmclocked = 0;
        struct inet6_dev *idev;
        struct ipv6_pinfo *inet6 = inet6_sk(sk);
        struct ip6_sf_socklist *newpsl, *psl;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        int leavegroup = 0;
        int i, err;
 
        struct net_device *dev;
        struct ipv6_pinfo *inet6 = inet6_sk(sk);
        struct ip6_sf_socklist *psl;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
 
        group = &((struct sockaddr_in6 *)&gsf->gf_group)->sin6_addr;
 
 
 
        switch (cmd) {
        case IP6T_SO_SET_REPLACE:
-               ret = compat_do_replace(sk->sk_net, user, len);
+               ret = compat_do_replace(sock_net(sk), user, len);
                break;
 
        case IP6T_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 1);
+               ret = do_add_counters(sock_net(sk), user, len, 1);
                break;
 
        default:
 
        switch (cmd) {
        case IP6T_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 1);
+               ret = get_info(sock_net(sk), user, len, 1);
                break;
        case IP6T_SO_GET_ENTRIES:
-               ret = compat_get_entries(sk->sk_net, user, len);
+               ret = compat_get_entries(sock_net(sk), user, len);
                break;
        default:
                ret = do_ip6t_get_ctl(sk, cmd, user, len);
 
        switch (cmd) {
        case IP6T_SO_SET_REPLACE:
-               ret = do_replace(sk->sk_net, user, len);
+               ret = do_replace(sock_net(sk), user, len);
                break;
 
        case IP6T_SO_SET_ADD_COUNTERS:
-               ret = do_add_counters(sk->sk_net, user, len, 0);
+               ret = do_add_counters(sock_net(sk), user, len, 0);
                break;
 
        default:
 
        switch (cmd) {
        case IP6T_SO_GET_INFO:
-               ret = get_info(sk->sk_net, user, len, 0);
+               ret = get_info(sock_net(sk), user, len, 0);
                break;
 
        case IP6T_SO_GET_ENTRIES:
-               ret = get_entries(sk->sk_net, user, len);
+               ret = get_entries(sock_net(sk), user, len);
                break;
 
        case IP6T_SO_GET_REVISION_MATCH:
 
                if (inet_sk(sk)->num == num) {
                        struct ipv6_pinfo *np = inet6_sk(sk);
 
-                       if (sk->sk_net != net)
+                       if (sock_net(sk) != net)
                                continue;
 
                        if (!ipv6_addr_any(&np->daddr) &&
                        if (!sk->sk_bound_dev_if)
                                goto out;
 
-                       dev = dev_get_by_index(sk->sk_net, sk->sk_bound_dev_if);
+                       dev = dev_get_by_index(sock_net(sk), sk->sk_bound_dev_if);
                        if (!dev) {
                                err = -ENODEV;
                                goto out;
                v4addr = LOOPBACK4_IPV6;
                if (!(addr_type & IPV6_ADDR_MULTICAST)) {
                        err = -EADDRNOTAVAIL;
-                       if (!ipv6_chk_addr(sk->sk_net, &addr->sin6_addr,
+                       if (!ipv6_chk_addr(sock_net(sk), &addr->sin6_addr,
                                           dev, 0)) {
                                if (dev)
                                        dev_put(dev);
 
 
        cfg->fc_nlinfo.pid = NETLINK_CB(skb).pid;
        cfg->fc_nlinfo.nlh = nlh;
-       cfg->fc_nlinfo.nl_net = skb->sk->sk_net;
+       cfg->fc_nlinfo.nl_net = sock_net(skb->sk);
 
        if (tb[RTA_GATEWAY]) {
                nla_memcpy(&cfg->fc_gateway, tb[RTA_GATEWAY], 16);
 
 static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg)
 {
-       struct net *net = in_skb->sk->sk_net;
+       struct net *net = sock_net(in_skb->sk);
        struct nlattr *tb[RTA_MAX+1];
        struct rt6_info *rt;
        struct sk_buff *skb;
 
        if (req)
                return tcp_check_req(sk, skb, req, prev);
 
-       nsk = __inet6_lookup_established(sk->sk_net, &tcp_hashinfo,
+       nsk = __inet6_lookup_established(sock_net(sk), &tcp_hashinfo,
                        &ipv6_hdr(skb)->saddr, th->source,
                        &ipv6_hdr(skb)->daddr, ntohs(th->dest), inet6_iif(skb));
 
 
        sk_for_each(sk, node, &udptable[hnum & (UDP_HTABLE_SIZE - 1)]) {
                struct inet_sock *inet = inet_sk(sk);
 
-               if (sk->sk_net == net && sk->sk_hash == hnum &&
+               if (sock_net(sk) == net && sk->sk_hash == hnum &&
                                sk->sk_family == PF_INET6) {
                        struct ipv6_pinfo *np = inet6_sk(sk);
                        int score = 0;
        sk_for_each_from(s, node) {
                struct inet_sock *inet = inet_sk(s);
 
-               if (s->sk_net != sk->sk_net)
+               if (sock_net(s) != sock_net(sk))
                        continue;
 
                if (s->sk_hash == num && s->sk_family == PF_INET6) {
 
 
        IRDA_DEBUG(2, "%s()\n", __func__);
 
-       err = irda_create(sk->sk_net, newsock, sk->sk_protocol);
+       err = irda_create(sock_net(sk), newsock, sk->sk_protocol);
        if (err)
                return err;
 
 
                                             struct llc_addr *saddr,
                                             struct llc_addr *daddr)
 {
-       struct sock *newsk = llc_sk_alloc(sk->sk_net, sk->sk_family, GFP_ATOMIC,
+       struct sock *newsk = llc_sk_alloc(sock_net(sk), sk->sk_family, GFP_ATOMIC,
                                          sk->sk_prot);
        struct llc_sock *newllc, *llc = llc_sk(sk);
 
 
 {
        struct nf_sockopt_ops *ops;
 
-       if (sk->sk_net != &init_net)
+       if (sock_net(sk) != &init_net)
                return ERR_PTR(-ENOPROTOOPT);
 
        if (mutex_lock_interruptible(&nf_sockopt_mutex) != 0)
 
        read_lock(&nl_table_lock);
        head = nl_pid_hashfn(hash, pid);
        sk_for_each(sk, node, head) {
-               if ((sk->sk_net == net) && (nlk_sk(sk)->pid == pid)) {
+               if (sock_net(sk) == net && (nlk_sk(sk)->pid == pid)) {
                        sock_hold(sk);
                        goto found;
                }
        head = nl_pid_hashfn(hash, pid);
        len = 0;
        sk_for_each(osk, node, head) {
-               if ((osk->sk_net == net) && (nlk_sk(osk)->pid == pid))
+               if (sock_net(osk) == net && (nlk_sk(osk)->pid == pid))
                        break;
                len++;
        }
 
        if (nlk->pid && !nlk->subscriptions) {
                struct netlink_notify n = {
-                                               .net = sk->sk_net,
+                                               .net = sock_net(sk),
                                                .protocol = sk->sk_protocol,
                                                .pid = nlk->pid,
                                          };
 static int netlink_autobind(struct socket *sock)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct nl_pid_hash *hash = &nl_table[sk->sk_protocol].hash;
        struct hlist_head *head;
        struct sock *osk;
        netlink_table_grab();
        head = nl_pid_hashfn(hash, pid);
        sk_for_each(osk, node, head) {
-               if ((osk->sk_net != net))
+               if (sock_net(osk) != net)
                        continue;
                if (nlk_sk(osk)->pid == pid) {
                        /* Bind collision, search negative pid values. */
                        int addr_len)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct netlink_sock *nlk = nlk_sk(sk);
        struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
        int err;
        struct sock *sock;
        struct netlink_sock *nlk;
 
-       sock = netlink_lookup(ssk->sk_net, ssk->sk_protocol, pid);
+       sock = netlink_lookup(sock_net(ssk), ssk->sk_protocol, pid);
        if (!sock)
                return ERR_PTR(-ECONNREFUSED);
 
            !test_bit(p->group - 1, nlk->groups))
                goto out;
 
-       if ((sk->sk_net != p->net))
+       if (sock_net(sk) != p->net)
                goto out;
 
        if (p->failure) {
 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
                      u32 group, gfp_t allocation)
 {
-       struct net *net = ssk->sk_net;
+       struct net *net = sock_net(ssk);
        struct netlink_broadcast_data info;
        struct hlist_node *node;
        struct sock *sk;
        if (sk == p->exclude_sk)
                goto out;
 
-       if (sk->sk_net != p->exclude_sk->sk_net)
+       if (sock_net(sk) != sock_net(p->exclude_sk))
                goto out;
 
        if (nlk->pid == p->pid || p->group - 1 >= nlk->ngroups ||
        atomic_inc(&skb->users);
        cb->skb = skb;
 
-       sk = netlink_lookup(ssk->sk_net, ssk->sk_protocol, NETLINK_CB(skb).pid);
+       sk = netlink_lookup(sock_net(ssk), ssk->sk_protocol, NETLINK_CB(skb).pid);
        if (sk == NULL) {
                netlink_destroy_callback(cb);
                return -ECONNREFUSED;
        if (!skb) {
                struct sock *sk;
 
-               sk = netlink_lookup(in_skb->sk->sk_net,
+               sk = netlink_lookup(sock_net(in_skb->sk),
                                    in_skb->sk->sk_protocol,
                                    NETLINK_CB(in_skb).pid);
                if (sk) {
 
                for (j = 0; j <= hash->mask; j++) {
                        sk_for_each(s, node, &hash->table[j]) {
-                               if (iter->p.net != s->sk_net)
+                               if (sock_net(s) != iter->p.net)
                                        continue;
                                if (off == pos) {
                                        iter->link = i;
        s = v;
        do {
                s = sk_next(s);
-       } while (s && (iter->p.net != s->sk_net));
+       } while (s && (sock_net(s) != iter->p.net));
        if (s)
                return s;
 
 
                for (; j <= hash->mask; j++) {
                        s = sk_head(&hash->table[j]);
-                       while (s && (iter->p.net != s->sk_net))
+                       while (s && sock_net(s) != iter->p.net)
                                s = sk_next(s);
                        if (s) {
                                iter->link = i;
 
        if (osk->sk_type != SOCK_SEQPACKET)
                return NULL;
 
-       sk = sk_alloc(osk->sk_net, PF_NETROM, GFP_ATOMIC, osk->sk_prot);
+       sk = sk_alloc(sock_net(osk), PF_NETROM, GFP_ATOMIC, osk->sk_prot);
        if (sk == NULL)
                return NULL;
 
 
        if (skb->pkt_type == PACKET_LOOPBACK)
                goto out;
 
-       if (dev_net(dev) != sk->sk_net)
+       if (dev_net(dev) != sock_net(sk))
                goto out;
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
         */
 
        saddr->spkt_device[13] = 0;
-       dev = dev_get_by_name(sk->sk_net, saddr->spkt_device);
+       dev = dev_get_by_name(sock_net(sk), saddr->spkt_device);
        err = -ENODEV;
        if (dev == NULL)
                goto out_unlock;
        sk = pt->af_packet_priv;
        po = pkt_sk(sk);
 
-       if (dev_net(dev) != sk->sk_net)
+       if (dev_net(dev) != sock_net(sk))
                goto drop;
 
        skb->dev = dev;
        sk = pt->af_packet_priv;
        po = pkt_sk(sk);
 
-       if (dev_net(dev) != sk->sk_net)
+       if (dev_net(dev) != sock_net(sk))
                goto drop;
 
        if (dev->header_ops) {
        }
 
 
-       dev = dev_get_by_index(sk->sk_net, ifindex);
+       dev = dev_get_by_index(sock_net(sk), ifindex);
        err = -ENXIO;
        if (dev == NULL)
                goto out_unlock;
        if (!sk)
                return 0;
 
-       net = sk->sk_net;
+       net = sock_net(sk);
        po = pkt_sk(sk);
 
        write_lock_bh(&net->packet.sklist_lock);
                return -EINVAL;
        strlcpy(name,uaddr->sa_data,sizeof(name));
 
-       dev = dev_get_by_name(sk->sk_net, name);
+       dev = dev_get_by_name(sock_net(sk), name);
        if (dev) {
                err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
                dev_put(dev);
 
        if (sll->sll_ifindex) {
                err = -ENODEV;
-               dev = dev_get_by_index(sk->sk_net, sll->sll_ifindex);
+               dev = dev_get_by_index(sock_net(sk), sll->sll_ifindex);
                if (dev == NULL)
                        goto out;
        }
                return -EOPNOTSUPP;
 
        uaddr->sa_family = AF_PACKET;
-       dev = dev_get_by_index(sk->sk_net, pkt_sk(sk)->ifindex);
+       dev = dev_get_by_index(sock_net(sk), pkt_sk(sk)->ifindex);
        if (dev) {
                strlcpy(uaddr->sa_data, dev->name, 15);
                dev_put(dev);
        sll->sll_family = AF_PACKET;
        sll->sll_ifindex = po->ifindex;
        sll->sll_protocol = po->num;
-       dev = dev_get_by_index(sk->sk_net, po->ifindex);
+       dev = dev_get_by_index(sock_net(sk), po->ifindex);
        if (dev) {
                sll->sll_hatype = dev->type;
                sll->sll_halen = dev->addr_len;
        rtnl_lock();
 
        err = -ENODEV;
-       dev = __dev_get_by_index(sk->sk_net, mreq->mr_ifindex);
+       dev = __dev_get_by_index(sock_net(sk), mreq->mr_ifindex);
        if (!dev)
                goto done;
 
                        if (--ml->count == 0) {
                                struct net_device *dev;
                                *mlp = ml->next;
-                               dev = dev_get_by_index(sk->sk_net, ml->ifindex);
+                               dev = dev_get_by_index(sock_net(sk), ml->ifindex);
                                if (dev) {
                                        packet_dev_mc(dev, ml, -1);
                                        dev_put(dev);
                struct net_device *dev;
 
                po->mclist = ml->next;
-               if ((dev = dev_get_by_index(sk->sk_net, ml->ifindex)) != NULL) {
+               if ((dev = dev_get_by_index(sock_net(sk), ml->ifindex)) != NULL) {
                        packet_dev_mc(dev, ml, -1);
                        dev_put(dev);
                }
                case SIOCGIFDSTADDR:
                case SIOCSIFDSTADDR:
                case SIOCSIFFLAGS:
-                       if (sk->sk_net != &init_net)
+                       if (sock_net(sk) != &init_net)
                                return -ENOIOCTLCMD;
                        return inet_dgram_ops.ioctl(sock, cmd, arg);
 #endif
 
        if (osk->sk_type != SOCK_SEQPACKET)
                return NULL;
 
-       sk = sk_alloc(osk->sk_net, PF_ROSE, GFP_ATOMIC, &rose_proto);
+       sk = sk_alloc(sock_net(osk), PF_ROSE, GFP_ATOMIC, &rose_proto);
        if (sk == NULL)
                return NULL;
 
 
 
 static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlattr *tca[TCA_ACT_MAX + 1];
        u32 pid = skb ? NETLINK_CB(skb).pid : 0;
        int ret = 0, ovr = 0;
 static int
 tc_dump_action(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlmsghdr *nlh;
        unsigned char *b = skb_tail_pointer(skb);
        struct nlattr *nest;
 
 
 static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct nlattr *tca[TCA_MAX + 1];
        struct tcmsg *t;
        u32 protocol;
 
 static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int t;
        int s_t;
        struct net_device *dev;
 
 
 static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct tcmsg *tcm = NLMSG_DATA(n);
        struct nlattr *tca[TCA_MAX + 1];
        struct net_device *dev;
 
 static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct tcmsg *tcm;
        struct nlattr *tca[TCA_MAX + 1];
        struct net_device *dev;
 
 static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int idx, q_idx;
        int s_idx, s_q_idx;
        struct net_device *dev;
 
 static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        struct tcmsg *tcm = NLMSG_DATA(n);
        struct nlattr *tca[TCA_MAX + 1];
        struct net_device *dev;
 
 static int tc_dump_tclass(struct sk_buff *skb, struct netlink_callback *cb)
 {
-       struct net *net = skb->sk->sk_net;
+       struct net *net = sock_net(skb->sk);
        int t;
        int s_t;
        struct net_device *dev;
 
        struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
        struct sctp6_sock *newsctp6sk;
 
-       newsk = sk_alloc(sk->sk_net, PF_INET6, GFP_KERNEL, sk->sk_prot);
+       newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot);
        if (!newsk)
                goto out;
 
 
 {
        struct inet_sock *inet = inet_sk(sk);
        struct inet_sock *newinet;
-       struct sock *newsk = sk_alloc(sk->sk_net, PF_INET, GFP_KERNEL,
+       struct sock *newsk = sk_alloc(sock_net(sk), PF_INET, GFP_KERNEL,
                        sk->sk_prot);
 
        if (!newsk)
 
 
        sock = file->private_data;
        sk = sock->sk;
-       net = sk->sk_net;
+       net = sock_net(sk);
        if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
                err = dev_ioctl(net, cmd, argp);
        } else
 
        sock = sockfd_lookup_light(fd, &err, &fput_needed);
        if (sock) {
-               somaxconn = sock->sk->sk_net->sysctl_somaxconn;
+               somaxconn = sock_net(sock->sk)->sysctl_somaxconn;
                if ((unsigned)backlog > somaxconn)
                        backlog = somaxconn;
 
 
        }
        buf = skb_peek(&sock->sk->sk_receive_queue);
 
-       res = tipc_create(sock->sk->sk_net, newsock, 0);
+       res = tipc_create(sock_net(sock->sk), newsock, 0);
        if (!res) {
                struct tipc_sock *new_tsock = tipc_sk(newsock->sk);
                struct tipc_portid id;
 
        sk_for_each(s, node, &unix_socket_table[hash ^ type]) {
                struct unix_sock *u = unix_sk(s);
 
-               if (s->sk_net != net)
+               if (sock_net(s) != net)
                        continue;
 
                if (u->addr->len == len &&
                    &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
                struct dentry *dentry = unix_sk(s)->dentry;
 
-               if (s->sk_net != net)
+               if (sock_net(s) != net)
                        continue;
 
                if(dentry && dentry->d_inode == i)
 static int unix_autobind(struct socket *sock)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct unix_sock *u = unix_sk(sk);
        static u32 ordernum = 1;
        struct unix_address * addr;
 static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct unix_sock *u = unix_sk(sk);
        struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr;
        struct dentry * dentry = NULL;
                              int alen, int flags)
 {
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct sockaddr_un *sunaddr=(struct sockaddr_un*)addr;
        struct sock *other;
        unsigned hash;
 {
        struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr;
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct unix_sock *u = unix_sk(sk), *newu, *otheru;
        struct sock *newsk = NULL;
        struct sock *other = NULL;
        err = -ENOMEM;
 
        /* create new sock for complete connection */
-       newsk = unix_create1(sk->sk_net, NULL);
+       newsk = unix_create1(sock_net(sk), NULL);
        if (newsk == NULL)
                goto out;
 
 {
        struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
        struct sock *sk = sock->sk;
-       struct net *net = sk->sk_net;
+       struct net *net = sock_net(sk);
        struct unix_sock *u = unix_sk(sk);
        struct sockaddr_un *sunaddr=msg->msg_name;
        struct sock *other = NULL;
        struct sock *s;
 
        for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) {
-               if (s->sk_net != iter->p.net)
+               if (sock_net(s) != iter->p.net)
                        continue;
                if (off == pos)
                        return s;
                sk = first_unix_socket(&iter->i);
        else
                sk = next_unix_socket(&iter->i, sk);
-       while (sk && (sk->sk_net != iter->p.net))
+       while (sk && (sock_net(sk) != iter->p.net))
                sk = next_unix_socket(&iter->i, sk);
        return sk;
 }
 
        if (osk->sk_type != SOCK_SEQPACKET)
                goto out;
 
-       if ((sk = x25_alloc_socket(osk->sk_net)) == NULL)
+       if ((sk = x25_alloc_socket(sock_net(osk))) == NULL)
                goto out;
 
        x25 = x25_sk(sk);