kernel: fq_codel: dont reinit flow state
[openwrt/svn-archive/archive.git] / package / hostapd / files / wpa_supplicant.sh
index 9c475a8fb194522ba36c4846af37f573094b6499..928243e42509156f6400d88985fe9bd7936a4bdd 100644 (file)
@@ -4,11 +4,11 @@ wpa_supplicant_setup_vif() {
        local key="$key"
        local options="$3"
        local freq=""
+       local ht="$5"
+       local ap_scan=""
+       local scan_ssid="1"
        [ -n "$4" ] && freq="frequency=$4"
 
-       # wpa_supplicant should use wext for mac80211 cards
-       [ "$driver" = "mac80211" ] && driver='wext'
-
        # make sure we have the encryption type and the psk
        [ -n "$enc" ] || {
                config_get enc "$vif" encryption
@@ -33,7 +33,11 @@ wpa_supplicant_setup_vif() {
                echo "wpa_supplicant_setup_vif($ifname): Refusing to bridge $mode mode interface"
                return 1
        }
-       [ "$mode" = "adhoc" ] && modestr="mode=1"
+       [ "$mode" = "adhoc" ] && {
+               modestr="mode=1"
+               scan_ssid="0"
+               ap_scan="ap_scan=2"
+       }
 
        key_mgmt='NONE'
        case "$enc" in
@@ -60,12 +64,16 @@ wpa_supplicant_setup_vif() {
                ;;
                *psk*)
                        key_mgmt='WPA-PSK'
-                       [ "$mode" = "adhoc" -a "$driver" != "nl80211" ] && key_mgmt='WPA-NONE'
-                       config_get_bool usepassphrase "$vif" usepassphrase 1
-                       if [ "$usepassphrase" = "1" ]; then
-                               passphrase="psk=\"${key}\""
-                       else
+                       # if you want to use PSK with a non-nl80211 driver you
+                       # have to use WPA-NONE and wext driver for wpa_s
+                       [ "$mode" = "adhoc" -a "$driver" != "nl80211" ] && {
+                               key_mgmt='WPA-NONE'
+                               driver='wext'
+                       }
+                       if [ ${#key} -eq 64 ]; then
                                passphrase="psk=${key}"
+                       else
+                               passphrase="psk=\"${key}\""
                        fi
                        case "$enc" in
                                *psk2*)
@@ -116,22 +124,54 @@ wpa_supplicant_setup_vif() {
                ;;
        esac
 
+       local fixed_freq bssid1 beacon_interval brates mrate
        config_get ifname "$vif" ifname
        config_get bridge "$vif" bridge
        config_get ssid "$vif" ssid
        config_get bssid "$vif" bssid
-       bssid=${bssid:+"bssid=$bssid"}
+       bssid1=${bssid:+"bssid=$bssid"}
+       beacon_interval=${beacon_int:+"beacon_interval=$beacon_int"}
+
+       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
+               brates=${basic_rate_list:+"rates=$brstr"}
+       }
+
+       local mcval=""
+       [ -n "$mcast_rate" ] && {
+               mcval="$(($mcast_rate / 1000))"
+               mcsub="$(( ($mcast_rate / 100) % 10 ))"
+               [ "$mcsub" -gt 0 ] && mcval="$mcval.$mcsub"
+               mrate=${mcast_rate:+"mcast_rate=$mcval"}
+       }
+
+       local ht_str
+       [ -n "$ht" ] && ht_str="htmode=$ht"
+
        rm -rf /var/run/wpa_supplicant-$ifname
        cat > /var/run/wpa_supplicant-$ifname.conf <<EOF
 ctrl_interface=/var/run/wpa_supplicant-$ifname
+$ap_scan
 network={
        $modestr
-       scan_ssid=1
+       scan_ssid=$scan_ssid
        ssid="$ssid"
-       $bssid
+       $bssid1
        key_mgmt=$key_mgmt
        $proto
        $freq
+       ${fixed:+"fixed_freq=1"}
+       $beacon_interval
+       $brates
+       $mrate
+       $ht_str
        $ieee80211w
        $passphrase
        $pairwise
@@ -151,6 +191,9 @@ network={
        $wep_tx_keyidx
 }
 EOF
-       [ -z "$proto" -a "$key_mgmt" != "NONE" ] || \
+       if [ -n "$proto" -o "$key_mgmt" == "NONE" ]; then
                wpa_supplicant ${bridge:+ -b $bridge} -B -P "/var/run/wifi-${ifname}.pid" -D ${driver:-wext} -i "$ifname" -c /var/run/wpa_supplicant-$ifname.conf $options
+       else
+               return 0
+       fi
 }