File Index
Files and directories
Sign in
FILE

tcp.h

File preview with syntax highlighting.

linux-6.19.14/include/trace/events/tcp.h C
  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
 16TRACE_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);
 71DEFINE_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 */
 82TRACE_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 */
138DECLARE_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
186DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,
187
188	TP_PROTO(struct sock *sk),
189
190	TP_ARGS(sk)
191);
192
193DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,
194
195	TP_PROTO(struct sock *sk),
196
197	TP_ARGS(sk)
198);
199
200DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust,
201
202	TP_PROTO(struct sock *sk),
203
204	TP_ARGS(sk)
205);
206
207TRACE_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
289TRACE_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
335TRACE_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
359DECLARE_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
367TRACE_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 */
436DECLARE_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
462DEFINE_EVENT(tcp_event_skb, tcp_bad_csum,
463
464	TP_PROTO(const struct sk_buff *skb),
465
466	TP_ARGS(skb)
467);
468
469TRACE_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
517DECLARE_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
583DEFINE_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
589DEFINE_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
595DEFINE_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
601DEFINE_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
607DEFINE_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
613DECLARE_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
689DEFINE_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
696DEFINE_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
702DEFINE_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
708DEFINE_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
714DEFINE_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
720DECLARE_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
771DEFINE_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
776DECLARE_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
825DEFINE_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
830DEFINE_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>
~/ Read-only file preview.