1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM vsock
4
5#if !defined(_TRACE_VSOCK_VIRTIO_TRANSPORT_COMMON_H) || \
6    defined(TRACE_HEADER_MULTI_READ)
7#define _TRACE_VSOCK_VIRTIO_TRANSPORT_COMMON_H
8
9#include <linux/tracepoint.h>
10
11TRACE_DEFINE_ENUM(VIRTIO_VSOCK_TYPE_STREAM);
12TRACE_DEFINE_ENUM(VIRTIO_VSOCK_TYPE_SEQPACKET);
13
14#define show_type(val) \
15	__print_symbolic(val, \
16			 { VIRTIO_VSOCK_TYPE_STREAM, "STREAM" }, \
17			 { VIRTIO_VSOCK_TYPE_SEQPACKET, "SEQPACKET" })
18
19TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_INVALID);
20TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_REQUEST);
21TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_RESPONSE);
22TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_RST);
23TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_SHUTDOWN);
24TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_RW);
25TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_CREDIT_UPDATE);
26TRACE_DEFINE_ENUM(VIRTIO_VSOCK_OP_CREDIT_REQUEST);
27
28#define show_op(val) \
29	__print_symbolic(val, \
30			 { VIRTIO_VSOCK_OP_INVALID, "INVALID" }, \
31			 { VIRTIO_VSOCK_OP_REQUEST, "REQUEST" }, \
32			 { VIRTIO_VSOCK_OP_RESPONSE, "RESPONSE" }, \
33			 { VIRTIO_VSOCK_OP_RST, "RST" }, \
34			 { VIRTIO_VSOCK_OP_SHUTDOWN, "SHUTDOWN" }, \
35			 { VIRTIO_VSOCK_OP_RW, "RW" }, \
36			 { VIRTIO_VSOCK_OP_CREDIT_UPDATE, "CREDIT_UPDATE" }, \
37			 { VIRTIO_VSOCK_OP_CREDIT_REQUEST, "CREDIT_REQUEST" })
38
39TRACE_EVENT(virtio_transport_alloc_pkt,
40	TP_PROTO(
41		 __u32 src_cid, __u32 src_port,
42		 __u32 dst_cid, __u32 dst_port,
43		 __u32 len,
44		 __u16 type,
45		 __u16 op,
46		 __u32 flags,
47		 bool zcopy
48	),
49	TP_ARGS(
50		src_cid, src_port,
51		dst_cid, dst_port,
52		len,
53		type,
54		op,
55		flags,
56		zcopy
57	),
58	TP_STRUCT__entry(
59		__field(__u32, src_cid)
60		__field(__u32, src_port)
61		__field(__u32, dst_cid)
62		__field(__u32, dst_port)
63		__field(__u32, len)
64		__field(__u16, type)
65		__field(__u16, op)
66		__field(__u32, flags)
67		__field(bool, zcopy)
68	),
69	TP_fast_assign(
70		__entry->src_cid = src_cid;
71		__entry->src_port = src_port;
72		__entry->dst_cid = dst_cid;
73		__entry->dst_port = dst_port;
74		__entry->len = len;
75		__entry->type = type;
76		__entry->op = op;
77		__entry->flags = flags;
78		__entry->zcopy = zcopy;
79	),
80	TP_printk("%u:%u -> %u:%u len=%u type=%s op=%s flags=%#x zcopy=%s",
81		  __entry->src_cid, __entry->src_port,
82		  __entry->dst_cid, __entry->dst_port,
83		  __entry->len,
84		  show_type(__entry->type),
85		  show_op(__entry->op),
86		  __entry->flags, __entry->zcopy ? "true" : "false")
87);
88
89TRACE_EVENT(virtio_transport_recv_pkt,
90	TP_PROTO(
91		 __u32 src_cid, __u32 src_port,
92		 __u32 dst_cid, __u32 dst_port,
93		 __u32 len,
94		 __u16 type,
95		 __u16 op,
96		 __u32 flags,
97		 __u32 buf_alloc,
98		 __u32 fwd_cnt
99	),
100	TP_ARGS(
101		src_cid, src_port,
102		dst_cid, dst_port,
103		len,
104		type,
105		op,
106		flags,
107		buf_alloc,
108		fwd_cnt
109	),
110	TP_STRUCT__entry(
111		__field(__u32, src_cid)
112		__field(__u32, src_port)
113		__field(__u32, dst_cid)
114		__field(__u32, dst_port)
115		__field(__u32, len)
116		__field(__u16, type)
117		__field(__u16, op)
118		__field(__u32, flags)
119		__field(__u32, buf_alloc)
120		__field(__u32, fwd_cnt)
121	),
122	TP_fast_assign(
123		__entry->src_cid = src_cid;
124		__entry->src_port = src_port;
125		__entry->dst_cid = dst_cid;
126		__entry->dst_port = dst_port;
127		__entry->len = len;
128		__entry->type = type;
129		__entry->op = op;
130		__entry->flags = flags;
131		__entry->buf_alloc = buf_alloc;
132		__entry->fwd_cnt = fwd_cnt;
133	),
134	TP_printk("%u:%u -> %u:%u len=%u type=%s op=%s flags=%#x "
135		  "buf_alloc=%u fwd_cnt=%u",
136		  __entry->src_cid, __entry->src_port,
137		  __entry->dst_cid, __entry->dst_port,
138		  __entry->len,
139		  show_type(__entry->type),
140		  show_op(__entry->op),
141		  __entry->flags,
142		  __entry->buf_alloc,
143		  __entry->fwd_cnt)
144);
145
146#endif /* _TRACE_VSOCK_VIRTIO_TRANSPORT_COMMON_H */
147
148#undef TRACE_INCLUDE_FILE
149#define TRACE_INCLUDE_FILE vsock_virtio_transport_common
150
151/* This part must be outside protection */
152#include <trace/define_trace.h>
153