mac80211: always use wpa_supplicant for client connections (patch by Stijn Tintel)
[openwrt.git] / package / hostapd / files / wpa_supplicant.sh
1 wpa_supplicant_setup_vif() {
2 local vif="$1"
3 local driver="$2"
4 local key="$key"
5
6 # wpa_supplicant should use wext for mac80211 cards
7 [ "$driver" = "mac80211" ] && driver='wext'
8
9 # make sure we have the encryption type and the psk
10 [ -n "$enc" ] || {
11 config_get enc "$vif" encryption
12 }
13 [ -n "$key" ] || {
14 config_get key "$vif" key
15 }
16
17 case "$enc" in
18 *none*)
19 key_mgmt='NONE'
20 ;;
21 *wep*)
22 key_mgmt='NONE'
23 config_get key "$vif" key
24 key="${key:-1}"
25 case "$key" in
26 [1234])
27 for idx in 1 2 3 4; do
28 local zidx
29 zidx=$(($idx - 1))
30 config_get ckey "$vif" "key${idx}"
31 [ -n "$ckey" ] && \
32 append "wep_key${zidx}" "wep_key${zidx}=$(prepare_key_wep "$ckey")"
33 done
34 wep_tx_keyidx="wep_tx_keyidx=$((key - 1))"
35 ;;
36 *)
37 wep_key0="wep_key0=$(prepare_key_wep "$key")"
38 wep_tx_keyidx="wep_tx_keyidx=0"
39 ;;
40 esac
41 ;;
42 *psk*)
43 key_mgmt='WPA-PSK'
44 config_get_bool usepassphrase "$vif" passphrase 1
45 case "$enc" in
46 *psk2*)
47 proto='proto=RSN'
48 if [ "$usepassphrase" = "1" ]; then
49 passphrase="psk=\"${key}\""
50 else
51 passphrase="psk=${key}"
52 fi
53 ;;
54 *psk*)
55 proto='proto=WPA'
56 if [ "$usepassphrase" = "1" ]; then
57 passphrase="psk=\"${key}\""
58 else
59 passphrase="psk=${key}"
60 fi
61 ;;
62 esac
63 ;;
64 *wpa*|*8021x*)
65 proto='proto=WPA2'
66 key_mgmt='WPA-EAP'
67 config_get ca_cert "$vif" ca_cert
68 ca_cert=${ca_cert:+"ca_cert=\"$ca_cert\""}
69 case "$eap_type" in
70 tls)
71 pairwise='pairwise=CCMP'
72 group='group=CCMP'
73 config_get priv_key "$vif" priv_key
74 config_get priv_key_pwd "$vif" priv_key_pwd
75 priv_key="private_key=\"$priv_key\""
76 priv_key_pwd="private_key_passwd=\"$priv_key_pwd\""
77 ;;
78 peap|ttls)
79 config_get auth "$vif" auth
80 config_get identity "$vif" identity
81 config_get password "$vif" password
82 phase2="phase2=\"auth=${auth:-MSCHAPV2}\""
83 identity="identity=\"$identity\""
84 password="password=\"$password\""
85 ;;
86 esac
87 eap_type="eap=$(echo $eap_type | tr 'a-z' 'A-Z')"
88 ;;
89 esac
90 config_get ifname "$vif" ifname
91 config_get bridge "$vif" bridge
92 config_get ssid "$vif" ssid
93 config_get bssid "$vif" bssid
94 bssid=${bssid:+"bssid=$bssid"}
95 rm -rf /var/run/wpa_supplicant-$ifname
96 cat > /var/run/wpa_supplicant-$ifname.conf <<EOF
97 ctrl_interface=/var/run/wpa_supplicant-$ifname
98 network={
99 scan_ssid=1
100 ssid="$ssid"
101 $bssid
102 key_mgmt=$key_mgmt
103 $proto
104 $passphrase
105 $pairwise
106 $group
107 $eap_type
108 $ca_cert
109 $priv_key
110 $priv_key_pwd
111 $phase2
112 $identity
113 $password
114 $wep_key0
115 $wep_key1
116 $wep_key2
117 $wep_key3
118 $wep_tx_keyidx
119 }
120 EOF
121 [ -z "$proto" -a "$key_mgmt" != "NONE" ] || \
122 wpa_supplicant ${bridge:+ -b $bridge} -B -P "/var/run/wifi-${ifname}.pid" -D ${driver:-wext} -i "$ifname" -c /var/run/wpa_supplicant-$ifname.conf
123 }
This page took 0.050733 seconds and 5 git commands to generate.