xref: /openbmc/linux/include/trace/events/rpcgss.h (revision 25b892b5)
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(RPC_GSS_SVC_NONE);
21 TRACE_DEFINE_ENUM(RPC_GSS_SVC_INTEGRITY);
22 TRACE_DEFINE_ENUM(RPC_GSS_SVC_PRIVACY);
23 
24 #define show_gss_service(x)						\
25 	__print_symbolic(x,						\
26 		{ RPC_GSS_SVC_NONE,		"none" },		\
27 		{ RPC_GSS_SVC_INTEGRITY,	"integrity" },		\
28 		{ RPC_GSS_SVC_PRIVACY,		"privacy" })
29 
30 TRACE_DEFINE_ENUM(GSS_S_BAD_MECH);
31 TRACE_DEFINE_ENUM(GSS_S_BAD_NAME);
32 TRACE_DEFINE_ENUM(GSS_S_BAD_NAMETYPE);
33 TRACE_DEFINE_ENUM(GSS_S_BAD_BINDINGS);
34 TRACE_DEFINE_ENUM(GSS_S_BAD_STATUS);
35 TRACE_DEFINE_ENUM(GSS_S_BAD_SIG);
36 TRACE_DEFINE_ENUM(GSS_S_NO_CRED);
37 TRACE_DEFINE_ENUM(GSS_S_NO_CONTEXT);
38 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_TOKEN);
39 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_CREDENTIAL);
40 TRACE_DEFINE_ENUM(GSS_S_CREDENTIALS_EXPIRED);
41 TRACE_DEFINE_ENUM(GSS_S_CONTEXT_EXPIRED);
42 TRACE_DEFINE_ENUM(GSS_S_FAILURE);
43 TRACE_DEFINE_ENUM(GSS_S_BAD_QOP);
44 TRACE_DEFINE_ENUM(GSS_S_UNAUTHORIZED);
45 TRACE_DEFINE_ENUM(GSS_S_UNAVAILABLE);
46 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_ELEMENT);
47 TRACE_DEFINE_ENUM(GSS_S_NAME_NOT_MN);
48 TRACE_DEFINE_ENUM(GSS_S_CONTINUE_NEEDED);
49 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_TOKEN);
50 TRACE_DEFINE_ENUM(GSS_S_OLD_TOKEN);
51 TRACE_DEFINE_ENUM(GSS_S_UNSEQ_TOKEN);
52 TRACE_DEFINE_ENUM(GSS_S_GAP_TOKEN);
53 
54 #define show_gss_status(x)						\
55 	__print_flags(x, "|",						\
56 		{ GSS_S_BAD_MECH, "GSS_S_BAD_MECH" },			\
57 		{ GSS_S_BAD_NAME, "GSS_S_BAD_NAME" },			\
58 		{ GSS_S_BAD_NAMETYPE, "GSS_S_BAD_NAMETYPE" },		\
59 		{ GSS_S_BAD_BINDINGS, "GSS_S_BAD_BINDINGS" },		\
60 		{ GSS_S_BAD_STATUS, "GSS_S_BAD_STATUS" },		\
61 		{ GSS_S_BAD_SIG, "GSS_S_BAD_SIG" },			\
62 		{ GSS_S_NO_CRED, "GSS_S_NO_CRED" },			\
63 		{ GSS_S_NO_CONTEXT, "GSS_S_NO_CONTEXT" },		\
64 		{ GSS_S_DEFECTIVE_TOKEN, "GSS_S_DEFECTIVE_TOKEN" },	\
65 		{ GSS_S_DEFECTIVE_CREDENTIAL, "GSS_S_DEFECTIVE_CREDENTIAL" }, \
66 		{ GSS_S_CREDENTIALS_EXPIRED, "GSS_S_CREDENTIALS_EXPIRED" }, \
67 		{ GSS_S_CONTEXT_EXPIRED, "GSS_S_CONTEXT_EXPIRED" },	\
68 		{ GSS_S_FAILURE, "GSS_S_FAILURE" },			\
69 		{ GSS_S_BAD_QOP, "GSS_S_BAD_QOP" },			\
70 		{ GSS_S_UNAUTHORIZED, "GSS_S_UNAUTHORIZED" },		\
71 		{ GSS_S_UNAVAILABLE, "GSS_S_UNAVAILABLE" },		\
72 		{ GSS_S_DUPLICATE_ELEMENT, "GSS_S_DUPLICATE_ELEMENT" },	\
73 		{ GSS_S_NAME_NOT_MN, "GSS_S_NAME_NOT_MN" },		\
74 		{ GSS_S_CONTINUE_NEEDED, "GSS_S_CONTINUE_NEEDED" },	\
75 		{ GSS_S_DUPLICATE_TOKEN, "GSS_S_DUPLICATE_TOKEN" },	\
76 		{ GSS_S_OLD_TOKEN, "GSS_S_OLD_TOKEN" },			\
77 		{ GSS_S_UNSEQ_TOKEN, "GSS_S_UNSEQ_TOKEN" },		\
78 		{ GSS_S_GAP_TOKEN, "GSS_S_GAP_TOKEN" })
79 
80 
81 DECLARE_EVENT_CLASS(rpcgss_gssapi_event,
82 	TP_PROTO(
83 		const struct rpc_task *task,
84 		u32 maj_stat
85 	),
86 
87 	TP_ARGS(task, maj_stat),
88 
89 	TP_STRUCT__entry(
90 		__field(unsigned int, task_id)
91 		__field(unsigned int, client_id)
92 		__field(u32, maj_stat)
93 
94 	),
95 
96 	TP_fast_assign(
97 		__entry->task_id = task->tk_pid;
98 		__entry->client_id = task->tk_client->cl_clid;
99 		__entry->maj_stat = maj_stat;
100 	),
101 
102 	TP_printk("task:%u@%u maj_stat=%s",
103 		__entry->task_id, __entry->client_id,
104 		__entry->maj_stat == 0 ?
105 		"GSS_S_COMPLETE" : show_gss_status(__entry->maj_stat))
106 );
107 
108 #define DEFINE_GSSAPI_EVENT(name)					\
109 	DEFINE_EVENT(rpcgss_gssapi_event, rpcgss_##name,		\
110 			TP_PROTO(					\
111 				const struct rpc_task *task,		\
112 				u32 maj_stat				\
113 			),						\
114 			TP_ARGS(task, maj_stat))
115 
116 TRACE_EVENT(rpcgss_import_ctx,
117 	TP_PROTO(
118 		int status
119 	),
120 
121 	TP_ARGS(status),
122 
123 	TP_STRUCT__entry(
124 		__field(int, status)
125 	),
126 
127 	TP_fast_assign(
128 		__entry->status = status;
129 	),
130 
131 	TP_printk("status=%d", __entry->status)
132 );
133 
134 DEFINE_GSSAPI_EVENT(get_mic);
135 DEFINE_GSSAPI_EVENT(verify_mic);
136 DEFINE_GSSAPI_EVENT(wrap);
137 DEFINE_GSSAPI_EVENT(unwrap);
138 
139 DECLARE_EVENT_CLASS(rpcgss_ctx_class,
140 	TP_PROTO(
141 		const struct gss_cred *gc
142 	),
143 
144 	TP_ARGS(gc),
145 
146 	TP_STRUCT__entry(
147 		__field(const void *, cred)
148 		__field(unsigned long, service)
149 		__string(principal, gc->gc_principal)
150 	),
151 
152 	TP_fast_assign(
153 		__entry->cred = gc;
154 		__entry->service = gc->gc_service;
155 		__assign_str(principal, gc->gc_principal);
156 	),
157 
158 	TP_printk("cred=%p service=%s principal='%s'",
159 		__entry->cred, show_gss_service(__entry->service),
160 		__get_str(principal))
161 );
162 
163 #define DEFINE_CTX_EVENT(name)						\
164 	DEFINE_EVENT(rpcgss_ctx_class, rpcgss_ctx_##name,		\
165 			TP_PROTO(					\
166 				const struct gss_cred *gc		\
167 			),						\
168 			TP_ARGS(gc))
169 
170 DEFINE_CTX_EVENT(init);
171 DEFINE_CTX_EVENT(destroy);
172 
173 DECLARE_EVENT_CLASS(rpcgss_svc_gssapi_class,
174 	TP_PROTO(
175 		const struct svc_rqst *rqstp,
176 		u32 maj_stat
177 	),
178 
179 	TP_ARGS(rqstp, maj_stat),
180 
181 	TP_STRUCT__entry(
182 		__field(u32, xid)
183 		__field(u32, maj_stat)
184 		__string(addr, rqstp->rq_xprt->xpt_remotebuf)
185 	),
186 
187 	TP_fast_assign(
188 		__entry->xid = __be32_to_cpu(rqstp->rq_xid);
189 		__entry->maj_stat = maj_stat;
190 		__assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
191 	),
192 
193 	TP_printk("addr=%s xid=0x%08x maj_stat=%s",
194 		__get_str(addr), __entry->xid,
195 		__entry->maj_stat == 0 ?
196 		"GSS_S_COMPLETE" : show_gss_status(__entry->maj_stat))
197 );
198 
199 #define DEFINE_SVC_GSSAPI_EVENT(name)					\
200 	DEFINE_EVENT(rpcgss_svc_gssapi_class, rpcgss_svc_##name,	\
201 			TP_PROTO(					\
202 				const struct svc_rqst *rqstp,		\
203 				u32 maj_stat				\
204 			),						\
205 			TP_ARGS(rqstp, maj_stat))
206 
207 DEFINE_SVC_GSSAPI_EVENT(unwrap);
208 DEFINE_SVC_GSSAPI_EVENT(mic);
209 
210 TRACE_EVENT(rpcgss_svc_unwrap_failed,
211 	TP_PROTO(
212 		const struct svc_rqst *rqstp
213 	),
214 
215 	TP_ARGS(rqstp),
216 
217 	TP_STRUCT__entry(
218 		__field(u32, xid)
219 		__string(addr, rqstp->rq_xprt->xpt_remotebuf)
220 	),
221 
222 	TP_fast_assign(
223 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
224 		__assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
225 	),
226 
227 	TP_printk("addr=%s xid=0x%08x", __get_str(addr), __entry->xid)
228 );
229 
230 TRACE_EVENT(rpcgss_svc_seqno_bad,
231 	TP_PROTO(
232 		const struct svc_rqst *rqstp,
233 		u32 expected,
234 		u32 received
235 	),
236 
237 	TP_ARGS(rqstp, expected, received),
238 
239 	TP_STRUCT__entry(
240 		__field(u32, expected)
241 		__field(u32, received)
242 		__field(u32, xid)
243 		__string(addr, rqstp->rq_xprt->xpt_remotebuf)
244 	),
245 
246 	TP_fast_assign(
247 		__entry->expected = expected;
248 		__entry->received = received;
249 		__entry->xid = __be32_to_cpu(rqstp->rq_xid);
250 		__assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
251 	),
252 
253 	TP_printk("addr=%s xid=0x%08x expected seqno %u, received seqno %u",
254 		__get_str(addr), __entry->xid,
255 		__entry->expected, __entry->received)
256 );
257 
258 TRACE_EVENT(rpcgss_svc_accept_upcall,
259 	TP_PROTO(
260 		const struct svc_rqst *rqstp,
261 		u32 major_status,
262 		u32 minor_status
263 	),
264 
265 	TP_ARGS(rqstp, major_status, minor_status),
266 
267 	TP_STRUCT__entry(
268 		__field(u32, minor_status)
269 		__field(unsigned long, major_status)
270 		__field(u32, xid)
271 		__string(addr, rqstp->rq_xprt->xpt_remotebuf)
272 	),
273 
274 	TP_fast_assign(
275 		__entry->minor_status = minor_status;
276 		__entry->major_status = major_status;
277 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
278 		__assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
279 	),
280 
281 	TP_printk("addr=%s xid=0x%08x major_status=%s (0x%08lx) minor_status=%u",
282 		__get_str(addr), __entry->xid,
283 		(__entry->major_status == 0) ? "GSS_S_COMPLETE" :
284 			show_gss_status(__entry->major_status),
285 		__entry->major_status, __entry->minor_status
286 	)
287 );
288 
289 TRACE_EVENT(rpcgss_svc_authenticate,
290 	TP_PROTO(
291 		const struct svc_rqst *rqstp,
292 		const struct rpc_gss_wire_cred *gc
293 	),
294 
295 	TP_ARGS(rqstp, gc),
296 
297 	TP_STRUCT__entry(
298 		__field(u32, seqno)
299 		__field(u32, xid)
300 		__string(addr, rqstp->rq_xprt->xpt_remotebuf)
301 	),
302 
303 	TP_fast_assign(
304 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
305 		__entry->seqno = gc->gc_seq;
306 		__assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
307 	),
308 
309 	TP_printk("addr=%s xid=0x%08x seqno=%u", __get_str(addr),
310 		__entry->xid, __entry->seqno)
311 );
312 
313 
314 /**
315  ** GSS auth unwrap failures
316  **/
317 
318 TRACE_EVENT(rpcgss_unwrap_failed,
319 	TP_PROTO(
320 		const struct rpc_task *task
321 	),
322 
323 	TP_ARGS(task),
324 
325 	TP_STRUCT__entry(
326 		__field(unsigned int, task_id)
327 		__field(unsigned int, client_id)
328 	),
329 
330 	TP_fast_assign(
331 		__entry->task_id = task->tk_pid;
332 		__entry->client_id = task->tk_client->cl_clid;
333 	),
334 
335 	TP_printk("task:%u@%u", __entry->task_id, __entry->client_id)
336 );
337 
338 TRACE_EVENT(rpcgss_bad_seqno,
339 	TP_PROTO(
340 		const struct rpc_task *task,
341 		u32 expected,
342 		u32 received
343 	),
344 
345 	TP_ARGS(task, expected, received),
346 
347 	TP_STRUCT__entry(
348 		__field(unsigned int, task_id)
349 		__field(unsigned int, client_id)
350 		__field(u32, expected)
351 		__field(u32, received)
352 	),
353 
354 	TP_fast_assign(
355 		__entry->task_id = task->tk_pid;
356 		__entry->client_id = task->tk_client->cl_clid;
357 		__entry->expected = expected;
358 		__entry->received = received;
359 	),
360 
361 	TP_printk("task:%u@%u expected seqno %u, received seqno %u",
362 		__entry->task_id, __entry->client_id,
363 		__entry->expected, __entry->received)
364 );
365 
366 TRACE_EVENT(rpcgss_seqno,
367 	TP_PROTO(
368 		const struct rpc_task *task
369 	),
370 
371 	TP_ARGS(task),
372 
373 	TP_STRUCT__entry(
374 		__field(unsigned int, task_id)
375 		__field(unsigned int, client_id)
376 		__field(u32, xid)
377 		__field(u32, seqno)
378 	),
379 
380 	TP_fast_assign(
381 		const struct rpc_rqst *rqst = task->tk_rqstp;
382 
383 		__entry->task_id = task->tk_pid;
384 		__entry->client_id = task->tk_client->cl_clid;
385 		__entry->xid = be32_to_cpu(rqst->rq_xid);
386 		__entry->seqno = rqst->rq_seqno;
387 	),
388 
389 	TP_printk("task:%u@%u xid=0x%08x seqno=%u",
390 		__entry->task_id, __entry->client_id,
391 		__entry->xid, __entry->seqno)
392 );
393 
394 TRACE_EVENT(rpcgss_need_reencode,
395 	TP_PROTO(
396 		const struct rpc_task *task,
397 		u32 seq_xmit,
398 		bool ret
399 	),
400 
401 	TP_ARGS(task, seq_xmit, ret),
402 
403 	TP_STRUCT__entry(
404 		__field(unsigned int, task_id)
405 		__field(unsigned int, client_id)
406 		__field(u32, xid)
407 		__field(u32, seq_xmit)
408 		__field(u32, seqno)
409 		__field(bool, ret)
410 	),
411 
412 	TP_fast_assign(
413 		__entry->task_id = task->tk_pid;
414 		__entry->client_id = task->tk_client->cl_clid;
415 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
416 		__entry->seq_xmit = seq_xmit;
417 		__entry->seqno = task->tk_rqstp->rq_seqno;
418 		__entry->ret = ret;
419 	),
420 
421 	TP_printk("task:%u@%u xid=0x%08x rq_seqno=%u seq_xmit=%u reencode %sneeded",
422 		__entry->task_id, __entry->client_id,
423 		__entry->xid, __entry->seqno, __entry->seq_xmit,
424 		__entry->ret ? "" : "un")
425 );
426 
427 TRACE_EVENT(rpcgss_update_slack,
428 	TP_PROTO(
429 		const struct rpc_task *task,
430 		const struct rpc_auth *auth
431 	),
432 
433 	TP_ARGS(task, auth),
434 
435 	TP_STRUCT__entry(
436 		__field(unsigned int, task_id)
437 		__field(unsigned int, client_id)
438 		__field(u32, xid)
439 		__field(const void *, auth)
440 		__field(unsigned int, rslack)
441 		__field(unsigned int, ralign)
442 		__field(unsigned int, verfsize)
443 	),
444 
445 	TP_fast_assign(
446 		__entry->task_id = task->tk_pid;
447 		__entry->client_id = task->tk_client->cl_clid;
448 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
449 		__entry->auth = auth;
450 		__entry->rslack = auth->au_rslack;
451 		__entry->ralign = auth->au_ralign;
452 		__entry->verfsize = auth->au_verfsize;
453 	),
454 
455 	TP_printk("task:%u@%u xid=0x%08x auth=%p rslack=%u ralign=%u verfsize=%u\n",
456 		__entry->task_id, __entry->client_id, __entry->xid,
457 		__entry->auth, __entry->rslack, __entry->ralign,
458 		__entry->verfsize)
459 );
460 
461 DECLARE_EVENT_CLASS(rpcgss_svc_seqno_class,
462 	TP_PROTO(
463 		const struct svc_rqst *rqstp,
464 		u32 seqno
465 	),
466 
467 	TP_ARGS(rqstp, seqno),
468 
469 	TP_STRUCT__entry(
470 		__field(u32, xid)
471 		__field(u32, seqno)
472 	),
473 
474 	TP_fast_assign(
475 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
476 		__entry->seqno = seqno;
477 	),
478 
479 	TP_printk("xid=0x%08x seqno=%u",
480 		__entry->xid, __entry->seqno)
481 );
482 
483 #define DEFINE_SVC_SEQNO_EVENT(name)					\
484 	DEFINE_EVENT(rpcgss_svc_seqno_class, rpcgss_svc_seqno_##name,	\
485 			TP_PROTO(					\
486 				const struct svc_rqst *rqstp,		\
487 				u32 seqno				\
488 			),						\
489 			TP_ARGS(rqstp, seqno))
490 
491 DEFINE_SVC_SEQNO_EVENT(large);
492 DEFINE_SVC_SEQNO_EVENT(seen);
493 
494 TRACE_EVENT(rpcgss_svc_seqno_low,
495 	TP_PROTO(
496 		const struct svc_rqst *rqstp,
497 		u32 seqno,
498 		u32 min,
499 		u32 max
500 	),
501 
502 	TP_ARGS(rqstp, seqno, min, max),
503 
504 	TP_STRUCT__entry(
505 		__field(u32, xid)
506 		__field(u32, seqno)
507 		__field(u32, min)
508 		__field(u32, max)
509 	),
510 
511 	TP_fast_assign(
512 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
513 		__entry->seqno = seqno;
514 		__entry->min = min;
515 		__entry->max = max;
516 	),
517 
518 	TP_printk("xid=0x%08x seqno=%u window=[%u..%u]",
519 		__entry->xid, __entry->seqno, __entry->min, __entry->max)
520 );
521 
522 /**
523  ** gssd upcall related trace events
524  **/
525 
526 TRACE_EVENT(rpcgss_upcall_msg,
527 	TP_PROTO(
528 		const char *buf
529 	),
530 
531 	TP_ARGS(buf),
532 
533 	TP_STRUCT__entry(
534 		__string(msg, buf)
535 	),
536 
537 	TP_fast_assign(
538 		__assign_str(msg, buf);
539 	),
540 
541 	TP_printk("msg='%s'", __get_str(msg))
542 );
543 
544 TRACE_EVENT(rpcgss_upcall_result,
545 	TP_PROTO(
546 		u32 uid,
547 		int result
548 	),
549 
550 	TP_ARGS(uid, result),
551 
552 	TP_STRUCT__entry(
553 		__field(u32, uid)
554 		__field(int, result)
555 
556 	),
557 
558 	TP_fast_assign(
559 		__entry->uid = uid;
560 		__entry->result = result;
561 	),
562 
563 	TP_printk("for uid %u, result=%d", __entry->uid, __entry->result)
564 );
565 
566 TRACE_EVENT(rpcgss_context,
567 	TP_PROTO(
568 		u32 window_size,
569 		unsigned long expiry,
570 		unsigned long now,
571 		unsigned int timeout,
572 		unsigned int len,
573 		const u8 *data
574 	),
575 
576 	TP_ARGS(window_size, expiry, now, timeout, len, data),
577 
578 	TP_STRUCT__entry(
579 		__field(unsigned long, expiry)
580 		__field(unsigned long, now)
581 		__field(unsigned int, timeout)
582 		__field(u32, window_size)
583 		__field(int, len)
584 		__string(acceptor, data)
585 	),
586 
587 	TP_fast_assign(
588 		__entry->expiry = expiry;
589 		__entry->now = now;
590 		__entry->timeout = timeout;
591 		__entry->window_size = window_size;
592 		__entry->len = len;
593 		strncpy(__get_str(acceptor), data, len);
594 	),
595 
596 	TP_printk("win_size=%u expiry=%lu now=%lu timeout=%u acceptor=%.*s",
597 		__entry->window_size, __entry->expiry, __entry->now,
598 		__entry->timeout, __entry->len, __get_str(acceptor))
599 );
600 
601 
602 /**
603  ** Miscellaneous events
604  */
605 
606 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
607 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
608 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
609 
610 #define show_pseudoflavor(x)						\
611 	__print_symbolic(x,						\
612 		{ RPC_AUTH_GSS_KRB5, "RPC_AUTH_GSS_KRB5" },		\
613 		{ RPC_AUTH_GSS_KRB5I, "RPC_AUTH_GSS_KRB5I" },		\
614 		{ RPC_AUTH_GSS_KRB5P, "RPC_AUTH_GSS_KRB5P" })
615 
616 
617 TRACE_EVENT(rpcgss_createauth,
618 	TP_PROTO(
619 		unsigned int flavor,
620 		int error
621 	),
622 
623 	TP_ARGS(flavor, error),
624 
625 	TP_STRUCT__entry(
626 		__field(unsigned int, flavor)
627 		__field(int, error)
628 
629 	),
630 
631 	TP_fast_assign(
632 		__entry->flavor = flavor;
633 		__entry->error = error;
634 	),
635 
636 	TP_printk("flavor=%s error=%d",
637 		show_pseudoflavor(__entry->flavor), __entry->error)
638 );
639 
640 TRACE_EVENT(rpcgss_oid_to_mech,
641 	TP_PROTO(
642 		const char *oid
643 	),
644 
645 	TP_ARGS(oid),
646 
647 	TP_STRUCT__entry(
648 		__string(oid, oid)
649 	),
650 
651 	TP_fast_assign(
652 		__assign_str(oid, oid);
653 	),
654 
655 	TP_printk("mech for oid %s was not found", __get_str(oid))
656 );
657 
658 #endif	/* _TRACE_RPCGSS_H */
659 
660 #include <trace/define_trace.h>
661