^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 tcp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define _TRACE_TCP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/ipv6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/tcp.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 <net/ipv6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <net/tcp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/sock_diag.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define TP_STORE_V4MAPPED(__entry, saddr, daddr) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct in6_addr *pin6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) pin6 = (struct in6_addr *)__entry->saddr_v6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ipv6_addr_set_v4mapped(saddr, pin6); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) pin6 = (struct in6_addr *)__entry->daddr_v6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ipv6_addr_set_v4mapped(daddr, pin6); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) if (sk->sk_family == AF_INET6) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct in6_addr *pin6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) pin6 = (struct in6_addr *)__entry->saddr_v6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *pin6 = saddr6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) pin6 = (struct in6_addr *)__entry->daddr_v6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) *pin6 = daddr6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) } else { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) TP_STORE_V4MAPPED(__entry, saddr, daddr); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) TP_STORE_V4MAPPED(__entry, saddr, daddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * tcp event with arguments sk and skb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * Note: this class requires a valid sk pointer; while skb pointer could
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) * be NULL.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) DECLARE_EVENT_CLASS(tcp_event_sk_skb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) TP_ARGS(sk, skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) __field(const void *, skbaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) __field(const void *, skaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) __field(int, state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __field(__u16, sport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) __field(__u16, dport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __array(__u8, saddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __array(__u8, daddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __array(__u8, saddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __array(__u8, daddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct inet_sock *inet = inet_sk(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) __be32 *p32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) __entry->skbaddr = skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) __entry->skaddr = sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) __entry->state = sk->sk_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __entry->sport = ntohs(inet->inet_sport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __entry->dport = ntohs(inet->inet_dport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) p32 = (__be32 *) __entry->saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) *p32 = inet->inet_saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) p32 = (__be32 *) __entry->daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) *p32 = inet->inet_daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
^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("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) __entry->saddr_v6, __entry->daddr_v6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) show_tcp_state_name(__entry->state))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) DEFINE_EVENT(tcp_event_sk_skb, tcp_retransmit_skb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) TP_ARGS(sk, skb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * skb of trace_tcp_send_reset is the skb that caused RST. In case of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * active reset, skb should be NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) DEFINE_EVENT(tcp_event_sk_skb, tcp_send_reset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) TP_ARGS(sk, skb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * tcp event with arguments sk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * Note: this class requires a valid sk pointer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) DECLARE_EVENT_CLASS(tcp_event_sk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) TP_PROTO(struct sock *sk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) TP_ARGS(sk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) __field(const void *, skaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) __field(__u16, sport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) __field(__u16, dport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __array(__u8, saddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __array(__u8, daddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) __array(__u8, saddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __array(__u8, daddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) __field(__u64, sock_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) struct inet_sock *inet = inet_sk(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) __be32 *p32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __entry->skaddr = sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __entry->sport = ntohs(inet->inet_sport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) __entry->dport = ntohs(inet->inet_dport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) p32 = (__be32 *) __entry->saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) *p32 = inet->inet_saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) p32 = (__be32 *) __entry->daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) *p32 = inet->inet_daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) __entry->sock_cookie = sock_gen_cookie(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __entry->sport, __entry->dport,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) __entry->saddr, __entry->daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) __entry->saddr_v6, __entry->daddr_v6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) __entry->sock_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) TP_PROTO(struct sock *sk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) TP_ARGS(sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) TP_PROTO(struct sock *sk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) TP_ARGS(sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) TP_PROTO(struct sock *sk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) TP_ARGS(sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) TRACE_EVENT(tcp_retransmit_synack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) TP_PROTO(const struct sock *sk, const struct request_sock *req),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) TP_ARGS(sk, req),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __field(const void *, skaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __field(const void *, req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __field(__u16, sport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __field(__u16, dport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) __array(__u8, saddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __array(__u8, daddr, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __array(__u8, saddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) __array(__u8, daddr_v6, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) struct inet_request_sock *ireq = inet_rsk(req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) __be32 *p32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) __entry->skaddr = sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) __entry->req = req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) __entry->sport = ireq->ir_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) __entry->dport = ntohs(ireq->ir_rmt_port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) p32 = (__be32 *) __entry->saddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) *p32 = ireq->ir_loc_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) p32 = (__be32 *) __entry->daddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) *p32 = ireq->ir_rmt_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) __entry->sport, __entry->dport,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __entry->saddr, __entry->daddr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __entry->saddr_v6, __entry->daddr_v6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #include <trace/events/net_probe_common.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) TRACE_EVENT(tcp_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) TP_PROTO(struct sock *sk, struct sk_buff *skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) TP_ARGS(sk, skb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) /* sockaddr_in6 is always bigger than sockaddr_in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) __array(__u8, saddr, sizeof(struct sockaddr_in6))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) __array(__u8, daddr, sizeof(struct sockaddr_in6))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) __field(__u16, sport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) __field(__u16, dport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) __field(__u32, mark)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) __field(__u16, data_len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) __field(__u32, snd_nxt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) __field(__u32, snd_una)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) __field(__u32, snd_cwnd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) __field(__u32, ssthresh)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) __field(__u32, snd_wnd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) __field(__u32, srtt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) __field(__u32, rcv_wnd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) __field(__u64, sock_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) const struct tcphdr *th = (const struct tcphdr *)skb->data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) const struct inet_sock *inet = inet_sk(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) const struct tcp_sock *tp = tcp_sk(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) TP_STORE_ADDR_PORTS(__entry, inet, sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) /* For filtering use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __entry->sport = ntohs(inet->inet_sport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) __entry->dport = ntohs(inet->inet_dport);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) __entry->mark = skb->mark;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) __entry->data_len = skb->len - __tcp_hdrlen(th);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) __entry->snd_nxt = tp->snd_nxt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) __entry->snd_una = tp->snd_una;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) __entry->snd_cwnd = tp->snd_cwnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) __entry->snd_wnd = tp->snd_wnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) __entry->rcv_wnd = tp->rcv_wnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) __entry->ssthresh = tcp_current_ssthresh(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) __entry->srtt = tp->srtt_us >> 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) __entry->sock_cookie = sock_gen_cookie(sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) TP_printk("src=%pISpc dest=%pISpc mark=%#x data_len=%d snd_nxt=%#x snd_una=%#x snd_cwnd=%u ssthresh=%u snd_wnd=%u srtt=%u rcv_wnd=%u sock_cookie=%llx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) __entry->saddr, __entry->daddr, __entry->mark,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) __entry->data_len, __entry->snd_nxt, __entry->snd_una,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #endif /* _TRACE_TCP_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) #include <trace/define_trace.h>