ipv6: Remove external dependency on rt6i_gateway and RTF_ANYCAST
When creating a RTF_CACHE route, RTF_ANYCAST is set based on rt6i_dst. Also, rt6i_gateway is always set to the nexthop while the nexthop could be a gateway or the rt6i_dst.addr. After removing the rt6i_dst and rt6i_src dependency in the last patch, we also need to stop the caller from depending on rt6i_gateway and RTF_ANYCAST. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Cc: Hannes Frederic Sowa <hannes@stressinduktion.org> Cc: Steffen Klassert <steffen.klassert@secunet.com> Cc: Julian Anastasov <ja@ssi.bg> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
fd0273d793
commit
2647a9b070
@@ -779,8 +779,8 @@ static int callforward_do_filter(struct net *net,
|
||||
flowi6_to_flowi(&fl1), false)) {
|
||||
if (!afinfo->route(net, (struct dst_entry **)&rt2,
|
||||
flowi6_to_flowi(&fl2), false)) {
|
||||
if (ipv6_addr_equal(rt6_nexthop(rt1),
|
||||
rt6_nexthop(rt2)) &&
|
||||
if (ipv6_addr_equal(rt6_nexthop(rt1, &fl1.daddr),
|
||||
rt6_nexthop(rt2, &fl2.daddr)) &&
|
||||
rt1->dst.dev == rt2->dst.dev)
|
||||
ret = 1;
|
||||
dst_release(&rt2->dst);
|
||||
|
||||
@@ -73,7 +73,7 @@ static u32 match_lookup_rt6(struct net *net, const struct net_device *dev,
|
||||
|
||||
if (dev == NULL && rt->rt6i_flags & RTF_LOCAL)
|
||||
ret |= XT_ADDRTYPE_LOCAL;
|
||||
if (rt->rt6i_flags & RTF_ANYCAST)
|
||||
if (ipv6_anycast_destination((struct dst_entry *)rt, addr))
|
||||
ret |= XT_ADDRTYPE_ANYCAST;
|
||||
|
||||
dst_release(&rt->dst);
|
||||
|
||||
Reference in New Issue
Block a user