From: Donatas Abraitis Date: Tue, 17 Jan 2023 16:07:46 +0000 (+0200) Subject: Revert "bgpd: fix for crash when no neighbor A.B.C.D remote-as AS_NUM with orr config" X-Git-Tag: base_8.5~50^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=af7e7dbec5afafde314ec8a8f8582066b5ce2382;p=matthieu%2Ffrr.git Revert "bgpd: fix for crash when no neighbor A.B.C.D remote-as AS_NUM with orr config" This reverts commit 5fcf01c9ae0b9c595c883ad1ca80ccb0c4516b1d. --- diff --git a/bgpd/bgp_orr.c b/bgpd/bgp_orr.c index 894eae687f..f11fa900df 100644 --- a/bgpd/bgp_orr.c +++ b/bgpd/bgp_orr.c @@ -514,8 +514,8 @@ static int peer_orr_group_set(struct peer *peer, afi_t afi, safi_t safi, } /* Unset optimal route reflection group from the peer*/ -int peer_orr_group_unset(struct peer *peer, afi_t afi, safi_t safi, - const char *orr_group_name) +static int peer_orr_group_unset(struct peer *peer, afi_t afi, safi_t safi, + const char *orr_group_name) { struct bgp_orr_group *orr_group = NULL; @@ -537,9 +537,8 @@ int peer_orr_group_unset(struct peer *peer, afi_t afi, safi_t safi, /* Should not be Null when orr-group is enabled on peer */ assert(orr_group); - /* Check if the peer is one of the root nodes of the ORR group */ - if (is_orr_root_node(orr_group, peer->host)) - return CMD_WARNING; + UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_ORR_GROUP); + XFREE(MTYPE_BGP_ORR_GROUP_NAME, peer->orr_group_name[afi][safi]); /* Remove the peer from ORR Group's client list */ bgp_orr_group_rrclient_update(peer, afi, safi, orr_group_name, false); @@ -547,9 +546,6 @@ int peer_orr_group_unset(struct peer *peer, afi_t afi, safi_t safi, /* Update ORR group active root and unregister with IGP */ bgp_peer_update_orr_group_active_root(peer, afi, safi, orr_group); - UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_ORR_GROUP); - XFREE(MTYPE_BGP_ORR_GROUP_NAME, peer->orr_group_name[afi][safi]); - return CMD_SUCCESS; } @@ -898,33 +894,8 @@ void bgp_peer_update_orr_active_roots(struct peer *peer) orr_group = bgp_orr_group_lookup_by_name( peer->bgp, afi, safi, peer->orr_group_name[afi][safi]); assert(orr_group); - - /* Free ORR related memory. */ - if (peer->status != Deleted) { - bgp_peer_update_orr_group_active_root(peer, afi, safi, - orr_group); - continue; - } - - if (!is_orr_root_node(orr_group, peer->host)) { - peer_orr_group_unset(peer, afi, safi, - peer->orr_group_name[afi][safi]); - continue; - } - - if (is_orr_primary_root(orr_group, peer->host)) { - orr_group->primary = orr_group->secondary; - orr_group->secondary = orr_group->tertiary; - } else if (is_orr_secondary_root(orr_group, peer->host)) - orr_group->secondary = orr_group->tertiary; - orr_group->tertiary = NULL; - - bgp_afi_safi_orr_group_set(peer->bgp, afi, safi, - orr_group->name, orr_group->primary, - orr_group->secondary, - orr_group->tertiary); - peer_orr_group_unset(peer, afi, safi, - peer->orr_group_name[afi][safi]); + bgp_peer_update_orr_group_active_root(peer, afi, safi, + orr_group); } } @@ -1077,7 +1048,6 @@ static void bgp_orr_igp_metric_register(struct bgp_orr_group *orr_group, msg.proto = ZEBRA_ROUTE_BGP; msg.safi = orr_group->safi; prefix_copy(&msg.prefix, &p); - strlcpy(msg.group_name, orr_group->name, sizeof(msg.group_name)); bgp_orr_debug( "%s: %s with IGP for metric calculation from location %pFX", diff --git a/bgpd/bgp_orr.h b/bgpd/bgp_orr.h index fc9116a52e..d41f866e17 100644 --- a/bgpd/bgp_orr.h +++ b/bgpd/bgp_orr.h @@ -68,8 +68,6 @@ extern int bgp_afi_safi_orr_group_set_vty(struct vty *vty, afi_t afi, const char *primary_str, const char *secondary_str, const char *tertiary_str, bool set); -extern int peer_orr_group_unset(struct peer *peer, afi_t afi, safi_t safi, - const char *orr_group_name); extern int peer_orr_group_set_vty(struct vty *vty, const char *ip_str, afi_t afi, safi_t safi, const char *orr_group_name, bool set); diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 786f5de078..2cf93be97c 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -17783,7 +17783,7 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp, if (peer_af_flag_check(peer, afi, safi, PEER_FLAG_ORR_GROUP)) vty_out(vty, " neighbor %s optimal-route-reflection %s\n", - addr, peer->orr_group_name[afi][safi]); + peer->host, peer->orr_group_name[afi][safi]); } static void bgp_vpn_config_write(struct vty *vty, struct bgp *bgp, afi_t afi,