Loading net/ipv4/ip_input.c +4 −1 Original line number Diff line number Diff line Loading @@ -309,6 +309,8 @@ static inline bool ip_rcv_options(struct sk_buff *skb, struct net_device *dev) return true; } INDIRECT_CALLABLE_DECLARE(int udp_v4_early_demux(struct sk_buff *)); INDIRECT_CALLABLE_DECLARE(int tcp_v4_early_demux(struct sk_buff *)); static int ip_rcv_finish_core(struct net *net, struct sock *sk, struct sk_buff *skb, struct net_device *dev) { Loading @@ -326,7 +328,8 @@ static int ip_rcv_finish_core(struct net *net, struct sock *sk, ipprot = rcu_dereference(inet_protos[protocol]); if (ipprot && (edemux = READ_ONCE(ipprot->early_demux))) { err = edemux(skb); err = INDIRECT_CALL_2(edemux, tcp_v4_early_demux, udp_v4_early_demux, skb); if (unlikely(err)) goto drop_error; /* must reload iph, skb->head might have changed */ Loading net/ipv6/ip6_input.c +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ #include <net/inet_ecn.h> #include <net/dst_metadata.h> INDIRECT_CALLABLE_DECLARE(void udp_v6_early_demux(struct sk_buff *)); INDIRECT_CALLABLE_DECLARE(void tcp_v6_early_demux(struct sk_buff *)); static void ip6_rcv_finish_core(struct net *net, struct sock *sk, struct sk_buff *skb) { Loading @@ -58,7 +60,8 @@ static void ip6_rcv_finish_core(struct net *net, struct sock *sk, ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]); if (ipprot && (edemux = READ_ONCE(ipprot->early_demux))) edemux(skb); INDIRECT_CALL_2(edemux, tcp_v6_early_demux, udp_v6_early_demux, skb); } if (!skb_valid_dst(skb)) ip6_route_input(skb); Loading net/ipv6/tcp_ipv6.c +1 −1 Original line number Diff line number Diff line Loading @@ -1655,7 +1655,7 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) goto discard_it; } static void tcp_v6_early_demux(struct sk_buff *skb) INDIRECT_CALLABLE_SCOPE void tcp_v6_early_demux(struct sk_buff *skb) { const struct ipv6hdr *hdr; const struct tcphdr *th; Loading net/ipv6/udp.c +1 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,7 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net, return NULL; } static void udp_v6_early_demux(struct sk_buff *skb) INDIRECT_CALLABLE_SCOPE void udp_v6_early_demux(struct sk_buff *skb) { struct net *net = dev_net(skb->dev); const struct udphdr *uh; Loading Loading
net/ipv4/ip_input.c +4 −1 Original line number Diff line number Diff line Loading @@ -309,6 +309,8 @@ static inline bool ip_rcv_options(struct sk_buff *skb, struct net_device *dev) return true; } INDIRECT_CALLABLE_DECLARE(int udp_v4_early_demux(struct sk_buff *)); INDIRECT_CALLABLE_DECLARE(int tcp_v4_early_demux(struct sk_buff *)); static int ip_rcv_finish_core(struct net *net, struct sock *sk, struct sk_buff *skb, struct net_device *dev) { Loading @@ -326,7 +328,8 @@ static int ip_rcv_finish_core(struct net *net, struct sock *sk, ipprot = rcu_dereference(inet_protos[protocol]); if (ipprot && (edemux = READ_ONCE(ipprot->early_demux))) { err = edemux(skb); err = INDIRECT_CALL_2(edemux, tcp_v4_early_demux, udp_v4_early_demux, skb); if (unlikely(err)) goto drop_error; /* must reload iph, skb->head might have changed */ Loading
net/ipv6/ip6_input.c +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ #include <net/inet_ecn.h> #include <net/dst_metadata.h> INDIRECT_CALLABLE_DECLARE(void udp_v6_early_demux(struct sk_buff *)); INDIRECT_CALLABLE_DECLARE(void tcp_v6_early_demux(struct sk_buff *)); static void ip6_rcv_finish_core(struct net *net, struct sock *sk, struct sk_buff *skb) { Loading @@ -58,7 +60,8 @@ static void ip6_rcv_finish_core(struct net *net, struct sock *sk, ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]); if (ipprot && (edemux = READ_ONCE(ipprot->early_demux))) edemux(skb); INDIRECT_CALL_2(edemux, tcp_v6_early_demux, udp_v6_early_demux, skb); } if (!skb_valid_dst(skb)) ip6_route_input(skb); Loading
net/ipv6/tcp_ipv6.c +1 −1 Original line number Diff line number Diff line Loading @@ -1655,7 +1655,7 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) goto discard_it; } static void tcp_v6_early_demux(struct sk_buff *skb) INDIRECT_CALLABLE_SCOPE void tcp_v6_early_demux(struct sk_buff *skb) { const struct ipv6hdr *hdr; const struct tcphdr *th; Loading
net/ipv6/udp.c +1 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,7 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net, return NULL; } static void udp_v6_early_demux(struct sk_buff *skb) INDIRECT_CALLABLE_SCOPE void udp_v6_early_demux(struct sk_buff *skb) { struct net *net = dev_net(skb->dev); const struct udphdr *uh; Loading