LCOV - code coverage report
Current view: top level - include/trace/events - xdp.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 13 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 43 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #undef TRACE_SYSTEM
       3             : #define TRACE_SYSTEM xdp
       4             : 
       5             : #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ)
       6             : #define _TRACE_XDP_H
       7             : 
       8             : #include <linux/netdevice.h>
       9             : #include <linux/filter.h>
      10             : #include <linux/tracepoint.h>
      11             : #include <linux/bpf.h>
      12             : 
      13             : #define __XDP_ACT_MAP(FN)       \
      14             :         FN(ABORTED)             \
      15             :         FN(DROP)                \
      16             :         FN(PASS)                \
      17             :         FN(TX)                  \
      18             :         FN(REDIRECT)
      19             : 
      20             : #define __XDP_ACT_TP_FN(x)      \
      21             :         TRACE_DEFINE_ENUM(XDP_##x);
      22             : #define __XDP_ACT_SYM_FN(x)     \
      23             :         { XDP_##x, #x },
      24             : #define __XDP_ACT_SYM_TAB       \
      25             :         __XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, NULL }
      26             : __XDP_ACT_MAP(__XDP_ACT_TP_FN)
      27             : 
      28           0 : TRACE_EVENT(xdp_exception,
      29             : 
      30             :         TP_PROTO(const struct net_device *dev,
      31             :                  const struct bpf_prog *xdp, u32 act),
      32             : 
      33             :         TP_ARGS(dev, xdp, act),
      34             : 
      35             :         TP_STRUCT__entry(
      36             :                 __field(int, prog_id)
      37             :                 __field(u32, act)
      38             :                 __field(int, ifindex)
      39             :         ),
      40             : 
      41             :         TP_fast_assign(
      42             :                 __entry->prog_id     = xdp->aux->id;
      43             :                 __entry->act         = act;
      44             :                 __entry->ifindex     = dev->ifindex;
      45             :         ),
      46             : 
      47             :         TP_printk("prog_id=%d action=%s ifindex=%d",
      48             :                   __entry->prog_id,
      49             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
      50             :                   __entry->ifindex)
      51             : );
      52             : 
      53           0 : TRACE_EVENT(xdp_bulk_tx,
      54             : 
      55             :         TP_PROTO(const struct net_device *dev,
      56             :                  int sent, int drops, int err),
      57             : 
      58             :         TP_ARGS(dev, sent, drops, err),
      59             : 
      60             :         TP_STRUCT__entry(
      61             :                 __field(int, ifindex)
      62             :                 __field(u32, act)
      63             :                 __field(int, drops)
      64             :                 __field(int, sent)
      65             :                 __field(int, err)
      66             :         ),
      67             : 
      68             :         TP_fast_assign(
      69             :                 __entry->ifindex     = dev->ifindex;
      70             :                 __entry->act         = XDP_TX;
      71             :                 __entry->drops               = drops;
      72             :                 __entry->sent                = sent;
      73             :                 __entry->err         = err;
      74             :         ),
      75             : 
      76             :         TP_printk("ifindex=%d action=%s sent=%d drops=%d err=%d",
      77             :                   __entry->ifindex,
      78             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
      79             :                   __entry->sent, __entry->drops, __entry->err)
      80             : );
      81             : 
      82             : #ifndef __DEVMAP_OBJ_TYPE
      83             : #define __DEVMAP_OBJ_TYPE
      84             : struct _bpf_dtab_netdev {
      85             :         struct net_device *dev;
      86             : };
      87             : #endif /* __DEVMAP_OBJ_TYPE */
      88             : 
      89             : #define devmap_ifindex(tgt, map)                                \
      90             :         (((map->map_type == BPF_MAP_TYPE_DEVMAP ||   \
      91             :                   map->map_type == BPF_MAP_TYPE_DEVMAP_HASH)) ? \
      92             :           ((struct _bpf_dtab_netdev *)tgt)->dev->ifindex : 0)
      93             : 
      94           0 : DECLARE_EVENT_CLASS(xdp_redirect_template,
      95             : 
      96             :         TP_PROTO(const struct net_device *dev,
      97             :                  const struct bpf_prog *xdp,
      98             :                  const void *tgt, int err,
      99             :                  const struct bpf_map *map, u32 index),
     100             : 
     101             :         TP_ARGS(dev, xdp, tgt, err, map, index),
     102             : 
     103             :         TP_STRUCT__entry(
     104             :                 __field(int, prog_id)
     105             :                 __field(u32, act)
     106             :                 __field(int, ifindex)
     107             :                 __field(int, err)
     108             :                 __field(int, to_ifindex)
     109             :                 __field(u32, map_id)
     110             :                 __field(int, map_index)
     111             :         ),
     112             : 
     113             :         TP_fast_assign(
     114             :                 __entry->prog_id     = xdp->aux->id;
     115             :                 __entry->act         = XDP_REDIRECT;
     116             :                 __entry->ifindex     = dev->ifindex;
     117             :                 __entry->err         = err;
     118             :                 __entry->to_ifindex  = map ? devmap_ifindex(tgt, map) :
     119             :                                                 index;
     120             :                 __entry->map_id              = map ? map->id : 0;
     121             :                 __entry->map_index   = map ? index : 0;
     122             :         ),
     123             : 
     124             :         TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d"
     125             :                   " map_id=%d map_index=%d",
     126             :                   __entry->prog_id,
     127             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     128             :                   __entry->ifindex, __entry->to_ifindex,
     129             :                   __entry->err, __entry->map_id, __entry->map_index)
     130             : );
     131             : 
     132           0 : DEFINE_EVENT(xdp_redirect_template, xdp_redirect,
     133             :         TP_PROTO(const struct net_device *dev,
     134             :                  const struct bpf_prog *xdp,
     135             :                  const void *tgt, int err,
     136             :                  const struct bpf_map *map, u32 index),
     137             :         TP_ARGS(dev, xdp, tgt, err, map, index)
     138             : );
     139             : 
     140           0 : DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err,
     141             :         TP_PROTO(const struct net_device *dev,
     142             :                  const struct bpf_prog *xdp,
     143             :                  const void *tgt, int err,
     144             :                  const struct bpf_map *map, u32 index),
     145             :         TP_ARGS(dev, xdp, tgt, err, map, index)
     146             : );
     147             : 
     148             : #define _trace_xdp_redirect(dev, xdp, to)                               \
     149             :          trace_xdp_redirect(dev, xdp, NULL, 0, NULL, to)
     150             : 
     151             : #define _trace_xdp_redirect_err(dev, xdp, to, err)                      \
     152             :          trace_xdp_redirect_err(dev, xdp, NULL, err, NULL, to)
     153             : 
     154             : #define _trace_xdp_redirect_map(dev, xdp, to, map, index)               \
     155             :          trace_xdp_redirect(dev, xdp, to, 0, map, index)
     156             : 
     157             : #define _trace_xdp_redirect_map_err(dev, xdp, to, map, index, err)      \
     158             :          trace_xdp_redirect_err(dev, xdp, to, err, map, index)
     159             : 
     160             : /* not used anymore, but kept around so as not to break old programs */
     161           0 : DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map,
     162             :         TP_PROTO(const struct net_device *dev,
     163             :                  const struct bpf_prog *xdp,
     164             :                  const void *tgt, int err,
     165             :                  const struct bpf_map *map, u32 index),
     166             :         TP_ARGS(dev, xdp, tgt, err, map, index)
     167             : );
     168             : 
     169           0 : DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map_err,
     170             :         TP_PROTO(const struct net_device *dev,
     171             :                  const struct bpf_prog *xdp,
     172             :                  const void *tgt, int err,
     173             :                  const struct bpf_map *map, u32 index),
     174             :         TP_ARGS(dev, xdp, tgt, err, map, index)
     175             : );
     176             : 
     177           0 : TRACE_EVENT(xdp_cpumap_kthread,
     178             : 
     179             :         TP_PROTO(int map_id, unsigned int processed,  unsigned int drops,
     180             :                  int sched, struct xdp_cpumap_stats *xdp_stats),
     181             : 
     182             :         TP_ARGS(map_id, processed, drops, sched, xdp_stats),
     183             : 
     184             :         TP_STRUCT__entry(
     185             :                 __field(int, map_id)
     186             :                 __field(u32, act)
     187             :                 __field(int, cpu)
     188             :                 __field(unsigned int, drops)
     189             :                 __field(unsigned int, processed)
     190             :                 __field(int, sched)
     191             :                 __field(unsigned int, xdp_pass)
     192             :                 __field(unsigned int, xdp_drop)
     193             :                 __field(unsigned int, xdp_redirect)
     194             :         ),
     195             : 
     196             :         TP_fast_assign(
     197             :                 __entry->map_id              = map_id;
     198             :                 __entry->act         = XDP_REDIRECT;
     199             :                 __entry->cpu         = smp_processor_id();
     200             :                 __entry->drops               = drops;
     201             :                 __entry->processed   = processed;
     202             :                 __entry->sched       = sched;
     203             :                 __entry->xdp_pass    = xdp_stats->pass;
     204             :                 __entry->xdp_drop    = xdp_stats->drop;
     205             :                 __entry->xdp_redirect        = xdp_stats->redirect;
     206             :         ),
     207             : 
     208             :         TP_printk("kthread"
     209             :                   " cpu=%d map_id=%d action=%s"
     210             :                   " processed=%u drops=%u"
     211             :                   " sched=%d"
     212             :                   " xdp_pass=%u xdp_drop=%u xdp_redirect=%u",
     213             :                   __entry->cpu, __entry->map_id,
     214             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     215             :                   __entry->processed, __entry->drops,
     216             :                   __entry->sched,
     217             :                   __entry->xdp_pass, __entry->xdp_drop, __entry->xdp_redirect)
     218             : );
     219             : 
     220           0 : TRACE_EVENT(xdp_cpumap_enqueue,
     221             : 
     222             :         TP_PROTO(int map_id, unsigned int processed,  unsigned int drops,
     223             :                  int to_cpu),
     224             : 
     225             :         TP_ARGS(map_id, processed, drops, to_cpu),
     226             : 
     227             :         TP_STRUCT__entry(
     228             :                 __field(int, map_id)
     229             :                 __field(u32, act)
     230             :                 __field(int, cpu)
     231             :                 __field(unsigned int, drops)
     232             :                 __field(unsigned int, processed)
     233             :                 __field(int, to_cpu)
     234             :         ),
     235             : 
     236             :         TP_fast_assign(
     237             :                 __entry->map_id              = map_id;
     238             :                 __entry->act         = XDP_REDIRECT;
     239             :                 __entry->cpu         = smp_processor_id();
     240             :                 __entry->drops               = drops;
     241             :                 __entry->processed   = processed;
     242             :                 __entry->to_cpu              = to_cpu;
     243             :         ),
     244             : 
     245             :         TP_printk("enqueue"
     246             :                   " cpu=%d map_id=%d action=%s"
     247             :                   " processed=%u drops=%u"
     248             :                   " to_cpu=%d",
     249             :                   __entry->cpu, __entry->map_id,
     250             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     251             :                   __entry->processed, __entry->drops,
     252             :                   __entry->to_cpu)
     253             : );
     254             : 
     255           0 : TRACE_EVENT(xdp_devmap_xmit,
     256             : 
     257             :         TP_PROTO(const struct net_device *from_dev,
     258             :                  const struct net_device *to_dev,
     259             :                  int sent, int drops, int err),
     260             : 
     261             :         TP_ARGS(from_dev, to_dev, sent, drops, err),
     262             : 
     263             :         TP_STRUCT__entry(
     264             :                 __field(int, from_ifindex)
     265             :                 __field(u32, act)
     266             :                 __field(int, to_ifindex)
     267             :                 __field(int, drops)
     268             :                 __field(int, sent)
     269             :                 __field(int, err)
     270             :         ),
     271             : 
     272             :         TP_fast_assign(
     273             :                 __entry->from_ifindex        = from_dev->ifindex;
     274             :                 __entry->act         = XDP_REDIRECT;
     275             :                 __entry->to_ifindex  = to_dev->ifindex;
     276             :                 __entry->drops               = drops;
     277             :                 __entry->sent                = sent;
     278             :                 __entry->err         = err;
     279             :         ),
     280             : 
     281             :         TP_printk("ndo_xdp_xmit"
     282             :                   " from_ifindex=%d to_ifindex=%d action=%s"
     283             :                   " sent=%d drops=%d"
     284             :                   " err=%d",
     285             :                   __entry->from_ifindex, __entry->to_ifindex,
     286             :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     287             :                   __entry->sent, __entry->drops,
     288             :                   __entry->err)
     289             : );
     290             : 
     291             : /* Expect users already include <net/xdp.h>, but not xdp_priv.h */
     292             : #include <net/xdp_priv.h>
     293             : 
     294             : #define __MEM_TYPE_MAP(FN)      \
     295             :         FN(PAGE_SHARED)         \
     296             :         FN(PAGE_ORDER0)         \
     297             :         FN(PAGE_POOL)           \
     298             :         FN(XSK_BUFF_POOL)
     299             : 
     300             : #define __MEM_TYPE_TP_FN(x)     \
     301             :         TRACE_DEFINE_ENUM(MEM_TYPE_##x);
     302             : #define __MEM_TYPE_SYM_FN(x)    \
     303             :         { MEM_TYPE_##x, #x },
     304             : #define __MEM_TYPE_SYM_TAB      \
     305             :         __MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 }
     306             : __MEM_TYPE_MAP(__MEM_TYPE_TP_FN)
     307             : 
     308           0 : TRACE_EVENT(mem_disconnect,
     309             : 
     310             :         TP_PROTO(const struct xdp_mem_allocator *xa),
     311             : 
     312             :         TP_ARGS(xa),
     313             : 
     314             :         TP_STRUCT__entry(
     315             :                 __field(const struct xdp_mem_allocator *,       xa)
     316             :                 __field(u32,            mem_id)
     317             :                 __field(u32,            mem_type)
     318             :                 __field(const void *,   allocator)
     319             :         ),
     320             : 
     321             :         TP_fast_assign(
     322             :                 __entry->xa          = xa;
     323             :                 __entry->mem_id              = xa->mem.id;
     324             :                 __entry->mem_type    = xa->mem.type;
     325             :                 __entry->allocator   = xa->allocator;
     326             :         ),
     327             : 
     328             :         TP_printk("mem_id=%d mem_type=%s allocator=%p",
     329             :                   __entry->mem_id,
     330             :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     331             :                   __entry->allocator
     332             :         )
     333             : );
     334             : 
     335           0 : TRACE_EVENT(mem_connect,
     336             : 
     337             :         TP_PROTO(const struct xdp_mem_allocator *xa,
     338             :                  const struct xdp_rxq_info *rxq),
     339             : 
     340             :         TP_ARGS(xa, rxq),
     341             : 
     342             :         TP_STRUCT__entry(
     343             :                 __field(const struct xdp_mem_allocator *,       xa)
     344             :                 __field(u32,            mem_id)
     345             :                 __field(u32,            mem_type)
     346             :                 __field(const void *,   allocator)
     347             :                 __field(const struct xdp_rxq_info *,            rxq)
     348             :                 __field(int,            ifindex)
     349             :         ),
     350             : 
     351             :         TP_fast_assign(
     352             :                 __entry->xa          = xa;
     353             :                 __entry->mem_id              = xa->mem.id;
     354             :                 __entry->mem_type    = xa->mem.type;
     355             :                 __entry->allocator   = xa->allocator;
     356             :                 __entry->rxq         = rxq;
     357             :                 __entry->ifindex     = rxq->dev->ifindex;
     358             :         ),
     359             : 
     360             :         TP_printk("mem_id=%d mem_type=%s allocator=%p"
     361             :                   " ifindex=%d",
     362             :                   __entry->mem_id,
     363             :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     364             :                   __entry->allocator,
     365             :                   __entry->ifindex
     366             :         )
     367             : );
     368             : 
     369           0 : TRACE_EVENT(mem_return_failed,
     370             : 
     371             :         TP_PROTO(const struct xdp_mem_info *mem,
     372             :                  const struct page *page),
     373             : 
     374             :         TP_ARGS(mem, page),
     375             : 
     376             :         TP_STRUCT__entry(
     377             :                 __field(const struct page *,    page)
     378             :                 __field(u32,            mem_id)
     379             :                 __field(u32,            mem_type)
     380             :         ),
     381             : 
     382             :         TP_fast_assign(
     383             :                 __entry->page                = page;
     384             :                 __entry->mem_id              = mem->id;
     385             :                 __entry->mem_type    = mem->type;
     386             :         ),
     387             : 
     388             :         TP_printk("mem_id=%d mem_type=%s page=%p",
     389             :                   __entry->mem_id,
     390             :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     391             :                   __entry->page
     392             :         )
     393             : );
     394             : 
     395             : #endif /* _TRACE_XDP_H */
     396             : 
     397             : #include <trace/define_trace.h>

Generated by: LCOV version 1.14