mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
ipv6: make ipv6_anycast_destination logic usable without dst_entry
nft_fib_ipv6 uses ipv6_anycast_destination(), but upcoming patch removes the dst_entry usage in favor of fib6_result. Move the 'plen > 127' logic to a new helper and call it from the existing one. Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
@@ -252,15 +252,22 @@ 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 rt6key *rt6i_dst,
|
||||
u32 rt6i_flags,
|
||||
const struct in6_addr *daddr)
|
||||
{
|
||||
return rt6i_flags & RTF_ANYCAST ||
|
||||
(rt6i_dst->plen < 127 &&
|
||||
!(rt6i_flags & (RTF_GATEWAY | RTF_NONEXTHOP)) &&
|
||||
ipv6_addr_equal(&rt6i_dst->addr, daddr));
|
||||
}
|
||||
|
||||
static inline bool ipv6_anycast_destination(const struct dst_entry *dst,
|
||||
const struct in6_addr *daddr)
|
||||
{
|
||||
const struct rt6_info *rt = dst_rt6_info(dst);
|
||||
|
||||
return rt->rt6i_flags & RTF_ANYCAST ||
|
||||
(rt->rt6i_dst.plen < 127 &&
|
||||
!(rt->rt6i_flags & (RTF_GATEWAY | RTF_NONEXTHOP)) &&
|
||||
ipv6_addr_equal(&rt->rt6i_dst.addr, daddr));
|
||||
return __ipv6_anycast_destination(&rt->rt6i_dst, rt->rt6i_flags, daddr);
|
||||
}
|
||||
|
||||
int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
|
||||
|
||||
Reference in New Issue
Block a user