entry->network_ctx = ssid;
os_memcpy(entry->spa, wpa_s->own_addr, ETH_ALEN);
- wpa_sm_pmksa_cache_add_entry(wpa_s->wpa, entry);
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) {
+ wpa_sm_pmksa_cache_add_entry(wpa_s->wpa, entry);
+ } else {
+ os_free(wpa_s->p2p_pmksa_entry);
+ wpa_s->p2p_pmksa_entry = entry;
+ }
ssid->pmk_valid = true;
} else if (res->akmp == WPA_KEY_MGMT_SAE && res->sae_password[0]) {
ssid->auth_alg = WPA_AUTH_ALG_SAE;
entry->network_ctx = ssid;
os_memcpy(entry->spa, wpa_s->own_addr, ETH_ALEN);
- wpa_sm_pmksa_cache_add_entry(wpa_s->wpa, entry);
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) {
+ wpa_sm_pmksa_cache_add_entry(wpa_s->wpa, entry);
+ } else {
+ os_free(wpa_s->p2p_pmksa_entry);
+ wpa_s->p2p_pmksa_entry = entry;
+ }
ssid->pmk_valid = true;
}
wpa_s->current_ssid = ssid;
os_free(wpa_s->last_scan_res);
wpa_s->last_scan_res = NULL;
+#ifdef CONFIG_P2P
+ os_free(wpa_s->p2p_pmksa_entry);
+ wpa_s->p2p_pmksa_entry = NULL;
+#endif /* CONFIG_P2P */
+
#ifdef CONFIG_HS20
if (wpa_s->drv_priv)
wpa_drv_configure_frame_filters(wpa_s, 0);
wpa_supplicant_req_auth_timeout(wpa_s, timeout, 0);
}
+#ifdef CONFIG_P2P
+ if (ssid->pmk_valid && wpa_s->p2p_pmksa_entry &&
+ !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)) {
+ wpa_sm_pmksa_cache_add_entry(wpa_s->wpa,
+ wpa_s->p2p_pmksa_entry);
+ wpa_s->p2p_pmksa_entry = NULL;
+ }
+#endif /* CONFIG_P2P */
+
#ifdef CONFIG_WEP
if (wep_keys_set &&
(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC)) {
#ifdef CONFIG_P2P
struct p2p_go_neg_results *go_params;
+ struct rsn_pmksa_cache_entry *p2p_pmksa_entry;
int create_p2p_iface;
u8 pending_interface_addr[ETH_ALEN];
char pending_interface_name[100];