^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define TRACE_SYSTEM sock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #if !defined(_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define _TRACE_SOCK_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <net/sock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <net/ipv6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/ipv6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/tcp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define family_names \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) EM(AF_INET) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) EMe(AF_INET6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* The protocol traced by inet_sock_set_state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define inet_protocol_names \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) EM(IPPROTO_TCP) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) EM(IPPROTO_DCCP) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) EM(IPPROTO_SCTP) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) EMe(IPPROTO_MPTCP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define tcp_state_names \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) EM(TCP_ESTABLISHED) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) EM(TCP_SYN_SENT) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) EM(TCP_SYN_RECV) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) EM(TCP_FIN_WAIT1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) EM(TCP_FIN_WAIT2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) EM(TCP_TIME_WAIT) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) EM(TCP_CLOSE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) EM(TCP_CLOSE_WAIT) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) EM(TCP_LAST_ACK) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) EM(TCP_LISTEN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) EM(TCP_CLOSING) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) EMe(TCP_NEW_SYN_RECV)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define skmem_kind_names \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) EM(SK_MEM_SEND) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) EMe(SK_MEM_RECV)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /* enums need to be exported to user space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define EM(a) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define EMe(a) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) family_names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) inet_protocol_names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) tcp_state_names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) skmem_kind_names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define EM(a) { a, #a },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define EMe(a) { a, #a }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define show_family_name(val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __print_symbolic(val, family_names)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define show_inet_protocol_name(val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __print_symbolic(val, inet_protocol_names)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define show_tcp_state_name(val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __print_symbolic(val, tcp_state_names)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define show_skmem_kind_names(val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __print_symbolic(val, skmem_kind_names)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) TRACE_EVENT(sock_rcvqueue_full,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) TP_PROTO(struct sock *sk, struct sk_buff *skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) TP_ARGS(sk, skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) __field(int, rmem_alloc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) __field(unsigned int, truesize)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) __field(int, sk_rcvbuf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) __entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __entry->truesize = skb->truesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) __entry->sk_rcvbuf = READ_ONCE(sk->sk_rcvbuf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) TP_printk("rmem_alloc=%d truesize=%u sk_rcvbuf=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) __entry->rmem_alloc, __entry->truesize, __entry->sk_rcvbuf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) TRACE_EVENT(sock_exceed_buf_limit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) TP_PROTO(struct sock *sk, struct proto *prot, long allocated, int kind),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) TP_ARGS(sk, prot, allocated, kind),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) __field(long *, sysctl_mem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __field(long, allocated)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) __field(int, sysctl_rmem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __field(int, rmem_alloc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __field(int, sysctl_wmem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) __field(int, wmem_alloc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) __field(int, wmem_queued)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) __field(int, kind)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) strncpy(__entry->name, prot->name, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) __entry->sysctl_mem = prot->sysctl_mem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) __entry->allocated = allocated;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __entry->sysctl_rmem = sk_get_rmem0(sk, prot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __entry->rmem_alloc = atomic_read(&sk->sk_rmem_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __entry->sysctl_wmem = sk_get_wmem0(sk, prot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __entry->wmem_alloc = refcount_read(&sk->sk_wmem_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __entry->wmem_queued = READ_ONCE(sk->sk_wmem_queued);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __entry->kind = kind;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 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",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) __entry->sysctl_mem[0],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) __entry->sysctl_mem[1],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) __entry->sysctl_mem[2],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __entry->allocated,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __entry->sysctl_rmem,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) __entry->rmem_alloc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __entry->sysctl_wmem,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) __entry->wmem_alloc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __entry->wmem_queued,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) show_skmem_kind_names(__entry->kind)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) TRACE_EVENT(inet_sock_set_state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) TP_PROTO(const struct sock *sk, const int oldstate, const int newstate),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) TP_ARGS(sk, oldstate, newstate),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) __field(const void *, skaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __field(int, oldstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) __field(int, newstate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __field(__u16, sport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) __field(__u16, dport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __field(__u16, family)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) __field(__u16, protocol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) __array(__u8, saddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) __array(__u8, daddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) __array(__u8, saddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __array(__u8, daddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) struct inet_sock *inet = inet_sk(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) struct in6_addr *pin6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) __be32 *p32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) __entry->skaddr = sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) __entry->oldstate = oldstate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) __entry->newstate = newstate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) __entry->family = sk->sk_family;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) __entry->protocol = sk->sk_protocol;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) __entry->sport = ntohs(inet->inet_sport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) __entry->dport = ntohs(inet->inet_dport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) p32 = (__be32 *) __entry->saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) *p32 = inet->inet_saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) p32 = (__be32 *) __entry->daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) *p32 = inet->inet_daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) if (sk->sk_family == AF_INET6) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) pin6 = (struct in6_addr *)__entry->saddr_v6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) *pin6 = sk->sk_v6_rcv_saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) pin6 = (struct in6_addr *)__entry->daddr_v6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) *pin6 = sk->sk_v6_daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) } else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) pin6 = (struct in6_addr *)__entry->saddr_v6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) pin6 = (struct in6_addr *)__entry->daddr_v6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) TP_printk("family=%s protocol=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) show_family_name(__entry->family),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) show_inet_protocol_name(__entry->protocol),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __entry->sport, __entry->dport,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) __entry->saddr, __entry->daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) __entry->saddr_v6, __entry->daddr_v6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) show_tcp_state_name(__entry->oldstate),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) show_tcp_state_name(__entry->newstate))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #endif /* _TRACE_SOCK_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #include <trace/define_trace.h>