diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi index d653620ca2..0d26468ba2 100755 --- a/package/base-files/files/sbin/wifi +++ b/package/base-files/files/sbin/wifi @@ -72,6 +72,25 @@ start_net() {( setup_interface "$1" "$2" )} +set_wifi_up() { + local cfg="$1" + local ifname="$2" + uci set "/var/state/wireless.${cfg}.up=1" + uci set "/var/state/wireless.${cfg}.ifname=$ifname" +} + +set_wifi_down() { + local cfg="$1" + local vifs vif vifstr + config_get vifs "$cfg" vifs + for vif in $vifs; do + append vifstr "$vif" "|" + done + FILE="/var/state/wireless.$$" + grep -vE "^config_set '($vifstr)' " /var/state/wireless > "$FILE" + mv "$FILE" /var/state/wireless +} + scan_wifi() { local cfgfile="$1" config_cb() { diff --git a/package/broadcom-wl/files/lib/wifi/broadcom.sh b/package/broadcom-wl/files/lib/wifi/broadcom.sh index 3a8bebd176..61672472de 100644 --- a/package/broadcom-wl/files/lib/wifi/broadcom.sh +++ b/package/broadcom-wl/files/lib/wifi/broadcom.sh @@ -71,6 +71,7 @@ scan_broadcom() { } disable_broadcom() { + set_wifi_down "$1" wlc down ( include /lib/network @@ -197,6 +198,7 @@ enable_broadcom() { [ -z "$net_cfg" ] || { bridge="$(bridge_interface "$net_cfg")" append if_up "start_net '$ifname' '$net_cfg'" ";$N" + append if_up "set_wifi_up '$vif' '$ifname'" ";$N" } [ -z "$nasopts" ] || { eval "${vif}_ssid=\"\$ssid\"" diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index 222e2a9ddd..07a6cd78bf 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -50,6 +50,7 @@ scan_atheros() { disable_atheros() ( local device="$1" + set_wifi_down "$device" # kill all running hostapd and wpa_supplicant processes that # are running on atheros vifs for pid in `pidof hostapd wpa_supplicant`; do @@ -204,6 +205,7 @@ enable_atheros() { start_net "$ifname" "$net_cfg" } iwconfig "$ifname" essid "$ssid" + set_wifi_up "$vif" "$ifname" case "$mode" in ap) config_get_bool isolate "$vif" isolate 0