linux/include/trace/events/rpcgss.h
<<
>>
Prefs
   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
  20TRACE_DEFINE_ENUM(RPC_GSS_SVC_NONE);
  21TRACE_DEFINE_ENUM(RPC_GSS_SVC_INTEGRITY);
  22TRACE_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
  30TRACE_DEFINE_ENUM(GSS_S_BAD_MECH);
  31TRACE_DEFINE_ENUM(GSS_S_BAD_NAME);
  32TRACE_DEFINE_ENUM(GSS_S_BAD_NAMETYPE);
  33TRACE_DEFINE_ENUM(GSS_S_BAD_BINDINGS);
  34TRACE_DEFINE_ENUM(GSS_S_BAD_STATUS);
  35TRACE_DEFINE_ENUM(GSS_S_BAD_SIG);
  36TRACE_DEFINE_ENUM(GSS_S_NO_CRED);
  37TRACE_DEFINE_ENUM(GSS_S_NO_CONTEXT);
  38TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_TOKEN);
  39TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_CREDENTIAL);
  40TRACE_DEFINE_ENUM(GSS_S_CREDENTIALS_EXPIRED);
  41TRACE_DEFINE_ENUM(GSS_S_CONTEXT_EXPIRED);
  42TRACE_DEFINE_ENUM(GSS_S_FAILURE);
  43TRACE_DEFINE_ENUM(GSS_S_BAD_QOP);
  44TRACE_DEFINE_ENUM(GSS_S_UNAUTHORIZED);
  45TRACE_DEFINE_ENUM(GSS_S_UNAVAILABLE);
  46TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_ELEMENT);
  47TRACE_DEFINE_ENUM(GSS_S_NAME_NOT_MN);
  48TRACE_DEFINE_ENUM(GSS_S_CONTINUE_NEEDED);
  49TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_TOKEN);
  50TRACE_DEFINE_ENUM(GSS_S_OLD_TOKEN);
  51TRACE_DEFINE_ENUM(GSS_S_UNSEQ_TOKEN);
  52TRACE_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
  81DECLARE_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
 116TRACE_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
 134DEFINE_GSSAPI_EVENT(get_mic);
 135DEFINE_GSSAPI_EVENT(verify_mic);
 136DEFINE_GSSAPI_EVENT(wrap);
 137DEFINE_GSSAPI_EVENT(unwrap);
 138
 139DECLARE_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
 170DEFINE_CTX_EVENT(init);
 171DEFINE_CTX_EVENT(destroy);
 172
 173DECLARE_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
 207DEFINE_SVC_GSSAPI_EVENT(unwrap);
 208DEFINE_SVC_GSSAPI_EVENT(mic);
 209
 210TRACE_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
 230TRACE_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
 258TRACE_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
 289TRACE_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
 318TRACE_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
 338TRACE_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
 366TRACE_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
 394TRACE_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
 427TRACE_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
 461DECLARE_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
 491DEFINE_SVC_SEQNO_EVENT(large);
 492DEFINE_SVC_SEQNO_EVENT(seen);
 493
 494TRACE_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
 526TRACE_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
 544TRACE_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
 566TRACE_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
 606TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
 607TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
 608TRACE_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
 617TRACE_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
 640TRACE_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