brintos

brintos / linux-shallow public Read only

0
0
Text · 6.9 KiB · 12362c3 Raw
256 lines · c
1#undef TRACE_SYSTEM2#define TRACE_SYSTEM neigh3 4#if !defined(_TRACE_NEIGH_H) || defined(TRACE_HEADER_MULTI_READ)5#define _TRACE_NEIGH_H6 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 23TRACE_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		__string(dev, dev ? dev->name : "NULL")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		__be32 *p32;43 44		__entry->family = tbl->family;45		__assign_str(dev);46		__entry->entries = atomic_read(&tbl->gc_entries);47		__entry->created = n != NULL;48		__entry->gc_exempt = exempt_from_gc;49		p32 = (__be32 *)__entry->primary_key4;50 51		if (tbl->family == AF_INET)52			*p32 = *(__be32 *)pkey;53		else54			*p32 = 0;55 56#if IS_ENABLED(CONFIG_IPV6)57		if (tbl->family == AF_INET6) {58			struct in6_addr *pin6;59 60			pin6 = (struct in6_addr *)__entry->primary_key6;61			*pin6 = *(struct in6_addr *)pkey;62		}63#endif64	),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 72TRACE_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);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		else120			*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		} else127#endif128		{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 156DECLARE_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);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		else197			*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		} else204#endif205		{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 227DEFINE_EVENT(neigh__update, neigh_update_done,228	TP_PROTO(struct neighbour *neigh, int err),229	TP_ARGS(neigh, err)230);231 232DEFINE_EVENT(neigh__update, neigh_timer_handler,233	TP_PROTO(struct neighbour *neigh, int err),234	TP_ARGS(neigh, err)235);236 237DEFINE_EVENT(neigh__update, neigh_event_send_done,238	TP_PROTO(struct neighbour *neigh, int err),239	TP_ARGS(neigh, err)240);241 242DEFINE_EVENT(neigh__update, neigh_event_send_dead,243	TP_PROTO(struct neighbour *neigh, int err),244	TP_ARGS(neigh, err)245);246 247DEFINE_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>256