From f6a09e69e9cb12ed7b4d06584def1a379bf610ea Mon Sep 17 00:00:00 2001
From: jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 17 Jun 2012 11:50:50 +0000
Subject: [package] base-files: implement network_get_gateway(),
 network_get_gateway6(), network_find_wan() and network_find_wan6() in
 /lib/functions/network.sh

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32397 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/base-files/Makefile                       |  2 +-
 package/base-files/files/lib/functions/network.sh | 59 +++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)

(limited to 'package/base-files')

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 1f968e08a..2759e43a5 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:=109
+PKG_RELEASE:=110
 
 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
index 8b06e8cd4..7475b00cb 100644
--- a/package/base-files/files/lib/functions/network.sh
+++ b/package/base-files/files/lib/functions/network.sh
@@ -41,6 +41,65 @@ network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; }
 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
 
 
+__network_gateway()
+{
+	local __var="$1"
+	local __iface="$2"
+	local __family="$3"
+
+	local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)"
+	local __idx=1
+
+	json_load "${__tmp:-{}}"
+
+	if json_get_type __tmp route && [ "$__tmp" = array ]; then
+
+		json_select route
+
+		while json_get_type __tmp "$__idx" && [ "$__tmp" = object ]; do
+
+			json_select "$((__idx++))"
+			json_get_var __tmp target
+
+			case "${__family}/${__tmp}" in
+				4/0.0.0.0|6/::)
+					json_get_var "$__var" nexthop
+					return $?
+				;;
+			esac
+
+			json_select ".."
+
+		done
+	fi
+
+	return 1
+}
+
+network_get_gateway()  { __network_gateway "$1" "$2" 4; }
+network_get_gateway6() { __network_gateway "$1" "$2" 6; }
+
+
+__network_wan() {
+	local __var="$1"
+	local __family="$2"
+	local __iface
+
+	for __iface in $(ubus list | sed -ne 's/^network\.interface\.//p'); do
+		if __network_gateway "$__var" "$__iface" "$__family"; then
+			eval "export -- \"$__var=$__iface\""
+			return 0
+		fi
+	done
+
+	eval "export -- \"$__var=\""
+	return 1
+}
+
+network_find_wan()  { __network_wan "$1" 4; }
+network_find_wan6() { __network_wan "$1" 6; }
+
+
 __network_device()
 {
 	local __var="$1"
-- 
cgit v1.2.3