Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / include / trace / events / rpcgss.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2018 Oracle.  All rights reserved.
4  *
5  * Trace point definitions for the "rpcgss" subsystem.
6  */
7
8 #undef TRACE_SYSTEM
9 #define TRACE_SYSTEM rpcgss
10
11 #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
12 #define _TRACE_RPCGSS_H
13
14 #include <linux/tracepoint.h>
15
16 /**
17  ** GSS-API related trace events
18  **/
19
20 TRACE_DEFINE_ENUM(GSS_S_BAD_MECH);
21 TRACE_DEFINE_ENUM(GSS_S_BAD_NAME);
22 TRACE_DEFINE_ENUM(GSS_S_BAD_NAMETYPE);
23 TRACE_DEFINE_ENUM(GSS_S_BAD_BINDINGS);
24 TRACE_DEFINE_ENUM(GSS_S_BAD_STATUS);
25 TRACE_DEFINE_ENUM(GSS_S_BAD_SIG);
26 TRACE_DEFINE_ENUM(GSS_S_NO_CRED);
27 TRACE_DEFINE_ENUM(GSS_S_NO_CONTEXT);
28 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_TOKEN);
29 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_CREDENTIAL);
30 TRACE_DEFINE_ENUM(GSS_S_CREDENTIALS_EXPIRED);
31 TRACE_DEFINE_ENUM(GSS_S_CONTEXT_EXPIRED);
32 TRACE_DEFINE_ENUM(GSS_S_FAILURE);
33 TRACE_DEFINE_ENUM(GSS_S_BAD_QOP);
34 TRACE_DEFINE_ENUM(GSS_S_UNAUTHORIZED);
35 TRACE_DEFINE_ENUM(GSS_S_UNAVAILABLE);
36 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_ELEMENT);
37 TRACE_DEFINE_ENUM(GSS_S_NAME_NOT_MN);
38 TRACE_DEFINE_ENUM(GSS_S_CONTINUE_NEEDED);
39 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_TOKEN);
40 TRACE_DEFINE_ENUM(GSS_S_OLD_TOKEN);
41 TRACE_DEFINE_ENUM(GSS_S_UNSEQ_TOKEN);
42 TRACE_DEFINE_ENUM(GSS_S_GAP_TOKEN);
43
44 #define show_gss_status(x)                                              \
45         __print_flags(x, "|",                                           \
46                 { GSS_S_BAD_MECH, "GSS_S_BAD_MECH" },                   \
47                 { GSS_S_BAD_NAME, "GSS_S_BAD_NAME" },                   \
48                 { GSS_S_BAD_NAMETYPE, "GSS_S_BAD_NAMETYPE" },           \
49                 { GSS_S_BAD_BINDINGS, "GSS_S_BAD_BINDINGS" },           \
50                 { GSS_S_BAD_STATUS, "GSS_S_BAD_STATUS" },               \
51                 { GSS_S_BAD_SIG, "GSS_S_BAD_SIG" },                     \
52                 { GSS_S_NO_CRED, "GSS_S_NO_CRED" },                     \
53                 { GSS_S_NO_CONTEXT, "GSS_S_NO_CONTEXT" },               \
54                 { GSS_S_DEFECTIVE_TOKEN, "GSS_S_DEFECTIVE_TOKEN" },     \
55                 { GSS_S_DEFECTIVE_CREDENTIAL, "GSS_S_DEFECTIVE_CREDENTIAL" }, \
56                 { GSS_S_CREDENTIALS_EXPIRED, "GSS_S_CREDENTIALS_EXPIRED" }, \
57                 { GSS_S_CONTEXT_EXPIRED, "GSS_S_CONTEXT_EXPIRED" },     \
58                 { GSS_S_FAILURE, "GSS_S_FAILURE" },                     \
59                 { GSS_S_BAD_QOP, "GSS_S_BAD_QOP" },                     \
60                 { GSS_S_UNAUTHORIZED, "GSS_S_UNAUTHORIZED" },           \
61                 { GSS_S_UNAVAILABLE, "GSS_S_UNAVAILABLE" },             \
62                 { GSS_S_DUPLICATE_ELEMENT, "GSS_S_DUPLICATE_ELEMENT" }, \
63                 { GSS_S_NAME_NOT_MN, "GSS_S_NAME_NOT_MN" },             \
64                 { GSS_S_CONTINUE_NEEDED, "GSS_S_CONTINUE_NEEDED" },     \
65                 { GSS_S_DUPLICATE_TOKEN, "GSS_S_DUPLICATE_TOKEN" },     \
66                 { GSS_S_OLD_TOKEN, "GSS_S_OLD_TOKEN" },                 \
67                 { GSS_S_UNSEQ_TOKEN, "GSS_S_UNSEQ_TOKEN" },             \
68                 { GSS_S_GAP_TOKEN, "GSS_S_GAP_TOKEN" })
69
70
71 DECLARE_EVENT_CLASS(rpcgss_gssapi_event,
72         TP_PROTO(
73                 const struct rpc_task *task,
74                 u32 maj_stat
75         ),
76
77         TP_ARGS(task, maj_stat),
78
79         TP_STRUCT__entry(
80                 __field(unsigned int, task_id)
81                 __field(unsigned int, client_id)
82                 __field(u32, maj_stat)
83
84         ),
85
86         TP_fast_assign(
87                 __entry->task_id = task->tk_pid;
88                 __entry->client_id = task->tk_client->cl_clid;
89                 __entry->maj_stat = maj_stat;
90         ),
91
92         TP_printk("task:%u@%u maj_stat=%s",
93                 __entry->task_id, __entry->client_id,
94                 __entry->maj_stat == 0 ?
95                 "GSS_S_COMPLETE" : show_gss_status(__entry->maj_stat))
96 );
97
98 #define DEFINE_GSSAPI_EVENT(name)                                       \
99         DEFINE_EVENT(rpcgss_gssapi_event, rpcgss_##name,                \
100                         TP_PROTO(                                       \
101                                 const struct rpc_task *task,            \
102                                 u32 maj_stat                            \
103                         ),                                              \
104                         TP_ARGS(task, maj_stat))
105
106 TRACE_EVENT(rpcgss_import_ctx,
107         TP_PROTO(
108                 int status
109         ),
110
111         TP_ARGS(status),
112
113         TP_STRUCT__entry(
114                 __field(int, status)
115         ),
116
117         TP_fast_assign(
118                 __entry->status = status;
119         ),
120
121         TP_printk("status=%d", __entry->status)
122 );
123
124 DEFINE_GSSAPI_EVENT(get_mic);
125 DEFINE_GSSAPI_EVENT(verify_mic);
126 DEFINE_GSSAPI_EVENT(wrap);
127 DEFINE_GSSAPI_EVENT(unwrap);
128
129
130 /**
131  ** GSS auth unwrap failures
132  **/
133
134 TRACE_EVENT(rpcgss_unwrap_failed,
135         TP_PROTO(
136                 const struct rpc_task *task
137         ),
138
139         TP_ARGS(task),
140
141         TP_STRUCT__entry(
142                 __field(unsigned int, task_id)
143                 __field(unsigned int, client_id)
144         ),
145
146         TP_fast_assign(
147                 __entry->task_id = task->tk_pid;
148                 __entry->client_id = task->tk_client->cl_clid;
149         ),
150
151         TP_printk("task:%u@%u", __entry->task_id, __entry->client_id)
152 );
153
154 TRACE_EVENT(rpcgss_bad_seqno,
155         TP_PROTO(
156                 const struct rpc_task *task,
157                 u32 expected,
158                 u32 received
159         ),
160
161         TP_ARGS(task, expected, received),
162
163         TP_STRUCT__entry(
164                 __field(unsigned int, task_id)
165                 __field(unsigned int, client_id)
166                 __field(u32, expected)
167                 __field(u32, received)
168         ),
169
170         TP_fast_assign(
171                 __entry->task_id = task->tk_pid;
172                 __entry->client_id = task->tk_client->cl_clid;
173                 __entry->expected = expected;
174                 __entry->received = received;
175         ),
176
177         TP_printk("task:%u@%u expected seqno %u, received seqno %u",
178                 __entry->task_id, __entry->client_id,
179                 __entry->expected, __entry->received)
180 );
181
182 TRACE_EVENT(rpcgss_seqno,
183         TP_PROTO(
184                 const struct rpc_task *task
185         ),
186
187         TP_ARGS(task),
188
189         TP_STRUCT__entry(
190                 __field(unsigned int, task_id)
191                 __field(unsigned int, client_id)
192                 __field(u32, xid)
193                 __field(u32, seqno)
194         ),
195
196         TP_fast_assign(
197                 const struct rpc_rqst *rqst = task->tk_rqstp;
198
199                 __entry->task_id = task->tk_pid;
200                 __entry->client_id = task->tk_client->cl_clid;
201                 __entry->xid = be32_to_cpu(rqst->rq_xid);
202                 __entry->seqno = rqst->rq_seqno;
203         ),
204
205         TP_printk("task:%u@%u xid=0x%08x seqno=%u",
206                 __entry->task_id, __entry->client_id,
207                 __entry->xid, __entry->seqno)
208 );
209
210 TRACE_EVENT(rpcgss_need_reencode,
211         TP_PROTO(
212                 const struct rpc_task *task,
213                 u32 seq_xmit,
214                 bool ret
215         ),
216
217         TP_ARGS(task, seq_xmit, ret),
218
219         TP_STRUCT__entry(
220                 __field(unsigned int, task_id)
221                 __field(unsigned int, client_id)
222                 __field(u32, xid)
223                 __field(u32, seq_xmit)
224                 __field(u32, seqno)
225                 __field(bool, ret)
226         ),
227
228         TP_fast_assign(
229                 __entry->task_id = task->tk_pid;
230                 __entry->client_id = task->tk_client->cl_clid;
231                 __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
232                 __entry->seq_xmit = seq_xmit;
233                 __entry->seqno = task->tk_rqstp->rq_seqno;
234                 __entry->ret = ret;
235         ),
236
237         TP_printk("task:%u@%u xid=0x%08x rq_seqno=%u seq_xmit=%u reencode %sneeded",
238                 __entry->task_id, __entry->client_id,
239                 __entry->xid, __entry->seqno, __entry->seq_xmit,
240                 __entry->ret ? "" : "un")
241 );
242
243 /**
244  ** gssd upcall related trace events
245  **/
246
247 TRACE_EVENT(rpcgss_upcall_msg,
248         TP_PROTO(
249                 const char *buf
250         ),
251
252         TP_ARGS(buf),
253
254         TP_STRUCT__entry(
255                 __string(msg, buf)
256         ),
257
258         TP_fast_assign(
259                 __assign_str(msg, buf)
260         ),
261
262         TP_printk("msg='%s'", __get_str(msg))
263 );
264
265 TRACE_EVENT(rpcgss_upcall_result,
266         TP_PROTO(
267                 u32 uid,
268                 int result
269         ),
270
271         TP_ARGS(uid, result),
272
273         TP_STRUCT__entry(
274                 __field(u32, uid)
275                 __field(int, result)
276
277         ),
278
279         TP_fast_assign(
280                 __entry->uid = uid;
281                 __entry->result = result;
282         ),
283
284         TP_printk("for uid %u, result=%d", __entry->uid, __entry->result)
285 );
286
287 TRACE_EVENT(rpcgss_context,
288         TP_PROTO(
289                 unsigned long expiry,
290                 unsigned long now,
291                 unsigned int timeout,
292                 unsigned int len,
293                 const u8 *data
294         ),
295
296         TP_ARGS(expiry, now, timeout, len, data),
297
298         TP_STRUCT__entry(
299                 __field(unsigned long, expiry)
300                 __field(unsigned long, now)
301                 __field(unsigned int, timeout)
302                 __field(int, len)
303                 __string(acceptor, data)
304         ),
305
306         TP_fast_assign(
307                 __entry->expiry = expiry;
308                 __entry->now = now;
309                 __entry->timeout = timeout;
310                 __entry->len = len;
311                 strncpy(__get_str(acceptor), data, len);
312         ),
313
314         TP_printk("gc_expiry=%lu now=%lu timeout=%u acceptor=%.*s",
315                 __entry->expiry, __entry->now, __entry->timeout,
316                 __entry->len, __get_str(acceptor))
317 );
318
319
320 /**
321  ** Miscellaneous events
322  */
323
324 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
325 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
326 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
327
328 #define show_pseudoflavor(x)                                            \
329         __print_symbolic(x,                                             \
330                 { RPC_AUTH_GSS_KRB5, "RPC_AUTH_GSS_KRB5" },             \
331                 { RPC_AUTH_GSS_KRB5I, "RPC_AUTH_GSS_KRB5I" },           \
332                 { RPC_AUTH_GSS_KRB5P, "RPC_AUTH_GSS_KRB5P" })
333
334
335 TRACE_EVENT(rpcgss_createauth,
336         TP_PROTO(
337                 unsigned int flavor,
338                 int error
339         ),
340
341         TP_ARGS(flavor, error),
342
343         TP_STRUCT__entry(
344                 __field(unsigned int, flavor)
345                 __field(int, error)
346
347         ),
348
349         TP_fast_assign(
350                 __entry->flavor = flavor;
351                 __entry->error = error;
352         ),
353
354         TP_printk("flavor=%s error=%d",
355                 show_pseudoflavor(__entry->flavor), __entry->error)
356 );
357
358
359 #endif  /* _TRACE_RPCGSS_H */
360
361 #include <trace/define_trace.h>