|
@@ -474,8 +474,7 @@ static void ndisc_send_skb(struct sk_buff *skb,
|
|
|
rcu_read_unlock();
|
|
|
}
|
|
|
|
|
|
-void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
|
|
- const struct in6_addr *daddr,
|
|
|
+void ndisc_send_na(struct net_device *dev, const struct in6_addr *daddr,
|
|
|
const struct in6_addr *solicited_addr,
|
|
|
bool router, bool solicited, bool override, bool inc_opt)
|
|
|
{
|
|
@@ -541,7 +540,7 @@ static void ndisc_send_unsol_na(struct net_device *dev)
|
|
|
|
|
|
read_lock_bh(&idev->lock);
|
|
|
list_for_each_entry(ifa, &idev->addr_list, if_list) {
|
|
|
- ndisc_send_na(dev, NULL, &in6addr_linklocal_allnodes, &ifa->addr,
|
|
|
+ ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr,
|
|
|
/*router=*/ !!idev->cnf.forwarding,
|
|
|
/*solicited=*/ false, /*override=*/ true,
|
|
|
/*inc_opt=*/ true);
|
|
@@ -551,8 +550,7 @@ static void ndisc_send_unsol_na(struct net_device *dev)
|
|
|
in6_dev_put(idev);
|
|
|
}
|
|
|
|
|
|
-void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
|
|
|
- const struct in6_addr *solicit,
|
|
|
+void ndisc_send_ns(struct net_device *dev, const struct in6_addr *solicit,
|
|
|
const struct in6_addr *daddr, const struct in6_addr *saddr,
|
|
|
struct sk_buff *oskb)
|
|
|
{
|
|
@@ -679,12 +677,12 @@ static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb)
|
|
|
"%s: trying to ucast probe in NUD_INVALID: %pI6\n",
|
|
|
__func__, target);
|
|
|
}
|
|
|
- ndisc_send_ns(dev, neigh, target, target, saddr, skb);
|
|
|
+ ndisc_send_ns(dev, target, target, saddr, skb);
|
|
|
} else if ((probes -= NEIGH_VAR(neigh->parms, APP_PROBES)) < 0) {
|
|
|
neigh_app_ns(neigh);
|
|
|
} else {
|
|
|
addrconf_addr_solict_mult(target, &mcaddr);
|
|
|
- ndisc_send_ns(dev, NULL, target, &mcaddr, saddr, skb);
|
|
|
+ ndisc_send_ns(dev, target, &mcaddr, saddr, skb);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -828,7 +826,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
|
|
|
is_router = idev->cnf.forwarding;
|
|
|
|
|
|
if (dad) {
|
|
|
- ndisc_send_na(dev, NULL, &in6addr_linklocal_allnodes, &msg->target,
|
|
|
+ ndisc_send_na(dev, &in6addr_linklocal_allnodes, &msg->target,
|
|
|
!!is_router, false, (ifp != NULL), true);
|
|
|
goto out;
|
|
|
}
|
|
@@ -849,8 +847,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
|
|
|
NEIGH_UPDATE_F_WEAK_OVERRIDE|
|
|
|
NEIGH_UPDATE_F_OVERRIDE);
|
|
|
if (neigh || !dev->header_ops) {
|
|
|
- ndisc_send_na(dev, neigh, saddr, &msg->target,
|
|
|
- !!is_router,
|
|
|
+ ndisc_send_na(dev, saddr, &msg->target, !!is_router,
|
|
|
true, (ifp != NULL && inc), inc);
|
|
|
if (neigh)
|
|
|
neigh_release(neigh);
|