return is_valid;
}
-
void zebra_nhg_set_invalid(struct nhg_hash_entry *nhe)
{
+ if (!zebra_nhg_depends_is_empty(nhe)
+ && !CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_RECURSIVE)) {
+ struct nhg_connected *rb_node_dep = NULL;
+
+ /* If anthing else in the group is valid, the group is valid */
+ RB_FOREACH (rb_node_dep, nhg_connected_head,
+ &nhe->nhg_dependents) {
+ if (CHECK_FLAG(rb_node_dep->nhe->flags,
+ NEXTHOP_GROUP_VALID))
+ return;
+ }
+ }
+
UNSET_FLAG(nhe->flags, NEXTHOP_GROUP_VALID);
/* Assuming uninstalled as well here */
UNSET_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED);