From f1d04190c5f691a07786fa79e912b62f8777080f Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Mon, 28 May 2012 03:15:02 +0000
Subject: [PATCH] base-files: introduce /lib/functions/network.sh This file
 will contain common procedures to deal with network interfaces. Initially
 provides network_get_ipaddr(), network_get_ipaddr6(), network_get_subnet()
 and network_get_subnet6() to determine the primary IP addresses or subnets of
 a given logical interface.

SVN-Revision: 31935
---
 package/base-files/Makefile                   |  2 +-
 .../base-files/files/lib/functions/network.sh | 41 +++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 package/base-files/files/lib/functions/network.sh

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index ae96ab54b8..4e9b41f0e6 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 0000000000..1b42133ba2
--- /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; }
-- 
GitLab