struct dst_entry *dst = skb->dst;
        struct ipv6hdr *hdr = ipv6_hdr(skb);
        struct inet6_skb_parm *opt = IP6CB(skb);
+       struct net *net = dst->dev->nd_net;
 
        if (ipv6_devconf.forwarding == 0)
                goto error;
 
        /* XXX: idev->cnf.proxy_ndp? */
        if (ipv6_devconf.proxy_ndp &&
-           pneigh_lookup(&nd_tbl, &init_net, &hdr->daddr, skb->dev, 0)) {
+           pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
                int proxied = ip6_forward_proxy_check(skb);
                if (proxied > 0)
                        return ip6_input(skb);
                               struct dst_entry **dst, struct flowi *fl)
 {
        int err;
+       struct net *net = sk->sk_net;
 
        if (*dst == NULL)
-               *dst = ip6_route_output(sk->sk_net, sk, fl);
+               *dst = ip6_route_output(net, sk, fl);
 
        if ((err = (*dst)->error))
                goto out_err_release;
                        struct flowi fl_gw;
                        int redirect;
 
-                       ifp = ipv6_get_ifaddr(&init_net, &fl->fl6_src,
+                       ifp = ipv6_get_ifaddr(net, &fl->fl6_src,
                                              (*dst)->dev, 1);
 
                        redirect = (ifp && ifp->flags & IFA_F_OPTIMISTIC);
                                dst_release(*dst);
                                memcpy(&fl_gw, fl, sizeof(struct flowi));
                                memset(&fl_gw.fl6_dst, 0, sizeof(struct in6_addr));
-                               *dst = ip6_route_output(sk->sk_net, sk, &fl_gw);
+                               *dst = ip6_route_output(net, sk, &fl_gw);
                                if ((err = (*dst)->error))
                                        goto out_err_release;
                        }
 
                    char __user *optval, int optlen)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
+       struct net *net = sk->sk_net;
        int val, valbool;
        int retv = -ENOPROTOOPT;
 
                        if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)
                                goto e_inval;
 
-                       if (__dev_get_by_index(&init_net, val) == NULL) {
+                       if (__dev_get_by_index(net, val) == NULL) {
                                retv = -ENODEV;
                                break;
                        }
 
        skb_reset_mac_header(skb);
        skb_reserve(skb, MAX_HEADER + sizeof(struct ipv6hdr));
 
-       rt = (struct rt6_info*) ip6_route_output(&init_net, NULL, &fl);
+       rt = (struct rt6_info*) ip6_route_output(net, NULL, &fl);
        skb->dst = &rt->u.dst;
 
        err = rt6_fill_node(skb, rt, &fl.fl6_dst, &fl.fl6_src, iif,