diff options
Diffstat (limited to 'zebra/zebra_nhg.c')
| -rw-r--r-- | zebra/zebra_nhg.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index 589196ecb9..a033b3ea50 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -1161,11 +1161,32 @@ static void zebra_nhg_handle_uninstall(struct nhg_hash_entry *nhe) zebra_nhg_free(nhe); } +static void nhg_handle_install_one(struct nhg_connected *node) +{ + struct nhg_connected *rb_node_indirect_dep = NULL; + + frr_each_safe (nhg_connected_tree, &node->nhe->nhg_dependents, + rb_node_indirect_dep) { + SET_FLAG(rb_node_indirect_dep->nhe->flags, + NEXTHOP_GROUP_REINSTALL); + + if (IS_ZEBRA_DEBUG_NHG_DETAIL) + zlog_debug("%s nh id %u (flags 0x%x) associated dependents NHG %pNG (flags 0x%x) Re-install", + __func__, node->nhe->id, + node->nhe->flags, + rb_node_indirect_dep->nhe, + rb_node_indirect_dep->nhe->flags); + + zebra_nhg_install_kernel(rb_node_indirect_dep->nhe, + ZEBRA_ROUTE_MAX); + } + +} + static void zebra_nhg_handle_install(struct nhg_hash_entry *nhe, bool install) { /* Update validity of groups depending on it */ struct nhg_connected *rb_node_dep; - struct nhg_connected *rb_node_indirect_dep = NULL; frr_each_safe (nhg_connected_tree, &nhe->nhg_dependents, rb_node_dep) { zebra_nhg_set_valid(rb_node_dep->nhe, true); @@ -1173,19 +1194,7 @@ static void zebra_nhg_handle_install(struct nhg_hash_entry *nhe, bool install) if (install) { if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED) && CHECK_FLAG(rb_node_dep->nhe->flags, NEXTHOP_GROUP_RECURSIVE)) { - frr_each_safe (nhg_connected_tree, &rb_node_dep->nhe->nhg_dependents, - rb_node_indirect_dep) { - SET_FLAG(rb_node_indirect_dep->nhe->flags, - NEXTHOP_GROUP_REINSTALL); - if (IS_ZEBRA_DEBUG_NHG_DETAIL) - zlog_debug("%s nh id %u (flags 0x%x) associated dependents NHG %pNG (flags 0x%x) Re-install", - __func__, rb_node_dep->nhe->id, - rb_node_dep->nhe->flags, - rb_node_indirect_dep->nhe, - rb_node_indirect_dep->nhe->flags); - zebra_nhg_install_kernel(rb_node_indirect_dep->nhe, - ZEBRA_ROUTE_MAX); - } + nhg_handle_install_one(rb_node_dep); } if (IS_ZEBRA_DEBUG_NHG_DETAIL) |
