diff options
| author | Nataliia S. <81954790+natali-rs1985@users.noreply.github.com> | 2026-02-10 17:40:15 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-10 17:40:15 +0200 |
| commit | d9aa7405a3e0259370b86caa7ea704f0022faf32 (patch) | |
| tree | cc0e901bcc65c8e94bd73ebd9d235f55e50e902c /src | |
| parent | 32d91f5e5b4eff3dd5f047d800473ca54f7e5685 (diff) | |
| parent | 6d62b616ebfd6472661d2ff3b2c120de60c23adb (diff) | |
| download | vyos-1x-d9aa7405a3e0259370b86caa7ea704f0022faf32.tar.gz vyos-1x-d9aa7405a3e0259370b86caa7ea704f0022faf32.zip | |
Merge pull request #4952 from natali-rs1985/T8182
vpp: T8182: Disallow configuration of IPoE server on VPP interface
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/service_ipoe-server.py | 11 | ||||
| -rwxr-xr-x | src/conf_mode/vpp.py | 21 |
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() |
