From: David Ahern <dsah...@gmail.com>

Convert existing uses for nd_tbl to the helpers introduced in the previous
patch.

Signed-off-by: David Ahern <dsah...@gmail.com>
---
 net/ipv6/addrconf.c   | 16 ++++++++++------
 net/ipv6/ip6_output.c |  4 ++--
 net/ipv6/ndisc.c      | 41 +++++++++++++++++++++++------------------
 net/ipv6/route.c      | 12 +++++++-----
 4 files changed, 42 insertions(+), 31 deletions(-)

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 1659a6b3cf42..104bf4c6c1f9 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -365,6 +365,8 @@ static int snmp6_alloc_dev(struct inet6_dev *idev)
 
 static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
 {
+       struct net *net = dev_net(dev);
+       struct neigh_table *neigh_tbl = ipv6_neigh_table(net);
        struct inet6_dev *ndev;
        int err = -ENOMEM;
 
@@ -381,13 +383,13 @@ static struct inet6_dev *ipv6_add_dev(struct net_device 
*dev)
        ndev->dev = dev;
        INIT_LIST_HEAD(&ndev->addr_list);
        timer_setup(&ndev->rs_timer, addrconf_rs_timer, 0);
-       memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
+       memcpy(&ndev->cnf, net->ipv6.devconf_dflt, sizeof(ndev->cnf));
 
        if (ndev->cnf.stable_secret.initialized)
                ndev->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
 
        ndev->cnf.mtu6 = dev->mtu;
-       ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
+       ndev->nd_parms = neigh_parms_alloc(dev, neigh_tbl);
        if (!ndev->nd_parms) {
                kfree(ndev);
                return ERR_PTR(err);
@@ -400,7 +402,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device 
*dev)
        if (snmp6_alloc_dev(ndev) < 0) {
                netdev_dbg(dev, "%s: cannot allocate memory for statistics\n",
                           __func__);
-               neigh_parms_release(&nd_tbl, ndev->nd_parms);
+               neigh_parms_release(neigh_tbl, ndev->nd_parms);
                dev_put(dev);
                kfree(ndev);
                return ERR_PTR(err);
@@ -465,7 +467,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device 
*dev)
        return ndev;
 
 err_release:
-       neigh_parms_release(&nd_tbl, ndev->nd_parms);
+       neigh_parms_release(ipv6_neigh_table(net), ndev->nd_parms);
        ndev->dead = 1;
        in6_dev_finish_destroy(ndev);
        return ERR_PTR(err);
@@ -3787,9 +3789,11 @@ static int addrconf_ifdown(struct net_device *dev, int 
how)
 
        /* Last: Shot the device (if unregistered) */
        if (how) {
+               struct neigh_table *tbl = ipv6_neigh_table(net);
+
                addrconf_sysctl_unregister(idev);
-               neigh_parms_release(&nd_tbl, idev->nd_parms);
-               neigh_ifdown(&nd_tbl, dev);
+               neigh_parms_release(tbl, idev->nd_parms);
+               neigh_ifdown(tbl, dev);
                in6_dev_put(idev);
        }
        return 0;
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 8047fd41ba88..05e11f71da49 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -114,7 +114,7 @@ static int ip6_finish_output2(struct net *net, struct sock 
*sk, struct sk_buff *
        nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
        neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
        if (unlikely(!neigh))
-               neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
+               neigh = ipv6_neigh_create(dst->dev, nexthop, false);
        if (!IS_ERR(neigh)) {
                sock_confirm_neigh(skb, neigh);
                ret = neigh_output(neigh, skb);
@@ -462,7 +462,7 @@ int ip6_forward(struct sk_buff *skb)
 
        /* XXX: idev->cnf.proxy_ndp? */
        if (net->ipv6.devconf_all->proxy_ndp &&
-           pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
+           ipv6_pneigh_lookup(net, &hdr->daddr, skb->dev, 0)) {
                int proxied = ip6_forward_proxy_check(skb);
                if (proxied > 0)
                        return ip6_input(skb);
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index e640d2f3c55c..14b925f36099 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -729,14 +729,16 @@ static void ndisc_solicit(struct neighbour *neigh, struct 
sk_buff *skb)
 static int pndisc_is_router(const void *pkey,
                            struct net_device *dev)
 {
+       struct net *net = dev_net(dev);
+       struct neigh_table *neigh_tbl = ipv6_neigh_table(net);
        struct pneigh_entry *n;
        int ret = -1;
 
-       read_lock_bh(&nd_tbl.lock);
-       n = __pneigh_lookup(&nd_tbl, dev_net(dev), pkey, dev);
+       read_lock_bh(&neigh_tbl->lock);
+       n = __pneigh_lookup(ipv6_neigh_table(net), net, pkey, dev);
        if (n)
                ret = !!(n->flags & NTF_ROUTER);
-       read_unlock_bh(&nd_tbl.lock);
+       read_unlock_bh(&neigh_tbl->lock);
 
        return ret;
 }
@@ -764,6 +766,8 @@ static void ndisc_recv_ns(struct sk_buff *skb)
        struct inet6_dev *idev = NULL;
        struct neighbour *neigh;
        int dad = ipv6_addr_any(saddr);
+       struct neigh_table *neigh_tbl;
+       struct net *net;
        bool inc;
        int is_router = -1;
        u64 nonce = 0;
@@ -816,7 +820,10 @@ static void ndisc_recv_ns(struct sk_buff *skb)
 
        inc = ipv6_addr_is_multicast(daddr);
 
-       ifp = ipv6_get_ifaddr(dev_net(dev), &msg->target, dev, 1);
+       net = dev_net(dev);
+       neigh_tbl = ipv6_neigh_table(net);
+
+       ifp = ipv6_get_ifaddr(net, &msg->target, dev, 1);
        if (ifp) {
 have_ifp:
                if (ifp->flags & (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)) {
@@ -851,8 +858,6 @@ static void ndisc_recv_ns(struct sk_buff *skb)
 
                idev = ifp->idev;
        } else {
-               struct net *net = dev_net(dev);
-
                /* perhaps an address on the master device */
                if (netif_is_l3_slave(dev)) {
                        struct net_device *mdev;
@@ -888,7 +893,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
                                 */
                                struct sk_buff *n = skb_clone(skb, GFP_ATOMIC);
                                if (n)
-                                       pneigh_enqueue(&nd_tbl, idev->nd_parms, 
n);
+                                       pneigh_enqueue(neigh_tbl, 
idev->nd_parms, n);
                                goto out;
                        }
                } else
@@ -905,15 +910,15 @@ static void ndisc_recv_ns(struct sk_buff *skb)
        }
 
        if (inc)
-               NEIGH_CACHE_STAT_INC(&nd_tbl, rcv_probes_mcast);
+               NEIGH_CACHE_STAT_INC(neigh_tbl, rcv_probes_mcast);
        else
-               NEIGH_CACHE_STAT_INC(&nd_tbl, rcv_probes_ucast);
+               NEIGH_CACHE_STAT_INC(neigh_tbl, rcv_probes_ucast);
 
        /*
         *      update / create cache entry
         *      for the source address
         */
-       neigh = __neigh_lookup(&nd_tbl, saddr, dev,
+       neigh = __neigh_lookup(neigh_tbl, saddr, dev,
                               !inc || lladdr || !dev->addr_len);
        if (neigh)
                ndisc_update(dev, neigh, lladdr, NUD_STALE,
@@ -1007,7 +1012,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
                in6_ifa_put(ifp);
                return;
        }
-       neigh = neigh_lookup(&nd_tbl, &msg->target, dev);
+       neigh = ipv6_neigh_lookup(dev, &msg->target);
 
        if (neigh) {
                u8 old_flags = neigh->flags;
@@ -1023,7 +1028,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
                 */
                if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
                    net->ipv6.devconf_all->forwarding && 
net->ipv6.devconf_all->proxy_ndp &&
-                   pneigh_lookup(&nd_tbl, net, &msg->target, dev, 0)) {
+                   ipv6_pneigh_lookup(net, &msg->target, dev, 0)) {
                        /* XXX: idev->cnf.proxy_ndp */
                        goto out;
                }
@@ -1091,7 +1096,7 @@ static void ndisc_recv_rs(struct sk_buff *skb)
                        goto out;
        }
 
-       neigh = __neigh_lookup(&nd_tbl, saddr, skb->dev, 1);
+       neigh = __ipv6_neigh_lookup(skb->dev, saddr, 1);
        if (neigh) {
                ndisc_update(skb->dev, neigh, lladdr, NUD_STALE,
                             NEIGH_UPDATE_F_WEAK_OVERRIDE|
@@ -1384,8 +1389,8 @@ static void ndisc_router_discovery(struct sk_buff *skb)
         */
 
        if (!neigh)
-               neigh = __neigh_lookup(&nd_tbl, &ipv6_hdr(skb)->saddr,
-                                      skb->dev, 1);
+               neigh = __ipv6_neigh_lookup(skb->dev, &ipv6_hdr(skb)->saddr, 1);
+
        if (neigh) {
                u8 *lladdr = NULL;
                if (ndopts.nd_opts_src_lladdr) {
@@ -1768,7 +1773,7 @@ static int ndisc_netdev_event(struct notifier_block 
*this, unsigned long event,
 
        switch (event) {
        case NETDEV_CHANGEADDR:
-               neigh_changeaddr(&nd_tbl, dev);
+               neigh_changeaddr(ipv6_neigh_table(dev_net(dev)), dev);
                fib6_run_gc(0, net, false);
                /* fallthrough */
        case NETDEV_UP:
@@ -1783,10 +1788,10 @@ static int ndisc_netdev_event(struct notifier_block 
*this, unsigned long event,
        case NETDEV_CHANGE:
                change_info = ptr;
                if (change_info->flags_changed & IFF_NOARP)
-                       neigh_changeaddr(&nd_tbl, dev);
+                       neigh_changeaddr(ipv6_neigh_table(dev_net(dev)), dev);
                break;
        case NETDEV_DOWN:
-               neigh_ifdown(&nd_tbl, dev);
+               neigh_ifdown(ipv6_neigh_table(dev_net(dev)), dev);
                fib6_run_gc(0, net, false);
                break;
        case NETDEV_NOTIFY_PEERS:
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 86a0e4333d42..17f01b8cb05f 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -207,10 +207,10 @@ struct neighbour *ip6_neigh_lookup(const struct in6_addr 
*gw,
        struct neighbour *n;
 
        daddr = choose_neigh_daddr(gw, skb, daddr);
-       n = __ipv6_neigh_lookup(dev, daddr);
+       n = __ipv6_neigh_lookup_noref(dev, daddr);
        if (n)
                return n;
-       return neigh_create(&nd_tbl, daddr, dev);
+       return ipv6_neigh_create(dev, daddr, true);
 }
 
 static struct neighbour *ip6_dst_neigh_lookup(const struct dst_entry *dst,
@@ -3392,7 +3392,7 @@ static void rt6_do_redirect(struct dst_entry *dst, struct 
sock *sk, struct sk_bu
         */
        dst_confirm_neigh(&rt->dst, &ipv6_hdr(skb)->saddr);
 
-       neigh = __neigh_lookup(&nd_tbl, &msg->target, skb->dev, 1);
+       neigh = __ipv6_neigh_lookup(skb->dev, &msg->target, 1);
        if (!neigh)
                return;
 
@@ -4064,9 +4064,11 @@ void rt6_sync_down_dev(struct net_device *dev, unsigned 
long event)
 
 void rt6_disable_ip(struct net_device *dev, unsigned long event)
 {
+       struct net *net = dev_net(dev);
+
        rt6_sync_down_dev(dev, event);
-       rt6_uncached_list_flush_dev(dev_net(dev), dev);
-       neigh_ifdown(&nd_tbl, dev);
+       rt6_uncached_list_flush_dev(net, dev);
+       neigh_ifdown(ipv6_neigh_table(net), dev);
 }
 
 struct rt6_mtu_change_arg {
-- 
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to