From a43db38e72da8bfebc42d3a0ecedc8ae79383c5d Mon Sep 17 00:00:00 2001
From: DmitriyEshenko <dmitriy.eshenko@vyos.io>
Date: Wed, 15 Dec 2021 19:27:26 +0000
Subject: pppoe-server: T3006: Add range to regex generator

---
 src/conf_mode/service_pppoe-server.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

(limited to 'src')

diff --git a/src/conf_mode/service_pppoe-server.py b/src/conf_mode/service_pppoe-server.py
index 9fbd531da..f6182f8ea 100755
--- a/src/conf_mode/service_pppoe-server.py
+++ b/src/conf_mode/service_pppoe-server.py
@@ -24,6 +24,8 @@ from vyos.configverify import verify_accel_ppp_base_service
 from vyos.template import render
 from vyos.util import call
 from vyos.util import dict_search
+from vyos.util import get_interface_config
+from vyos.range_regex import range_to_regex
 from vyos import ConfigError
 from vyos import airbag
 airbag.enable()
@@ -56,6 +58,11 @@ def verify(pppoe):
     if 'interface' not in pppoe:
         raise ConfigError('At least one listen interface must be defined!')
 
+    # Check is interface exists in the system
+    for iface in pppoe['interface']:
+        if not get_interface_config(iface):
+            raise ConfigError(f'Interface {iface} does not exist!')
+
     # local ippool and gateway settings config checks
     if not (dict_search('client_ip_pool.subnet', pppoe) or
            (dict_search('client_ip_pool.start', pppoe) and
@@ -73,6 +80,13 @@ def generate(pppoe):
     if not pppoe:
         return None
 
+    # Generate special regex for dynamic interfaces
+    for iface, iface_options in pppoe['interface'].items():
+        if 'vlan_range' in iface_options:
+            pppoe['interface'][iface]['regex'] = []
+            for vlan_range in iface_options['vlan_range']:
+                pppoe['interface'][iface]['regex'].append(range_to_regex(vlan_range))
+
     render(pppoe_conf, 'accel-ppp/pppoe.config.tmpl', pppoe)
 
     if dict_search('authentication.mode', pppoe) == 'local':
-- 
cgit v1.2.3