xref: /linux/include/trace/events/tcp.h (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM tcp
4 
5 #if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_TCP_H
7 
8 #include <linux/ipv6.h>
9 #include <linux/tcp.h>
10 #include <linux/tracepoint.h>
11 #include <net/ipv6.h>
12 #include <net/tcp.h>
13 #include <linux/sock_diag.h>
14 #include <net/rstreason.h>
15 
16 TRACE_EVENT(tcp_retransmit_skb,
17 
18 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb, int err),
19 
20 	TP_ARGS(sk, skb, err),
21 
22 	TP_STRUCT__entry(
23 		__field(const void *, skbaddr)
24 		__field(const void *, skaddr)
25 		__field(int, state)
26 		__field(__u16, sport)
27 		__field(__u16, dport)
28 		__field(__u16, family)
29 		__array(__u8, saddr, 4)
30 		__array(__u8, daddr, 4)
31 		__array(__u8, saddr_v6, 16)
32 		__array(__u8, daddr_v6, 16)
33 		__field(int, err)
34 	),
35 
36 	TP_fast_assign(
37 		const struct inet_sock *inet = inet_sk(sk);
38 		__be32 *p32;
39 
40 		__entry->skbaddr = skb;
41 		__entry->skaddr = sk;
42 		__entry->state = sk->sk_state;
43 
44 		__entry->sport = ntohs(inet->inet_sport);
45 		__entry->dport = ntohs(inet->inet_dport);
46 		__entry->family = sk->sk_family;
47 
48 		p32 = (__be32 *) __entry->saddr;
49 		*p32 = inet->inet_saddr;
50 
51 		p32 = (__be32 *) __entry->daddr;
52 		*p32 =  inet->inet_daddr;
53 
54 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
55 			      sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
56 
57 		__entry->err = err;
58 	),
59 
60 	TP_printk("skbaddr=%p skaddr=%p family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s err=%d",
61 		  __entry->skbaddr, __entry->skaddr,
62 		  show_family_name(__entry->family),
63 		  __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
64 		  __entry->saddr_v6, __entry->daddr_v6,
65 		  show_tcp_state_name(__entry->state),
66 		  __entry->err)
67 );
68 
69 #undef FN
70 #define FN(reason)	TRACE_DEFINE_ENUM(SK_RST_REASON_##reason);
71 DEFINE_RST_REASON(FN, FN)
72 
73 #undef FN
74 #undef FNe
75 #define FN(reason)	{ SK_RST_REASON_##reason, #reason },
76 #define FNe(reason)	{ SK_RST_REASON_##reason, #reason }
77 
78 /*
79  * skb of trace_tcp_send_reset is the skb that caused RST. In case of
80  * active reset, skb should be NULL
81  */
82 TRACE_EVENT(tcp_send_reset,
83 
84 	TP_PROTO(const struct sock *sk,
85 		 const struct sk_buff *skb__nullable,
86 		 const enum sk_rst_reason reason),
87 
88 	TP_ARGS(sk, skb__nullable, reason),
89 
90 	TP_STRUCT__entry(
91 		__field(const void *, skbaddr)
92 		__field(const void *, skaddr)
93 		__field(int, state)
94 		__field(enum sk_rst_reason, reason)
95 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
96 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
97 	),
98 
99 	TP_fast_assign(
100 		__entry->skbaddr = skb__nullable;
101 		__entry->skaddr = sk;
102 		/* Zero means unknown state. */
103 		__entry->state = sk ? sk->sk_state : 0;
104 
105 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
106 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
107 
108 		if (sk && sk_fullsock(sk)) {
109 			const struct inet_sock *inet = inet_sk(sk);
110 
111 			TP_STORE_ADDR_PORTS(__entry, inet, sk);
112 		} else if (skb__nullable) {
113 			const struct tcphdr *th = (const struct tcphdr *)skb__nullable->data;
114 			/*
115 			 * We should reverse the 4-tuple of skb, so later
116 			 * it can print the right flow direction of rst.
117 			 */
118 			TP_STORE_ADDR_PORTS_SKB(skb__nullable, th, entry->daddr, entry->saddr);
119 		}
120 		__entry->reason = reason;
121 	),
122 
123 	TP_printk("skbaddr=%p skaddr=%p src=%pISpc dest=%pISpc state=%s reason=%s",
124 		  __entry->skbaddr, __entry->skaddr,
125 		  __entry->saddr, __entry->daddr,
126 		  __entry->state ? show_tcp_state_name(__entry->state) : "UNKNOWN",
127 		  __print_symbolic(__entry->reason, DEFINE_RST_REASON(FN, FNe)))
128 );
129 
130 #undef FN
131 #undef FNe
132 
133 /*
134  * tcp event with arguments sk
135  *
136  * Note: this class requires a valid sk pointer.
137  */
138 DECLARE_EVENT_CLASS(tcp_event_sk,
139 
140 	TP_PROTO(struct sock *sk),
141 
142 	TP_ARGS(sk),
143 
144 	TP_STRUCT__entry(
145 		__field(const void *, skaddr)
146 		__field(__u16, sport)
147 		__field(__u16, dport)
148 		__field(__u16, family)
149 		__array(__u8, saddr, 4)
150 		__array(__u8, daddr, 4)
151 		__array(__u8, saddr_v6, 16)
152 		__array(__u8, daddr_v6, 16)
153 		__field(__u64, sock_cookie)
154 	),
155 
156 	TP_fast_assign(
157 		struct inet_sock *inet = inet_sk(sk);
158 		__be32 *p32;
159 
160 		__entry->skaddr = sk;
161 
162 		__entry->sport = ntohs(inet->inet_sport);
163 		__entry->dport = ntohs(inet->inet_dport);
164 		__entry->family = sk->sk_family;
165 
166 		p32 = (__be32 *) __entry->saddr;
167 		*p32 = inet->inet_saddr;
168 
169 		p32 = (__be32 *) __entry->daddr;
170 		*p32 =  inet->inet_daddr;
171 
172 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
173 			       sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
174 
175 		__entry->sock_cookie = sock_gen_cookie(sk);
176 	),
177 
178 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",
179 		  show_family_name(__entry->family),
180 		  __entry->sport, __entry->dport,
181 		  __entry->saddr, __entry->daddr,
182 		  __entry->saddr_v6, __entry->daddr_v6,
183 		  __entry->sock_cookie)
184 );
185 
186 DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,
187 
188 	TP_PROTO(struct sock *sk),
189 
190 	TP_ARGS(sk)
191 );
192 
193 DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,
194 
195 	TP_PROTO(struct sock *sk),
196 
197 	TP_ARGS(sk)
198 );
199 
200 DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust,
201 
202 	TP_PROTO(struct sock *sk),
203 
204 	TP_ARGS(sk)
205 );
206 
207 TRACE_EVENT(tcp_rcvbuf_grow,
208 
209 	TP_PROTO(struct sock *sk, int time),
210 
211 	TP_ARGS(sk, time),
212 
213 	TP_STRUCT__entry(
214 		__field(int, time)
215 		__field(__u32, rtt_us)
216 		__field(__u32, copied)
217 		__field(__u32, inq)
218 		__field(__u32, space)
219 		__field(__u32, ooo_space)
220 		__field(__u32, rcvbuf)
221 		__field(__u8, scaling_ratio)
222 		__field(__u16, sport)
223 		__field(__u16, dport)
224 		__field(__u16, family)
225 		__array(__u8, saddr, 4)
226 		__array(__u8, daddr, 4)
227 		__array(__u8, saddr_v6, 16)
228 		__array(__u8, daddr_v6, 16)
229 		__field(const void *, skaddr)
230 		__field(__u64, sock_cookie)
231 	),
232 
233 	TP_fast_assign(
234 		struct inet_sock *inet = inet_sk(sk);
235 		struct tcp_sock *tp = tcp_sk(sk);
236 		__be32 *p32;
237 
238 		__entry->time = time;
239 		__entry->rtt_us = tp->rcv_rtt_est.rtt_us >> 3;
240 		__entry->copied = tp->copied_seq - tp->rcvq_space.seq;
241 		__entry->inq = tp->rcv_nxt - tp->copied_seq;
242 		__entry->space = tp->rcvq_space.space;
243 		__entry->ooo_space = RB_EMPTY_ROOT(&tp->out_of_order_queue) ? 0 :
244 				     TCP_SKB_CB(tp->ooo_last_skb)->end_seq -
245 				     tp->rcv_nxt;
246 
247 		__entry->rcvbuf = sk->sk_rcvbuf;
248 		__entry->scaling_ratio = tp->scaling_ratio;
249 		__entry->sport = ntohs(inet->inet_sport);
250 		__entry->dport = ntohs(inet->inet_dport);
251 		__entry->family = sk->sk_family;
252 
253 		p32 = (__be32 *) __entry->saddr;
254 		*p32 = inet->inet_saddr;
255 
256 		p32 = (__be32 *) __entry->daddr;
257 		*p32 = inet->inet_daddr;
258 
259 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
260 			       sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
261 
262 		__entry->skaddr = sk;
263 		__entry->sock_cookie = sock_gen_cookie(sk);
264 	),
265 
266 	TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u scaling_ratio=%u rcvbuf=%u "
267 		  "family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 "
268 		  "saddrv6=%pI6c daddrv6=%pI6c skaddr=%p sock_cookie=%llx",
269 		  __entry->time, __entry->rtt_us, __entry->copied,
270 		  __entry->inq, __entry->space, __entry->ooo_space,
271 		  __entry->scaling_ratio, __entry->rcvbuf,
272 		  show_family_name(__entry->family),
273 		  __entry->sport, __entry->dport,
274 		  __entry->saddr, __entry->daddr,
275 		  __entry->saddr_v6, __entry->daddr_v6,
276 		  __entry->skaddr,
277 		  __entry->sock_cookie)
278 );
279 
280 TRACE_EVENT(tcp_retransmit_synack,
281 
282 	TP_PROTO(const struct sock *sk, const struct request_sock *req),
283 
284 	TP_ARGS(sk, req),
285 
286 	TP_STRUCT__entry(
287 		__field(const void *, skaddr)
288 		__field(const void *, req)
289 		__field(__u16, sport)
290 		__field(__u16, dport)
291 		__field(__u16, family)
292 		__array(__u8, saddr, 4)
293 		__array(__u8, daddr, 4)
294 		__array(__u8, saddr_v6, 16)
295 		__array(__u8, daddr_v6, 16)
296 	),
297 
298 	TP_fast_assign(
299 		struct inet_request_sock *ireq = inet_rsk(req);
300 		__be32 *p32;
301 
302 		__entry->skaddr = sk;
303 		__entry->req = req;
304 
305 		__entry->sport = ireq->ir_num;
306 		__entry->dport = ntohs(ireq->ir_rmt_port);
307 		__entry->family = sk->sk_family;
308 
309 		p32 = (__be32 *) __entry->saddr;
310 		*p32 = ireq->ir_loc_addr;
311 
312 		p32 = (__be32 *) __entry->daddr;
313 		*p32 = ireq->ir_rmt_addr;
314 
315 		TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr,
316 			      ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);
317 	),
318 
319 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
320 		  show_family_name(__entry->family),
321 		  __entry->sport, __entry->dport,
322 		  __entry->saddr, __entry->daddr,
323 		  __entry->saddr_v6, __entry->daddr_v6)
324 );
325 
326 TRACE_EVENT(tcp_sendmsg_locked,
327 	TP_PROTO(const struct sock *sk, const struct msghdr *msg,
328 		 const struct sk_buff *skb, int size_goal),
329 
330 	TP_ARGS(sk, msg, skb, size_goal),
331 
332 	TP_STRUCT__entry(
333 		__field(const void *, skb_addr)
334 		__field(int, skb_len)
335 		__field(int, msg_left)
336 		__field(int, size_goal)
337 	),
338 
339 	TP_fast_assign(
340 		__entry->skb_addr = skb;
341 		__entry->skb_len = skb ? skb->len : 0;
342 		__entry->msg_left = msg_data_left(msg);
343 		__entry->size_goal = size_goal;
344 	),
345 
346 	TP_printk("skb_addr %p skb_len %d msg_left %d size_goal %d",
347 		  __entry->skb_addr, __entry->skb_len, __entry->msg_left,
348 		  __entry->size_goal));
349 
350 DECLARE_TRACE(tcp_cwnd_reduction,
351 	TP_PROTO(const struct sock *sk, int newly_acked_sacked,
352 		 int newly_lost, int flag),
353 	TP_ARGS(sk, newly_acked_sacked, newly_lost, flag)
354 );
355 
356 #include <trace/events/net_probe_common.h>
357 
358 TRACE_EVENT(tcp_probe,
359 
360 	TP_PROTO(struct sock *sk, const struct sk_buff *skb),
361 
362 	TP_ARGS(sk, skb),
363 
364 	TP_STRUCT__entry(
365 		/* sockaddr_in6 is always bigger than sockaddr_in */
366 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
367 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
368 		__field(__u16, sport)
369 		__field(__u16, dport)
370 		__field(__u16, family)
371 		__field(__u32, mark)
372 		__field(__u16, data_len)
373 		__field(__u32, snd_nxt)
374 		__field(__u32, snd_una)
375 		__field(__u32, snd_cwnd)
376 		__field(__u32, ssthresh)
377 		__field(__u32, snd_wnd)
378 		__field(__u32, srtt)
379 		__field(__u32, rcv_wnd)
380 		__field(__u64, sock_cookie)
381 		__field(const void *, skbaddr)
382 		__field(const void *, skaddr)
383 	),
384 
385 	TP_fast_assign(
386 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
387 		const struct inet_sock *inet = inet_sk(sk);
388 		const struct tcp_sock *tp = tcp_sk(sk);
389 
390 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
391 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
392 
393 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
394 
395 		/* For filtering use */
396 		__entry->sport = ntohs(inet->inet_sport);
397 		__entry->dport = ntohs(inet->inet_dport);
398 		__entry->mark = skb->mark;
399 		__entry->family = sk->sk_family;
400 
401 		__entry->data_len = skb->len - __tcp_hdrlen(th);
402 		__entry->snd_nxt = tp->snd_nxt;
403 		__entry->snd_una = tp->snd_una;
404 		__entry->snd_cwnd = tcp_snd_cwnd(tp);
405 		__entry->snd_wnd = tp->snd_wnd;
406 		__entry->rcv_wnd = tp->rcv_wnd;
407 		__entry->ssthresh = tcp_current_ssthresh(sk);
408 		__entry->srtt = tp->srtt_us >> 3;
409 		__entry->sock_cookie = sock_gen_cookie(sk);
410 
411 		__entry->skbaddr = skb;
412 		__entry->skaddr = sk;
413 	),
414 
415 	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 skbaddr=%p skaddr=%p",
416 		  show_family_name(__entry->family),
417 		  __entry->saddr, __entry->daddr, __entry->mark,
418 		  __entry->data_len, __entry->snd_nxt, __entry->snd_una,
419 		  __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,
420 		  __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie,
421 		  __entry->skbaddr, __entry->skaddr)
422 );
423 
424 /*
425  * tcp event with only skb
426  */
427 DECLARE_EVENT_CLASS(tcp_event_skb,
428 
429 	TP_PROTO(const struct sk_buff *skb),
430 
431 	TP_ARGS(skb),
432 
433 	TP_STRUCT__entry(
434 		__field(const void *, skbaddr)
435 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
436 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
437 	),
438 
439 	TP_fast_assign(
440 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
441 		__entry->skbaddr = skb;
442 
443 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
444 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
445 
446 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
447 	),
448 
449 	TP_printk("skbaddr=%p src=%pISpc dest=%pISpc",
450 		  __entry->skbaddr, __entry->saddr, __entry->daddr)
451 );
452 
453 DEFINE_EVENT(tcp_event_skb, tcp_bad_csum,
454 
455 	TP_PROTO(const struct sk_buff *skb),
456 
457 	TP_ARGS(skb)
458 );
459 
460 TRACE_EVENT(tcp_cong_state_set,
461 
462 	TP_PROTO(struct sock *sk, const u8 ca_state),
463 
464 	TP_ARGS(sk, ca_state),
465 
466 	TP_STRUCT__entry(
467 		__field(const void *, skaddr)
468 		__field(__u16, sport)
469 		__field(__u16, dport)
470 		__field(__u16, family)
471 		__array(__u8, saddr, 4)
472 		__array(__u8, daddr, 4)
473 		__array(__u8, saddr_v6, 16)
474 		__array(__u8, daddr_v6, 16)
475 		__field(__u8, cong_state)
476 	),
477 
478 	TP_fast_assign(
479 		struct inet_sock *inet = inet_sk(sk);
480 		__be32 *p32;
481 
482 		__entry->skaddr = sk;
483 
484 		__entry->sport = ntohs(inet->inet_sport);
485 		__entry->dport = ntohs(inet->inet_dport);
486 		__entry->family = sk->sk_family;
487 
488 		p32 = (__be32 *) __entry->saddr;
489 		*p32 = inet->inet_saddr;
490 
491 		p32 = (__be32 *) __entry->daddr;
492 		*p32 =  inet->inet_daddr;
493 
494 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
495 			   sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
496 
497 		__entry->cong_state = ca_state;
498 	),
499 
500 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",
501 		  show_family_name(__entry->family),
502 		  __entry->sport, __entry->dport,
503 		  __entry->saddr, __entry->daddr,
504 		  __entry->saddr_v6, __entry->daddr_v6,
505 		  __entry->cong_state)
506 );
507 
508 DECLARE_EVENT_CLASS(tcp_hash_event,
509 
510 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
511 
512 	TP_ARGS(sk, skb),
513 
514 	TP_STRUCT__entry(
515 		__field(__u64, net_cookie)
516 		__field(const void *, skbaddr)
517 		__field(const void *, skaddr)
518 		__field(int, state)
519 
520 		/* sockaddr_in6 is always bigger than sockaddr_in */
521 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
522 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
523 		__field(int, l3index)
524 
525 		__field(__u16, sport)
526 		__field(__u16, dport)
527 		__field(__u16, family)
528 
529 		__field(bool, fin)
530 		__field(bool, syn)
531 		__field(bool, rst)
532 		__field(bool, psh)
533 		__field(bool, ack)
534 	),
535 
536 	TP_fast_assign(
537 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
538 
539 		__entry->net_cookie = sock_net(sk)->net_cookie;
540 		__entry->skbaddr = skb;
541 		__entry->skaddr = sk;
542 		__entry->state = sk->sk_state;
543 
544 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
545 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
546 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
547 		__entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;
548 
549 		/* For filtering use */
550 		__entry->sport = ntohs(th->source);
551 		__entry->dport = ntohs(th->dest);
552 		__entry->family = sk->sk_family;
553 
554 		__entry->fin = th->fin;
555 		__entry->syn = th->syn;
556 		__entry->rst = th->rst;
557 		__entry->psh = th->psh;
558 		__entry->ack = th->ack;
559 	),
560 
561 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c]",
562 		  __entry->net_cookie,
563 		  show_tcp_state_name(__entry->state),
564 		  show_family_name(__entry->family),
565 		  __entry->saddr, __entry->daddr,
566 		  __entry->l3index,
567 		  __entry->fin ? 'F' : ' ',
568 		  __entry->syn ? 'S' : ' ',
569 		  __entry->rst ? 'R' : ' ',
570 		  __entry->psh ? 'P' : ' ',
571 		  __entry->ack ? '.' : ' ')
572 );
573 
574 DEFINE_EVENT(tcp_hash_event, tcp_hash_bad_header,
575 
576 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
577 	TP_ARGS(sk, skb)
578 );
579 
580 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_required,
581 
582 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
583 	TP_ARGS(sk, skb)
584 );
585 
586 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_unexpected,
587 
588 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
589 	TP_ARGS(sk, skb)
590 );
591 
592 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_mismatch,
593 
594 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
595 	TP_ARGS(sk, skb)
596 );
597 
598 DEFINE_EVENT(tcp_hash_event, tcp_hash_ao_required,
599 
600 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
601 	TP_ARGS(sk, skb)
602 );
603 
604 DECLARE_EVENT_CLASS(tcp_ao_event,
605 
606 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
607 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
608 
609 	TP_ARGS(sk, skb, keyid, rnext, maclen),
610 
611 	TP_STRUCT__entry(
612 		__field(__u64, net_cookie)
613 		__field(const void *, skbaddr)
614 		__field(const void *, skaddr)
615 		__field(int, state)
616 
617 		/* sockaddr_in6 is always bigger than sockaddr_in */
618 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
619 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
620 		__field(int, l3index)
621 
622 		__field(__u16, sport)
623 		__field(__u16, dport)
624 		__field(__u16, family)
625 
626 		__field(bool, fin)
627 		__field(bool, syn)
628 		__field(bool, rst)
629 		__field(bool, psh)
630 		__field(bool, ack)
631 
632 		__field(__u8, keyid)
633 		__field(__u8, rnext)
634 		__field(__u8, maclen)
635 	),
636 
637 	TP_fast_assign(
638 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
639 
640 		__entry->net_cookie = sock_net(sk)->net_cookie;
641 		__entry->skbaddr = skb;
642 		__entry->skaddr = sk;
643 		__entry->state = sk->sk_state;
644 
645 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
646 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
647 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
648 		__entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;
649 
650 		/* For filtering use */
651 		__entry->sport = ntohs(th->source);
652 		__entry->dport = ntohs(th->dest);
653 		__entry->family = sk->sk_family;
654 
655 		__entry->fin = th->fin;
656 		__entry->syn = th->syn;
657 		__entry->rst = th->rst;
658 		__entry->psh = th->psh;
659 		__entry->ack = th->ack;
660 
661 		__entry->keyid = keyid;
662 		__entry->rnext = rnext;
663 		__entry->maclen = maclen;
664 	),
665 
666 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c] keyid=%u rnext=%u maclen=%u",
667 		  __entry->net_cookie,
668 		  show_tcp_state_name(__entry->state),
669 		  show_family_name(__entry->family),
670 		  __entry->saddr, __entry->daddr,
671 		  __entry->l3index,
672 		  __entry->fin ? 'F' : ' ',
673 		  __entry->syn ? 'S' : ' ',
674 		  __entry->rst ? 'R' : ' ',
675 		  __entry->psh ? 'P' : ' ',
676 		  __entry->ack ? '.' : ' ',
677 		  __entry->keyid, __entry->rnext, __entry->maclen)
678 );
679 
680 DEFINE_EVENT(tcp_ao_event, tcp_ao_handshake_failure,
681 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
682 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
683 	TP_ARGS(sk, skb, keyid, rnext, maclen)
684 );
685 
686 #ifdef CONFIG_TCP_AO
687 DEFINE_EVENT(tcp_ao_event, tcp_ao_wrong_maclen,
688 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
689 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
690 	TP_ARGS(sk, skb, keyid, rnext, maclen)
691 );
692 
693 DEFINE_EVENT(tcp_ao_event, tcp_ao_mismatch,
694 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
695 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
696 	TP_ARGS(sk, skb, keyid, rnext, maclen)
697 );
698 
699 DEFINE_EVENT(tcp_ao_event, tcp_ao_key_not_found,
700 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
701 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
702 	TP_ARGS(sk, skb, keyid, rnext, maclen)
703 );
704 
705 DEFINE_EVENT(tcp_ao_event, tcp_ao_rnext_request,
706 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
707 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
708 	TP_ARGS(sk, skb, keyid, rnext, maclen)
709 );
710 
711 DECLARE_EVENT_CLASS(tcp_ao_event_sk,
712 
713 	TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),
714 
715 	TP_ARGS(sk, keyid, rnext),
716 
717 	TP_STRUCT__entry(
718 		__field(__u64, net_cookie)
719 		__field(const void *, skaddr)
720 		__field(int, state)
721 
722 		/* sockaddr_in6 is always bigger than sockaddr_in */
723 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
724 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
725 
726 		__field(__u16, sport)
727 		__field(__u16, dport)
728 		__field(__u16, family)
729 
730 		__field(__u8, keyid)
731 		__field(__u8, rnext)
732 	),
733 
734 	TP_fast_assign(
735 		const struct inet_sock *inet = inet_sk(sk);
736 
737 		__entry->net_cookie = sock_net(sk)->net_cookie;
738 		__entry->skaddr = sk;
739 		__entry->state = sk->sk_state;
740 
741 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
742 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
743 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
744 
745 		/* For filtering use */
746 		__entry->sport = ntohs(inet->inet_sport);
747 		__entry->dport = ntohs(inet->inet_dport);
748 		__entry->family = sk->sk_family;
749 
750 		__entry->keyid = keyid;
751 		__entry->rnext = rnext;
752 	),
753 
754 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc keyid=%u rnext=%u",
755 		  __entry->net_cookie,
756 		  show_tcp_state_name(__entry->state),
757 		  show_family_name(__entry->family),
758 		  __entry->saddr, __entry->daddr,
759 		  __entry->keyid, __entry->rnext)
760 );
761 
762 DEFINE_EVENT(tcp_ao_event_sk, tcp_ao_synack_no_key,
763 	TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),
764 	TP_ARGS(sk, keyid, rnext)
765 );
766 
767 DECLARE_EVENT_CLASS(tcp_ao_event_sne,
768 
769 	TP_PROTO(const struct sock *sk, __u32 new_sne),
770 
771 	TP_ARGS(sk, new_sne),
772 
773 	TP_STRUCT__entry(
774 		__field(__u64, net_cookie)
775 		__field(const void *, skaddr)
776 		__field(int, state)
777 
778 		/* sockaddr_in6 is always bigger than sockaddr_in */
779 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
780 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
781 
782 		__field(__u16, sport)
783 		__field(__u16, dport)
784 		__field(__u16, family)
785 
786 		__field(__u32, new_sne)
787 	),
788 
789 	TP_fast_assign(
790 		const struct inet_sock *inet = inet_sk(sk);
791 
792 		__entry->net_cookie = sock_net(sk)->net_cookie;
793 		__entry->skaddr = sk;
794 		__entry->state = sk->sk_state;
795 
796 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
797 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
798 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
799 
800 		/* For filtering use */
801 		__entry->sport = ntohs(inet->inet_sport);
802 		__entry->dport = ntohs(inet->inet_dport);
803 		__entry->family = sk->sk_family;
804 
805 		__entry->new_sne = new_sne;
806 	),
807 
808 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc sne=%u",
809 		  __entry->net_cookie,
810 		  show_tcp_state_name(__entry->state),
811 		  show_family_name(__entry->family),
812 		  __entry->saddr, __entry->daddr,
813 		  __entry->new_sne)
814 );
815 
816 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_snd_sne_update,
817 	TP_PROTO(const struct sock *sk, __u32 new_sne),
818 	TP_ARGS(sk, new_sne)
819 );
820 
821 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_rcv_sne_update,
822 	TP_PROTO(const struct sock *sk, __u32 new_sne),
823 	TP_ARGS(sk, new_sne)
824 );
825 #endif /* CONFIG_TCP_AO */
826 
827 #endif /* _TRACE_TCP_H */
828 
829 /* This part must be outside protection */
830 #include <trace/define_trace.h>
831