summaryrefslogtreecommitdiff
path: root/src/conf_mode/interfaces_vxlan.py
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2024-07-26 12:51:49 +0200
committerGitHub <noreply@github.com>2024-07-26 12:51:49 +0200
commit6b96def0e8760f6ff6a90cae5179600d674bbcbd (patch)
tree75d0be0397a65892640c2d6032658cffaa8abe11 /src/conf_mode/interfaces_vxlan.py
parent609f4b9c1bb7f3144a997f76e74e86bef0559b23 (diff)
parentce5460f0380a60eb07f70dfed29d1b011636448a (diff)
downloadvyos-1x-6b96def0e8760f6ff6a90cae5179600d674bbcbd.tar.gz
vyos-1x-6b96def0e8760f6ff6a90cae5179600d674bbcbd.zip
Merge pull request #3881 from vyos/mergify/bp/circinus/pr-3756
vxlan: T6505: Support VXLAN VLAN-VNI range mapping in CLI (backport #3756)
Diffstat (limited to 'src/conf_mode/interfaces_vxlan.py')
-rwxr-xr-xsrc/conf_mode/interfaces_vxlan.py29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/conf_mode/interfaces_vxlan.py b/src/conf_mode/interfaces_vxlan.py
index bc4918a52..68646e8ff 100755
--- a/src/conf_mode/interfaces_vxlan.py
+++ b/src/conf_mode/interfaces_vxlan.py
@@ -179,13 +179,36 @@ def verify(vxlan):
'is member of a bridge interface!')
vnis_used = []
+ vlans_used = []
for vif, vif_config in vxlan['vlan_to_vni'].items():
if 'vni' not in vif_config:
raise ConfigError(f'Must define VNI for VLAN "{vif}"!')
vni = vif_config['vni']
- if vni in vnis_used:
- raise ConfigError(f'VNI "{vni}" is already assigned to a different VLAN!')
- vnis_used.append(vni)
+
+ err_msg = f'VLAN range "{vif}" does not match VNI range "{vni}"!'
+ vif_range, vni_range = list(map(int, vif.split('-'))), list(map(int, vni.split('-')))
+
+ if len(vif_range) != len(vni_range):
+ raise ConfigError(err_msg)
+
+ if len(vif_range) > 1:
+ if vni_range[0] > vni_range[-1] or vif_range[0] > vif_range[-1]:
+ raise ConfigError('The upper bound of the range must be greater than the lower bound!')
+ vni_range = range(vni_range[0], vni_range[1] + 1)
+ vif_range = range(vif_range[0], vif_range[1] + 1)
+
+ if len(vif_range) != len(vni_range):
+ raise ConfigError(err_msg)
+
+ for vni_id in vni_range:
+ if vni_id in vnis_used:
+ raise ConfigError(f'VNI "{vni_id}" is already assigned to a different VLAN!')
+ vnis_used.append(vni_id)
+
+ for vif_id in vif_range:
+ if vif_id in vlans_used:
+ raise ConfigError(f'VLAN "{vif_id}" is already in use!')
+ vlans_used.append(vif_id)
if dict_search('parameters.neighbor_suppress', vxlan) != None:
if 'is_bridge_member' not in vxlan: