mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-03 23:47:16 +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