diff options
author | Stephen Suryaputra <ssuryaextr@gmail.com> | 2018-06-01 00:05:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-06-04 10:16:45 -0400 |
commit | 2f17becfbea5e9a0529b51da7345783e96e69516 (patch) | |
tree | b13547b70ef8bf299cd075b8e335bebb16dcb342 /net/ipv6/ndisc.c | |
parent | cfed0a2c98d798bed970fd450eb4d7854705b3e1 (diff) | |
download | linux-2f17becfbea5e9a0529b51da7345783e96e69516.tar.gz linux-2f17becfbea5e9a0529b51da7345783e96e69516.tar.bz2 linux-2f17becfbea5e9a0529b51da7345783e96e69516.zip |
vrf: check the original netdevice for generating redirect
Use the right device to determine if redirect should be sent especially
when using vrf. Same as well as when sending the redirect.
Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com>
Acked-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 9ac5366064e3..e640d2f3c55c 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1578,6 +1578,12 @@ void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target) ops_data_buf[NDISC_OPS_REDIRECT_DATA_SPACE], *ops_data = NULL; bool ret; + if (netif_is_l3_master(skb->dev)) { + dev = __dev_get_by_index(dev_net(skb->dev), IPCB(skb)->iif); + if (!dev) + return; + } + if (ipv6_get_lladdr(dev, &saddr_buf, IFA_F_TENTATIVE)) { ND_PRINTK(2, warn, "Redirect: no link-local address on %s\n", dev->name); |