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) \ 15*5acaee0aSJohn Fastabend FN(TX) \ 16*5acaee0aSJohn 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 __string(name, dev->name) 35a67edbf4SDaniel Borkmann __array(u8, prog_tag, 8) 36a67edbf4SDaniel Borkmann __field(u32, act) 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 __assign_str(name, dev->name); 43a67edbf4SDaniel Borkmann __entry->act = act; 44a67edbf4SDaniel Borkmann ), 45a67edbf4SDaniel Borkmann 46a67edbf4SDaniel Borkmann TP_printk("prog=%s device=%s action=%s", 47a67edbf4SDaniel Borkmann __print_hex_str(__entry->prog_tag, 8), 48a67edbf4SDaniel Borkmann __get_str(name), 49a67edbf4SDaniel Borkmann __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB)) 50a67edbf4SDaniel Borkmann ); 51a67edbf4SDaniel Borkmann 52*5acaee0aSJohn Fastabend TRACE_EVENT(xdp_redirect, 53*5acaee0aSJohn Fastabend 54*5acaee0aSJohn Fastabend TP_PROTO(const struct net_device *from, 55*5acaee0aSJohn Fastabend const struct net_device *to, 56*5acaee0aSJohn Fastabend const struct bpf_prog *xdp, u32 act), 57*5acaee0aSJohn Fastabend 58*5acaee0aSJohn Fastabend TP_ARGS(from, to, xdp, act), 59*5acaee0aSJohn Fastabend 60*5acaee0aSJohn Fastabend TP_STRUCT__entry( 61*5acaee0aSJohn Fastabend __string(name_from, from->name) 62*5acaee0aSJohn Fastabend __string(name_to, to->name) 63*5acaee0aSJohn Fastabend __array(u8, prog_tag, 8) 64*5acaee0aSJohn Fastabend __field(u32, act) 65*5acaee0aSJohn Fastabend ), 66*5acaee0aSJohn Fastabend 67*5acaee0aSJohn Fastabend TP_fast_assign( 68*5acaee0aSJohn Fastabend BUILD_BUG_ON(sizeof(__entry->prog_tag) != sizeof(xdp->tag)); 69*5acaee0aSJohn Fastabend memcpy(__entry->prog_tag, xdp->tag, sizeof(xdp->tag)); 70*5acaee0aSJohn Fastabend __assign_str(name_from, from->name); 71*5acaee0aSJohn Fastabend __assign_str(name_to, to->name); 72*5acaee0aSJohn Fastabend __entry->act = act; 73*5acaee0aSJohn Fastabend ), 74*5acaee0aSJohn Fastabend 75*5acaee0aSJohn Fastabend TP_printk("prog=%s from=%s to=%s action=%s", 76*5acaee0aSJohn Fastabend __print_hex_str(__entry->prog_tag, 8), 77*5acaee0aSJohn Fastabend __get_str(name_from), __get_str(name_to), 78*5acaee0aSJohn Fastabend __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB)) 79*5acaee0aSJohn Fastabend ); 80a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 81a67edbf4SDaniel Borkmann 82a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 83