summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2020-05-26 23:35:20 +0200
committerMark Stapp <mjs@voltanet.io>2020-07-07 19:14:01 +0200
commit92ad0c558c467d86b9d4cb857b486fa72fb0f94c (patch)
treebc9f5ab191cce528d302b3b2c413d50989459d41
parentlib: test vrfs in nexthop_same_firsthop() (diff)
downloadfrr-92ad0c558c467d86b9d4cb857b486fa72fb0f94c.tar.xz
frr-92ad0c558c467d86b9d4cb857b486fa72fb0f94c.zip
zebra: skip un-installed recursive match
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>
-rw-r--r--zebra/zebra_nhg.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c
index fc429cf55..258709ad9 100644
--- a/zebra/zebra_nhg.c
+++ b/zebra/zebra_nhg.c
@@ -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;