|
|
@@ -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
|