diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 60d594f7f3e8..9b150f4aa19b 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -47,6 +47,7 @@ #include "bgpd/bgp_network.h" #include "bgpd/bgp_zebra.h" #include "bgpd/bgp_nht.h" +#include "bgpd/bgp_trace.h" extern struct zebra_privs_t bgpd_privs; @@ -431,6 +432,8 @@ static void bgp_accept(struct thread *thread) "%s: Failure to set socket ttl for connection to %s, error received: %s(%d)", __func__, peer1->host, safe_strerror(errno), errno); + frrtrace(3, frr_bgp, bgp_err_str, peer1->host, + peer1->flags, 1); return; } @@ -719,6 +722,8 @@ int bgp_connect(struct peer *peer) zlog_debug("%s: Failure to create socket for connection to %s, error received: %s(%d)", __func__, peer->host, safe_strerror(errno), errno); + frrtrace(3, frr_bgp, bgp_err_str, peer->host, + peer->flags,2); return -1; } diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h index e07c0be3c0e6..3db9300cdc9c 100644 --- a/bgpd/bgp_trace.h +++ b/bgpd/bgp_trace.h @@ -1197,6 +1197,20 @@ TRACEPOINT_EVENT( ) TRACEPOINT_LOGLEVEL(frr_bgp, gr_bgp_state, TRACE_INFO) +TRACEPOINT_EVENT( + frr_bgp, + bgp_err_str, + TP_ARGS(char *, peer_host, + uint64_t, peer_flags, + uint8_t, location), + TP_FIELDS( + ctf_string(peer, peer_host) + ctf_integer(uint64_t, peer_flags, peer_flags) + ctf_integer(uint8_t, location, location) + ) +) +TRACEPOINT_LOGLEVEL(frr_bgp, bgp_err_str, TRACE_INFO) + /* clang-format on */ #include diff --git a/tools/frr_babeltrace.py b/tools/frr_babeltrace.py index c964615e4dfb..689fcbdce625 100755 --- a/tools/frr_babeltrace.py +++ b/tools/frr_babeltrace.py @@ -70,11 +70,11 @@ def location_zebra_err_string(field_val): elif field_val == 2: return ("IFLA_GRE_LOCAL missing from GRE IF message") elif field_val == 3: - return ("IFLA_GRE_REMOTE missing from GRE IF message") + return ("IFLA_GRE_REMOTE missing from GRE IF message") elif field_val == 4: - return ("IFLA_GRE_LINK missing from GRE IF message") + return ("IFLA_GRE_LINK missing from GRE IF message") elif field_val == 5: - return ("IFLA_VXLAN_ID missing from VXLAN IF message") + return ("IFLA_VXLAN_ID missing from VXLAN IF message") elif field_val == 6: return ("IFLA_VXLAN_LOCAL missing from VXLAN IF message") elif field_val == 7: @@ -262,6 +262,12 @@ def location_last_route_re(field_val): elif field_val == 2: return ("RE not installed") +def location_bgp_err_str(field_val): + if field_val == 1: + return ("failed in bgp_accept") + elif field_val == 2: + return ("failed in bgp_connect") + def print_prefix_addr(field_val): """ pretty print "struct prefix" @@ -756,20 +762,20 @@ def parse_frr_zebra_if_dplane_ifp_handling(event): def parse_frr_zebra_if_dplane_ifp_handling_new(event): field_parsers = {"location" : location_if_dplane_ifp_handling_new} parse_event(event, field_parsers) - + def parse_frr_bgp_gr_deferral_timer_start(event): field_parsers = {"location": print_location_gr_deferral_timer_start, "afi": print_afi_string, "safi": print_safi_string} parse_event(event, field_parsers) - + def parse_frr_bgp_gr_deferral_timer_expiry(event): field_parsers = {"afi": print_afi_string, "safi": print_safi_string} parse_event(event, field_parsers) - + def parse_frr_bgp_gr_eors(event): field_parsers = {"location": print_location_gr_eors, "afi": print_afi_string, @@ -815,7 +821,7 @@ def parse_frr_update_prefix_filter(event): def parse_frr_bgp_attr_type_unsupported(event): field_parsers = {"attr" : location_attr_type_unsupported} - + parse_event(event, field_parsers) def parse_frr_zebra_gr_last_route_re(event): @@ -845,6 +851,12 @@ def parse_frr_zebra_netlink_msg_err(event): def parse_frr_zebra_netlink_intf_err(event): field_parsers = {"location" : location_netlink_intf_err} parse_event(event, field_parsers) + +def parse_frr_bgp_err_str(event): + field_parsers = {"location" : location_bgp_err_str} + parse_event(event, field_parsers) + + ############################ evpn parsers - end *############################# def main(): @@ -971,6 +983,8 @@ def main(): parse_frr_zebra_netlink_msg_err, "frr_zebra:netlink_intf_err": parse_frr_zebra_netlink_intf_err, + "frr_bgp:bgp_err_str": + parse_frr_bgp_err_str, } # get the trace path from the first command line argument