]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: skip un-installed recursive match
authorMark Stapp <mjs@voltanet.io>
Tue, 26 May 2020 21:35:20 +0000 (17:35 -0400)
committerMark Stapp <mjs@voltanet.io>
Tue, 7 Jul 2020 17:14:01 +0000 (13:14 -0400)
Do less work when resolving a recursive route: just skip
nexthops if the resolving route is not installed.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
zebra/zebra_nhg.c

index fc429cf55c298c525b64b894cc6e79380a35df9d..258709ad9b7c8408ece03881a14429a0fcc40091 100644 (file)
@@ -1934,12 +1934,19 @@ static int nexthop_active(afi_t afi, struct route_entry *re,
 
                        resolved = 0;
 
+                       /* Only useful if installed */
+                       if (!CHECK_FLAG(match->status, ROUTE_ENTRY_INSTALLED)) {
+                               if (IS_ZEBRA_DEBUG_NHG_DETAIL)
+                                       zlog_debug("%s: match %p (%u) not installed",
+                                                  __func__, match,
+                                                  match->nhe->id);
+
+                               goto done_with_match;
+                       }
+
                        /* Examine installed nexthops */
                        nhg = &match->nhe->nhg;
                        for (ALL_NEXTHOPS_PTR(nhg, newhop)) {
-                               if (!CHECK_FLAG(match->status,
-                                               ROUTE_ENTRY_INSTALLED))
-                                       continue;
                                if (!nexthop_valid_resolve(nexthop, newhop))
                                        continue;
 
@@ -1960,9 +1967,6 @@ static int nexthop_active(afi_t afi, struct route_entry *re,
                                goto done_with_match;
 
                        for (ALL_NEXTHOPS_PTR(nhg, newhop)) {
-                               if (!CHECK_FLAG(match->status,
-                                               ROUTE_ENTRY_INSTALLED))
-                                       continue;
                                if (!nexthop_valid_resolve(nexthop, newhop))
                                        continue;