[package] base-files: implement network_defer_device() and network_ready_device(...
[openwrt-working-2016/.git] / package / base-files / files / lib / functions / network.sh
index 1b42133ba2379b5eca81e6b9615ed3a01df200b8..8b06e8cd41c00bfe70e61c88e2fd6561ee97bf05 100644 (file)
@@ -39,3 +39,42 @@ 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; }
+
+
+__network_device()
+{
+       local __var="$1"
+       local __iface="$2"
+       local __field="$3"
+
+       local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)"
+       [ -n "$__tmp" ] || return 1
+
+       json_load "$__tmp"
+       json_get_var "$__var" "$__field"
+}
+
+network_is_up()
+{
+       local __up
+       __network_device __up "$1" up && [ $__up -eq 1 ]
+}
+
+network_get_device()  { __network_device "$1" "$2" l3_device; }
+network_get_physdev() { __network_device "$1" "$2" device;    }
+
+
+__network_defer()
+{
+       local __device="$1"
+       local __defer="$2"
+
+       json_init
+       json_add_string name "$__device"
+       json_add_boolean defer "$__defer"
+
+       ubus call network.device set_state "$(json_dump)" 2>/dev/null
+}
+
+network_defer_device() { __network_defer "$1" 1; }
+network_ready_device() { __network_defer "$1" 0; }