diff options
author | Mark Stapp <mjs@voltanet.io> | 2020-05-26 23:35:20 +0200 |
---|---|---|
committer | Mark Stapp <mjs@voltanet.io> | 2020-07-07 19:14:01 +0200 |
commit | 92ad0c558c467d86b9d4cb857b486fa72fb0f94c (patch) | |
tree | bc9f5ab191cce528d302b3b2c413d50989459d41 | |
parent | lib: test vrfs in nexthop_same_firsthop() (diff) | |
download | frr-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.c | 16 |
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; |