]> git.proxmox.com Git - mirror_frr.git/blob - bgpd/bgp_trace.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / bgpd / bgp_trace.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* Tracing for BGP
3 *
4 * Copyright (C) 2020 NVIDIA Corporation
5 * Quentin Young
6 */
7
8 #if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
9 #define _BGP_TRACE_H
10
11 #include "lib/trace.h"
12
13 #ifdef HAVE_LTTNG
14
15 #undef TRACEPOINT_PROVIDER
16 #define TRACEPOINT_PROVIDER frr_bgp
17
18 #undef TRACEPOINT_INCLUDE
19 #define TRACEPOINT_INCLUDE "bgpd/bgp_trace.h"
20
21 #include <lttng/tracepoint.h>
22
23 #include "bgpd/bgpd.h"
24 #include "bgpd/bgp_attr.h"
25 #include "lib/stream.h"
26 #include "bgpd/bgp_evpn_private.h"
27 #include "bgpd/bgp_evpn_mh.h"
28
29
30 /* clang-format off */
31
32 TRACEPOINT_EVENT_CLASS(
33 frr_bgp,
34 packet_process,
35 TP_ARGS(struct peer *, peer, bgp_size_t, size),
36 TP_FIELDS(
37 ctf_string(peer, PEER_HOSTNAME(peer))
38 )
39 )
40
41 #define PKT_PROCESS_TRACEPOINT_INSTANCE(name) \
42 TRACEPOINT_EVENT_INSTANCE( \
43 frr_bgp, packet_process, name, \
44 TP_ARGS(struct peer *, peer, bgp_size_t, size)) \
45 TRACEPOINT_LOGLEVEL(frr_bgp, name, TRACE_INFO)
46
47 PKT_PROCESS_TRACEPOINT_INSTANCE(open_process)
48 PKT_PROCESS_TRACEPOINT_INSTANCE(keepalive_process)
49 PKT_PROCESS_TRACEPOINT_INSTANCE(update_process)
50 PKT_PROCESS_TRACEPOINT_INSTANCE(notification_process)
51 PKT_PROCESS_TRACEPOINT_INSTANCE(capability_process)
52 PKT_PROCESS_TRACEPOINT_INSTANCE(refresh_process)
53
54 TRACEPOINT_EVENT(
55 frr_bgp,
56 packet_read,
57 TP_ARGS(struct peer *, peer, struct stream *, pkt),
58 TP_FIELDS(
59 ctf_string(peer, PEER_HOSTNAME(peer))
60 ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
61 STREAM_READABLE(pkt))
62 )
63 )
64
65 TRACEPOINT_LOGLEVEL(frr_bgp, packet_read, TRACE_INFO)
66
67 TRACEPOINT_EVENT(
68 frr_bgp,
69 process_update,
70 TP_ARGS(struct peer *, peer, char *, pfx, uint32_t, addpath_id, afi_t,
71 afi, safi_t, safi, struct attr *, attr),
72 TP_FIELDS(
73 ctf_string(peer, PEER_HOSTNAME(peer))
74 ctf_string(prefix, pfx)
75 ctf_integer(uint32_t, addpath_id, addpath_id)
76 ctf_integer(afi_t, afi, afi)
77 ctf_integer(safi_t, safi, safi)
78 ctf_integer_hex(intptr_t, attribute_ptr, attr)
79 )
80 )
81
82 TRACEPOINT_LOGLEVEL(frr_bgp, process_update, TRACE_INFO)
83
84 TRACEPOINT_EVENT(
85 frr_bgp,
86 input_filter,
87 TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
88 const char *, result),
89 TP_FIELDS(
90 ctf_string(peer, PEER_HOSTNAME(peer))
91 ctf_string(prefix, pfx)
92 ctf_integer(afi_t, afi, afi)
93 ctf_integer(safi_t, safi, safi)
94 ctf_string(action, result)
95 )
96 )
97
98 TRACEPOINT_LOGLEVEL(frr_bgp, input_filter, TRACE_INFO)
99
100 TRACEPOINT_EVENT(
101 frr_bgp,
102 output_filter,
103 TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
104 const char *, result),
105 TP_FIELDS(
106 ctf_string(peer, PEER_HOSTNAME(peer))
107 ctf_string(prefix, pfx)
108 ctf_integer(afi_t, afi, afi)
109 ctf_integer(safi_t, safi, safi)
110 ctf_string(action, result)
111 )
112 )
113
114 TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO)
115
116 /* BMP tracepoints */
117
118 /* BMP mirrors a packet to all mirror-enabled targets */
119 TRACEPOINT_EVENT(
120 frr_bgp,
121 bmp_mirror_packet,
122 TP_ARGS(struct peer *, peer, uint8_t, type, struct stream *, pkt),
123 TP_FIELDS(
124 ctf_string(peer, PEER_HOSTNAME(peer))
125 ctf_integer(uint8_t, type, type)
126 ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
127 STREAM_READABLE(pkt))
128 )
129 )
130
131 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_mirror_packet, TRACE_INFO)
132
133
134 /* BMP sends an EOR */
135 TRACEPOINT_EVENT(
136 frr_bgp,
137 bmp_eor,
138 TP_ARGS(afi_t, afi, safi_t, safi, uint8_t, flags),
139 TP_FIELDS(
140 ctf_integer(afi_t, afi, afi)
141 ctf_integer(safi_t, safi, safi)
142 ctf_integer(uint8_t, flags, flags)
143 )
144 )
145
146 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_eor, TRACE_INFO)
147
148
149 /* BMP updates its copy of the last OPEN a peer sent */
150 TRACEPOINT_EVENT(
151 frr_bgp,
152 bmp_update_saved_open,
153 TP_ARGS(struct peer *, peer, struct stream *, pkt),
154 TP_FIELDS(
155 ctf_string(peer, PEER_HOSTNAME(peer))
156 ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
157 STREAM_READABLE(pkt))
158 )
159 )
160
161 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_update_saved_open, TRACE_DEBUG)
162
163
164 /* BMP is notified of a peer status change internally */
165 TRACEPOINT_EVENT(
166 frr_bgp,
167 bmp_peer_status_changed,
168 TP_ARGS(struct peer *, peer),
169 TP_FIELDS(
170 ctf_string(peer, PEER_HOSTNAME(peer))
171 )
172 )
173
174 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_peer_status_changed, TRACE_DEBUG)
175
176
177 /*
178 * BMP is notified that a peer has transitioned in the opposite direction of
179 * Established internally
180 */
181 TRACEPOINT_EVENT(
182 frr_bgp,
183 bmp_peer_backward_transition,
184 TP_ARGS(struct peer *, peer),
185 TP_FIELDS(
186 ctf_string(peer, PEER_HOSTNAME(peer))
187 )
188 )
189
190 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_peer_backward, TRACE_DEBUG)
191
192
193 /*
194 * BMP is hooked for a route process
195 */
196 TRACEPOINT_EVENT(
197 frr_bgp,
198 bmp_process,
199 TP_ARGS(struct peer *, peer, char *, pfx, afi_t,
200 afi, safi_t, safi, bool, withdraw),
201 TP_FIELDS(
202 ctf_string(peer, PEER_HOSTNAME(peer))
203 ctf_string(prefix, pfx)
204 ctf_integer(afi_t, afi, afi)
205 ctf_integer(safi_t, safi, safi)
206 ctf_integer(bool, withdraw, withdraw)
207 )
208 )
209
210 TRACEPOINT_LOGLEVEL(frr_bgp, bmp_process, TRACE_DEBUG)
211
212 /*
213 * bgp_dest_lock/bgp_dest_unlock
214 */
215 TRACEPOINT_EVENT(
216 frr_bgp,
217 bgp_dest_lock,
218 TP_ARGS(struct bgp_dest *, dest),
219 TP_FIELDS(
220 ctf_string(prefix, bgp_dest_get_prefix_str(dest))
221 ctf_integer(unsigned int, count, bgp_dest_get_lock_count(dest))
222 )
223 )
224 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_dest_lock, TRACE_INFO)
225
226 TRACEPOINT_EVENT(
227 frr_bgp,
228 bgp_dest_unlock,
229 TP_ARGS(struct bgp_dest *, dest),
230 TP_FIELDS(
231 ctf_string(prefix, bgp_dest_get_prefix_str(dest))
232 ctf_integer(unsigned int, count, bgp_dest_get_lock_count(dest))
233 )
234 )
235 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_dest_unlock, TRACE_INFO)
236
237 /*
238 * peer_lock/peer_unlock
239 */
240 TRACEPOINT_EVENT(
241 frr_bgp,
242 bgp_peer_lock,
243 TP_ARGS(struct peer *, peer,
244 const char *, name),
245 TP_FIELDS(
246 ctf_string(caller, name)
247 ctf_string(peer, PEER_HOSTNAME(peer))
248 ctf_integer(unsigned int, count, peer->lock)
249 )
250 )
251 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_lock, TRACE_INFO)
252
253 TRACEPOINT_EVENT(
254 frr_bgp,
255 bgp_peer_unlock,
256 TP_ARGS(struct peer *, peer,
257 const char *, name),
258 TP_FIELDS(
259 ctf_string(caller, name)
260 ctf_string(peer, PEER_HOSTNAME(peer))
261 ctf_integer(unsigned int, count, peer->lock)
262 )
263 )
264 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_unlock, TRACE_INFO)
265
266 /*
267 * bgp_path_info_add/bgp_path_info_free
268 */
269 TRACEPOINT_EVENT(
270 frr_bgp,
271 bgp_path_info_add,
272 TP_ARGS(struct bgp_dest *, dest,
273 struct bgp_path_info *, bpi,
274 const char *, name),
275 TP_FIELDS(
276 ctf_string(caller, name)
277 ctf_string(prefix, bgp_dest_get_prefix_str(dest))
278 ctf_string(peer, PEER_HOSTNAME(bpi->peer))
279 ctf_integer(unsigned int, dest_lock,
280 bgp_dest_get_lock_count(dest))
281 ctf_integer(unsigned int, peer_lock, bpi->peer->lock)
282 )
283 )
284 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_add, TRACE_INFO)
285
286 TRACEPOINT_EVENT(
287 frr_bgp,
288 bgp_path_info_free,
289 TP_ARGS(struct bgp_path_info *, bpi,
290 const char *, name),
291 TP_FIELDS(
292 ctf_string(caller, name)
293 ctf_string(prefix, bgp_dest_get_prefix_str(bpi->net))
294 ctf_string(peer, PEER_HOSTNAME(bpi->peer))
295 ctf_integer(unsigned int, dest_lock,
296 bgp_dest_get_lock_count(bpi->net))
297 ctf_integer(unsigned int, peer_lock, bpi->peer->lock)
298 )
299 )
300 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_free, TRACE_INFO)
301
302 TRACEPOINT_EVENT(
303 frr_bgp,
304 evpn_mac_ip_zsend,
305 TP_ARGS(int, add, struct bgpevpn *, vpn,
306 const struct prefix_evpn *, pfx,
307 struct in_addr, vtep, esi_t *, esi),
308 TP_FIELDS(
309 ctf_string(action, add ? "add" : "del")
310 ctf_integer(vni_t, vni, vpn->vni)
311 ctf_array(unsigned char, mac, &pfx->prefix.macip_addr.mac,
312 sizeof(struct ethaddr))
313 ctf_array(unsigned char, ip, &pfx->prefix.macip_addr.ip,
314 sizeof(struct ipaddr))
315 ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
316 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
317 )
318 )
319 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mac_ip_zsend, TRACE_INFO)
320
321 TRACEPOINT_EVENT(
322 frr_bgp,
323 evpn_bum_vtep_zsend,
324 TP_ARGS(int, add, struct bgpevpn *, vpn,
325 const struct prefix_evpn *, pfx),
326 TP_FIELDS(
327 ctf_string(action, add ? "add" : "del")
328 ctf_integer(vni_t, vni, vpn->vni)
329 ctf_integer_network_hex(unsigned int, vtep,
330 pfx->prefix.imet_addr.ip.ipaddr_v4.s_addr)
331 )
332 )
333 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_bum_vtep_zsend, TRACE_INFO)
334
335 TRACEPOINT_EVENT(
336 frr_bgp,
337 evpn_mh_vtep_zsend,
338 TP_ARGS(bool, add, struct bgp_evpn_es *, es,
339 struct bgp_evpn_es_vtep *, es_vtep),
340 TP_FIELDS(
341 ctf_string(action, add ? "add" : "del")
342 ctf_string(esi, es->esi_str)
343 ctf_string(vtep, es_vtep->vtep_str)
344 )
345 )
346 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_vtep_zsend, TRACE_INFO)
347
348 TRACEPOINT_EVENT(
349 frr_bgp,
350 evpn_mh_nhg_zsend,
351 TP_ARGS(bool, add, bool, type_v4, uint32_t, nhg_id,
352 struct bgp_evpn_es_vrf *, es_vrf),
353 TP_FIELDS(
354 ctf_string(action, add ? "add" : "del")
355 ctf_string(type, type_v4 ? "v4" : "v6")
356 ctf_integer(unsigned int, nhg, nhg_id)
357 ctf_string(esi, es_vrf->es->esi_str)
358 ctf_integer(int, vrf, es_vrf->bgp_vrf->vrf_id)
359 )
360 )
361 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_nhg_zsend, TRACE_INFO)
362
363 TRACEPOINT_EVENT(
364 frr_bgp,
365 evpn_mh_nh_zsend,
366 TP_ARGS(uint32_t, nhg_id, struct bgp_evpn_es_vtep *, vtep,
367 struct bgp_evpn_es_vrf *, es_vrf),
368 TP_FIELDS(
369 ctf_integer(unsigned int, nhg, nhg_id)
370 ctf_string(vtep, vtep->vtep_str)
371 ctf_integer(int, svi, es_vrf->bgp_vrf->l3vni_svi_ifindex)
372 )
373 )
374 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_nh_zsend, TRACE_INFO)
375
376 TRACEPOINT_EVENT(
377 frr_bgp,
378 evpn_mh_nh_rmac_zsend,
379 TP_ARGS(bool, add, struct bgp_evpn_nh *, nh),
380 TP_FIELDS(
381 ctf_string(action, add ? "add" : "del")
382 ctf_integer(int, vrf, nh->bgp_vrf->vrf_id)
383 ctf_string(nh, nh->nh_str)
384 ctf_array(unsigned char, rmac, &nh->rmac,
385 sizeof(struct ethaddr))
386 )
387 )
388 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_nh_rmac_zsend, TRACE_INFO)
389
390 TRACEPOINT_EVENT(
391 frr_bgp,
392 evpn_mh_local_es_add_zrecv,
393 TP_ARGS(esi_t *, esi, struct in_addr, vtep,
394 uint8_t, active, uint8_t, bypass, uint16_t, df_pref),
395 TP_FIELDS(
396 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
397 ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
398 ctf_integer(uint8_t, active, active)
399 ctf_integer(uint8_t, bypass, bypass)
400 ctf_integer(uint16_t, df_pref, df_pref)
401 )
402 )
403 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_add_zrecv, TRACE_INFO)
404
405 TRACEPOINT_EVENT(
406 frr_bgp,
407 evpn_mh_local_es_del_zrecv,
408 TP_ARGS(esi_t *, esi),
409 TP_FIELDS(
410 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
411 )
412 )
413 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_del_zrecv, TRACE_INFO)
414
415 TRACEPOINT_EVENT(
416 frr_bgp,
417 evpn_mh_local_es_evi_add_zrecv,
418 TP_ARGS(esi_t *, esi, vni_t, vni),
419 TP_FIELDS(
420 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
421 ctf_integer(vni_t, vni, vni)
422 )
423 )
424 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_add_zrecv, TRACE_INFO)
425
426 TRACEPOINT_EVENT(
427 frr_bgp,
428 evpn_mh_local_es_evi_del_zrecv,
429 TP_ARGS(esi_t *, esi, vni_t, vni),
430 TP_FIELDS(
431 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
432 ctf_integer(vni_t, vni, vni)
433 )
434 )
435 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_del_zrecv, TRACE_INFO)
436
437 TRACEPOINT_EVENT(
438 frr_bgp,
439 evpn_local_vni_add_zrecv,
440 TP_ARGS(vni_t, vni, struct in_addr, vtep, vrf_id_t, vrf,
441 struct in_addr, mc_grp),
442 TP_FIELDS(
443 ctf_integer(vni_t, vni, vni)
444 ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
445 ctf_integer_network_hex(unsigned int, mc_grp,
446 mc_grp.s_addr)
447 ctf_integer(int, vrf, vrf)
448 )
449 )
450 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_add_zrecv, TRACE_INFO)
451
452 TRACEPOINT_EVENT(
453 frr_bgp,
454 evpn_local_vni_del_zrecv,
455 TP_ARGS(vni_t, vni),
456 TP_FIELDS(
457 ctf_integer(vni_t, vni, vni)
458 )
459 )
460 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_del_zrecv, TRACE_INFO)
461
462 TRACEPOINT_EVENT(
463 frr_bgp,
464 evpn_local_macip_add_zrecv,
465 TP_ARGS(vni_t, vni, struct ethaddr *, mac,
466 struct ipaddr *, ip, uint32_t, flags,
467 uint32_t, seqnum, esi_t *, esi),
468 TP_FIELDS(
469 ctf_integer(vni_t, vni, vni)
470 ctf_array(unsigned char, mac, mac,
471 sizeof(struct ethaddr))
472 ctf_array(unsigned char, ip, ip,
473 sizeof(struct ipaddr))
474 ctf_integer(uint32_t, flags, flags)
475 ctf_integer(uint32_t, seq, seqnum)
476 ctf_array(unsigned char, esi, esi, sizeof(esi_t))
477 )
478 )
479 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_add_zrecv, TRACE_INFO)
480
481 TRACEPOINT_EVENT(
482 frr_bgp,
483 evpn_local_macip_del_zrecv,
484 TP_ARGS(vni_t, vni, struct ethaddr *, mac, struct ipaddr *, ip,
485 int, state),
486 TP_FIELDS(
487 ctf_integer(vni_t, vni, vni)
488 ctf_array(unsigned char, mac, mac,
489 sizeof(struct ethaddr))
490 ctf_array(unsigned char, ip, ip,
491 sizeof(struct ipaddr))
492 ctf_integer(int, state, state)
493 )
494 )
495 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_del_zrecv, TRACE_INFO)
496
497 TRACEPOINT_EVENT(
498 frr_bgp,
499 evpn_local_l3vni_add_zrecv,
500 TP_ARGS(vni_t, vni, vrf_id_t, vrf,
501 struct ethaddr *, svi_rmac,
502 struct ethaddr *, vrr_rmac, int, filter,
503 struct in_addr, vtep, int, svi_ifindex,
504 bool, anycast_mac),
505 TP_FIELDS(
506 ctf_integer(vni_t, vni, vni)
507 ctf_integer(int, vrf, vrf)
508 ctf_array(unsigned char, svi_rmac, svi_rmac,
509 sizeof(struct ethaddr))
510 ctf_array(unsigned char, vrr_rmac, vrr_rmac,
511 sizeof(struct ethaddr))
512 ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
513 ctf_integer(int, filter, filter)
514 ctf_integer(int, svi_ifindex, svi_ifindex)
515 ctf_string(anycast_mac, anycast_mac ? "y" : "n")
516 )
517 )
518 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_add_zrecv, TRACE_INFO)
519
520 TRACEPOINT_EVENT(
521 frr_bgp,
522 evpn_local_l3vni_del_zrecv,
523 TP_ARGS(vni_t, vni, vrf_id_t, vrf),
524 TP_FIELDS(
525 ctf_integer(vni_t, vni, vni)
526 ctf_integer(int, vrf, vrf)
527 )
528 )
529 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_del_zrecv, TRACE_INFO)
530 /* clang-format on */
531
532 #include <lttng/tracepoint-event.h>
533
534 #endif /* HAVE_LTTNG */
535
536 #endif /* _BGP_TRACE_H */