mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 15:24:43 +00:00
bgpd: check existing l3vni for any l2vni creation
Scan all bgp vrf instances and respective L3VNI against the VNI which is being configured. Ticket:CM-21859 Testing Done: Configure l3vni, try to configure same vni as l2vni under router bgp, address-family l2vpn evpn. The configuration is rejected. show evpn vni VNI Type VxLAN IF # MACs # ARPs # Remote VTEPs Tenant VRF 4001 L3 vx-4001 0 0 n/a vrf1 TOR(config)# router bgp 5546 TOR(config-router)# address-family l2vpn evpn TOR(config-router-af)# vni 4001 % Failed to create VNI Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
This commit is contained in:
parent
0a4ecf2729
commit
7df407eda8
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user