1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 23847ce32SSatoru Moriya #undef TRACE_SYSTEM 33847ce32SSatoru Moriya #define TRACE_SYSTEM sock 43847ce32SSatoru Moriya 53847ce32SSatoru Moriya #if !defined(_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ) 63847ce32SSatoru Moriya #define _TRACE_SOCK_H 73847ce32SSatoru Moriya 83847ce32SSatoru Moriya #include <net/sock.h> 9563e0bb0SYafang Shao #include <net/ipv6.h> 103847ce32SSatoru Moriya #include <linux/tracepoint.h> 11563e0bb0SYafang Shao #include <linux/ipv6.h> 12563e0bb0SYafang Shao #include <linux/tcp.h> 13563e0bb0SYafang Shao 140c3b34d8SYafang Shao #define family_names \ 150c3b34d8SYafang Shao EM(AF_INET) \ 160c3b34d8SYafang Shao EMe(AF_INET6) 170c3b34d8SYafang Shao 180c3b34d8SYafang Shao /* The protocol traced by inet_sock_set_state */ 19563e0bb0SYafang Shao #define inet_protocol_names \ 20563e0bb0SYafang Shao EM(IPPROTO_TCP) \ 21563e0bb0SYafang Shao EM(IPPROTO_DCCP) \ 22563e0bb0SYafang Shao EMe(IPPROTO_SCTP) 23563e0bb0SYafang Shao 24563e0bb0SYafang Shao #define tcp_state_names \ 25563e0bb0SYafang Shao EM(TCP_ESTABLISHED) \ 26563e0bb0SYafang Shao EM(TCP_SYN_SENT) \ 27563e0bb0SYafang Shao EM(TCP_SYN_RECV) \ 28563e0bb0SYafang Shao EM(TCP_FIN_WAIT1) \ 29563e0bb0SYafang Shao EM(TCP_FIN_WAIT2) \ 30563e0bb0SYafang Shao EM(TCP_TIME_WAIT) \ 31563e0bb0SYafang Shao EM(TCP_CLOSE) \ 32563e0bb0SYafang Shao EM(TCP_CLOSE_WAIT) \ 33563e0bb0SYafang Shao EM(TCP_LAST_ACK) \ 34563e0bb0SYafang Shao EM(TCP_LISTEN) \ 35563e0bb0SYafang Shao EM(TCP_CLOSING) \ 36563e0bb0SYafang Shao EMe(TCP_NEW_SYN_RECV) 37563e0bb0SYafang Shao 38d6f19938SYafang Shao #define skmem_kind_names \ 39d6f19938SYafang Shao EM(SK_MEM_SEND) \ 40d6f19938SYafang Shao EMe(SK_MEM_RECV) 41d6f19938SYafang Shao 42563e0bb0SYafang Shao /* enums need to be exported to user space */ 43563e0bb0SYafang Shao #undef EM 44563e0bb0SYafang Shao #undef EMe 45563e0bb0SYafang Shao #define EM(a) TRACE_DEFINE_ENUM(a); 46563e0bb0SYafang Shao #define EMe(a) TRACE_DEFINE_ENUM(a); 47563e0bb0SYafang Shao 480c3b34d8SYafang Shao family_names 49563e0bb0SYafang Shao inet_protocol_names 50563e0bb0SYafang Shao tcp_state_names 51d6f19938SYafang Shao skmem_kind_names 52563e0bb0SYafang Shao 53563e0bb0SYafang Shao #undef EM 54563e0bb0SYafang Shao #undef EMe 55563e0bb0SYafang Shao #define EM(a) { a, #a }, 56563e0bb0SYafang Shao #define EMe(a) { a, #a } 57563e0bb0SYafang Shao 580c3b34d8SYafang Shao #define show_family_name(val) \ 590c3b34d8SYafang Shao __print_symbolic(val, family_names) 600c3b34d8SYafang Shao 61563e0bb0SYafang Shao #define show_inet_protocol_name(val) \ 62563e0bb0SYafang Shao __print_symbolic(val, inet_protocol_names) 63563e0bb0SYafang Shao 64563e0bb0SYafang Shao #define show_tcp_state_name(val) \ 65563e0bb0SYafang Shao __print_symbolic(val, tcp_state_names) 663847ce32SSatoru Moriya 67d6f19938SYafang Shao #define show_skmem_kind_names(val) \ 68d6f19938SYafang Shao __print_symbolic(val, skmem_kind_names) 69d6f19938SYafang Shao 703847ce32SSatoru Moriya TRACE_EVENT(sock_rcvqueue_full, 713847ce32SSatoru Moriya 723847ce32SSatoru Moriya TP_PROTO(struct sock *sk, struct sk_buff *skb), 733847ce32SSatoru Moriya 743847ce32SSatoru Moriya TP_ARGS(sk, skb), 753847ce32SSatoru Moriya 763847ce32SSatoru Moriya TP_STRUCT__entry( 773847ce32SSatoru Moriya __field(int, rmem_alloc) 783847ce32SSatoru Moriya __field(unsigned int, truesize) 793847ce32SSatoru Moriya __field(int, sk_rcvbuf) 803847ce32SSatoru Moriya ), 813847ce32SSatoru Moriya 823847ce32SSatoru Moriya TP_fast_assign( 833847ce32SSatoru Moriya __entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc); 843847ce32SSatoru Moriya __entry->truesize = skb->truesize; 85ebb3b78dSEric Dumazet __entry->sk_rcvbuf = READ_ONCE(sk->sk_rcvbuf); 863847ce32SSatoru Moriya ), 873847ce32SSatoru Moriya 883847ce32SSatoru Moriya TP_printk("rmem_alloc=%d truesize=%u sk_rcvbuf=%d", 893847ce32SSatoru Moriya __entry->rmem_alloc, __entry->truesize, __entry->sk_rcvbuf) 903847ce32SSatoru Moriya ); 913847ce32SSatoru Moriya 923847ce32SSatoru Moriya TRACE_EVENT(sock_exceed_buf_limit, 933847ce32SSatoru Moriya 94d6f19938SYafang Shao TP_PROTO(struct sock *sk, struct proto *prot, long allocated, int kind), 953847ce32SSatoru Moriya 96d6f19938SYafang Shao TP_ARGS(sk, prot, allocated, kind), 973847ce32SSatoru Moriya 983847ce32SSatoru Moriya TP_STRUCT__entry( 993847ce32SSatoru Moriya __array(char, name, 32) 1003847ce32SSatoru Moriya __field(long *, sysctl_mem) 1013847ce32SSatoru Moriya __field(long, allocated) 1023847ce32SSatoru Moriya __field(int, sysctl_rmem) 1033847ce32SSatoru Moriya __field(int, rmem_alloc) 104d6f19938SYafang Shao __field(int, sysctl_wmem) 105d6f19938SYafang Shao __field(int, wmem_alloc) 106d6f19938SYafang Shao __field(int, wmem_queued) 107d6f19938SYafang Shao __field(int, kind) 1083847ce32SSatoru Moriya ), 1093847ce32SSatoru Moriya 1103847ce32SSatoru Moriya TP_fast_assign( 1113847ce32SSatoru Moriya strncpy(__entry->name, prot->name, 32); 1123847ce32SSatoru Moriya __entry->sysctl_mem = prot->sysctl_mem; 1133847ce32SSatoru Moriya __entry->allocated = allocated; 114a3dcaf17SEric Dumazet __entry->sysctl_rmem = sk_get_rmem0(sk, prot); 1153847ce32SSatoru Moriya __entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc); 116d6f19938SYafang Shao __entry->sysctl_wmem = sk_get_wmem0(sk, prot); 117d6f19938SYafang Shao __entry->wmem_alloc = refcount_read(&sk->sk_wmem_alloc); 118ab4e846aSEric Dumazet __entry->wmem_queued = READ_ONCE(sk->sk_wmem_queued); 119d6f19938SYafang Shao __entry->kind = kind; 1203847ce32SSatoru Moriya ), 1213847ce32SSatoru Moriya 122d6f19938SYafang Shao TP_printk("proto:%s sysctl_mem=%ld,%ld,%ld allocated=%ld sysctl_rmem=%d rmem_alloc=%d sysctl_wmem=%d wmem_alloc=%d wmem_queued=%d kind=%s", 1233847ce32SSatoru Moriya __entry->name, 1243847ce32SSatoru Moriya __entry->sysctl_mem[0], 1253847ce32SSatoru Moriya __entry->sysctl_mem[1], 1263847ce32SSatoru Moriya __entry->sysctl_mem[2], 1273847ce32SSatoru Moriya __entry->allocated, 1283847ce32SSatoru Moriya __entry->sysctl_rmem, 129d6f19938SYafang Shao __entry->rmem_alloc, 130d6f19938SYafang Shao __entry->sysctl_wmem, 131d6f19938SYafang Shao __entry->wmem_alloc, 132d6f19938SYafang Shao __entry->wmem_queued, 133d6f19938SYafang Shao show_skmem_kind_names(__entry->kind) 134d6f19938SYafang Shao ) 1353847ce32SSatoru Moriya ); 1363847ce32SSatoru Moriya 137563e0bb0SYafang Shao TRACE_EVENT(inet_sock_set_state, 138563e0bb0SYafang Shao 139563e0bb0SYafang Shao TP_PROTO(const struct sock *sk, const int oldstate, const int newstate), 140563e0bb0SYafang Shao 141563e0bb0SYafang Shao TP_ARGS(sk, oldstate, newstate), 142563e0bb0SYafang Shao 143563e0bb0SYafang Shao TP_STRUCT__entry( 144563e0bb0SYafang Shao __field(const void *, skaddr) 145563e0bb0SYafang Shao __field(int, oldstate) 146563e0bb0SYafang Shao __field(int, newstate) 147563e0bb0SYafang Shao __field(__u16, sport) 148563e0bb0SYafang Shao __field(__u16, dport) 1490c3b34d8SYafang Shao __field(__u16, family) 150563e0bb0SYafang Shao __field(__u8, protocol) 151563e0bb0SYafang Shao __array(__u8, saddr, 4) 152563e0bb0SYafang Shao __array(__u8, daddr, 4) 153563e0bb0SYafang Shao __array(__u8, saddr_v6, 16) 154563e0bb0SYafang Shao __array(__u8, daddr_v6, 16) 155563e0bb0SYafang Shao ), 156563e0bb0SYafang Shao 157563e0bb0SYafang Shao TP_fast_assign( 158563e0bb0SYafang Shao struct inet_sock *inet = inet_sk(sk); 159563e0bb0SYafang Shao struct in6_addr *pin6; 160563e0bb0SYafang Shao __be32 *p32; 161563e0bb0SYafang Shao 162563e0bb0SYafang Shao __entry->skaddr = sk; 163563e0bb0SYafang Shao __entry->oldstate = oldstate; 164563e0bb0SYafang Shao __entry->newstate = newstate; 165563e0bb0SYafang Shao 1660c3b34d8SYafang Shao __entry->family = sk->sk_family; 167563e0bb0SYafang Shao __entry->protocol = sk->sk_protocol; 168563e0bb0SYafang Shao __entry->sport = ntohs(inet->inet_sport); 169563e0bb0SYafang Shao __entry->dport = ntohs(inet->inet_dport); 170563e0bb0SYafang Shao 171563e0bb0SYafang Shao p32 = (__be32 *) __entry->saddr; 172563e0bb0SYafang Shao *p32 = inet->inet_saddr; 173563e0bb0SYafang Shao 174563e0bb0SYafang Shao p32 = (__be32 *) __entry->daddr; 175563e0bb0SYafang Shao *p32 = inet->inet_daddr; 176563e0bb0SYafang Shao 177563e0bb0SYafang Shao #if IS_ENABLED(CONFIG_IPV6) 178563e0bb0SYafang Shao if (sk->sk_family == AF_INET6) { 179563e0bb0SYafang Shao pin6 = (struct in6_addr *)__entry->saddr_v6; 180563e0bb0SYafang Shao *pin6 = sk->sk_v6_rcv_saddr; 181563e0bb0SYafang Shao pin6 = (struct in6_addr *)__entry->daddr_v6; 182563e0bb0SYafang Shao *pin6 = sk->sk_v6_daddr; 183563e0bb0SYafang Shao } else 184563e0bb0SYafang Shao #endif 185563e0bb0SYafang Shao { 186563e0bb0SYafang Shao pin6 = (struct in6_addr *)__entry->saddr_v6; 187563e0bb0SYafang Shao ipv6_addr_set_v4mapped(inet->inet_saddr, pin6); 188563e0bb0SYafang Shao pin6 = (struct in6_addr *)__entry->daddr_v6; 189563e0bb0SYafang Shao ipv6_addr_set_v4mapped(inet->inet_daddr, pin6); 190563e0bb0SYafang Shao } 191563e0bb0SYafang Shao ), 192563e0bb0SYafang Shao 1930c3b34d8SYafang Shao TP_printk("family=%s protocol=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s", 1940c3b34d8SYafang Shao show_family_name(__entry->family), 195563e0bb0SYafang Shao show_inet_protocol_name(__entry->protocol), 196563e0bb0SYafang Shao __entry->sport, __entry->dport, 197563e0bb0SYafang Shao __entry->saddr, __entry->daddr, 198563e0bb0SYafang Shao __entry->saddr_v6, __entry->daddr_v6, 199563e0bb0SYafang Shao show_tcp_state_name(__entry->oldstate), 200563e0bb0SYafang Shao show_tcp_state_name(__entry->newstate)) 201563e0bb0SYafang Shao ); 202563e0bb0SYafang Shao 2033847ce32SSatoru Moriya #endif /* _TRACE_SOCK_H */ 2043847ce32SSatoru Moriya 2053847ce32SSatoru Moriya /* This part must be outside protection */ 2063847ce32SSatoru Moriya #include <trace/define_trace.h> 207