]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Set LLGR stale routes for all the paths including addpath 17393/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 7 Nov 2024 11:08:35 +0000 (13:08 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Fri, 8 Nov 2024 07:59:17 +0000 (09:59 +0200)
Without this patch we set only the first path for the route (if multiple exist)
as LLGR stale and stop doing that for the rest of the paths, which is wrong.

Fixes: 1479ed2fb35f4a5ae1017201a7ee37ba2727163a ("bgpd: Implement LLGR helper mode")
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_fsm.c

index 5043439945b8635d54eea91cb6213a154cffcff9..16e48a21142a8bd22cc5c6457a59116c453aaa18 100644 (file)
@@ -685,6 +685,11 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                                    COMMUNITY_NO_LLGR))
                                                continue;
 
+                                       if (bgp_attr_get_community(pi->attr) &&
+                                           community_include(bgp_attr_get_community(pi->attr),
+                                                             COMMUNITY_LLGR_STALE))
+                                               continue;
+
                                        if (bgp_debug_neighbor_events(peer))
                                                zlog_debug(
                                                        "%pBP Long-lived set stale community (LLGR_STALE) for: %pFX",
@@ -695,8 +700,6 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                        pi->attr = bgp_attr_intern(&attr);
                                        bgp_recalculate_afi_safi_bestpaths(
                                                peer->bgp, afi, safi);
-
-                                       break;
                                }
                }
        } else {
@@ -713,6 +716,11 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                            COMMUNITY_NO_LLGR))
                                        continue;
 
+                               if (bgp_attr_get_community(pi->attr) &&
+                                   community_include(bgp_attr_get_community(pi->attr),
+                                                     COMMUNITY_LLGR_STALE))
+                                       continue;
+
                                if (bgp_debug_neighbor_events(peer))
                                        zlog_debug(
                                                "%pBP Long-lived set stale community (LLGR_STALE) for: %pFX",
@@ -723,8 +731,6 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                pi->attr = bgp_attr_intern(&attr);
                                bgp_recalculate_afi_safi_bestpaths(peer->bgp,
                                                                   afi, safi);
-
-                               break;
                        }
        }
 }