u16 trans_seq, u16 status)
{
int ret;
+#ifdef CONFIG_P2P
+ struct ieee802_11_elems elems;
+
+ if (len < 24) {
+ wpa_printf(MSG_DEBUG, "PASN: Too short Management frame");
+ return;
+ }
+
+ if (ieee802_11_parse_elems(mgmt->u.auth.variable,
+ len - offsetof(struct ieee80211_mgmt,
+ u.auth.variable),
+ &elems, 1) == ParseFailed) {
+ wpa_printf(MSG_DEBUG,
+ "PASN: Failed parsing Authentication frame");
+ return;
+ }
+
+ if ((hapd->conf->p2p & (P2P_ENABLED | P2P_GROUP_OWNER)) ==
+ (P2P_ENABLED | P2P_GROUP_OWNER) &&
+ hapd->p2p && elems.p2p2_ie && elems.p2p2_ie_len) {
+ p2p_pasn_auth_rx(hapd->p2p, mgmt, len, hapd->iface->freq);
+ return;
+ }
+#endif /* CONFIG_P2P */
if (hapd->conf->wpa != WPA_PROTO_RSN) {
wpa_printf(MSG_INFO, "PASN: RSN is not configured");
else
ssid->auth_alg |= WPA_AUTH_ALG_SAE;
- ssid->key_mgmt = WPA_KEY_MGMT_SAE;
+ ssid->key_mgmt = WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_PASN;
ssid->sae_password = os_strdup(params->sae_password);
ssid->ieee80211w = MGMT_FRAME_PROTECTION_REQUIRED;
ssid->sae_pwe = SAE_PWE_HASH_TO_ELEMENT;
}
if (p2p2) {
- ssid->key_mgmt = WPA_KEY_MGMT_SAE;
+ ssid->key_mgmt = WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_PASN;
ssid->auth_alg = WPA_AUTH_ALG_OPEN;
ssid->sae_pwe = SAE_PWE_HASH_TO_ELEMENT;
ssid->ieee80211w = MGMT_FRAME_PROTECTION_REQUIRED;