net: remove duplicate reuseport_lookup functions
[platform/kernel/linux-starfive.git] / net / ipv6 / udp.c
index 556d74a..918ca17 100644 (file)
@@ -71,11 +71,12 @@ int udpv6_init_sock(struct sock *sk)
        return 0;
 }
 
-static u32 udp6_ehashfn(const struct net *net,
-                       const struct in6_addr *laddr,
-                       const u16 lport,
-                       const struct in6_addr *faddr,
-                       const __be16 fport)
+INDIRECT_CALLABLE_SCOPE
+u32 udp6_ehashfn(const struct net *net,
+                const struct in6_addr *laddr,
+                const u16 lport,
+                const struct in6_addr *faddr,
+                const __be16 fport)
 {
        static u32 udp6_ehash_secret __read_mostly;
        static u32 udp_ipv6_hash_secret __read_mostly;
@@ -160,24 +161,6 @@ static int compute_score(struct sock *sk, struct net *net,
        return score;
 }
 
-static struct sock *lookup_reuseport(struct net *net, struct sock *sk,
-                                    struct sk_buff *skb,
-                                    const struct in6_addr *saddr,
-                                    __be16 sport,
-                                    const struct in6_addr *daddr,
-                                    unsigned int hnum)
-{
-       struct sock *reuse_sk = NULL;
-       u32 hash;
-
-       if (sk->sk_reuseport && sk->sk_state != TCP_ESTABLISHED) {
-               hash = udp6_ehashfn(net, daddr, hnum, saddr, sport);
-               reuse_sk = reuseport_select_sock(sk, hash, skb,
-                                                sizeof(struct udphdr));
-       }
-       return reuse_sk;
-}
-
 /* called with rcu_read_lock() */
 static struct sock *udp6_lib_lookup2(struct net *net,
                const struct in6_addr *saddr, __be16 sport,
@@ -195,7 +178,14 @@ static struct sock *udp6_lib_lookup2(struct net *net,
                                      daddr, hnum, dif, sdif);
                if (score > badness) {
                        badness = score;
-                       result = lookup_reuseport(net, sk, skb, saddr, sport, daddr, hnum);
+
+                       if (sk->sk_state == TCP_ESTABLISHED) {
+                               result = sk;
+                               continue;
+                       }
+
+                       result = inet6_lookup_reuseport(net, sk, skb, sizeof(struct udphdr),
+                                                       saddr, sport, daddr, hnum, udp6_ehashfn);
                        if (!result) {
                                result = sk;
                                continue;
@@ -235,7 +225,8 @@ static inline struct sock *udp6_lookup_run_bpf(struct net *net,
        if (no_reuseport || IS_ERR_OR_NULL(sk))
                return sk;
 
-       reuse_sk = lookup_reuseport(net, sk, skb, saddr, sport, daddr, hnum);
+       reuse_sk = inet6_lookup_reuseport(net, sk, skb, sizeof(struct udphdr),
+                                         saddr, sport, daddr, hnum, udp6_ehashfn);
        if (reuse_sk)
                sk = reuse_sk;
        return sk;