2 #define TRACE_SYSTEM bridge
4 #if !defined(_TRACE_BRIDGE_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_BRIDGE_H
7 #include <linux/netdevice.h>
8 #include <linux/tracepoint.h>
10 #include "../../../net/bridge/br_private.h"
12 TRACE_EVENT(br_fdb_add
,
14 TP_PROTO(struct ndmsg
*ndm
, struct net_device
*dev
,
15 const unsigned char *addr
, u16 vid
, u16 nlh_flags
),
17 TP_ARGS(ndm
, dev
, addr
, vid
, nlh_flags
),
20 __field(u8
, ndm_flags
)
21 __string(dev
, dev
->name
)
22 __array(unsigned char, addr
, ETH_ALEN
)
24 __field(u16
, nlh_flags
)
29 memcpy(__entry
->addr
, addr
, ETH_ALEN
);
31 __entry
->nlh_flags
= nlh_flags
;
32 __entry
->ndm_flags
= ndm
->ndm_flags
;
35 TP_printk("dev %s addr %02x:%02x:%02x:%02x:%02x:%02x vid %u nlh_flags %04x ndm_flags %02x",
36 __get_str(dev
), __entry
->addr
[0], __entry
->addr
[1],
37 __entry
->addr
[2], __entry
->addr
[3], __entry
->addr
[4],
38 __entry
->addr
[5], __entry
->vid
,
39 __entry
->nlh_flags
, __entry
->ndm_flags
)
42 TRACE_EVENT(br_fdb_external_learn_add
,
44 TP_PROTO(struct net_bridge
*br
, struct net_bridge_port
*p
,
45 const unsigned char *addr
, u16 vid
),
47 TP_ARGS(br
, p
, addr
, vid
),
50 __string(br_dev
, br
->dev
->name
)
51 __string(dev
, p
? p
->dev
->name
: "null")
52 __array(unsigned char, addr
, ETH_ALEN
)
59 memcpy(__entry
->addr
, addr
, ETH_ALEN
);
63 TP_printk("br_dev %s port %s addr %02x:%02x:%02x:%02x:%02x:%02x vid %u",
64 __get_str(br_dev
), __get_str(dev
), __entry
->addr
[0],
65 __entry
->addr
[1], __entry
->addr
[2], __entry
->addr
[3],
66 __entry
->addr
[4], __entry
->addr
[5], __entry
->vid
)
69 TRACE_EVENT(fdb_delete
,
71 TP_PROTO(struct net_bridge
*br
, struct net_bridge_fdb_entry
*f
),
76 __string(br_dev
, br
->dev
->name
)
77 __string(dev
, f
->dst
? f
->dst
->dev
->name
: "null")
78 __array(unsigned char, addr
, ETH_ALEN
)
85 memcpy(__entry
->addr
, f
->key
.addr
.addr
, ETH_ALEN
);
86 __entry
->vid
= f
->key
.vlan_id
;
89 TP_printk("br_dev %s dev %s addr %02x:%02x:%02x:%02x:%02x:%02x vid %u",
90 __get_str(br_dev
), __get_str(dev
), __entry
->addr
[0],
91 __entry
->addr
[1], __entry
->addr
[2], __entry
->addr
[3],
92 __entry
->addr
[4], __entry
->addr
[5], __entry
->vid
)
95 TRACE_EVENT(br_fdb_update
,
97 TP_PROTO(struct net_bridge
*br
, struct net_bridge_port
*source
,
98 const unsigned char *addr
, u16 vid
, unsigned long flags
),
100 TP_ARGS(br
, source
, addr
, vid
, flags
),
103 __string(br_dev
, br
->dev
->name
)
104 __string(dev
, source
->dev
->name
)
105 __array(unsigned char, addr
, ETH_ALEN
)
107 __field(unsigned long, flags
)
111 __assign_str(br_dev
);
113 memcpy(__entry
->addr
, addr
, ETH_ALEN
);
115 __entry
->flags
= flags
;
118 TP_printk("br_dev %s source %s addr %02x:%02x:%02x:%02x:%02x:%02x vid %u flags 0x%lx",
119 __get_str(br_dev
), __get_str(dev
), __entry
->addr
[0],
120 __entry
->addr
[1], __entry
->addr
[2], __entry
->addr
[3],
121 __entry
->addr
[4], __entry
->addr
[5], __entry
->vid
,
125 TRACE_EVENT(br_mdb_full
,
127 TP_PROTO(const struct net_device
*dev
,
128 const struct br_ip
*group
),
133 __string(dev
, dev
->name
)
136 __array(__u8
, src
, 16)
137 __array(__u8
, grp
, 16)
138 __array(__u8
, grpmac
, ETH_ALEN
) /* For af == 0. */
142 struct in6_addr
*in6
;
145 __entry
->vid
= group
->vid
;
150 memset(__entry
->src
, 0, sizeof(__entry
->src
));
151 memset(__entry
->grp
, 0, sizeof(__entry
->grp
));
152 memcpy(__entry
->grpmac
, group
->dst
.mac_addr
, ETH_ALEN
);
153 } else if (group
->proto
== htons(ETH_P_IP
)) {
154 __entry
->af
= AF_INET
;
156 in6
= (struct in6_addr
*)__entry
->src
;
157 ipv6_addr_set_v4mapped(group
->src
.ip4
, in6
);
159 in6
= (struct in6_addr
*)__entry
->grp
;
160 ipv6_addr_set_v4mapped(group
->dst
.ip4
, in6
);
162 memset(__entry
->grpmac
, 0, ETH_ALEN
);
164 #if IS_ENABLED(CONFIG_IPV6)
166 __entry
->af
= AF_INET6
;
168 in6
= (struct in6_addr
*)__entry
->src
;
169 *in6
= group
->src
.ip6
;
171 in6
= (struct in6_addr
*)__entry
->grp
;
172 *in6
= group
->dst
.ip6
;
174 memset(__entry
->grpmac
, 0, ETH_ALEN
);
179 TP_printk("dev %s af %u src %pI6c grp %pI6c/%pM vid %u",
180 __get_str(dev
), __entry
->af
, __entry
->src
, __entry
->grp
,
181 __entry
->grpmac
, __entry
->vid
)
184 #endif /* _TRACE_BRIDGE_H */
186 /* This part must be outside protection */
187 #include <trace/define_trace.h>