struct hostapd_config *conf)
{
struct hostapd_bss_config *bss = &conf->bss[0];
- int j;
+ int j, pairwise;
for (j = 0; wpa_drivers[j]; j++) {
if (os_strcmp("wpa_supplicant", wpa_drivers[j]->name) == 0) {
bss->wpa_pairwise = ssid->pairwise_cipher;
if (ssid->passphrase) {
bss->ssid.wpa_passphrase = os_strdup(ssid->passphrase);
- if (hostapd_setup_wpa_psk(bss))
- return -1;
} else if (ssid->psk_set) {
os_free(bss->ssid.wpa_psk);
bss->ssid.wpa_psk = os_zalloc(sizeof(struct hostapd_wpa_psk));
bss->ssid.wpa_psk->group = 1;
}
+ /* Select group cipher based on the enabled pairwise cipher suites */
+ pairwise = 0;
+ if (bss->wpa & 1)
+ pairwise |= bss->wpa_pairwise;
+ if (bss->wpa & 2) {
+ if (bss->rsn_pairwise == 0)
+ bss->rsn_pairwise = bss->wpa_pairwise;
+ pairwise |= bss->rsn_pairwise;
+ }
+ if (pairwise & WPA_CIPHER_TKIP)
+ bss->wpa_group = WPA_CIPHER_TKIP;
+ else
+ bss->wpa_group = WPA_CIPHER_CCMP;
+
+ if (bss->wpa && bss->ieee802_1x)
+ bss->ssid.security_policy = SECURITY_WPA;
+ else if (bss->wpa)
+ bss->ssid.security_policy = SECURITY_WPA_PSK;
+ else if (bss->ieee802_1x) {
+ bss->ssid.security_policy = SECURITY_IEEE_802_1X;
+ bss->ssid.wep.default_len = bss->default_wep_key_len;
+ } else if (bss->ssid.wep.keys_set)
+ bss->ssid.security_policy = SECURITY_STATIC_WEP;
+ else
+ bss->ssid.security_policy = SECURITY_PLAINTEXT;
+
return 0;
}