summaryrefslogtreecommitdiff
path: root/src/conf_mode/protocols_bgp.py
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2026-06-26 20:16:50 +0200
committerGitHub <noreply@github.com>2026-06-26 20:16:50 +0200
commitfe27e9cedb1bc7a91095a19d1867cfda428e12fe (patch)
tree627d07302494801dfb7b6c440e877d55b163d217 /src/conf_mode/protocols_bgp.py
parent29d887a9cb2e32db7406442251437ce7f5794803 (diff)
parent4e11adfb927c22e2f977c897d56a4d243860e877 (diff)
downloadvyos-1x-fe27e9cedb1bc7a91095a19d1867cfda428e12fe.tar.gz
vyos-1x-fe27e9cedb1bc7a91095a19d1867cfda428e12fe.zip
Merge pull request #5297 from alexandr-san4ez/T8865-rolling
bgp: T8865: Reject `vni` sub-block in VRF l2vpn-evpn when `advertise-all-vni` is globally active
Diffstat (limited to 'src/conf_mode/protocols_bgp.py')
-rwxr-xr-xsrc/conf_mode/protocols_bgp.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py
index 2ec631f4c..bde6fcdd0 100755
--- a/src/conf_mode/protocols_bgp.py
+++ b/src/conf_mode/protocols_bgp.py
@@ -647,6 +647,29 @@ def verify(config_dict):
if 'route_target' in vni_config and 'advertise_all_vni' not in afi_config:
raise ConfigError('BGP EVPN "route-target" requires "advertise-all-vni" to be set!')
+ # T8865: Detect conflict between VRF-level "vni" sub-block and global
+ # "advertise-all-vni". When advertise-all-vni is active in the default
+ # BGP instance, FRR already owns all VNIs discovered from the kernel.
+ # Attempting to create the same VNI again via a VRF BGP "vni" sub-block
+ # causes FRR to return "% Failed to create VNI" and perform an early exit
+ # from config processing.
+ if vrf and 'vni' in afi_config:
+ default_bgp_evpn = dict_search(
+ 'dependent_vrfs.default.protocols.bgp.address_family.l2vpn_evpn',
+ bgp,
+ )
+ if (
+ default_bgp_evpn is not None
+ and 'deleted' not in default_bgp_evpn
+ ):
+ if 'advertise_all_vni' in default_bgp_evpn:
+ raise ConfigError(
+ 'BGP EVPN "vni" sub-configuration conflicts with '
+ '"advertise-all-vni" in the default BGP instance. '
+ 'Remove "vni" from the VRF l2vpn-evpn configuration '
+ 'or disable "advertise-all-vni" for the default BGP.'
+ )
+
return None
def generate(config_dict):