diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/base-files/Makefile | 2 | ||||
| -rw-r--r-- | package/base-files/files/lib/functions/network.sh | 41 | 
2 files changed, 42 insertions, 1 deletions
| diff --git a/package/base-files/Makefile b/package/base-files/Makefile index ae96ab54b..4e9b41f0e 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:=107 +PKG_RELEASE:=108  PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/  PKG_BUILD_DEPENDS:=opkg/host diff --git a/package/base-files/files/lib/functions/network.sh b/package/base-files/files/lib/functions/network.sh new file mode 100644 index 000000000..1b42133ba --- /dev/null +++ b/package/base-files/files/lib/functions/network.sh @@ -0,0 +1,41 @@ +. /usr/share/libubox/jshn.sh + +__network_ipaddr() +{ +	local __var="$1" +	local __iface="$2" +	local __family="$3" +	local __prefix="${4:-0}" + +	local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)" + +	json_load "${__tmp:-{}}" +	json_get_type __tmp "ipv${__family}_address" + +	if [ "$__tmp" = array ]; then + +		json_select "ipv${__family}_address" +		json_get_type __tmp 1 + +		if [ "$__tmp" = object ]; then + +			json_select 1 +			json_get_var $__var address + +			[ $__prefix -gt 0 ] && { +				json_get_var __tmp mask +				eval "export -- \"$__var=\${$__var}/$__tmp\"" +			} + +			return 0 +		fi +	fi + +	return 1 +} + +network_get_ipaddr()  { __network_ipaddr "$1" "$2" 4 0; } +network_get_ipaddr6() { __network_ipaddr "$1" "$2" 6 0; } + +network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; } +network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; } | 
