xref: /linux/include/trace/events/tcp.h (revision 09b1704f5b02c18dd02b21343530463fcfc92c54)
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(__u32, rcv_ssthresh)
222 		__field(__u32, window_clamp)
223 		__field(__u32, rcv_wnd)
224 		__field(__u8, scaling_ratio)
225 		__field(__u16, sport)
226 		__field(__u16, dport)
227 		__field(__u16, family)
228 		__array(__u8, saddr, 4)
229 		__array(__u8, daddr, 4)
230 		__array(__u8, saddr_v6, 16)
231 		__array(__u8, daddr_v6, 16)
232 		__field(const void *, skaddr)
233 		__field(__u64, sock_cookie)
234 	),
235 
236 	TP_fast_assign(
237 		struct inet_sock *inet = inet_sk(sk);
238 		struct tcp_sock *tp = tcp_sk(sk);
239 		__be32 *p32;
240 
241 		__entry->time = time;
242 		__entry->rtt_us = tp->rcv_rtt_est.rtt_us >> 3;
243 		__entry->copied = tp->copied_seq - tp->rcvq_space.seq;
244 		__entry->inq = tp->rcv_nxt - tp->copied_seq;
245 		__entry->space = tp->rcvq_space.space;
246 		__entry->ooo_space = RB_EMPTY_ROOT(&tp->out_of_order_queue) ? 0 :
247 				     TCP_SKB_CB(tp->ooo_last_skb)->end_seq -
248 				     tp->rcv_nxt;
249 
250 		__entry->rcvbuf = sk->sk_rcvbuf;
251 		__entry->rcv_ssthresh = tp->rcv_ssthresh;
252 		__entry->window_clamp = tp->window_clamp;
253 		__entry->rcv_wnd = tp->rcv_wnd;
254 		__entry->scaling_ratio = tp->scaling_ratio;
255 		__entry->sport = ntohs(inet->inet_sport);
256 		__entry->dport = ntohs(inet->inet_dport);
257 		__entry->family = sk->sk_family;
258 
259 		p32 = (__be32 *) __entry->saddr;
260 		*p32 = inet->inet_saddr;
261 
262 		p32 = (__be32 *) __entry->daddr;
263 		*p32 = inet->inet_daddr;
264 
265 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
266 			       sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
267 
268 		__entry->skaddr = sk;
269 		__entry->sock_cookie = sock_gen_cookie(sk);
270 	),
271 
272 	TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u scaling_ratio=%u rcvbuf=%u "
273 		  "rcv_ssthresh=%u window_clamp=%u rcv_wnd=%u "
274 		  "family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 "
275 		  "saddrv6=%pI6c daddrv6=%pI6c skaddr=%p sock_cookie=%llx",
276 		  __entry->time, __entry->rtt_us, __entry->copied,
277 		  __entry->inq, __entry->space, __entry->ooo_space,
278 		  __entry->scaling_ratio, __entry->rcvbuf,
279 		  __entry->rcv_ssthresh, __entry->window_clamp,
280 		  __entry->rcv_wnd,
281 		  show_family_name(__entry->family),
282 		  __entry->sport, __entry->dport,
283 		  __entry->saddr, __entry->daddr,
284 		  __entry->saddr_v6, __entry->daddr_v6,
285 		  __entry->skaddr,
286 		  __entry->sock_cookie)
287 );
288 
289 TRACE_EVENT(tcp_retransmit_synack,
290 
291 	TP_PROTO(const struct sock *sk, const struct request_sock *req),
292 
293 	TP_ARGS(sk, req),
294 
295 	TP_STRUCT__entry(
296 		__field(const void *, skaddr)
297 		__field(const void *, req)
298 		__field(__u16, sport)
299 		__field(__u16, dport)
300 		__field(__u16, family)
301 		__array(__u8, saddr, 4)
302 		__array(__u8, daddr, 4)
303 		__array(__u8, saddr_v6, 16)
304 		__array(__u8, daddr_v6, 16)
305 	),
306 
307 	TP_fast_assign(
308 		struct inet_request_sock *ireq = inet_rsk(req);
309 		__be32 *p32;
310 
311 		__entry->skaddr = sk;
312 		__entry->req = req;
313 
314 		__entry->sport = ireq->ir_num;
315 		__entry->dport = ntohs(ireq->ir_rmt_port);
316 		__entry->family = sk->sk_family;
317 
318 		p32 = (__be32 *) __entry->saddr;
319 		*p32 = ireq->ir_loc_addr;
320 
321 		p32 = (__be32 *) __entry->daddr;
322 		*p32 = ireq->ir_rmt_addr;
323 
324 		TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr,
325 			      ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);
326 	),
327 
328 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
329 		  show_family_name(__entry->family),
330 		  __entry->sport, __entry->dport,
331 		  __entry->saddr, __entry->daddr,
332 		  __entry->saddr_v6, __entry->daddr_v6)
333 );
334 
335 TRACE_EVENT(tcp_sendmsg_locked,
336 	TP_PROTO(const struct sock *sk, const struct msghdr *msg,
337 		 const struct sk_buff *skb, int size_goal),
338 
339 	TP_ARGS(sk, msg, skb, size_goal),
340 
341 	TP_STRUCT__entry(
342 		__field(const void *, skb_addr)
343 		__field(int, skb_len)
344 		__field(int, msg_left)
345 		__field(int, size_goal)
346 	),
347 
348 	TP_fast_assign(
349 		__entry->skb_addr = skb;
350 		__entry->skb_len = skb ? skb->len : 0;
351 		__entry->msg_left = msg_data_left(msg);
352 		__entry->size_goal = size_goal;
353 	),
354 
355 	TP_printk("skb_addr %p skb_len %d msg_left %d size_goal %d",
356 		  __entry->skb_addr, __entry->skb_len, __entry->msg_left,
357 		  __entry->size_goal));
358 
359 DECLARE_TRACE(tcp_cwnd_reduction,
360 	TP_PROTO(const struct sock *sk, int newly_acked_sacked,
361 		 int newly_lost, int flag),
362 	TP_ARGS(sk, newly_acked_sacked, newly_lost, flag)
363 );
364 
365 #include <trace/events/net_probe_common.h>
366 
367 TRACE_EVENT(tcp_probe,
368 
369 	TP_PROTO(struct sock *sk, const struct sk_buff *skb),
370 
371 	TP_ARGS(sk, skb),
372 
373 	TP_STRUCT__entry(
374 		/* sockaddr_in6 is always bigger than sockaddr_in */
375 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
376 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
377 		__field(__u16, sport)
378 		__field(__u16, dport)
379 		__field(__u16, family)
380 		__field(__u32, mark)
381 		__field(__u16, data_len)
382 		__field(__u32, snd_nxt)
383 		__field(__u32, snd_una)
384 		__field(__u32, snd_cwnd)
385 		__field(__u32, ssthresh)
386 		__field(__u32, snd_wnd)
387 		__field(__u32, srtt)
388 		__field(__u32, rcv_wnd)
389 		__field(__u64, sock_cookie)
390 		__field(const void *, skbaddr)
391 		__field(const void *, skaddr)
392 	),
393 
394 	TP_fast_assign(
395 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
396 		const struct inet_sock *inet = inet_sk(sk);
397 		const struct tcp_sock *tp = tcp_sk(sk);
398 
399 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
400 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
401 
402 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
403 
404 		/* For filtering use */
405 		__entry->sport = ntohs(inet->inet_sport);
406 		__entry->dport = ntohs(inet->inet_dport);
407 		__entry->mark = skb->mark;
408 		__entry->family = sk->sk_family;
409 
410 		__entry->data_len = skb->len - __tcp_hdrlen(th);
411 		__entry->snd_nxt = tp->snd_nxt;
412 		__entry->snd_una = tp->snd_una;
413 		__entry->snd_cwnd = tcp_snd_cwnd(tp);
414 		__entry->snd_wnd = tp->snd_wnd;
415 		__entry->rcv_wnd = tp->rcv_wnd;
416 		__entry->ssthresh = tcp_current_ssthresh(sk);
417 		__entry->srtt = tp->srtt_us >> 3;
418 		__entry->sock_cookie = sock_gen_cookie(sk);
419 
420 		__entry->skbaddr = skb;
421 		__entry->skaddr = sk;
422 	),
423 
424 	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",
425 		  show_family_name(__entry->family),
426 		  __entry->saddr, __entry->daddr, __entry->mark,
427 		  __entry->data_len, __entry->snd_nxt, __entry->snd_una,
428 		  __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,
429 		  __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie,
430 		  __entry->skbaddr, __entry->skaddr)
431 );
432 
433 /*
434  * tcp event with only skb
435  */
436 DECLARE_EVENT_CLASS(tcp_event_skb,
437 
438 	TP_PROTO(const struct sk_buff *skb),
439 
440 	TP_ARGS(skb),
441 
442 	TP_STRUCT__entry(
443 		__field(const void *, skbaddr)
444 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
445 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
446 	),
447 
448 	TP_fast_assign(
449 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
450 		__entry->skbaddr = skb;
451 
452 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
453 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
454 
455 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
456 	),
457 
458 	TP_printk("skbaddr=%p src=%pISpc dest=%pISpc",
459 		  __entry->skbaddr, __entry->saddr, __entry->daddr)
460 );
461 
462 DEFINE_EVENT(tcp_event_skb, tcp_bad_csum,
463 
464 	TP_PROTO(const struct sk_buff *skb),
465 
466 	TP_ARGS(skb)
467 );
468 
469 TRACE_EVENT(tcp_cong_state_set,
470 
471 	TP_PROTO(struct sock *sk, const u8 ca_state),
472 
473 	TP_ARGS(sk, ca_state),
474 
475 	TP_STRUCT__entry(
476 		__field(const void *, skaddr)
477 		__field(__u16, sport)
478 		__field(__u16, dport)
479 		__field(__u16, family)
480 		__array(__u8, saddr, 4)
481 		__array(__u8, daddr, 4)
482 		__array(__u8, saddr_v6, 16)
483 		__array(__u8, daddr_v6, 16)
484 		__field(__u8, cong_state)
485 	),
486 
487 	TP_fast_assign(
488 		struct inet_sock *inet = inet_sk(sk);
489 		__be32 *p32;
490 
491 		__entry->skaddr = sk;
492 
493 		__entry->sport = ntohs(inet->inet_sport);
494 		__entry->dport = ntohs(inet->inet_dport);
495 		__entry->family = sk->sk_family;
496 
497 		p32 = (__be32 *) __entry->saddr;
498 		*p32 = inet->inet_saddr;
499 
500 		p32 = (__be32 *) __entry->daddr;
501 		*p32 =  inet->inet_daddr;
502 
503 		TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,
504 			   sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
505 
506 		__entry->cong_state = ca_state;
507 	),
508 
509 	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",
510 		  show_family_name(__entry->family),
511 		  __entry->sport, __entry->dport,
512 		  __entry->saddr, __entry->daddr,
513 		  __entry->saddr_v6, __entry->daddr_v6,
514 		  __entry->cong_state)
515 );
516 
517 DECLARE_EVENT_CLASS(tcp_hash_event,
518 
519 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
520 
521 	TP_ARGS(sk, skb),
522 
523 	TP_STRUCT__entry(
524 		__field(__u64, net_cookie)
525 		__field(const void *, skbaddr)
526 		__field(const void *, skaddr)
527 		__field(int, state)
528 
529 		/* sockaddr_in6 is always bigger than sockaddr_in */
530 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
531 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
532 		__field(int, l3index)
533 
534 		__field(__u16, sport)
535 		__field(__u16, dport)
536 		__field(__u16, family)
537 
538 		__field(bool, fin)
539 		__field(bool, syn)
540 		__field(bool, rst)
541 		__field(bool, psh)
542 		__field(bool, ack)
543 	),
544 
545 	TP_fast_assign(
546 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
547 
548 		__entry->net_cookie = sock_net(sk)->net_cookie;
549 		__entry->skbaddr = skb;
550 		__entry->skaddr = sk;
551 		__entry->state = sk->sk_state;
552 
553 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
554 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
555 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
556 		__entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;
557 
558 		/* For filtering use */
559 		__entry->sport = ntohs(th->source);
560 		__entry->dport = ntohs(th->dest);
561 		__entry->family = sk->sk_family;
562 
563 		__entry->fin = th->fin;
564 		__entry->syn = th->syn;
565 		__entry->rst = th->rst;
566 		__entry->psh = th->psh;
567 		__entry->ack = th->ack;
568 	),
569 
570 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c]",
571 		  __entry->net_cookie,
572 		  show_tcp_state_name(__entry->state),
573 		  show_family_name(__entry->family),
574 		  __entry->saddr, __entry->daddr,
575 		  __entry->l3index,
576 		  __entry->fin ? 'F' : ' ',
577 		  __entry->syn ? 'S' : ' ',
578 		  __entry->rst ? 'R' : ' ',
579 		  __entry->psh ? 'P' : ' ',
580 		  __entry->ack ? '.' : ' ')
581 );
582 
583 DEFINE_EVENT(tcp_hash_event, tcp_hash_bad_header,
584 
585 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
586 	TP_ARGS(sk, skb)
587 );
588 
589 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_required,
590 
591 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
592 	TP_ARGS(sk, skb)
593 );
594 
595 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_unexpected,
596 
597 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
598 	TP_ARGS(sk, skb)
599 );
600 
601 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_mismatch,
602 
603 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
604 	TP_ARGS(sk, skb)
605 );
606 
607 DEFINE_EVENT(tcp_hash_event, tcp_hash_ao_required,
608 
609 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
610 	TP_ARGS(sk, skb)
611 );
612 
613 DECLARE_EVENT_CLASS(tcp_ao_event,
614 
615 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
616 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
617 
618 	TP_ARGS(sk, skb, keyid, rnext, maclen),
619 
620 	TP_STRUCT__entry(
621 		__field(__u64, net_cookie)
622 		__field(const void *, skbaddr)
623 		__field(const void *, skaddr)
624 		__field(int, state)
625 
626 		/* sockaddr_in6 is always bigger than sockaddr_in */
627 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
628 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
629 		__field(int, l3index)
630 
631 		__field(__u16, sport)
632 		__field(__u16, dport)
633 		__field(__u16, family)
634 
635 		__field(bool, fin)
636 		__field(bool, syn)
637 		__field(bool, rst)
638 		__field(bool, psh)
639 		__field(bool, ack)
640 
641 		__field(__u8, keyid)
642 		__field(__u8, rnext)
643 		__field(__u8, maclen)
644 	),
645 
646 	TP_fast_assign(
647 		const struct tcphdr *th = (const struct tcphdr *)skb->data;
648 
649 		__entry->net_cookie = sock_net(sk)->net_cookie;
650 		__entry->skbaddr = skb;
651 		__entry->skaddr = sk;
652 		__entry->state = sk->sk_state;
653 
654 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
655 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
656 		TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);
657 		__entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;
658 
659 		/* For filtering use */
660 		__entry->sport = ntohs(th->source);
661 		__entry->dport = ntohs(th->dest);
662 		__entry->family = sk->sk_family;
663 
664 		__entry->fin = th->fin;
665 		__entry->syn = th->syn;
666 		__entry->rst = th->rst;
667 		__entry->psh = th->psh;
668 		__entry->ack = th->ack;
669 
670 		__entry->keyid = keyid;
671 		__entry->rnext = rnext;
672 		__entry->maclen = maclen;
673 	),
674 
675 	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",
676 		  __entry->net_cookie,
677 		  show_tcp_state_name(__entry->state),
678 		  show_family_name(__entry->family),
679 		  __entry->saddr, __entry->daddr,
680 		  __entry->l3index,
681 		  __entry->fin ? 'F' : ' ',
682 		  __entry->syn ? 'S' : ' ',
683 		  __entry->rst ? 'R' : ' ',
684 		  __entry->psh ? 'P' : ' ',
685 		  __entry->ack ? '.' : ' ',
686 		  __entry->keyid, __entry->rnext, __entry->maclen)
687 );
688 
689 DEFINE_EVENT(tcp_ao_event, tcp_ao_handshake_failure,
690 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
691 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
692 	TP_ARGS(sk, skb, keyid, rnext, maclen)
693 );
694 
695 #ifdef CONFIG_TCP_AO
696 DEFINE_EVENT(tcp_ao_event, tcp_ao_wrong_maclen,
697 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
698 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
699 	TP_ARGS(sk, skb, keyid, rnext, maclen)
700 );
701 
702 DEFINE_EVENT(tcp_ao_event, tcp_ao_mismatch,
703 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
704 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
705 	TP_ARGS(sk, skb, keyid, rnext, maclen)
706 );
707 
708 DEFINE_EVENT(tcp_ao_event, tcp_ao_key_not_found,
709 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
710 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
711 	TP_ARGS(sk, skb, keyid, rnext, maclen)
712 );
713 
714 DEFINE_EVENT(tcp_ao_event, tcp_ao_rnext_request,
715 	TP_PROTO(const struct sock *sk, const struct sk_buff *skb,
716 		 const __u8 keyid, const __u8 rnext, const __u8 maclen),
717 	TP_ARGS(sk, skb, keyid, rnext, maclen)
718 );
719 
720 DECLARE_EVENT_CLASS(tcp_ao_event_sk,
721 
722 	TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),
723 
724 	TP_ARGS(sk, keyid, rnext),
725 
726 	TP_STRUCT__entry(
727 		__field(__u64, net_cookie)
728 		__field(const void *, skaddr)
729 		__field(int, state)
730 
731 		/* sockaddr_in6 is always bigger than sockaddr_in */
732 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
733 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
734 
735 		__field(__u16, sport)
736 		__field(__u16, dport)
737 		__field(__u16, family)
738 
739 		__field(__u8, keyid)
740 		__field(__u8, rnext)
741 	),
742 
743 	TP_fast_assign(
744 		const struct inet_sock *inet = inet_sk(sk);
745 
746 		__entry->net_cookie = sock_net(sk)->net_cookie;
747 		__entry->skaddr = sk;
748 		__entry->state = sk->sk_state;
749 
750 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
751 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
752 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
753 
754 		/* For filtering use */
755 		__entry->sport = ntohs(inet->inet_sport);
756 		__entry->dport = ntohs(inet->inet_dport);
757 		__entry->family = sk->sk_family;
758 
759 		__entry->keyid = keyid;
760 		__entry->rnext = rnext;
761 	),
762 
763 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc keyid=%u rnext=%u",
764 		  __entry->net_cookie,
765 		  show_tcp_state_name(__entry->state),
766 		  show_family_name(__entry->family),
767 		  __entry->saddr, __entry->daddr,
768 		  __entry->keyid, __entry->rnext)
769 );
770 
771 DEFINE_EVENT(tcp_ao_event_sk, tcp_ao_synack_no_key,
772 	TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),
773 	TP_ARGS(sk, keyid, rnext)
774 );
775 
776 DECLARE_EVENT_CLASS(tcp_ao_event_sne,
777 
778 	TP_PROTO(const struct sock *sk, __u32 new_sne),
779 
780 	TP_ARGS(sk, new_sne),
781 
782 	TP_STRUCT__entry(
783 		__field(__u64, net_cookie)
784 		__field(const void *, skaddr)
785 		__field(int, state)
786 
787 		/* sockaddr_in6 is always bigger than sockaddr_in */
788 		__array(__u8, saddr, sizeof(struct sockaddr_in6))
789 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
790 
791 		__field(__u16, sport)
792 		__field(__u16, dport)
793 		__field(__u16, family)
794 
795 		__field(__u32, new_sne)
796 	),
797 
798 	TP_fast_assign(
799 		const struct inet_sock *inet = inet_sk(sk);
800 
801 		__entry->net_cookie = sock_net(sk)->net_cookie;
802 		__entry->skaddr = sk;
803 		__entry->state = sk->sk_state;
804 
805 		memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
806 		memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
807 		TP_STORE_ADDR_PORTS(__entry, inet, sk);
808 
809 		/* For filtering use */
810 		__entry->sport = ntohs(inet->inet_sport);
811 		__entry->dport = ntohs(inet->inet_dport);
812 		__entry->family = sk->sk_family;
813 
814 		__entry->new_sne = new_sne;
815 	),
816 
817 	TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc sne=%u",
818 		  __entry->net_cookie,
819 		  show_tcp_state_name(__entry->state),
820 		  show_family_name(__entry->family),
821 		  __entry->saddr, __entry->daddr,
822 		  __entry->new_sne)
823 );
824 
825 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_snd_sne_update,
826 	TP_PROTO(const struct sock *sk, __u32 new_sne),
827 	TP_ARGS(sk, new_sne)
828 );
829 
830 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_rcv_sne_update,
831 	TP_PROTO(const struct sock *sk, __u32 new_sne),
832 	TP_ARGS(sk, new_sne)
833 );
834 #endif /* CONFIG_TCP_AO */
835 
836 #endif /* _TRACE_TCP_H */
837 
838 /* This part must be outside protection */
839 #include <trace/define_trace.h>
840