]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - include/trace/events/tcp.h
net: tracepoint: replace tcp_set_state tracepoint with inet_sock_set_state tracepoint
[mirror_ubuntu-jammy-kernel.git] / include / trace / events / tcp.h
CommitLineData
e086101b
CW
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
f6e37b25
SL
12/*
13 * tcp event with arguments sk and skb
14 *
15 * Note: this class requires a valid sk pointer; while skb pointer could
16 * be NULL.
17 */
18DECLARE_EVENT_CLASS(tcp_event_sk_skb,
e086101b 19
7344e29f 20 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
e086101b
CW
21
22 TP_ARGS(sk, skb),
23
24 TP_STRUCT__entry(
7344e29f
SL
25 __field(const void *, skbaddr)
26 __field(const void *, skaddr)
e086101b
CW
27 __field(__u16, sport)
28 __field(__u16, dport)
29 __array(__u8, saddr, 4)
30 __array(__u8, daddr, 4)
31 __array(__u8, saddr_v6, 16)
32 __array(__u8, daddr_v6, 16)
33 ),
34
35 TP_fast_assign(
e086101b
CW
36 struct inet_sock *inet = inet_sk(sk);
37 struct in6_addr *pin6;
38 __be32 *p32;
39
40 __entry->skbaddr = skb;
41 __entry->skaddr = sk;
42
43 __entry->sport = ntohs(inet->inet_sport);
44 __entry->dport = ntohs(inet->inet_dport);
45
46 p32 = (__be32 *) __entry->saddr;
47 *p32 = inet->inet_saddr;
48
49 p32 = (__be32 *) __entry->daddr;
50 *p32 = inet->inet_daddr;
51
89005678
DA
52#if IS_ENABLED(CONFIG_IPV6)
53 if (sk->sk_family == AF_INET6) {
e086101b 54 pin6 = (struct in6_addr *)__entry->saddr_v6;
386fd5da 55 *pin6 = sk->sk_v6_rcv_saddr;
e086101b 56 pin6 = (struct in6_addr *)__entry->daddr_v6;
386fd5da 57 *pin6 = sk->sk_v6_daddr;
89005678
DA
58 } else
59#endif
60 {
e086101b
CW
61 pin6 = (struct in6_addr *)__entry->saddr_v6;
62 ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
63 pin6 = (struct in6_addr *)__entry->daddr_v6;
64 ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
65 }
66 ),
67
fb6ff75e 68 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
e086101b
CW
69 __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
70 __entry->saddr_v6, __entry->daddr_v6)
71);
72
f6e37b25
SL
73DEFINE_EVENT(tcp_event_sk_skb, tcp_retransmit_skb,
74
7344e29f 75 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
f6e37b25
SL
76
77 TP_ARGS(sk, skb)
78);
79
c24b14c4
SL
80/*
81 * skb of trace_tcp_send_reset is the skb that caused RST. In case of
82 * active reset, skb should be NULL
83 */
84DEFINE_EVENT(tcp_event_sk_skb, tcp_send_reset,
85
86 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
87
88 TP_ARGS(sk, skb)
89);
90
5941521c
SL
91/*
92 * tcp event with arguments sk
93 *
94 * Note: this class requires a valid sk pointer.
95 */
96DECLARE_EVENT_CLASS(tcp_event_sk,
97
98 TP_PROTO(const struct sock *sk),
99
100 TP_ARGS(sk),
101
102 TP_STRUCT__entry(
103 __field(const void *, skaddr)
104 __field(__u16, sport)
105 __field(__u16, dport)
106 __array(__u8, saddr, 4)
107 __array(__u8, daddr, 4)
108 __array(__u8, saddr_v6, 16)
109 __array(__u8, daddr_v6, 16)
110 ),
111
112 TP_fast_assign(
113 struct inet_sock *inet = inet_sk(sk);
114 struct in6_addr *pin6;
115 __be32 *p32;
116
117 __entry->skaddr = sk;
118
119 __entry->sport = ntohs(inet->inet_sport);
120 __entry->dport = ntohs(inet->inet_dport);
121
122 p32 = (__be32 *) __entry->saddr;
123 *p32 = inet->inet_saddr;
124
125 p32 = (__be32 *) __entry->daddr;
126 *p32 = inet->inet_daddr;
127
128#if IS_ENABLED(CONFIG_IPV6)
129 if (sk->sk_family == AF_INET6) {
130 pin6 = (struct in6_addr *)__entry->saddr_v6;
131 *pin6 = sk->sk_v6_rcv_saddr;
132 pin6 = (struct in6_addr *)__entry->daddr_v6;
133 *pin6 = sk->sk_v6_daddr;
134 } else
135#endif
136 {
137 pin6 = (struct in6_addr *)__entry->saddr_v6;
138 ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
139 pin6 = (struct in6_addr *)__entry->daddr_v6;
140 ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
141 }
142 ),
143
144 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
145 __entry->sport, __entry->dport,
146 __entry->saddr, __entry->daddr,
147 __entry->saddr_v6, __entry->daddr_v6)
148);
149
150DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,
151
152 TP_PROTO(const struct sock *sk),
153
154 TP_ARGS(sk)
155);
156
e1a4aa50
SL
157DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,
158
159 TP_PROTO(const struct sock *sk),
160
161 TP_ARGS(sk)
162);
163
e8fce239
SL
164TRACE_EVENT(tcp_set_state,
165
166 TP_PROTO(const struct sock *sk, const int oldstate, const int newstate),
167
168 TP_ARGS(sk, oldstate, newstate),
169
170 TP_STRUCT__entry(
171 __field(const void *, skaddr)
172 __field(int, oldstate)
173 __field(int, newstate)
174 __field(__u16, sport)
175 __field(__u16, dport)
176 __array(__u8, saddr, 4)
177 __array(__u8, daddr, 4)
178 __array(__u8, saddr_v6, 16)
179 __array(__u8, daddr_v6, 16)
180 ),
181
182 TP_fast_assign(
183 struct inet_sock *inet = inet_sk(sk);
184 struct in6_addr *pin6;
185 __be32 *p32;
186
187 __entry->skaddr = sk;
188 __entry->oldstate = oldstate;
189 __entry->newstate = newstate;
190
191 __entry->sport = ntohs(inet->inet_sport);
192 __entry->dport = ntohs(inet->inet_dport);
193
194 p32 = (__be32 *) __entry->saddr;
195 *p32 = inet->inet_saddr;
196
197 p32 = (__be32 *) __entry->daddr;
198 *p32 = inet->inet_daddr;
199
200#if IS_ENABLED(CONFIG_IPV6)
201 if (sk->sk_family == AF_INET6) {
202 pin6 = (struct in6_addr *)__entry->saddr_v6;
203 *pin6 = sk->sk_v6_rcv_saddr;
204 pin6 = (struct in6_addr *)__entry->daddr_v6;
205 *pin6 = sk->sk_v6_daddr;
206 } else
207#endif
208 {
209 pin6 = (struct in6_addr *)__entry->saddr_v6;
210 ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
211 pin6 = (struct in6_addr *)__entry->daddr_v6;
212 ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
213 }
214 ),
215
216 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s",
217 __entry->sport, __entry->dport,
218 __entry->saddr, __entry->daddr,
219 __entry->saddr_v6, __entry->daddr_v6,
220 show_tcp_state_name(__entry->oldstate),
221 show_tcp_state_name(__entry->newstate))
222);
223
cf34ce3d
SL
224TRACE_EVENT(tcp_retransmit_synack,
225
226 TP_PROTO(const struct sock *sk, const struct request_sock *req),
227
228 TP_ARGS(sk, req),
229
230 TP_STRUCT__entry(
231 __field(const void *, skaddr)
232 __field(const void *, req)
233 __field(__u16, sport)
234 __field(__u16, dport)
235 __array(__u8, saddr, 4)
236 __array(__u8, daddr, 4)
237 __array(__u8, saddr_v6, 16)
238 __array(__u8, daddr_v6, 16)
239 ),
240
241 TP_fast_assign(
242 struct inet_request_sock *ireq = inet_rsk(req);
243 struct in6_addr *pin6;
244 __be32 *p32;
245
246 __entry->skaddr = sk;
247 __entry->req = req;
248
249 __entry->sport = ireq->ir_num;
250 __entry->dport = ntohs(ireq->ir_rmt_port);
251
252 p32 = (__be32 *) __entry->saddr;
253 *p32 = ireq->ir_loc_addr;
254
255 p32 = (__be32 *) __entry->daddr;
256 *p32 = ireq->ir_rmt_addr;
257
258#if IS_ENABLED(CONFIG_IPV6)
259 if (sk->sk_family == AF_INET6) {
260 pin6 = (struct in6_addr *)__entry->saddr_v6;
261 *pin6 = ireq->ir_v6_loc_addr;
262 pin6 = (struct in6_addr *)__entry->daddr_v6;
263 *pin6 = ireq->ir_v6_rmt_addr;
264 } else
265#endif
266 {
267 pin6 = (struct in6_addr *)__entry->saddr_v6;
268 ipv6_addr_set_v4mapped(ireq->ir_loc_addr, pin6);
269 pin6 = (struct in6_addr *)__entry->daddr_v6;
270 ipv6_addr_set_v4mapped(ireq->ir_rmt_addr, pin6);
271 }
272 ),
273
274 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
275 __entry->sport, __entry->dport,
276 __entry->saddr, __entry->daddr,
277 __entry->saddr_v6, __entry->daddr_v6)
278);
279
e086101b
CW
280#endif /* _TRACE_TCP_H */
281
282/* This part must be outside protection */
283#include <trace/define_trace.h>