mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 22:26:14 +00:00
bgpd: Increase install/uninstall speed of evpn vpn vni's
BGP receives notification from zebra about an vpn that needs to be installed into the evpn tables. Unfortunately this function was walking the entirety of evpn tables 3 times. Modify the code to walk the tree 1 time and to just look for the needed route types as you go. This reduces, in a scaled environment, processing time of the zclient_read function from 130 seconds to 95 seconds. For a up / down / up interface scenario. Signed-off-by: Rajasekar Raja <rajasekarr@vndia.com> Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
parent
5139ce8a3b
commit
9edf45b889
@ -3926,9 +3926,7 @@ static int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install)
|
||||
* particular VNI.
|
||||
*/
|
||||
static int install_uninstall_routes_for_vni(struct bgp *bgp,
|
||||
struct bgpevpn *vpn,
|
||||
bgp_evpn_route_type rtype,
|
||||
int install)
|
||||
struct bgpevpn *vpn, int install)
|
||||
{
|
||||
afi_t afi;
|
||||
safi_t safi;
|
||||
@ -3959,7 +3957,9 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp,
|
||||
(const struct prefix_evpn *)bgp_dest_get_prefix(
|
||||
dest);
|
||||
|
||||
if (evp->prefix.route_type != rtype)
|
||||
if (evp->prefix.route_type != BGP_EVPN_IMET_ROUTE &&
|
||||
evp->prefix.route_type != BGP_EVPN_AD_ROUTE &&
|
||||
evp->prefix.route_type != BGP_EVPN_MAC_IP_ROUTE)
|
||||
continue;
|
||||
|
||||
for (pi = bgp_dest_get_bgp_path_info(dest); pi;
|
||||
@ -3986,16 +3986,16 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp,
|
||||
bgp, vpn, evp, pi);
|
||||
|
||||
if (ret) {
|
||||
flog_err(
|
||||
EC_BGP_EVPN_FAIL,
|
||||
"%u: Failed to %s EVPN %s route in VNI %u",
|
||||
bgp->vrf_id,
|
||||
install ? "install"
|
||||
: "uninstall",
|
||||
rtype == BGP_EVPN_MAC_IP_ROUTE
|
||||
? "MACIP"
|
||||
: "IMET",
|
||||
vpn->vni);
|
||||
flog_err(EC_BGP_EVPN_FAIL,
|
||||
"%u: Failed to %s EVPN %s route in VNI %u",
|
||||
bgp->vrf_id,
|
||||
install ? "install"
|
||||
: "uninstall",
|
||||
evp->prefix.route_type ==
|
||||
BGP_EVPN_MAC_IP_ROUTE
|
||||
? "MACIP"
|
||||
: "IMET",
|
||||
vpn->vni);
|
||||
|
||||
bgp_dest_unlock_node(rd_dest);
|
||||
bgp_dest_unlock_node(dest);
|
||||
@ -4024,23 +4024,11 @@ static int install_routes_for_vrf(struct bgp *bgp_vrf)
|
||||
*/
|
||||
static int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Install type-3 routes followed by type-2 routes - the ones applicable
|
||||
/*
|
||||
* Install type-3 routes followed by type-2 routes - the ones applicable
|
||||
* for this VNI.
|
||||
*/
|
||||
ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_IMET_ROUTE,
|
||||
1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_AD_ROUTE,
|
||||
1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_MAC_IP_ROUTE,
|
||||
1);
|
||||
return install_uninstall_routes_for_vni(bgp, vpn, 1);
|
||||
}
|
||||
|
||||
/* uninstall routes from l3vni vrf. */
|
||||
@ -4056,25 +4044,11 @@ static int uninstall_routes_for_vrf(struct bgp *bgp_vrf)
|
||||
*/
|
||||
static int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Uninstall type-2 routes followed by type-3 routes - the ones
|
||||
* applicable
|
||||
* for this VNI.
|
||||
/*
|
||||
* Uninstall type-2 routes followed by type-3 routes - the ones
|
||||
* applicable for this VNI.
|
||||
*/
|
||||
ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_MAC_IP_ROUTE,
|
||||
0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_AD_ROUTE,
|
||||
0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
return install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_IMET_ROUTE,
|
||||
0);
|
||||
return install_uninstall_routes_for_vni(bgp, vpn, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user