|
|
@@ -9,24 +9,34 @@ find_iface_address()
|
|
|
local ipaddr="$2"
|
|
|
local prefix="$3"
|
|
|
|
|
|
+ local idx=1
|
|
|
local tmp="$(ubus call network.interface."$iface" status 2>/dev/null)"
|
|
|
|
|
|
json_load "${tmp:-{}}"
|
|
|
json_get_type tmp address
|
|
|
|
|
|
if [ "$tmp" = array ]; then
|
|
|
-
|
|
|
json_select address
|
|
|
- json_get_type tmp 1
|
|
|
-
|
|
|
- if [ "$tmp" = object ]; then
|
|
|
|
|
|
- json_select 1
|
|
|
- [ -n "$ipaddr" ] && json_get_var "$ipaddr" address
|
|
|
- [ -n "$prefix" ] && json_get_var "$prefix" mask
|
|
|
-
|
|
|
- fi
|
|
|
+ while true; do
|
|
|
+ json_get_type tmp $idx
|
|
|
+ [ "$tmp" = object ] || break
|
|
|
+
|
|
|
+ json_select $((idx++))
|
|
|
+ json_get_var tmp address
|
|
|
+
|
|
|
+ case "$tmp" in
|
|
|
+ *:*) json_select .. ;;
|
|
|
+ *)
|
|
|
+ [ -n "$ipaddr" ] && json_get_var $ipaddr address
|
|
|
+ [ -n "$prefix" ] && json_get_var $prefix mask
|
|
|
+ return 0
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
fi
|
|
|
+
|
|
|
+ return 1
|
|
|
}
|
|
|
|
|
|
if [ "$ACTION" = "add" ] && [ "$INTERFACE" = "wan" ]; then
|