ANDROID: vendor_hooks: Add hooks to tcp/udp send/recv msg functions.
Add hook to tcp/udp to collect network info and do performance tuning. Bug: 190523684 Change-Id: Id790a381d5ce6c35a747697510f14678ccf3ff2f Signed-off-by: Liangliang Li <liliangliang@vivo.com>
This commit is contained in:
@@ -72,6 +72,7 @@
|
|||||||
#include <trace/hooks/ipv6.h>
|
#include <trace/hooks/ipv6.h>
|
||||||
#include <trace/hooks/sound.h>
|
#include <trace/hooks/sound.h>
|
||||||
#include <trace/hooks/snd_compr.h>
|
#include <trace/hooks/snd_compr.h>
|
||||||
|
#include <trace/hooks/ipv4.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
||||||
@@ -371,3 +372,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipv6_gen_linklocal_addr);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sound_usb_support_cpu_suspend);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sound_usb_support_cpu_suspend);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_snd_compr_use_pause_in_drain);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_snd_compr_use_pause_in_drain);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_sendmsg_locked);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_sendmsg);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_udp_recvmsg);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tcp_recvmsg_stat);
|
||||||
|
34
include/trace/hooks/ipv4.h
Normal file
34
include/trace/hooks/ipv4.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
|
#undef TRACE_SYSTEM
|
||||||
|
#define TRACE_SYSTEM ipv4
|
||||||
|
#define TRACE_INCLUDE_PATH trace/hooks
|
||||||
|
|
||||||
|
#if !defined(_TRACE_HOOK_IPV4_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||||
|
#define _TRACE_HOOK_IPV4_H
|
||||||
|
#include <linux/tracepoint.h>
|
||||||
|
#include <trace/hooks/vendor_hooks.h>
|
||||||
|
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_sendmsg_locked,
|
||||||
|
TP_PROTO(struct sock *sk, int size),
|
||||||
|
TP_ARGS(sk, size), 1);
|
||||||
|
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_recvmsg,
|
||||||
|
TP_PROTO(struct sock *sk),
|
||||||
|
TP_ARGS(sk), 1);
|
||||||
|
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_udp_sendmsg,
|
||||||
|
TP_PROTO(struct sock *sk),
|
||||||
|
TP_ARGS(sk), 1);
|
||||||
|
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_udp_recvmsg,
|
||||||
|
TP_PROTO(struct sock *sk),
|
||||||
|
TP_ARGS(sk), 1);
|
||||||
|
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_tcp_recvmsg_stat,
|
||||||
|
TP_PROTO(struct sock *sk, int size),
|
||||||
|
TP_ARGS(sk, size), 1);
|
||||||
|
|
||||||
|
#endif /* _TRACE_HOOK_IPV4_H */
|
||||||
|
/* This part must be outside protection */
|
||||||
|
#include <trace/define_trace.h>
|
@@ -280,6 +280,7 @@
|
|||||||
#include <asm/ioctls.h>
|
#include <asm/ioctls.h>
|
||||||
#include <net/busy_poll.h>
|
#include <net/busy_poll.h>
|
||||||
|
|
||||||
|
#include <trace/hooks/ipv4.h>
|
||||||
struct percpu_counter tcp_orphan_count;
|
struct percpu_counter tcp_orphan_count;
|
||||||
EXPORT_SYMBOL_GPL(tcp_orphan_count);
|
EXPORT_SYMBOL_GPL(tcp_orphan_count);
|
||||||
|
|
||||||
@@ -1198,6 +1199,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
|
|||||||
bool zc = false;
|
bool zc = false;
|
||||||
long timeo;
|
long timeo;
|
||||||
|
|
||||||
|
trace_android_rvh_tcp_sendmsg_locked(sk, size);
|
||||||
flags = msg->msg_flags;
|
flags = msg->msg_flags;
|
||||||
|
|
||||||
if (flags & MSG_ZEROCOPY && size && sock_flag(sk, SOCK_ZEROCOPY)) {
|
if (flags & MSG_ZEROCOPY && size && sock_flag(sk, SOCK_ZEROCOPY)) {
|
||||||
@@ -2031,6 +2033,7 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
|
|||||||
|
|
||||||
if (unlikely(flags & MSG_ERRQUEUE))
|
if (unlikely(flags & MSG_ERRQUEUE))
|
||||||
return inet_recv_error(sk, msg, len, addr_len);
|
return inet_recv_error(sk, msg, len, addr_len);
|
||||||
|
trace_android_rvh_tcp_recvmsg(sk);
|
||||||
|
|
||||||
if (sk_can_busy_loop(sk) && skb_queue_empty_lockless(&sk->sk_receive_queue) &&
|
if (sk_can_busy_loop(sk) && skb_queue_empty_lockless(&sk->sk_receive_queue) &&
|
||||||
(sk->sk_state == TCP_ESTABLISHED))
|
(sk->sk_state == TCP_ESTABLISHED))
|
||||||
@@ -2243,6 +2246,7 @@ found_fin_ok:
|
|||||||
break;
|
break;
|
||||||
} while (len > 0);
|
} while (len > 0);
|
||||||
|
|
||||||
|
trace_android_rvh_tcp_recvmsg_stat(sk, copied);
|
||||||
/* According to UNIX98, msg_name/msg_namelen are ignored
|
/* According to UNIX98, msg_name/msg_namelen are ignored
|
||||||
* on connected socket. I was just happy when found this 8) --ANK
|
* on connected socket. I was just happy when found this 8) --ANK
|
||||||
*/
|
*/
|
||||||
|
@@ -116,6 +116,7 @@
|
|||||||
#if IS_ENABLED(CONFIG_IPV6)
|
#if IS_ENABLED(CONFIG_IPV6)
|
||||||
#include <net/ipv6_stubs.h>
|
#include <net/ipv6_stubs.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <trace/hooks/ipv4.h>
|
||||||
|
|
||||||
struct udp_table udp_table __read_mostly;
|
struct udp_table udp_table __read_mostly;
|
||||||
EXPORT_SYMBOL(udp_table);
|
EXPORT_SYMBOL(udp_table);
|
||||||
@@ -1049,6 +1050,7 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|||||||
|
|
||||||
if (msg->msg_flags & MSG_OOB) /* Mirror BSD error message compatibility */
|
if (msg->msg_flags & MSG_OOB) /* Mirror BSD error message compatibility */
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
trace_android_rvh_udp_sendmsg(sk);
|
||||||
|
|
||||||
getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
|
getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
|
||||||
|
|
||||||
@@ -1801,6 +1803,7 @@ try_again:
|
|||||||
skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
|
skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
|
||||||
if (!skb)
|
if (!skb)
|
||||||
return err;
|
return err;
|
||||||
|
trace_android_rvh_udp_recvmsg(sk);
|
||||||
|
|
||||||
ulen = udp_skb_len(skb);
|
ulen = udp_skb_len(skb);
|
||||||
copied = len;
|
copied = len;
|
||||||
|
Reference in New Issue
Block a user