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