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 525acaee0aSJohn Fastabend TRACE_EVENT(xdp_redirect, 535acaee0aSJohn Fastabend 54a8735855SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 55*c31e5a48SJesper Dangaard Brouer const struct bpf_prog *xdp, 56a8735855SJesper Dangaard Brouer int to_index, int err), 575acaee0aSJohn Fastabend 58*c31e5a48SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_index, err), 595acaee0aSJohn Fastabend 605acaee0aSJohn Fastabend TP_STRUCT__entry( 615acaee0aSJohn Fastabend __array(u8, prog_tag, 8) 625acaee0aSJohn Fastabend __field(u32, act) 63a8735855SJesper Dangaard Brouer __field(int, ifindex) 64a8735855SJesper Dangaard Brouer __field(int, to_index) 654c03bdd7SJesper Dangaard Brouer __field(int, err) 665acaee0aSJohn Fastabend ), 675acaee0aSJohn Fastabend 685acaee0aSJohn Fastabend TP_fast_assign( 695acaee0aSJohn Fastabend BUILD_BUG_ON(sizeof(__entry->prog_tag) != sizeof(xdp->tag)); 705acaee0aSJohn Fastabend memcpy(__entry->prog_tag, xdp->tag, sizeof(xdp->tag)); 71*c31e5a48SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 72a8735855SJesper Dangaard Brouer __entry->ifindex = dev->ifindex; 73a8735855SJesper Dangaard Brouer __entry->to_index = to_index; 744c03bdd7SJesper Dangaard Brouer __entry->err = err; 755acaee0aSJohn Fastabend ), 765acaee0aSJohn Fastabend 77a8735855SJesper Dangaard Brouer TP_printk("prog=%s action=%s ifindex=%d to_index=%d err=%d", 785acaee0aSJohn Fastabend __print_hex_str(__entry->prog_tag, 8), 794c03bdd7SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 80a8735855SJesper Dangaard Brouer __entry->ifindex, __entry->to_index, 814c03bdd7SJesper Dangaard Brouer __entry->err) 825acaee0aSJohn Fastabend ); 83a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 84a67edbf4SDaniel Borkmann 85a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 86