Merge pull request #16330 from donaldsharp/nhg_going_down

zebra: Properly note that a nhg's nexthop has gone down
This commit is contained in:
Russ White 2024-07-23 10:49:49 -04:00 committed by GitHub
commit 9db9128c27
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 29 additions and 4 deletions

View File

@ -457,8 +457,7 @@
"fib":true,
"ip":"10.0.8.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
"active":true
"interfaceName":"eth-rt6"
}
]
}

View File

@ -1050,8 +1050,27 @@ static void zebra_nhg_set_valid(struct nhg_hash_entry *nhe, bool valid)
}
/* Update validity of nexthops depending on it */
frr_each(nhg_connected_tree, &nhe->nhg_dependents, rb_node_dep)
frr_each (nhg_connected_tree, &nhe->nhg_dependents, rb_node_dep) {
if (!valid) {
/*
* Grab the first nexthop from the depending nexthop group
* then let's find the nexthop in that group that matches
* my individual nexthop and mark it as no longer ACTIVE
*/
struct nexthop *nexthop = rb_node_dep->nhe->nhg.nexthop;
while (nexthop) {
if (nexthop_same(nexthop, nhe->nhg.nexthop))
break;
nexthop = nexthop->next;
}
if (nexthop)
UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
}
zebra_nhg_set_valid(rb_node_dep->nhe, valid);
}
}
void zebra_nhg_check_valid(struct nhg_hash_entry *nhe)
@ -1059,6 +1078,13 @@ void zebra_nhg_check_valid(struct nhg_hash_entry *nhe)
struct nhg_connected *rb_node_dep = NULL;
bool valid = false;
/*
* If I have other nhe's depending on me, then this is a
* singleton nhe so set this nexthops flag as appropriate.
*/
if (nhg_connected_tree_count(&nhe->nhg_depends))
UNSET_FLAG(nhe->nhg.nexthop->flags, NEXTHOP_FLAG_ACTIVE);
/* If anthing else in the group is valid, the group is valid */
frr_each(nhg_connected_tree, &nhe->nhg_depends, rb_node_dep) {
if (CHECK_FLAG(rb_node_dep->nhe->flags, NEXTHOP_GROUP_VALID)) {

View File

@ -215,7 +215,7 @@ static char re_status_output_char(const struct route_entry *re,
if (is_fib) {
star_p = !!CHECK_FLAG(nhop->flags,
NEXTHOP_FLAG_FIB);
} else
} else if (CHECK_FLAG(nhop->flags, NEXTHOP_FLAG_ACTIVE))
star_p = true;
}