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