xref: /openbmc/linux/include/trace/events/net.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2cf66ba58SKoki Sanagi #undef TRACE_SYSTEM
3cf66ba58SKoki Sanagi #define TRACE_SYSTEM net
4cf66ba58SKoki Sanagi 
5cf66ba58SKoki Sanagi #if !defined(_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ)
6cf66ba58SKoki Sanagi #define _TRACE_NET_H
7cf66ba58SKoki Sanagi 
8cf66ba58SKoki Sanagi #include <linux/skbuff.h>
9cf66ba58SKoki Sanagi #include <linux/netdevice.h>
10d87d04a7SBen Hutchings #include <linux/if_vlan.h>
11cf66ba58SKoki Sanagi #include <linux/ip.h>
12cf66ba58SKoki Sanagi #include <linux/tracepoint.h>
13cf66ba58SKoki Sanagi 
14d87d04a7SBen Hutchings TRACE_EVENT(net_dev_start_xmit,
15d87d04a7SBen Hutchings 
16d87d04a7SBen Hutchings 	TP_PROTO(const struct sk_buff *skb, const struct net_device *dev),
17d87d04a7SBen Hutchings 
18d87d04a7SBen Hutchings 	TP_ARGS(skb, dev),
19d87d04a7SBen Hutchings 
20d87d04a7SBen Hutchings 	TP_STRUCT__entry(
21d87d04a7SBen Hutchings 		__string(	name,			dev->name	)
22d87d04a7SBen Hutchings 		__field(	u16,			queue_mapping	)
23d87d04a7SBen Hutchings 		__field(	const void *,		skbaddr		)
24d87d04a7SBen Hutchings 		__field(	bool,			vlan_tagged	)
25d87d04a7SBen Hutchings 		__field(	u16,			vlan_proto	)
26d87d04a7SBen Hutchings 		__field(	u16,			vlan_tci	)
27d87d04a7SBen Hutchings 		__field(	u16,			protocol	)
28d87d04a7SBen Hutchings 		__field(	u8,			ip_summed	)
29d87d04a7SBen Hutchings 		__field(	unsigned int,		len		)
30d87d04a7SBen Hutchings 		__field(	unsigned int,		data_len	)
31d87d04a7SBen Hutchings 		__field(	int,			network_offset	)
32d87d04a7SBen Hutchings 		__field(	bool,			transport_offset_valid)
33d87d04a7SBen Hutchings 		__field(	int,			transport_offset)
34d87d04a7SBen Hutchings 		__field(	u8,			tx_flags	)
35d87d04a7SBen Hutchings 		__field(	u16,			gso_size	)
36d87d04a7SBen Hutchings 		__field(	u16,			gso_segs	)
37d87d04a7SBen Hutchings 		__field(	u16,			gso_type	)
38d87d04a7SBen Hutchings 	),
39d87d04a7SBen Hutchings 
40d87d04a7SBen Hutchings 	TP_fast_assign(
41d87d04a7SBen Hutchings 		__assign_str(name, dev->name);
42d87d04a7SBen Hutchings 		__entry->queue_mapping = skb->queue_mapping;
43d87d04a7SBen Hutchings 		__entry->skbaddr = skb;
44df8a39deSJiri Pirko 		__entry->vlan_tagged = skb_vlan_tag_present(skb);
45d87d04a7SBen Hutchings 		__entry->vlan_proto = ntohs(skb->vlan_proto);
46df8a39deSJiri Pirko 		__entry->vlan_tci = skb_vlan_tag_get(skb);
47d87d04a7SBen Hutchings 		__entry->protocol = ntohs(skb->protocol);
48d87d04a7SBen Hutchings 		__entry->ip_summed = skb->ip_summed;
49d87d04a7SBen Hutchings 		__entry->len = skb->len;
50d87d04a7SBen Hutchings 		__entry->data_len = skb->data_len;
51d87d04a7SBen Hutchings 		__entry->network_offset = skb_network_offset(skb);
52d87d04a7SBen Hutchings 		__entry->transport_offset_valid =
53d87d04a7SBen Hutchings 			skb_transport_header_was_set(skb);
54*f88fcb1dSEric Dumazet 		__entry->transport_offset = skb_transport_header_was_set(skb) ?
55*f88fcb1dSEric Dumazet 			skb_transport_offset(skb) : 0;
56d87d04a7SBen Hutchings 		__entry->tx_flags = skb_shinfo(skb)->tx_flags;
57d87d04a7SBen Hutchings 		__entry->gso_size = skb_shinfo(skb)->gso_size;
58d87d04a7SBen Hutchings 		__entry->gso_segs = skb_shinfo(skb)->gso_segs;
59d87d04a7SBen Hutchings 		__entry->gso_type = skb_shinfo(skb)->gso_type;
60d87d04a7SBen Hutchings 	),
61d87d04a7SBen Hutchings 
62d87d04a7SBen Hutchings 	TP_printk("dev=%s queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
63d87d04a7SBen Hutchings 		  __get_str(name), __entry->queue_mapping, __entry->skbaddr,
64d87d04a7SBen Hutchings 		  __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci,
65d87d04a7SBen Hutchings 		  __entry->protocol, __entry->ip_summed, __entry->len,
66d87d04a7SBen Hutchings 		  __entry->data_len,
67d87d04a7SBen Hutchings 		  __entry->network_offset, __entry->transport_offset_valid,
68d87d04a7SBen Hutchings 		  __entry->transport_offset, __entry->tx_flags,
69d87d04a7SBen Hutchings 		  __entry->gso_size, __entry->gso_segs, __entry->gso_type)
70d87d04a7SBen Hutchings );
71d87d04a7SBen Hutchings 
72cf66ba58SKoki Sanagi TRACE_EVENT(net_dev_xmit,
73cf66ba58SKoki Sanagi 
74cf66ba58SKoki Sanagi 	TP_PROTO(struct sk_buff *skb,
75ec764bf0SKoki Sanagi 		 int rc,
76ec764bf0SKoki Sanagi 		 struct net_device *dev,
77ec764bf0SKoki Sanagi 		 unsigned int skb_len),
78cf66ba58SKoki Sanagi 
79ec764bf0SKoki Sanagi 	TP_ARGS(skb, rc, dev, skb_len),
80cf66ba58SKoki Sanagi 
81cf66ba58SKoki Sanagi 	TP_STRUCT__entry(
82cf66ba58SKoki Sanagi 		__field(	void *,		skbaddr		)
83cf66ba58SKoki Sanagi 		__field(	unsigned int,	len		)
84cf66ba58SKoki Sanagi 		__field(	int,		rc		)
85ec764bf0SKoki Sanagi 		__string(	name,		dev->name	)
86cf66ba58SKoki Sanagi 	),
87cf66ba58SKoki Sanagi 
88cf66ba58SKoki Sanagi 	TP_fast_assign(
89cf66ba58SKoki Sanagi 		__entry->skbaddr = skb;
90ec764bf0SKoki Sanagi 		__entry->len = skb_len;
91cf66ba58SKoki Sanagi 		__entry->rc = rc;
92ec764bf0SKoki Sanagi 		__assign_str(name, dev->name);
93cf66ba58SKoki Sanagi 	),
94cf66ba58SKoki Sanagi 
95cf66ba58SKoki Sanagi 	TP_printk("dev=%s skbaddr=%p len=%u rc=%d",
96cf66ba58SKoki Sanagi 		__get_str(name), __entry->skbaddr, __entry->len, __entry->rc)
97cf66ba58SKoki Sanagi );
98cf66ba58SKoki Sanagi 
99141b6b2aSCong Wang TRACE_EVENT(net_dev_xmit_timeout,
100141b6b2aSCong Wang 
101141b6b2aSCong Wang 	TP_PROTO(struct net_device *dev,
102141b6b2aSCong Wang 		 int queue_index),
103141b6b2aSCong Wang 
104141b6b2aSCong Wang 	TP_ARGS(dev, queue_index),
105141b6b2aSCong Wang 
106141b6b2aSCong Wang 	TP_STRUCT__entry(
107141b6b2aSCong Wang 		__string(	name,		dev->name	)
108141b6b2aSCong Wang 		__string(	driver,		netdev_drivername(dev))
109141b6b2aSCong Wang 		__field(	int,		queue_index	)
110141b6b2aSCong Wang 	),
111141b6b2aSCong Wang 
112141b6b2aSCong Wang 	TP_fast_assign(
113141b6b2aSCong Wang 		__assign_str(name, dev->name);
114141b6b2aSCong Wang 		__assign_str(driver, netdev_drivername(dev));
115141b6b2aSCong Wang 		__entry->queue_index = queue_index;
116141b6b2aSCong Wang 	),
117141b6b2aSCong Wang 
118141b6b2aSCong Wang 	TP_printk("dev=%s driver=%s queue=%d",
119141b6b2aSCong Wang 		__get_str(name), __get_str(driver), __entry->queue_index)
120141b6b2aSCong Wang );
121141b6b2aSCong Wang 
122cf66ba58SKoki Sanagi DECLARE_EVENT_CLASS(net_dev_template,
123cf66ba58SKoki Sanagi 
124cf66ba58SKoki Sanagi 	TP_PROTO(struct sk_buff *skb),
125cf66ba58SKoki Sanagi 
126cf66ba58SKoki Sanagi 	TP_ARGS(skb),
127cf66ba58SKoki Sanagi 
128cf66ba58SKoki Sanagi 	TP_STRUCT__entry(
129cf66ba58SKoki Sanagi 		__field(	void *,		skbaddr		)
130cf66ba58SKoki Sanagi 		__field(	unsigned int,	len		)
131cf66ba58SKoki Sanagi 		__string(	name,		skb->dev->name	)
132cf66ba58SKoki Sanagi 	),
133cf66ba58SKoki Sanagi 
134cf66ba58SKoki Sanagi 	TP_fast_assign(
135cf66ba58SKoki Sanagi 		__entry->skbaddr = skb;
136cf66ba58SKoki Sanagi 		__entry->len = skb->len;
137cf66ba58SKoki Sanagi 		__assign_str(name, skb->dev->name);
138cf66ba58SKoki Sanagi 	),
139cf66ba58SKoki Sanagi 
1406deb209dSSubash Abhinov Kasiviswanathan 	TP_printk("dev=%s skbaddr=%p len=%u",
141cf66ba58SKoki Sanagi 		__get_str(name), __entry->skbaddr, __entry->len)
142cf66ba58SKoki Sanagi )
143cf66ba58SKoki Sanagi 
144cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, net_dev_queue,
145cf66ba58SKoki Sanagi 
146cf66ba58SKoki Sanagi 	TP_PROTO(struct sk_buff *skb),
147cf66ba58SKoki Sanagi 
148cf66ba58SKoki Sanagi 	TP_ARGS(skb)
149cf66ba58SKoki Sanagi );
150cf66ba58SKoki Sanagi 
151cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, netif_receive_skb,
152cf66ba58SKoki Sanagi 
153cf66ba58SKoki Sanagi 	TP_PROTO(struct sk_buff *skb),
154cf66ba58SKoki Sanagi 
155cf66ba58SKoki Sanagi 	TP_ARGS(skb)
156cf66ba58SKoki Sanagi );
157cf66ba58SKoki Sanagi 
158cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, netif_rx,
159cf66ba58SKoki Sanagi 
160cf66ba58SKoki Sanagi 	TP_PROTO(struct sk_buff *skb),
161cf66ba58SKoki Sanagi 
162cf66ba58SKoki Sanagi 	TP_ARGS(skb)
163cf66ba58SKoki Sanagi );
164ae78dbfaSBen Hutchings 
165ae78dbfaSBen Hutchings DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
166ae78dbfaSBen Hutchings 
167ae78dbfaSBen Hutchings 	TP_PROTO(const struct sk_buff *skb),
168ae78dbfaSBen Hutchings 
169ae78dbfaSBen Hutchings 	TP_ARGS(skb),
170ae78dbfaSBen Hutchings 
171ae78dbfaSBen Hutchings 	TP_STRUCT__entry(
172ae78dbfaSBen Hutchings 		__string(	name,			skb->dev->name	)
173ae78dbfaSBen Hutchings 		__field(	unsigned int,		napi_id		)
174ae78dbfaSBen Hutchings 		__field(	u16,			queue_mapping	)
175ae78dbfaSBen Hutchings 		__field(	const void *,		skbaddr		)
176ae78dbfaSBen Hutchings 		__field(	bool,			vlan_tagged	)
177ae78dbfaSBen Hutchings 		__field(	u16,			vlan_proto	)
178ae78dbfaSBen Hutchings 		__field(	u16,			vlan_tci	)
179ae78dbfaSBen Hutchings 		__field(	u16,			protocol	)
180ae78dbfaSBen Hutchings 		__field(	u8,			ip_summed	)
18161b905daSTom Herbert 		__field(	u32,			hash		)
18261b905daSTom Herbert 		__field(	bool,			l4_hash		)
183ae78dbfaSBen Hutchings 		__field(	unsigned int,		len		)
184ae78dbfaSBen Hutchings 		__field(	unsigned int,		data_len	)
185ae78dbfaSBen Hutchings 		__field(	unsigned int,		truesize	)
186ae78dbfaSBen Hutchings 		__field(	bool,			mac_header_valid)
187ae78dbfaSBen Hutchings 		__field(	int,			mac_header	)
188ae78dbfaSBen Hutchings 		__field(	unsigned char,		nr_frags	)
189ae78dbfaSBen Hutchings 		__field(	u16,			gso_size	)
190ae78dbfaSBen Hutchings 		__field(	u16,			gso_type	)
191ae78dbfaSBen Hutchings 	),
192ae78dbfaSBen Hutchings 
193ae78dbfaSBen Hutchings 	TP_fast_assign(
194ae78dbfaSBen Hutchings 		__assign_str(name, skb->dev->name);
195ae78dbfaSBen Hutchings #ifdef CONFIG_NET_RX_BUSY_POLL
196ae78dbfaSBen Hutchings 		__entry->napi_id = skb->napi_id;
197ae78dbfaSBen Hutchings #else
198ae78dbfaSBen Hutchings 		__entry->napi_id = 0;
199ae78dbfaSBen Hutchings #endif
200ae78dbfaSBen Hutchings 		__entry->queue_mapping = skb->queue_mapping;
201ae78dbfaSBen Hutchings 		__entry->skbaddr = skb;
202df8a39deSJiri Pirko 		__entry->vlan_tagged = skb_vlan_tag_present(skb);
203ae78dbfaSBen Hutchings 		__entry->vlan_proto = ntohs(skb->vlan_proto);
204df8a39deSJiri Pirko 		__entry->vlan_tci = skb_vlan_tag_get(skb);
205ae78dbfaSBen Hutchings 		__entry->protocol = ntohs(skb->protocol);
206ae78dbfaSBen Hutchings 		__entry->ip_summed = skb->ip_summed;
20761b905daSTom Herbert 		__entry->hash = skb->hash;
20861b905daSTom Herbert 		__entry->l4_hash = skb->l4_hash;
209ae78dbfaSBen Hutchings 		__entry->len = skb->len;
210ae78dbfaSBen Hutchings 		__entry->data_len = skb->data_len;
211ae78dbfaSBen Hutchings 		__entry->truesize = skb->truesize;
212ae78dbfaSBen Hutchings 		__entry->mac_header_valid = skb_mac_header_was_set(skb);
213ae78dbfaSBen Hutchings 		__entry->mac_header = skb_mac_header(skb) - skb->data;
214ae78dbfaSBen Hutchings 		__entry->nr_frags = skb_shinfo(skb)->nr_frags;
215ae78dbfaSBen Hutchings 		__entry->gso_size = skb_shinfo(skb)->gso_size;
216ae78dbfaSBen Hutchings 		__entry->gso_type = skb_shinfo(skb)->gso_type;
217ae78dbfaSBen Hutchings 	),
218ae78dbfaSBen Hutchings 
21961b905daSTom Herbert 	TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
220ae78dbfaSBen Hutchings 		  __get_str(name), __entry->napi_id, __entry->queue_mapping,
221ae78dbfaSBen Hutchings 		  __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto,
222ae78dbfaSBen Hutchings 		  __entry->vlan_tci, __entry->protocol, __entry->ip_summed,
22361b905daSTom Herbert 		  __entry->hash, __entry->l4_hash, __entry->len,
224ae78dbfaSBen Hutchings 		  __entry->data_len, __entry->truesize,
225ae78dbfaSBen Hutchings 		  __entry->mac_header_valid, __entry->mac_header,
226ae78dbfaSBen Hutchings 		  __entry->nr_frags, __entry->gso_size, __entry->gso_type)
227ae78dbfaSBen Hutchings );
228ae78dbfaSBen Hutchings 
229ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry,
230ae78dbfaSBen Hutchings 
231ae78dbfaSBen Hutchings 	TP_PROTO(const struct sk_buff *skb),
232ae78dbfaSBen Hutchings 
233ae78dbfaSBen Hutchings 	TP_ARGS(skb)
234ae78dbfaSBen Hutchings );
235ae78dbfaSBen Hutchings 
236ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry,
237ae78dbfaSBen Hutchings 
238ae78dbfaSBen Hutchings 	TP_PROTO(const struct sk_buff *skb),
239ae78dbfaSBen Hutchings 
240ae78dbfaSBen Hutchings 	TP_ARGS(skb)
241ae78dbfaSBen Hutchings );
242ae78dbfaSBen Hutchings 
243ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry,
244ae78dbfaSBen Hutchings 
245ae78dbfaSBen Hutchings 	TP_PROTO(const struct sk_buff *skb),
246ae78dbfaSBen Hutchings 
247ae78dbfaSBen Hutchings 	TP_ARGS(skb)
248ae78dbfaSBen Hutchings );
249ae78dbfaSBen Hutchings 
250920572b7SEdward Cree DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_list_entry,
251920572b7SEdward Cree 
252920572b7SEdward Cree 	TP_PROTO(const struct sk_buff *skb),
253920572b7SEdward Cree 
254920572b7SEdward Cree 	TP_ARGS(skb)
255920572b7SEdward Cree );
256920572b7SEdward Cree 
257ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry,
258ae78dbfaSBen Hutchings 
259ae78dbfaSBen Hutchings 	TP_PROTO(const struct sk_buff *skb),
260ae78dbfaSBen Hutchings 
261ae78dbfaSBen Hutchings 	TP_ARGS(skb)
262ae78dbfaSBen Hutchings );
263ae78dbfaSBen Hutchings 
264b0e3f1bdSGeneviève Bastien DECLARE_EVENT_CLASS(net_dev_rx_exit_template,
265b0e3f1bdSGeneviève Bastien 
266b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
267b0e3f1bdSGeneviève Bastien 
268b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret),
269b0e3f1bdSGeneviève Bastien 
270b0e3f1bdSGeneviève Bastien 	TP_STRUCT__entry(
271b0e3f1bdSGeneviève Bastien 		__field(int,	ret)
272b0e3f1bdSGeneviève Bastien 	),
273b0e3f1bdSGeneviève Bastien 
274b0e3f1bdSGeneviève Bastien 	TP_fast_assign(
275b0e3f1bdSGeneviève Bastien 		__entry->ret = ret;
276b0e3f1bdSGeneviève Bastien 	),
277b0e3f1bdSGeneviève Bastien 
278b0e3f1bdSGeneviève Bastien 	TP_printk("ret=%d", __entry->ret)
279b0e3f1bdSGeneviève Bastien );
280b0e3f1bdSGeneviève Bastien 
281b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_frags_exit,
282b0e3f1bdSGeneviève Bastien 
283b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
284b0e3f1bdSGeneviève Bastien 
285b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret)
286b0e3f1bdSGeneviève Bastien );
287b0e3f1bdSGeneviève Bastien 
288b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_receive_exit,
289b0e3f1bdSGeneviève Bastien 
290b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
291b0e3f1bdSGeneviève Bastien 
292b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret)
293b0e3f1bdSGeneviève Bastien );
294b0e3f1bdSGeneviève Bastien 
295b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_exit,
296b0e3f1bdSGeneviève Bastien 
297b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
298b0e3f1bdSGeneviève Bastien 
299b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret)
300b0e3f1bdSGeneviève Bastien );
301b0e3f1bdSGeneviève Bastien 
302b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_exit,
303b0e3f1bdSGeneviève Bastien 
304b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
305b0e3f1bdSGeneviève Bastien 
306b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret)
307b0e3f1bdSGeneviève Bastien );
308b0e3f1bdSGeneviève Bastien 
309b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_list_exit,
310b0e3f1bdSGeneviève Bastien 
311b0e3f1bdSGeneviève Bastien 	TP_PROTO(int ret),
312b0e3f1bdSGeneviève Bastien 
313b0e3f1bdSGeneviève Bastien 	TP_ARGS(ret)
314b0e3f1bdSGeneviève Bastien );
315b0e3f1bdSGeneviève Bastien 
316cf66ba58SKoki Sanagi #endif /* _TRACE_NET_H */
317cf66ba58SKoki Sanagi 
318cf66ba58SKoki Sanagi /* This part must be outside protection */
319cf66ba58SKoki Sanagi #include <trace/define_trace.h>
320