ANDROID: GKI: Add hooks for network management.

These hooks allow vendor modules to perform more operations
on various data streams, thereby enhancing the user's internet
experience.

'trace_android_vh_tcp_v4_connect', 'trace_android_vh_tcp_v6_connect',
'trace_android_vh_udp_v4_connect' and 'trace_android_vh_udp_v6_connect'
are invoked when a TCP or UDP stream is about to establish a
connection. The vendor module willassist in binding the stream to
different network interfaces based on additional information.

Bug: 356731522
Change-Id: Ibf85875d6c846843d5d29a874c9c2cd6aaac30ad
Signed-off-by: jiangxinpei <huangdezhi@hihonor.com>
(cherry picked from commit 17d93c3ecffa190d8b72300e0aff6b4d285f6305)
This commit is contained in:
jiangxinpei
2024-06-27 20:24:49 +08:00
committed by Treehugger Robot
parent 7c789dabc8
commit 570da3349b
6 changed files with 24 additions and 0 deletions
+4
View File
@@ -231,6 +231,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dma_buf_stats_teardown);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_v4_connect);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_v6_connect);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_v4_connect);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_v6_connect);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_wq_wait_start);
+10
View File
@@ -15,6 +15,16 @@ DECLARE_HOOK(android_vh_ptype_head,
TP_ARGS(pt, vendor_pt));
struct sock;
struct sockaddr_in6;
DECLARE_HOOK(android_vh_tcp_v4_connect,
TP_PROTO(struct sock *sk, struct sockaddr *uaddr), TP_ARGS(sk, uaddr));
DECLARE_HOOK(android_vh_tcp_v6_connect,
TP_PROTO(struct sock *sk, struct sockaddr *uaddr), TP_ARGS(sk, uaddr));
DECLARE_HOOK(android_vh_udp_v4_connect,
TP_PROTO(struct sock *sk, __be32 daddr, __be16 dport, uint16_t family),
TP_ARGS(sk, daddr, dport, family));
DECLARE_HOOK(android_vh_udp_v6_connect,
TP_PROTO(struct sock *sk, struct sockaddr_in6 *sin6), TP_ARGS(sk, sin6));
DECLARE_HOOK(android_vh_tcp_write_timeout_estab_retrans,
TP_PROTO(struct sock *sk), TP_ARGS(sk));
DECLARE_HOOK(android_vh_tcp_connect,
+3
View File
@@ -85,6 +85,7 @@
#include <linux/scatterlist.h>
#include <trace/events/tcp.h>
#include <trace/hooks/net.h>
#ifdef CONFIG_TCP_MD5SIG
static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
@@ -235,6 +236,8 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
if (usin->sin_family != AF_INET)
return -EAFNOSUPPORT;
trace_android_vh_tcp_v4_connect(sk, uaddr);
nexthop = daddr = usin->sin_addr.s_addr;
inet_opt = rcu_dereference_protected(inet->inet_opt,
lockdep_sock_is_held(sk));
+2
View File
@@ -1135,6 +1135,8 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
connected = 1;
}
trace_android_vh_udp_v4_connect(sk, daddr, dport, AF_INET);
ipcm_init_sk(&ipc, inet);
ipc.gso_size = READ_ONCE(up->gso_size);
+3
View File
@@ -69,6 +69,7 @@
#include <linux/scatterlist.h>
#include <trace/events/tcp.h>
#include <trace/hooks/net.h>
static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb,
enum sk_rst_reason reason);
@@ -256,6 +257,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
return err;
}
trace_android_vh_tcp_v6_connect(sk, uaddr);
if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr))
saddr = &sk->sk_v6_rcv_saddr;
+2
View File
@@ -1472,6 +1472,8 @@ do_udp_sendmsg:
connected = true;
}
trace_android_vh_udp_v6_connect(sk, sin6);
if (!fl6->flowi6_oif)
fl6->flowi6_oif = READ_ONCE(sk->sk_bound_dev_if);