[package] base-files: introduce /lib/functions/network.sh
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 28 May 2012 03:15:02 +0000 (03:15 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 28 May 2012 03:15:02 +0000 (03:15 +0000)
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
package/base-files/files/lib/functions/network.sh [new file with mode: 0644]

index ae96ab54b82428beca110e9cd266a0695864b748..4e9b41f0e6fc3f61c80a99ce623fe8fe1b341ff2 100644 (file)
@@ -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 (file)
index 0000000..1b42133
--- /dev/null
@@ -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; }