Merge pull request #2762 from chiragshah6/evpn_dev

bgpd: check existing l3vni for any l2vni creation
This commit is contained in:
Russ White 2018-08-22 19:50:18 -04:00 committed by GitHub
commit 753e2c9152
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 0 deletions

View File

@ -4931,6 +4931,23 @@ void bgp_evpn_derive_auto_rd(struct bgp *bgp, struct bgpevpn *vpn)
UNSET_FLAG(vpn->flags, VNI_FLAG_RD_CFGD); UNSET_FLAG(vpn->flags, VNI_FLAG_RD_CFGD);
} }
/*
* Lookup L3-VNI
*/
bool bgp_evpn_lookup_l3vni_l2vni_table(vni_t vni)
{
struct list *inst = bm->bgp;
struct listnode *node;
struct bgp *bgp_vrf;
for (ALL_LIST_ELEMENTS_RO(inst, node, bgp_vrf)) {
if (bgp_vrf->l3vni == vni)
return true;
}
return false;
}
/* /*
* Lookup VNI. * Lookup VNI.
*/ */

View File

@ -503,4 +503,5 @@ extern struct evpnes *bgp_evpn_lookup_es(struct bgp *bgp, esi_t *esi);
extern struct evpnes *bgp_evpn_es_new(struct bgp *bgp, esi_t *esi, extern struct evpnes *bgp_evpn_es_new(struct bgp *bgp, esi_t *esi,
struct ipaddr *originator_ip); struct ipaddr *originator_ip);
extern void bgp_evpn_es_free(struct bgp *bgp, struct evpnes *es); extern void bgp_evpn_es_free(struct bgp *bgp, struct evpnes *es);
extern bool bgp_evpn_lookup_l3vni_l2vni_table(vni_t vni);
#endif /* _BGP_EVPN_PRIVATE_H */ #endif /* _BGP_EVPN_PRIVATE_H */

View File

@ -1888,6 +1888,14 @@ static struct bgpevpn *evpn_create_update_vni(struct bgp *bgp, vni_t vni)
vpn = bgp_evpn_lookup_vni(bgp, vni); vpn = bgp_evpn_lookup_vni(bgp, vni);
if (!vpn) { if (!vpn) {
/* Check if this L2VNI is already configured as L3VNI */
if (bgp_evpn_lookup_l3vni_l2vni_table(vni)) {
flog_err(BGP_ERR_VNI,
"%u: Failed to create L2VNI %u, it is configured as L3VNI",
bgp->vrf_id, vni);
return NULL;
}
/* tenant vrf will be updated when we get local_vni_add from /* tenant vrf will be updated when we get local_vni_add from
* zebra * zebra
*/ */