Skip to content

Commit

Permalink
Merge pull request #18015 from opensourcerouting/fix/backport_5330a41…
Browse files Browse the repository at this point in the history
…c1e41fc2bd0424474d210232ffbed8b5f_10.2

bgpd: Do not start BGP session if BGP identifier is not set (backport)
  • Loading branch information
Jafaral authored Feb 5, 2025
2 parents 8e1c0ab + a94ff3f commit 52a0d16
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
1 change: 1 addition & 0 deletions bgpd/bgp_fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,7 @@ const char *const peer_down_str[] = {
"Admin. shutdown (RTT)",
"Suppress Fib Turned On or Off",
"Password config change",
"Router ID is missing",
};

static void bgp_graceful_restart_timer_off(struct peer_connection *connection,
Expand Down
17 changes: 16 additions & 1 deletion bgpd/bgp_network.c
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ static void bgp_accept(struct event *thread)

/* Do not try to reconnect if the peer reached maximum
* prefixes, restart timer is still running or the peer
* is shutdown.
* is shutdown, or BGP identifier is not set (0.0.0.0).
*/
if (BGP_PEER_START_SUPPRESSED(peer1)) {
if (bgp_debug_neighbor_events(peer1)) {
Expand All @@ -585,6 +585,14 @@ static void bgp_accept(struct event *thread)
return;
}

if (peer1->bgp->router_id.s_addr == INADDR_ANY) {
zlog_warn("[Event] Incoming BGP connection rejected from %s due missing BGP identifier, set it with `bgp router-id`",
peer1->host);
peer1->last_reset = PEER_DOWN_ROUTER_ID_ZERO;
close(bgp_sock);
return;
}

if (bgp_debug_neighbor_events(peer1))
zlog_debug("[Event] connection from %s fd %d, active peer status %d fd %d",
inet_sutop(&su, buf), bgp_sock, connection1->status,
Expand Down Expand Up @@ -770,6 +778,13 @@ int bgp_connect(struct peer_connection *connection)
assert(!CHECK_FLAG(connection->thread_flags, PEER_THREAD_READS_ON));
ifindex_t ifindex = 0;

if (peer->bgp->router_id.s_addr == INADDR_ANY) {
peer->last_reset = PEER_DOWN_ROUTER_ID_ZERO;
zlog_warn("%s: BGP identifier is missing for peer %s, set it with `bgp router-id`",
__func__, peer->host);
return connect_error;
}

if (peer->conf_if && BGP_CONNECTION_SU_UNSPEC(connection)) {
if (bgp_debug_neighbor_events(peer))
zlog_debug("Peer address not learnt: Returning from connect");
Expand Down
1 change: 1 addition & 0 deletions bgpd/bgpd.h
Original file line number Diff line number Diff line change
Expand Up @@ -1826,6 +1826,7 @@ struct peer {
#define PEER_DOWN_RTT_SHUTDOWN 35U /* Automatically shutdown due to RTT */
#define PEER_DOWN_SUPPRESS_FIB_PENDING 36U /* Suppress fib pending changed */
#define PEER_DOWN_PASSWORD_CHANGE 37U /* neighbor password command */
#define PEER_DOWN_ROUTER_ID_ZERO 38U /* router-id is 0.0.0.0 */
/*
* Remember to update peer_down_str in bgp_fsm.c when you add
* a new value to the last_reset reason
Expand Down

0 comments on commit 52a0d16

Please sign in to comment.