LCOV - code coverage report
Current view: top level - include/trace/events - neigh.h (source / functions) Hit Total Coverage
Test: Real Lines: 7 8 87.5 %
Date: 2020-10-17 15:46:16 Functions: 3 24 12.5 %
Legend: Neither, QEMU, Real, Both Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : #undef TRACE_SYSTEM
       2                 :            : #define TRACE_SYSTEM neigh
       3                 :            : 
       4                 :            : #if !defined(_TRACE_NEIGH_H) || defined(TRACE_HEADER_MULTI_READ)
       5                 :            : #define _TRACE_NEIGH_H
       6                 :            : 
       7                 :            : #include <linux/skbuff.h>
       8                 :            : #include <linux/netdevice.h>
       9                 :            : #include <linux/tracepoint.h>
      10                 :            : #include <net/neighbour.h>
      11                 :            : 
      12                 :            : #define neigh_state_str(state)                          \
      13                 :            :         __print_symbolic(state,                         \
      14                 :            :                 { NUD_INCOMPLETE, "incomplete" },     \
      15                 :            :                 { NUD_REACHABLE, "reachable" },               \
      16                 :            :                 { NUD_STALE, "stale" },                       \
      17                 :            :                 { NUD_DELAY, "delay" },                       \
      18                 :            :                 { NUD_PROBE, "probe" },                       \
      19                 :            :                 { NUD_FAILED, "failed" },             \
      20                 :            :                 { NUD_NOARP, "noarp" },                       \
      21                 :            :                 { NUD_PERMANENT, "permanent"})
      22                 :            : 
      23                 :          3 : TRACE_EVENT(neigh_create,
      24                 :            : 
      25                 :            :         TP_PROTO(struct neigh_table *tbl, struct net_device *dev,
      26                 :            :                  const void *pkey, const struct neighbour *n,
      27                 :            :                  bool exempt_from_gc),
      28                 :            : 
      29                 :            :         TP_ARGS(tbl, dev, pkey, n, exempt_from_gc),
      30                 :            : 
      31                 :            :         TP_STRUCT__entry(
      32                 :            :                 __field(u32, family)
      33                 :            :                 __dynamic_array(char,  dev,   IFNAMSIZ )
      34                 :            :                 __field(int, entries)
      35                 :            :                 __field(u8, created)
      36                 :            :                 __field(u8, gc_exempt)
      37                 :            :                 __array(u8, primary_key4, 4)
      38                 :            :                 __array(u8, primary_key6, 16)
      39                 :            :         ),
      40                 :            : 
      41                 :            :         TP_fast_assign(
      42                 :            :                 struct in6_addr *pin6;
      43                 :            :                 __be32 *p32;
      44                 :            : 
      45                 :            :                 __entry->family = tbl->family;
      46                 :            :                 __assign_str(dev, (dev ? dev->name : "NULL"));
      47                 :            :                 __entry->entries = atomic_read(&tbl->gc_entries);
      48                 :            :                 __entry->created = n != NULL;
      49                 :            :                 __entry->gc_exempt = exempt_from_gc;
      50                 :            :                 pin6 = (struct in6_addr *)__entry->primary_key6;
      51                 :            :                 p32 = (__be32 *)__entry->primary_key4;
      52                 :            : 
      53                 :            :                 if (tbl->family == AF_INET)
      54                 :            :                         *p32 = *(__be32 *)pkey;
      55                 :            :                 else
      56                 :            :                         *p32 = 0;
      57                 :            : 
      58                 :            : #if IS_ENABLED(CONFIG_IPV6)
      59                 :            :                 if (tbl->family == AF_INET6) {
      60                 :            :                         pin6 = (struct in6_addr *)__entry->primary_key6;
      61                 :            :                         *pin6 = *(struct in6_addr *)pkey;
      62                 :            :                 }
      63                 :            : #endif
      64                 :            :         ),
      65                 :            : 
      66                 :            :         TP_printk("family %d dev %s entries %d primary_key4 %pI4 primary_key6 %pI6c created %d gc_exempt %d",
      67                 :            :                   __entry->family, __get_str(dev), __entry->entries,
      68                 :            :                   __entry->primary_key4, __entry->primary_key6,
      69                 :            :                   __entry->created, __entry->gc_exempt)
      70                 :            : );
      71                 :            : 
      72                 :          3 : TRACE_EVENT(neigh_update,
      73                 :            : 
      74                 :            :         TP_PROTO(struct neighbour *n, const u8 *lladdr, u8 new,
      75                 :            :                  u32 flags, u32 nlmsg_pid),
      76                 :            : 
      77                 :            :         TP_ARGS(n, lladdr, new, flags, nlmsg_pid),
      78                 :            : 
      79                 :            :         TP_STRUCT__entry(
      80                 :            :                 __field(u32, family)
      81                 :            :                 __string(dev, (n->dev ? n->dev->name : "NULL"))
      82                 :            :                 __array(u8, lladdr, MAX_ADDR_LEN)
      83                 :            :                 __field(u8, lladdr_len)
      84                 :            :                 __field(u8, flags)
      85                 :            :                 __field(u8, nud_state)
      86                 :            :                 __field(u8, type)
      87                 :            :                 __field(u8, dead)
      88                 :            :                 __field(int, refcnt)
      89                 :            :                 __array(__u8, primary_key4, 4)
      90                 :            :                 __array(__u8, primary_key6, 16)
      91                 :            :                 __field(unsigned long, confirmed)
      92                 :            :                 __field(unsigned long, updated)
      93                 :            :                 __field(unsigned long, used)
      94                 :            :                 __array(u8, new_lladdr, MAX_ADDR_LEN)
      95                 :            :                 __field(u8, new_state)
      96                 :            :                 __field(u32, update_flags)
      97                 :            :                 __field(u32, pid)
      98                 :            :         ),
      99                 :            : 
     100                 :            :         TP_fast_assign(
     101                 :            :                 int lladdr_len = (n->dev ? n->dev->addr_len : MAX_ADDR_LEN);
     102                 :            :                 struct in6_addr *pin6;
     103                 :            :                 __be32 *p32;
     104                 :            : 
     105                 :            :                 __entry->family = n->tbl->family;
     106                 :            :                 __assign_str(dev, (n->dev ? n->dev->name : "NULL"));
     107                 :            :                 __entry->lladdr_len = lladdr_len;
     108                 :            :                 memcpy(__entry->lladdr, n->ha, lladdr_len);
     109                 :            :                 __entry->flags = n->flags;
     110                 :            :                 __entry->nud_state = n->nud_state;
     111                 :            :                 __entry->type = n->type;
     112                 :            :                 __entry->dead = n->dead;
     113                 :            :                 __entry->refcnt = refcount_read(&n->refcnt);
     114                 :            :                 pin6 = (struct in6_addr *)__entry->primary_key6;
     115                 :            :                 p32 = (__be32 *)__entry->primary_key4;
     116                 :            : 
     117                 :            :                 if (n->tbl->family == AF_INET)
     118                 :            :                         *p32 = *(__be32 *)n->primary_key;
     119                 :            :                 else
     120                 :            :                         *p32 = 0;
     121                 :            : 
     122                 :            : #if IS_ENABLED(CONFIG_IPV6)
     123                 :            :                 if (n->tbl->family == AF_INET6) {
     124                 :            :                         pin6 = (struct in6_addr *)__entry->primary_key6;
     125                 :            :                         *pin6 = *(struct in6_addr *)n->primary_key;
     126                 :            :                 } else
     127                 :            : #endif
     128                 :            :                 {
     129                 :            :                         ipv6_addr_set_v4mapped(*p32, pin6);
     130                 :            :                 }
     131                 :            :                 __entry->confirmed = n->confirmed;
     132                 :            :                 __entry->updated = n->updated;
     133                 :            :                 __entry->used = n->used;
     134                 :            :                 if (lladdr)
     135                 :            :                         memcpy(__entry->new_lladdr, lladdr, lladdr_len);
     136                 :            :                 __entry->new_state = new;
     137                 :            :                 __entry->update_flags = flags;
     138                 :            :                 __entry->pid = nlmsg_pid;
     139                 :            :         ),
     140                 :            : 
     141                 :            :         TP_printk("family %d dev %s lladdr %s flags %02x nud_state %s type %02x "
     142                 :            :                   "dead %d refcnt %d primary_key4 %pI4 primary_key6 %pI6c "
     143                 :            :                   "confirmed %lu updated %lu used %lu new_lladdr %s "
     144                 :            :                   "new_state %s update_flags %02x pid %d",
     145                 :            :                   __entry->family, __get_str(dev),
     146                 :            :                   __print_hex_str(__entry->lladdr, __entry->lladdr_len),
     147                 :            :                   __entry->flags, neigh_state_str(__entry->nud_state),
     148                 :            :                   __entry->type, __entry->dead, __entry->refcnt,
     149                 :            :                   __entry->primary_key4, __entry->primary_key6,
     150                 :            :                   __entry->confirmed, __entry->updated, __entry->used,
     151                 :            :                   __print_hex_str(__entry->new_lladdr, __entry->lladdr_len),
     152                 :            :                   neigh_state_str(__entry->new_state),
     153                 :            :                   __entry->update_flags, __entry->pid)
     154                 :            : );
     155                 :            : 
     156                 :          3 : DECLARE_EVENT_CLASS(neigh__update,
     157                 :            :         TP_PROTO(struct neighbour *n, int err),
     158                 :            :         TP_ARGS(n, err),
     159                 :            :         TP_STRUCT__entry(
     160                 :            :                 __field(u32, family)
     161                 :            :                 __string(dev, (n->dev ? n->dev->name : "NULL"))
     162                 :            :                 __array(u8, lladdr, MAX_ADDR_LEN)
     163                 :            :                 __field(u8, lladdr_len)
     164                 :            :                 __field(u8, flags)
     165                 :            :                 __field(u8, nud_state)
     166                 :            :                 __field(u8, type)
     167                 :            :                 __field(u8, dead)
     168                 :            :                 __field(int, refcnt)
     169                 :            :                 __array(__u8, primary_key4, 4)
     170                 :            :                 __array(__u8, primary_key6, 16)
     171                 :            :                 __field(unsigned long, confirmed)
     172                 :            :                 __field(unsigned long, updated)
     173                 :            :                 __field(unsigned long, used)
     174                 :            :                 __field(u32, err)
     175                 :            :         ),
     176                 :            : 
     177                 :            :         TP_fast_assign(
     178                 :            :                 int lladdr_len = (n->dev ? n->dev->addr_len : MAX_ADDR_LEN);
     179                 :            :                 struct in6_addr *pin6;
     180                 :            :                 __be32 *p32;
     181                 :            : 
     182                 :            :                 __entry->family = n->tbl->family;
     183                 :            :                 __assign_str(dev, (n->dev ? n->dev->name : "NULL"));
     184                 :            :                 __entry->lladdr_len = lladdr_len;
     185                 :            :                 memcpy(__entry->lladdr, n->ha, lladdr_len);
     186                 :            :                 __entry->flags = n->flags;
     187                 :            :                 __entry->nud_state = n->nud_state;
     188                 :            :                 __entry->type = n->type;
     189                 :            :                 __entry->dead = n->dead;
     190                 :            :                 __entry->refcnt = refcount_read(&n->refcnt);
     191                 :            :                 pin6 = (struct in6_addr *)__entry->primary_key6;
     192                 :            :                 p32 = (__be32 *)__entry->primary_key4;
     193                 :            : 
     194                 :            :                 if (n->tbl->family == AF_INET)
     195                 :            :                         *p32 = *(__be32 *)n->primary_key;
     196                 :            :                 else
     197                 :            :                         *p32 = 0;
     198                 :            : 
     199                 :            : #if IS_ENABLED(CONFIG_IPV6)
     200                 :            :                 if (n->tbl->family == AF_INET6) {
     201                 :            :                         pin6 = (struct in6_addr *)__entry->primary_key6;
     202                 :            :                         *pin6 = *(struct in6_addr *)n->primary_key;
     203                 :            :                 } else
     204                 :            : #endif
     205                 :            :                 {
     206                 :            :                         ipv6_addr_set_v4mapped(*p32, pin6);
     207                 :            :                 }
     208                 :            : 
     209                 :            :                 __entry->confirmed = n->confirmed;
     210                 :            :                 __entry->updated = n->updated;
     211                 :            :                 __entry->used = n->used;
     212                 :            :                 __entry->err = err;
     213                 :            :         ),
     214                 :            : 
     215                 :            :         TP_printk("family %d dev %s lladdr %s flags %02x nud_state %s type %02x "
     216                 :            :                   "dead %d refcnt %d primary_key4 %pI4 primary_key6 %pI6c "
     217                 :            :                   "confirmed %lu updated %lu used %lu err %d",
     218                 :            :                   __entry->family, __get_str(dev),
     219                 :            :                   __print_hex_str(__entry->lladdr, __entry->lladdr_len),
     220                 :            :                   __entry->flags, neigh_state_str(__entry->nud_state),
     221                 :            :                   __entry->type, __entry->dead, __entry->refcnt,
     222                 :            :                   __entry->primary_key4, __entry->primary_key6,
     223                 :            :                   __entry->confirmed, __entry->updated, __entry->used,
     224                 :            :                   __entry->err)
     225                 :            : );
     226                 :            : 
     227                 :          3 : DEFINE_EVENT(neigh__update, neigh_update_done,
     228                 :            :         TP_PROTO(struct neighbour *neigh, int err),
     229                 :            :         TP_ARGS(neigh, err)
     230                 :            : );
     231                 :            : 
     232                 :          3 : DEFINE_EVENT(neigh__update, neigh_timer_handler,
     233                 :            :         TP_PROTO(struct neighbour *neigh, int err),
     234                 :            :         TP_ARGS(neigh, err)
     235                 :            : );
     236                 :            : 
     237                 :          3 : DEFINE_EVENT(neigh__update, neigh_event_send_done,
     238                 :            :         TP_PROTO(struct neighbour *neigh, int err),
     239                 :            :         TP_ARGS(neigh, err)
     240                 :            : );
     241                 :            : 
     242                 :          0 : DEFINE_EVENT(neigh__update, neigh_event_send_dead,
     243                 :            :         TP_PROTO(struct neighbour *neigh, int err),
     244                 :            :         TP_ARGS(neigh, err)
     245                 :            : );
     246                 :            : 
     247                 :          2 : DEFINE_EVENT(neigh__update, neigh_cleanup_and_release,
     248                 :            :         TP_PROTO(struct neighbour *neigh, int rc),
     249                 :            :         TP_ARGS(neigh, rc)
     250                 :            : );
     251                 :            : 
     252                 :            : #endif /* _TRACE_NEIGH_H */
     253                 :            : 
     254                 :            : /* This part must be outside protection */
     255                 :            : #include <trace/define_trace.h>
    

Generated by: LCOV version 1.14