diff options
author | Daniil Baturin <daniil@vyos.io> | 2024-03-13 13:18:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-13 13:18:26 +0100 |
commit | 4dfc9b7c195e9cf3f57afbf8c84d701b73e83a8f (patch) | |
tree | ce70aa88cdd993bba7b797adef58b7ee6162aa76 /src | |
parent | 729d6785686284a61504dbfb8217888a485510dd (diff) | |
parent | 306e83a66e2e580417d87e3871200cad6c09cb49 (diff) | |
download | vyos-1x-4dfc9b7c195e9cf3f57afbf8c84d701b73e83a8f.tar.gz vyos-1x-4dfc9b7c195e9cf3f57afbf8c84d701b73e83a8f.zip |
Merge pull request #3129 from vyos/mergify/bp/sagitta/pr-3125
radvd: T6118: add nat64prefix support RFC8781 (backport #3125)
Diffstat (limited to 'src')
-rwxr-xr-x | src/conf_mode/service_router-advert.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/conf_mode/service_router-advert.py b/src/conf_mode/service_router-advert.py index dbb47de4e..88d767bb8 100755 --- a/src/conf_mode/service_router-advert.py +++ b/src/conf_mode/service_router-advert.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (C) 2018-2022 VyOS maintainers and contributors +# Copyright (C) 2018-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 @@ -17,6 +17,8 @@ import os from sys import exit +from ipaddress import IPv6Network + from vyos.base import Warning from vyos.config import Config from vyos.template import render @@ -47,7 +49,9 @@ def verify(rtradv): return None for interface, interface_config in rtradv['interface'].items(): - if 'prefix' in interface: + interval_max = int(interface_config['interval']['max']) + + if 'prefix' in interface_config: for prefix, prefix_config in interface_config['prefix'].items(): valid_lifetime = prefix_config['valid_lifetime'] if valid_lifetime == 'infinity': @@ -60,6 +64,15 @@ def verify(rtradv): if not (int(valid_lifetime) >= int(preferred_lifetime)): raise ConfigError('Prefix valid-lifetime must be greater then or equal to preferred-lifetime') + if 'nat64prefix' in interface_config: + nat64_supported_lengths = [32, 40, 48, 56, 64, 96] + for prefix, prefix_config in interface_config['nat64prefix'].items(): + if IPv6Network(prefix).prefixlen not in nat64_supported_lengths: + raise ConfigError(f'Invalid NAT64 prefix length for "{prefix}", can only be one of: /' + ', /'.join(nat64_supported_lengths)) + + if int(prefix_config['valid_lifetime']) < interval_max: + raise ConfigError(f'NAT64 valid-lifetime must not be smaller then "interval max" which is "{interval_max}"!') + if 'name_server' in interface_config: if len(interface_config['name_server']) > 3: raise ConfigError('No more then 3 IPv6 name-servers supported!') @@ -72,7 +85,6 @@ def verify(rtradv): # ensure stale RDNSS info gets removed in a timely fashion, this # should not be greater than 2*MaxRtrAdvInterval. lifetime = int(interface_config['name_server_lifetime']) - interval_max = int(interface_config['interval']['max']) if lifetime > 0: if lifetime < int(interval_max): raise ConfigError(f'RDNSS lifetime must be at least "{interval_max}" seconds!') |