xref: /linux/include/trace/events/tcp.h (revision 83a37b3292f4aca799b355179ad6fbdd78a08e10)
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM tcp
3 
4 #if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_TCP_H
6 
7 #include <linux/ipv6.h>
8 #include <linux/tcp.h>
9 #include <linux/tracepoint.h>
10 #include <net/ipv6.h>
11 
12 TRACE_EVENT(tcp_retransmit_skb,
13 
14 	TP_PROTO(struct sock *sk, struct sk_buff *skb),
15 
16 	TP_ARGS(sk, skb),
17 
18 	TP_STRUCT__entry(
19 		__field(void *, skbaddr)
20 		__field(void *, skaddr)
21 		__field(__u16, sport)
22 		__field(__u16, dport)
23 		__array(__u8, saddr, 4)
24 		__array(__u8, daddr, 4)
25 		__array(__u8, saddr_v6, 16)
26 		__array(__u8, daddr_v6, 16)
27 	),
28 
29 	TP_fast_assign(
30 		struct ipv6_pinfo *np = inet6_sk(sk);
31 		struct inet_sock *inet = inet_sk(sk);
32 		struct in6_addr *pin6;
33 		__be32 *p32;
34 
35 		__entry->skbaddr = skb;
36 		__entry->skaddr = sk;
37 
38 		__entry->sport = ntohs(inet->inet_sport);
39 		__entry->dport = ntohs(inet->inet_dport);
40 
41 		p32 = (__be32 *) __entry->saddr;
42 		*p32 = inet->inet_saddr;
43 
44 		p32 = (__be32 *) __entry->daddr;
45 		*p32 =  inet->inet_daddr;
46 
47 		if (np) {
48 			pin6 = (struct in6_addr *)__entry->saddr_v6;
49 			*pin6 = np->saddr;
50 			pin6 = (struct in6_addr *)__entry->daddr_v6;
51 			*pin6 = *(np->daddr_cache);
52 		} else {
53 			pin6 = (struct in6_addr *)__entry->saddr_v6;
54 			ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
55 			pin6 = (struct in6_addr *)__entry->daddr_v6;
56 			ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
57 		}
58 	),
59 
60 	TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6 daddrv6=%pI6",
61 		  __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
62 		  __entry->saddr_v6, __entry->daddr_v6)
63 );
64 
65 #endif /* _TRACE_TCP_H */
66 
67 /* This part must be outside protection */
68 #include <trace/define_trace.h>
69