static int wpa_driver_ps3_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_wext_data *drv = priv; int ret, value; wpa_printf(MSG_DEBUG, "%s: <-", __func__); /* clear BSSID */ if (!params->bssid && wpa_driver_wext_set_bssid(drv, NULL) < 0) ret = -1; if (wpa_driver_wext_set_mode(drv, params->mode) < 0) ret = -1; if (params->wpa_ie == NULL || params->wpa_ie_len == 0) value = IW_AUTH_WPA_VERSION_DISABLED; else if (params->wpa_ie[0] == WLAN_EID_RSN) value = IW_AUTH_WPA_VERSION_WPA2; else value = IW_AUTH_WPA_VERSION_WPA; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_VERSION, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->pairwise_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_PAIRWISE, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->group_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_GROUP, value) < 0) ret = -1; value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_KEY_MGMT, value) < 0) ret = -1; /* set selected BSSID */ if (params->bssid && wpa_driver_wext_set_bssid(drv, params->bssid) < 0) ret = -1; switch (params->group_suite) { case CIPHER_NONE: ret = 0; break; case CIPHER_WEP40: case CIPHER_WEP104: ret = wpa_driver_ps3_set_wep_keys(drv, params); break; case CIPHER_TKIP: case CIPHER_CCMP: ret = wpa_driver_ps3_set_wpa_key(drv, params); break; } /* start to associate */ ret = wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len); wpa_printf(MSG_DEBUG, "%s: ->", __func__); return ret; }
static int wpa_driver_wext_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_wext_data *drv = priv; int ret = 0; int allow_unencrypted_eapol; int value; wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); if (!params->bssid && wpa_driver_wext_set_bssid(drv, NULL) < 0) ret = -1; if (wpa_driver_wext_set_mode(drv, params->mode) < 0) ret = -1; /* TODO: should consider getting wpa version and cipher/key_mgmt suites * from configuration, not from here, where only the selected suite is * available */ if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0) ret = -1; if (params->wpa_ie == NULL || params->wpa_ie_len == 0) value = IW_AUTH_WPA_VERSION_DISABLED; else if (params->wpa_ie[0] == RSN_INFO_ELEM) value = IW_AUTH_WPA_VERSION_WPA2; else value = IW_AUTH_WPA_VERSION_WPA; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_VERSION, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->pairwise_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_PAIRWISE, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->group_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_GROUP, value) < 0) ret = -1; value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_KEY_MGMT, value) < 0) ret = -1; value = params->key_mgmt_suite != KEY_MGMT_NONE; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_PRIVACY_INVOKED, value) < 0) ret = -1; /* Allow unencrypted EAPOL messages even if pairwise keys are set when * not using WPA. IEEE 802.1X specifies that these frames are not * encrypted, but WPA encrypts them when pairwise keys are in use. */ if (params->key_mgmt_suite == KEY_MGMT_802_1X || params->key_mgmt_suite == KEY_MGMT_PSK) allow_unencrypted_eapol = 0; else allow_unencrypted_eapol = 1; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_RX_UNENCRYPTED_EAPOL, allow_unencrypted_eapol) < 0) ret = -1; if (params->freq && wpa_driver_wext_set_freq(drv, params->freq) < 0) ret = -1; if (wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0) ret = -1; if (params->bssid && wpa_driver_wext_set_bssid(drv, params->bssid) < 0) ret = -1; return ret; }