From df4363b607629710240dcaccf4e3f0bc6fae93ae Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 8 Jun 2017 12:02:36 +0200 Subject: [PATCH] base-files: network.sh: properly report local IPv6 addresses 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 --- package/base-files/Makefile | 2 +- .../base-files/files/lib/functions/network.sh | 30 ++++++++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 78c3dc9390..ac3fe2f52b 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -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/ diff --git a/package/base-files/files/lib/functions/network.sh b/package/base-files/files/lib/functions/network.sh index 1b0c717204..4b61fe33f2 100644 --- a/package/base-files/files/lib/functions/network.sh +++ b/package/base-files/files/lib/functions/network.sh @@ -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