base-files: network.sh: properly report local IPv6 addresses
authorJo-Philipp Wich <jo@mein.io>
Thu, 8 Jun 2017 10:02:36 +0000 (12:02 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 8 Jun 2017 10:06:01 +0000 (12:06 +0200)
Rework the network_get_ipaddr6() and network_get_ipaddrs6() functions to
fetch the effective local IPv6 address of delegated prefix from the
"local-address" field instead of naively hardcoding ":1" as static suffix.

Fixes FS#829.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
package/base-files/Makefile
package/base-files/files/lib/functions/network.sh

index 912449c85a9763df0328067979a39538ec1906e6..c669ff0ac67a462afdfa35c0e3c4a1ac7ade296b 100644 (file)
@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/version.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=172
+PKG_RELEASE:=173
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
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