Warning: This file is not a C or C++ file. It does not have highlighting.

1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM handshake
4
5#if !defined(_TRACE_HANDSHAKE_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_HANDSHAKE_H
7
8#include <linux/net.h>
9#include <net/tls_prot.h>
10#include <linux/tracepoint.h>
11#include <trace/events/net_probe_common.h>
12
13#define TLS_RECORD_TYPE_LIST \
14 record_type(CHANGE_CIPHER_SPEC) \
15 record_type(ALERT) \
16 record_type(HANDSHAKE) \
17 record_type(DATA) \
18 record_type(HEARTBEAT) \
19 record_type(TLS12_CID) \
20 record_type_end(ACK)
21
22#undef record_type
23#undef record_type_end
24#define record_type(x) TRACE_DEFINE_ENUM(TLS_RECORD_TYPE_##x);
25#define record_type_end(x) TRACE_DEFINE_ENUM(TLS_RECORD_TYPE_##x);
26
27TLS_RECORD_TYPE_LIST
28
29#undef record_type
30#undef record_type_end
31#define record_type(x) { TLS_RECORD_TYPE_##x, #x },
32#define record_type_end(x) { TLS_RECORD_TYPE_##x, #x }
33
34#define show_tls_content_type(type) \
35 __print_symbolic(type, TLS_RECORD_TYPE_LIST)
36
37TRACE_DEFINE_ENUM(TLS_ALERT_LEVEL_WARNING);
38TRACE_DEFINE_ENUM(TLS_ALERT_LEVEL_FATAL);
39
40#define show_tls_alert_level(level) \
41 __print_symbolic(level, \
42 { TLS_ALERT_LEVEL_WARNING, "Warning" }, \
43 { TLS_ALERT_LEVEL_FATAL, "Fatal" })
44
45#define TLS_ALERT_DESCRIPTION_LIST \
46 alert_description(CLOSE_NOTIFY) \
47 alert_description(UNEXPECTED_MESSAGE) \
48 alert_description(BAD_RECORD_MAC) \
49 alert_description(RECORD_OVERFLOW) \
50 alert_description(HANDSHAKE_FAILURE) \
51 alert_description(BAD_CERTIFICATE) \
52 alert_description(UNSUPPORTED_CERTIFICATE) \
53 alert_description(CERTIFICATE_REVOKED) \
54 alert_description(CERTIFICATE_EXPIRED) \
55 alert_description(CERTIFICATE_UNKNOWN) \
56 alert_description(ILLEGAL_PARAMETER) \
57 alert_description(UNKNOWN_CA) \
58 alert_description(ACCESS_DENIED) \
59 alert_description(DECODE_ERROR) \
60 alert_description(DECRYPT_ERROR) \
61 alert_description(TOO_MANY_CIDS_REQUESTED) \
62 alert_description(PROTOCOL_VERSION) \
63 alert_description(INSUFFICIENT_SECURITY) \
64 alert_description(INTERNAL_ERROR) \
65 alert_description(INAPPROPRIATE_FALLBACK) \
66 alert_description(USER_CANCELED) \
67 alert_description(MISSING_EXTENSION) \
68 alert_description(UNSUPPORTED_EXTENSION) \
69 alert_description(UNRECOGNIZED_NAME) \
70 alert_description(BAD_CERTIFICATE_STATUS_RESPONSE) \
71 alert_description(UNKNOWN_PSK_IDENTITY) \
72 alert_description(CERTIFICATE_REQUIRED) \
73 alert_description_end(NO_APPLICATION_PROTOCOL)
74
75#undef alert_description
76#undef alert_description_end
77#define alert_description(x) TRACE_DEFINE_ENUM(TLS_ALERT_DESC_##x);
78#define alert_description_end(x) TRACE_DEFINE_ENUM(TLS_ALERT_DESC_##x);
79
80TLS_ALERT_DESCRIPTION_LIST
81
82#undef alert_description
83#undef alert_description_end
84#define alert_description(x) { TLS_ALERT_DESC_##x, #x },
85#define alert_description_end(x) { TLS_ALERT_DESC_##x, #x }
86
87#define show_tls_alert_description(desc) \
88 __print_symbolic(desc, TLS_ALERT_DESCRIPTION_LIST)
89
90DECLARE_EVENT_CLASS(handshake_event_class,
91 TP_PROTO(
92 const struct net *net,
93 const struct handshake_req *req,
94 const struct sock *sk
95 ),
96 TP_ARGS(net, req, sk),
97 TP_STRUCT__entry(
98 __field(const void *, req)
99 __field(const void *, sk)
100 __field(unsigned int, netns_ino)
101 ),
102 TP_fast_assign(
103 __entry->req = req;
104 __entry->sk = sk;
105 __entry->netns_ino = net->ns.inum;
106 ),
107 TP_printk("req=%p sk=%p",
108 __entry->req, __entry->sk
109 )
110);
111#define DEFINE_HANDSHAKE_EVENT(name) \
112 DEFINE_EVENT(handshake_event_class, name, \
113 TP_PROTO( \
114 const struct net *net, \
115 const struct handshake_req *req, \
116 const struct sock *sk \
117 ), \
118 TP_ARGS(net, req, sk))
119
120DECLARE_EVENT_CLASS(handshake_fd_class,
121 TP_PROTO(
122 const struct net *net,
123 const struct handshake_req *req,
124 const struct sock *sk,
125 int fd
126 ),
127 TP_ARGS(net, req, sk, fd),
128 TP_STRUCT__entry(
129 __field(const void *, req)
130 __field(const void *, sk)
131 __field(int, fd)
132 __field(unsigned int, netns_ino)
133 ),
134 TP_fast_assign(
135 __entry->req = req;
136 __entry->sk = req->hr_sk;
137 __entry->fd = fd;
138 __entry->netns_ino = net->ns.inum;
139 ),
140 TP_printk("req=%p sk=%p fd=%d",
141 __entry->req, __entry->sk, __entry->fd
142 )
143);
144#define DEFINE_HANDSHAKE_FD_EVENT(name) \
145 DEFINE_EVENT(handshake_fd_class, name, \
146 TP_PROTO( \
147 const struct net *net, \
148 const struct handshake_req *req, \
149 const struct sock *sk, \
150 int fd \
151 ), \
152 TP_ARGS(net, req, sk, fd))
153
154DECLARE_EVENT_CLASS(handshake_error_class,
155 TP_PROTO(
156 const struct net *net,
157 const struct handshake_req *req,
158 const struct sock *sk,
159 int err
160 ),
161 TP_ARGS(net, req, sk, err),
162 TP_STRUCT__entry(
163 __field(const void *, req)
164 __field(const void *, sk)
165 __field(int, err)
166 __field(unsigned int, netns_ino)
167 ),
168 TP_fast_assign(
169 __entry->req = req;
170 __entry->sk = sk;
171 __entry->err = err;
172 __entry->netns_ino = net->ns.inum;
173 ),
174 TP_printk("req=%p sk=%p err=%d",
175 __entry->req, __entry->sk, __entry->err
176 )
177);
178#define DEFINE_HANDSHAKE_ERROR(name) \
179 DEFINE_EVENT(handshake_error_class, name, \
180 TP_PROTO( \
181 const struct net *net, \
182 const struct handshake_req *req, \
183 const struct sock *sk, \
184 int err \
185 ), \
186 TP_ARGS(net, req, sk, err))
187
188DECLARE_EVENT_CLASS(handshake_alert_class,
189 TP_PROTO(
190 const struct sock *sk,
191 unsigned char level,
192 unsigned char description
193 ),
194 TP_ARGS(sk, level, description),
195 TP_STRUCT__entry(
196 /* sockaddr_in6 is always bigger than sockaddr_in */
197 __array(__u8, saddr, sizeof(struct sockaddr_in6))
198 __array(__u8, daddr, sizeof(struct sockaddr_in6))
199 __field(unsigned int, netns_ino)
200 __field(unsigned long, level)
201 __field(unsigned long, description)
202 ),
203 TP_fast_assign(
204 const struct inet_sock *inet = inet_sk(sk);
205
206 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
207 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
208 TP_STORE_ADDR_PORTS(__entry, inet, sk);
209
210 __entry->netns_ino = sock_net(sk)->ns.inum;
211 __entry->level = level;
212 __entry->description = description;
213 ),
214 TP_printk("src=%pISpc dest=%pISpc %s: %s",
215 __entry->saddr, __entry->daddr,
216 show_tls_alert_level(__entry->level),
217 show_tls_alert_description(__entry->description)
218 )
219);
220#define DEFINE_HANDSHAKE_ALERT(name) \
221 DEFINE_EVENT(handshake_alert_class, name, \
222 TP_PROTO( \
223 const struct sock *sk, \
224 unsigned char level, \
225 unsigned char description \
226 ), \
227 TP_ARGS(sk, level, description))
228
229
230/*
231 * Request lifetime events
232 */
233
234DEFINE_HANDSHAKE_EVENT(handshake_submit);
235DEFINE_HANDSHAKE_ERROR(handshake_submit_err);
236DEFINE_HANDSHAKE_EVENT(handshake_cancel);
237DEFINE_HANDSHAKE_EVENT(handshake_cancel_none);
238DEFINE_HANDSHAKE_EVENT(handshake_cancel_busy);
239DEFINE_HANDSHAKE_EVENT(handshake_destruct);
240
241
242TRACE_EVENT(handshake_complete,
243 TP_PROTO(
244 const struct net *net,
245 const struct handshake_req *req,
246 const struct sock *sk,
247 int status
248 ),
249 TP_ARGS(net, req, sk, status),
250 TP_STRUCT__entry(
251 __field(const void *, req)
252 __field(const void *, sk)
253 __field(int, status)
254 __field(unsigned int, netns_ino)
255 ),
256 TP_fast_assign(
257 __entry->req = req;
258 __entry->sk = sk;
259 __entry->status = status;
260 __entry->netns_ino = net->ns.inum;
261 ),
262 TP_printk("req=%p sk=%p status=%d",
263 __entry->req, __entry->sk, __entry->status
264 )
265);
266
267/*
268 * Netlink events
269 */
270
271DEFINE_HANDSHAKE_ERROR(handshake_notify_err);
272DEFINE_HANDSHAKE_FD_EVENT(handshake_cmd_accept);
273DEFINE_HANDSHAKE_ERROR(handshake_cmd_accept_err);
274DEFINE_HANDSHAKE_FD_EVENT(handshake_cmd_done);
275DEFINE_HANDSHAKE_ERROR(handshake_cmd_done_err);
276
277/*
278 * TLS Record events
279 */
280
281TRACE_EVENT(tls_contenttype,
282 TP_PROTO(
283 const struct sock *sk,
284 unsigned char type
285 ),
286 TP_ARGS(sk, type),
287 TP_STRUCT__entry(
288 /* sockaddr_in6 is always bigger than sockaddr_in */
289 __array(__u8, saddr, sizeof(struct sockaddr_in6))
290 __array(__u8, daddr, sizeof(struct sockaddr_in6))
291 __field(unsigned int, netns_ino)
292 __field(unsigned long, type)
293 ),
294 TP_fast_assign(
295 const struct inet_sock *inet = inet_sk(sk);
296
297 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
298 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
299 TP_STORE_ADDR_PORTS(__entry, inet, sk);
300
301 __entry->netns_ino = sock_net(sk)->ns.inum;
302 __entry->type = type;
303 ),
304 TP_printk("src=%pISpc dest=%pISpc %s",
305 __entry->saddr, __entry->daddr,
306 show_tls_content_type(__entry->type)
307 )
308);
309
310/*
311 * TLS Alert events
312 */
313
314DEFINE_HANDSHAKE_ALERT(tls_alert_send);
315DEFINE_HANDSHAKE_ALERT(tls_alert_recv);
316
317#endif /* _TRACE_HANDSHAKE_H */
318
319#include <trace/define_trace.h>
320

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of linux/include/trace/events/handshake.h