+ done
+ fi
+
+ unset "$1"
+ return 1
+}
+
+# determine first IPv6 prefix of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_prefix6() {
+ __network_ifstatus "$1" "$2" "['ipv6-prefix'][0]['address','mask']" "/"
+}
+
+# determine all IPv4 addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs() {
+ __network_ifstatus "$1" "$2" "['ipv4-address'][*].address"
+}
+
+# determine all IPv6 addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs6() {
+ local __addr
+ local __list=""
+
+ if __network_ifstatus "__addr" "$2" "['ipv6-address'][*].address"; then
+ for __addr in $__addr; do
+ __list="${__list:+$__list }${__addr}"
+ done
+ fi
+
+ if __network_ifstatus "__addr" "$2" "['ipv6-prefix-assignment'][*]['local-address'].address"; then
+ for __addr in $__addr; do
+ __list="${__list:+$__list }${__addr}"
+ done
+ fi
+
+ if [ -n "$__list" ]; then
+ export "$1=$__list"
+ return 0
+ fi
+
+ unset "$1"
+ return 1
+}
+
+# determine all IP addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs_all() {
+ local __addr __addr6
+
+ network_get_ipaddrs __addr "$2"
+ network_get_ipaddrs6 __addr6 "$2"
+
+ if [ -n "$__addr" -o -n "$__addr6" ]; then
+ export "$1=${__addr:+$__addr }$__addr6"
+ return 0
+ fi
+
+ unset "$1"
+ return 1
+}
+
+# determine all IPv4 subnets of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnets() {
+ __network_ifstatus "$1" "$2" "['ipv4-address'][*]['address','mask']" "/ "
+}
+
+# determine all IPv6 subnets of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnets6() {
+ local __addr __mask
+ local __list=""
+
+ if __network_ifstatus "__addr" "$2" "['ipv6-address'][*]['address','mask']" "/ "; then
+ for __addr in $__addr; do
+ __list="${__list:+$__list }${__addr}"
+ done
+ fi
+
+ if __network_ifstatus "__addr" "$2" "['ipv6-prefix-assignment'][*]['local-address'].address" && \
+ __network_ifstatus "__mask" "$2" "['ipv6-prefix-assignment'][*].mask"; then
+ for __addr in $__addr; do
+ __list="${__list:+$__list }${__addr}/${__mask%% *}"
+ __mask="${__mask#* }"
+ done