nhg_id
)
+ ## Validate NHG's installed in kernel has same nexthops with Interface flaps
+ pre_out = net["r1"].cmd('ip route show | grep "5.5.5.1"')
+ pre_nhg = re.search(r"nhid\s+(\d+)", pre_out)
+ pre_nh_show = net["r1"].cmd("ip next show id {}".format(pre_nhg.group(1)))
+ pre_total_nhs = len((re.search(r"group ([\d/]+)", pre_nh_show)).group(1).split("/"))
+
+ net["r1"].cmd(
+ "ip link set r1-eth1 down;ip link set r1-eth2 down;ip link set r1-eth3 down;ip link set r1-eth4 down"
+ )
+ sleep(1)
+ net["r1"].cmd(
+ "ip link set r1-eth1 up;ip link set r1-eth2 up;ip link set r1-eth3 up;ip link set r1-eth4 up"
+ )
+ sleep(5)
+
+ post_out = net["r1"].cmd('ip route show | grep "5.5.5.1"')
+ post_nhg = re.search(r"nhid\s+(\d+)", post_out)
+ post_nh_show = net["r1"].cmd("ip next show id {}".format(post_nhg.group(1)))
+ post_total_nhs = len(
+ (re.search(r"group ([\d/]+)", post_nh_show)).group(1).split("/")
+ )
+
+ assert (
+ post_total_nhs == pre_total_nhs
+ ), "Expected same nexthops(pre-{}: post-{}) in NHG (pre-{}:post-{}) after few Interface flaps".format(
+ pre_total_nhs, post_total_nhs, pre_nhg.group(1), post_nhg.group(1)
+ )
+
## Remove all NHG routes
net["r1"].cmd('vtysh -c "sharp remove routes 2.2.2.1 1"')
{
/* 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);
/* install dependent NHG into kernel */
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);
+ }
+ }
+
if (IS_ZEBRA_DEBUG_NHG_DETAIL)
zlog_debug(
"%s nh id %u (flags 0x%x) associated dependent NHG %pNG install",