Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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>