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