diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-06-17 11:50:50 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-06-17 11:50:50 +0000 |
commit | 57a7257569833c23c7516be9944025036a495e48 (patch) | |
tree | 07af7c7b2adf96e75b0ec5200576ba85bc9a2495 /package/base-files/files | |
parent | 70d9295138f53d5bd0405d9d5ae50ef7158dc1af (diff) | |
download | upstream-57a7257569833c23c7516be9944025036a495e48.tar.gz upstream-57a7257569833c23c7516be9944025036a495e48.tar.bz2 upstream-57a7257569833c23c7516be9944025036a495e48.zip |
base-files: implement network_get_gateway(), network_get_gateway6(), network_find_wan() and network_find_wan6() in /lib/functions/network.sh
SVN-Revision: 32397
Diffstat (limited to 'package/base-files/files')
-rw-r--r-- | package/base-files/files/lib/functions/network.sh | 59 |
1 files changed, 59 insertions, 0 deletions
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" |