diff options
author | Christian Breunig <christian@breunig.cc> | 2024-01-10 19:59:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-10 19:59:20 +0100 |
commit | aebb458262072457c6a3840d1b17031fbd780eca (patch) | |
tree | b89f9b47d85bc00c758bd2388574270d20858079 /src | |
parent | e890527d730053ed73227180c77d9dbbb9393ce0 (diff) | |
parent | 4ffec67d04670192d9b722353cbaef04cb0ba129 (diff) | |
download | vyos-1x-aebb458262072457c6a3840d1b17031fbd780eca.tar.gz vyos-1x-aebb458262072457c6a3840d1b17031fbd780eca.zip |
Merge pull request #2777 from aapostoliuk/T5688-multirange
T5688: Changed 'range' to multi in 'client-ip-pool' for accell-ppp
Diffstat (limited to 'src')
-rwxr-xr-x | src/conf_mode/vpn_l2tp.py | 2 | ||||
-rwxr-xr-x | src/migration-scripts/ipoe-server/1-to-2 | 2 | ||||
-rwxr-xr-x | src/migration-scripts/l2tp/4-to-5 | 44 | ||||
-rwxr-xr-x | src/migration-scripts/pppoe-server/6-to-7 | 45 | ||||
-rwxr-xr-x | src/migration-scripts/pptp/2-to-3 | 19 | ||||
-rwxr-xr-x | src/migration-scripts/sstp/4-to-5 | 17 | ||||
-rwxr-xr-x | src/validators/ipv4-range-mask | 36 |
7 files changed, 66 insertions, 99 deletions
diff --git a/src/conf_mode/vpn_l2tp.py b/src/conf_mode/vpn_l2tp.py index 03a27d3cd..1a91951b4 100755 --- a/src/conf_mode/vpn_l2tp.py +++ b/src/conf_mode/vpn_l2tp.py @@ -71,7 +71,7 @@ def verify(l2tp): raise ConfigError('DA/CoE server key required!') if dict_search('authentication.mode', l2tp) in ['local', 'noauth']: - if not l2tp['client_ip_pool'] and not l2tp['client_ipv6_pool']: + if not dict_search('client_ip_pool', l2tp) and not dict_search('client_ipv6_pool', l2tp): raise ConfigError( "L2TP local auth mode requires local client-ip-pool or client-ipv6-pool to be configured!") if dict_search('client_ip_pool', l2tp) and not dict_search('default_pool', l2tp): diff --git a/src/migration-scripts/ipoe-server/1-to-2 b/src/migration-scripts/ipoe-server/1-to-2 index c8cec6835..11d7911e9 100755 --- a/src/migration-scripts/ipoe-server/1-to-2 +++ b/src/migration-scripts/ipoe-server/1-to-2 @@ -57,7 +57,7 @@ for pool_name in config.list_nodes(namedpools_base): pool_path = namedpools_base + [pool_name] if config.exists(pool_path + ['subnet']): subnet = config.return_value(pool_path + ['subnet']) - config.set(pool_base + [pool_name, 'range'], value=subnet) + config.set(pool_base + [pool_name, 'range'], value=subnet, replace=False) # Get netmask from subnet mask = subnet.split("/")[1] if config.exists(pool_path + ['next-pool']): diff --git a/src/migration-scripts/l2tp/4-to-5 b/src/migration-scripts/l2tp/4-to-5 index 496dc83d6..3176f895a 100755 --- a/src/migration-scripts/l2tp/4-to-5 +++ b/src/migration-scripts/l2tp/4-to-5 @@ -24,7 +24,7 @@ import os from sys import argv from sys import exit from vyos.configtree import ConfigTree - +from vyos.base import Warning if len(argv) < 2: print("Must specify file name!") @@ -45,33 +45,33 @@ if not config.exists(pool_base): exit(0) default_pool = '' range_pool_name = 'default-range-pool' -subnet_base_name = 'default-subnet-pool' -number = 1 -subnet_pool_name = f'{subnet_base_name}-{number}' -prev_subnet_pool = subnet_pool_name -if config.exists(pool_base + ['subnet']): - default_pool = subnet_pool_name - for subnet in config.return_values(pool_base + ['subnet']): - config.set(pool_base + [subnet_pool_name, 'range'], value=subnet) - if prev_subnet_pool != subnet_pool_name: - config.set(pool_base + [prev_subnet_pool, 'next-pool'], - value=subnet_pool_name) - prev_subnet_pool = subnet_pool_name - number += 1 - subnet_pool_name = f'{subnet_base_name}-{number}' - - config.delete(pool_base + ['subnet']) if config.exists(pool_base + ['start']) and config.exists(pool_base + ['stop']): + def is_legalrange(ip1: str, ip2: str, mask: str): + from ipaddress import IPv4Interface + interface1 = IPv4Interface(f'{ip1}/{mask}') + + interface2 = IPv4Interface(f'{ip2}/{mask}') + return interface1.network.network_address == interface2.network.network_address and interface2.ip > interface1.ip + start_ip = config.return_value(pool_base + ['start']) stop_ip = config.return_value(pool_base + ['stop']) - ip_range = f'{start_ip}-{stop_ip}' + if is_legalrange(start_ip, stop_ip,'24'): + ip_range = f'{start_ip}-{stop_ip}' + config.set(pool_base + [range_pool_name, 'range'], value=ip_range, replace=False) + default_pool = range_pool_name + else: + Warning( + f'L2TP client-ip-pool range start-ip:{start_ip} and stop-ip:{stop_ip} can not be migrated.') + config.delete(pool_base + ['start']) config.delete(pool_base + ['stop']) - config.set(pool_base + [range_pool_name, 'range'], value=ip_range) - if default_pool: - config.set(pool_base + [range_pool_name, 'next-pool'], - value=default_pool) + +if config.exists(pool_base + ['subnet']): + for subnet in config.return_values(pool_base + ['subnet']): + config.set(pool_base + [range_pool_name, 'range'], value=subnet, replace=False) + + config.delete(pool_base + ['subnet']) default_pool = range_pool_name if default_pool: diff --git a/src/migration-scripts/pppoe-server/6-to-7 b/src/migration-scripts/pppoe-server/6-to-7 index d856c1f34..b94ce57f9 100755 --- a/src/migration-scripts/pppoe-server/6-to-7 +++ b/src/migration-scripts/pppoe-server/6-to-7 @@ -29,7 +29,7 @@ import os from sys import argv from sys import exit from vyos.configtree import ConfigTree - +from vyos.base import Warning if len(argv) < 2: print("Must specify file name!") @@ -48,38 +48,35 @@ if not config.exists(base): if not config.exists(pool_base): exit(0) + default_pool = '' range_pool_name = 'default-range-pool' -subnet_base_name = 'default-subnet-pool' -number = 1 -subnet_pool_name = f'{subnet_base_name}-{number}' -prev_subnet_pool = subnet_pool_name #Default nameless pools migrations -if config.exists(pool_base + ['subnet']): - default_pool = subnet_pool_name - for subnet in config.return_values(pool_base + ['subnet']): - config.set(pool_base + [subnet_pool_name, 'range'], value=subnet) - if prev_subnet_pool != subnet_pool_name: - config.set(pool_base + [prev_subnet_pool, 'next-pool'], - value=subnet_pool_name) - prev_subnet_pool = subnet_pool_name - number += 1 - subnet_pool_name = f'{subnet_base_name}-{number}' - - config.delete(pool_base + ['subnet']) - if config.exists(pool_base + ['start']) and config.exists(pool_base + ['stop']): + def is_legalrange(ip1: str, ip2: str, mask: str): + from ipaddress import IPv4Interface + interface1 = IPv4Interface(f'{ip1}/{mask}') + interface2 = IPv4Interface(f'{ip2}/{mask}') + return interface1.network.network_address == interface2.network.network_address and interface2.ip > interface1.ip + start_ip = config.return_value(pool_base + ['start']) stop_ip = config.return_value(pool_base + ['stop']) - ip_range = f'{start_ip}-{stop_ip}' + if is_legalrange(start_ip, stop_ip, '24'): + ip_range = f'{start_ip}-{stop_ip}' + config.set(pool_base + [range_pool_name, 'range'], value=ip_range, replace=False) + default_pool = range_pool_name + else: + Warning( + f'PPPoE client-ip-pool range start-ip:{start_ip} and stop-ip:{stop_ip} can not be migrated.') config.delete(pool_base + ['start']) config.delete(pool_base + ['stop']) - config.set(pool_base + [range_pool_name, 'range'], value=ip_range) - if default_pool: - config.set(pool_base + [range_pool_name, 'next-pool'], - value=default_pool) + +if config.exists(pool_base + ['subnet']): default_pool = range_pool_name + for subnet in config.return_values(pool_base + ['subnet']): + config.set(pool_base + [range_pool_name, 'range'], value=subnet, replace=False) + config.delete(pool_base + ['subnet']) gateway = '' if config.exists(base + ['gateway-address']): @@ -97,7 +94,7 @@ if config.exists(namedpools_base): pool_path = namedpools_base + [pool_name] if config.exists(pool_path + ['subnet']): subnet = config.return_value(pool_path + ['subnet']) - config.set(pool_base + [pool_name, 'range'], value=subnet) + config.set(pool_base + [pool_name, 'range'], value=subnet, replace=False) if config.exists(pool_path + ['next-pool']): next_pool = config.return_value(pool_path + ['next-pool']) config.set(pool_base + [pool_name, 'next-pool'], value=next_pool) diff --git a/src/migration-scripts/pptp/2-to-3 b/src/migration-scripts/pptp/2-to-3 index 98dc5c2a6..091cb68ec 100755 --- a/src/migration-scripts/pptp/2-to-3 +++ b/src/migration-scripts/pptp/2-to-3 @@ -23,7 +23,7 @@ import os from sys import argv from sys import exit from vyos.configtree import ConfigTree - +from vyos.base import Warning if len(argv) < 2: print("Must specify file name!") @@ -46,13 +46,24 @@ if not config.exists(pool_base): range_pool_name = 'default-range-pool' if config.exists(pool_base + ['start']) and config.exists(pool_base + ['stop']): + def is_legalrange(ip1: str, ip2: str, mask: str): + from ipaddress import IPv4Interface + interface1 = IPv4Interface(f'{ip1}/{mask}') + interface2 = IPv4Interface(f'{ip2}/{mask}') + return interface1.network.network_address == interface2.network.network_address and interface2.ip > interface1.ip + start_ip = config.return_value(pool_base + ['start']) stop_ip = config.return_value(pool_base + ['stop']) - ip_range = f'{start_ip}-{stop_ip}' + if is_legalrange(start_ip, stop_ip, '24'): + ip_range = f'{start_ip}-{stop_ip}' + config.set(pool_base + [range_pool_name, 'range'], value=ip_range, replace=False) + config.set(base + ['default-pool'], value=range_pool_name) + else: + Warning( + f'PPTP client-ip-pool range start-ip:{start_ip} and stop-ip:{stop_ip} can not be migrated.') + config.delete(pool_base + ['start']) config.delete(pool_base + ['stop']) - config.set(pool_base + [range_pool_name, 'range'], value=ip_range) - config.set(base + ['default-pool'], value=range_pool_name) # format as tag node config.set_tag(pool_base) diff --git a/src/migration-scripts/sstp/4-to-5 b/src/migration-scripts/sstp/4-to-5 index 3a86c79ec..95e482713 100755 --- a/src/migration-scripts/sstp/4-to-5 +++ b/src/migration-scripts/sstp/4-to-5 @@ -43,21 +43,12 @@ if not config.exists(base): if not config.exists(pool_base): exit(0) -subnet_base_name = 'default-subnet-pool' -number = 1 -subnet_pool_name = f'{subnet_base_name}-{number}' -prev_subnet_pool = subnet_pool_name +range_pool_name = 'default-range-pool' + if config.exists(pool_base + ['subnet']): - default_pool = subnet_pool_name + default_pool = range_pool_name for subnet in config.return_values(pool_base + ['subnet']): - config.set(pool_base + [subnet_pool_name, 'range'], value=subnet) - if prev_subnet_pool != subnet_pool_name: - config.set(pool_base + [prev_subnet_pool, 'next-pool'], - value=subnet_pool_name) - prev_subnet_pool = subnet_pool_name - number += 1 - subnet_pool_name = f'{subnet_base_name}-{number}' - + config.set(pool_base + [range_pool_name, 'range'], value=subnet, replace=False) config.delete(pool_base + ['subnet']) config.set(base + ['default-pool'], value=default_pool) # format as tag node diff --git a/src/validators/ipv4-range-mask b/src/validators/ipv4-range-mask index 7bb4539af..9373328ff 100755 --- a/src/validators/ipv4-range-mask +++ b/src/validators/ipv4-range-mask @@ -1,12 +1,5 @@ #!/bin/bash -# snippet from https://stackoverflow.com/questions/10768160/ip-address-converter -ip2dec () { - local a b c d ip=$@ - IFS=. read -r a b c d <<< "$ip" - printf '%d\n' "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))" -} - error_exit() { echo "Error: $1 is not a valid IPv4 address range or these IPs are not under /$2" exit 1 @@ -22,37 +15,12 @@ do r) range=${OPTARG} esac done -if [[ "${range}" =~ "-" ]]&&[[ ! -z ${mask} ]]; then - # This only works with real bash (<<<) - split IP addresses into array with - # hyphen as delimiter - readarray -d - -t strarr <<< ${range} - - ipaddrcheck --is-ipv4-single ${strarr[0]} - if [ $? -gt 0 ]; then - error_exit ${range} ${mask} - fi - ipaddrcheck --is-ipv4-single ${strarr[1]} +if [[ "${range}" =~ "-" ]]&&[[ ! -z ${mask} ]]; then + ipaddrcheck --range-prefix-length ${mask} --is-ipv4-range ${range} if [ $? -gt 0 ]; then error_exit ${range} ${mask} fi - - ${vyos_validators_dir}/numeric --range 0-32 ${mask} > /dev/null - if [ $? -ne 0 ]; then - error_exit ${range} ${mask} - fi - - is_in_24=$( grepcidr ${strarr[0]}"/"${mask} <(echo ${strarr[1]}) ) - if [ -z $is_in_24 ]; then - error_exit ${range} ${mask} - fi - - start=$(ip2dec ${strarr[0]}) - stop=$(ip2dec ${strarr[1]}) - if [ $start -ge $stop ]; then - error_exit ${range} ${mask} - fi - exit 0 fi |