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(GSS_S_BAD_MECH);
  21TRACE_DEFINE_ENUM(GSS_S_BAD_NAME);
  22TRACE_DEFINE_ENUM(GSS_S_BAD_NAMETYPE);
  23TRACE_DEFINE_ENUM(GSS_S_BAD_BINDINGS);
  24TRACE_DEFINE_ENUM(GSS_S_BAD_STATUS);
  25TRACE_DEFINE_ENUM(GSS_S_BAD_SIG);
  26TRACE_DEFINE_ENUM(GSS_S_NO_CRED);
  27TRACE_DEFINE_ENUM(GSS_S_NO_CONTEXT);
  28TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_TOKEN);
  29TRACE_DEFINE_ENUM(GSS_S_DEFECTIVE_CREDENTIAL);
  30TRACE_DEFINE_ENUM(GSS_S_CREDENTIALS_EXPIRED);
  31TRACE_DEFINE_ENUM(GSS_S_CONTEXT_EXPIRED);
  32TRACE_DEFINE_ENUM(GSS_S_FAILURE);
  33TRACE_DEFINE_ENUM(GSS_S_BAD_QOP);
  34TRACE_DEFINE_ENUM(GSS_S_UNAUTHORIZED);
  35TRACE_DEFINE_ENUM(GSS_S_UNAVAILABLE);
  36TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_ELEMENT);
  37TRACE_DEFINE_ENUM(GSS_S_NAME_NOT_MN);
  38TRACE_DEFINE_ENUM(GSS_S_CONTINUE_NEEDED);
  39TRACE_DEFINE_ENUM(GSS_S_DUPLICATE_TOKEN);
  40TRACE_DEFINE_ENUM(GSS_S_OLD_TOKEN);
  41TRACE_DEFINE_ENUM(GSS_S_UNSEQ_TOKEN);
  42TRACE_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
  71DECLARE_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
 106TRACE_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
 124DEFINE_GSSAPI_EVENT(get_mic);
 125DEFINE_GSSAPI_EVENT(verify_mic);
 126DEFINE_GSSAPI_EVENT(wrap);
 127DEFINE_GSSAPI_EVENT(unwrap);
 128
 129
 130/**
 131 ** GSS auth unwrap failures
 132 **/
 133
 134TRACE_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
 154TRACE_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
 182TRACE_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
 210TRACE_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
 247TRACE_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
 265TRACE_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
 287TRACE_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
 324TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
 325TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
 326TRACE_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
 335TRACE_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>
 362