]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tcp: move tcp_v6_early_demux() to net/ipv6/ip6_input.c
authorEric Dumazet <edumazet@google.com>
Wed, 4 Mar 2026 02:27:06 +0000 (02:27 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 6 Mar 2026 02:33:51 +0000 (18:33 -0800)
tcp_v6_early_demux() has a single caller : ip6_rcv_finish_core().

Move it to net/ipv6/ip6_input.c and mark it static, for possible
compiler/linker optimizations.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260304022706.1062459-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/tcp.h
net/ipv6/ip6_input.c
net/ipv6/tcp_ipv6.c

index 3f1fe954e6aa0e5bcd71f8215e744a9d7968395e..a6464142380696e4948a836145ac7aca4ca3ec15 100644 (file)
@@ -1142,7 +1142,6 @@ static inline int tcp_v6_sdif(const struct sk_buff *skb)
 extern const struct inet_connection_sock_af_ops ipv6_specific;
 
 INDIRECT_CALLABLE_DECLARE(int tcp_v6_rcv(struct sk_buff *skb));
-void tcp_v6_early_demux(struct sk_buff *skb);
 
 #endif
 
index 2bcb981c91aa83fe08d782c29a185c8559aeacde..967b07aeb6831e2e1d3f1526c5be04da8a18b68b 100644 (file)
 #include <net/xfrm.h>
 #include <net/inet_ecn.h>
 #include <net/dst_metadata.h>
+#include <net/inet6_hashtables.h>
+
+static void tcp_v6_early_demux(struct sk_buff *skb)
+{
+       struct net *net = dev_net_rcu(skb->dev);
+       const struct ipv6hdr *hdr;
+       const struct tcphdr *th;
+       struct sock *sk;
+
+       if (skb->pkt_type != PACKET_HOST)
+               return;
+
+       if (!pskb_may_pull(skb, skb_transport_offset(skb) +
+                               sizeof(struct tcphdr)))
+               return;
+
+       hdr = ipv6_hdr(skb);
+       th = tcp_hdr(skb);
+
+       if (th->doff < sizeof(struct tcphdr) / 4)
+               return;
+
+       /* Note : We use inet6_iif() here, not tcp_v6_iif() */
+       sk = __inet6_lookup_established(net, &hdr->saddr, th->source,
+                                       &hdr->daddr, ntohs(th->dest),
+                                       inet6_iif(skb), inet6_sdif(skb));
+       if (sk) {
+               skb->sk = sk;
+               skb->destructor = sock_edemux;
+               if (sk_fullsock(sk)) {
+                       struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst);
+
+                       if (dst)
+                               dst = dst_check(dst, sk->sk_rx_dst_cookie);
+                       if (dst &&
+                           sk->sk_rx_dst_ifindex == skb->skb_iif)
+                               skb_dst_set_noref(skb, dst);
+               }
+       }
+}
 
 static void ip6_rcv_finish_core(struct net *net, struct sock *sk,
                                struct sk_buff *skb)
index a62dd2999aecc27e24840031fbb1220bda210a05..164dceb842af767d93d0a2389564f543b2ba2fbf 100644 (file)
@@ -1972,44 +1972,6 @@ do_time_wait:
        goto discard_it;
 }
 
-void tcp_v6_early_demux(struct sk_buff *skb)
-{
-       struct net *net = dev_net_rcu(skb->dev);
-       const struct ipv6hdr *hdr;
-       const struct tcphdr *th;
-       struct sock *sk;
-
-       if (skb->pkt_type != PACKET_HOST)
-               return;
-
-       if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr)))
-               return;
-
-       hdr = ipv6_hdr(skb);
-       th = tcp_hdr(skb);
-
-       if (th->doff < sizeof(struct tcphdr) / 4)
-               return;
-
-       /* Note : We use inet6_iif() here, not tcp_v6_iif() */
-       sk = __inet6_lookup_established(net, &hdr->saddr, th->source,
-                                       &hdr->daddr, ntohs(th->dest),
-                                       inet6_iif(skb), inet6_sdif(skb));
-       if (sk) {
-               skb->sk = sk;
-               skb->destructor = sock_edemux;
-               if (sk_fullsock(sk)) {
-                       struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst);
-
-                       if (dst)
-                               dst = dst_check(dst, sk->sk_rx_dst_cookie);
-                       if (dst &&
-                           sk->sk_rx_dst_ifindex == skb->skb_iif)
-                               skb_dst_set_noref(skb, dst);
-               }
-       }
-}
-
 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
        .twsk_obj_size  = sizeof(struct tcp6_timewait_sock),
 };