diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-02-19 01:07:21 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-02-19 01:07:21 +0000 | 
| commit | c0a4b957c5cf75412560ed86daa66529c461eb14 (patch) | |
| tree | 95bdb592937c5abbfb89131f331be9a1ffea1ebb /package/mac80211/files/lib | |
| parent | b52c3994118b9681e5854f811cc50850c22f6ad7 (diff) | |
mac80211: always use wpa_supplicant for client connections (patch by Stijn Tintel)
Since client mode in mac80211is unreliable without using wpa_supplicant,
it would be better to enable wpa_supplicant by default.
With this patch, wpa_supplicant will always be used for mac80211-based
drivers in client mode. This will break client mode for images that
don't include wpa_supplicant or wpad, so maybe I need to add a check
somewhere to see if wpa_supplicant is available, and show the user a
warning if he tries client mode without wpa_supplicant. Suggestions on
where to add this check are welcome.
Tested with ath5k in client mode on open and wpa2-psk network, and
tested on my ath9k based AP as well to make sure it doesn't break AP mode.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19718 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/files/lib')
| -rw-r--r-- | package/mac80211/files/lib/wifi/mac80211.sh | 118 | 
1 files changed, 21 insertions, 97 deletions
diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 27e234d83..257277a28 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -234,7 +234,6 @@ enable_mac80211() {  		}  		config_set "$vif" ifname "$ifname" -		config_get enc "$vif" encryption  		config_get mode "$vif" mode  		config_get ssid "$vif" ssid @@ -288,60 +287,19 @@ enable_mac80211() {  		[ "$mode" = "ap" ] || ifconfig "$ifname" hw ether "$vif_mac"  		config_set "$vif" macaddr "$vif_mac" -		# Valid values are: -		# wpa / wep / none -		#  		# !! ap !!  		#  		# ALL ap functionality will be passed to hostapd  		# -		# !! mesh / adhoc / station !! -		# none -> NO encryption +		# !! station !!  		# -		# wep + keymgmt = '' -> we use iw to connect to the -		# network. +		# ALL station functionality will be passed to wpa_supplicant  		# -		# wep + keymgmt = 'NONE' -> wpa_supplicant will be -		# configured to handle the wep connection  		if [ ! "$mode" = "ap" ]; then  			# We attempt to set the channel for all interfaces, although  			# mac80211 may not support it or the driver might not yet  			# for ap mode this is handled by hostapd  			[ -n "$fixed" -a -n "$channel" ] && iw dev "$ifname" set channel "$channel" - -			local key keystring - -			case "$enc" in -				*none*) -					config_get keymgmt "$vif" keymgmt -				;; -				*wep*) -					config_get keymgmt "$vif" keymgmt -					if [ -z "$keymgmt" ]; then -						config_get key "$vif" key -						key="${key:-1}" -						case "$key" in -							[1234]) -								for idx in 1 2 3 4; do -									local zidx -									zidx=$(($idx - 1)) -									config_get ckey "$vif" "key${idx}" -									if [ -n "$ckey" ]; then -										[ $idx -eq $key ] && zidx="d:${zidx}" -										append keystring "${zidx}:$(prepare_key_wep "$ckey")" -									fi -								done -								;; -							*) -								keystring="d:0:$(prepare_key_wep "$key")" -								;; -						esac -					fi -				;; -				*psk*|*wpa*) -					config_get key "$vif" key -				;; -			esac  		fi  		# txpower is not yet implemented in iw @@ -363,60 +321,26 @@ enable_mac80211() {  		ifconfig "$ifname" up -		[ "$mode" = "ap" ] || mac80211_start_vif "$vif" "$ifname" - -		case "$mode" in -			adhoc) -				config_get bssid "$vif" bssid -				iw dev "$ifname" ibss join "$ssid" $freq ${fixed:+fixed-freq} $bssid -			;; -			sta|mesh) -				config_get bssid "$vif" bssid -				case "$enc" in -					*wep*) -						if [ -z "$keymgmt" ]; then -							[ -n "$keystring" ] && -								iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid key $keystring -						else -							if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then -								wpa_supplicant_setup_vif "$vif" wext || { -									echo "enable_mac80211($device): Failed to set up wpa_supplicant for interface $ifname" >&2 -									# make sure this wifi interface won't accidentally stay open without encryption -									ifconfig "$ifname" down -									continue -								} -							fi -						fi -					;; -					*wpa*|*psk*) -						config_get key "$vif" key -						if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then -							wpa_supplicant_setup_vif "$vif" wext || { -								echo "enable_mac80211($device): Failed to set up wpa_supplicant for interface $ifname" >&2 -								# make sure this wifi interface won't accidentally stay open without encryption -								ifconfig "$ifname" down -								continue -							} -						fi -					;; -					*) -						if [ -z "$keymgmt" ]; then -							iw dev "$ifname" connect "$ssid" ${fixed:+$freq} $bssid -						else -							if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then -								wpa_supplicant_setup_vif "$vif" wext || { -									echo "enable_mac80211($device): Failed to set up wpa_supplicant for interface $ifname" >&2 -									# make sure this wifi interface won't accidentally stay open without encryption -									ifconfig "$ifname" down -									continue -								} -							fi -						fi -					;; -				esac +		if [ ! "$mode" = "ap" ]; then +			mac80211_start_vif "$vif" "$ifname" -			;; -		esac +			case "$mode" in +				adhoc) +					config_get bssid "$vif" bssid +					iw dev "$ifname" ibss join "$ssid" $freq ${fixed:+fixed-freq} $bssid +				;; +				sta) +					if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then +						wpa_supplicant_setup_vif "$vif" wext || { +							echo "enable_mac80211($device): Failed to set up wpa_supplicant for interface $ifname" >&2 +							# make sure this wifi interface won't accidentally stay open without encryption +							ifconfig "$ifname" down +							continue +						} +					fi +				;; +			esac +		fi  	done  	local start_hostapd=  | 
