xref: /openbmc/linux/include/trace/events/tcp.h (revision 8a70ed95)
1c3fde1bdSMasami Hiramatsu /* SPDX-License-Identifier: GPL-2.0 */
2e086101bSCong Wang #undef TRACE_SYSTEM
3e086101bSCong Wang #define TRACE_SYSTEM tcp
4e086101bSCong Wang 
5e086101bSCong Wang #if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)
6e086101bSCong Wang #define _TRACE_TCP_H
7e086101bSCong Wang 
8e086101bSCong Wang #include <linux/ipv6.h>
9e086101bSCong Wang #include <linux/tcp.h>
10e086101bSCong Wang #include <linux/tracepoint.h>
11e086101bSCong Wang #include <net/ipv6.h>
12c3fde1bdSMasami Hiramatsu #include <net/tcp.h>
136163849dSYafang Shao #include <linux/sock_diag.h>
14e086101bSCong Wang 
156a6b0b99SMat Martineau #define TP_STORE_V4MAPPED(__entry, saddr, daddr)		\
166a6b0b99SMat Martineau 	do {							\
176a6b0b99SMat Martineau 		struct in6_addr *pin6;				\
186a6b0b99SMat Martineau 								\
196a6b0b99SMat Martineau 		pin6 = (struct in6_addr *)__entry->saddr_v6;	\
206a6b0b99SMat Martineau 		ipv6_addr_set_v4mapped(saddr, pin6);		\
216a6b0b99SMat Martineau 		pin6 = (struct in6_addr *)__entry->daddr_v6;	\
226a6b0b99SMat Martineau 		ipv6_addr_set_v4mapped(daddr, pin6);		\
236a6b0b99SMat Martineau 	} while (0)
246a6b0b99SMat Martineau 
256a6b0b99SMat Martineau #if IS_ENABLED(CONFIG_IPV6)
266a6b0b99SMat Martineau #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6)		\
276a6b0b99SMat Martineau 	do {								\
286a6b0b99SMat Martineau 		if (sk->sk_family == AF_INET6) {			\
296a6b0b99SMat Martineau 			struct in6_addr *pin6;				\
306a6b0b99SMat Martineau 									\
316a6b0b99SMat Martineau 			pin6 = (struct in6_addr *)__entry->saddr_v6;	\
326a6b0b99SMat Martineau 			*pin6 = saddr6;					\
336a6b0b99SMat Martineau 			pin6 = (struct in6_addr *)__entry->daddr_v6;	\
346a6b0b99SMat Martineau 			*pin6 = daddr6;					\
356a6b0b99SMat Martineau 		} else {						\
366a6b0b99SMat Martineau 			TP_STORE_V4MAPPED(__entry, saddr, daddr);	\
376a6b0b99SMat Martineau 		}							\
386a6b0b99SMat Martineau 	} while (0)
396a6b0b99SMat Martineau #else
406a6b0b99SMat Martineau #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6)	\
416a6b0b99SMat Martineau 	TP_STORE_V4MAPPED(__entry, saddr, daddr)
426a6b0b99SMat Martineau #endif
436a6b0b99SMat Martineau 
44f6e37b25SSong Liu /*
45f6e37b25SSong Liu  * tcp event with arguments sk and skb
46f6e37b25SSong Liu  *
47f6e37b25SSong Liu  * Note: this class requires a valid sk pointer; while skb pointer could
48f6e37b25SSong Liu  *       be NULL.
49f6e37b25SSong Liu  */
50f6e37b25SSong Liu DECLARE_EVENT_CLASS(tcp_event_sk_skb,
51e086101bSCong Wang 
527344e29fSSong Liu 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
53e086101bSCong Wang 
54e086101bSCong Wang 	TP_ARGS(sk, skb),
55e086101bSCong Wang 
56e086101bSCong Wang 	TP_STRUCT__entry(
577344e29fSSong Liu 		__field(const void *, skbaddr)
587344e29fSSong Liu 		__field(const void *, skaddr)
59af4325ecSYafang Shao 		__field(int, state)
60e086101bSCong Wang 		__field(__u16, sport)
61e086101bSCong Wang 		__field(__u16, dport)
623dd344eaSHariharan Ananthakrishnan 		__field(__u16, family)
63e086101bSCong Wang 		__array(__u8, saddr, 4)
64e086101bSCong Wang 		__array(__u8, daddr, 4)
65e086101bSCong Wang 		__array(__u8, saddr_v6, 16)
66e086101bSCong Wang 		__array(__u8, daddr_v6, 16)
67e086101bSCong Wang 	),
68e086101bSCong Wang 
69e086101bSCong Wang 	TP_fast_assign(
70abc17a11SEric Dumazet 		const struct inet_sock *inet = inet_sk(sk);
71e086101bSCong Wang 		__be32 *p32;
72e086101bSCong Wang 
73e086101bSCong Wang 		__entry->skbaddr = skb;
74e086101bSCong Wang 		__entry->skaddr = sk;
75af4325ecSYafang Shao 		__entry->state = sk->sk_state;
76e086101bSCong Wang 
77e086101bSCong Wang 		__entry->sport = ntohs(inet->inet_sport);
78e086101bSCong Wang 		__entry->dport = ntohs(inet->inet_dport);
793dd344eaSHariharan Ananthakrishnan 		__entry->family = sk->sk_family;
80e086101bSCong Wang 
81e086101bSCong Wang 		p32 = (__be32 *) __entry->saddr;
82e086101bSCong Wang 		*p32 = inet->inet_saddr;
83e086101bSCong Wang 
84e086101bSCong Wang 		p32 = (__be32 *) __entry->daddr;
85e086101bSCong Wang 		*p32 =  inet->inet_daddr;
86e086101bSCong Wang 
876a6b0b99SMat Martineau 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
886a6b0b99SMat Martineau 			      sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
89e086101bSCong Wang 	),
90e086101bSCong Wang 
913dd344eaSHariharan Ananthakrishnan 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",
923dd344eaSHariharan Ananthakrishnan 		  show_family_name(__entry->family),
93e086101bSCong Wang 		  __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
94af4325ecSYafang Shao 		  __entry->saddr_v6, __entry->daddr_v6,
95af4325ecSYafang Shao 		  show_tcp_state_name(__entry->state))
96e086101bSCong Wang );
97e086101bSCong Wang 
98f6e37b25SSong Liu DEFINE_EVENT(tcp_event_sk_skb, tcp_retransmit_skb,
99f6e37b25SSong Liu 
1007344e29fSSong Liu 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
101f6e37b25SSong Liu 
102f6e37b25SSong Liu 	TP_ARGS(sk, skb)
103f6e37b25SSong Liu );
104f6e37b25SSong Liu 
105c24b14c4SSong Liu /*
106c24b14c4SSong Liu  * skb of trace_tcp_send_reset is the skb that caused RST. In case of
107c24b14c4SSong Liu  * active reset, skb should be NULL
108c24b14c4SSong Liu  */
109c24b14c4SSong Liu DEFINE_EVENT(tcp_event_sk_skb, tcp_send_reset,
110c24b14c4SSong Liu 
111c24b14c4SSong Liu 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
112c24b14c4SSong Liu 
113c24b14c4SSong Liu 	TP_ARGS(sk, skb)
114c24b14c4SSong Liu );
115c24b14c4SSong Liu 
1165941521cSSong Liu /*
1175941521cSSong Liu  * tcp event with arguments sk
1185941521cSSong Liu  *
1195941521cSSong Liu  * Note: this class requires a valid sk pointer.
1205941521cSSong Liu  */
1215941521cSSong Liu DECLARE_EVENT_CLASS(tcp_event_sk,
1225941521cSSong Liu 
1236163849dSYafang Shao 	TP_PROTO(struct sock *sk),
1245941521cSSong Liu 
1255941521cSSong Liu 	TP_ARGS(sk),
1265941521cSSong Liu 
1275941521cSSong Liu 	TP_STRUCT__entry(
1285941521cSSong Liu 		__field(const void *, skaddr)
1295941521cSSong Liu 		__field(__u16, sport)
1305941521cSSong Liu 		__field(__u16, dport)
1313dd344eaSHariharan Ananthakrishnan 		__field(__u16, family)
1325941521cSSong Liu 		__array(__u8, saddr, 4)
1335941521cSSong Liu 		__array(__u8, daddr, 4)
1345941521cSSong Liu 		__array(__u8, saddr_v6, 16)
1355941521cSSong Liu 		__array(__u8, daddr_v6, 16)
1366163849dSYafang Shao 		__field(__u64, sock_cookie)
1375941521cSSong Liu 	),
1385941521cSSong Liu 
1395941521cSSong Liu 	TP_fast_assign(
1405941521cSSong Liu 		struct inet_sock *inet = inet_sk(sk);
1415941521cSSong Liu 		__be32 *p32;
1425941521cSSong Liu 
1435941521cSSong Liu 		__entry->skaddr = sk;
1445941521cSSong Liu 
1455941521cSSong Liu 		__entry->sport = ntohs(inet->inet_sport);
1465941521cSSong Liu 		__entry->dport = ntohs(inet->inet_dport);
1473dd344eaSHariharan Ananthakrishnan 		__entry->family = sk->sk_family;
1485941521cSSong Liu 
1495941521cSSong Liu 		p32 = (__be32 *) __entry->saddr;
1505941521cSSong Liu 		*p32 = inet->inet_saddr;
1515941521cSSong Liu 
1525941521cSSong Liu 		p32 = (__be32 *) __entry->daddr;
1535941521cSSong Liu 		*p32 =  inet->inet_daddr;
1545941521cSSong Liu 
1556a6b0b99SMat Martineau 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
1566a6b0b99SMat Martineau 			       sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
1576163849dSYafang Shao 
1586163849dSYafang Shao 		__entry->sock_cookie = sock_gen_cookie(sk);
1595941521cSSong Liu 	),
1605941521cSSong Liu 
1613dd344eaSHariharan Ananthakrishnan 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",
1623dd344eaSHariharan Ananthakrishnan 		  show_family_name(__entry->family),
1635941521cSSong Liu 		  __entry->sport, __entry->dport,
1645941521cSSong Liu 		  __entry->saddr, __entry->daddr,
1656163849dSYafang Shao 		  __entry->saddr_v6, __entry->daddr_v6,
1666163849dSYafang Shao 		  __entry->sock_cookie)
1675941521cSSong Liu );
1685941521cSSong Liu 
1695941521cSSong Liu DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,
1705941521cSSong Liu 
1716163849dSYafang Shao 	TP_PROTO(struct sock *sk),
1725941521cSSong Liu 
1735941521cSSong Liu 	TP_ARGS(sk)
1745941521cSSong Liu );
1755941521cSSong Liu 
176e1a4aa50SSong Liu DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,
177e1a4aa50SSong Liu 
1786163849dSYafang Shao 	TP_PROTO(struct sock *sk),
1796163849dSYafang Shao 
1806163849dSYafang Shao 	TP_ARGS(sk)
1816163849dSYafang Shao );
1826163849dSYafang Shao 
1836163849dSYafang Shao DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust,
1846163849dSYafang Shao 
1856163849dSYafang Shao 	TP_PROTO(struct sock *sk),
186e1a4aa50SSong Liu 
187e1a4aa50SSong Liu 	TP_ARGS(sk)
188e1a4aa50SSong Liu );
189e1a4aa50SSong Liu 
190cf34ce3dSSong Liu TRACE_EVENT(tcp_retransmit_synack,
191cf34ce3dSSong Liu 
192cf34ce3dSSong Liu 	TP_PROTO(const struct sock *sk, const struct request_sock *req),
193cf34ce3dSSong Liu 
194cf34ce3dSSong Liu 	TP_ARGS(sk, req),
195cf34ce3dSSong Liu 
196cf34ce3dSSong Liu 	TP_STRUCT__entry(
197cf34ce3dSSong Liu 		__field(const void *, skaddr)
198cf34ce3dSSong Liu 		__field(const void *, req)
199cf34ce3dSSong Liu 		__field(__u16, sport)
200cf34ce3dSSong Liu 		__field(__u16, dport)
2013dd344eaSHariharan Ananthakrishnan 		__field(__u16, family)
202cf34ce3dSSong Liu 		__array(__u8, saddr, 4)
203cf34ce3dSSong Liu 		__array(__u8, daddr, 4)
204cf34ce3dSSong Liu 		__array(__u8, saddr_v6, 16)
205cf34ce3dSSong Liu 		__array(__u8, daddr_v6, 16)
206cf34ce3dSSong Liu 	),
207cf34ce3dSSong Liu 
208cf34ce3dSSong Liu 	TP_fast_assign(
209cf34ce3dSSong Liu 		struct inet_request_sock *ireq = inet_rsk(req);
210cf34ce3dSSong Liu 		__be32 *p32;
211cf34ce3dSSong Liu 
212cf34ce3dSSong Liu 		__entry->skaddr = sk;
213cf34ce3dSSong Liu 		__entry->req = req;
214cf34ce3dSSong Liu 
215cf34ce3dSSong Liu 		__entry->sport = ireq->ir_num;
216cf34ce3dSSong Liu 		__entry->dport = ntohs(ireq->ir_rmt_port);
2173dd344eaSHariharan Ananthakrishnan 		__entry->family = sk->sk_family;
218cf34ce3dSSong Liu 
219cf34ce3dSSong Liu 		p32 = (__be32 *) __entry->saddr;
220cf34ce3dSSong Liu 		*p32 = ireq->ir_loc_addr;
221cf34ce3dSSong Liu 
222cf34ce3dSSong Liu 		p32 = (__be32 *) __entry->daddr;
223cf34ce3dSSong Liu 		*p32 = ireq->ir_rmt_addr;
224cf34ce3dSSong Liu 
2256a6b0b99SMat Martineau 		TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr,
2266a6b0b99SMat Martineau 			      ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);
227cf34ce3dSSong Liu 	),
228cf34ce3dSSong Liu 
2293dd344eaSHariharan Ananthakrishnan 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
2303dd344eaSHariharan Ananthakrishnan 		  show_family_name(__entry->family),
231cf34ce3dSSong Liu 		  __entry->sport, __entry->dport,
232cf34ce3dSSong Liu 		  __entry->saddr, __entry->daddr,
233cf34ce3dSSong Liu 		  __entry->saddr_v6, __entry->daddr_v6)
234cf34ce3dSSong Liu );
235cf34ce3dSSong Liu 
236ee549be6SMasami Hiramatsu #include <trace/events/net_probe_common.h>
237c3fde1bdSMasami Hiramatsu 
238c3fde1bdSMasami Hiramatsu TRACE_EVENT(tcp_probe,
239c3fde1bdSMasami Hiramatsu 
240c3fde1bdSMasami Hiramatsu 	TP_PROTO(struct sock *sk, struct sk_buff *skb),
241c3fde1bdSMasami Hiramatsu 
242c3fde1bdSMasami Hiramatsu 	TP_ARGS(sk, skb),
243c3fde1bdSMasami Hiramatsu 
244c3fde1bdSMasami Hiramatsu 	TP_STRUCT__entry(
245c3fde1bdSMasami Hiramatsu 		/* sockaddr_in6 is always bigger than sockaddr_in */
246c3fde1bdSMasami Hiramatsu 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
247c3fde1bdSMasami Hiramatsu 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
248c3fde1bdSMasami Hiramatsu 		__field(__u16, sport)
249c3fde1bdSMasami Hiramatsu 		__field(__u16, dport)
2503dd344eaSHariharan Ananthakrishnan 		__field(__u16, family)
251c3fde1bdSMasami Hiramatsu 		__field(__u32, mark)
2522d68c074SYafang Shao 		__field(__u16, data_len)
253c3fde1bdSMasami Hiramatsu 		__field(__u32, snd_nxt)
254c3fde1bdSMasami Hiramatsu 		__field(__u32, snd_una)
255c3fde1bdSMasami Hiramatsu 		__field(__u32, snd_cwnd)
256c3fde1bdSMasami Hiramatsu 		__field(__u32, ssthresh)
257c3fde1bdSMasami Hiramatsu 		__field(__u32, snd_wnd)
258c3fde1bdSMasami Hiramatsu 		__field(__u32, srtt)
259c3fde1bdSMasami Hiramatsu 		__field(__u32, rcv_wnd)
2606163849dSYafang Shao 		__field(__u64, sock_cookie)
261c3fde1bdSMasami Hiramatsu 	),
262c3fde1bdSMasami Hiramatsu 
263c3fde1bdSMasami Hiramatsu 	TP_fast_assign(
2643d97d88eSYafang Shao 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
265c3fde1bdSMasami Hiramatsu 		const struct inet_sock *inet = inet_sk(sk);
2663d97d88eSYafang Shao 		const struct tcp_sock *tp = tcp_sk(sk);
267c3fde1bdSMasami Hiramatsu 
268c3fde1bdSMasami Hiramatsu 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
269c3fde1bdSMasami Hiramatsu 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
270c3fde1bdSMasami Hiramatsu 
271c3fde1bdSMasami Hiramatsu 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
272c3fde1bdSMasami Hiramatsu 
273c3fde1bdSMasami Hiramatsu 		/* For filtering use */
274c3fde1bdSMasami Hiramatsu 		__entry->sport = ntohs(inet->inet_sport);
275c3fde1bdSMasami Hiramatsu 		__entry->dport = ntohs(inet->inet_dport);
276c3fde1bdSMasami Hiramatsu 		__entry->mark = skb->mark;
2773dd344eaSHariharan Ananthakrishnan 		__entry->family = sk->sk_family;
278c3fde1bdSMasami Hiramatsu 
2793d97d88eSYafang Shao 		__entry->data_len = skb->len - __tcp_hdrlen(th);
280c3fde1bdSMasami Hiramatsu 		__entry->snd_nxt = tp->snd_nxt;
281c3fde1bdSMasami Hiramatsu 		__entry->snd_una = tp->snd_una;
28240570375SEric Dumazet 		__entry->snd_cwnd = tcp_snd_cwnd(tp);
283c3fde1bdSMasami Hiramatsu 		__entry->snd_wnd = tp->snd_wnd;
284c3fde1bdSMasami Hiramatsu 		__entry->rcv_wnd = tp->rcv_wnd;
285c3fde1bdSMasami Hiramatsu 		__entry->ssthresh = tcp_current_ssthresh(sk);
286c3fde1bdSMasami Hiramatsu 		__entry->srtt = tp->srtt_us >> 3;
2876163849dSYafang Shao 		__entry->sock_cookie = sock_gen_cookie(sk);
288c3fde1bdSMasami Hiramatsu 	),
289c3fde1bdSMasami Hiramatsu 
2903dd344eaSHariharan Ananthakrishnan 	TP_printk("family=%s 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",
2913dd344eaSHariharan Ananthakrishnan 		  show_family_name(__entry->family),
292c3fde1bdSMasami Hiramatsu 		  __entry->saddr, __entry->daddr, __entry->mark,
2932d68c074SYafang Shao 		  __entry->data_len, __entry->snd_nxt, __entry->snd_una,
294c3fde1bdSMasami Hiramatsu 		  __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,
2956163849dSYafang Shao 		  __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie)
296c3fde1bdSMasami Hiramatsu );
297c3fde1bdSMasami Hiramatsu 
298709c0314SJakub Kicinski #define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb)			\
299709c0314SJakub Kicinski 	do {								\
300709c0314SJakub Kicinski 		const struct tcphdr *th = (const struct tcphdr *)skb->data; \
301709c0314SJakub Kicinski 		struct sockaddr_in *v4 = (void *)__entry->saddr;	\
302709c0314SJakub Kicinski 									\
303709c0314SJakub Kicinski 		v4->sin_family = AF_INET;				\
304709c0314SJakub Kicinski 		v4->sin_port = th->source;				\
305709c0314SJakub Kicinski 		v4->sin_addr.s_addr = ip_hdr(skb)->saddr;		\
306709c0314SJakub Kicinski 		v4 = (void *)__entry->daddr;				\
307709c0314SJakub Kicinski 		v4->sin_family = AF_INET;				\
308709c0314SJakub Kicinski 		v4->sin_port = th->dest;				\
309709c0314SJakub Kicinski 		v4->sin_addr.s_addr = ip_hdr(skb)->daddr;		\
310709c0314SJakub Kicinski 	} while (0)
311709c0314SJakub Kicinski 
312709c0314SJakub Kicinski #if IS_ENABLED(CONFIG_IPV6)
313709c0314SJakub Kicinski 
314709c0314SJakub Kicinski #define TP_STORE_ADDR_PORTS_SKB(__entry, skb)				\
315709c0314SJakub Kicinski 	do {								\
316709c0314SJakub Kicinski 		const struct iphdr *iph = ip_hdr(skb);			\
317709c0314SJakub Kicinski 									\
318709c0314SJakub Kicinski 		if (iph->version == 6) {				\
319709c0314SJakub Kicinski 			const struct tcphdr *th = (const struct tcphdr *)skb->data; \
320709c0314SJakub Kicinski 			struct sockaddr_in6 *v6 = (void *)__entry->saddr; \
321709c0314SJakub Kicinski 									\
322709c0314SJakub Kicinski 			v6->sin6_family = AF_INET6;			\
323709c0314SJakub Kicinski 			v6->sin6_port = th->source;			\
324709c0314SJakub Kicinski 			v6->sin6_addr = ipv6_hdr(skb)->saddr;		\
325709c0314SJakub Kicinski 			v6 = (void *)__entry->daddr;			\
326709c0314SJakub Kicinski 			v6->sin6_family = AF_INET6;			\
327709c0314SJakub Kicinski 			v6->sin6_port = th->dest;			\
328709c0314SJakub Kicinski 			v6->sin6_addr = ipv6_hdr(skb)->daddr;		\
329709c0314SJakub Kicinski 		} else							\
330709c0314SJakub Kicinski 			TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb);	\
331709c0314SJakub Kicinski 	} while (0)
332709c0314SJakub Kicinski 
333709c0314SJakub Kicinski #else
334709c0314SJakub Kicinski 
335709c0314SJakub Kicinski #define TP_STORE_ADDR_PORTS_SKB(__entry, skb)		\
336709c0314SJakub Kicinski 	TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb)
337709c0314SJakub Kicinski 
338709c0314SJakub Kicinski #endif
339709c0314SJakub Kicinski 
340709c0314SJakub Kicinski /*
341709c0314SJakub Kicinski  * tcp event with only skb
342709c0314SJakub Kicinski  */
343709c0314SJakub Kicinski DECLARE_EVENT_CLASS(tcp_event_skb,
344709c0314SJakub Kicinski 
345709c0314SJakub Kicinski 	TP_PROTO(const struct sk_buff *skb),
346709c0314SJakub Kicinski 
347709c0314SJakub Kicinski 	TP_ARGS(skb),
348709c0314SJakub Kicinski 
349709c0314SJakub Kicinski 	TP_STRUCT__entry(
350709c0314SJakub Kicinski 		__field(const void *, skbaddr)
351709c0314SJakub Kicinski 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
352709c0314SJakub Kicinski 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
353709c0314SJakub Kicinski 	),
354709c0314SJakub Kicinski 
355709c0314SJakub Kicinski 	TP_fast_assign(
356709c0314SJakub Kicinski 		__entry->skbaddr = skb;
357709c0314SJakub Kicinski 
358709c0314SJakub Kicinski 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
359709c0314SJakub Kicinski 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
360709c0314SJakub Kicinski 
361709c0314SJakub Kicinski 		TP_STORE_ADDR_PORTS_SKB(__entry, skb);
362709c0314SJakub Kicinski 	),
363709c0314SJakub Kicinski 
364709c0314SJakub Kicinski 	TP_printk("src=%pISpc dest=%pISpc", __entry->saddr, __entry->daddr)
365709c0314SJakub Kicinski );
366709c0314SJakub Kicinski 
367709c0314SJakub Kicinski DEFINE_EVENT(tcp_event_skb, tcp_bad_csum,
368709c0314SJakub Kicinski 
369709c0314SJakub Kicinski 	TP_PROTO(const struct sk_buff *skb),
370709c0314SJakub Kicinski 
371709c0314SJakub Kicinski 	TP_ARGS(skb)
372709c0314SJakub Kicinski );
373709c0314SJakub Kicinski 
37415fcdf6aSPing Gan TRACE_EVENT(tcp_cong_state_set,
37515fcdf6aSPing Gan 
37615fcdf6aSPing Gan 	TP_PROTO(struct sock *sk, const u8 ca_state),
37715fcdf6aSPing Gan 
37815fcdf6aSPing Gan 	TP_ARGS(sk, ca_state),
37915fcdf6aSPing Gan 
38015fcdf6aSPing Gan 	TP_STRUCT__entry(
38115fcdf6aSPing Gan 		__field(const void *, skaddr)
38215fcdf6aSPing Gan 		__field(__u16, sport)
38315fcdf6aSPing Gan 		__field(__u16, dport)
384*8a70ed95SEric Dumazet 		__field(__u16, family)
38515fcdf6aSPing Gan 		__array(__u8, saddr, 4)
38615fcdf6aSPing Gan 		__array(__u8, daddr, 4)
38715fcdf6aSPing Gan 		__array(__u8, saddr_v6, 16)
38815fcdf6aSPing Gan 		__array(__u8, daddr_v6, 16)
38915fcdf6aSPing Gan 		__field(__u8, cong_state)
39015fcdf6aSPing Gan 	),
39115fcdf6aSPing Gan 
39215fcdf6aSPing Gan 	TP_fast_assign(
39315fcdf6aSPing Gan 		struct inet_sock *inet = inet_sk(sk);
39415fcdf6aSPing Gan 		__be32 *p32;
39515fcdf6aSPing Gan 
39615fcdf6aSPing Gan 		__entry->skaddr = sk;
39715fcdf6aSPing Gan 
39815fcdf6aSPing Gan 		__entry->sport = ntohs(inet->inet_sport);
39915fcdf6aSPing Gan 		__entry->dport = ntohs(inet->inet_dport);
400*8a70ed95SEric Dumazet 		__entry->family = sk->sk_family;
40115fcdf6aSPing Gan 
40215fcdf6aSPing Gan 		p32 = (__be32 *) __entry->saddr;
40315fcdf6aSPing Gan 		*p32 = inet->inet_saddr;
40415fcdf6aSPing Gan 
40515fcdf6aSPing Gan 		p32 = (__be32 *) __entry->daddr;
40615fcdf6aSPing Gan 		*p32 =  inet->inet_daddr;
40715fcdf6aSPing Gan 
40815fcdf6aSPing Gan 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
40915fcdf6aSPing Gan 			   sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
41015fcdf6aSPing Gan 
41115fcdf6aSPing Gan 		__entry->cong_state = ca_state;
41215fcdf6aSPing Gan 	),
41315fcdf6aSPing Gan 
414*8a70ed95SEric Dumazet 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",
415*8a70ed95SEric Dumazet 		  show_family_name(__entry->family),
41615fcdf6aSPing Gan 		  __entry->sport, __entry->dport,
41715fcdf6aSPing Gan 		  __entry->saddr, __entry->daddr,
41815fcdf6aSPing Gan 		  __entry->saddr_v6, __entry->daddr_v6,
41915fcdf6aSPing Gan 		  __entry->cong_state)
42015fcdf6aSPing Gan );
42115fcdf6aSPing Gan 
422e086101bSCong Wang #endif /* _TRACE_TCP_H */
423e086101bSCong Wang 
424e086101bSCong Wang /* This part must be outside protection */
425e086101bSCong Wang #include <trace/define_trace.h>
426