1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2020 NVIDIA Corporation
8 #if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
11 #include "lib/trace.h"
15 #undef TRACEPOINT_PROVIDER
16 #define TRACEPOINT_PROVIDER frr_bgp
18 #undef TRACEPOINT_INCLUDE
19 #define TRACEPOINT_INCLUDE "bgpd/bgp_trace.h"
21 #include <lttng/tracepoint.h>
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"
30 /* clang-format off */
32 TRACEPOINT_EVENT_CLASS(
35 TP_ARGS(struct peer
*, peer
, bgp_size_t
, size
),
37 ctf_string(peer
, PEER_HOSTNAME(peer
))
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)
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
)
57 TP_ARGS(struct peer
*, peer
, struct stream
*, pkt
),
59 ctf_string(peer
, PEER_HOSTNAME(peer
))
60 ctf_sequence_hex(uint8_t, packet
, pkt
->data
, size_t,
65 TRACEPOINT_LOGLEVEL(frr_bgp
, packet_read
, TRACE_INFO
)
70 TP_ARGS(struct peer
*, peer
, char *, pfx
, uint32_t, addpath_id
, afi_t
,
71 afi
, safi_t
, safi
, struct attr
*, attr
),
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
)
82 TRACEPOINT_LOGLEVEL(frr_bgp
, process_update
, TRACE_INFO
)
87 TP_ARGS(struct peer
*, peer
, char *, pfx
, afi_t
, afi
, safi_t
, safi
,
88 const char *, result
),
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
)
98 TRACEPOINT_LOGLEVEL(frr_bgp
, input_filter
, TRACE_INFO
)
103 TP_ARGS(struct peer
*, peer
, char *, pfx
, afi_t
, afi
, safi_t
, safi
,
104 const char *, result
),
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
)
114 TRACEPOINT_LOGLEVEL(frr_bgp
, output_filter
, TRACE_INFO
)
116 /* BMP tracepoints */
118 /* BMP mirrors a packet to all mirror-enabled targets */
122 TP_ARGS(struct peer
*, peer
, uint8_t, type
, struct stream
*, pkt
),
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
))
131 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_mirror_packet
, TRACE_INFO
)
134 /* BMP sends an EOR */
138 TP_ARGS(afi_t
, afi
, safi_t
, safi
, uint8_t, flags
),
140 ctf_integer(afi_t
, afi
, afi
)
141 ctf_integer(safi_t
, safi
, safi
)
142 ctf_integer(uint8_t, flags
, flags
)
146 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_eor
, TRACE_INFO
)
149 /* BMP updates its copy of the last OPEN a peer sent */
152 bmp_update_saved_open
,
153 TP_ARGS(struct peer
*, peer
, struct stream
*, pkt
),
155 ctf_string(peer
, PEER_HOSTNAME(peer
))
156 ctf_sequence_hex(uint8_t, packet
, pkt
->data
, size_t,
157 STREAM_READABLE(pkt
))
161 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_update_saved_open
, TRACE_DEBUG
)
164 /* BMP is notified of a peer status change internally */
167 bmp_peer_status_changed
,
168 TP_ARGS(struct peer
*, peer
),
170 ctf_string(peer
, PEER_HOSTNAME(peer
))
174 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_peer_status_changed
, TRACE_DEBUG
)
178 * BMP is notified that a peer has transitioned in the opposite direction of
179 * Established internally
183 bmp_peer_backward_transition
,
184 TP_ARGS(struct peer
*, peer
),
186 ctf_string(peer
, PEER_HOSTNAME(peer
))
190 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_peer_backward
, TRACE_DEBUG
)
194 * BMP is hooked for a route process
199 TP_ARGS(struct peer
*, peer
, char *, pfx
, afi_t
,
200 afi
, safi_t
, safi
, bool, withdraw
),
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
)
210 TRACEPOINT_LOGLEVEL(frr_bgp
, bmp_process
, TRACE_DEBUG
)
213 * bgp_dest_lock/bgp_dest_unlock
218 TP_ARGS(struct bgp_dest
*, dest
),
220 ctf_string(prefix
, bgp_dest_get_prefix_str(dest
))
221 ctf_integer(unsigned int, count
, bgp_dest_get_lock_count(dest
))
224 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_dest_lock
, TRACE_INFO
)
229 TP_ARGS(struct bgp_dest
*, dest
),
231 ctf_string(prefix
, bgp_dest_get_prefix_str(dest
))
232 ctf_integer(unsigned int, count
, bgp_dest_get_lock_count(dest
))
235 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_dest_unlock
, TRACE_INFO
)
238 * peer_lock/peer_unlock
243 TP_ARGS(struct peer
*, peer
,
246 ctf_string(caller
, name
)
247 ctf_string(peer
, PEER_HOSTNAME(peer
))
248 ctf_integer(unsigned int, count
, peer
->lock
)
251 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_peer_lock
, TRACE_INFO
)
256 TP_ARGS(struct peer
*, peer
,
259 ctf_string(caller
, name
)
260 ctf_string(peer
, PEER_HOSTNAME(peer
))
261 ctf_integer(unsigned int, count
, peer
->lock
)
264 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_peer_unlock
, TRACE_INFO
)
267 * bgp_path_info_add/bgp_path_info_free
272 TP_ARGS(struct bgp_dest
*, dest
,
273 struct bgp_path_info
*, bpi
,
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
)
284 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_path_info_add
, TRACE_INFO
)
289 TP_ARGS(struct bgp_path_info
*, bpi
,
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
)
300 TRACEPOINT_LOGLEVEL(frr_bgp
, bgp_path_info_free
, TRACE_INFO
)
305 TP_ARGS(int, add
, struct bgpevpn
*, vpn
,
306 const struct prefix_evpn
*, pfx
,
307 struct in_addr
, vtep
, esi_t
*, esi
),
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
))
319 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mac_ip_zsend
, TRACE_INFO
)
324 TP_ARGS(int, add
, struct bgpevpn
*, vpn
,
325 const struct prefix_evpn
*, pfx
),
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
)
333 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_bum_vtep_zsend
, TRACE_INFO
)
338 TP_ARGS(bool, add
, struct bgp_evpn_es
*, es
,
339 struct bgp_evpn_es_vtep
*, es_vtep
),
341 ctf_string(action
, add
? "add" : "del")
342 ctf_string(esi
, es
->esi_str
)
343 ctf_string(vtep
, es_vtep
->vtep_str
)
346 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_vtep_zsend
, TRACE_INFO
)
351 TP_ARGS(bool, add
, bool, type_v4
, uint32_t, nhg_id
,
352 struct bgp_evpn_es_vrf
*, es_vrf
),
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
)
361 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_nhg_zsend
, TRACE_INFO
)
366 TP_ARGS(uint32_t, nhg_id
, struct bgp_evpn_es_vtep
*, vtep
,
367 struct bgp_evpn_es_vrf
*, es_vrf
),
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
)
374 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_nh_zsend
, TRACE_INFO
)
378 evpn_mh_nh_rmac_zsend
,
379 TP_ARGS(bool, add
, struct bgp_evpn_nh
*, nh
),
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
))
388 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_nh_rmac_zsend
, TRACE_INFO
)
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
),
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
)
403 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_local_es_add_zrecv
, TRACE_INFO
)
407 evpn_mh_local_es_del_zrecv
,
408 TP_ARGS(esi_t
*, esi
),
410 ctf_array(unsigned char, esi
, esi
, sizeof(esi_t
))
413 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_local_es_del_zrecv
, TRACE_INFO
)
417 evpn_mh_local_es_evi_add_zrecv
,
418 TP_ARGS(esi_t
*, esi
, vni_t
, vni
),
420 ctf_array(unsigned char, esi
, esi
, sizeof(esi_t
))
421 ctf_integer(vni_t
, vni
, vni
)
424 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_local_es_evi_add_zrecv
, TRACE_INFO
)
428 evpn_mh_local_es_evi_del_zrecv
,
429 TP_ARGS(esi_t
*, esi
, vni_t
, vni
),
431 ctf_array(unsigned char, esi
, esi
, sizeof(esi_t
))
432 ctf_integer(vni_t
, vni
, vni
)
435 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_mh_local_es_evi_del_zrecv
, TRACE_INFO
)
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
),
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
,
447 ctf_integer(int, vrf
, vrf
)
450 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_vni_add_zrecv
, TRACE_INFO
)
454 evpn_local_vni_del_zrecv
,
457 ctf_integer(vni_t
, vni
, vni
)
460 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_vni_del_zrecv
, TRACE_INFO
)
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
),
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
))
479 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_macip_add_zrecv
, TRACE_INFO
)
483 evpn_local_macip_del_zrecv
,
484 TP_ARGS(vni_t
, vni
, struct ethaddr
*, mac
, struct ipaddr
*, ip
,
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
)
495 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_macip_del_zrecv
, TRACE_INFO
)
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
,
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")
518 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_l3vni_add_zrecv
, TRACE_INFO
)
522 evpn_local_l3vni_del_zrecv
,
523 TP_ARGS(vni_t
, vni
, vrf_id_t
, vrf
),
525 ctf_integer(vni_t
, vni
, vni
)
526 ctf_integer(int, vrf
, vrf
)
529 TRACEPOINT_LOGLEVEL(frr_bgp
, evpn_local_l3vni_del_zrecv
, TRACE_INFO
)
530 /* clang-format on */
532 #include <lttng/tracepoint-event.h>
534 #endif /* HAVE_LTTNG */
536 #endif /* _BGP_TRACE_H */