2011-10-21 09:47:49 +08:00
|
|
|
#!/bin/sh
|
|
|
|
|
2012-05-24 05:49:28 +08:00
|
|
|
ifup_all=
|
|
|
|
setup_wifi=
|
2011-10-21 09:47:49 +08:00
|
|
|
|
|
|
|
if_call() {
|
|
|
|
local interface="$1"
|
|
|
|
for mode in $modes; do
|
2013-01-29 22:40:04 +08:00
|
|
|
ubus call network.interface $mode "{ \"interface\" : \"$interface\" }"
|
2011-10-21 09:47:49 +08:00
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2012-05-24 05:49:28 +08:00
|
|
|
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
|
|
|
|
|
2012-01-23 05:14:26 +08:00
|
|
|
[ "$modes" = "down up" ] && ubus call network reload
|
2012-05-24 05:49:28 +08:00
|
|
|
if [ -n "$ifup_all" ]; then
|
2011-10-21 09:47:49 +08:00
|
|
|
for interface in `ubus -S list 'network.interface.*'`; do
|
2013-01-29 22:40:04 +08:00
|
|
|
if_call "${interface##network.interface.}"
|
2011-10-21 09:47:49 +08:00
|
|
|
done
|
2012-05-24 05:49:28 +08:00
|
|
|
[ -n "$setup_wifi" ] && /sbin/wifi up
|
2011-10-21 09:47:49 +08:00
|
|
|
exit
|
2012-05-24 05:49:28 +08:00
|
|
|
else
|
|
|
|
ubus -S list "network.interface.$1" > /dev/null || {
|
|
|
|
echo "Interface $1 not found"
|
|
|
|
exit
|
|
|
|
}
|
2013-01-29 22:40:04 +08:00
|
|
|
if_call "$1"
|
2012-05-24 05:49:28 +08:00
|
|
|
fi
|
2011-10-21 09:47:49 +08:00
|
|
|
|
2012-09-15 20:50:55 +08:00
|
|
|
if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then
|
2012-06-06 00:04:23 +08:00
|
|
|
. /lib/functions.sh
|
2012-05-24 05:49:28 +08:00
|
|
|
|
|
|
|
find_related_radios() {
|
|
|
|
local wdev wnet
|
|
|
|
config_get wdev "$1" device
|
|
|
|
config_get wnet "$1" network
|
|
|
|
|
2012-09-15 20:50:55 +08:00
|
|
|
if [ -n "$wdev" ]; then
|
|
|
|
for wnet in $wnet; do
|
|
|
|
if [ "$wnet" = "$network" ]; then
|
|
|
|
append radio_devs "$wdev" "$N"
|
|
|
|
fi
|
|
|
|
done
|
2012-05-24 05:49:28 +08:00
|
|
|
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"
|
2012-05-24 05:26:20 +08:00
|
|
|
done
|
2012-05-24 05:49:28 +08:00
|
|
|
fi
|