summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2023-08-30 20:11:46 -0500
committerGitHub <noreply@github.com>2023-08-30 20:11:46 -0500
commit885146ea9c8f9da00bac6ea1ac04672efde890eb (patch)
tree742106e3e64c48cd2c2155ba4791fc2bc5d57b3e
parente89fd723eeccd0804cb186c67bb891990bd2e059 (diff)
parent6f8c927b03c454aa309b84cefccc4faa31e0c03f (diff)
Merge pull request #14301 from donaldsharp/bgp_lost_hash
bgpd: Add peers back to peer hash when peer_xfer_conn fails
-rw-r--r--bgpd/bgp_fsm.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index b0d2a8fe0e..df137b8d54 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -2146,6 +2146,17 @@ bgp_establish(struct peer_connection *connection)
peer = peer_xfer_conn(peer);
if (!peer) {
flog_err(EC_BGP_CONNECT, "%%Neighbor failed in xfer_conn");
+
+ /*
+ * A failure of peer_xfer_conn but not putting the peers
+ * back in the hash ends up with a situation where incoming
+ * connections are rejected, as that the peer is not found
+ * when a lookup is done
+ */
+ (void)hash_get(peer->bgp->peerhash, peer, hash_alloc_intern);
+ if (other)
+ (void)hash_get(other->bgp->peerhash, other,
+ hash_alloc_intern);
return BGP_FSM_FAILURE;
}