diff options
| author | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2023-08-30 20:11:46 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-30 20:11:46 -0500 |
| commit | 885146ea9c8f9da00bac6ea1ac04672efde890eb (patch) | |
| tree | 742106e3e64c48cd2c2155ba4791fc2bc5d57b3e | |
| parent | e89fd723eeccd0804cb186c67bb891990bd2e059 (diff) | |
| parent | 6f8c927b03c454aa309b84cefccc4faa31e0c03f (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.c | 11 |
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; } |
