root/include/trace/events/rpcgss.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */