1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2a67edbf4SDaniel Borkmann #undef TRACE_SYSTEM 3a67edbf4SDaniel Borkmann #define TRACE_SYSTEM xdp 4a67edbf4SDaniel Borkmann 5a67edbf4SDaniel Borkmann #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ) 6a67edbf4SDaniel Borkmann #define _TRACE_XDP_H 7a67edbf4SDaniel Borkmann 8a67edbf4SDaniel Borkmann #include <linux/netdevice.h> 9a67edbf4SDaniel Borkmann #include <linux/filter.h> 10a67edbf4SDaniel Borkmann #include <linux/tracepoint.h> 11a67edbf4SDaniel Borkmann 12a67edbf4SDaniel Borkmann #define __XDP_ACT_MAP(FN) \ 13a67edbf4SDaniel Borkmann FN(ABORTED) \ 14a67edbf4SDaniel Borkmann FN(DROP) \ 15a67edbf4SDaniel Borkmann FN(PASS) \ 165acaee0aSJohn Fastabend FN(TX) \ 175acaee0aSJohn Fastabend FN(REDIRECT) 18a67edbf4SDaniel Borkmann 19a67edbf4SDaniel Borkmann #define __XDP_ACT_TP_FN(x) \ 20a67edbf4SDaniel Borkmann TRACE_DEFINE_ENUM(XDP_##x); 21a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_FN(x) \ 22a67edbf4SDaniel Borkmann { XDP_##x, #x }, 23a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_TAB \ 24a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, 0 } 25a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_TP_FN) 26a67edbf4SDaniel Borkmann 27a67edbf4SDaniel Borkmann TRACE_EVENT(xdp_exception, 28a67edbf4SDaniel Borkmann 29a67edbf4SDaniel Borkmann TP_PROTO(const struct net_device *dev, 30a67edbf4SDaniel Borkmann const struct bpf_prog *xdp, u32 act), 31a67edbf4SDaniel Borkmann 32a67edbf4SDaniel Borkmann TP_ARGS(dev, xdp, act), 33a67edbf4SDaniel Borkmann 34a67edbf4SDaniel Borkmann TP_STRUCT__entry( 35b06337dfSJesper Dangaard Brouer __field(int, prog_id) 36a67edbf4SDaniel Borkmann __field(u32, act) 37315ec399SJesper Dangaard Brouer __field(int, ifindex) 38a67edbf4SDaniel Borkmann ), 39a67edbf4SDaniel Borkmann 40a67edbf4SDaniel Borkmann TP_fast_assign( 41b06337dfSJesper Dangaard Brouer __entry->prog_id = xdp->aux->id; 42a67edbf4SDaniel Borkmann __entry->act = act; 43315ec399SJesper Dangaard Brouer __entry->ifindex = dev->ifindex; 44a67edbf4SDaniel Borkmann ), 45a67edbf4SDaniel Borkmann 46b06337dfSJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d", 47b06337dfSJesper Dangaard Brouer __entry->prog_id, 48315ec399SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 49315ec399SJesper Dangaard Brouer __entry->ifindex) 50a67edbf4SDaniel Borkmann ); 51a67edbf4SDaniel Borkmann 528d3b778fSJesper 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, 568d3b778fSJesper Dangaard Brouer int to_ifindex, int err, 578d3b778fSJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 585acaee0aSJohn Fastabend 598d3b778fSJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 605acaee0aSJohn Fastabend 615acaee0aSJohn Fastabend TP_STRUCT__entry( 62b06337dfSJesper Dangaard Brouer __field(int, prog_id) 635acaee0aSJohn Fastabend __field(u32, act) 64a8735855SJesper Dangaard Brouer __field(int, ifindex) 654c03bdd7SJesper Dangaard Brouer __field(int, err) 668d3b778fSJesper Dangaard Brouer __field(int, to_ifindex) 678d3b778fSJesper Dangaard Brouer __field(u32, map_id) 688d3b778fSJesper Dangaard Brouer __field(int, map_index) 695acaee0aSJohn Fastabend ), 705acaee0aSJohn Fastabend 715acaee0aSJohn Fastabend TP_fast_assign( 72b06337dfSJesper Dangaard Brouer __entry->prog_id = xdp->aux->id; 73c31e5a48SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 74a8735855SJesper Dangaard Brouer __entry->ifindex = dev->ifindex; 754c03bdd7SJesper Dangaard Brouer __entry->err = err; 768d3b778fSJesper Dangaard Brouer __entry->to_ifindex = to_ifindex; 778d3b778fSJesper Dangaard Brouer __entry->map_id = map ? map->id : 0; 788d3b778fSJesper Dangaard Brouer __entry->map_index = map_index; 795acaee0aSJohn Fastabend ), 805acaee0aSJohn Fastabend 8159a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d", 82b06337dfSJesper Dangaard Brouer __entry->prog_id, 834c03bdd7SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 848d3b778fSJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 8559a30896SJesper Dangaard Brouer __entry->err) 865acaee0aSJohn Fastabend ); 878d3b778fSJesper Dangaard Brouer 888d3b778fSJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect, 898d3b778fSJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 908d3b778fSJesper Dangaard Brouer const struct bpf_prog *xdp, 918d3b778fSJesper Dangaard Brouer int to_ifindex, int err, 928d3b778fSJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 938d3b778fSJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index) 948d3b778fSJesper Dangaard Brouer ); 958d3b778fSJesper Dangaard Brouer 96f5836ca5SJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err, 97f5836ca5SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 98f5836ca5SJesper Dangaard Brouer const struct bpf_prog *xdp, 99f5836ca5SJesper Dangaard Brouer int to_ifindex, int err, 100f5836ca5SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 101f5836ca5SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index) 102f5836ca5SJesper Dangaard Brouer ); 1038d3b778fSJesper Dangaard Brouer 104f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect(dev, xdp, to) \ 105f5836ca5SJesper Dangaard Brouer trace_xdp_redirect(dev, xdp, to, 0, NULL, 0); 106f5836ca5SJesper Dangaard Brouer 107f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect_err(dev, xdp, to, err) \ 108f5836ca5SJesper Dangaard Brouer trace_xdp_redirect_err(dev, xdp, to, err, NULL, 0); 109f5836ca5SJesper Dangaard Brouer 11059a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map, 11159a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 11259a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 11359a30896SJesper Dangaard Brouer int to_ifindex, int err, 11459a30896SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 11559a30896SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 11659a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d" 11759a30896SJesper Dangaard Brouer " map_id=%d map_index=%d", 11859a30896SJesper Dangaard Brouer __entry->prog_id, 11959a30896SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 12059a30896SJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 12159a30896SJesper Dangaard Brouer __entry->err, 12259a30896SJesper Dangaard Brouer __entry->map_id, __entry->map_index) 12359a30896SJesper Dangaard Brouer ); 124f5836ca5SJesper Dangaard Brouer 12559a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map_err, 12659a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 12759a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 12859a30896SJesper Dangaard Brouer int to_ifindex, int err, 12959a30896SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 13059a30896SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 13159a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d" 13259a30896SJesper Dangaard Brouer " map_id=%d map_index=%d", 13359a30896SJesper Dangaard Brouer __entry->prog_id, 13459a30896SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 13559a30896SJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 13659a30896SJesper Dangaard Brouer __entry->err, 13759a30896SJesper Dangaard Brouer __entry->map_id, __entry->map_index) 13859a30896SJesper Dangaard Brouer ); 13959a30896SJesper Dangaard Brouer 14059a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map(dev, xdp, fwd, map, idx) \ 14159a30896SJesper Dangaard Brouer trace_xdp_redirect_map(dev, xdp, fwd ? fwd->ifindex : 0, \ 14296c5508eSJesper Dangaard Brouer 0, map, idx) 14359a30896SJesper Dangaard Brouer 14459a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map_err(dev, xdp, fwd, map, idx, err) \ 14559a30896SJesper Dangaard Brouer trace_xdp_redirect_map_err(dev, xdp, fwd ? fwd->ifindex : 0, \ 14696c5508eSJesper Dangaard Brouer err, map, idx) 1478d3b778fSJesper Dangaard Brouer 148a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 149a67edbf4SDaniel Borkmann 150a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 151