rc.library: support ipv4 mapped addresses

This commit is contained in:
bergware
2023-07-11 13:28:10 +02:00
parent 959a7361b5
commit d8d5d79105

View File

@@ -61,22 +61,30 @@ good() {
max6() {
# ipv6 addresses in long notation
f=:ffff:
for x in $*; do
read a m < <(IFS=/; echo $x)
[[ $a == *"$f"* && $a == *'.'* ]] && b=${a#*$f} a=${a%$f*}$f:0 || b=
c=${a//[^:]/}
[[ ${a:0:1} == : ]] && a=0${a}
[[ ${a:${#a}-1} == : ]] && a=${a}0
a=${a/::/:$(for((i=1;i<=$((8-${#c}));i++)); do printf "0:"; done)}
a=$(for q in ${a//:/ }; do printf "$d%04x" "0x$q"; d=:; done)
[[ -n $b ]] && a=${a%$f*}$f$b
[[ -z $m ]] && echo $a || echo $a/$m
done
}
min6() {
# ipv6 address in short notation
f=:ffff:
[[ -n $1 ]] && read a m < <(IFS=/; echo $1) || return
a=$(for q in ${a//:/ }; do printf "$d%x" "0x$q"; d=:; done)
a=${a/$(grep -Po '(^|:)(0(:|$)){2,8}' <<< $a|sort|tail -1)/::}
[[ $a == *"$f"* && $a == *'.'* ]] && b=${a#*$f} a=${a%$f*}$f || b=
a=:$(for q in ${a//:/ }; do printf "$d%x" "0x$q"; d=:; done)
a=${a/$(grep -Po ':(0(:|$)){2,8}' <<< $a|sort|tail -1)/-}
[[ ${a:0:1} == : ]] && a=${a:1}
a=${a/-/::}
[[ -n $b ]] && a=${a%$f*}:$b
[[ -z $m ]] && echo $a || echo $a/$m
}