summaryrefslogtreecommitdiff
path: root/src/validators/ipv4-range-mask
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-12-04 19:46:56 +0100
committerGitHub <noreply@github.com>2023-12-04 19:46:56 +0100
commit8d3e287d028d3fc92256cc86988c06ca5301c7c1 (patch)
treeb4e9d1a41a8f86f00aa84fc27795fb8b56aadf9a /src/validators/ipv4-range-mask
parentf26d788008fe187e00a8afe59ff4bfdace51866d (diff)
parent422eb463d413da812eabc28706e507a9910d7b53 (diff)
downloadvyos-1x-8d3e287d028d3fc92256cc86988c06ca5301c7c1.tar.gz
vyos-1x-8d3e287d028d3fc92256cc86988c06ca5301c7c1.zip
Merge pull request #2501 from aapostoliuk/T5688-current
accel-ppp: T5688: Standardized pool configuration in accel-ppp
Diffstat (limited to 'src/validators/ipv4-range-mask')
-rwxr-xr-xsrc/validators/ipv4-range-mask59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/validators/ipv4-range-mask b/src/validators/ipv4-range-mask
new file mode 100755
index 000000000..7bb4539af
--- /dev/null
+++ b/src/validators/ipv4-range-mask
@@ -0,0 +1,59 @@
+#!/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
+}
+
+# Check if address range is under the same netmask
+# -m - mask
+# -r - IP range in format x.x.x.x-y.y.y.y
+while getopts m:r: flag
+do
+ case "${flag}" in
+ m) mask=${OPTARG};;
+ 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 [ $? -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
+
+error_exit ${range} ${mask}