LCOV - code coverage report
Current view: top level - include/trace/events - xdp.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 11 0.0 %
Date: 2022-03-28 15:32:58 Functions: 0 32 0.0 %
Branches: 0 84 0.0 %

           Branch data     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                 :            : 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                 :            : 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),
     181                 :            : 
     182                 :            :         TP_ARGS(map_id, processed, drops, sched),
     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                 :            :         ),
     192                 :            : 
     193                 :            :         TP_fast_assign(
     194                 :            :                 __entry->map_id              = map_id;
     195                 :            :                 __entry->act         = XDP_REDIRECT;
     196                 :            :                 __entry->cpu         = smp_processor_id();
     197                 :            :                 __entry->drops               = drops;
     198                 :            :                 __entry->processed   = processed;
     199                 :            :                 __entry->sched       = sched;
     200                 :            :         ),
     201                 :            : 
     202                 :            :         TP_printk("kthread"
     203                 :            :                   " cpu=%d map_id=%d action=%s"
     204                 :            :                   " processed=%u drops=%u"
     205                 :            :                   " sched=%d",
     206                 :            :                   __entry->cpu, __entry->map_id,
     207                 :            :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     208                 :            :                   __entry->processed, __entry->drops,
     209                 :            :                   __entry->sched)
     210                 :            : );
     211                 :            : 
     212   [ #  #  #  #  :          0 : TRACE_EVENT(xdp_cpumap_enqueue,
                   #  # ]
     213                 :            : 
     214                 :            :         TP_PROTO(int map_id, unsigned int processed,  unsigned int drops,
     215                 :            :                  int to_cpu),
     216                 :            : 
     217                 :            :         TP_ARGS(map_id, processed, drops, to_cpu),
     218                 :            : 
     219                 :            :         TP_STRUCT__entry(
     220                 :            :                 __field(int, map_id)
     221                 :            :                 __field(u32, act)
     222                 :            :                 __field(int, cpu)
     223                 :            :                 __field(unsigned int, drops)
     224                 :            :                 __field(unsigned int, processed)
     225                 :            :                 __field(int, to_cpu)
     226                 :            :         ),
     227                 :            : 
     228                 :            :         TP_fast_assign(
     229                 :            :                 __entry->map_id              = map_id;
     230                 :            :                 __entry->act         = XDP_REDIRECT;
     231                 :            :                 __entry->cpu         = smp_processor_id();
     232                 :            :                 __entry->drops               = drops;
     233                 :            :                 __entry->processed   = processed;
     234                 :            :                 __entry->to_cpu              = to_cpu;
     235                 :            :         ),
     236                 :            : 
     237                 :            :         TP_printk("enqueue"
     238                 :            :                   " cpu=%d map_id=%d action=%s"
     239                 :            :                   " processed=%u drops=%u"
     240                 :            :                   " to_cpu=%d",
     241                 :            :                   __entry->cpu, __entry->map_id,
     242                 :            :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     243                 :            :                   __entry->processed, __entry->drops,
     244                 :            :                   __entry->to_cpu)
     245                 :            : );
     246                 :            : 
     247   [ #  #  #  #  :          0 : TRACE_EVENT(xdp_devmap_xmit,
                   #  # ]
     248                 :            : 
     249                 :            :         TP_PROTO(const struct net_device *from_dev,
     250                 :            :                  const struct net_device *to_dev,
     251                 :            :                  int sent, int drops, int err),
     252                 :            : 
     253                 :            :         TP_ARGS(from_dev, to_dev, sent, drops, err),
     254                 :            : 
     255                 :            :         TP_STRUCT__entry(
     256                 :            :                 __field(int, from_ifindex)
     257                 :            :                 __field(u32, act)
     258                 :            :                 __field(int, to_ifindex)
     259                 :            :                 __field(int, drops)
     260                 :            :                 __field(int, sent)
     261                 :            :                 __field(int, err)
     262                 :            :         ),
     263                 :            : 
     264                 :            :         TP_fast_assign(
     265                 :            :                 __entry->from_ifindex        = from_dev->ifindex;
     266                 :            :                 __entry->act         = XDP_REDIRECT;
     267                 :            :                 __entry->to_ifindex  = to_dev->ifindex;
     268                 :            :                 __entry->drops               = drops;
     269                 :            :                 __entry->sent                = sent;
     270                 :            :                 __entry->err         = err;
     271                 :            :         ),
     272                 :            : 
     273                 :            :         TP_printk("ndo_xdp_xmit"
     274                 :            :                   " from_ifindex=%d to_ifindex=%d action=%s"
     275                 :            :                   " sent=%d drops=%d"
     276                 :            :                   " err=%d",
     277                 :            :                   __entry->from_ifindex, __entry->to_ifindex,
     278                 :            :                   __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
     279                 :            :                   __entry->sent, __entry->drops,
     280                 :            :                   __entry->err)
     281                 :            : );
     282                 :            : 
     283                 :            : /* Expect users already include <net/xdp.h>, but not xdp_priv.h */
     284                 :            : #include <net/xdp_priv.h>
     285                 :            : 
     286                 :            : #define __MEM_TYPE_MAP(FN)      \
     287                 :            :         FN(PAGE_SHARED)         \
     288                 :            :         FN(PAGE_ORDER0)         \
     289                 :            :         FN(PAGE_POOL)           \
     290                 :            :         FN(ZERO_COPY)
     291                 :            : 
     292                 :            : #define __MEM_TYPE_TP_FN(x)     \
     293                 :            :         TRACE_DEFINE_ENUM(MEM_TYPE_##x);
     294                 :            : #define __MEM_TYPE_SYM_FN(x)    \
     295                 :            :         { MEM_TYPE_##x, #x },
     296                 :            : #define __MEM_TYPE_SYM_TAB      \
     297                 :            :         __MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 }
     298                 :            : __MEM_TYPE_MAP(__MEM_TYPE_TP_FN)
     299                 :            : 
     300   [ #  #  #  #  :          0 : TRACE_EVENT(mem_disconnect,
             #  #  #  # ]
     301                 :            : 
     302                 :            :         TP_PROTO(const struct xdp_mem_allocator *xa),
     303                 :            : 
     304                 :            :         TP_ARGS(xa),
     305                 :            : 
     306                 :            :         TP_STRUCT__entry(
     307                 :            :                 __field(const struct xdp_mem_allocator *,       xa)
     308                 :            :                 __field(u32,            mem_id)
     309                 :            :                 __field(u32,            mem_type)
     310                 :            :                 __field(const void *,   allocator)
     311                 :            :         ),
     312                 :            : 
     313                 :            :         TP_fast_assign(
     314                 :            :                 __entry->xa          = xa;
     315                 :            :                 __entry->mem_id              = xa->mem.id;
     316                 :            :                 __entry->mem_type    = xa->mem.type;
     317                 :            :                 __entry->allocator   = xa->allocator;
     318                 :            :         ),
     319                 :            : 
     320                 :            :         TP_printk("mem_id=%d mem_type=%s allocator=%p",
     321                 :            :                   __entry->mem_id,
     322                 :            :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     323                 :            :                   __entry->allocator
     324                 :            :         )
     325                 :            : );
     326                 :            : 
     327   [ #  #  #  #  :          0 : TRACE_EVENT(mem_connect,
             #  #  #  # ]
     328                 :            : 
     329                 :            :         TP_PROTO(const struct xdp_mem_allocator *xa,
     330                 :            :                  const struct xdp_rxq_info *rxq),
     331                 :            : 
     332                 :            :         TP_ARGS(xa, rxq),
     333                 :            : 
     334                 :            :         TP_STRUCT__entry(
     335                 :            :                 __field(const struct xdp_mem_allocator *,       xa)
     336                 :            :                 __field(u32,            mem_id)
     337                 :            :                 __field(u32,            mem_type)
     338                 :            :                 __field(const void *,   allocator)
     339                 :            :                 __field(const struct xdp_rxq_info *,            rxq)
     340                 :            :                 __field(int,            ifindex)
     341                 :            :         ),
     342                 :            : 
     343                 :            :         TP_fast_assign(
     344                 :            :                 __entry->xa          = xa;
     345                 :            :                 __entry->mem_id              = xa->mem.id;
     346                 :            :                 __entry->mem_type    = xa->mem.type;
     347                 :            :                 __entry->allocator   = xa->allocator;
     348                 :            :                 __entry->rxq         = rxq;
     349                 :            :                 __entry->ifindex     = rxq->dev->ifindex;
     350                 :            :         ),
     351                 :            : 
     352                 :            :         TP_printk("mem_id=%d mem_type=%s allocator=%p"
     353                 :            :                   " ifindex=%d",
     354                 :            :                   __entry->mem_id,
     355                 :            :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     356                 :            :                   __entry->allocator,
     357                 :            :                   __entry->ifindex
     358                 :            :         )
     359                 :            : );
     360                 :            : 
     361   [ #  #  #  #  :          0 : TRACE_EVENT(mem_return_failed,
                   #  # ]
     362                 :            : 
     363                 :            :         TP_PROTO(const struct xdp_mem_info *mem,
     364                 :            :                  const struct page *page),
     365                 :            : 
     366                 :            :         TP_ARGS(mem, page),
     367                 :            : 
     368                 :            :         TP_STRUCT__entry(
     369                 :            :                 __field(const struct page *,    page)
     370                 :            :                 __field(u32,            mem_id)
     371                 :            :                 __field(u32,            mem_type)
     372                 :            :         ),
     373                 :            : 
     374                 :            :         TP_fast_assign(
     375                 :            :                 __entry->page                = page;
     376                 :            :                 __entry->mem_id              = mem->id;
     377                 :            :                 __entry->mem_type    = mem->type;
     378                 :            :         ),
     379                 :            : 
     380                 :            :         TP_printk("mem_id=%d mem_type=%s page=%p",
     381                 :            :                   __entry->mem_id,
     382                 :            :                   __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
     383                 :            :                   __entry->page
     384                 :            :         )
     385                 :            : );
     386                 :            : 
     387                 :            : #endif /* _TRACE_XDP_H */
     388                 :            : 
     389                 :            : #include <trace/define_trace.h>

Generated by: LCOV version 1.14