mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-24 11:19:14 +00:00
BGP: Fix linkage between BGP instance and VRF structure
The issue here has to do with the fact that VRFs (like interfaces) are not actually getting deleted when they are removed - they remain present. This leads to situations in which BGP may try to unlink more than once, which messes up the reference count (lock) in the BGP instance. Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-9419 Reviewed By: CCR-4302 Testing Done: Manual, also verified by Atul <DETAILED DESCRIPTION (REPLACE)>
This commit is contained in:
parent
a3cb01d89c
commit
59ecefe2db
15
bgpd/bgpd.h
15
bgpd/bgpd.h
@ -1458,17 +1458,22 @@ static inline void
|
||||
bgp_vrf_link (struct bgp *bgp, struct vrf *vrf)
|
||||
{
|
||||
bgp->vrf_id = vrf->vrf_id;
|
||||
bgp_lock (bgp);
|
||||
vrf->info = (void *)bgp;
|
||||
|
||||
if (vrf->info != (void *)bgp)
|
||||
{
|
||||
bgp_lock (bgp);
|
||||
vrf->info = (void *)bgp;
|
||||
}
|
||||
}
|
||||
|
||||
/* Unlink BGP instance from VRF. */
|
||||
static inline void
|
||||
bgp_vrf_unlink (struct bgp *bgp, struct vrf *vrf)
|
||||
{
|
||||
vrf->info = NULL;
|
||||
bgp_unlock (bgp);
|
||||
if (vrf->info == (void *)bgp)
|
||||
{
|
||||
vrf->info = NULL;
|
||||
bgp_unlock (bgp);
|
||||
}
|
||||
bgp->vrf_id = VRF_DEFAULT;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user