#!/bin/sh ifup_all= setup_wifi= if_call() { local interface="$1" for mode in $modes; do ubus call $interface $mode done } case "$0" in *ifdown) modes=down;; *ifup) modes="down up" setup_wifi=1 ;; *) echo "Invalid command: $0";; esac while :; do case "$1" in -a) ifup_all=1 shift ;; -w) setup_wifi= shift ;; *) break ;; esac done [ "$modes" = "down up" ] && ubus call network reload if [ -n "$ifup_all" ]; then for interface in `ubus -S list 'network.interface.*'`; do if_call "$interface" done [ -n "$setup_wifi" ] && /sbin/wifi up exit else ubus -S list "network.interface.$1" > /dev/null || { echo "Interface $1 not found" exit } if_call "network.interface.$1" fi if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then . /lib/functions.sh find_related_radios() { local wdev wnet config_get wdev "$1" device config_get wnet "$1" network if [ -n "$wdev" ]; then for wnet in $wnet; do if [ "$wnet" = "$network" ]; then append radio_devs "$wdev" "$N" fi done fi } local radio_devs local network="$1" config_load wireless config_foreach find_related_radios wifi-iface local dev for dev in $(echo "$radio_devs" | sort -u); do /sbin/wifi up "$dev" done fi