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