]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipv6: make ipv6_anycast_destination logic usable without dst_entry
authorFlorian Westphal <fw@strlen.de>
Tue, 24 Feb 2026 20:09:31 +0000 (21:09 +0100)
committerFlorian Westphal <fw@strlen.de>
Wed, 4 Mar 2026 10:45:44 +0000 (11:45 +0100)
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>
include/net/ip6_route.h

index a55f9bf95fe393311967b9b94073acb3860214aa..0c8eeb6abe7acbd7ca462806521756114731f0e9 100644 (file)
@@ -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,