diff options
Diffstat (limited to 'package/netifd/files/sbin/ifup')
-rwxr-xr-x | package/netifd/files/sbin/ifup | 87 |
1 files changed, 58 insertions, 29 deletions
diff --git a/package/netifd/files/sbin/ifup b/package/netifd/files/sbin/ifup index a3ff10ec5..e17b67de5 100755 --- a/package/netifd/files/sbin/ifup +++ b/package/netifd/files/sbin/ifup @@ -1,10 +1,7 @@ #!/bin/sh -case "$0" in - *ifdown) modes=down;; - *ifup) modes="down up";; - *) echo "Invalid command: $0";; -esac +ifup_all= +setup_wifi= if_call() { local interface="$1" @@ -13,34 +10,66 @@ if_call() { 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 -[[ "$1" == "-a" ]] && { +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 -ubus -S list "network.interface.$1" > /dev/null || { - echo "Interface $1 not found" - exit -} -if_call "network.interface.$1" - -grep -sq ^config /etc/config/wireless && { - local wdev - for wdev in $( - find_radio() { - local wdev wnet - config_get wdev "$1" device - config_get wnet "$1" network - [ -n "$wdev" ] && [ "$wnet" = "$2" ] && echo "$wdev" - } - - source /lib/functions.sh - config_load wireless - config_foreach find_radio wifi-iface "$1" | sort -u - ); do - /sbin/wifi up "$wdev" +if [ -n "$setup_wifi" ] && grep -q config /etc/config/wireless; then + . /etc/functions.sh + + find_related_radios() { + local wdev wnet + config_get wdev "$1" device + config_get wnet "$1" network + + if [ -n "$wdev" ] && [ "$wnet" = "$network" ]; then + append radio_devs "$wdev" "$N" + 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 |