}
/* 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;
/* 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);
/* 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;
}
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);
}
}
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",