base-files: network.sh: properly report local IPv6 addresses
[openwrt/openwrt.git] / package / base-files / files / lib / functions / network.sh
index 1b0c717204d69ec0f89dd02282be6f279a673b6e..4b61fe33f2f3ba6db8599d4b6564c4562283e125 100644 (file)
@@ -29,18 +29,9 @@ network_get_ipaddr() {
 # 1: destination variable
 # 2: interface
 network_get_ipaddr6() {
-       local __addr
-
-       if __network_ifstatus "__addr" "$2" "['ipv6-address','ipv6-prefix-assignment'][0].address"; then
-               case "$__addr" in
-                       *:)     export "$1=${__addr}1" ;;
-                       *)      export "$1=${__addr}" ;;
-               esac
-               return 0
-       fi
-
-       unset $1
-       return 1
+       __network_ifstatus "$1" "$2" "['ipv6-address'][0].address" || \
+               __network_ifstatus "$1" "$2" "['ipv6-prefix-assignment'][0]['local-address'].address" || \
+               return 1
 }
 
 # determine first IPv4 subnet of given logical interface
@@ -78,14 +69,19 @@ network_get_ipaddrs6() {
        local __addr
        local __list=""
 
-       if __network_ifstatus "__addr" "$2" "['ipv6-address','ipv6-prefix-assignment'][*].address"; then
+       if __network_ifstatus "__addr" "$2" "['ipv6-address'][*].address"; then
                for __addr in $__addr; do
-                       case "$__addr" in
-                               *:) __list="${__list:+$__list }${__addr}1" ;;
-                               *)  __list="${__list:+$__list }${__addr}"  ;;
-                       esac
+                       __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