Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Copyright (c) 2018 Oracle.  All rights reserved.
0004  *
0005  * Trace point definitions for the "rpcgss" subsystem.
0006  */
0007 
0008 #undef TRACE_SYSTEM
0009 #define TRACE_SYSTEM rpcgss
0010 
0011 #if !defined(_TRACE_RPCGSS_H) || defined(TRACE_HEADER_MULTI_READ)
0012 #define _TRACE_RPCGSS_H
0013 
0014 #include <linux/tracepoint.h>
0015 
0016 #include <trace/events/sunrpc_base.h>
0017 
0018 /**
0019  ** GSS-API related trace events
0020  **/
0021 
0022 TRACE_DEFINE_ENUM(RPC_GSS_SVC_NONE);
0023 TRACE_DEFINE_ENUM(RPC_GSS_SVC_INTEGRITY);
0024 TRACE_DEFINE_ENUM(RPC_GSS_SVC_PRIVACY);
0025 
0026 #define show_gss_service(x)                     \
0027     __print_symbolic(x,                     \
0028         { RPC_GSS_SVC_NONE,     "none" },       \
0029         { RPC_GSS_SVC_INTEGRITY,    "integrity" },      \
0030         { RPC_GSS_SVC_PRIVACY,      "privacy" })
0031 
0032 TRACE_DEFINE_ENUM(GSS_S_BAD_MECH);
0033 TRACE_DEFINE_ENUM(GSS_S_BAD_NAME);
0034 TRACE_DEFINE_ENUM(GSS_S_BAD_NAMETYPE);
0035 TRACE_DEFINE_ENUM(GSS_S_BAD_BINDINGS);
0036 TRACE_DEFINE_ENUM(GSS_S_BAD_STATUS);
0037 TRACE_DEFINE_ENUM(GSS_S_BAD_SIG);
0038 TRACE_DEFINE_ENUM(GSS_S_NO_CRED);
0039 TRACE_DEFINE_ENUM(GSS_S_NO_CONTEXT);
0040 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_TOKEN);
0041 TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_CREDENTIAL);
0042 TRACE_DEFINE_ENUM(GSS_S_CREDENTIALS_EXPIRED);
0043 TRACE_DEFINE_ENUM(GSS_S_CONTEXT_EXPIRED);
0044 TRACE_DEFINE_ENUM(GSS_S_FAILURE);
0045 TRACE_DEFINE_ENUM(GSS_S_BAD_QOP);
0046 TRACE_DEFINE_ENUM(GSS_S_UNAUTHORIZED);
0047 TRACE_DEFINE_ENUM(GSS_S_UNAVAILABLE);
0048 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_ELEMENT);
0049 TRACE_DEFINE_ENUM(GSS_S_NAME_NOT_MN);
0050 TRACE_DEFINE_ENUM(GSS_S_CONTINUE_NEEDED);
0051 TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_TOKEN);
0052 TRACE_DEFINE_ENUM(GSS_S_OLD_TOKEN);
0053 TRACE_DEFINE_ENUM(GSS_S_UNSEQ_TOKEN);
0054 TRACE_DEFINE_ENUM(GSS_S_GAP_TOKEN);
0055 
0056 #define show_gss_status(x)                      \
0057     __print_flags(x, "|",                       \
0058         { GSS_S_BAD_MECH, "GSS_S_BAD_MECH" },           \
0059         { GSS_S_BAD_NAME, "GSS_S_BAD_NAME" },           \
0060         { GSS_S_BAD_NAMETYPE, "GSS_S_BAD_NAMETYPE" },       \
0061         { GSS_S_BAD_BINDINGS, "GSS_S_BAD_BINDINGS" },       \
0062         { GSS_S_BAD_STATUS, "GSS_S_BAD_STATUS" },       \
0063         { GSS_S_BAD_SIG, "GSS_S_BAD_SIG" },         \
0064         { GSS_S_NO_CRED, "GSS_S_NO_CRED" },         \
0065         { GSS_S_NO_CONTEXT, "GSS_S_NO_CONTEXT" },       \
0066         { GSS_S_DEFECTIVE_TOKEN, "GSS_S_DEFECTIVE_TOKEN" }, \
0067         { GSS_S_DEFECTIVE_CREDENTIAL, "GSS_S_DEFECTIVE_CREDENTIAL" }, \
0068         { GSS_S_CREDENTIALS_EXPIRED, "GSS_S_CREDENTIALS_EXPIRED" }, \
0069         { GSS_S_CONTEXT_EXPIRED, "GSS_S_CONTEXT_EXPIRED" }, \
0070         { GSS_S_FAILURE, "GSS_S_FAILURE" },         \
0071         { GSS_S_BAD_QOP, "GSS_S_BAD_QOP" },         \
0072         { GSS_S_UNAUTHORIZED, "GSS_S_UNAUTHORIZED" },       \
0073         { GSS_S_UNAVAILABLE, "GSS_S_UNAVAILABLE" },     \
0074         { GSS_S_DUPLICATE_ELEMENT, "GSS_S_DUPLICATE_ELEMENT" }, \
0075         { GSS_S_NAME_NOT_MN, "GSS_S_NAME_NOT_MN" },     \
0076         { GSS_S_CONTINUE_NEEDED, "GSS_S_CONTINUE_NEEDED" }, \
0077         { GSS_S_DUPLICATE_TOKEN, "GSS_S_DUPLICATE_TOKEN" }, \
0078         { GSS_S_OLD_TOKEN, "GSS_S_OLD_TOKEN" },         \
0079         { GSS_S_UNSEQ_TOKEN, "GSS_S_UNSEQ_TOKEN" },     \
0080         { GSS_S_GAP_TOKEN, "GSS_S_GAP_TOKEN" })
0081 
0082 
0083 DECLARE_EVENT_CLASS(rpcgss_gssapi_event,
0084     TP_PROTO(
0085         const struct rpc_task *task,
0086         u32 maj_stat
0087     ),
0088 
0089     TP_ARGS(task, maj_stat),
0090 
0091     TP_STRUCT__entry(
0092         __field(unsigned int, task_id)
0093         __field(unsigned int, client_id)
0094         __field(u32, maj_stat)
0095 
0096     ),
0097 
0098     TP_fast_assign(
0099         __entry->task_id = task->tk_pid;
0100         __entry->client_id = task->tk_client->cl_clid;
0101         __entry->maj_stat = maj_stat;
0102     ),
0103 
0104     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " maj_stat=%s",
0105         __entry->task_id, __entry->client_id,
0106         __entry->maj_stat == 0 ?
0107         "GSS_S_COMPLETE" : show_gss_status(__entry->maj_stat))
0108 );
0109 
0110 #define DEFINE_GSSAPI_EVENT(name)                   \
0111     DEFINE_EVENT(rpcgss_gssapi_event, rpcgss_##name,        \
0112             TP_PROTO(                   \
0113                 const struct rpc_task *task,        \
0114                 u32 maj_stat                \
0115             ),                      \
0116             TP_ARGS(task, maj_stat))
0117 
0118 TRACE_EVENT(rpcgss_import_ctx,
0119     TP_PROTO(
0120         int status
0121     ),
0122 
0123     TP_ARGS(status),
0124 
0125     TP_STRUCT__entry(
0126         __field(int, status)
0127     ),
0128 
0129     TP_fast_assign(
0130         __entry->status = status;
0131     ),
0132 
0133     TP_printk("status=%d", __entry->status)
0134 );
0135 
0136 DEFINE_GSSAPI_EVENT(get_mic);
0137 DEFINE_GSSAPI_EVENT(verify_mic);
0138 DEFINE_GSSAPI_EVENT(wrap);
0139 DEFINE_GSSAPI_EVENT(unwrap);
0140 
0141 DECLARE_EVENT_CLASS(rpcgss_ctx_class,
0142     TP_PROTO(
0143         const struct gss_cred *gc
0144     ),
0145 
0146     TP_ARGS(gc),
0147 
0148     TP_STRUCT__entry(
0149         __field(const void *, cred)
0150         __field(unsigned long, service)
0151         __string(principal, gc->gc_principal)
0152     ),
0153 
0154     TP_fast_assign(
0155         __entry->cred = gc;
0156         __entry->service = gc->gc_service;
0157         __assign_str(principal, gc->gc_principal);
0158     ),
0159 
0160     TP_printk("cred=%p service=%s principal='%s'",
0161         __entry->cred, show_gss_service(__entry->service),
0162         __get_str(principal))
0163 );
0164 
0165 #define DEFINE_CTX_EVENT(name)                      \
0166     DEFINE_EVENT(rpcgss_ctx_class, rpcgss_ctx_##name,       \
0167             TP_PROTO(                   \
0168                 const struct gss_cred *gc       \
0169             ),                      \
0170             TP_ARGS(gc))
0171 
0172 DEFINE_CTX_EVENT(init);
0173 DEFINE_CTX_EVENT(destroy);
0174 
0175 DECLARE_EVENT_CLASS(rpcgss_svc_gssapi_class,
0176     TP_PROTO(
0177         const struct svc_rqst *rqstp,
0178         u32 maj_stat
0179     ),
0180 
0181     TP_ARGS(rqstp, maj_stat),
0182 
0183     TP_STRUCT__entry(
0184         __field(u32, xid)
0185         __field(u32, maj_stat)
0186         __string(addr, rqstp->rq_xprt->xpt_remotebuf)
0187     ),
0188 
0189     TP_fast_assign(
0190         __entry->xid = __be32_to_cpu(rqstp->rq_xid);
0191         __entry->maj_stat = maj_stat;
0192         __assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
0193     ),
0194 
0195     TP_printk("addr=%s xid=0x%08x maj_stat=%s",
0196         __get_str(addr), __entry->xid,
0197         __entry->maj_stat == 0 ?
0198         "GSS_S_COMPLETE" : show_gss_status(__entry->maj_stat))
0199 );
0200 
0201 #define DEFINE_SVC_GSSAPI_EVENT(name)                   \
0202     DEFINE_EVENT(rpcgss_svc_gssapi_class, rpcgss_svc_##name,    \
0203             TP_PROTO(                   \
0204                 const struct svc_rqst *rqstp,       \
0205                 u32 maj_stat                \
0206             ),                      \
0207             TP_ARGS(rqstp, maj_stat))
0208 
0209 DEFINE_SVC_GSSAPI_EVENT(unwrap);
0210 DEFINE_SVC_GSSAPI_EVENT(mic);
0211 
0212 TRACE_EVENT(rpcgss_svc_unwrap_failed,
0213     TP_PROTO(
0214         const struct svc_rqst *rqstp
0215     ),
0216 
0217     TP_ARGS(rqstp),
0218 
0219     TP_STRUCT__entry(
0220         __field(u32, xid)
0221         __string(addr, rqstp->rq_xprt->xpt_remotebuf)
0222     ),
0223 
0224     TP_fast_assign(
0225         __entry->xid = be32_to_cpu(rqstp->rq_xid);
0226         __assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
0227     ),
0228 
0229     TP_printk("addr=%s xid=0x%08x", __get_str(addr), __entry->xid)
0230 );
0231 
0232 TRACE_EVENT(rpcgss_svc_seqno_bad,
0233     TP_PROTO(
0234         const struct svc_rqst *rqstp,
0235         u32 expected,
0236         u32 received
0237     ),
0238 
0239     TP_ARGS(rqstp, expected, received),
0240 
0241     TP_STRUCT__entry(
0242         __field(u32, expected)
0243         __field(u32, received)
0244         __field(u32, xid)
0245         __string(addr, rqstp->rq_xprt->xpt_remotebuf)
0246     ),
0247 
0248     TP_fast_assign(
0249         __entry->expected = expected;
0250         __entry->received = received;
0251         __entry->xid = __be32_to_cpu(rqstp->rq_xid);
0252         __assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
0253     ),
0254 
0255     TP_printk("addr=%s xid=0x%08x expected seqno %u, received seqno %u",
0256         __get_str(addr), __entry->xid,
0257         __entry->expected, __entry->received)
0258 );
0259 
0260 TRACE_EVENT(rpcgss_svc_accept_upcall,
0261     TP_PROTO(
0262         const struct svc_rqst *rqstp,
0263         u32 major_status,
0264         u32 minor_status
0265     ),
0266 
0267     TP_ARGS(rqstp, major_status, minor_status),
0268 
0269     TP_STRUCT__entry(
0270         __field(u32, minor_status)
0271         __field(unsigned long, major_status)
0272         __field(u32, xid)
0273         __string(addr, rqstp->rq_xprt->xpt_remotebuf)
0274     ),
0275 
0276     TP_fast_assign(
0277         __entry->minor_status = minor_status;
0278         __entry->major_status = major_status;
0279         __entry->xid = be32_to_cpu(rqstp->rq_xid);
0280         __assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
0281     ),
0282 
0283     TP_printk("addr=%s xid=0x%08x major_status=%s (0x%08lx) minor_status=%u",
0284         __get_str(addr), __entry->xid,
0285         (__entry->major_status == 0) ? "GSS_S_COMPLETE" :
0286             show_gss_status(__entry->major_status),
0287         __entry->major_status, __entry->minor_status
0288     )
0289 );
0290 
0291 TRACE_EVENT(rpcgss_svc_authenticate,
0292     TP_PROTO(
0293         const struct svc_rqst *rqstp,
0294         const struct rpc_gss_wire_cred *gc
0295     ),
0296 
0297     TP_ARGS(rqstp, gc),
0298 
0299     TP_STRUCT__entry(
0300         __field(u32, seqno)
0301         __field(u32, xid)
0302         __string(addr, rqstp->rq_xprt->xpt_remotebuf)
0303     ),
0304 
0305     TP_fast_assign(
0306         __entry->xid = be32_to_cpu(rqstp->rq_xid);
0307         __entry->seqno = gc->gc_seq;
0308         __assign_str(addr, rqstp->rq_xprt->xpt_remotebuf);
0309     ),
0310 
0311     TP_printk("addr=%s xid=0x%08x seqno=%u", __get_str(addr),
0312         __entry->xid, __entry->seqno)
0313 );
0314 
0315 
0316 /**
0317  ** GSS auth unwrap failures
0318  **/
0319 
0320 TRACE_EVENT(rpcgss_unwrap_failed,
0321     TP_PROTO(
0322         const struct rpc_task *task
0323     ),
0324 
0325     TP_ARGS(task),
0326 
0327     TP_STRUCT__entry(
0328         __field(unsigned int, task_id)
0329         __field(unsigned int, client_id)
0330     ),
0331 
0332     TP_fast_assign(
0333         __entry->task_id = task->tk_pid;
0334         __entry->client_id = task->tk_client->cl_clid;
0335     ),
0336 
0337     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER,
0338         __entry->task_id, __entry->client_id)
0339 );
0340 
0341 TRACE_EVENT(rpcgss_bad_seqno,
0342     TP_PROTO(
0343         const struct rpc_task *task,
0344         u32 expected,
0345         u32 received
0346     ),
0347 
0348     TP_ARGS(task, expected, received),
0349 
0350     TP_STRUCT__entry(
0351         __field(unsigned int, task_id)
0352         __field(unsigned int, client_id)
0353         __field(u32, expected)
0354         __field(u32, received)
0355     ),
0356 
0357     TP_fast_assign(
0358         __entry->task_id = task->tk_pid;
0359         __entry->client_id = task->tk_client->cl_clid;
0360         __entry->expected = expected;
0361         __entry->received = received;
0362     ),
0363 
0364     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
0365           " expected seqno %u, received seqno %u",
0366         __entry->task_id, __entry->client_id,
0367         __entry->expected, __entry->received)
0368 );
0369 
0370 TRACE_EVENT(rpcgss_seqno,
0371     TP_PROTO(
0372         const struct rpc_task *task
0373     ),
0374 
0375     TP_ARGS(task),
0376 
0377     TP_STRUCT__entry(
0378         __field(unsigned int, task_id)
0379         __field(unsigned int, client_id)
0380         __field(u32, xid)
0381         __field(u32, seqno)
0382     ),
0383 
0384     TP_fast_assign(
0385         const struct rpc_rqst *rqst = task->tk_rqstp;
0386 
0387         __entry->task_id = task->tk_pid;
0388         __entry->client_id = task->tk_client->cl_clid;
0389         __entry->xid = be32_to_cpu(rqst->rq_xid);
0390         __entry->seqno = rqst->rq_seqno;
0391     ),
0392 
0393     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x seqno=%u",
0394         __entry->task_id, __entry->client_id,
0395         __entry->xid, __entry->seqno)
0396 );
0397 
0398 TRACE_EVENT(rpcgss_need_reencode,
0399     TP_PROTO(
0400         const struct rpc_task *task,
0401         u32 seq_xmit,
0402         bool ret
0403     ),
0404 
0405     TP_ARGS(task, seq_xmit, ret),
0406 
0407     TP_STRUCT__entry(
0408         __field(unsigned int, task_id)
0409         __field(unsigned int, client_id)
0410         __field(u32, xid)
0411         __field(u32, seq_xmit)
0412         __field(u32, seqno)
0413         __field(bool, ret)
0414     ),
0415 
0416     TP_fast_assign(
0417         __entry->task_id = task->tk_pid;
0418         __entry->client_id = task->tk_client->cl_clid;
0419         __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
0420         __entry->seq_xmit = seq_xmit;
0421         __entry->seqno = task->tk_rqstp->rq_seqno;
0422         __entry->ret = ret;
0423     ),
0424 
0425     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
0426           " xid=0x%08x rq_seqno=%u seq_xmit=%u reencode %sneeded",
0427         __entry->task_id, __entry->client_id,
0428         __entry->xid, __entry->seqno, __entry->seq_xmit,
0429         __entry->ret ? "" : "un")
0430 );
0431 
0432 TRACE_EVENT(rpcgss_update_slack,
0433     TP_PROTO(
0434         const struct rpc_task *task,
0435         const struct rpc_auth *auth
0436     ),
0437 
0438     TP_ARGS(task, auth),
0439 
0440     TP_STRUCT__entry(
0441         __field(unsigned int, task_id)
0442         __field(unsigned int, client_id)
0443         __field(u32, xid)
0444         __field(const void *, auth)
0445         __field(unsigned int, rslack)
0446         __field(unsigned int, ralign)
0447         __field(unsigned int, verfsize)
0448     ),
0449 
0450     TP_fast_assign(
0451         __entry->task_id = task->tk_pid;
0452         __entry->client_id = task->tk_client->cl_clid;
0453         __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
0454         __entry->auth = auth;
0455         __entry->rslack = auth->au_rslack;
0456         __entry->ralign = auth->au_ralign;
0457         __entry->verfsize = auth->au_verfsize;
0458     ),
0459 
0460     TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
0461           " xid=0x%08x auth=%p rslack=%u ralign=%u verfsize=%u\n",
0462         __entry->task_id, __entry->client_id, __entry->xid,
0463         __entry->auth, __entry->rslack, __entry->ralign,
0464         __entry->verfsize)
0465 );
0466 
0467 DECLARE_EVENT_CLASS(rpcgss_svc_seqno_class,
0468     TP_PROTO(
0469         const struct svc_rqst *rqstp,
0470         u32 seqno
0471     ),
0472 
0473     TP_ARGS(rqstp, seqno),
0474 
0475     TP_STRUCT__entry(
0476         __field(u32, xid)
0477         __field(u32, seqno)
0478     ),
0479 
0480     TP_fast_assign(
0481         __entry->xid = be32_to_cpu(rqstp->rq_xid);
0482         __entry->seqno = seqno;
0483     ),
0484 
0485     TP_printk("xid=0x%08x seqno=%u",
0486         __entry->xid, __entry->seqno)
0487 );
0488 
0489 #define DEFINE_SVC_SEQNO_EVENT(name)                    \
0490     DEFINE_EVENT(rpcgss_svc_seqno_class, rpcgss_svc_seqno_##name,   \
0491             TP_PROTO(                   \
0492                 const struct svc_rqst *rqstp,       \
0493                 u32 seqno               \
0494             ),                      \
0495             TP_ARGS(rqstp, seqno))
0496 
0497 DEFINE_SVC_SEQNO_EVENT(large);
0498 DEFINE_SVC_SEQNO_EVENT(seen);
0499 
0500 TRACE_EVENT(rpcgss_svc_seqno_low,
0501     TP_PROTO(
0502         const struct svc_rqst *rqstp,
0503         u32 seqno,
0504         u32 min,
0505         u32 max
0506     ),
0507 
0508     TP_ARGS(rqstp, seqno, min, max),
0509 
0510     TP_STRUCT__entry(
0511         __field(u32, xid)
0512         __field(u32, seqno)
0513         __field(u32, min)
0514         __field(u32, max)
0515     ),
0516 
0517     TP_fast_assign(
0518         __entry->xid = be32_to_cpu(rqstp->rq_xid);
0519         __entry->seqno = seqno;
0520         __entry->min = min;
0521         __entry->max = max;
0522     ),
0523 
0524     TP_printk("xid=0x%08x seqno=%u window=[%u..%u]",
0525         __entry->xid, __entry->seqno, __entry->min, __entry->max)
0526 );
0527 
0528 /**
0529  ** gssd upcall related trace events
0530  **/
0531 
0532 TRACE_EVENT(rpcgss_upcall_msg,
0533     TP_PROTO(
0534         const char *buf
0535     ),
0536 
0537     TP_ARGS(buf),
0538 
0539     TP_STRUCT__entry(
0540         __string(msg, buf)
0541     ),
0542 
0543     TP_fast_assign(
0544         __assign_str(msg, buf);
0545     ),
0546 
0547     TP_printk("msg='%s'", __get_str(msg))
0548 );
0549 
0550 TRACE_EVENT(rpcgss_upcall_result,
0551     TP_PROTO(
0552         u32 uid,
0553         int result
0554     ),
0555 
0556     TP_ARGS(uid, result),
0557 
0558     TP_STRUCT__entry(
0559         __field(u32, uid)
0560         __field(int, result)
0561 
0562     ),
0563 
0564     TP_fast_assign(
0565         __entry->uid = uid;
0566         __entry->result = result;
0567     ),
0568 
0569     TP_printk("for uid %u, result=%d", __entry->uid, __entry->result)
0570 );
0571 
0572 TRACE_EVENT(rpcgss_context,
0573     TP_PROTO(
0574         u32 window_size,
0575         unsigned long expiry,
0576         unsigned long now,
0577         unsigned int timeout,
0578         unsigned int len,
0579         const u8 *data
0580     ),
0581 
0582     TP_ARGS(window_size, expiry, now, timeout, len, data),
0583 
0584     TP_STRUCT__entry(
0585         __field(unsigned long, expiry)
0586         __field(unsigned long, now)
0587         __field(unsigned int, timeout)
0588         __field(u32, window_size)
0589         __field(int, len)
0590         __string(acceptor, data)
0591     ),
0592 
0593     TP_fast_assign(
0594         __entry->expiry = expiry;
0595         __entry->now = now;
0596         __entry->timeout = timeout;
0597         __entry->window_size = window_size;
0598         __entry->len = len;
0599         strncpy(__get_str(acceptor), data, len);
0600     ),
0601 
0602     TP_printk("win_size=%u expiry=%lu now=%lu timeout=%u acceptor=%.*s",
0603         __entry->window_size, __entry->expiry, __entry->now,
0604         __entry->timeout, __entry->len, __get_str(acceptor))
0605 );
0606 
0607 
0608 /**
0609  ** Miscellaneous events
0610  */
0611 
0612 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
0613 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
0614 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
0615 
0616 #define show_pseudoflavor(x)                        \
0617     __print_symbolic(x,                     \
0618         { RPC_AUTH_GSS_KRB5, "RPC_AUTH_GSS_KRB5" },     \
0619         { RPC_AUTH_GSS_KRB5I, "RPC_AUTH_GSS_KRB5I" },       \
0620         { RPC_AUTH_GSS_KRB5P, "RPC_AUTH_GSS_KRB5P" })
0621 
0622 
0623 TRACE_EVENT(rpcgss_createauth,
0624     TP_PROTO(
0625         unsigned int flavor,
0626         int error
0627     ),
0628 
0629     TP_ARGS(flavor, error),
0630 
0631     TP_STRUCT__entry(
0632         __field(unsigned int, flavor)
0633         __field(int, error)
0634 
0635     ),
0636 
0637     TP_fast_assign(
0638         __entry->flavor = flavor;
0639         __entry->error = error;
0640     ),
0641 
0642     TP_printk("flavor=%s error=%d",
0643         show_pseudoflavor(__entry->flavor), __entry->error)
0644 );
0645 
0646 TRACE_EVENT(rpcgss_oid_to_mech,
0647     TP_PROTO(
0648         const char *oid
0649     ),
0650 
0651     TP_ARGS(oid),
0652 
0653     TP_STRUCT__entry(
0654         __string(oid, oid)
0655     ),
0656 
0657     TP_fast_assign(
0658         __assign_str(oid, oid);
0659     ),
0660 
0661     TP_printk("mech for oid %s was not found", __get_str(oid))
0662 );
0663 
0664 #endif  /* _TRACE_RPCGSS_H */
0665 
0666 #include <trace/define_trace.h>