]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #7274 from donaldsharp/bgp_best_is_a_path
authorLou Berger <lberger@labn.net>
Tue, 3 Nov 2020 21:06:48 +0000 (16:06 -0500)
committerGitHub <noreply@github.com>
Tue, 3 Nov 2020 21:06:48 +0000 (16:06 -0500)
bgpd: allow bestpath to handle mutliple locally-originated paths

bgpd/bgp_route.c

index 566c5911e0222604ba2772bae17e9f5815ed1f5a..9fb9ce644e617f849336d3537b7b87cd9434ce89 100644 (file)
@@ -562,6 +562,7 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
        bool same_esi;
        bool old_proxy;
        bool new_proxy;
+       bool new_origin, exist_origin;
 
        *paths_eq = 0;
 
@@ -806,8 +807,12 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
         *  - BGP_ROUTE_AGGREGATE
         *  - BGP_ROUTE_REDISTRIBUTE
         */
-       if (!(new->sub_type == BGP_ROUTE_NORMAL ||
-             new->sub_type == BGP_ROUTE_IMPORTED)) {
+       new_origin = !(new->sub_type == BGP_ROUTE_NORMAL ||
+                      new->sub_type == BGP_ROUTE_IMPORTED);
+       exist_origin = !(exist->sub_type == BGP_ROUTE_NORMAL ||
+                        exist->sub_type == BGP_ROUTE_IMPORTED);
+
+       if (new_origin && !exist_origin) {
                *reason = bgp_path_selection_local_route;
                if (debug)
                        zlog_debug(
@@ -816,8 +821,7 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
                return 1;
        }
 
-       if (!(exist->sub_type == BGP_ROUTE_NORMAL ||
-             exist->sub_type == BGP_ROUTE_IMPORTED)) {
+       if (!new_origin && exist_origin) {
                *reason = bgp_path_selection_local_route;
                if (debug)
                        zlog_debug(