xref: /linux/include/trace/events/qdisc.h (revision 40286d6379aacfcc053253ef78dc78b09addffda)
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM qdisc
3 
4 #if !defined(_TRACE_QDISC_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_QDISC_H
6 
7 #include <linux/skbuff.h>
8 #include <linux/netdevice.h>
9 #include <linux/tracepoint.h>
10 #include <linux/ftrace.h>
11 #include <linux/pkt_sched.h>
12 #include <net/sch_generic.h>
13 
14 TRACE_EVENT(qdisc_dequeue,
15 
16 	TP_PROTO(struct Qdisc *qdisc, const struct netdev_queue *txq,
17 		 int packets, struct sk_buff *skb),
18 
19 	TP_ARGS(qdisc, txq, packets, skb),
20 
21 	TP_STRUCT__entry(
22 		__field(	struct Qdisc *,		qdisc	)
23 		__field(const	struct netdev_queue *,	txq	)
24 		__field(	int,			packets	)
25 		__field(	void *,			skbaddr	)
26 		__field(	int,			ifindex	)
27 		__field(	u32,			handle	)
28 		__field(	u32,			parent	)
29 		__field(	unsigned long,		txq_state)
30 	),
31 
32 	/* skb==NULL indicate packets dequeued was 0, even when packets==1 */
33 	TP_fast_assign(
34 		__entry->qdisc		= qdisc;
35 		__entry->txq		= txq;
36 		__entry->packets	= skb ? packets : 0;
37 		__entry->skbaddr	= skb;
38 		__entry->ifindex	= txq->dev ? txq->dev->ifindex : 0;
39 		__entry->handle		= qdisc->handle;
40 		__entry->parent		= qdisc->parent;
41 		__entry->txq_state	= txq->state;
42 	),
43 
44 	TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X txq_state=0x%lX packets=%d skbaddr=%p",
45 		  __entry->ifindex, __entry->handle, __entry->parent,
46 		  __entry->txq_state, __entry->packets, __entry->skbaddr )
47 );
48 
49 TRACE_EVENT(qdisc_enqueue,
50 
51 	TP_PROTO(struct Qdisc *qdisc, const struct netdev_queue *txq, struct sk_buff *skb),
52 
53 	TP_ARGS(qdisc, txq, skb),
54 
55 	TP_STRUCT__entry(
56 		__field(struct Qdisc *, qdisc)
57 		__field(const struct netdev_queue *, txq)
58 		__field(void *,	skbaddr)
59 		__field(int, ifindex)
60 		__field(u32, handle)
61 		__field(u32, parent)
62 	),
63 
64 	TP_fast_assign(
65 		__entry->qdisc = qdisc;
66 		__entry->txq	 = txq;
67 		__entry->skbaddr = skb;
68 		__entry->ifindex = txq->dev ? txq->dev->ifindex : 0;
69 		__entry->handle	 = qdisc->handle;
70 		__entry->parent	 = qdisc->parent;
71 	),
72 
73 	TP_printk("enqueue ifindex=%d qdisc handle=0x%X parent=0x%X skbaddr=%p",
74 		  __entry->ifindex, __entry->handle, __entry->parent, __entry->skbaddr)
75 );
76 
77 #undef FN
78 #undef FNe
79 #define FN(reason)	TRACE_DEFINE_ENUM(QDISC_DROP_##reason);
80 #define FNe(reason)	TRACE_DEFINE_ENUM(QDISC_DROP_##reason);
81 DEFINE_QDISC_DROP_REASON(FN, FNe)
82 
83 #undef FN
84 #undef FNe
85 #define FN(reason)	{ QDISC_DROP_##reason, #reason },
86 #define FNe(reason)	{ QDISC_DROP_##reason, #reason }
87 
88 TRACE_EVENT(qdisc_drop,
89 
90 	TP_PROTO(struct Qdisc *qdisc, const struct netdev_queue *txq,
91 		 struct net_device *dev, struct sk_buff *skb,
92 		 enum qdisc_drop_reason reason),
93 
94 	TP_ARGS(qdisc, txq, dev, skb, reason),
95 
96 	TP_STRUCT__entry(
97 		__field(struct Qdisc *, qdisc)
98 		__field(const struct netdev_queue *, txq)
99 		__field(void *,	skbaddr)
100 		__field(int, ifindex)
101 		__field(u32, handle)
102 		__field(u32, parent)
103 		__field(enum qdisc_drop_reason, reason)
104 		__string(kind, qdisc->ops->id)
105 	),
106 
107 	TP_fast_assign(
108 		__entry->qdisc = qdisc;
109 		__entry->txq	 = txq;
110 		__entry->skbaddr = skb;
111 		__entry->ifindex = dev ? dev->ifindex : 0;
112 		__entry->handle	 = qdisc->handle;
113 		__entry->parent	 = qdisc->parent;
114 		__entry->reason	 = reason;
115 		__assign_str(kind);
116 	),
117 
118 	TP_printk("drop ifindex=%d kind=%s handle=0x%X parent=0x%X skbaddr=%p reason=%s",
119 		  __entry->ifindex, __get_str(kind), __entry->handle,
120 		  __entry->parent, __entry->skbaddr,
121 		  __print_symbolic(__entry->reason,
122 				   DEFINE_QDISC_DROP_REASON(FN, FNe)))
123 );
124 
125 #undef FN
126 #undef FNe
127 
128 TRACE_EVENT(qdisc_reset,
129 
130 	TP_PROTO(struct Qdisc *q),
131 
132 	TP_ARGS(q),
133 
134 	TP_STRUCT__entry(
135 		__string(	dev,		qdisc_dev(q) ? qdisc_dev(q)->name : "(null)"	)
136 		__string(	kind,		q->ops->id		)
137 		__field(	u32,		parent			)
138 		__field(	u32,		handle			)
139 	),
140 
141 	TP_fast_assign(
142 		__assign_str(dev);
143 		__assign_str(kind);
144 		__entry->parent = q->parent;
145 		__entry->handle = q->handle;
146 	),
147 
148 	TP_printk("dev=%s kind=%s parent=%x:%x handle=%x:%x", __get_str(dev),
149 		  __get_str(kind), TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent),
150 		  TC_H_MAJ(__entry->handle) >> 16, TC_H_MIN(__entry->handle))
151 );
152 
153 TRACE_EVENT(qdisc_destroy,
154 
155 	TP_PROTO(struct Qdisc *q),
156 
157 	TP_ARGS(q),
158 
159 	TP_STRUCT__entry(
160 		__string(	dev,		qdisc_dev(q)->name	)
161 		__string(	kind,		q->ops->id		)
162 		__field(	u32,		parent			)
163 		__field(	u32,		handle			)
164 	),
165 
166 	TP_fast_assign(
167 		__assign_str(dev);
168 		__assign_str(kind);
169 		__entry->parent = q->parent;
170 		__entry->handle = q->handle;
171 	),
172 
173 	TP_printk("dev=%s kind=%s parent=%x:%x handle=%x:%x", __get_str(dev),
174 		  __get_str(kind), TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent),
175 		  TC_H_MAJ(__entry->handle) >> 16, TC_H_MIN(__entry->handle))
176 );
177 
178 TRACE_EVENT(qdisc_create,
179 
180 	TP_PROTO(const struct Qdisc_ops *ops, struct net_device *dev, u32 parent),
181 
182 	TP_ARGS(ops, dev, parent),
183 
184 	TP_STRUCT__entry(
185 		__string(	dev,		dev->name	)
186 		__string(	kind,		ops->id		)
187 		__field(	u32,		parent		)
188 	),
189 
190 	TP_fast_assign(
191 		__assign_str(dev);
192 		__assign_str(kind);
193 		__entry->parent = parent;
194 	),
195 
196 	TP_printk("dev=%s kind=%s parent=%x:%x",
197 		  __get_str(dev), __get_str(kind),
198 		  TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent))
199 );
200 
201 #endif /* _TRACE_QDISC_H */
202 
203 /* This part must be outside protection */
204 #include <trace/define_trace.h>
205