diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/service_pppoe-server.py | 17 | ||||
| -rw-r--r-- | src/migration-scripts/pppoe-server/9-to-10 | 56 | 
2 files changed, 73 insertions, 0 deletions
| diff --git a/src/conf_mode/service_pppoe-server.py b/src/conf_mode/service_pppoe-server.py index 328487985..c95f976d3 100755 --- a/src/conf_mode/service_pppoe-server.py +++ b/src/conf_mode/service_pppoe-server.py @@ -84,12 +84,29 @@ def verify_pado_delay(pppoe):          pado_delay = pppoe['pado_delay']          delays_without_sessions = pado_delay['delays_without_sessions'] +        if 'disable' in delays_without_sessions: +            raise ConfigError( +                'Number of sessions must be specified for "pado-delay disable"' +            ) +          if len(delays_without_sessions) > 1:              raise ConfigError(                  f'Cannot add more then ONE pado-delay without sessions, '                  f'but {len(delays_without_sessions)} were set'              ) +        if 'disable' in [delay[0] for delay in pado_delay['delays_with_sessions']]: +            # need to sort delays by sessions to verify if there is no delay +            # for sessions after disabling +            sorted_pado_delay = sorted(pado_delay['delays_with_sessions'], key=lambda k_v: k_v[1]) +            last_delay = sorted_pado_delay[-1] + +            if last_delay[0] != 'disable': +                raise ConfigError( +                    f'Cannot add pado-delay after disabled sessions, but ' +                    f'"pado-delay {last_delay[0]} sessions {last_delay[1]}" was set' +                ) +  def verify(pppoe):      if not pppoe:          return None diff --git a/src/migration-scripts/pppoe-server/9-to-10 b/src/migration-scripts/pppoe-server/9-to-10 new file mode 100644 index 000000000..e0c782f04 --- /dev/null +++ b/src/migration-scripts/pppoe-server/9-to-10 @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# +# 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 +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +# Migration of pado-delay options + +from sys import argv +from sys import exit +from vyos.configtree import ConfigTree + +if len(argv) < 2: +    print("Must specify file name!") +    exit(1) + +file_name = argv[1] + +with open(file_name, 'r') as f: +    config_file = f.read() + +config = ConfigTree(config_file) +base = ['service', 'pppoe-server', 'pado-delay'] +if not config.exists(base): +    exit(0) + +pado_delay = {} +for delay in config.list_nodes(base): +    sessions = config.return_value(base + [delay, 'sessions']) +    pado_delay[delay] = sessions + +# need to define delay for latest sessions +sorted_delays = dict(sorted(pado_delay.items(), key=lambda k_v: int(k_v[1]))) +last_delay = list(sorted_delays)[-1] + +# Rename last delay -> disable +tmp = base + [last_delay] +if config.exists(tmp): +    config.rename(tmp, 'disable') + +try: +    with open(file_name, 'w') as f: +        f.write(config.to_string()) +except OSError as e: +    print("Failed to save the modified config: {}".format(e)) +    exit(1) | 
