]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: add cli for configuring the EVI limit per-ES-frag
authorAnuradha Karuppiah <anuradhak@nvidia.com>
Thu, 12 Aug 2021 19:08:14 +0000 (12:08 -0700)
committerDonald Sharp <sharpd@nvidia.com>
Fri, 18 Mar 2022 11:37:07 +0000 (07:37 -0400)
The EAD-per-ES route can be fragmented to fit the EVIs on the switch. This
command allows the EVI limit to be configured -

!
router bgp 5556
 !
 address-family l2vpn evpn
  ead-es-frag evi-limit 200
 exit-address-family
 !
!

Signed-off-by: Anuradha Karuppiah <anuradhak@nvidia.com>
bgpd/bgp_evpn_mh.c
bgpd/bgp_evpn_mh.h
bgpd/bgp_evpn_vty.c

index 5cca3f210d01e2cf9d6518c824420912f677a7e1..0b3e8c89cf74ffea63b15f929a8926e91db483cb 100644 (file)
@@ -1796,8 +1796,8 @@ bgp_evpn_es_find_frag_with_space(struct bgp_evpn_es *es)
        struct bgp_evpn_es_frag *es_frag;
 
        for (ALL_LIST_ELEMENTS_RO(es->es_frag_list, node, es_frag)) {
-               if (listcount(es_frag->es_evi_frag_list)
-                   < BGP_EVPN_MAX_EVI_PER_ES_FRAG)
+               if (listcount(es_frag->es_evi_frag_list) <
+                   bgp_mh_info->evi_per_es_frag)
                        return es_frag;
        }
 
@@ -4989,6 +4989,7 @@ void bgp_evpn_mh_init(void)
        bgp_mh_info->host_routes_use_l3nhg = BGP_EVPN_MH_USE_ES_L3NHG_DEF;
        bgp_mh_info->suppress_l3_ecomm_on_inactive_es = true;
        bgp_mh_info->bgp_evpn_nh_setup = true;
+       bgp_mh_info->evi_per_es_frag = BGP_EVPN_MAX_EVI_PER_ES_FRAG;
 
        memset(&zero_esi_buf, 0, sizeof(esi_t));
 }
index 7a3a4bde944556d9f69b4665dead175098691734..d9e2e72e4f25635f3a1d2fe017616c45926c22e8 100644 (file)
@@ -341,6 +341,11 @@ struct bgp_evpn_mh_info {
         * sending the ead-per-es route instead of the L2-VNI(s) RTs
         */
        struct list *ead_es_export_rtl;
+
+       /* Number of EVIs in an ES fragment - used of EAD-per-ES route
+        * construction
+        */
+       uint32_t evi_per_es_frag;
 };
 
 /****************************************************************************/
index 4ab188832c7e7124b6d0a616fd7b1732a9d95401..4da3fa8f3b2c0542f8a46177d60fd8f678bde0a9 100644 (file)
@@ -5992,6 +5992,19 @@ DEFUN (no_bgp_evpn_vrf_rt,
        return CMD_SUCCESS;
 }
 
+DEFPY(bgp_evpn_ead_ess_frag_evi_limit, bgp_evpn_ead_es_frag_evi_limit_cmd,
+      "[no$no] ead-es-frag evi-limit (1-1000)$limit",
+      NO_STR
+      "EAD ES fragment config\n"
+      "EVIs per-fragment\n"
+      "limit\n")
+{
+       bgp_mh_info->evi_per_es_frag =
+               no ? BGP_EVPN_MAX_EVI_PER_ES_FRAG : limit;
+
+       return CMD_SUCCESS;
+}
+
 DEFUN(bgp_evpn_ead_es_rt, bgp_evpn_ead_es_rt_cmd,
       "ead-es-route-target export RT",
       "EAD ES Route Target\n"
@@ -6326,6 +6339,10 @@ void bgp_config_write_evpn_info(struct vty *vty, struct bgp *bgp, afi_t afi,
        if (bgp->resolve_overlay_index)
                vty_out(vty, "  enable-resolve-overlay-index\n");
 
+       if (bgp_mh_info->evi_per_es_frag != BGP_EVPN_MAX_EVI_PER_ES_FRAG)
+               vty_out(vty, "  ead-es-frag evi-limit %u\n",
+                       bgp_mh_info->evi_per_es_frag);
+
        if (bgp_mh_info->host_routes_use_l3nhg !=
                        BGP_EVPN_MH_USE_ES_L3NHG_DEF) {
                if (bgp_mh_info->host_routes_use_l3nhg)
@@ -6593,6 +6610,7 @@ void bgp_ethernetvpn_init(void)
        install_element(BGP_EVPN_NODE, &no_bgp_evpn_vrf_rt_cmd);
        install_element(BGP_EVPN_NODE, &bgp_evpn_ead_es_rt_cmd);
        install_element(BGP_EVPN_NODE, &no_bgp_evpn_ead_es_rt_cmd);
+       install_element(BGP_EVPN_NODE, &bgp_evpn_ead_es_frag_evi_limit_cmd);
        install_element(BGP_EVPN_VNI_NODE, &bgp_evpn_advertise_svi_ip_vni_cmd);
        install_element(BGP_EVPN_VNI_NODE,
                        &bgp_evpn_advertise_default_gw_vni_cmd);