net: ipv6: Fixup device for anycast routes during copy
Florian reported a breakage with anycast routes due to commit4832c30d54
("net: ipv6: put host and anycast routes on device with address"). Prior to this commit anycast routes were added against the loopback device causing repetitive route entries with no insight into why they existed. e.g.: $ ip -6 ro ls table local type anycast anycast 2001:db8:1:: dev lo proto kernel metric 0 pref medium anycast 2001:db8:2:: dev lo proto kernel metric 0 pref medium anycast fe80:: dev lo proto kernel metric 0 pref medium anycast fe80:: dev lo proto kernel metric 0 pref medium The point of commit4832c30d54
is to add the routes using the device with the address which is causing the route to be added. e.g.,: $ ip -6 ro ls table local type anycast anycast 2001:db8:1:: dev eth1 proto kernel metric 0 pref medium anycast 2001:db8:2:: dev eth2 proto kernel metric 0 pref medium anycast fe80:: dev eth2 proto kernel metric 0 pref medium anycast fe80:: dev eth1 proto kernel metric 0 pref medium For traffic to work as it did before, the dst device needs to be switched to the loopback when the copy is created similar to local routes. Fixes:4832c30d54
("net: ipv6: put host and anycast routes on device with address") Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9477fef4b6
commit
98d11291d1
@ -1024,7 +1024,7 @@ static struct net_device *ip6_rt_get_dev_rcu(struct rt6_info *rt)
|
||||
{
|
||||
struct net_device *dev = rt->dst.dev;
|
||||
|
||||
if (rt->rt6i_flags & RTF_LOCAL) {
|
||||
if (rt->rt6i_flags & (RTF_LOCAL | RTF_ANYCAST)) {
|
||||
/* for copies of local routes, dst->dev needs to be the
|
||||
* device if it is a master device, the master device if
|
||||
* device is enslaved, and the loopback as the default
|
||||
|
Loading…
Reference in New Issue
Block a user