]> git.proxmox.com Git - mirror_frr.git/blame - bgpd/bgp_trace.h
bgpd: Refactor subgroup_announce_table() to reuse an existing helpers
[mirror_frr.git] / bgpd / bgp_trace.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
d9a03c57
QY
2/* Tracing for BGP
3 *
4 * Copyright (C) 2020 NVIDIA Corporation
5 * Quentin Young
d9a03c57
QY
6 */
7
8#if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
9#define _BGP_TRACE_H
10
c7bb4f00 11#include "lib/trace.h"
d9a03c57
QY
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"
e439b736 24#include "bgpd/bgp_attr.h"
d9a03c57 25#include "lib/stream.h"
23aa35ad
AK
26#include "bgpd/bgp_evpn_private.h"
27#include "bgpd/bgp_evpn_mh.h"
28
d9a03c57
QY
29
30/* clang-format off */
31
32TRACEPOINT_EVENT_CLASS(
33 frr_bgp,
34 packet_process,
35 TP_ARGS(struct peer *, peer, bgp_size_t, size),
36 TP_FIELDS(
169afe9d 37 ctf_string(peer, PEER_HOSTNAME(peer))
d9a03c57
QY
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
47PKT_PROCESS_TRACEPOINT_INSTANCE(open_process)
48PKT_PROCESS_TRACEPOINT_INSTANCE(keepalive_process)
49PKT_PROCESS_TRACEPOINT_INSTANCE(update_process)
50PKT_PROCESS_TRACEPOINT_INSTANCE(notification_process)
51PKT_PROCESS_TRACEPOINT_INSTANCE(capability_process)
52PKT_PROCESS_TRACEPOINT_INSTANCE(refresh_process)
53
54TRACEPOINT_EVENT(
55 frr_bgp,
56 packet_read,
57 TP_ARGS(struct peer *, peer, struct stream *, pkt),
58 TP_FIELDS(
169afe9d 59 ctf_string(peer, PEER_HOSTNAME(peer))
fc3ee1e0
QY
60 ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
61 STREAM_READABLE(pkt))
d9a03c57
QY
62 )
63)
64
6401252f
QY
65TRACEPOINT_LOGLEVEL(frr_bgp, packet_read, TRACE_INFO)
66
67TRACEPOINT_EVENT(
68 frr_bgp,
69 process_update,
fc3ee1e0
QY
70 TP_ARGS(struct peer *, peer, char *, pfx, uint32_t, addpath_id, afi_t,
71 afi, safi_t, safi, struct attr *, attr),
6401252f 72 TP_FIELDS(
169afe9d 73 ctf_string(peer, PEER_HOSTNAME(peer))
6401252f
QY
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
82TRACEPOINT_LOGLEVEL(frr_bgp, process_update, TRACE_INFO)
83
84TRACEPOINT_EVENT(
85 frr_bgp,
86 input_filter,
fc3ee1e0
QY
87 TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
88 const char *, result),
6401252f 89 TP_FIELDS(
169afe9d 90 ctf_string(peer, PEER_HOSTNAME(peer))
6401252f
QY
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
98TRACEPOINT_LOGLEVEL(frr_bgp, input_filter, TRACE_INFO)
99
100TRACEPOINT_EVENT(
101 frr_bgp,
102 output_filter,
fc3ee1e0
QY
103 TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
104 const char *, result),
6401252f 105 TP_FIELDS(
169afe9d 106 ctf_string(peer, PEER_HOSTNAME(peer))
6401252f
QY
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
114TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO)
d9a03c57 115
e0302d7e
QY
116/* BMP tracepoints */
117
118/* BMP mirrors a packet to all mirror-enabled targets */
119TRACEPOINT_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
131TRACEPOINT_LOGLEVEL(frr_bgp, bmp_mirror_packet, TRACE_INFO)
132
133
134/* BMP sends an EOR */
135TRACEPOINT_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
146TRACEPOINT_LOGLEVEL(frr_bgp, bmp_eor, TRACE_INFO)
147
148
149/* BMP updates its copy of the last OPEN a peer sent */
150TRACEPOINT_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
161TRACEPOINT_LOGLEVEL(frr_bgp, bmp_update_saved_open, TRACE_DEBUG)
162
163
164/* BMP is notified of a peer status change internally */
165TRACEPOINT_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
174TRACEPOINT_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 */
181TRACEPOINT_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
190TRACEPOINT_LOGLEVEL(frr_bgp, bmp_peer_backward, TRACE_DEBUG)
191
192
193/*
194 * BMP is hooked for a route process
195 */
196TRACEPOINT_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
210TRACEPOINT_LOGLEVEL(frr_bgp, bmp_process, TRACE_DEBUG)
211
63836a96
DA
212/*
213 * bgp_dest_lock/bgp_dest_unlock
214 */
215TRACEPOINT_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)
224TRACEPOINT_LOGLEVEL(frr_bgp, bgp_dest_lock, TRACE_INFO)
225
226TRACEPOINT_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)
235TRACEPOINT_LOGLEVEL(frr_bgp, bgp_dest_unlock, TRACE_INFO)
236
aa50b41a
DA
237/*
238 * peer_lock/peer_unlock
239 */
240TRACEPOINT_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)
251TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_lock, TRACE_INFO)
252
253TRACEPOINT_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)
264TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_unlock, TRACE_INFO)
265
eb473185
DA
266/*
267 * bgp_path_info_add/bgp_path_info_free
268 */
269TRACEPOINT_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)
284TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_add, TRACE_INFO)
285
286TRACEPOINT_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)
300TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_free, TRACE_INFO)
301
23aa35ad
AK
302TRACEPOINT_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)
319TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mac_ip_zsend, TRACE_INFO)
320
321TRACEPOINT_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)
333TRACEPOINT_LOGLEVEL(frr_bgp, evpn_bum_vtep_zsend, TRACE_INFO)
334
335TRACEPOINT_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)
346TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_vtep_zsend, TRACE_INFO)
347
348TRACEPOINT_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)
361TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_nhg_zsend, TRACE_INFO)
362
363TRACEPOINT_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)
374TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_nh_zsend, TRACE_INFO)
375
376TRACEPOINT_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)
388TRACEPOINT_LOGLEVEL(frr_bgp, evpn_nh_rmac_zsend, TRACE_INFO)
a383bfc7
AK
389
390TRACEPOINT_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)
403TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_add_zrecv, TRACE_INFO)
404
405TRACEPOINT_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)
413TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_del_zrecv, TRACE_INFO)
414
415TRACEPOINT_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)
424TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_add_zrecv, TRACE_INFO)
425
426TRACEPOINT_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)
435TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_del_zrecv, TRACE_INFO)
436
437TRACEPOINT_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)
450TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_add_zrecv, TRACE_INFO)
451
452TRACEPOINT_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)
460TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_del_zrecv, TRACE_INFO)
461
462TRACEPOINT_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)
479TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_add_zrecv, TRACE_INFO)
480
481TRACEPOINT_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)
495TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_del_zrecv, TRACE_INFO)
496
497TRACEPOINT_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)
518TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_add_zrecv, TRACE_INFO)
519
520TRACEPOINT_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)
529TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_del_zrecv, TRACE_INFO)
fc3ee1e0
QY
530/* clang-format on */
531
d9a03c57
QY
532#include <lttng/tracepoint-event.h>
533
d9a03c57
QY
534#endif /* HAVE_LTTNG */
535
536#endif /* _BGP_TRACE_H */