1*a67edbf4SDaniel Borkmann #undef TRACE_SYSTEM 2*a67edbf4SDaniel Borkmann #define TRACE_SYSTEM xdp 3*a67edbf4SDaniel Borkmann 4*a67edbf4SDaniel Borkmann #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ) 5*a67edbf4SDaniel Borkmann #define _TRACE_XDP_H 6*a67edbf4SDaniel Borkmann 7*a67edbf4SDaniel Borkmann #include <linux/netdevice.h> 8*a67edbf4SDaniel Borkmann #include <linux/filter.h> 9*a67edbf4SDaniel Borkmann #include <linux/tracepoint.h> 10*a67edbf4SDaniel Borkmann 11*a67edbf4SDaniel Borkmann #define __XDP_ACT_MAP(FN) \ 12*a67edbf4SDaniel Borkmann FN(ABORTED) \ 13*a67edbf4SDaniel Borkmann FN(DROP) \ 14*a67edbf4SDaniel Borkmann FN(PASS) \ 15*a67edbf4SDaniel Borkmann FN(TX) 16*a67edbf4SDaniel Borkmann 17*a67edbf4SDaniel Borkmann #define __XDP_ACT_TP_FN(x) \ 18*a67edbf4SDaniel Borkmann TRACE_DEFINE_ENUM(XDP_##x); 19*a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_FN(x) \ 20*a67edbf4SDaniel Borkmann { XDP_##x, #x }, 21*a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_TAB \ 22*a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, 0 } 23*a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_TP_FN) 24*a67edbf4SDaniel Borkmann 25*a67edbf4SDaniel Borkmann TRACE_EVENT(xdp_exception, 26*a67edbf4SDaniel Borkmann 27*a67edbf4SDaniel Borkmann TP_PROTO(const struct net_device *dev, 28*a67edbf4SDaniel Borkmann const struct bpf_prog *xdp, u32 act), 29*a67edbf4SDaniel Borkmann 30*a67edbf4SDaniel Borkmann TP_ARGS(dev, xdp, act), 31*a67edbf4SDaniel Borkmann 32*a67edbf4SDaniel Borkmann TP_STRUCT__entry( 33*a67edbf4SDaniel Borkmann __string(name, dev->name) 34*a67edbf4SDaniel Borkmann __array(u8, prog_tag, 8) 35*a67edbf4SDaniel Borkmann __field(u32, act) 36*a67edbf4SDaniel Borkmann ), 37*a67edbf4SDaniel Borkmann 38*a67edbf4SDaniel Borkmann TP_fast_assign( 39*a67edbf4SDaniel Borkmann BUILD_BUG_ON(sizeof(__entry->prog_tag) != sizeof(xdp->tag)); 40*a67edbf4SDaniel Borkmann memcpy(__entry->prog_tag, xdp->tag, sizeof(xdp->tag)); 41*a67edbf4SDaniel Borkmann __assign_str(name, dev->name); 42*a67edbf4SDaniel Borkmann __entry->act = act; 43*a67edbf4SDaniel Borkmann ), 44*a67edbf4SDaniel Borkmann 45*a67edbf4SDaniel Borkmann TP_printk("prog=%s device=%s action=%s", 46*a67edbf4SDaniel Borkmann __print_hex_str(__entry->prog_tag, 8), 47*a67edbf4SDaniel Borkmann __get_str(name), 48*a67edbf4SDaniel Borkmann __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB)) 49*a67edbf4SDaniel Borkmann ); 50*a67edbf4SDaniel Borkmann 51*a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 52*a67edbf4SDaniel Borkmann 53*a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 54