From 994c1fce91dfa45bc0aea43d77d83566dc9acc1b Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 11 Oct 2009 00:36:23 +0000
Subject: mac80211: upgrade to latest compat-wireless, fix ad-hoc interface
 setup

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18023 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/mac80211/files/lib/wifi/mac80211.sh | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

(limited to 'package/mac80211/files')

diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh
index a7b3005dd..1a8272aca 100644
--- a/package/mac80211/files/lib/wifi/mac80211.sh
+++ b/package/mac80211/files/lib/wifi/mac80211.sh
@@ -66,7 +66,11 @@ disable_mac80211() (
 
 	return 0
 )
-
+get_freq() {
+	local phy="$1"
+	local channel="$2"
+	iw "$phy" info | grep -E -m1 "(\* ${channel:-....} MHz${channel:+|\\[$channel\\]})" | grep MHz | awk '{print $2}'
+}
 enable_mac80211() {
 	local device="$1"
 	config_get channel "$device" channel
@@ -76,6 +80,9 @@ enable_mac80211() {
 	config_get phy "$device" phy
 	local i=0
 
+	# convert channel to frequency
+	local freq="$(get_freq "$phy" "$channel")"
+
 	wifi_fixup_hwmode "$device" "g"
 	for vif in $vifs; do
 		while [ -d "/sys/class/net/wlan$i" ]; do
@@ -134,7 +141,7 @@ enable_mac80211() {
 
 		# We attempt to set teh channel for all interfaces, although
 		# mac80211 may not support it or the driver might not yet
-		iw dev "$ifname" set channel "$channel" 
+		[ -z "$channel" ] || iw dev "$ifname" set channel "$channel" 
 
 		local key keystring
 
@@ -213,7 +220,11 @@ enable_mac80211() {
 					}
 				fi
 			;;
-			sta|mesh|adhoc)
+			adhoc)
+				config_get bssid "$vif" bssid
+				iw dev "$ifname" ibss join "$ssid" ${freq:+$freq fixed-freq} $bssid
+			;;
+			sta|mesh)
 				# Fixup... sometimes you have to scan to get beaconing going
 				iw dev "$ifname" scan &> /dev/null
 				case "$enc" in												 
-- 
cgit v1.2.3