From 8f58dde4c89ae365d0b2cb15d105d8ead73ee0c9 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Sun, 8 Mar 2020 12:35:55 +0100
Subject: vrf: T31: support VRF usage on VLAN/VIF interfaces

---
 src/conf_mode/interfaces-bonding.py         | 23 +++--------------------
 src/conf_mode/interfaces-ethernet.py        | 17 +++--------------
 src/conf_mode/interfaces-pseudo-ethernet.py |  4 ++++
 src/conf_mode/interfaces-wireless.py        |  5 +++--
 4 files changed, 13 insertions(+), 36 deletions(-)

(limited to 'src')

diff --git a/src/conf_mode/interfaces-bonding.py b/src/conf_mode/interfaces-bonding.py
index 617506c06..a75beabd1 100755
--- a/src/conf_mode/interfaces-bonding.py
+++ b/src/conf_mode/interfaces-bonding.py
@@ -21,7 +21,7 @@ from sys import exit
 from netifaces import interfaces
 
 from vyos.ifconfig import BondIf
-from vyos.ifconfig_vlan import apply_vlan_config
+from vyos.ifconfig_vlan import apply_vlan_config, verify_vlan_config
 from vyos.configdict import list_diff, vlan_to_dict
 from vyos.config import Config
 from vyos import ConfigError
@@ -272,25 +272,8 @@ def verify(bond):
     if vrf_name and vrf_name not in interfaces():
         raise ConfigError(f'VRF "{vrf_name}" does not exist')
 
-    # DHCPv6 parameters-only and temporary address are mutually exclusive
-    for vif_s in bond['vif_s']:
-        if vif_s['dhcpv6_prm_only'] and vif_s['dhcpv6_temporary']:
-            raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
-        for vif_c in vif_s['vif_c']:
-            if vif_c['dhcpv6_prm_only'] and vif_c['dhcpv6_temporary']:
-                raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
-    for vif in bond['vif']:
-        if vif['dhcpv6_prm_only'] and vif['dhcpv6_temporary']:
-            raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
-
-    for vif_s in bond['vif_s']:
-        for vif in bond['vif']:
-            if vif['id'] == vif_s['id']:
-                raise ConfigError('Can not use identical ID on vif and vif-s interface')
-
+    # use common function to verify VLAN configuration
+    verify_vlan_config(bond)
 
     conf = Config()
     for intf in bond['member']:
diff --git a/src/conf_mode/interfaces-ethernet.py b/src/conf_mode/interfaces-ethernet.py
index 67cc56bb2..6d779c94c 100755
--- a/src/conf_mode/interfaces-ethernet.py
+++ b/src/conf_mode/interfaces-ethernet.py
@@ -21,7 +21,7 @@ from copy import deepcopy
 from netifaces import interfaces
 
 from vyos.ifconfig import EthernetIf
-from vyos.ifconfig_vlan import apply_vlan_config
+from vyos.ifconfig_vlan import apply_vlan_config, verify_vlan_config
 from vyos.configdict import list_diff, vlan_to_dict
 from vyos.config import Config
 from vyos import ConfigError
@@ -262,19 +262,8 @@ def verify(eth):
                 if eth['address']:
                     raise ConfigError('Can not assign address to interface {} which is a member of {}'.format(eth['intf'], bond))
 
-    # DHCPv6 parameters-only and temporary address are mutually exclusive
-    for vif_s in eth['vif_s']:
-        if vif_s['dhcpv6_prm_only'] and vif_s['dhcpv6_temporary']:
-            raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
-        for vif_c in vif_s['vif_c']:
-            if vif_c['dhcpv6_prm_only'] and vif_c['dhcpv6_temporary']:
-                raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
-    for vif in eth['vif']:
-        if vif['dhcpv6_prm_only'] and vif['dhcpv6_temporary']:
-            raise ConfigError('DHCPv6 temporary and parameters-only options are mutually exclusive!')
-
+    # use common function to verify VLAN configuration
+    verify_vlan_config(eth)
     return None
 
 def generate(eth):
diff --git a/src/conf_mode/interfaces-pseudo-ethernet.py b/src/conf_mode/interfaces-pseudo-ethernet.py
index 09d580b28..67c5eb3d2 100755
--- a/src/conf_mode/interfaces-pseudo-ethernet.py
+++ b/src/conf_mode/interfaces-pseudo-ethernet.py
@@ -21,6 +21,7 @@ from sys import exit
 from netifaces import interfaces
 
 from vyos.ifconfig import MACVLANIf
+from vyos.ifconfig_vlan import apply_vlan_config, verify_vlan_config
 from vyos.configdict import list_diff
 from vyos.config import Config
 from vyos import ConfigError
@@ -199,6 +200,9 @@ def verify(peth):
     if not peth['link'] in interfaces():
         raise ConfigError('Pseudo-ethernet source interface does not exist')
 
+    # use common function to verify VLAN configuration
+    verify_vlan_config(peth)
+
     return None
 
 def generate(peth):
diff --git a/src/conf_mode/interfaces-wireless.py b/src/conf_mode/interfaces-wireless.py
index 30074af78..2d4b16faa 100755
--- a/src/conf_mode/interfaces-wireless.py
+++ b/src/conf_mode/interfaces-wireless.py
@@ -27,7 +27,7 @@ from subprocess import Popen, PIPE
 from psutil import pid_exists
 
 from vyos.ifconfig import EthernetIf
-from vyos.ifconfig_vlan import apply_vlan_config
+from vyos.ifconfig_vlan import apply_vlan_config, verify_vlan_config
 from vyos.configdict import list_diff, vlan_to_dict
 from vyos.config import Config
 from vyos import ConfigError
@@ -1298,7 +1298,8 @@ def verify(wifi):
         if not radius['key']:
             raise ConfigError('Misssing RADIUS shared secret key for server: {}'.format(radius['server']))
 
-
+    # use common function to verify VLAN configuration
+    verify_vlan_config(wifi)
 
     return None
 
-- 
cgit v1.2.3