mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 10:09:17 +00:00
bgpd: update type-5 routes when RD changes
when router-id/RD changes for a bgp vrf instance, we need to update all type-5 routes. Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
This commit is contained in:
parent
342dd0c623
commit
80b140af22
@ -2437,15 +2437,45 @@ static int install_uninstall_evpn_route(struct bgp *bgp, afi_t afi, safi_t safi,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* delete and withdraw all ipv4 and ipv6 routes in the vrf table as type-5
|
||||
* routes */
|
||||
static void delete_withdraw_vrf_routes(struct bgp *bgp_vrf)
|
||||
{
|
||||
/* delete all ipv4 routes and withdraw from peers */
|
||||
bgp_evpn_withdraw_type5_routes(bgp_vrf, AFI_IP);
|
||||
|
||||
/* delete all ipv6 routes and withdraw from peers */
|
||||
bgp_evpn_withdraw_type5_routes(bgp_vrf, AFI_IP6);
|
||||
}
|
||||
|
||||
/* update and advertise all ipv4 and ipv6 routes in thr vrf table as type-5
|
||||
* routes */
|
||||
static void update_advertise_vrf_routes(struct bgp *bgp_vrf)
|
||||
{
|
||||
/* update all ipv4 routes */
|
||||
bgp_evpn_advertise_type5_routes(bgp_vrf, AFI_IP);
|
||||
|
||||
/* update all ipv6 routes */
|
||||
bgp_evpn_advertise_type5_routes(bgp_vrf, AFI_IP6);
|
||||
}
|
||||
|
||||
/*
|
||||
* update and advertise local routes for a VRF as type-5 routes.
|
||||
* This is invoked upon RD change for a VRF. Note taht the processing is only
|
||||
* done in the global route table using the routes which already exist in the
|
||||
* VRF routing table
|
||||
*/
|
||||
static int update_advertise_vrf_routes(struct bgp *bgp_vrf)
|
||||
static void update_router_id_vrf(struct bgp *bgp_vrf)
|
||||
{
|
||||
return 0;
|
||||
/* skip if the RD is configured */
|
||||
if (is_vrf_rd_configured(bgp_vrf))
|
||||
return;
|
||||
|
||||
/* derive the RD for the VRF based on new router-id */
|
||||
bgp_evpn_derive_auto_rd_for_vrf(bgp_vrf);
|
||||
|
||||
/* update advertise ipv4|ipv6 routes as type-5 routes */
|
||||
update_advertise_vrf_routes(bgp_vrf);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2453,9 +2483,14 @@ static int update_advertise_vrf_routes(struct bgp *bgp_vrf)
|
||||
* This is invoked upon VRF RD change. The processing is done only from global
|
||||
* table.
|
||||
*/
|
||||
static int delete_withdraw_vrf_routes(struct bgp *bgp_vrf)
|
||||
static void withdraw_router_id_vrf(struct bgp *bgp_vrf)
|
||||
{
|
||||
return 0;
|
||||
/* skip if the RD is configured */
|
||||
if (is_vrf_rd_configured(bgp_vrf))
|
||||
return;
|
||||
|
||||
/* delete/withdraw ipv4|ipv6 routes as type-5 routes */
|
||||
delete_withdraw_vrf_routes(bgp_vrf);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3200,7 +3235,7 @@ void bgp_evpn_handle_router_id_update(struct bgp *bgp, int withdraw)
|
||||
|
||||
/* delete and withdraw all the type-5 routes
|
||||
stored in the global table for this vrf */
|
||||
delete_withdraw_vrf_routes(bgp);
|
||||
withdraw_router_id_vrf(bgp);
|
||||
|
||||
/* delete all the VNI routes (type-2/type-3) routes for all the
|
||||
* L2-VNIs */
|
||||
@ -3212,7 +3247,7 @@ void bgp_evpn_handle_router_id_update(struct bgp *bgp, int withdraw)
|
||||
|
||||
/* advertise all routes in the vrf as type-5 routes with the new
|
||||
* RD */
|
||||
update_advertise_vrf_routes(bgp);
|
||||
update_router_id_vrf(bgp);
|
||||
|
||||
/* advertise all the VNI routes (type-2/type-3) routes with the
|
||||
* new RD*/
|
||||
|
Loading…
Reference in New Issue
Block a user