summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/if.c2
-rw-r--r--lib/if.h2
-rw-r--r--lib/nexthop_group.c7
-rw-r--r--lib/zclient.c2
4 files changed, 12 insertions, 1 deletions
diff --git a/lib/if.c b/lib/if.c
index d8392708e1..10db574dc4 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -188,7 +188,9 @@ void if_destroy_via_zapi(struct interface *ifp)
if (ifp_master.destroy_hook)
(*ifp_master.destroy_hook)(ifp);
+ ifp->oldifindex = ifp->ifindex;
if_set_index(ifp, IFINDEX_INTERNAL);
+
if (!ifp->configured)
if_delete(&ifp);
}
diff --git a/lib/if.h b/lib/if.h
index 1fb0757db2..a2a40d0957 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -224,6 +224,8 @@ struct interface {
not work as expected.
*/
ifindex_t ifindex;
+ ifindex_t oldifindex;
+
/*
* ifindex of parent interface, if any
*/
diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c
index a8f6e8a405..687cac4062 100644
--- a/lib/nexthop_group.c
+++ b/lib/nexthop_group.c
@@ -940,6 +940,12 @@ DEFPY(ecmp_nexthops, ecmp_nexthops_cmd,
nhg_hooks.add_nexthop(nhgc, nh);
}
+ if (intf) {
+ struct interface *ifp = if_lookup_by_name_all_vrf(intf);
+
+ if (ifp)
+ ifp->configured = true;
+ }
return CMD_SUCCESS;
}
@@ -1242,6 +1248,7 @@ void nexthop_group_interface_state_change(struct interface *ifp,
if (ifp->ifindex != nhop.ifindex)
continue;
+ ifp->configured = true;
nh = nexthop_new();
memcpy(nh, &nhop, sizeof(nhop));
diff --git a/lib/zclient.c b/lib/zclient.c
index 6b5f3e349a..b842e7c31b 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -2068,7 +2068,7 @@ static void zebra_interface_if_set_value(struct stream *s,
uint8_t link_params_status = 0;
ifindex_t old_ifindex, new_ifindex;
- old_ifindex = ifp->ifindex;
+ old_ifindex = ifp->oldifindex;
/* Read interface's index. */
STREAM_GETL(s, new_ifindex);
if_set_index(ifp, new_ifindex);