From 8689d027d8c13b0c14cede57fc8d65c7ba506e33 Mon Sep 17 00:00:00 2001 From: Dezhi Huang Date: Fri, 31 May 2024 14:22:24 +0800 Subject: [PATCH] ANDROID: GKI: net: add vendor hooks for link data path add vendor hooks to support link data path feature. 1.android_vh_dc_send_copy For send copy pkt on the other ways 2.android_vh_dc_receive For Drop duplicated pkt when dual connection connected Bug: 343838581 Change-Id: I31acba1827205c366a4f54c4b940d4d8f2c21bff Signed-off-by: Dezhi Huang (cherry picked from commit 86dd89554f8308fcd58af6156fd67ac2ac7facbf) (cherry picked from commit f949397a1b86bdb461a14176db4a7cdc6cc63cbc) --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/net.h | 5 +++++ net/core/dev.c | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 8551fb9adc69..5a2b3a9ad0f9 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -177,6 +177,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_mmap_file); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_file_open); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_suspend); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_set_affinity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dc_send_copy); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dc_receive); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery_set); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h index 124a93b498ee..8b74d4541773 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -81,6 +81,11 @@ DECLARE_HOOK(android_vh_tcp_rcv_established_fast_path, TP_PROTO(struct sock *sk), TP_ARGS(sk)); DECLARE_HOOK(android_vh_tcp_rcv_established_slow_path, TP_PROTO(struct sock *sk), TP_ARGS(sk)); +struct net_device; +DECLARE_HOOK(android_vh_dc_send_copy, + TP_PROTO(struct sk_buff *skb, struct net_device *dev), TP_ARGS(skb, dev)); +DECLARE_HOOK(android_vh_dc_receive, + TP_PROTO(struct sk_buff *skb, int *flag), TP_ARGS(skb, flag)); /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_NET_VH_H */ diff --git a/net/core/dev.c b/net/core/dev.c index 176d20e7d78c..e65028718d4d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3625,6 +3625,9 @@ static int xmit_one(struct sk_buff *skb, struct net_device *dev, len = skb->len; trace_net_dev_start_xmit(skb, dev); + + trace_android_vh_dc_send_copy(skb, dev); + rc = netdev_start_xmit(skb, dev, txq, more); trace_net_dev_xmit(skb, rc, dev, len); @@ -5509,6 +5512,7 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc, bool deliver_exact = false; int ret = NET_RX_DROP; __be16 type; + int flag = 0; net_timestamp_check(!READ_ONCE(net_hotdata.tstamp_prequeue), skb); @@ -5528,6 +5532,10 @@ another_round: __this_cpu_inc(softnet_data.processed); + trace_android_vh_dc_receive(skb, &flag); + if (flag != 0) + return NET_RX_DROP; + if (static_branch_unlikely(&generic_xdp_needed_key)) { int ret2;