diff options
Diffstat (limited to 'package/mac80211/files/lib')
| -rw-r--r-- | package/mac80211/files/lib/wifi/mac80211.sh | 150 | 
1 files changed, 73 insertions, 77 deletions
diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 974fe5f99..13390b866 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -425,8 +425,7 @@ enable_mac80211() {  	for vif in $vifs; do  		config_get mode "$vif" mode  		config_get ifname "$vif" ifname -		[ ! "$mode" = "ap" ] || continue -		ifconfig "$ifname" up +		[ "$mode" = "ap" ] || ifconfig "$ifname" up  		config_get vif_txpower "$vif" txpower  		# use vif_txpower (from wifi-iface) to override txpower (from @@ -434,82 +433,79 @@ enable_mac80211() {  		txpower="${txpower:-$vif_txpower}"  		[ -z "$txpower" ] || iw dev "$ifname" set txpower fixed "${txpower%%.*}00" -		if [ ! "$mode" = "ap" ]; then -			ifconfig "$ifname" up -			case "$mode" in -				adhoc) -					config_get bssid "$vif" bssid -					config_get ssid "$vif" ssid -					config_get beacon_int "$device" beacon_int -					config_get basic_rate_list "$device" basic_rate -					config_get encryption "$vif" encryption -					config_get key "$vif" key 1 -					config_get mcast_rate "$vif" mcast_rate - -					local keyspec="" -					[ "$encryption" == "wep" ] && { -						case "$key" in -							[1234]) -								local idx -								for idx in 1 2 3 4; do -									local ikey -									config_get ikey "$vif" "key$idx" - -									[ -n "$ikey" ] && { -										ikey="$(($idx - 1)):$(prepare_key_wep "$ikey")" -										[ $idx -eq $key ] && ikey="d:$ikey" -										append keyspec "$ikey" -									} -								done -							;; -							*) append keyspec "d:0:$(prepare_key_wep "$key")" ;; -						esac -					} - -					local br brval brsub brstr -					[ -n "$basic_rate_list" ] && { -						for br in $basic_rate_list; do -							brval="$(($br / 1000))" -							brsub="$((($br / 100) % 10))" -							[ "$brsub" -gt 0 ] && brval="$brval.$brsub" -							[ -n "$brstr" ] && brstr="$brstr," -							brstr="$brstr$brval" -						done -					} - -					local mcval="" -					[ -n "$mcast_rate" ] && { -						mcval="$(($mcast_rate / 1000))" -						mcsub="$(( ($mcast_rate / 100) % 10 ))" -						[ "$mcsub" -gt 0 ] && mcval="$mcval.$mcsub" -					} - -					config_get htmode "$device" htmode -					case "$htmode" in -						HT20|HT40+|HT40-) ;; -						*) htmode= ;; +		case "$mode" in +			adhoc) +				config_get bssid "$vif" bssid +				config_get ssid "$vif" ssid +				config_get beacon_int "$device" beacon_int +				config_get basic_rate_list "$device" basic_rate +				config_get encryption "$vif" encryption +				config_get key "$vif" key 1 +				config_get mcast_rate "$vif" mcast_rate + +				local keyspec="" +				[ "$encryption" == "wep" ] && { +					case "$key" in +						[1234]) +							local idx +							for idx in 1 2 3 4; do +								local ikey +								config_get ikey "$vif" "key$idx" + +								[ -n "$ikey" ] && { +									ikey="$(($idx - 1)):$(prepare_key_wep "$ikey")" +									[ $idx -eq $key ] && ikey="d:$ikey" +									append keyspec "$ikey" +								} +							done +						;; +						*) append keyspec "d:0:$(prepare_key_wep "$key")" ;;  					esac - -					iw dev "$ifname" ibss join "$ssid" $freq $htmode \ -						${fixed:+fixed-freq} $bssid \ -						${beacon_int:+beacon-interval $beacon_int} \ -						${brstr:+basic-rates $brstr} \ -						${mcval:+mcast-rate $mcval} \ -						${keyspec:+keys $keyspec} -				;; -				sta) -					if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then -						wpa_supplicant_setup_vif "$vif" nl80211 "${hostapd_ctrl:+-H $hostapd_ctrl}" || { -							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 -			mac80211_start_vif "$vif" "$ifname" -		fi +				} + +				local br brval brsub brstr +				[ -n "$basic_rate_list" ] && { +					for br in $basic_rate_list; do +						brval="$(($br / 1000))" +						brsub="$((($br / 100) % 10))" +						[ "$brsub" -gt 0 ] && brval="$brval.$brsub" +						[ -n "$brstr" ] && brstr="$brstr," +						brstr="$brstr$brval" +					done +				} + +				local mcval="" +				[ -n "$mcast_rate" ] && { +					mcval="$(($mcast_rate / 1000))" +					mcsub="$(( ($mcast_rate / 100) % 10 ))" +					[ "$mcsub" -gt 0 ] && mcval="$mcval.$mcsub" +				} + +				config_get htmode "$device" htmode +				case "$htmode" in +					HT20|HT40+|HT40-) ;; +					*) htmode= ;; +				esac + +				iw dev "$ifname" ibss join "$ssid" $freq $htmode \ +					${fixed:+fixed-freq} $bssid \ +					${beacon_int:+beacon-interval $beacon_int} \ +					${brstr:+basic-rates $brstr} \ +					${mcval:+mcast-rate $mcval} \ +					${keyspec:+keys $keyspec} +			;; +			sta) +				if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then +					wpa_supplicant_setup_vif "$vif" nl80211 "${hostapd_ctrl:+-H $hostapd_ctrl}" || { +						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 +		[ "$mode" = "ap" ] || mac80211_start_vif "$vif" "$ifname"  	done  }  | 
