summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-01-23 11:47:06 +0200
committerNataliia Solomko <natalirs1985@gmail.com>2026-02-10 13:08:27 +0200
commit6d62b616ebfd6472661d2ff3b2c120de60c23adb (patch)
tree8bfc93097b9a64f7aca179f9dc1c0c15e32f3954
parent911f8653a813868f2cf805a3a1662eaf16375188 (diff)
downloadvyos-1x-6d62b616ebfd6472661d2ff3b2c120de60c23adb.tar.gz
vyos-1x-6d62b616ebfd6472661d2ff3b2c120de60c23adb.zip
vpp: T8182: Disallow configuration of IPoE server on VPP interface
-rwxr-xr-xsrc/conf_mode/service_ipoe-server.py11
-rwxr-xr-xsrc/conf_mode/vpp.py21
2 files changed, 32 insertions, 0 deletions
diff --git a/src/conf_mode/service_ipoe-server.py b/src/conf_mode/service_ipoe-server.py
index 50628947e..360254828 100755
--- a/src/conf_mode/service_ipoe-server.py
+++ b/src/conf_mode/service_ipoe-server.py
@@ -29,6 +29,7 @@ from vyos.accel_ppp_util import verify_accel_ppp_name_servers
from vyos.accel_ppp_util import verify_accel_ppp_wins_servers
from vyos.accel_ppp_util import verify_accel_ppp_ip_pool
from vyos.accel_ppp_util import verify_accel_ppp_authentication
+from vyos.vpp.utils import cli_ifaces_list
from vyos import ConfigError
from vyos import airbag
@@ -58,6 +59,9 @@ def get_config(config=None):
)
ipoe['server_type'] = 'ipoe'
+
+ ipoe['vpp_ifaces'] = cli_ifaces_list(conf)
+
return ipoe
@@ -69,6 +73,13 @@ def verify(ipoe):
raise ConfigError('No IPoE interface configured')
for interface, iface_config in ipoe['interface'].items():
+ if ipoe.get('vpp_ifaces'):
+ base_interface = interface.split('.')[0]
+ if base_interface in ipoe['vpp_ifaces']:
+ raise ConfigError(
+ f'{interface} is a VPP interface and cannot be used for IPoE!'
+ )
+
verify_interface_exists(ipoe, interface, warning_only=True)
if 'client_subnet' in iface_config and 'vlan' in iface_config:
raise ConfigError(
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index 79c46bde8..27262efb5 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -429,6 +429,13 @@ def get_config(config=None):
iface_filter_eth(conf, iface)
set_dependents(dependency, conf, iface)
+ config['ipoe_conf'] = conf.get_config_dict(
+ ['service', 'ipoe-server'],
+ key_mangling=('-', '_'),
+ get_first_key=True,
+ no_tag_node_value_mangle=True,
+ )
+
# kernel-interfaces dependency
if effective_config.get('kernel_interfaces'):
for iface in config.get('kernel_interfaces', {}):
@@ -481,6 +488,20 @@ def verify(config):
if 'interface' not in config['settings']:
raise ConfigError('"settings interface" is required but not set!')
+ ipoe_ifaces = list(
+ {
+ iface
+ for iface in config['settings']['interface']
+ for ipoe_iface in config.get('ipoe_conf', {}).get('interface', {})
+ if iface == ipoe_iface or ipoe_iface.startswith(f'{iface}.')
+ }
+ )
+ if ipoe_ifaces:
+ raise ConfigError(
+ f'Interface(s) {", ".join(ipoe_ifaces)} cannot be added to VPP because '
+ 'IPoE is already configured. An interface cannot be used by both VPP and IPoE!'
+ )
+
# check if the system meets minimal requirements
verify_vpp_minimum_memory()