xref: /openbmc/linux/include/trace/events/xdp.h (revision 8d3b778ff544b369f0847e6c15f3e73057298aa4)
1a67edbf4SDaniel Borkmann #undef TRACE_SYSTEM
2a67edbf4SDaniel Borkmann #define TRACE_SYSTEM xdp
3a67edbf4SDaniel Borkmann 
4a67edbf4SDaniel Borkmann #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ)
5a67edbf4SDaniel Borkmann #define _TRACE_XDP_H
6a67edbf4SDaniel Borkmann 
7a67edbf4SDaniel Borkmann #include <linux/netdevice.h>
8a67edbf4SDaniel Borkmann #include <linux/filter.h>
9a67edbf4SDaniel Borkmann #include <linux/tracepoint.h>
10a67edbf4SDaniel Borkmann 
11a67edbf4SDaniel Borkmann #define __XDP_ACT_MAP(FN)	\
12a67edbf4SDaniel Borkmann 	FN(ABORTED)		\
13a67edbf4SDaniel Borkmann 	FN(DROP)		\
14a67edbf4SDaniel Borkmann 	FN(PASS)		\
155acaee0aSJohn Fastabend 	FN(TX)			\
165acaee0aSJohn Fastabend 	FN(REDIRECT)
17a67edbf4SDaniel Borkmann 
18a67edbf4SDaniel Borkmann #define __XDP_ACT_TP_FN(x)	\
19a67edbf4SDaniel Borkmann 	TRACE_DEFINE_ENUM(XDP_##x);
20a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_FN(x)	\
21a67edbf4SDaniel Borkmann 	{ XDP_##x, #x },
22a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_TAB	\
23a67edbf4SDaniel Borkmann 	__XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, 0 }
24a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_TP_FN)
25a67edbf4SDaniel Borkmann 
26a67edbf4SDaniel Borkmann TRACE_EVENT(xdp_exception,
27a67edbf4SDaniel Borkmann 
28a67edbf4SDaniel Borkmann 	TP_PROTO(const struct net_device *dev,
29a67edbf4SDaniel Borkmann 		 const struct bpf_prog *xdp, u32 act),
30a67edbf4SDaniel Borkmann 
31a67edbf4SDaniel Borkmann 	TP_ARGS(dev, xdp, act),
32a67edbf4SDaniel Borkmann 
33a67edbf4SDaniel Borkmann 	TP_STRUCT__entry(
34a67edbf4SDaniel Borkmann 		__array(u8, prog_tag, 8)
35a67edbf4SDaniel Borkmann 		__field(u32, act)
36315ec399SJesper Dangaard Brouer 		__field(int, ifindex)
37a67edbf4SDaniel Borkmann 	),
38a67edbf4SDaniel Borkmann 
39a67edbf4SDaniel Borkmann 	TP_fast_assign(
40a67edbf4SDaniel Borkmann 		BUILD_BUG_ON(sizeof(__entry->prog_tag) != sizeof(xdp->tag));
41a67edbf4SDaniel Borkmann 		memcpy(__entry->prog_tag, xdp->tag, sizeof(xdp->tag));
42a67edbf4SDaniel Borkmann 		__entry->act		= act;
43315ec399SJesper Dangaard Brouer 		__entry->ifindex	= dev->ifindex;
44a67edbf4SDaniel Borkmann 	),
45a67edbf4SDaniel Borkmann 
46315ec399SJesper Dangaard Brouer 	TP_printk("prog=%s action=%s ifindex=%d",
47a67edbf4SDaniel Borkmann 		  __print_hex_str(__entry->prog_tag, 8),
48315ec399SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
49315ec399SJesper Dangaard Brouer 		  __entry->ifindex)
50a67edbf4SDaniel Borkmann );
51a67edbf4SDaniel Borkmann 
52*8d3b778fSJesper Dangaard Brouer DECLARE_EVENT_CLASS(xdp_redirect_template,
535acaee0aSJohn Fastabend 
54a8735855SJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
55c31e5a48SJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
56*8d3b778fSJesper Dangaard Brouer 		 int to_ifindex, int err,
57*8d3b778fSJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
585acaee0aSJohn Fastabend 
59*8d3b778fSJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index),
605acaee0aSJohn Fastabend 
615acaee0aSJohn Fastabend 	TP_STRUCT__entry(
625acaee0aSJohn Fastabend 		__array(u8, prog_tag, 8)
635acaee0aSJohn Fastabend 		__field(u32, act)
64a8735855SJesper Dangaard Brouer 		__field(int, ifindex)
654c03bdd7SJesper Dangaard Brouer 		__field(int, err)
66*8d3b778fSJesper Dangaard Brouer 		__field(int, to_ifindex)
67*8d3b778fSJesper Dangaard Brouer 		__field(u32, map_id)
68*8d3b778fSJesper Dangaard Brouer 		__field(int, map_index)
695acaee0aSJohn Fastabend 	),
705acaee0aSJohn Fastabend 
715acaee0aSJohn Fastabend 	TP_fast_assign(
725acaee0aSJohn Fastabend 		BUILD_BUG_ON(sizeof(__entry->prog_tag) != sizeof(xdp->tag));
735acaee0aSJohn Fastabend 		memcpy(__entry->prog_tag, xdp->tag, sizeof(xdp->tag));
74c31e5a48SJesper Dangaard Brouer 		__entry->act		= XDP_REDIRECT;
75a8735855SJesper Dangaard Brouer 		__entry->ifindex	= dev->ifindex;
764c03bdd7SJesper Dangaard Brouer 		__entry->err		= err;
77*8d3b778fSJesper Dangaard Brouer 		__entry->to_ifindex	= to_ifindex;
78*8d3b778fSJesper Dangaard Brouer 		__entry->map_id		= map ? map->id : 0;
79*8d3b778fSJesper Dangaard Brouer 		__entry->map_index	= map_index;
805acaee0aSJohn Fastabend 	),
815acaee0aSJohn Fastabend 
82*8d3b778fSJesper Dangaard Brouer 	TP_printk("prog=%s action=%s ifindex=%d to_ifindex=%d err=%d"
83*8d3b778fSJesper Dangaard Brouer 		  " map_id=%d map_index=%d",
845acaee0aSJohn Fastabend 		  __print_hex_str(__entry->prog_tag, 8),
854c03bdd7SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
86*8d3b778fSJesper Dangaard Brouer 		  __entry->ifindex, __entry->to_ifindex,
87*8d3b778fSJesper Dangaard Brouer 		  __entry->err,
88*8d3b778fSJesper Dangaard Brouer 		  __entry->map_id, __entry->map_index)
895acaee0aSJohn Fastabend );
90*8d3b778fSJesper Dangaard Brouer 
91*8d3b778fSJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect,
92*8d3b778fSJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
93*8d3b778fSJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
94*8d3b778fSJesper Dangaard Brouer 		 int to_ifindex, int err,
95*8d3b778fSJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
96*8d3b778fSJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index)
97*8d3b778fSJesper Dangaard Brouer );
98*8d3b778fSJesper Dangaard Brouer 
99*8d3b778fSJesper Dangaard Brouer #define _trace_xdp_redirect(dev, xdp, to, err)	\
100*8d3b778fSJesper Dangaard Brouer 	 trace_xdp_redirect(dev, xdp, to, err, NULL, 0);
101*8d3b778fSJesper Dangaard Brouer 
102*8d3b778fSJesper Dangaard Brouer #define trace_xdp_redirect_map(dev, xdp, fwd, err, map, idx)	\
103*8d3b778fSJesper Dangaard Brouer 	trace_xdp_redirect(dev, xdp, fwd ? fwd->ifindex : 0, err, map, idx);
104*8d3b778fSJesper Dangaard Brouer 
105a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */
106a67edbf4SDaniel Borkmann 
107a67edbf4SDaniel Borkmann #include <trace/define_trace.h>
108