Introduce per-net_device inlines: dev_net(), dev_net_set().
Without CONFIG_NET_NS, no namespace other than &init_net exists.
Let's explicitly define them to help compiler optimizations.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
                return NOTIFY_DONE;
        }
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if ( event != NETDEV_UP && event != NETDEV_DOWN ) return NOTIFY_DONE;
 
        struct aoe_hdr *h;
        u32 n;
 
-       if (ifp->nd_net != &init_net)
+       if (dev_net(ifp) != &init_net)
                goto exit;
 
        skb = skb_share_check(skb, GFP_ATOMIC);
 
        struct slave *slave = NULL;
        int ret = NET_RX_DROP;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto out;
 
        if (!(dev->flags & IFF_MASTER))
 
        struct arp_pkt *arp = (struct arp_pkt *)skb->data;
        int res = NET_RX_DROP;
 
-       if (bond_dev->nd_net != &init_net)
+       if (dev_net(bond_dev) != &init_net)
                goto out;
 
        if (!(bond_dev->flags & IFF_MASTER))
 
        unsigned char *arp_ptr;
        __be32 sip, tip;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto out;
 
        if (!(dev->priv_flags & IFF_BONDING) || !(dev->flags & IFF_MASTER))
 {
        struct net_device *event_dev = (struct net_device *)ptr;
 
-       if (event_dev->nd_net != &init_net)
+       if (dev_net(event_dev) != &init_net)
                return NOTIFY_DONE;
 
        dprintk("event_dev: %s, event: %lx\n",
        struct bonding *bond, *bond_next;
        struct vlan_entry *vlan, *vlan_next;
 
-       if (ifa->ifa_dev->dev->nd_net != &init_net)
+       if (dev_net(ifa->ifa_dev->dev) != &init_net)
                return NOTIFY_DONE;
 
        list_for_each_entry_safe(bond, bond_next, &bond_dev_list, bond_list) {
 
        struct ethhdr *eth;
        struct bpqdev *bpq;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
 {
        struct net_device *dev = (struct net_device *)ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (!dev_is_ethdev(dev))
 
        if (!dev)
                goto out;
 
-       dev->nd_net = net;
+       dev_net_set(dev, net);
        err = register_netdev(dev);
        if (err)
                goto out_free_netdev;
 
        if (!tb[IFLA_LINK])
                return -EINVAL;
 
-       lowerdev = __dev_get_by_index(dev->nd_net, nla_get_u32(tb[IFLA_LINK]));
+       lowerdev = __dev_get_by_index(dev_net(dev), nla_get_u32(tb[IFLA_LINK]));
        if (lowerdev == NULL)
                return -ENODEV;
 
 
 {
        struct net_device *dev = (struct net_device *) ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* Only look at sockets that are using this specific device. */
        if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
                goto out;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
        struct pppoe_hdr *ph;
        struct pppox_sock *po;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto abort;
 
        if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
 
        else
                snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
 
-       peer = rtnl_create_link(dev->nd_net, ifname, &veth_link_ops, tbp);
+       peer = rtnl_create_link(dev_net(dev), ifname, &veth_link_ops, tbp);
        if (IS_ERR(peer))
                return PTR_ERR(peer);
 
 
        struct velocity_info *vptr;
        unsigned long flags;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        spin_lock_irqsave(&velocity_dev_list_lock, flags);
 
 {
        struct net_device *dev = (struct net_device *) ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_UNREGISTER) {
 
 {
        struct hdlc_device *hdlc = dev_to_hdlc(dev);
 
-       if (dev->nd_net != &init_net) {
+       if (dev_net(dev) != &init_net) {
                kfree_skb(skb);
                return 0;
        }
        unsigned long flags;
        int on;
  
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->get_stats != hdlc_get_stats)
 
        int len, err;
        struct lapbethdev *lapbeth;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
        struct lapbethdev *lapbeth;
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (!dev_is_ethdev(dev))
 
 
 static int sppp_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *p, struct net_device *orig_dev)
 {
-       if (dev->nd_net != &init_net) {
+       if (dev_net(dev) != &init_net) {
                kfree_skb(skb);
                return 0;
        }
 
        struct qeth_ipaddr *addr;
        struct qeth_card *card;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        QETH_DBF_TEXT(trace, 3, "ipevent");
 
        ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val))
 
 #define IN_DEV_ANDCONF(in_dev, attr) \
-       (IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) && \
+       (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \
         IN_DEV_CONF_GET((in_dev), attr))
 #define IN_DEV_ORCONF(in_dev, attr) \
-       (IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) || \
+       (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) || \
         IN_DEV_CONF_GET((in_dev), attr))
 #define IN_DEV_MAXCONF(in_dev, attr) \
-       (max(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr), \
+       (max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), \
             IN_DEV_CONF_GET((in_dev), attr)))
 
 #define IN_DEV_FORWARD(in_dev)         IN_DEV_CONF_GET((in_dev), FORWARDING)
 
        void                    (*poll_controller)(struct net_device *dev);
 #endif
 
+#ifdef CONFIG_NET_NS
        /* Network namespace this network device is inside */
        struct net              *nd_net;
+#endif
 
        /* bridge stuff */
        struct net_bridge_port  *br_port;
 #define        NETDEV_ALIGN            32
 #define        NETDEV_ALIGN_CONST      (NETDEV_ALIGN - 1)
 
+/*
+ * Net namespace inlines
+ */
+static inline
+struct net *dev_net(const struct net_device *dev)
+{
+#ifdef CONFIG_NET_NS
+       return dev->nd_net;
+#else
+       return &init_net;
+#endif
+}
+
+static inline
+void dev_net_set(struct net_device *dev, const struct net *net)
+{
+#ifdef CONFIG_NET_NS
+       dev->nd_dev = net;
+#endif
+}
+
 /**
  *     netdev_priv - access network device private data
  *     @dev: network device
        struct list_head *lh;
        struct net *net;
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        lh = dev->dev_list.next;
        return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
 }
 
        int i, flgs;
        struct net_device *vlandev;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (!grp)
 
        struct net_device_stats *stats;
        unsigned short vlan_TCI;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto err_free;
 
        skb = skb_share_check(skb, GFP_ATOMIC);
 
        struct net_device *dev = ptr;
        int ct;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_DOWN) {
        struct atalk_addr sa, *ma, da;
        struct atalk_iface *ifa;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto out0;
 
        /* We only do Ethernet SNAP AARP. */
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_DOWN)
        int origlen;
        __u16 len_hops;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto freeit;
 
        /* Don't mangle buffer if shared */
 static int ltalk_rcv(struct sk_buff *skb, struct net_device *dev,
                     struct packet_type *pt, struct net_device *orig_dev)
 {
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto freeit;
 
        /* Expand any short form frames */
 
 {
        struct net_device *dev = arg;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_UNREGISTER) {
 
 
        dev = (struct net_device *)dev_ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->name == NULL || strncmp(dev->name, "lec", 3))
 
 {
        struct net_device *dev = (struct net_device *)ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* Reject non AX.25 devices */
 
        skb->sk = NULL;         /* Initially we don't know who it's for */
        skb->destructor = NULL; /* Who initializes this, dammit?! */
 
-       if (dev->nd_net != &init_net) {
+       if (dev_net(dev) != &init_net) {
                kfree_skb(skb);
                return 0;
        }
 
        struct net_bridge_port *p = dev->br_port;
        struct net_bridge *br;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* not a port of a bridge */
 
        struct net_bridge *br;
        const unsigned char *buf;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto err;
 
        if (!p)
 
        struct dev_rcv_lists *d;
        int matches;
 
-       if (dev->type != ARPHRD_CAN || dev->nd_net != &init_net) {
+       if (dev->type != ARPHRD_CAN || dev_net(dev) != &init_net) {
                kfree_skb(skb);
                return 0;
        }
        struct net_device *dev = (struct net_device *)data;
        struct dev_rcv_lists *d;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->type != ARPHRD_CAN)
 
        struct bcm_op *op;
        int notify_enodev = 0;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->type != ARPHRD_CAN)
 
        struct raw_sock *ro = container_of(nb, struct raw_sock, notifier);
        struct sock *sk = &ro->sk;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->type != ARPHRD_CAN)
 
 /* Device list insertion */
 static int list_netdevice(struct net_device *dev)
 {
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        ASSERT_RTNL();
 
        struct net *net;
        int ret;
 
-       BUG_ON(!dev->nd_net);
-       net = dev->nd_net;
+       BUG_ON(!dev_net(dev));
+       net = dev_net(dev);
        ret = __dev_alloc_name(net, name, buf);
        if (ret >= 0)
                strlcpy(dev->name, buf, IFNAMSIZ);
        struct net *net;
 
        ASSERT_RTNL();
-       BUG_ON(!dev->nd_net);
+       BUG_ON(!dev_net(dev));
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        if (dev->flags & IFF_UP)
                return -EBUSY;
 
 
        if (v == SEQ_START_TOKEN)
                seq_puts(seq, "Type Device      Function\n");
-       else if (pt->dev == NULL || pt->dev->nd_net == seq_file_net(seq)) {
+       else if (pt->dev == NULL || dev_net(pt->dev) == seq_file_net(seq)) {
                if (pt->type == htons(ETH_P_ALL))
                        seq_puts(seq, "ALL ");
                else
 
        /* When net_device's are persistent, this will be fatal. */
        BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
-       BUG_ON(!dev->nd_net);
-       net = dev->nd_net;
+       BUG_ON(!dev_net(dev));
+       net = dev_net(dev);
 
        spin_lock_init(&dev->queue_lock);
        spin_lock_init(&dev->_xmit_lock);
        dev = (struct net_device *)
                (((long)p + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST);
        dev->padded = (char *)dev - (char *)p;
-       dev->nd_net = &init_net;
+       dev_net_set(dev, &init_net);
 
        if (sizeof_priv) {
                dev->priv = ((char *)dev +
 
        /* Get out if there is nothing todo */
        err = 0;
-       if (dev->nd_net == net)
+       if (dev_net(dev) == net)
                goto out;
 
        /* Pick the destination device name, and ensure
        dev_addr_discard(dev);
 
        /* Actually switch the network namespace */
-       dev->nd_net = net;
+       dev_net_set(dev, net);
 
        /* Assign the new device name */
        if (destname != dev->name)
 
        if (!unregister) {
                dst->input = dst->output = dst_discard;
        } else {
-               dst->dev = dst->dev->nd_net->loopback_dev;
+               dst->dev = dev_net(dst->dev)->loopback_dev;
                dev_hold(dst->dev);
                dev_put(dev);
                if (dst->neighbour && dst->neighbour->dev == dev) {
 
                            void *ptr)
 {
        struct net_device *dev = ptr;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct fib_rules_ops *ops;
 
        ASSERT_RTNL();
 
        hash_val = tbl->hash(pkey, NULL);
        for (n = tbl->hash_buckets[hash_val & tbl->hash_mask]; n; n = n->next) {
                if (!memcmp(n->primary_key, pkey, key_len) &&
-                   (net == n->dev->nd_net)) {
+                   dev_net(n->dev) == net) {
                        neigh_hold(n);
                        NEIGH_CACHE_STAT_INC(tbl, hits);
                        break;
        struct neigh_parms *p, *ref;
        struct net *net;
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        ref = lookup_neigh_params(tbl, net, 0);
        if (!ref)
                return NULL;
                        s_idx = 0;
                for (n = tbl->hash_buckets[h], idx = 0; n; n = n->next) {
                        int lidx;
-                       if (n->dev->nd_net != net)
+                       if (dev_net(n->dev) != net)
                                continue;
                        lidx = idx++;
                        if (lidx < s_idx)
                n = tbl->hash_buckets[bucket];
 
                while (n) {
-                       if (n->dev->nd_net != net)
+                       if (dev_net(n->dev) != net)
                                goto next;
                        if (state->neigh_sub_iter) {
                                loff_t fakep = 0;
 
        while (1) {
                while (n) {
-                       if (n->dev->nd_net != net)
+                       if (dev_net(n->dev) != net)
                                goto next;
                        if (state->neigh_sub_iter) {
                                void *v = state->neigh_sub_iter(state, n, pos);
 
 static void __neigh_notify(struct neighbour *n, int type, int flags)
 {
-       struct net *net = n->dev->nd_net;
+       struct net *net = dev_net(n->dev);
        struct sk_buff *skb;
        int err = -ENOBUFS;
 
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* It is OK that we do not hold the group lock right now,
 
                        goto err_free;
        }
 
-       dev->nd_net = net;
+       dev_net_set(dev, net);
        dev->rtnl_link_ops = ops;
 
        if (tb[IFLA_MTU])
 
 void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change)
 {
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct sk_buff *skb;
        int err = -ENOBUFS;
 
 
 {
        struct net_device *dev = (struct net_device *)ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        switch(event) {
 
        struct dn_dev *dn = (struct dn_dev *)dev->dn_ptr;
        unsigned char padlen = 0;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto dump_it;
 
        if (dn == NULL)
 
        struct sock *sk;
        struct ec_device *edev = dev->ec_ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        if (skb->pkt_type == PACKET_OTHERHOST)
        struct net_device *dev = (struct net_device *)data;
        struct ec_device *edev;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        switch (msg) {
 
                return -EINVAL;
        }
 
-       neigh->type = inet_addr_type(dev->nd_net, addr);
+       neigh->type = inet_addr_type(dev_net(dev), addr);
 
        parms = in_dev->arp_parms;
        __neigh_parms_put(neigh->parms);
        switch (IN_DEV_ARP_ANNOUNCE(in_dev)) {
        default:
        case 0:         /* By default announce any local IP */
-               if (skb && inet_addr_type(dev->nd_net, ip_hdr(skb)->saddr) == RTN_LOCAL)
+               if (skb && inet_addr_type(dev_net(dev), ip_hdr(skb)->saddr) == RTN_LOCAL)
                        saddr = ip_hdr(skb)->saddr;
                break;
        case 1:         /* Restrict announcements of saddr in same subnet */
                if (!skb)
                        break;
                saddr = ip_hdr(skb)->saddr;
-               if (inet_addr_type(dev->nd_net, saddr) == RTN_LOCAL) {
+               if (inet_addr_type(dev_net(dev), saddr) == RTN_LOCAL) {
                        /* saddr should be known to target */
                        if (inet_addr_onlink(in_dev, target, saddr))
                                break;
        int flag = 0;
        /*unsigned long now; */
 
-       if (ip_route_output_key(dev->nd_net, &rt, &fl) < 0)
+       if (ip_route_output_key(dev_net(dev), &rt, &fl) < 0)
                return 1;
        if (rt->u.dst.dev != dev) {
                NET_INC_STATS_BH(LINUX_MIB_ARPFILTER);
 
        paddr = skb->rtable->rt_gateway;
 
-       if (arp_set_predefined(inet_addr_type(dev->nd_net, paddr), haddr, paddr, dev))
+       if (arp_set_predefined(inet_addr_type(dev_net(dev), paddr), haddr, paddr, dev))
                return 0;
 
        n = __neigh_lookup(&arp_tbl, &paddr, dev, 1);
        u16 dev_type = dev->type;
        int addr_type;
        struct neighbour *n;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        /* arp_rcv below verifies the ARP header and verifies the device
         * is ARP'able.
 
        n = __neigh_lookup(&arp_tbl, &sip, dev, 0);
 
-       if (IPV4_DEVCONF_ALL(dev->nd_net, ARP_ACCEPT)) {
+       if (IPV4_DEVCONF_ALL(dev_net(dev), ARP_ACCEPT)) {
                /* Unsolicited ARP is not accepted by default.
                   It is possible, that this option should be enabled for some
                   devices (strip is candidate)
 
        if (!in_dev)
                goto out;
        INIT_RCU_HEAD(&in_dev->rcu_head);
-       memcpy(&in_dev->cnf, dev->nd_net->ipv4.devconf_dflt,
+       memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
                        sizeof(in_dev->cnf));
        in_dev->cnf.sysctl = NULL;
        in_dev->dev = dev;
 {
        __be32 addr = 0;
        struct in_device *in_dev;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        rcu_read_lock();
        in_dev = __in_dev_get_rcu(dev);
        if (scope != RT_SCOPE_LINK)
                return confirm_addr_indev(in_dev, dst, local, scope);
 
-       net = in_dev->dev->nd_net;
+       net = dev_net(in_dev->dev);
        read_lock(&dev_base_lock);
        rcu_read_lock();
        for_each_netdev(net, dev) {
        int err = -ENOBUFS;
        struct net *net;
 
-       net = ifa->ifa_dev->dev->nd_net;
+       net = dev_net(ifa->ifa_dev->dev);
        skb = nlmsg_new(inet_nlmsg_size(), GFP_KERNEL);
        if (skb == NULL)
                goto errout;
 {
        neigh_sysctl_register(idev->dev, idev->arp_parms, NET_IPV4,
                        NET_IPV4_NEIGH, "ipv4", NULL, NULL);
-       __devinet_sysctl_register(idev->dev->nd_net, idev->dev->name,
+       __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name,
                        idev->dev->ifindex, &idev->cnf);
 }
 
 
        if (in_dev == NULL)
                goto e_inval;
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        if (fib_lookup(net, &fl, &res))
                goto last_resort;
        if (res.type != RTN_UNICAST)
 
 static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifaddr *ifa)
 {
-       struct net *net = ifa->ifa_dev->dev->nd_net;
+       struct net *net = dev_net(ifa->ifa_dev->dev);
        struct fib_table *tb;
        struct fib_config cfg = {
                .fc_protocol = RTPROT_KERNEL,
                fib_magic(RTM_DELROUTE, RTN_LOCAL, ifa->ifa_local, 32, prim);
 
                /* Check, that this local address finally disappeared. */
-               if (inet_addr_type(dev->nd_net, ifa->ifa_local) != RTN_LOCAL) {
+               if (inet_addr_type(dev_net(dev), ifa->ifa_local) != RTN_LOCAL) {
                        /* And the last, but not the least thing.
                           We must flush stray FIB entries.
 
                           First of all, we scan fib_info list searching
                           for stray nexthop entries, then ignite fib_flush.
                        */
-                       if (fib_sync_down_addr(dev->nd_net, ifa->ifa_local))
-                               fib_flush(dev->nd_net);
+                       if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local))
+                               fib_flush(dev_net(dev));
                }
        }
 #undef LOCAL_OK
 static void fib_disable_ip(struct net_device *dev, int force)
 {
        if (fib_sync_down_dev(dev, force))
-               fib_flush(dev->nd_net);
+               fib_flush(dev_net(dev));
        rt_cache_flush(0);
        arp_ifdown(dev);
 }
 
        struct sock *sk;
        struct sk_buff *skb;
 
-       sk = icmp_sk(rt->u.dst.dev->nd_net);
+       sk = icmp_sk(dev_net(rt->u.dst.dev));
        if (ip_append_data(sk, icmp_glue_bits, icmp_param,
                           icmp_param->data_len+icmp_param->head_len,
                           icmp_param->head_len,
 {
        struct ipcm_cookie ipc;
        struct rtable *rt = skb->rtable;
-       struct net *net = rt->u.dst.dev->nd_net;
+       struct net *net = dev_net(rt->u.dst.dev);
        struct sock *sk = icmp_sk(net);
        struct inet_sock *inet = inet_sk(sk);
        __be32 daddr;
 
        if (!rt)
                goto out;
-       net = rt->u.dst.dev->nd_net;
+       net = dev_net(rt->u.dst.dev);
        sk = icmp_sk(net);
 
        /*
        u32 info = 0;
        struct net *net;
 
-       net = skb->dst->dev->nd_net;
+       net = dev_net(skb->dst->dev);
 
        /*
         *      Incomplete header ?
 
  */
 
 #define IGMP_V1_SEEN(in_dev) \
-       (IPV4_DEVCONF_ALL(in_dev->dev->nd_net, FORCE_IGMP_VERSION) == 1 || \
+       (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 1 || \
         IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 1 || \
         ((in_dev)->mr_v1_seen && \
          time_before(jiffies, (in_dev)->mr_v1_seen)))
 #define IGMP_V2_SEEN(in_dev) \
-       (IPV4_DEVCONF_ALL(in_dev->dev->nd_net, FORCE_IGMP_VERSION) == 2 || \
+       (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), FORCE_IGMP_VERSION) == 2 || \
         IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 2 || \
         ((in_dev)->mr_v2_seen && \
          time_before(jiffies, (in_dev)->mr_v2_seen)))
 
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        for (im=in_dev->mc_list; im; im=im->next) {
 
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        for (ip=&in_dev->mc_list; (i=*ip)!=NULL; ip=&i->next) {
 
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        for (i=in_dev->mc_list; i; i=i->next)
 {
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        in_dev->mc_tomb = NULL;
 
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        ip_mc_inc_group(in_dev, IGMP_ALL_HOSTS);
 
        ASSERT_RTNL();
 
-       if (in_dev->dev->nd_net != &init_net)
+       if (dev_net(in_dev->dev) != &init_net)
                return;
 
        /* Deactivate timers */
 
 
        IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
 
-       net = skb->dev ? skb->dev->nd_net : skb->dst->dev->nd_net;
+       net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
        /* Start by cleaning up the memory. */
        if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
                ip_evictor(net);
 
        struct ip_tunnel *t = netdev_priv(dev);
        if (ipv4_is_multicast(t->parms.iph.daddr) && t->mlink) {
                struct in_device *in_dev;
-               in_dev = inetdev_by_index(dev->nd_net, t->mlink);
+               in_dev = inetdev_by_index(dev_net(dev), t->mlink);
                if (in_dev) {
                        ip_mc_dec_group(in_dev, t->parms.iph.daddr);
                        in_dev_put(in_dev);
 
                if (sk && inet_sk(sk)->num == protocol &&
                    (!sk->sk_bound_dev_if ||
                     sk->sk_bound_dev_if == dev->ifindex) &&
-                   sk->sk_net == dev->nd_net) {
+                   sk->sk_net == 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);
 
 static int ip_local_deliver_finish(struct sk_buff *skb)
 {
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
 
        __skb_pull(skb, ip_hdrlen(skb));
 
        opt = &(IPCB(skb)->opt);
        opt->optlen = iph->ihl*4 - sizeof(struct iphdr);
 
-       if (ip_options_compile(dev->nd_net, opt, skb)) {
+       if (ip_options_compile(dev_net(dev), opt, skb)) {
                IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
                goto drop;
        }
 
                                                __be32 addr;
 
                                                memcpy(&addr, sptr+soffset-1, 4);
-                                               if (inet_addr_type(skb->dst->dev->nd_net, addr) != RTN_LOCAL) {
+                                               if (inet_addr_type(dev_net(skb->dst->dev), addr) != RTN_LOCAL) {
                                                        dopt->ts_needtime = 1;
                                                        soffset += 8;
                                                }
 
        unsigned char *sha, *tha;               /* s for "source", t for "target" */
        struct ic_device *d;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
        struct ic_device *d;
        int len, ext_len;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        /* Perform verifications before taking the lock.  */
 
        struct vif_device *v;
        int ct;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event != NETDEV_UNREGISTER)
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* Drop any packets associated with the downed device */
 
 {
        const struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_DOWN) {
 
        if (hlist_empty(head))
                goto out;
 
-       net = skb->dev->nd_net;
+       net = dev_net(skb->dev);
        sk = __raw_v4_lookup(net, __sk_head(head), iph->protocol,
                             iph->saddr, iph->daddr,
                             skb->dev->ifindex);
        raw_sk = sk_head(&raw_v4_hashinfo.ht[hash]);
        if (raw_sk != NULL) {
                iph = (struct iphdr *)skb->data;
-               net = skb->dev->nd_net;
+               net = dev_net(skb->dev);
 
                while ((raw_sk = __raw_v4_lookup(net, raw_sk, protocol,
                                                iph->daddr, iph->saddr,
 
                rcu_read_lock_bh();
                r = rcu_dereference(rt_hash_table[st->bucket].chain);
                while (r) {
-                       if (r->u.dst.dev->nd_net == st->p.net &&
+                       if (dev_net(r->u.dst.dev) == st->p.net &&
                            r->rt_genid == st->genid)
                                return r;
                        r = rcu_dereference(r->u.dst.rt_next);
                                        struct rtable *r)
 {
        while ((r = __rt_cache_get_next(st, r)) != NULL) {
-               if (r->u.dst.dev->nd_net != st->p.net)
+               if (dev_net(r->u.dst.dev) != st->p.net)
                        continue;
                if (r->rt_genid == st->genid)
                        break;
 
 static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
 {
-       return rt1->u.dst.dev->nd_net == rt2->u.dst.dev->nd_net;
+       return dev_net(rt1->u.dst.dev) == dev_net(rt2->u.dst.dev);
 }
 
 /*
        if (!in_dev)
                return;
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev)
            || ipv4_is_multicast(new_gw) || ipv4_is_lbcast(new_gw)
            || ipv4_is_zeronet(new_gw))
                                    rth->fl.oif != ikeys[k] ||
                                    rth->fl.iif != 0 ||
                                    rth->rt_genid != atomic_read(&rt_genid) ||
-                                   rth->u.dst.dev->nd_net != net) {
+                                   dev_net(rth->u.dst.dev) != net) {
                                        rthp = &rth->u.dst.rt_next;
                                        continue;
                                }
                            rth->rt_src  == iph->saddr &&
                            rth->fl.iif == 0 &&
                            !(dst_metric_locked(&rth->u.dst, RTAX_MTU)) &&
-                           rth->u.dst.dev->nd_net == net &&
+                           dev_net(rth->u.dst.dev) == net &&
                            rth->rt_genid == atomic_read(&rt_genid)) {
                                unsigned short mtu = new_mtu;
 
 {
        struct rtable *rt = (struct rtable *) dst;
        struct in_device *idev = rt->idev;
-       if (dev != dev->nd_net->loopback_dev && idev && idev->dev == dev) {
+       if (dev != dev_net(dev)->loopback_dev && idev && idev->dev == dev) {
                struct in_device *loopback_idev =
-                       in_dev_get(dev->nd_net->loopback_dev);
+                       in_dev_get(dev_net(dev)->loopback_dev);
                if (loopback_idev) {
                        rt->idev = loopback_idev;
                        in_dev_put(idev);
 
        if (rt->fl.iif == 0)
                src = rt->rt_src;
-       else if (fib_lookup(rt->u.dst.dev->nd_net, &rt->fl, &res) == 0) {
+       else if (fib_lookup(dev_net(rt->u.dst.dev), &rt->fl, &res) == 0) {
                src = FIB_RES_PREFSRC(res);
                fib_res_put(&res);
        } else
        __be32          spec_dst;
        int             err = -EINVAL;
        int             free_res = 0;
-       struct net    * net = dev->nd_net;
+       struct net    * net = dev_net(dev);
 
        /* IP on this device is disabled. */
 
        int iif = dev->ifindex;
        struct net *net;
 
-       net = dev->nd_net;
+       net = dev_net(dev);
        tos &= IPTOS_RT_MASK;
        hash = rt_hash(daddr, saddr, iif);
 
                    rth->fl.oif == 0 &&
                    rth->fl.mark == skb->mark &&
                    rth->fl.fl4_tos == tos &&
-                   rth->u.dst.dev->nd_net == net &&
+                   dev_net(rth->u.dst.dev) == net &&
                    rth->rt_genid == atomic_read(&rt_genid)) {
                        dst_use(&rth->u.dst, jiffies);
                        RT_CACHE_STAT_INC(in_hit);
                    rth->fl.mark == flp->mark &&
                    !((rth->fl.fl4_tos ^ flp->fl4_tos) &
                            (IPTOS_RT_MASK | RTO_ONLINK)) &&
-                   rth->u.dst.dev->nd_net == net &&
+                   dev_net(rth->u.dst.dev) == net &&
                    rth->rt_genid == atomic_read(&rt_genid)) {
                        dst_use(&rth->u.dst, jiffies);
                        RT_CACHE_STAT_INC(out_hit);
                rcu_read_lock_bh();
                for (rt = rcu_dereference(rt_hash_table[h].chain), idx = 0; rt;
                     rt = rcu_dereference(rt->u.dst.rt_next), idx++) {
-                       if (rt->u.dst.dev->nd_net != net || idx < s_idx)
+                       if (dev_net(rt->u.dst.dev) != net || idx < s_idx)
                                continue;
                        if (rt->rt_genid != atomic_read(&rt_genid))
                                continue;
 
                return;
        }
 
-       sk = inet_lookup(skb->dev->nd_net, &tcp_hashinfo, iph->daddr, th->dest,
+       sk = inet_lookup(dev_net(skb->dev), &tcp_hashinfo, iph->daddr, th->dest,
                        iph->saddr, th->source, inet_iif(skb));
        if (!sk) {
                ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);
        TCP_SKB_CB(skb)->flags   = iph->tos;
        TCP_SKB_CB(skb)->sacked  = 0;
 
-       sk = __inet_lookup(skb->dev->nd_net, &tcp_hashinfo, iph->saddr,
+       sk = __inet_lookup(dev_net(skb->dev), &tcp_hashinfo, iph->saddr,
                        th->source, iph->daddr, th->dest, inet_iif(skb));
        if (!sk)
                goto no_tcp_socket;
        }
        switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
        case TCP_TW_SYN: {
-               struct sock *sk2 = inet_lookup_listener(skb->dev->nd_net,
+               struct sock *sk2 = inet_lookup_listener(dev_net(skb->dev),
                                                        &tcp_hashinfo,
                                                        iph->daddr, th->dest,
                                                        inet_iif(skb));
 
        int harderr;
        int err;
 
-       sk = __udp4_lib_lookup(skb->dev->nd_net, iph->daddr, uh->dest,
+       sk = __udp4_lib_lookup(dev_net(skb->dev), iph->daddr, uh->dest,
                        iph->saddr, uh->source, skb->dev->ifindex, udptable);
        if (sk == NULL) {
                ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);
        if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST))
                return __udp4_lib_mcast_deliver(skb, uh, saddr, daddr, udptable);
 
-       sk = __udp4_lib_lookup(skb->dev->nd_net, saddr, uh->source, daddr,
+       sk = __udp4_lib_lookup(dev_net(skb->dev), saddr, uh->source, daddr,
                        uh->dest, inet_iif(skb), udptable);
 
        if (sk != NULL) {
 
        xdst = (struct xfrm_dst *)dst;
        if (xdst->u.rt.idev->dev == dev) {
                struct in_device *loopback_idev =
-                       in_dev_get(dev->nd_net->loopback_dev);
+                       in_dev_get(dev_net(dev)->loopback_dev);
                BUG_ON(!loopback_idev);
 
                do {
 
 
        rwlock_init(&ndev->lock);
        ndev->dev = dev;
-       memcpy(&ndev->cnf, dev->nd_net->ipv6.devconf_dflt, sizeof(ndev->cnf));
+       memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
        ndev->cnf.mtu6 = dev->mtu;
        ndev->cnf.sysctl = NULL;
        ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
        write_lock(&addrconf_hash_lock);
 
        /* Ignore adding duplicate addresses on an interface */
-       if (ipv6_chk_same_addr(idev->dev->nd_net, addr, idev->dev)) {
+       if (ipv6_chk_same_addr(dev_net(idev->dev), addr, idev->dev)) {
                ADBG(("ipv6_add_addr: already assigned\n"));
                err = -EEXIST;
                goto out;
        if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) {
                struct in6_addr prefix;
                struct rt6_info *rt;
-               struct net *net = ifp->idev->dev->nd_net;
+               struct net *net = dev_net(ifp->idev->dev);
                ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
                rt = rt6_lookup(net, &prefix, NULL, ifp->idev->dev->ifindex, 1);
 
 {
        struct ipv6_saddr_score scores[2],
                                *score = &scores[0], *hiscore = &scores[1];
-       struct net *net = dst_dev->nd_net;
+       struct net *net = dev_net(dst_dev);
        struct ipv6_saddr_dst dst;
        struct net_device *dev;
        int dst_type;
 
        read_lock_bh(&addrconf_hash_lock);
        for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
-               if (ifp->idev->dev->nd_net != net)
+               if (dev_net(ifp->idev->dev) != net)
                        continue;
                if (ipv6_addr_equal(&ifp->addr, addr) &&
                    !(ifp->flags&IFA_F_TENTATIVE)) {
        u8 hash = ipv6_addr_hash(addr);
 
        for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
-               if (ifp->idev->dev->nd_net != net)
+               if (dev_net(ifp->idev->dev) != net)
                        continue;
                if (ipv6_addr_equal(&ifp->addr, addr)) {
                        if (dev == NULL || ifp->idev->dev == dev)
 
        read_lock_bh(&addrconf_hash_lock);
        for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
-               if (ifp->idev->dev->nd_net != net)
+               if (dev_net(ifp->idev->dev) != net)
                        continue;
                if (ipv6_addr_equal(&ifp->addr, addr)) {
                        if (dev == NULL || ifp->idev->dev == dev ||
                .fc_expires = expires,
                .fc_dst_len = plen,
                .fc_flags = RTF_UP | flags,
-               .fc_nlinfo.nl_net = dev->nd_net,
+               .fc_nlinfo.nl_net = dev_net(dev),
        };
 
        ipv6_addr_copy(&cfg.fc_dst, pfx);
                .fc_ifindex = dev->ifindex,
                .fc_dst_len = 8,
                .fc_flags = RTF_UP,
-               .fc_nlinfo.nl_net = dev->nd_net,
+               .fc_nlinfo.nl_net = dev_net(dev),
        };
 
        ipv6_addr_set(&cfg.fc_dst, htonl(0xFF000000), 0, 0, 0);
                .fc_ifindex = dev->ifindex,
                .fc_dst_len = 96,
                .fc_flags = RTF_UP | RTF_NONEXTHOP,
-               .fc_nlinfo.nl_net = dev->nd_net,
+               .fc_nlinfo.nl_net = dev_net(dev),
        };
 
        /* prefix length - 96 bits "::d.d.d.d" */
 
        if (pinfo->onlink) {
                struct rt6_info *rt;
-               rt = rt6_lookup(dev->nd_net, &pinfo->prefix, NULL,
+               rt = rt6_lookup(dev_net(dev), &pinfo->prefix, NULL,
                                dev->ifindex, 1);
 
                if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
 
 ok:
 
-               ifp = ipv6_get_ifaddr(dev->nd_net, &addr, dev, 1);
+               ifp = ipv6_get_ifaddr(dev_net(dev), &addr, dev, 1);
 
                if (ifp == NULL && valid_lft) {
                        int max_addresses = in6_dev->cnf.max_addresses;
        struct inet6_ifaddr * ifp;
        struct in6_addr addr;
        struct net_device *dev;
-       struct net *net = idev->dev->nd_net;
+       struct net *net = dev_net(idev->dev);
        int scope;
 
        ASSERT_RTNL();
 static void ip6_tnl_add_linklocal(struct inet6_dev *idev)
 {
        struct net_device *link_dev;
-       struct net *net = idev->dev->nd_net;
+       struct net *net = dev_net(idev->dev);
 
        /* first try to inherit the link-local address from the link device */
        if (idev->dev->iflink &&
 {
        struct inet6_dev *idev;
        struct inet6_ifaddr *ifa, **bifa;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        int i;
 
        ASSERT_RTNL();
        for (state->bucket = 0; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) {
                ifa = inet6_addr_lst[state->bucket];
 
-               while (ifa && ifa->idev->dev->nd_net != net)
+               while (ifa && dev_net(ifa->idev->dev) != net)
                        ifa = ifa->lst_next;
                if (ifa)
                        break;
        ifa = ifa->lst_next;
 try_again:
        if (ifa) {
-               if (ifa->idev->dev->nd_net != net) {
+               if (dev_net(ifa->idev->dev) != net) {
                        ifa = ifa->lst_next;
                        goto try_again;
                }
        u8 hash = ipv6_addr_hash(addr);
        read_lock_bh(&addrconf_hash_lock);
        for (ifp = inet6_addr_lst[hash]; ifp; ifp = ifp->lst_next) {
-               if (ifp->idev->dev->nd_net != net)
+               if (dev_net(ifp->idev->dev) != net)
                        continue;
                if (ipv6_addr_cmp(&ifp->addr, addr) == 0 &&
                    (ifp->flags & IFA_F_HOMEADDRESS)) {
 static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
 {
        struct sk_buff *skb;
-       struct net *net = ifa->idev->dev->nd_net;
+       struct net *net = dev_net(ifa->idev->dev);
        int err = -ENOBUFS;
 
        skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC);
 void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
 {
        struct sk_buff *skb;
-       struct net *net = idev->dev->nd_net;
+       struct net *net = dev_net(idev->dev);
        int err = -ENOBUFS;
 
        skb = nlmsg_new(inet6_if_nlmsg_size(), GFP_ATOMIC);
                         struct prefix_info *pinfo)
 {
        struct sk_buff *skb;
-       struct net *net = idev->dev->nd_net;
+       struct net *net = dev_net(idev->dev);
        int err = -ENOBUFS;
 
        skb = nlmsg_new(inet6_prefix_nlmsg_size(), GFP_ATOMIC);
                              NET_IPV6_NEIGH, "ipv6",
                              &ndisc_ifinfo_sysctl_change,
                              NULL);
-       __addrconf_sysctl_register(idev->dev->nd_net, idev->dev->name,
+       __addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name,
                        idev->dev->ifindex, idev, &idev->cnf);
 }
 
 
 void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
                 struct net_device *dev)
 {
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
        struct inet6_dev *idev = NULL;
        struct ipv6hdr *hdr = ipv6_hdr(skb);
        struct sock *sk;
 
 static void icmpv6_echo_reply(struct sk_buff *skb)
 {
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
        struct sock *sk;
        struct inet6_dev *idev;
        struct ipv6_pinfo *np;
 
        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;
+       struct net *net = dev_net(dst->dev);
 
        if (ipv6_devconf.forwarding == 0)
                goto error;
 
 
 static struct sk_buff *mld_newpack(struct net_device *dev, int size)
 {
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct sock *sk = net->ipv6.igmp_sk;
        struct sk_buff *skb;
        struct mld2_report *pmr;
                              (struct mld2_report *)skb_transport_header(skb);
        int payload_len, mldlen;
        struct inet6_dev *idev = in6_dev_get(skb->dev);
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
        int err;
        struct flowi fl;
 
 
 static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
 {
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct sock *sk = net->ipv6.igmp_sk;
        struct inet6_dev *idev;
        struct sk_buff *skb;
 
 {
        struct flowi fl;
        struct dst_entry *dst;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct sock *sk = net->ipv6.ndisc_sk;
        struct sk_buff *skb;
        struct icmp6hdr *hdr;
        };
 
        /* for anycast or proxy, solicited_addr != src_addr */
-       ifp = ipv6_get_ifaddr(dev->nd_net, solicited_addr, dev, 1);
+       ifp = ipv6_get_ifaddr(dev_net(dev), solicited_addr, dev, 1);
        if (ifp) {
                src_addr = solicited_addr;
                if (ifp->flags & IFA_F_OPTIMISTIC)
                in6_ifa_put(ifp);
        } else {
                if (ipv6_dev_get_saddr(dev, daddr,
-                                      inet6_sk(dev->nd_net->ipv6.ndisc_sk)->srcprefs,
+                                      inet6_sk(dev_net(dev)->ipv6.ndisc_sk)->srcprefs,
                                       &tmpaddr))
                        return;
                src_addr = &tmpaddr;
         * suppress the inclusion of the sllao.
         */
        if (send_sllao) {
-               struct inet6_ifaddr *ifp = ipv6_get_ifaddr(dev->nd_net, saddr,
+               struct inet6_ifaddr *ifp = ipv6_get_ifaddr(dev_net(dev), saddr,
                                                           dev, 1);
                if (ifp) {
                        if (ifp->flags & IFA_F_OPTIMISTIC)  {
        struct in6_addr *target = (struct in6_addr *)&neigh->primary_key;
        int probes = atomic_read(&neigh->probes);
 
-       if (skb && ipv6_chk_addr(dev->nd_net, &ipv6_hdr(skb)->saddr, dev, 1))
+       if (skb && ipv6_chk_addr(dev_net(dev), &ipv6_hdr(skb)->saddr, dev, 1))
                saddr = &ipv6_hdr(skb)->saddr;
 
        if ((probes -= neigh->parms->ucast_probes) < 0) {
 
        inc = ipv6_addr_is_multicast(daddr);
 
-       ifp = ipv6_get_ifaddr(dev->nd_net, &msg->target, dev, 1);
+       ifp = ipv6_get_ifaddr(dev_net(dev), &msg->target, dev, 1);
        if (ifp) {
 
                if (ifp->flags & (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)) {
                if (ipv6_chk_acast_addr(dev, &msg->target) ||
                    (idev->cnf.forwarding &&
                     (ipv6_devconf.proxy_ndp || idev->cnf.proxy_ndp) &&
-                    (pneigh = pneigh_lookup(&nd_tbl, dev->nd_net,
+                    (pneigh = pneigh_lookup(&nd_tbl, dev_net(dev),
                                             &msg->target, dev, 0)) != NULL)) {
                        if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
                            skb->pkt_type != PACKET_HOST &&
                        return;
                }
        }
-       ifp = ipv6_get_ifaddr(dev->nd_net, &msg->target, dev, 1);
+       ifp = ipv6_get_ifaddr(dev_net(dev), &msg->target, dev, 1);
        if (ifp) {
                if (ifp->flags & IFA_F_TENTATIVE) {
                        addrconf_dad_failure(ifp);
                 */
                if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
                    ipv6_devconf.forwarding && ipv6_devconf.proxy_ndp &&
-                   pneigh_lookup(&nd_tbl, dev->nd_net, &msg->target, dev, 0)) {
+                   pneigh_lookup(&nd_tbl, dev_net(dev), &msg->target, dev, 0)) {
                        /* XXX: idev->cnf.prixy_ndp */
                        goto out;
                }
        struct sk_buff *skb;
        struct nlmsghdr *nlh;
        struct nduseroptmsg *ndmsg;
-       struct net *net = ra->dev->nd_net;
+       struct net *net = dev_net(ra->dev);
        int err;
        int base_size = NLMSG_ALIGN(sizeof(struct nduseroptmsg)
                                    + (opt->nd_opt_len << 3));
                         struct in6_addr *target)
 {
        struct net_device *dev = skb->dev;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct sock *sk = net->ipv6.ndisc_sk;
        int len = sizeof(struct icmp6hdr) + 2 * sizeof(struct in6_addr);
        struct sk_buff *buff;
 static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
 {
        struct net_device *dev = ptr;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        switch (event) {
        case NETDEV_CHANGEADDR:
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* Drop any packets associated with the downed device */
 
        if (!idev || !idev->dev)
                return -EINVAL;
 
-       if (idev->dev->nd_net != &init_net)
+       if (dev_net(idev->dev) != &init_net)
                return 0;
 
        if (!proc_net_devsnmp6)
 
        if (sk == NULL)
                goto out;
 
-       net = skb->dev->nd_net;
+       net = dev_net(skb->dev);
        sk = __raw_v6_lookup(net, sk, nexthdr, daddr, saddr, IP6CB(skb)->iif);
 
        while (sk) {
        if (sk != NULL) {
                saddr = &ipv6_hdr(skb)->saddr;
                daddr = &ipv6_hdr(skb)->daddr;
-               net = skb->dev->nd_net;
+               net = dev_net(skb->dev);
 
                while ((sk = __raw_v6_lookup(net, sk, nexthdr, saddr, daddr,
                                                IP6CB(skb)->iif))) {
 
                return 1;
        }
 
-       net = skb->dev->nd_net;
+       net = dev_net(skb->dev);
        if (atomic_read(&net->ipv6.frags.mem) > net->ipv6.frags.high_thresh)
                ip6_evictor(net, ip6_dst_idev(skb->dst));
 
 
        struct rt6_info *rt = (struct rt6_info *)dst;
        struct inet6_dev *idev = rt->rt6i_idev;
        struct net_device *loopback_dev =
-               dev->nd_net->loopback_dev;
+               dev_net(dev)->loopback_dev;
 
        if (dev != loopback_dev && idev != NULL && idev->dev == dev) {
                struct inet6_dev *loopback_idev =
        RT6_TRACE("%s() => %p\n",
                  __func__, match);
 
-       net = rt0->rt6i_dev->nd_net;
+       net = dev_net(rt0->rt6i_dev);
        return (match ? match : net->ipv6.ip6_null_entry);
 }
 
 int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
                  struct in6_addr *gwaddr)
 {
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct route_info *rinfo = (struct route_info *) opt;
        struct in6_addr prefix_buf, *prefix;
        unsigned int pref;
 int ip6_ins_rt(struct rt6_info *rt)
 {
        struct nl_info info = {
-               .nl_net = rt->rt6i_dev->nd_net,
+               .nl_net = dev_net(rt->rt6i_dev),
        };
        return __ip6_ins_rt(rt, &info);
 }
 void ip6_route_input(struct sk_buff *skb)
 {
        struct ipv6hdr *iph = ipv6_hdr(skb);
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
        int flags = RT6_LOOKUP_F_HAS_SADDR;
        struct flowi fl = {
                .iif = skb->dev->ifindex,
 {
        struct rt6_info *rt;
        struct inet6_dev *idev = in6_dev_get(dev);
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        if (unlikely(idev == NULL))
                return NULL;
        rt->rt6i_idev = idev;
        rt->rt6i_table = table;
 
-       cfg->fc_nlinfo.nl_net = dev->nd_net;
+       cfg->fc_nlinfo.nl_net = dev_net(dev);
 
        return __ip6_ins_rt(rt, &cfg->fc_nlinfo);
 
 {
        int err;
        struct fib6_table *table;
-       struct net *net = rt->rt6i_dev->nd_net;
+       struct net *net = dev_net(rt->rt6i_dev);
 
        if (rt == net->ipv6.ip6_null_entry)
                return -ENOENT;
 int ip6_del_rt(struct rt6_info *rt)
 {
        struct nl_info info = {
-               .nl_net = rt->rt6i_dev->nd_net,
+               .nl_net = dev_net(rt->rt6i_dev),
        };
        return __ip6_del_rt(rt, &info);
 }
                                           struct net_device *dev)
 {
        int flags = RT6_LOOKUP_F_HAS_SADDR;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        struct ip6rd_flowi rdfl = {
                .fl = {
                        .oif = dev->ifindex,
 {
        struct rt6_info *rt, *nrt = NULL;
        struct netevent_redirect netevent;
-       struct net *net = neigh->dev->nd_net;
+       struct net *net = dev_net(neigh->dev);
 
        rt = ip6_route_redirect(dest, src, saddr, neigh->dev);
 
        nrt->rt6i_nexthop = neigh_clone(neigh);
        /* Reset pmtu, it may be better */
        nrt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(neigh->dev);
-       nrt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(neigh->dev->nd_net,
+       nrt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dev_net(neigh->dev),
                                                        dst_mtu(&nrt->u.dst));
 
        if (ip6_ins_rt(nrt))
                        struct net_device *dev, u32 pmtu)
 {
        struct rt6_info *rt, *nrt;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
        int allfrag = 0;
 
        rt = rt6_lookup(net, daddr, saddr, dev->ifindex, 0);
 
 static struct rt6_info * ip6_rt_copy(struct rt6_info *ort)
 {
-       struct net *net = ort->rt6i_dev->nd_net;
+       struct net *net = dev_net(ort->rt6i_dev);
        struct rt6_info *rt = ip6_dst_alloc(net->ipv6.ip6_dst_ops);
 
        if (rt) {
        struct rt6_info *rt;
        struct fib6_table *table;
 
-       table = fib6_get_table(dev->nd_net, RT6_TABLE_DFLT);
+       table = fib6_get_table(dev_net(dev), RT6_TABLE_DFLT);
        if (table == NULL)
                return NULL;
 
                                  RTF_UP | RTF_EXPIRES | RTF_PREF(pref),
                .fc_nlinfo.pid = 0,
                .fc_nlinfo.nlh = NULL,
-               .fc_nlinfo.nl_net = dev->nd_net,
+               .fc_nlinfo.nl_net = dev_net(dev),
        };
 
        ipv6_addr_copy(&cfg.fc_gateway, gwaddr);
                                    const struct in6_addr *addr,
                                    int anycast)
 {
-       struct net *net = idev->dev->nd_net;
+       struct net *net = dev_net(idev->dev);
        struct rt6_info *rt = ip6_dst_alloc(net->ipv6.ip6_dst_ops);
 
        if (rt == NULL)
 {
        struct rt6_mtu_change_arg *arg = (struct rt6_mtu_change_arg *) p_arg;
        struct inet6_dev *idev;
-       struct net *net = arg->dev->nd_net;
+       struct net *net = dev_net(arg->dev);
 
        /* In IPv6 pmtu discovery is not optional,
           so that RTAX_MTU lock cannot disable it.
                .mtu = mtu,
        };
 
-       fib6_clean_all(dev->nd_net, rt6_mtu_change_route, 0, &arg);
+       fib6_clean_all(dev_net(dev), rt6_mtu_change_route, 0, &arg);
 }
 
 static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = {
                                unsigned long event, void *data)
 {
        struct net_device *dev = (struct net_device *)data;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        if (event == NETDEV_REGISTER && (dev->flags & IFF_LOOPBACK)) {
                net->ipv6.ip6_null_entry->u.dst.dev = dev;
 
        struct tcp_sock *tp;
        __u32 seq;
 
-       sk = inet6_lookup(skb->dev->nd_net, &tcp_hashinfo, &hdr->daddr,
+       sk = inet6_lookup(dev_net(skb->dev), &tcp_hashinfo, &hdr->daddr,
                        th->dest, &hdr->saddr, th->source, skb->dev->ifindex);
 
        if (sk == NULL) {
        struct tcphdr *th = tcp_hdr(skb), *t1;
        struct sk_buff *buff;
        struct flowi fl;
-       struct net *net = skb->dst->dev->nd_net;
+       struct net *net = dev_net(skb->dst->dev);
        struct sock *ctl_sk = net->ipv6.tcp_sk;
        unsigned int tot_len = sizeof(*th);
 #ifdef CONFIG_TCP_MD5SIG
        struct tcphdr *th = tcp_hdr(skb), *t1;
        struct sk_buff *buff;
        struct flowi fl;
-       struct net *net = skb->dev->nd_net;
+       struct net *net = dev_net(skb->dev);
        struct sock *ctl_sk = net->ipv6.tcp_sk;
        unsigned int tot_len = sizeof(struct tcphdr);
        __be32 *topt;
        TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(ipv6_hdr(skb));
        TCP_SKB_CB(skb)->sacked = 0;
 
-       sk = __inet6_lookup(skb->dev->nd_net, &tcp_hashinfo,
+       sk = __inet6_lookup(dev_net(skb->dev), &tcp_hashinfo,
                        &ipv6_hdr(skb)->saddr, th->source,
                        &ipv6_hdr(skb)->daddr, ntohs(th->dest),
                        inet6_iif(skb));
        {
                struct sock *sk2;
 
-               sk2 = inet6_lookup_listener(skb->dev->nd_net, &tcp_hashinfo,
+               sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo,
                                            &ipv6_hdr(skb)->daddr,
                                            ntohs(th->dest), inet6_iif(skb));
                if (sk2 != NULL) {
 
        struct sock *sk;
        int err;
 
-       sk = __udp6_lib_lookup(skb->dev->nd_net, daddr, uh->dest,
+       sk = __udp6_lib_lookup(dev_net(skb->dev), daddr, uh->dest,
                               saddr, uh->source, inet6_iif(skb), udptable);
        if (sk == NULL)
                return;
         * check socket cache ... must talk to Alan about his plans
         * for sock caches... i'll skip this for now.
         */
-       sk = __udp6_lib_lookup(skb->dev->nd_net, saddr, uh->source,
+       sk = __udp6_lib_lookup(dev_net(skb->dev), saddr, uh->source,
                               daddr, uh->dest, inet6_iif(skb), udptable);
 
        if (sk == NULL) {
 
        xdst = (struct xfrm_dst *)dst;
        if (xdst->u.rt6.rt6i_idev->dev == dev) {
                struct inet6_dev *loopback_idev =
-                       in6_dev_get(dev->nd_net->loopback_dev);
+                       in6_dev_get(dev_net(dev)->loopback_dev);
                BUG_ON(!loopback_idev);
 
                do {
 
        struct net_device *dev = ptr;
        struct ipx_interface *i, *tmp;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event != NETDEV_DOWN && event != NETDEV_UP)
        u16 ipx_pktsize;
        int rc = 0;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        /* Not ours */
 
        int command;
        __u8 control;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto out;
 
        /* FIXME: should we get our own field? */
 
        int (*rcv)(struct sk_buff *, struct net_device *,
                   struct packet_type *, struct net_device *);
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        /*
 
 #ifdef CONFIG_NET_NS
        struct net *net;
 
-       net = indev == NULL ? outdev->nd_net : indev->nd_net;
+       net = indev == NULL ? dev_net(outdev) : dev_net(indev);
        if (net != &init_net)
                return 1;
 #endif
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* Drop any packets associated with the downed device */
 
        struct net_device *dev = ptr;
        struct netlbl_unlhsh_iface *iface = NULL;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        /* XXX - should this be a check for NETDEV_DOWN or _UNREGISTER? */
 
 {
        struct net_device *dev = (struct net_device *)ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event != NETDEV_DOWN)
 
        if (skb->pkt_type == PACKET_LOOPBACK)
                goto out;
 
-       if (dev->nd_net != sk->sk_net)
+       if (dev_net(dev) != sk->sk_net)
                goto out;
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
        sk = pt->af_packet_priv;
        po = pkt_sk(sk);
 
-       if (dev->nd_net != sk->sk_net)
+       if (dev_net(dev) != sk->sk_net)
                goto drop;
 
        skb->dev = dev;
        sk = pt->af_packet_priv;
        po = pkt_sk(sk);
 
-       if (dev->nd_net != sk->sk_net)
+       if (dev_net(dev) != sk->sk_net)
                goto drop;
 
        if (dev->header_ops) {
        struct sock *sk;
        struct hlist_node *node;
        struct net_device *dev = data;
-       struct net *net = dev->nd_net;
+       struct net *net = dev_net(dev);
 
        read_lock(&net->packet.sklist_lock);
        sk_for_each(sk, node, &net->packet.sklist) {
 
 {
        struct net_device *dev = (struct net_device *)ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event != NETDEV_DOWN)
 
        struct sctp_sockaddr_entry *temp;
        int found = 0;
 
-       if (ifa->ifa_dev->dev->nd_net != &init_net)
+       if (dev_net(ifa->ifa_dev->dev) != &init_net)
                return NOTIFY_DONE;
 
        switch (ev) {
 
        struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv;
        u32 size;
 
-       if (dev->nd_net != &init_net) {
+       if (dev_net(dev) != &init_net) {
                kfree_skb(buf);
                return 0;
        }
        struct eth_bearer *eb_ptr = ð_bearers[0];
        struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS];
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        while ((eb_ptr->dev != dev)) {
 
        struct sk_buff *skb;
        int err;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return;
 
        skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
 
        struct net_device *dev = ptr;
        struct x25_neigh *nb;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (dev->type == ARPHRD_X25
 
        struct sk_buff *nskb;
        struct x25_neigh *nb;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                goto drop;
 
        nskb = skb_copy(skb, GFP_ATOMIC);
 
 void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
 {
        while ((dst = dst->child) && dst->xfrm && dst->dev == dev) {
-               dst->dev = dev->nd_net->loopback_dev;
+               dst->dev = dev_net(dev)->loopback_dev;
                dev_hold(dst->dev);
                dev_put(dev);
        }
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        switch (event) {
 
 {
        struct net_device *dev = ptr;
 
-       if (dev->nd_net != &init_net)
+       if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
        if (event == NETDEV_DOWN)