~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/dsa/trace.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0
  2  * Copyright 2022-2023 NXP
  3  */
  4 
  5 #undef TRACE_SYSTEM
  6 #define TRACE_SYSTEM    dsa
  7 
  8 #if !defined(_NET_DSA_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  9 #define _NET_DSA_TRACE_H
 10 
 11 #include <net/dsa.h>
 12 #include <net/switchdev.h>
 13 #include <linux/etherdevice.h>
 14 #include <linux/if_bridge.h>
 15 #include <linux/refcount.h>
 16 #include <linux/tracepoint.h>
 17 
 18 /* Enough to fit "bridge %s num %d" where num has 3 digits */
 19 #define DSA_DB_BUFSIZ   (IFNAMSIZ + 16)
 20 
 21 void dsa_db_print(const struct dsa_db *db, char buf[DSA_DB_BUFSIZ]);
 22 const char *dsa_port_kind(const struct dsa_port *dp);
 23 
 24 DECLARE_EVENT_CLASS(dsa_port_addr_op_hw,
 25 
 26         TP_PROTO(const struct dsa_port *dp, const unsigned char *addr, u16 vid,
 27                  const struct dsa_db *db, int err),
 28 
 29         TP_ARGS(dp, addr, vid, db, err),
 30 
 31         TP_STRUCT__entry(
 32                 __string(dev, dev_name(dp->ds->dev))
 33                 __string(kind, dsa_port_kind(dp))
 34                 __field(int, port)
 35                 __array(unsigned char, addr, ETH_ALEN)
 36                 __field(u16, vid)
 37                 __array(char, db_buf, DSA_DB_BUFSIZ)
 38                 __field(int, err)
 39         ),
 40 
 41         TP_fast_assign(
 42                 __assign_str(dev);
 43                 __assign_str(kind);
 44                 __entry->port = dp->index;
 45                 ether_addr_copy(__entry->addr, addr);
 46                 __entry->vid = vid;
 47                 dsa_db_print(db, __entry->db_buf);
 48                 __entry->err = err;
 49         ),
 50 
 51         TP_printk("%s %s port %d addr %pM vid %u db \"%s\" err %d",
 52                   __get_str(dev), __get_str(kind), __entry->port, __entry->addr,
 53                   __entry->vid, __entry->db_buf, __entry->err)
 54 );
 55 
 56 /* Add unicast/multicast address to hardware, either on user ports
 57  * (where no refcounting is kept), or on shared ports when the entry
 58  * is first seen and its refcount is 1.
 59  */
 60 DEFINE_EVENT(dsa_port_addr_op_hw, dsa_fdb_add_hw,
 61              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
 62                       u16 vid, const struct dsa_db *db, int err),
 63              TP_ARGS(dp, addr, vid, db, err));
 64 
 65 DEFINE_EVENT(dsa_port_addr_op_hw, dsa_mdb_add_hw,
 66              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
 67                       u16 vid, const struct dsa_db *db, int err),
 68              TP_ARGS(dp, addr, vid, db, err));
 69 
 70 /* Delete unicast/multicast address from hardware, either on user ports or
 71  * when the refcount on shared ports reaches 0
 72  */
 73 DEFINE_EVENT(dsa_port_addr_op_hw, dsa_fdb_del_hw,
 74              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
 75                       u16 vid, const struct dsa_db *db, int err),
 76              TP_ARGS(dp, addr, vid, db, err));
 77 
 78 DEFINE_EVENT(dsa_port_addr_op_hw, dsa_mdb_del_hw,
 79              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
 80                       u16 vid, const struct dsa_db *db, int err),
 81              TP_ARGS(dp, addr, vid, db, err));
 82 
 83 DECLARE_EVENT_CLASS(dsa_port_addr_op_refcount,
 84 
 85         TP_PROTO(const struct dsa_port *dp, const unsigned char *addr, u16 vid,
 86                  const struct dsa_db *db, const refcount_t *refcount),
 87 
 88         TP_ARGS(dp, addr, vid, db, refcount),
 89 
 90         TP_STRUCT__entry(
 91                 __string(dev, dev_name(dp->ds->dev))
 92                 __string(kind, dsa_port_kind(dp))
 93                 __field(int, port)
 94                 __array(unsigned char, addr, ETH_ALEN)
 95                 __field(u16, vid)
 96                 __array(char, db_buf, DSA_DB_BUFSIZ)
 97                 __field(unsigned int, refcount)
 98         ),
 99 
100         TP_fast_assign(
101                 __assign_str(dev);
102                 __assign_str(kind);
103                 __entry->port = dp->index;
104                 ether_addr_copy(__entry->addr, addr);
105                 __entry->vid = vid;
106                 dsa_db_print(db, __entry->db_buf);
107                 __entry->refcount = refcount_read(refcount);
108         ),
109 
110         TP_printk("%s %s port %d addr %pM vid %u db \"%s\" refcount %u",
111                   __get_str(dev), __get_str(kind), __entry->port, __entry->addr,
112                   __entry->vid, __entry->db_buf, __entry->refcount)
113 );
114 
115 /* Bump the refcount of an existing unicast/multicast address on shared ports */
116 DEFINE_EVENT(dsa_port_addr_op_refcount, dsa_fdb_add_bump,
117              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
118                       u16 vid, const struct dsa_db *db,
119                       const refcount_t *refcount),
120              TP_ARGS(dp, addr, vid, db, refcount));
121 
122 DEFINE_EVENT(dsa_port_addr_op_refcount, dsa_mdb_add_bump,
123              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
124                       u16 vid, const struct dsa_db *db,
125                       const refcount_t *refcount),
126              TP_ARGS(dp, addr, vid, db, refcount));
127 
128 /* Drop the refcount of a multicast address that we still keep on
129  * shared ports
130  */
131 DEFINE_EVENT(dsa_port_addr_op_refcount, dsa_fdb_del_drop,
132              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
133                       u16 vid, const struct dsa_db *db,
134                       const refcount_t *refcount),
135              TP_ARGS(dp, addr, vid, db, refcount));
136 
137 DEFINE_EVENT(dsa_port_addr_op_refcount, dsa_mdb_del_drop,
138              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
139                       u16 vid, const struct dsa_db *db,
140                       const refcount_t *refcount),
141              TP_ARGS(dp, addr, vid, db, refcount));
142 
143 DECLARE_EVENT_CLASS(dsa_port_addr_del_not_found,
144 
145         TP_PROTO(const struct dsa_port *dp, const unsigned char *addr, u16 vid,
146                  const struct dsa_db *db),
147 
148         TP_ARGS(dp, addr, vid, db),
149 
150         TP_STRUCT__entry(
151                 __string(dev, dev_name(dp->ds->dev))
152                 __string(kind, dsa_port_kind(dp))
153                 __field(int, port)
154                 __array(unsigned char, addr, ETH_ALEN)
155                 __field(u16, vid)
156                 __array(char, db_buf, DSA_DB_BUFSIZ)
157         ),
158 
159         TP_fast_assign(
160                 __assign_str(dev);
161                 __assign_str(kind);
162                 __entry->port = dp->index;
163                 ether_addr_copy(__entry->addr, addr);
164                 __entry->vid = vid;
165                 dsa_db_print(db, __entry->db_buf);
166         ),
167 
168         TP_printk("%s %s port %d addr %pM vid %u db \"%s\"",
169                   __get_str(dev), __get_str(kind), __entry->port,
170                   __entry->addr, __entry->vid, __entry->db_buf)
171 );
172 
173 /* Attempt to delete a unicast/multicast address on shared ports for which
174  * the delete operation was called more times than the addition
175  */
176 DEFINE_EVENT(dsa_port_addr_del_not_found, dsa_fdb_del_not_found,
177              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
178                       u16 vid, const struct dsa_db *db),
179              TP_ARGS(dp, addr, vid, db));
180 
181 DEFINE_EVENT(dsa_port_addr_del_not_found, dsa_mdb_del_not_found,
182              TP_PROTO(const struct dsa_port *dp, const unsigned char *addr,
183                       u16 vid, const struct dsa_db *db),
184              TP_ARGS(dp, addr, vid, db));
185 
186 TRACE_EVENT(dsa_lag_fdb_add_hw,
187 
188         TP_PROTO(const struct net_device *lag_dev, const unsigned char *addr,
189                  u16 vid, const struct dsa_db *db, int err),
190 
191         TP_ARGS(lag_dev, addr, vid, db, err),
192 
193         TP_STRUCT__entry(
194                 __string(dev, lag_dev->name)
195                 __array(unsigned char, addr, ETH_ALEN)
196                 __field(u16, vid)
197                 __array(char, db_buf, DSA_DB_BUFSIZ)
198                 __field(int, err)
199         ),
200 
201         TP_fast_assign(
202                 __assign_str(dev);
203                 ether_addr_copy(__entry->addr, addr);
204                 __entry->vid = vid;
205                 dsa_db_print(db, __entry->db_buf);
206                 __entry->err = err;
207         ),
208 
209         TP_printk("%s addr %pM vid %u db \"%s\" err %d",
210                   __get_str(dev), __entry->addr, __entry->vid,
211                   __entry->db_buf, __entry->err)
212 );
213 
214 TRACE_EVENT(dsa_lag_fdb_add_bump,
215 
216         TP_PROTO(const struct net_device *lag_dev, const unsigned char *addr,
217                  u16 vid, const struct dsa_db *db, const refcount_t *refcount),
218 
219         TP_ARGS(lag_dev, addr, vid, db, refcount),
220 
221         TP_STRUCT__entry(
222                 __string(dev, lag_dev->name)
223                 __array(unsigned char, addr, ETH_ALEN)
224                 __field(u16, vid)
225                 __array(char, db_buf, DSA_DB_BUFSIZ)
226                 __field(unsigned int, refcount)
227         ),
228 
229         TP_fast_assign(
230                 __assign_str(dev);
231                 ether_addr_copy(__entry->addr, addr);
232                 __entry->vid = vid;
233                 dsa_db_print(db, __entry->db_buf);
234                 __entry->refcount = refcount_read(refcount);
235         ),
236 
237         TP_printk("%s addr %pM vid %u db \"%s\" refcount %u",
238                   __get_str(dev), __entry->addr, __entry->vid,
239                   __entry->db_buf, __entry->refcount)
240 );
241 
242 TRACE_EVENT(dsa_lag_fdb_del_hw,
243 
244         TP_PROTO(const struct net_device *lag_dev, const unsigned char *addr,
245                  u16 vid, const struct dsa_db *db, int err),
246 
247         TP_ARGS(lag_dev, addr, vid, db, err),
248 
249         TP_STRUCT__entry(
250                 __string(dev, lag_dev->name)
251                 __array(unsigned char, addr, ETH_ALEN)
252                 __field(u16, vid)
253                 __array(char, db_buf, DSA_DB_BUFSIZ)
254                 __field(int, err)
255         ),
256 
257         TP_fast_assign(
258                 __assign_str(dev);
259                 ether_addr_copy(__entry->addr, addr);
260                 __entry->vid = vid;
261                 dsa_db_print(db, __entry->db_buf);
262                 __entry->err = err;
263         ),
264 
265         TP_printk("%s addr %pM vid %u db \"%s\" err %d",
266                   __get_str(dev), __entry->addr, __entry->vid,
267                   __entry->db_buf, __entry->err)
268 );
269 
270 TRACE_EVENT(dsa_lag_fdb_del_drop,
271 
272         TP_PROTO(const struct net_device *lag_dev, const unsigned char *addr,
273                  u16 vid, const struct dsa_db *db, const refcount_t *refcount),
274 
275         TP_ARGS(lag_dev, addr, vid, db, refcount),
276 
277         TP_STRUCT__entry(
278                 __string(dev, lag_dev->name)
279                 __array(unsigned char, addr, ETH_ALEN)
280                 __field(u16, vid)
281                 __array(char, db_buf, DSA_DB_BUFSIZ)
282                 __field(unsigned int, refcount)
283         ),
284 
285         TP_fast_assign(
286                 __assign_str(dev);
287                 ether_addr_copy(__entry->addr, addr);
288                 __entry->vid = vid;
289                 dsa_db_print(db, __entry->db_buf);
290                 __entry->refcount = refcount_read(refcount);
291         ),
292 
293         TP_printk("%s addr %pM vid %u db \"%s\" refcount %u",
294                   __get_str(dev), __entry->addr, __entry->vid,
295                   __entry->db_buf, __entry->refcount)
296 );
297 
298 TRACE_EVENT(dsa_lag_fdb_del_not_found,
299 
300         TP_PROTO(const struct net_device *lag_dev, const unsigned char *addr,
301                  u16 vid, const struct dsa_db *db),
302 
303         TP_ARGS(lag_dev, addr, vid, db),
304 
305         TP_STRUCT__entry(
306                 __string(dev, lag_dev->name)
307                 __array(unsigned char, addr, ETH_ALEN)
308                 __field(u16, vid)
309                 __array(char, db_buf, DSA_DB_BUFSIZ)
310         ),
311 
312         TP_fast_assign(
313                 __assign_str(dev);
314                 ether_addr_copy(__entry->addr, addr);
315                 __entry->vid = vid;
316                 dsa_db_print(db, __entry->db_buf);
317         ),
318 
319         TP_printk("%s addr %pM vid %u db \"%s\"",
320                   __get_str(dev), __entry->addr, __entry->vid, __entry->db_buf)
321 );
322 
323 DECLARE_EVENT_CLASS(dsa_vlan_op_hw,
324 
325         TP_PROTO(const struct dsa_port *dp,
326                  const struct switchdev_obj_port_vlan *vlan, int err),
327 
328         TP_ARGS(dp, vlan, err),
329 
330         TP_STRUCT__entry(
331                 __string(dev, dev_name(dp->ds->dev))
332                 __string(kind, dsa_port_kind(dp))
333                 __field(int, port)
334                 __field(u16, vid)
335                 __field(u16, flags)
336                 __field(bool, changed)
337                 __field(int, err)
338         ),
339 
340         TP_fast_assign(
341                 __assign_str(dev);
342                 __assign_str(kind);
343                 __entry->port = dp->index;
344                 __entry->vid = vlan->vid;
345                 __entry->flags = vlan->flags;
346                 __entry->changed = vlan->changed;
347                 __entry->err = err;
348         ),
349 
350         TP_printk("%s %s port %d vid %u%s%s%s",
351                   __get_str(dev), __get_str(kind), __entry->port, __entry->vid,
352                   __entry->flags & BRIDGE_VLAN_INFO_PVID ? " pvid" : "",
353                   __entry->flags & BRIDGE_VLAN_INFO_UNTAGGED ? " untagged" : "",
354                   __entry->changed ? " (changed)" : "")
355 );
356 
357 DEFINE_EVENT(dsa_vlan_op_hw, dsa_vlan_add_hw,
358              TP_PROTO(const struct dsa_port *dp,
359                       const struct switchdev_obj_port_vlan *vlan, int err),
360              TP_ARGS(dp, vlan, err));
361 
362 DEFINE_EVENT(dsa_vlan_op_hw, dsa_vlan_del_hw,
363              TP_PROTO(const struct dsa_port *dp,
364                       const struct switchdev_obj_port_vlan *vlan, int err),
365              TP_ARGS(dp, vlan, err));
366 
367 DECLARE_EVENT_CLASS(dsa_vlan_op_refcount,
368 
369         TP_PROTO(const struct dsa_port *dp,
370                  const struct switchdev_obj_port_vlan *vlan,
371                  const refcount_t *refcount),
372 
373         TP_ARGS(dp, vlan, refcount),
374 
375         TP_STRUCT__entry(
376                 __string(dev, dev_name(dp->ds->dev))
377                 __string(kind, dsa_port_kind(dp))
378                 __field(int, port)
379                 __field(u16, vid)
380                 __field(u16, flags)
381                 __field(bool, changed)
382                 __field(unsigned int, refcount)
383         ),
384 
385         TP_fast_assign(
386                 __assign_str(dev);
387                 __assign_str(kind);
388                 __entry->port = dp->index;
389                 __entry->vid = vlan->vid;
390                 __entry->flags = vlan->flags;
391                 __entry->changed = vlan->changed;
392                 __entry->refcount = refcount_read(refcount);
393         ),
394 
395         TP_printk("%s %s port %d vid %u%s%s%s refcount %u",
396                   __get_str(dev), __get_str(kind), __entry->port, __entry->vid,
397                   __entry->flags & BRIDGE_VLAN_INFO_PVID ? " pvid" : "",
398                   __entry->flags & BRIDGE_VLAN_INFO_UNTAGGED ? " untagged" : "",
399                   __entry->changed ? " (changed)" : "", __entry->refcount)
400 );
401 
402 DEFINE_EVENT(dsa_vlan_op_refcount, dsa_vlan_add_bump,
403              TP_PROTO(const struct dsa_port *dp,
404                       const struct switchdev_obj_port_vlan *vlan,
405                       const refcount_t *refcount),
406              TP_ARGS(dp, vlan, refcount));
407 
408 DEFINE_EVENT(dsa_vlan_op_refcount, dsa_vlan_del_drop,
409              TP_PROTO(const struct dsa_port *dp,
410                       const struct switchdev_obj_port_vlan *vlan,
411                       const refcount_t *refcount),
412              TP_ARGS(dp, vlan, refcount));
413 
414 TRACE_EVENT(dsa_vlan_del_not_found,
415 
416         TP_PROTO(const struct dsa_port *dp,
417                  const struct switchdev_obj_port_vlan *vlan),
418 
419         TP_ARGS(dp, vlan),
420 
421         TP_STRUCT__entry(
422                 __string(dev, dev_name(dp->ds->dev))
423                 __string(kind, dsa_port_kind(dp))
424                 __field(int, port)
425                 __field(u16, vid)
426         ),
427 
428         TP_fast_assign(
429                 __assign_str(dev);
430                 __assign_str(kind);
431                 __entry->port = dp->index;
432                 __entry->vid = vlan->vid;
433         ),
434 
435         TP_printk("%s %s port %d vid %u",
436                   __get_str(dev), __get_str(kind), __entry->port, __entry->vid)
437 );
438 
439 #endif /* _NET_DSA_TRACE_H */
440 
441 /* We don't want to use include/trace/events */
442 #undef TRACE_INCLUDE_PATH
443 #define TRACE_INCLUDE_PATH .
444 #undef TRACE_INCLUDE_FILE
445 #define TRACE_INCLUDE_FILE      trace
446 /* This part must be outside protection */
447 #include <trace/define_trace.h>
448 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php