Root/package/hostapd/files/wpa_supplicant.sh

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

Archive Download this file



interactive