mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 23:29:46 +00:00
Revert "ipv6: ndisc: inherit metadata dst when creating ndisc requests"
This reverts commit ab450605b35caa768ca33e86db9403229bf42be4. In IPv6, we cannot inherit the dst of the original dst. ndisc packets are IPv6 packets and may take another route than the original packet. This patch breaks the following scenario: a packet comes from eth0 and is forwarded through vxlan1. The encapsulated packet triggers an NS which cannot be sent because of the wrong route. CC: Jiri Benc <jbenc@redhat.com> CC: Thomas Graf <tgraf@suug.ch> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
142a2e7ece
commit
304d888b29
@ -181,8 +181,7 @@ void ndisc_cleanup(void);
|
||||
int ndisc_rcv(struct sk_buff *skb);
|
||||
|
||||
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);
|
||||
const struct in6_addr *daddr, const struct in6_addr *saddr);
|
||||
|
||||
void ndisc_send_rs(struct net_device *dev,
|
||||
const struct in6_addr *saddr, const struct in6_addr *daddr);
|
||||
|
@ -3642,7 +3642,7 @@ static void addrconf_dad_work(struct work_struct *w)
|
||||
|
||||
/* send a neighbour solicitation for our addr */
|
||||
addrconf_addr_solict_mult(&ifp->addr, &mcaddr);
|
||||
ndisc_send_ns(ifp->idev->dev, &ifp->addr, &mcaddr, &in6addr_any, NULL);
|
||||
ndisc_send_ns(ifp->idev->dev, &ifp->addr, &mcaddr, &in6addr_any);
|
||||
out:
|
||||
in6_ifa_put(ifp);
|
||||
rtnl_unlock();
|
||||
|
@ -556,8 +556,7 @@ static void ndisc_send_unsol_na(struct net_device *dev)
|
||||
}
|
||||
|
||||
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)
|
||||
const struct in6_addr *daddr, const struct in6_addr *saddr)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct in6_addr addr_buf;
|
||||
@ -593,9 +592,6 @@ void ndisc_send_ns(struct net_device *dev, const struct in6_addr *solicit,
|
||||
ndisc_fill_addr_option(skb, ND_OPT_SOURCE_LL_ADDR,
|
||||
dev->dev_addr);
|
||||
|
||||
if (!(dev->priv_flags & IFF_XMIT_DST_RELEASE) && oskb)
|
||||
skb_dst_copy(skb, oskb);
|
||||
|
||||
ndisc_send_skb(skb, daddr, saddr);
|
||||
}
|
||||
|
||||
@ -682,12 +678,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, target, target, saddr, skb);
|
||||
ndisc_send_ns(dev, target, target, saddr);
|
||||
} 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, target, &mcaddr, saddr, skb);
|
||||
ndisc_send_ns(dev, target, &mcaddr, saddr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -523,7 +523,7 @@ static void rt6_probe_deferred(struct work_struct *w)
|
||||
container_of(w, struct __rt6_probe_work, work);
|
||||
|
||||
addrconf_addr_solict_mult(&work->target, &mcaddr);
|
||||
ndisc_send_ns(work->dev, &work->target, &mcaddr, NULL, NULL);
|
||||
ndisc_send_ns(work->dev, &work->target, &mcaddr, NULL);
|
||||
dev_put(work->dev);
|
||||
kfree(work);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user