]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Reduce # of iterations when doing llgr
authorDonald Sharp <sharpd@nvidia.com>
Fri, 6 Sep 2024 14:39:41 +0000 (10:39 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Fri, 6 Sep 2024 14:39:41 +0000 (10:39 -0400)
Code was scanning a table then identifying a prefix
that needed to be modified then calling code that
reran bestpath on the entire table again.

If you had multiple items that needed processing
you would end up scanning and setting the entire
table to be scanned multiple times.  No bueno.

a) We do not need to reprocess items that are not
being modified.

b) We do not need to walk the entire table multiple
times, we have the data that is needed already.

Modify the code to just call bgp_process on the
interesting nodes.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd/bgp_fsm.c

index 42ba54ab7bca59cfb21aab4643cc9d6347641621..74ad65f1ec79e0b159590de58798824289c53758 100644 (file)
@@ -696,9 +696,8 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                        attr = *pi->attr;
                                        bgp_attr_add_llgr_community(&attr);
                                        pi->attr = bgp_attr_intern(&attr);
-                                       bgp_recalculate_afi_safi_bestpaths(
-                                               peer->bgp, afi, safi);
-
+                                       bgp_process(peer->bgp, rm, pi, afi,
+                                                   safi);
                                        break;
                                }
                }
@@ -724,9 +723,7 @@ static void bgp_set_llgr_stale(struct peer *peer, afi_t afi, safi_t safi)
                                attr = *pi->attr;
                                bgp_attr_add_llgr_community(&attr);
                                pi->attr = bgp_attr_intern(&attr);
-                               bgp_recalculate_afi_safi_bestpaths(peer->bgp,
-                                                                  afi, safi);
-
+                               bgp_process(peer->bgp, dest, pi, afi, safi);
                                break;
                        }
        }