base-files: add 'isup' to the wifi script
authorAndre Heider <a.heider@gmail.com>
Wed, 2 Nov 2022 07:50:20 +0000 (08:50 +0100)
committerChristian Marangi <ansuelsmth@gmail.com>
Wed, 12 Apr 2023 17:49:30 +0000 (19:49 +0200)
This is a silent command that allows easy wifi up/down automation for
scripts.

It takes one or multiple devices as arguments (or all if none are passed),
and the exit code indicates if any of those is not up.

E.g.:
wifi isup && echo "all wifi devices are up"
wifi isup radio0 || echo "this wifi is down"

Signed-off-by: Andre Heider <a.heider@gmail.com>
package/base-files/files/sbin/wifi

index 29585389dfd67b4759d9c91ab38451f80b44c050..a3d3206ee732dc3ecc5345f7484ff67751944fcd 100755 (executable)
@@ -6,7 +6,7 @@
 
 usage() {
        cat <<EOF
-Usage: $0 [config|up|down|reconf|reload|status]
+Usage: $0 [config|up|down|reconf|reload|status|isup]
 enables (default), disables or configures devices not yet configured.
 EOF
        exit 1
@@ -21,6 +21,22 @@ ubus_wifi_cmd() {
        ubus call network.wireless "$cmd" "$(json_dump)"
 }
 
+wifi_isup() {
+       local dev="$1"
+
+       json_load "$(ubus_wifi_cmd "status" "$dev")"
+       json_get_keys devices
+
+       for device in $devices; do
+               json_select "$device"
+                       json_get_var up up
+                       [ $up -eq 0 ] && return 1
+               json_select ..
+       done
+
+       return 0
+}
+
 find_net_config() {(
        local vif="$1"
        local cfg
@@ -245,6 +261,7 @@ case "$1" in
        detect) wifi_detect_notice ;;
        config) wifi_config ;;
        status) ubus_wifi_cmd "status" "$2";;
+       isup) wifi_isup "$2"; exit $?;;
        reload) wifi_reload "$2";;
        reload_legacy) wifi_reload_legacy "$2";;
        --help|help) usage;;