diff options
| -rw-r--r-- | pbrd/pbr_nht.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/pbrd/pbr_nht.c b/pbrd/pbr_nht.c index 8fd7ac9e3c..dbe5de724c 100644 --- a/pbrd/pbr_nht.c +++ b/pbrd/pbr_nht.c @@ -718,6 +718,7 @@ pbr_nht_individual_nexthop_gw_update(struct pbr_nexthop_cache *pnhc, struct pbr_nht_individual *pnhi) { bool is_valid = pnhc->valid; + bool all_done = false; /* * If we have an interface down event, let's note that @@ -735,13 +736,13 @@ pbr_nht_individual_nexthop_gw_update(struct pbr_nexthop_cache *pnhc, switch (pnhc->nexthop.type) { case NEXTHOP_TYPE_BLACKHOLE: - goto done; + all_done = true; break; case NEXTHOP_TYPE_IFINDEX: case NEXTHOP_TYPE_IPV4_IFINDEX: case NEXTHOP_TYPE_IPV6_IFINDEX: is_valid = if_is_up(pnhi->ifp); - goto done; + all_done = true; break; case NEXTHOP_TYPE_IPV4: p.family = AF_INET; @@ -756,6 +757,10 @@ pbr_nht_individual_nexthop_gw_update(struct pbr_nexthop_cache *pnhc, break; } + /* Early exit in a couple of cases. */ + if (all_done) + goto done; + FOR_ALL_INTERFACES_ADDRESSES (pnhi->ifp, connected, node) { if (prefix_match(connected->address, &p)) { is_valid = if_is_up(pnhi->ifp); |
