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 4 : 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 6 : 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 0 : 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 6 : DEFINE_EVENT(neigh__update, neigh_update_done,
228 : TP_PROTO(struct neighbour *neigh, int err),
229 : TP_ARGS(neigh, err)
230 : );
231 :
232 10 : DEFINE_EVENT(neigh__update, neigh_timer_handler,
233 : TP_PROTO(struct neighbour *neigh, int err),
234 : TP_ARGS(neigh, err)
235 : );
236 :
237 8 : 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 0 : 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>
|