mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 23:53:28 +00:00
Merge pull request #8426 from idryzhov/fix-interface-nb-stale-pointers
lib: fix interface nb stale pointers
This commit is contained in:
commit
54bb4ab3ec
23
lib/if.c
23
lib/if.c
@ -1056,15 +1056,30 @@ struct connected *connected_get_linklocal(struct interface *ifp)
|
|||||||
void if_terminate(struct vrf *vrf)
|
void if_terminate(struct vrf *vrf)
|
||||||
{
|
{
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
|
bool delete;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the default VRF is being terminated or has
|
||||||
|
* already been terminated it means that
|
||||||
|
* the program is shutting down and we need to
|
||||||
|
* delete all the interfaces. Otherwise, we only
|
||||||
|
* need to move VRF's interfaces to the default VRF.
|
||||||
|
*/
|
||||||
|
delete = vrf_is_backend_netns() || vrf->vrf_id == VRF_DEFAULT
|
||||||
|
|| !vrf_lookup_by_id(VRF_DEFAULT);
|
||||||
|
|
||||||
while (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) {
|
while (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) {
|
||||||
ifp = RB_ROOT(if_name_head, &vrf->ifaces_by_name);
|
ifp = RB_ROOT(if_name_head, &vrf->ifaces_by_name);
|
||||||
|
|
||||||
if (ifp->node) {
|
if (delete) {
|
||||||
ifp->node->info = NULL;
|
if (ifp->node) {
|
||||||
route_unlock_node(ifp->node);
|
ifp->node->info = NULL;
|
||||||
|
route_unlock_node(ifp->node);
|
||||||
|
}
|
||||||
|
if_delete(&ifp);
|
||||||
|
} else {
|
||||||
|
if_update_to_new_vrf(ifp, VRF_DEFAULT);
|
||||||
}
|
}
|
||||||
if_delete(&ifp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1661,8 +1661,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
|
|||||||
else if (IS_ZEBRA_IF_VXLAN(ifp))
|
else if (IS_ZEBRA_IF_VXLAN(ifp))
|
||||||
zebra_l2_vxlanif_del(ifp);
|
zebra_l2_vxlanif_del(ifp);
|
||||||
|
|
||||||
if (!IS_ZEBRA_IF_VRF(ifp))
|
if_delete_update(ifp);
|
||||||
if_delete_update(ifp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user