]> git.proxmox.com Git - mirror_frr.git/commitdiff
Revert "bgpd: fix for crash when no neighbor A.B.C.D remote-as AS_NUM with orr config"
authorDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 17 Jan 2023 16:07:46 +0000 (18:07 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 17 Jan 2023 16:07:46 +0000 (18:07 +0200)
This reverts commit 5fcf01c9ae0b9c595c883ad1ca80ccb0c4516b1d.

bgpd/bgp_orr.c
bgpd/bgp_orr.h
bgpd/bgp_vty.c

index 894eae687f4b731e3d7eb5396cd3512e9d70e84b..f11fa900df5aab5524080b0d11fbf70a906e43e3 100644 (file)
@@ -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",
index fc9116a52e7c8345fffe6893935e60a90de7764a..d41f866e173db3331e936cca9bba57cd7de375f7 100644 (file)
@@ -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);
index 786f5de078ddebebd7009a6d1352a3926bb6c6ae..2cf93be97c4c1208d7a8df1c9b4cc3dc8c39a109 100644 (file)
@@ -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,