From 888e727c9ec32da0579d93709fb2d7ead166cbcc Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 2 Sep 2021 08:53:19 -0400 Subject: [PATCH] bgpd: Add some debug events for when things go wrong As it stands there are cases where FRR is silently handling error events and not giving any log output to say what is going wrong. This should be fixed. Signed-off-by: Donald Sharp --- bgpd/bgp_network.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 7c9aa44c80..3005eba271 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -706,7 +706,8 @@ int bgp_connect(struct peer *peer) ifindex_t ifindex = 0; if (peer->conf_if && BGP_PEER_SU_UNSPEC(peer)) { - zlog_debug("Peer address not learnt: Returning from connect"); + if (bgp_debug_neighbor_events(peer)) + zlog_debug("Peer address not learnt: Returning from connect"); return 0; } frr_with_privs(&bgpd_privs) { @@ -714,8 +715,13 @@ int bgp_connect(struct peer *peer) peer->fd = vrf_sockunion_socket(&peer->su, peer->bgp->vrf_id, bgp_get_bound_name(peer)); } - if (peer->fd < 0) + if (peer->fd < 0) { + if (bgp_debug_neighbor_events(peer)) + zlog_debug("%s: Failure to create socket for connection to %s, error received: %s(%d)", + __func__, peer->host, safe_strerror(errno), + errno); return -1; + } set_nonblocking(peer->fd); @@ -725,8 +731,13 @@ int bgp_connect(struct peer *peer) bgp_socket_set_buffer_size(peer->fd); - if (bgp_set_socket_ttl(peer, peer->fd) < 0) + if (bgp_set_socket_ttl(peer, peer->fd) < 0) { + if (bgp_debug_neighbor_events(peer)) + zlog_debug("%s: Failure to set socket ttl for connection to %s, error received: %s(%d)", + __func__, peer->host, safe_strerror(errno), + errno); return -1; + } sockopt_reuseaddr(peer->fd); sockopt_reuseport(peer->fd); -- 2.39.5