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
@@ -163,11 +163,14 @@ static inline bool ipv6_unicast_destination(const struct sk_buff *skb)
|
||||
return rt->rt6i_flags & RTF_LOCAL;
|
||||
}
|
||||
|
||||
static inline bool ipv6_anycast_destination(const struct sk_buff *skb)
|
||||
static inline bool ipv6_anycast_destination(const struct dst_entry *dst,
|
||||
const struct in6_addr *daddr)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *) skb_dst(skb);
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
|
||||
return rt->rt6i_flags & RTF_ANYCAST;
|
||||
return rt->rt6i_flags & RTF_ANYCAST ||
|
||||
(rt->rt6i_dst.plen != 128 &&
|
||||
ipv6_addr_equal(&rt->rt6i_dst.addr, daddr));
|
||||
}
|
||||
|
||||
int ip6_fragment(struct sock *sk, struct sk_buff *skb,
|
||||
@@ -194,9 +197,15 @@ static inline bool ip6_sk_ignore_df(const struct sock *sk)
|
||||
inet6_sk(sk)->pmtudisc == IPV6_PMTUDISC_OMIT;
|
||||
}
|
||||
|
||||
static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt)
|
||||
static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt,
|
||||
struct in6_addr *daddr)
|
||||
{
|
||||
return &rt->rt6i_gateway;
|
||||
if (rt->rt6i_flags & RTF_GATEWAY)
|
||||
return &rt->rt6i_gateway;
|
||||
else if (rt->rt6i_flags & RTF_CACHE)
|
||||
return &rt->rt6i_dst.addr;
|
||||
else
|
||||
return daddr;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user