summaryrefslogtreecommitdiff
path: root/bgpd/bgp_network.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2021-09-02 08:53:19 -0400
committerDonald Sharp <sharpd@nvidia.com>2021-09-02 09:19:48 -0400
commit888e727c9ec32da0579d93709fb2d7ead166cbcc (patch)
tree03e6ebd2cb051e36365ee452b5aa10407d81d3f4 /bgpd/bgp_network.c
parent0e099318c8469319de72a0367c261fd6b30c1e98 (diff)
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 <sharpd@nvidia.com>
Diffstat (limited to 'bgpd/bgp_network.c')
-rw-r--r--bgpd/bgp_network.c17
1 files 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);