aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/trace.h')
-rw-r--r--net/tipc/trace.h231
1 files changed, 231 insertions, 0 deletions
diff --git a/net/tipc/trace.h b/net/tipc/trace.h
new file mode 100644
index 000000000000..4c74927df685
--- /dev/null
+++ b/net/tipc/trace.h
@@ -0,0 +1,231 @@
1/*
2 * net/tipc/trace.h: TIPC tracepoints
3 *
4 * Copyright (c) 2018, Ericsson AB
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the names of the copyright holders nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * Alternatively, this software may be distributed under the terms of the
20 * GNU General Public License ("GPL") version 2 as published by the Free
21 * Software Foundation.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "ASIS"
24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
36#undef TRACE_SYSTEM
37#define TRACE_SYSTEM tipc
38
39#if !defined(_TIPC_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
40#define _TIPC_TRACE_H
41
42#include <linux/tracepoint.h>
43#include "core.h"
44#include "link.h"
45#include "socket.h"
46#include "node.h"
47
48#define SKB_LMIN (100)
49#define SKB_LMAX (SKB_LMIN * 2)
50#define LIST_LMIN (SKB_LMIN * 3)
51#define LIST_LMAX (SKB_LMIN * 11)
52#define SK_LMIN (SKB_LMIN * 2)
53#define SK_LMAX (SKB_LMIN * 11)
54#define LINK_LMIN (SKB_LMIN)
55#define LINK_LMAX (SKB_LMIN * 16)
56#define NODE_LMIN (SKB_LMIN)
57#define NODE_LMAX (SKB_LMIN * 11)
58
59#ifndef __TIPC_TRACE_ENUM
60#define __TIPC_TRACE_ENUM
61enum {
62 TIPC_DUMP_NONE = 0,
63
64 TIPC_DUMP_TRANSMQ = 1,
65 TIPC_DUMP_BACKLOGQ = (1 << 1),
66 TIPC_DUMP_DEFERDQ = (1 << 2),
67 TIPC_DUMP_INPUTQ = (1 << 3),
68 TIPC_DUMP_WAKEUP = (1 << 4),
69
70 TIPC_DUMP_SK_SNDQ = (1 << 8),
71 TIPC_DUMP_SK_RCVQ = (1 << 9),
72 TIPC_DUMP_SK_BKLGQ = (1 << 10),
73 TIPC_DUMP_ALL = 0xffffu
74};
75#endif
76
77int tipc_skb_dump(struct sk_buff *skb, bool more, char *buf);
78int tipc_list_dump(struct sk_buff_head *list, bool more, char *buf);
79int tipc_sk_dump(struct sock *sk, u16 dqueues, char *buf);
80int tipc_link_dump(struct tipc_link *l, u16 dqueues, char *buf);
81int tipc_node_dump(struct tipc_node *n, bool more, char *buf);
82
83DECLARE_EVENT_CLASS(tipc_skb_class,
84
85 TP_PROTO(struct sk_buff *skb, bool more, const char *header),
86
87 TP_ARGS(skb, more, header),
88
89 TP_STRUCT__entry(
90 __string(header, header)
91 __dynamic_array(char, buf, (more) ? SKB_LMAX : SKB_LMIN)
92 ),
93
94 TP_fast_assign(
95 __assign_str(header, header);
96 tipc_skb_dump(skb, more, __get_str(buf));
97 ),
98
99 TP_printk("%s\n%s", __get_str(header), __get_str(buf))
100)
101
102#define DEFINE_SKB_EVENT(name) \
103DEFINE_EVENT(tipc_skb_class, name, \
104 TP_PROTO(struct sk_buff *skb, bool more, const char *header), \
105 TP_ARGS(skb, more, header))
106DEFINE_SKB_EVENT(tipc_skb_dump);
107
108DECLARE_EVENT_CLASS(tipc_list_class,
109
110 TP_PROTO(struct sk_buff_head *list, bool more, const char *header),
111
112 TP_ARGS(list, more, header),
113
114 TP_STRUCT__entry(
115 __string(header, header)
116 __dynamic_array(char, buf, (more) ? LIST_LMAX : LIST_LMIN)
117 ),
118
119 TP_fast_assign(
120 __assign_str(header, header);
121 tipc_list_dump(list, more, __get_str(buf));
122 ),
123
124 TP_printk("%s\n%s", __get_str(header), __get_str(buf))
125);
126
127#define DEFINE_LIST_EVENT(name) \
128DEFINE_EVENT(tipc_list_class, name, \
129 TP_PROTO(struct sk_buff_head *list, bool more, const char *header), \
130 TP_ARGS(list, more, header))
131DEFINE_LIST_EVENT(tipc_list_dump);
132
133DECLARE_EVENT_CLASS(tipc_sk_class,
134
135 TP_PROTO(struct sock *sk, struct sk_buff *skb, u16 dqueues,
136 const char *header),
137
138 TP_ARGS(sk, skb, dqueues, header),
139
140 TP_STRUCT__entry(
141 __string(header, header)
142 __field(u32, portid)
143 __dynamic_array(char, buf, (dqueues) ? SK_LMAX : SK_LMIN)
144 __dynamic_array(char, skb_buf, (skb) ? SKB_LMIN : 1)
145 ),
146
147 TP_fast_assign(
148 __assign_str(header, header);
149 __entry->portid = tipc_sock_get_portid(sk);
150 tipc_sk_dump(sk, dqueues, __get_str(buf));
151 if (skb)
152 tipc_skb_dump(skb, false, __get_str(skb_buf));
153 else
154 *(__get_str(skb_buf)) = '\0';
155 ),
156
157 TP_printk("<%u> %s\n%s%s", __entry->portid, __get_str(header),
158 __get_str(skb_buf), __get_str(buf))
159);
160
161#define DEFINE_SK_EVENT(name) \
162DEFINE_EVENT(tipc_sk_class, name, \
163 TP_PROTO(struct sock *sk, struct sk_buff *skb, u16 dqueues, \
164 const char *header), \
165 TP_ARGS(sk, skb, dqueues, header))
166DEFINE_SK_EVENT(tipc_sk_dump);
167
168DECLARE_EVENT_CLASS(tipc_link_class,
169
170 TP_PROTO(struct tipc_link *l, u16 dqueues, const char *header),
171
172 TP_ARGS(l, dqueues, header),
173
174 TP_STRUCT__entry(
175 __string(header, header)
176 __array(char, name, TIPC_MAX_LINK_NAME)
177 __dynamic_array(char, buf, (dqueues) ? LINK_LMAX : LINK_LMIN)
178 ),
179
180 TP_fast_assign(
181 __assign_str(header, header);
182 tipc_link_name_ext(l, __entry->name);
183 tipc_link_dump(l, dqueues, __get_str(buf));
184 ),
185
186 TP_printk("<%s> %s\n%s", __entry->name, __get_str(header),
187 __get_str(buf))
188);
189
190#define DEFINE_LINK_EVENT(name) \
191DEFINE_EVENT(tipc_link_class, name, \
192 TP_PROTO(struct tipc_link *l, u16 dqueues, const char *header), \
193 TP_ARGS(l, dqueues, header))
194DEFINE_LINK_EVENT(tipc_link_dump);
195
196DECLARE_EVENT_CLASS(tipc_node_class,
197
198 TP_PROTO(struct tipc_node *n, bool more, const char *header),
199
200 TP_ARGS(n, more, header),
201
202 TP_STRUCT__entry(
203 __string(header, header)
204 __field(u32, addr)
205 __dynamic_array(char, buf, (more) ? NODE_LMAX : NODE_LMIN)
206 ),
207
208 TP_fast_assign(
209 __assign_str(header, header);
210 __entry->addr = tipc_node_get_addr(n);
211 tipc_node_dump(n, more, __get_str(buf));
212 ),
213
214 TP_printk("<%x> %s\n%s", __entry->addr, __get_str(header),
215 __get_str(buf))
216);
217
218#define DEFINE_NODE_EVENT(name) \
219DEFINE_EVENT(tipc_node_class, name, \
220 TP_PROTO(struct tipc_node *n, bool more, const char *header), \
221 TP_ARGS(n, more, header))
222DEFINE_NODE_EVENT(tipc_node_dump);
223
224#endif /* _TIPC_TRACE_H */
225
226/* This part must be outside protection */
227#undef TRACE_INCLUDE_PATH
228#define TRACE_INCLUDE_PATH .
229#undef TRACE_INCLUDE_FILE
230#define TRACE_INCLUDE_FILE trace
231#include <trace/define_trace.h>