aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/broadcom-wl
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2013-11-11 22:02:45 +0000
committerHauke Mehrtens <hauke@openwrt.org>2013-11-11 22:02:45 +0000
commitdc0ff183163bd7c8173e811b55d49466f7650487 (patch)
treeaaaa0efe521fdf24c1dec62704c63b2ddf51489f /package/kernel/broadcom-wl
parentbe7a5ba55465b6cbf08dacfa99fdbdbab500d1c1 (diff)
downloadmaster-187ad058-dc0ff183163bd7c8173e811b55d49466f7650487.tar.gz
master-187ad058-dc0ff183163bd7c8173e811b55d49466f7650487.tar.bz2
master-187ad058-dc0ff183163bd7c8173e811b55d49466f7650487.zip
broadcom-wl: improve device cleanup
Move all device cleanup to "disable_broadcom". Signed-off-by: Nathan Hintz <nlhintz@hotmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38758 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/kernel/broadcom-wl')
-rw-r--r--package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh36
1 files changed, 21 insertions, 15 deletions
diff --git a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
index 892a415b6f..9416f77b23 100644
--- a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
+++ b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
@@ -50,12 +50,6 @@ scan_broadcom() {
done
config_set "$device" vifs "${adhoc_if:-$sta_if $ap_if $mon_if}"
- ifdown="down"
- for vif in 0 1 2 3; do
- append ifdown "vif $vif" "$N"
- append ifdown "enabled 0" "$N"
- done
-
ap=1
infra=1
if [ "$_c" -gt 1 ]; then
@@ -96,7 +90,6 @@ scan_broadcom() {
disable_broadcom() {
local device="$1"
set_wifi_down "$device"
- wlc ifname "$device" down
(
include /lib/network
@@ -104,12 +97,28 @@ disable_broadcom() {
[ -e $pid_file ] && start-stop-daemon -K -q -s SIGKILL -p $pid_file && rm $pid_file
# make sure the interfaces are down and removed from all bridges
- local dev
- for dev in $device ${device}-1 ${device}-2 ${device}-3; do
- ifconfig "$dev" down 2>/dev/null >/dev/null && {
- unbridge "$dev"
- }
+ local dev ifname
+ for dev in /sys/class/net/wds${device##wl}-* /sys/class/net/${device}-* /sys/class/net/${device}; do
+ if [ -e "$dev" ]; then
+ ifname=${dev##/sys/class/net/}
+ ifconfig "$ifname" down
+ unbridge "$ifname"
+ fi
+ done
+
+ # make sure all of the devices are disabled in the driver
+ local ifdown=
+ local vif
+ append ifdown "down" "$N"
+ append ifdown "wds none" "$N"
+ for vif in 3 2 1 0; do
+ append ifdown "vif $vif" "$N"
+ append ifdown "enabled 0" "$N"
done
+
+ wlc ifname "$device" stdin <<EOF
+$ifdown
+EOF
)
true
}
@@ -362,8 +371,6 @@ enable_broadcom() {
_c=$(($_c + 1))
done
wlc ifname "$device" stdin <<EOF
-$ifdown
-
${macaddr:+bssid $macaddr}
${macaddr:+cur_etheraddr $macaddr}
band ${band:-0}
@@ -387,7 +394,6 @@ monitor ${monitor:-0}
radio ${radio:-1}
macfilter ${macfilter:-0}
maclist ${maclist:-none}
-wds none
${wds:+wds $wds}
country ${country:-US}
${channel:+channel $channel}