keep track of the wifi interface state in /var/state/wireless
keep track of the wifi interface state in /var/state/wireless

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8108 3c298f89-4303-0410-b956-a3cf2f4a3e73

--- a/package/base-files/files/sbin/wifi
+++ b/package/base-files/files/sbin/wifi
@@ -72,6 +72,25 @@
 	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() {

--- a/package/broadcom-wl/files/lib/wifi/broadcom.sh
+++ b/package/broadcom-wl/files/lib/wifi/broadcom.sh
@@ -71,6 +71,7 @@
 }
 
 disable_broadcom() {
+	set_wifi_down "$1"
 	wlc down
 	(
 		include /lib/network
@@ -197,6 +198,7 @@
 		[ -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\""

--- a/package/madwifi/files/lib/wifi/madwifi.sh
+++ b/package/madwifi/files/lib/wifi/madwifi.sh
@@ -50,6 +50,7 @@
 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 @@
 			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

comments