Skip to content

Commit

Permalink
ipoe: T6205: error in migration script logic while renaming mac-addre…
Browse files Browse the repository at this point in the history
…ss to mac node

The problem was introduced in [1] but the config migrator part unfortunately
was added to the wrong version [2]. As IPoE config version 0 was only active
during the 1.3 development cycle and VyOS 1.3.0 was already released with config
version 1 we can safely drop the migrator 0-to-1 and move the code to 1-to-2 to
properly support upgrades from VyOS 1.3 -> 1.4 or newer.

1: 05df2a5#diff-08291bf77870abe3af8bbe3e8ce4bbf344fd0498b2c5c75a75aa7235d381c88eL168
2: 05df2a5#diff-b8bb58b75607d3653e74d82eff02442f9f3ab82698f160ba37858f7cdf6c79ccR44-R46
  • Loading branch information
c-po committed Apr 6, 2024
1 parent 7178630 commit 53cd72f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 82 deletions.
4 changes: 0 additions & 4 deletions smoketest/configs/ipoe-server
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,13 @@ service {
}
}
interface eth1 {
client-subnet 192.168.0.0/24
network vlan
network-mode L3
vlan-id 100
vlan-id 200
vlan-range 1000-2000
vlan-range 2500-2700
}
interface eth2 {
client-subnet 192.168.1.0/24
}
name-server 10.10.1.1
name-server 10.10.1.2
name-server 2001:db8:aaa::
Expand Down
4 changes: 2 additions & 2 deletions src/conf_mode/service_ipoe-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ def verify(ipoe):
for interface, iface_config in ipoe['interface'].items():
verify_interface_exists(interface)
if 'client_subnet' in iface_config and 'vlan' in iface_config:
raise ConfigError('Option "client-subnet" incompatible with "vlan"!'
'Use "ipoe client-ip-pool" instead.')
raise ConfigError('Option "client-subnet" and "vlan" are mutually exclusive, '
'use "client-ip-pool" instead!')

verify_accel_ppp_authentication(ipoe, local_users=False)
verify_accel_ppp_ip_pool(ipoe)
Expand Down
74 changes: 0 additions & 74 deletions src/migration-scripts/ipoe-server/0-to-1

This file was deleted.

36 changes: 34 additions & 2 deletions src/migration-scripts/ipoe-server/1-to-2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
# Copyright (C) 2023 VyOS maintainers and contributors
# Copyright (C) 2024 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
Expand All @@ -14,6 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# - T4703: merge vlan-id and vlan-range to vlan CLI node
# L2|L3 -> l2|l3
# mac-address -> mac
# network-mode -> mode

# - changed cli of all named pools
# - moved gateway-address from pool to global configuration with / netmask
# gateway can exist without pool if radius is used
Expand All @@ -39,12 +44,39 @@ with open(file_name, 'r') as f:

config = ConfigTree(config_file)
base = ['service', 'ipoe-server']
pool_base = base + ['client-ip-pool']

if not config.exists(base):
exit(0)

if config.exists(base + ['authentication', 'interface']):
for interface in config.list_nodes(base + ['authentication', 'interface']):
config.rename(base + ['authentication', 'interface', interface, 'mac-address'], 'mac')

mac_base = base + ['authentication', 'interface', interface, 'mac']
for mac in config.list_nodes(mac_base):
vlan_config = mac_base + [mac, 'vlan-id']
if config.exists(vlan_config):
config.rename(vlan_config, 'vlan')

for interface in config.list_nodes(base + ['interface']):
base_path = base + ['interface', interface]
for vlan in ['vlan-id', 'vlan-range']:
if config.exists(base_path + [vlan]):
print(interface, vlan)
for tmp in config.return_values(base_path + [vlan]):
config.set(base_path + ['vlan'], value=tmp, replace=False)
config.delete(base_path + [vlan])

if config.exists(base_path + ['network-mode']):
tmp = config.return_value(base_path + ['network-mode'])
config.delete(base_path + ['network-mode'])
# Change L2|L3 to lower case l2|l3
config.set(base_path + ['mode'], value=tmp.lower())

pool_base = base + ['client-ip-pool']
if not config.exists(pool_base):
exit(0)

default_pool = ''
gateway = ''

Expand Down

0 comments on commit 53cd72f

Please sign in to comment.