summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package/base-files/Makefile2
-rw-r--r--package/base-files/files/lib/functions/network.sh59
2 files changed, 60 insertions, 1 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 1f968e08a3..2759e43a56 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 8b06e8cd41..7475b00cba 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"