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