diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-05-28 03:15:02 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-05-28 03:15:02 +0000 |
commit | f1d04190c5f691a07786fa79e912b62f8777080f (patch) | |
tree | fd84444f856c9ca2ce1289e203bfc3beedc7fac4 /package/base-files/files/lib | |
parent | 367e4b3994543e40437e4e73305af197c21c1055 (diff) | |
download | mtk-20170518-f1d04190c5f691a07786fa79e912b62f8777080f.zip mtk-20170518-f1d04190c5f691a07786fa79e912b62f8777080f.tar.gz mtk-20170518-f1d04190c5f691a07786fa79e912b62f8777080f.tar.bz2 |
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
Diffstat (limited to 'package/base-files/files/lib')
-rw-r--r-- | package/base-files/files/lib/functions/network.sh | 41 |
1 files changed, 41 insertions, 0 deletions
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 0000000..1b42133 --- /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; } |