2022-10-17 08:40:09 +00:00
|
|
|
#!/bin/bash
|
2022-02-21 10:56:57 +00:00
|
|
|
|
2023-05-25 23:01:41 +00:00
|
|
|
function _mask_ip_digit() {
|
2023-05-24 07:06:59 +00:00
|
|
|
if [[ ${1} -ge 8 ]]; then
|
2022-02-21 10:56:57 +00:00
|
|
|
MASK=255
|
2023-05-24 07:06:59 +00:00
|
|
|
elif [[ ${1} -le 0 ]]; then
|
2022-02-21 10:56:57 +00:00
|
|
|
MASK=0
|
|
|
|
else
|
|
|
|
VALUES=(0 128 192 224 240 248 252 254 255)
|
|
|
|
MASK=${VALUES[${1}]}
|
|
|
|
fi
|
|
|
|
|
|
|
|
local DVAL=${2}
|
|
|
|
((DVAL&=MASK))
|
|
|
|
|
|
|
|
echo "${DVAL}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Transforms a specific IP with CIDR suffix
|
|
|
|
# like 1.2.3.4/16 to subnet with cidr suffix
|
|
|
|
# like 1.2.0.0/16.
|
|
|
|
# Assumes correct IP and subnet are provided.
|
2023-05-25 23:01:41 +00:00
|
|
|
function _sanitize_ipv4_to_subnet_cidr() {
|
2022-02-21 10:56:57 +00:00
|
|
|
local DIGIT_PREFIX_LENGTH="${1#*/}"
|
|
|
|
|
|
|
|
declare -a MASKED_DIGITS DIGITS
|
|
|
|
IFS='.' ; read -r -a DIGITS < <(echo "${1%%/*}") ; unset IFS
|
|
|
|
|
|
|
|
for ((i = 0 ; i < 4 ; i++))
|
|
|
|
do
|
|
|
|
MASKED_DIGITS[i]=$(_mask_ip_digit "${DIGIT_PREFIX_LENGTH}" "${DIGITS[i]}")
|
|
|
|
DIGIT_PREFIX_LENGTH=$((DIGIT_PREFIX_LENGTH - 8))
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "${MASKED_DIGITS[0]}.${MASKED_DIGITS[1]}.${MASKED_DIGITS[2]}.${MASKED_DIGITS[3]}/${1#*/}"
|
|
|
|
}
|