]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #12562 from opensourcerouting/fix/add_frrtrace_points_for_peer_loc...
authorRuss White <russ@riw.us>
Tue, 27 Dec 2022 20:07:57 +0000 (15:07 -0500)
committerGitHub <noreply@github.com>
Tue, 27 Dec 2022 20:07:57 +0000 (15:07 -0500)
bgpd: A bit more tracepoints for lttng

bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_trace.h
bgpd/bgpd.c

index f4b01ab2727c7dab91b42d28c870f164e34a2029..e478abc44a67df3fbbe3bb73e899c30a5fb0534c 100644 (file)
@@ -277,8 +277,10 @@ struct bgp_path_info_extra *bgp_path_info_extra_get(struct bgp_path_info *pi)
 }
 
 /* Free bgp route information. */
-static void bgp_path_info_free(struct bgp_path_info *path)
+void bgp_path_info_free_with_caller(const char *name,
+                                   struct bgp_path_info *path)
 {
+       frrtrace(2, frr_bgp, bgp_path_info_free, path, name);
        bgp_attr_unintern(&path->attr);
 
        bgp_unlink_nexthop(path);
@@ -389,8 +391,10 @@ static int bgp_dest_set_defer_flag(struct bgp_dest *dest, bool delete)
        return -1;
 }
 
-void bgp_path_info_add(struct bgp_dest *dest, struct bgp_path_info *pi)
+void bgp_path_info_add_with_caller(const char *name, struct bgp_dest *dest,
+                                  struct bgp_path_info *pi)
 {
+       frrtrace(2, frr_bgp, bgp_path_info_add, dest, pi, name);
        struct bgp_path_info *top;
 
        top = bgp_dest_get_bgp_path_info(dest);
index 152a8a0a7250e4b73459db2b07d8da903331546b..e16e077029563796fe8cf65b37138840a62e425a 100644 (file)
@@ -883,4 +883,12 @@ bgp_path_selection_reason2str(enum bgp_path_selection_reason reason);
 extern bool bgp_addpath_encode_rx(struct peer *peer, afi_t afi, safi_t safi);
 extern const struct prefix_rd *bgp_rd_from_dest(const struct bgp_dest *dest,
                                                safi_t safi);
+extern void bgp_path_info_free_with_caller(const char *caller,
+                                          struct bgp_path_info *path);
+extern void bgp_path_info_add_with_caller(const char *caller,
+                                         struct bgp_dest *dest,
+                                         struct bgp_path_info *pi);
+#define bgp_path_info_add(A, B)                                                \
+       bgp_path_info_add_with_caller(__func__, (A), (B))
+#define bgp_path_info_free(B) bgp_path_info_free_with_caller(__func__, (B))
 #endif /* _QUAGGA_BGP_ROUTE_H */
index 14149b5139a66d71e24291748708f6d3a862b54a..7cc8f24e06be76229ed1c9133f32aa6b524e69a3 100644 (file)
@@ -247,6 +247,71 @@ TRACEPOINT_EVENT(
 )
 TRACEPOINT_LOGLEVEL(frr_bgp, bgp_dest_unlock, TRACE_INFO)
 
+/*
+ * peer_lock/peer_unlock
+ */
+TRACEPOINT_EVENT(
+       frr_bgp,
+       bgp_peer_lock,
+       TP_ARGS(struct peer *, peer,
+               const char *, name),
+       TP_FIELDS(
+               ctf_string(caller, name)
+               ctf_string(peer, PEER_HOSTNAME(peer))
+               ctf_integer(unsigned int, count, peer->lock)
+       )
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_lock, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+       frr_bgp,
+       bgp_peer_unlock,
+       TP_ARGS(struct peer *, peer,
+               const char *, name),
+       TP_FIELDS(
+               ctf_string(caller, name)
+               ctf_string(peer, PEER_HOSTNAME(peer))
+               ctf_integer(unsigned int, count, peer->lock)
+       )
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, bgp_peer_unlock, TRACE_INFO)
+
+/*
+ * bgp_path_info_add/bgp_path_info_free
+ */
+TRACEPOINT_EVENT(
+       frr_bgp,
+       bgp_path_info_add,
+       TP_ARGS(struct bgp_dest *, dest,
+               struct bgp_path_info *, bpi,
+               const char *, name),
+       TP_FIELDS(
+               ctf_string(caller, name)
+               ctf_string(prefix, bgp_dest_get_prefix_str(dest))
+               ctf_string(peer, PEER_HOSTNAME(bpi->peer))
+               ctf_integer(unsigned int, dest_lock,
+                           bgp_dest_get_lock_count(dest))
+               ctf_integer(unsigned int, peer_lock, bpi->peer->lock)
+       )
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_add, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+       frr_bgp,
+       bgp_path_info_free,
+       TP_ARGS(struct bgp_path_info *, bpi,
+               const char *, name),
+       TP_FIELDS(
+               ctf_string(caller, name)
+               ctf_string(prefix, bgp_dest_get_prefix_str(bpi->net))
+               ctf_string(peer, PEER_HOSTNAME(bpi->peer))
+               ctf_integer(unsigned int, dest_lock,
+                           bgp_dest_get_lock_count(bpi->net))
+               ctf_integer(unsigned int, peer_lock, bpi->peer->lock)
+       )
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, bgp_path_info_free, TRACE_INFO)
+
 TRACEPOINT_EVENT(
        frr_bgp,
        evpn_mac_ip_zsend,
index 734e44f2525d3c552a4bff48dd2b910eaf353f0a..9b4aa38d7af89a5b2c7df306ec9d8ad985580347 100644 (file)
@@ -93,6 +93,7 @@
 #include "bgpd/bgp_evpn_mh.h"
 #include "bgpd/bgp_mac.h"
 #include "bgpd/bgp_orr.h"
+#include "bgp_trace.h"
 
 DEFINE_MTYPE_STATIC(BGPD, PEER_TX_SHUTDOWN_MSG, "Peer shutdown message (TX)");
 DEFINE_MTYPE_STATIC(BGPD, BGP_EVPN_INFO, "BGP EVPN instance information");
@@ -1194,6 +1195,7 @@ static void peer_free(struct peer *peer)
 /* increase reference count on a struct peer */
 struct peer *peer_lock_with_caller(const char *name, struct peer *peer)
 {
+       frrtrace(2, frr_bgp, bgp_peer_lock, peer, name);
        assert(peer && (peer->lock >= 0));
 
        peer->lock++;
@@ -1206,6 +1208,7 @@ struct peer *peer_lock_with_caller(const char *name, struct peer *peer)
  */
 struct peer *peer_unlock_with_caller(const char *name, struct peer *peer)
 {
+       frrtrace(2, frr_bgp, bgp_peer_unlock, peer, name);
        assert(peer && (peer->lock > 0));
 
        peer->lock--;