]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Check group before setting NHE invalid
authorStephen Worley <sworley@cumulusnetworks.com>
Tue, 14 May 2019 23:06:19 +0000 (16:06 -0700)
committerStephen Worley <sworley@cumulusnetworks.com>
Fri, 25 Oct 2019 15:13:40 +0000 (11:13 -0400)
If the nhg_hash_entry is a group, check if its members
are valid before setting it invalid. If even one is valid,
then this group should still be considered valid.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
zebra/zebra_nhg.c

index 3ceb5e33862e9f43a469eb9ac349afd1178a95cf..d9930ae193db93621c7e77d912975a2365a512fb 100644 (file)
@@ -889,9 +889,21 @@ bool zebra_nhg_id_is_valid(uint32_t id)
 
        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);