Lines Matching +full:tx +full:- +full:termination +full:- +full:fix

3  * Copyright (c) 2003-2024, Jouni Malinen <j@w1.fi>
76 "Copyright (c) 2003-2024, Jouni Malinen <j@w1.fi> and contributors";
107 "3. Neither the name(s) of the above-listed copyright holder(s) nor the\n"
144 if (ssid->wep_key_len[i] == 0) in wpa_set_wep_keys()
148 wpa_drv_set_key(wpa_s, -1, WPA_ALG_WEP, NULL, in wpa_set_wep_keys()
149 i, i == ssid->wep_tx_keyidx, NULL, 0, in wpa_set_wep_keys()
150 ssid->wep_key[i], ssid->wep_key_len[i], in wpa_set_wep_keys()
151 i == ssid->wep_tx_keyidx ? in wpa_set_wep_keys()
170 /* IBSS/WPA-None uses only one key (Group) for both receiving and in wpa_supplicant_set_wpa_none_key()
173 if (ssid->mode != WPAS_MODE_IBSS) { in wpa_supplicant_set_wpa_none_key()
175 "IBSS/ad-hoc) for WPA-None", ssid->mode); in wpa_supplicant_set_wpa_none_key()
176 return -1; in wpa_supplicant_set_wpa_none_key()
179 if (!ssid->psk_set) { in wpa_supplicant_set_wpa_none_key()
181 "WPA-None"); in wpa_supplicant_set_wpa_none_key()
182 return -1; in wpa_supplicant_set_wpa_none_key()
185 switch (wpa_s->group_cipher) { in wpa_supplicant_set_wpa_none_key()
187 os_memcpy(key, ssid->psk, 16); in wpa_supplicant_set_wpa_none_key()
192 os_memcpy(key, ssid->psk, 16); in wpa_supplicant_set_wpa_none_key()
197 /* WPA-None uses the same Michael MIC key for both TX and RX */ in wpa_supplicant_set_wpa_none_key()
198 os_memcpy(key, ssid->psk, 16 + 8); in wpa_supplicant_set_wpa_none_key()
199 os_memcpy(key + 16 + 8, ssid->psk + 16, 8); in wpa_supplicant_set_wpa_none_key()
205 "WPA-None", wpa_s->group_cipher); in wpa_supplicant_set_wpa_none_key()
206 return -1; in wpa_supplicant_set_wpa_none_key()
209 /* TODO: should actually remember the previously used seq#, both for TX in wpa_supplicant_set_wpa_none_key()
212 ret = wpa_drv_set_key(wpa_s, -1, alg, NULL, 0, 1, seq, 6, key, keylen, in wpa_supplicant_set_wpa_none_key()
222 const u8 *bssid = wpa_s->bssid; in wpa_supplicant_timeout()
223 if (!is_zero_ether_addr(wpa_s->pending_bssid) && in wpa_supplicant_timeout()
224 (wpa_s->wpa_state == WPA_AUTHENTICATING || in wpa_supplicant_timeout()
225 wpa_s->wpa_state == WPA_ASSOCIATING)) in wpa_supplicant_timeout()
226 bssid = wpa_s->pending_bssid; in wpa_supplicant_timeout()
230 wpa_sm_notify_disassoc(wpa_s->wpa); in wpa_supplicant_timeout()
232 wpa_s->reassociate = 1; in wpa_supplicant_timeout()
243 * wpa_supplicant_req_auth_timeout - Schedule a timeout for authentication
254 if (wpa_s->conf->ap_scan == 0 && in wpa_supplicant_req_auth_timeout()
255 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_WIRED)) in wpa_supplicant_req_auth_timeout()
261 wpa_s->last_auth_timeout_sec = sec; in wpa_supplicant_req_auth_timeout()
267 * wpas_auth_timeout_restart - Restart and change timeout for authentication
273 int new_sec = wpa_s->last_auth_timeout_sec + sec_diff; in wpas_auth_timeout_restart()
286 * wpa_supplicant_cancel_auth_timeout - Cancel authentication timeout
297 wpa_bssid_ignore_del(wpa_s, wpa_s->bssid); in wpa_supplicant_cancel_auth_timeout()
298 os_free(wpa_s->last_con_fail_realm); in wpa_supplicant_cancel_auth_timeout()
299 wpa_s->last_con_fail_realm = NULL; in wpa_supplicant_cancel_auth_timeout()
300 wpa_s->last_con_fail_realm_len = 0; in wpa_supplicant_cancel_auth_timeout()
305 * wpa_supplicant_initiate_eapol - Configure EAPOL state machine
315 struct wpa_ssid *ssid = wpa_s->current_ssid; in wpa_supplicant_initiate_eapol()
318 if (ssid->mode == WPAS_MODE_IBSS && in wpa_supplicant_initiate_eapol()
319 wpa_s->key_mgmt != WPA_KEY_MGMT_NONE && in wpa_supplicant_initiate_eapol()
320 wpa_s->key_mgmt != WPA_KEY_MGMT_WPA_NONE) { in wpa_supplicant_initiate_eapol()
322 * RSN IBSS authentication is per-STA and we can disable the in wpa_supplicant_initiate_eapol()
323 * per-BSSID EAPOL authentication. in wpa_supplicant_initiate_eapol()
325 eapol_sm_notify_portControl(wpa_s->eapol, ForceAuthorized); in wpa_supplicant_initiate_eapol()
326 eapol_sm_notify_eap_success(wpa_s->eapol, true); in wpa_supplicant_initiate_eapol()
327 eapol_sm_notify_eap_fail(wpa_s->eapol, false); in wpa_supplicant_initiate_eapol()
332 eapol_sm_notify_eap_success(wpa_s->eapol, false); in wpa_supplicant_initiate_eapol()
333 eapol_sm_notify_eap_fail(wpa_s->eapol, false); in wpa_supplicant_initiate_eapol()
335 if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE || in wpa_supplicant_initiate_eapol()
336 wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE) in wpa_supplicant_initiate_eapol()
337 eapol_sm_notify_portControl(wpa_s->eapol, ForceAuthorized); in wpa_supplicant_initiate_eapol()
339 eapol_sm_notify_portControl(wpa_s->eapol, Auto); in wpa_supplicant_initiate_eapol()
342 if (wpa_s->key_mgmt == WPA_KEY_MGMT_IEEE8021X_NO_WPA) { in wpa_supplicant_initiate_eapol()
345 if (ssid->eapol_flags & EAPOL_FLAG_REQUIRE_KEY_UNICAST) { in wpa_supplicant_initiate_eapol()
348 if (ssid->eapol_flags & EAPOL_FLAG_REQUIRE_KEY_BROADCAST) { in wpa_supplicant_initiate_eapol()
353 if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_WIRED) in wpa_supplicant_initiate_eapol()
356 eapol_conf.fast_reauth = wpa_s->conf->fast_reauth; in wpa_supplicant_initiate_eapol()
357 eapol_conf.workaround = ssid->eap_workaround; in wpa_supplicant_initiate_eapol()
359 !wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt) && in wpa_supplicant_initiate_eapol()
360 wpa_s->key_mgmt != WPA_KEY_MGMT_IEEE8021X_NO_WPA && in wpa_supplicant_initiate_eapol()
361 wpa_s->key_mgmt != WPA_KEY_MGMT_WPS; in wpa_supplicant_initiate_eapol()
362 eapol_conf.external_sim = wpa_s->conf->external_sim; in wpa_supplicant_initiate_eapol()
365 if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPS) { in wpa_supplicant_initiate_eapol()
367 if (wpa_s->current_bss) { in wpa_supplicant_initiate_eapol()
369 ie = wpa_bss_get_vendor_ie_multi(wpa_s->current_bss, in wpa_supplicant_initiate_eapol()
381 eapol_sm_notify_config(wpa_s->eapol, &ssid->eap, &eapol_conf); in wpa_supplicant_initiate_eapol()
384 if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE && ssid->mka_psk_set) in wpa_supplicant_initiate_eapol()
394 * wpa_supplicant_set_non_wpa_policy - Set WPA parameters to non-WPA mode
410 if (ssid->key_mgmt & WPA_KEY_MGMT_WPS) in wpa_supplicant_set_non_wpa_policy()
411 wpa_s->key_mgmt = WPA_KEY_MGMT_WPS; in wpa_supplicant_set_non_wpa_policy()
412 else if (ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) in wpa_supplicant_set_non_wpa_policy()
413 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X_NO_WPA; in wpa_supplicant_set_non_wpa_policy()
415 wpa_s->key_mgmt = WPA_KEY_MGMT_NONE; in wpa_supplicant_set_non_wpa_policy()
416 wpa_sm_set_ap_wpa_ie(wpa_s->wpa, NULL, 0); in wpa_supplicant_set_non_wpa_policy()
417 wpa_sm_set_ap_rsn_ie(wpa_s->wpa, NULL, 0); in wpa_supplicant_set_non_wpa_policy()
418 wpa_sm_set_ap_rsnxe(wpa_s->wpa, NULL, 0); in wpa_supplicant_set_non_wpa_policy()
419 wpa_sm_set_assoc_wpa_ie(wpa_s->wpa, NULL, 0); in wpa_supplicant_set_non_wpa_policy()
420 wpa_sm_set_assoc_rsnxe(wpa_s->wpa, NULL, 0); in wpa_supplicant_set_non_wpa_policy()
421 wpa_s->rsnxe_len = 0; in wpa_supplicant_set_non_wpa_policy()
422 wpa_s->pairwise_cipher = WPA_CIPHER_NONE; in wpa_supplicant_set_non_wpa_policy()
423 wpa_s->group_cipher = WPA_CIPHER_NONE; in wpa_supplicant_set_non_wpa_policy()
424 wpa_s->mgmt_group_cipher = 0; in wpa_supplicant_set_non_wpa_policy()
428 if (ssid->wep_key_len[i] > 5) { in wpa_supplicant_set_non_wpa_policy()
429 wpa_s->pairwise_cipher = WPA_CIPHER_WEP104; in wpa_supplicant_set_non_wpa_policy()
430 wpa_s->group_cipher = WPA_CIPHER_WEP104; in wpa_supplicant_set_non_wpa_policy()
432 } else if (ssid->wep_key_len[i] > 0) { in wpa_supplicant_set_non_wpa_policy()
433 wpa_s->pairwise_cipher = WPA_CIPHER_WEP40; in wpa_supplicant_set_non_wpa_policy()
434 wpa_s->group_cipher = WPA_CIPHER_WEP40; in wpa_supplicant_set_non_wpa_policy()
440 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_ENABLED, 0); in wpa_supplicant_set_non_wpa_policy()
441 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_KEY_MGMT, wpa_s->key_mgmt); in wpa_supplicant_set_non_wpa_policy()
442 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_PAIRWISE, in wpa_supplicant_set_non_wpa_policy()
443 wpa_s->pairwise_cipher); in wpa_supplicant_set_non_wpa_policy()
444 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_GROUP, wpa_s->group_cipher); in wpa_supplicant_set_non_wpa_policy()
445 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_MGMT_GROUP, in wpa_supplicant_set_non_wpa_policy()
446 wpa_s->mgmt_group_cipher); in wpa_supplicant_set_non_wpa_policy()
447 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_SSID_PROTECTION, 0); in wpa_supplicant_set_non_wpa_policy()
449 pmksa_cache_clear_current(wpa_s->wpa); in wpa_supplicant_set_non_wpa_policy()
451 wpa_sm_set_mlo_params(wpa_s->wpa, &mlo); in wpa_supplicant_set_non_wpa_policy()
458 if (wpa_s->hw.modes == NULL) in free_hw_features()
461 for (i = 0; i < wpa_s->hw.num_modes; i++) { in free_hw_features()
462 os_free(wpa_s->hw.modes[i].channels); in free_hw_features()
463 os_free(wpa_s->hw.modes[i].rates); in free_hw_features()
466 os_free(wpa_s->hw.modes); in free_hw_features()
467 wpa_s->hw.modes = NULL; in free_hw_features()
475 dl_list_del(&bss->list); in remove_bss_tmp_disallowed_entry()
484 dl_list_for_each_safe(bss, prev, &wpa_s->bss_tmp_disallowed, in free_bss_tmp_disallowed()
494 while ((req = dl_list_first(&wpa_s->fils_hlp_req, struct fils_hlp_req, in wpas_flush_fils_hlp_req()
496 dl_list_del(&req->list); in wpas_flush_fils_hlp_req()
497 wpabuf_free(req->pkt); in wpas_flush_fils_hlp_req()
507 if (wpa_s->wpa_state != WPA_INTERFACE_DISABLED) in wpas_clear_disabled_interface()
519 while ((dso = dl_list_first(&wpa_s->drv_signal_override, in wpas_clear_driver_signal_override()
521 dl_list_del(&dso->list); in wpas_clear_driver_signal_override()
534 scard_deinit(wpa_s->scard); in wpa_supplicant_cleanup()
535 wpa_s->scard = NULL; in wpa_supplicant_cleanup()
536 wpa_sm_set_scard_ctx(wpa_s->wpa, NULL); in wpa_supplicant_cleanup()
537 eapol_sm_register_scard_ctx(wpa_s->eapol, NULL); in wpa_supplicant_cleanup()
538 l2_packet_deinit(wpa_s->l2); in wpa_supplicant_cleanup()
539 wpa_s->l2 = NULL; in wpa_supplicant_cleanup()
540 if (wpa_s->l2_br) { in wpa_supplicant_cleanup()
541 l2_packet_deinit(wpa_s->l2_br); in wpa_supplicant_cleanup()
542 wpa_s->l2_br = NULL; in wpa_supplicant_cleanup()
545 l2_packet_deinit(wpa_s->l2_test); in wpa_supplicant_cleanup()
546 wpa_s->l2_test = NULL; in wpa_supplicant_cleanup()
547 os_free(wpa_s->get_pref_freq_list_override); in wpa_supplicant_cleanup()
548 wpa_s->get_pref_freq_list_override = NULL; in wpa_supplicant_cleanup()
549 wpabuf_free(wpa_s->last_assoc_req_wpa_ie); in wpa_supplicant_cleanup()
550 wpa_s->last_assoc_req_wpa_ie = NULL; in wpa_supplicant_cleanup()
551 os_free(wpa_s->extra_sae_rejected_groups); in wpa_supplicant_cleanup()
552 wpa_s->extra_sae_rejected_groups = NULL; in wpa_supplicant_cleanup()
553 wpabuf_free(wpa_s->rsne_override_eapol); in wpa_supplicant_cleanup()
554 wpa_s->rsne_override_eapol = NULL; in wpa_supplicant_cleanup()
555 wpabuf_free(wpa_s->rsnxe_override_assoc); in wpa_supplicant_cleanup()
556 wpa_s->rsnxe_override_assoc = NULL; in wpa_supplicant_cleanup()
557 wpabuf_free(wpa_s->rsnxe_override_eapol); in wpa_supplicant_cleanup()
558 wpa_s->rsnxe_override_eapol = NULL; in wpa_supplicant_cleanup()
562 if (wpa_s->conf != NULL) { in wpa_supplicant_cleanup()
564 for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) in wpa_supplicant_cleanup()
568 os_free(wpa_s->confname); in wpa_supplicant_cleanup()
569 wpa_s->confname = NULL; in wpa_supplicant_cleanup()
571 os_free(wpa_s->confanother); in wpa_supplicant_cleanup()
572 wpa_s->confanother = NULL; in wpa_supplicant_cleanup()
574 os_free(wpa_s->last_con_fail_realm); in wpa_supplicant_cleanup()
575 wpa_s->last_con_fail_realm = NULL; in wpa_supplicant_cleanup()
576 wpa_s->last_con_fail_realm_len = 0; in wpa_supplicant_cleanup()
578 wpa_sm_set_eapol(wpa_s->wpa, NULL); in wpa_supplicant_cleanup()
579 eapol_sm_deinit(wpa_s->eapol); in wpa_supplicant_cleanup()
580 wpa_s->eapol = NULL; in wpa_supplicant_cleanup()
582 rsn_preauth_deinit(wpa_s->wpa); in wpa_supplicant_cleanup()
585 wpa_tdls_deinit(wpa_s->wpa); in wpa_supplicant_cleanup()
591 pmksa_candidate_free(wpa_s->wpa); in wpa_supplicant_cleanup()
592 ptksa_cache_deinit(wpa_s->ptksa); in wpa_supplicant_cleanup()
593 wpa_s->ptksa = NULL; in wpa_supplicant_cleanup()
594 wpa_sm_deinit(wpa_s->wpa); in wpa_supplicant_cleanup()
595 wpa_s->wpa = NULL; in wpa_supplicant_cleanup()
619 wpabuf_free(wpa_s->pending_eapol_rx); in wpa_supplicant_cleanup()
620 wpa_s->pending_eapol_rx = NULL; in wpa_supplicant_cleanup()
623 ibss_rsn_deinit(wpa_s->ibss_rsn); in wpa_supplicant_cleanup()
624 wpa_s->ibss_rsn = NULL; in wpa_supplicant_cleanup()
641 os_free(wpa_s->next_scan_freqs); in wpa_supplicant_cleanup()
642 wpa_s->next_scan_freqs = NULL; in wpa_supplicant_cleanup()
644 os_free(wpa_s->manual_scan_freqs); in wpa_supplicant_cleanup()
645 wpa_s->manual_scan_freqs = NULL; in wpa_supplicant_cleanup()
646 os_free(wpa_s->select_network_scan_freqs); in wpa_supplicant_cleanup()
647 wpa_s->select_network_scan_freqs = NULL; in wpa_supplicant_cleanup()
649 os_free(wpa_s->manual_sched_scan_freqs); in wpa_supplicant_cleanup()
650 wpa_s->manual_sched_scan_freqs = NULL; in wpa_supplicant_cleanup()
655 * Need to remove any pending gas-query radio work before the in wpa_supplicant_cleanup()
658 * to cancel such pending radio works and once the pending gas-query in wpa_supplicant_cleanup()
662 if (wpa_s->radio) in wpa_supplicant_cleanup()
663 radio_remove_works(wpa_s, "gas-query", 0); in wpa_supplicant_cleanup()
664 gas_query_deinit(wpa_s->gas); in wpa_supplicant_cleanup()
665 wpa_s->gas = NULL; in wpa_supplicant_cleanup()
666 gas_server_deinit(wpa_s->gas_server); in wpa_supplicant_cleanup()
667 wpa_s->gas_server = NULL; in wpa_supplicant_cleanup()
673 os_free(wpa_s->bssid_filter); in wpa_supplicant_cleanup()
674 wpa_s->bssid_filter = NULL; in wpa_supplicant_cleanup()
676 os_free(wpa_s->disallow_aps_bssid); in wpa_supplicant_cleanup()
677 wpa_s->disallow_aps_bssid = NULL; in wpa_supplicant_cleanup()
678 os_free(wpa_s->disallow_aps_ssid); in wpa_supplicant_cleanup()
679 wpa_s->disallow_aps_ssid = NULL; in wpa_supplicant_cleanup()
684 ext_password_deinit(wpa_s->ext_pw); in wpa_supplicant_cleanup()
685 wpa_s->ext_pw = NULL; in wpa_supplicant_cleanup()
687 wpabuf_free(wpa_s->last_gas_resp); in wpa_supplicant_cleanup()
688 wpa_s->last_gas_resp = NULL; in wpa_supplicant_cleanup()
689 wpabuf_free(wpa_s->prev_gas_resp); in wpa_supplicant_cleanup()
690 wpa_s->prev_gas_resp = NULL; in wpa_supplicant_cleanup()
692 os_free(wpa_s->last_scan_res); in wpa_supplicant_cleanup()
693 wpa_s->last_scan_res = NULL; in wpa_supplicant_cleanup()
696 if (wpa_s->drv_priv) in wpa_supplicant_cleanup()
702 wpabuf_free(wpa_s->vendor_elem[i]); in wpa_supplicant_cleanup()
703 wpa_s->vendor_elem[i] = NULL; in wpa_supplicant_cleanup()
710 wpa_s->sched_scan_plans_num = 0; in wpa_supplicant_cleanup()
711 os_free(wpa_s->sched_scan_plans); in wpa_supplicant_cleanup()
712 wpa_s->sched_scan_plans = NULL; in wpa_supplicant_cleanup()
715 wpa_s->non_pref_chan_num = 0; in wpa_supplicant_cleanup()
716 os_free(wpa_s->non_pref_chan); in wpa_supplicant_cleanup()
717 wpa_s->non_pref_chan = NULL; in wpa_supplicant_cleanup()
722 wpabuf_free(wpa_s->lci); in wpa_supplicant_cleanup()
723 wpa_s->lci = NULL; in wpa_supplicant_cleanup()
733 while ((entry = dl_list_last(&wpa_s->mesh_external_pmksa_cache, in wpa_supplicant_cleanup()
736 dl_list_del(&entry->list); in wpa_supplicant_cleanup()
737 os_free(entry->pmksa_cache); in wpa_supplicant_cleanup()
746 wpabuf_free(wpa_s->ric_ies); in wpa_supplicant_cleanup()
747 wpa_s->ric_ies = NULL; in wpa_supplicant_cleanup()
751 dpp_global_deinit(wpa_s->dpp); in wpa_supplicant_cleanup()
752 wpa_s->dpp = NULL; in wpa_supplicant_cleanup()
768 os_free(wpa_s->owe_trans_scan_freq); in wpa_supplicant_cleanup()
769 wpa_s->owe_trans_scan_freq = NULL; in wpa_supplicant_cleanup()
775 * wpa_clear_keys - Clear keys configured for the driver
786 /* MLME-DELETEKEYS.request */ in wpa_clear_keys()
788 if (wpa_s->keys_cleared & BIT(i)) in wpa_clear_keys()
790 wpa_drv_set_key(wpa_s, -1, WPA_ALG_NONE, NULL, i, 0, NULL, 0, in wpa_clear_keys()
794 if (~wpa_s->keys_cleared & (BIT(0) | BIT(15)) && addr && in wpa_clear_keys()
796 if (!(wpa_s->keys_cleared & BIT(0))) in wpa_clear_keys()
797 wpa_drv_set_key(wpa_s, -1, WPA_ALG_NONE, addr, 0, 0, in wpa_clear_keys()
799 if (!(wpa_s->keys_cleared & BIT(15))) in wpa_clear_keys()
800 wpa_drv_set_key(wpa_s, -1, WPA_ALG_NONE, addr, 1, 0, in wpa_clear_keys()
802 /* MLME-SETPROTECTION.request(None) */ in wpa_clear_keys()
808 wpa_s->keys_cleared = (u32) -1; in wpa_clear_keys()
813 * wpa_supplicant_state_txt - Get the connection state name as a text string
850 if (wpa_s->bgscan_ssid) { in wpa_supplicant_stop_bgscan()
852 wpa_s->bgscan_ssid = NULL; in wpa_supplicant_stop_bgscan()
858 * wpa_supplicant_reset_bgscan - Reset the bgscan for the current SSID.
867 if (wpa_s->current_ssid && wpa_s->current_ssid->bgscan) in wpa_supplicant_reset_bgscan()
868 name = wpa_s->current_ssid->bgscan; in wpa_supplicant_reset_bgscan()
870 name = wpa_s->conf->bgscan; in wpa_supplicant_reset_bgscan()
878 if (wpa_s->p2p_group_interface != NOT_P2P_GROUP_INTERFACE) in wpa_supplicant_reset_bgscan()
883 if (wpa_s->current_ssid) { in wpa_supplicant_reset_bgscan()
884 if (bgscan_init(wpa_s, wpa_s->current_ssid, name)) { in wpa_supplicant_reset_bgscan()
894 wpa_s->bgscan_ssid = wpa_s->current_ssid; in wpa_supplicant_reset_bgscan()
903 wpa_s->bgscan_ssid = NULL; in wpa_supplicant_reset_bgscan()
924 if (wpa_s->wpa_state == WPA_DISCONNECTED || in wpa_supplicant_reinit_autoscan()
925 wpa_s->wpa_state == WPA_SCANNING) { in wpa_supplicant_reinit_autoscan()
939 if (!wpa_s->current_ssid || !wpa_s->current_bss) in wpas_verify_ssid_beacon()
942 ssid = wpa_s->current_bss->ssid; in wpas_verify_ssid_beacon()
943 ssid_len = wpa_s->current_bss->ssid_len; in wpas_verify_ssid_beacon()
945 if (wpa_s->current_ssid->ssid_len && in wpas_verify_ssid_beacon()
946 (wpa_s->current_ssid->ssid_len != ssid_len || in wpas_verify_ssid_beacon()
947 os_memcmp(wpa_s->current_ssid->ssid, ssid, ssid_len) != 0)) in wpas_verify_ssid_beacon()
950 if (wpa_s->wpa_state < WPA_4WAY_HANDSHAKE || in wpas_verify_ssid_beacon()
951 !wpa_s->bigtk_set || wpa_s->ssid_verified) in wpas_verify_ssid_beacon()
956 if (wpa_supplicant_update_scan_results(wpa_s, wpa_s->bssid) < 0) in wpas_verify_ssid_beacon()
959 bss = wpa_bss_get_bssid_latest(wpa_s, wpa_s->bssid); in wpas_verify_ssid_beacon()
963 (long long unsigned int) bss->tsf); in wpas_verify_ssid_beacon()
964 if (bss->tsf > wpa_s->first_beacon_tsf) { in wpas_verify_ssid_beacon()
969 wpa_s->beacons_checked++; in wpas_verify_ssid_beacon()
976 wpa_s->ssid_verified = true; in wpas_verify_ssid_beacon()
983 if (wpa_s->beacons_checked < 16) { in wpas_verify_ssid_beacon()
984 eloop_register_timeout(wpa_s->next_beacon_check, 0, in wpas_verify_ssid_beacon()
986 wpa_s->next_beacon_check++; in wpas_verify_ssid_beacon()
1001 if (wpa_supplicant_update_scan_results(wpa_s, wpa_s->bssid) < 0) in wpas_verify_ssid_beacon_prot()
1004 bss = wpa_bss_get_bssid_latest(wpa_s, wpa_s->bssid); in wpas_verify_ssid_beacon_prot()
1008 (long long unsigned int) bss->tsf); in wpas_verify_ssid_beacon_prot()
1009 wpa_s->first_beacon_tsf = bss->tsf; in wpas_verify_ssid_beacon_prot()
1010 wpa_s->beacons_checked = 0; in wpas_verify_ssid_beacon_prot()
1011 wpa_s->next_beacon_check = 1; in wpas_verify_ssid_beacon_prot()
1018 * wpa_supplicant_set_state - Set current connection state
1023 * association is completed for WPA/WPA2 4-Way Handshake is started.
1028 enum wpa_states old_state = wpa_s->wpa_state; in wpa_supplicant_set_state()
1033 wpa_dbg(wpa_s, MSG_DEBUG, "State: %s -> %s", in wpa_supplicant_set_state()
1034 wpa_supplicant_state_txt(wpa_s->wpa_state), in wpa_supplicant_set_state()
1038 os_reltime_initialized(&wpa_s->roam_start)) { in wpa_supplicant_set_state()
1039 os_reltime_age(&wpa_s->roam_start, &wpa_s->roam_time); in wpa_supplicant_set_state()
1040 wpa_s->roam_start.sec = 0; in wpa_supplicant_set_state()
1041 wpa_s->roam_start.usec = 0; in wpa_supplicant_set_state()
1046 os_reltime_initialized(&wpa_s->roam_start)) { in wpa_supplicant_set_state()
1047 wpa_s->roam_start.sec = 0; in wpa_supplicant_set_state()
1048 wpa_s->roam_start.usec = 0; in wpa_supplicant_set_state()
1049 wpa_s->roam_time.sec = 0; in wpa_supplicant_set_state()
1050 wpa_s->roam_time.usec = 0; in wpa_supplicant_set_state()
1056 wpa_s->normal_scans = 0; in wpa_supplicant_set_state()
1062 wpa_s->normal_scans = 0; in wpa_supplicant_set_state()
1072 if (wpa_s->conf->p2p_cli_probe && wpa_s->current_ssid && in wpa_supplicant_set_state()
1073 wpa_s->current_ssid->mode == WPAS_MODE_INFRA && in wpa_supplicant_set_state()
1074 wpa_s->current_ssid->p2p_group) { in wpa_supplicant_set_state()
1075 if (state == WPA_COMPLETED && !wpa_s->p2p_cli_probe) { in wpa_supplicant_set_state()
1078 wpa_s->p2p_cli_probe = in wpa_supplicant_set_state()
1080 } else if (state != WPA_COMPLETED && wpa_s->p2p_cli_probe) { in wpa_supplicant_set_state()
1083 wpa_s->p2p_cli_probe = 0; in wpa_supplicant_set_state()
1092 if (state == WPA_COMPLETED && wpa_s->new_connection) { in wpa_supplicant_set_state()
1093 struct wpa_ssid *ssid = wpa_s->current_ssid; in wpa_supplicant_set_state()
1098 if (wpa_s->valid_links) in wpa_supplicant_set_state()
1101 MAC2STR(wpa_s->ap_mld_addr)); in wpa_supplicant_set_state()
1104 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_supplicant_set_state()
1105 wpa_auth_alg_fils(wpa_s->sme.auth_alg)) in wpa_supplicant_set_state()
1108 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_supplicant_set_state()
1109 wpa_auth_alg_fils(wpa_s->auth_alg)) in wpa_supplicant_set_state()
1113 wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_CONNECTED "- Connection to " in wpa_supplicant_set_state()
1115 MAC2STR(wpa_s->bssid), in wpa_supplicant_set_state()
1116 ssid ? ssid->id : -1, in wpa_supplicant_set_state()
1117 ssid && ssid->id_str ? ssid->id_str : "", in wpa_supplicant_set_state()
1121 wpa_s->consecutive_conn_failures = 0; in wpa_supplicant_set_state()
1122 wpa_s->new_connection = 0; in wpa_supplicant_set_state()
1127 wpa_s->after_wps = 0; in wpa_supplicant_set_state()
1128 wpa_s->known_wps_freq = 0; in wpa_supplicant_set_state()
1134 if (!fils_hlp_sent && ssid && ssid->eap.erp) in wpa_supplicant_set_state()
1138 if (ssid && (ssid->key_mgmt & WPA_KEY_MGMT_OWE)) in wpa_supplicant_set_state()
1143 wpa_s->new_connection = 1; in wpa_supplicant_set_state()
1150 wpa_s->wpa_state = state; in wpa_supplicant_set_state()
1153 if (state == WPA_COMPLETED && wpa_s->current_ssid != wpa_s->bgscan_ssid) in wpa_supplicant_set_state()
1170 if (old_state >= WPA_ASSOCIATED && wpa_s->wpa_state < WPA_ASSOCIATED) in wpa_supplicant_set_state()
1174 if (wpa_s->wpa_state != old_state) { in wpa_supplicant_set_state()
1175 wpas_notify_state_changed(wpa_s, wpa_s->wpa_state, old_state); in wpa_supplicant_set_state()
1183 if (wpa_s->wpa_state == WPA_COMPLETED || in wpa_supplicant_set_state()
1187 if (wpa_s->wpa_state == WPA_COMPLETED) in wpa_supplicant_set_state()
1191 if (wpa_s->wpa_state == WPA_COMPLETED && in wpa_supplicant_set_state()
1192 wpa_s->bigtk_set && !wpa_s->ssid_verified) in wpa_supplicant_set_state()
1206 struct wpa_supplicant *wpa_s = global->ifaces; in wpa_supplicant_terminate_proc()
1208 struct wpa_supplicant *next = wpa_s->next; in wpa_supplicant_terminate_proc()
1212 if (wpa_s->p2p_group_interface != NOT_P2P_GROUP_INTERFACE || in wpa_supplicant_terminate_proc()
1213 (wpa_s->current_ssid && wpa_s->current_ssid->p2p_group)) in wpa_supplicant_terminate_proc()
1234 enum wpa_states old_state = wpa_s->wpa_state; in wpa_supplicant_clear_status()
1242 wpa_s->pairwise_cipher = 0; in wpa_supplicant_clear_status()
1243 wpa_s->group_cipher = 0; in wpa_supplicant_clear_status()
1244 wpa_s->mgmt_group_cipher = 0; in wpa_supplicant_clear_status()
1245 wpa_s->key_mgmt = 0; in wpa_supplicant_clear_status()
1246 wpa_s->allowed_key_mgmts = 0; in wpa_supplicant_clear_status()
1247 if (wpa_s->wpa_state != WPA_INTERFACE_DISABLED) in wpa_supplicant_clear_status()
1250 if (wpa_s->wpa_state != old_state) in wpa_supplicant_clear_status()
1251 wpas_notify_state_changed(wpa_s, wpa_s->wpa_state, old_state); in wpa_supplicant_clear_status()
1256 * wpa_supplicant_reload_configuration - Reload configuration data
1258 * Returns: 0 on success or -1 if configuration parsing failed
1272 if (wpa_s->confname == NULL) in wpa_supplicant_reload_configuration()
1273 return -1; in wpa_supplicant_reload_configuration()
1274 conf = wpa_config_read(wpa_s->confname, NULL, false); in wpa_supplicant_reload_configuration()
1277 "file '%s' - exiting", wpa_s->confname); in wpa_supplicant_reload_configuration()
1278 return -1; in wpa_supplicant_reload_configuration()
1280 if (wpa_s->confanother && in wpa_supplicant_reload_configuration()
1281 !wpa_config_read(wpa_s->confanother, conf, true)) { in wpa_supplicant_reload_configuration()
1283 "Failed to parse the configuration file '%s' - exiting", in wpa_supplicant_reload_configuration()
1284 wpa_s->confanother); in wpa_supplicant_reload_configuration()
1285 return -1; in wpa_supplicant_reload_configuration()
1288 conf->changed_parameters = (unsigned int) -1; in wpa_supplicant_reload_configuration()
1290 reconf_ctrl = !!conf->ctrl_interface != !!wpa_s->conf->ctrl_interface in wpa_supplicant_reload_configuration()
1291 || (conf->ctrl_interface && wpa_s->conf->ctrl_interface && in wpa_supplicant_reload_configuration()
1292 os_strcmp(conf->ctrl_interface, in wpa_supplicant_reload_configuration()
1293 wpa_s->conf->ctrl_interface) != 0); in wpa_supplicant_reload_configuration()
1296 wpa_supplicant_ctrl_iface_deinit(wpa_s, wpa_s->ctrl_iface); in wpa_supplicant_reload_configuration()
1297 wpa_s->ctrl_iface = NULL; in wpa_supplicant_reload_configuration()
1300 eapol_sm_invalidate_cached_session(wpa_s->eapol); in wpa_supplicant_reload_configuration()
1301 if (wpa_s->current_ssid) { in wpa_supplicant_reload_configuration()
1302 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_reload_configuration()
1303 wpa_s->own_disconnect_req = 1; in wpa_supplicant_reload_configuration()
1312 if (wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt) || in wpa_supplicant_reload_configuration()
1313 wpa_s->key_mgmt == WPA_KEY_MGMT_OWE || in wpa_supplicant_reload_configuration()
1314 wpa_s->key_mgmt == WPA_KEY_MGMT_DPP) { in wpa_supplicant_reload_configuration()
1319 eapol_sm_notify_eap_success(wpa_s->eapol, false); in wpa_supplicant_reload_configuration()
1321 eapol_sm_notify_config(wpa_s->eapol, NULL, NULL); in wpa_supplicant_reload_configuration()
1322 wpa_sm_set_config(wpa_s->wpa, NULL); in wpa_supplicant_reload_configuration()
1323 wpa_sm_pmksa_cache_flush(wpa_s->wpa, NULL); in wpa_supplicant_reload_configuration()
1324 wpa_sm_set_fast_reauth(wpa_s->wpa, wpa_s->conf->fast_reauth); in wpa_supplicant_reload_configuration()
1325 rsn_preauth_deinit(wpa_s->wpa); in wpa_supplicant_reload_configuration()
1327 old_ap_scan = wpa_s->conf->ap_scan; in wpa_supplicant_reload_configuration()
1328 wpa_config_free(wpa_s->conf); in wpa_supplicant_reload_configuration()
1329 wpa_s->conf = conf; in wpa_supplicant_reload_configuration()
1330 if (old_ap_scan != wpa_s->conf->ap_scan) in wpa_supplicant_reload_configuration()
1334 wpa_s->ctrl_iface = wpa_supplicant_ctrl_iface_init(wpa_s); in wpa_supplicant_reload_configuration()
1340 wpa_s->reassociate = 1; in wpa_supplicant_reload_configuration()
1353 for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) { in wpa_supplicant_reconfig()
1354 wpa_dbg(wpa_s, MSG_DEBUG, "Signal %d received - reconfiguring", in wpa_supplicant_reconfig()
1362 /* Ignore errors since we cannot really do much to fix this */ in wpa_supplicant_reconfig()
1372 int ret = wpa_sm_parse_own_wpa_ie(wpa_s->wpa, ie); in wpa_supplicant_suites_from_ai()
1374 if (ret == -2) { in wpa_supplicant_suites_from_ai()
1378 return -1; in wpa_supplicant_suites_from_ai()
1383 if (!(ie->group_cipher & ssid->group_cipher)) { in wpa_supplicant_suites_from_ai()
1385 "cipher 0x%x (mask 0x%x) - reject", in wpa_supplicant_suites_from_ai()
1386 ie->group_cipher, ssid->group_cipher); in wpa_supplicant_suites_from_ai()
1387 return -1; in wpa_supplicant_suites_from_ai()
1389 if (!(ie->pairwise_cipher & ssid->pairwise_cipher)) { in wpa_supplicant_suites_from_ai()
1391 "cipher 0x%x (mask 0x%x) - reject", in wpa_supplicant_suites_from_ai()
1392 ie->pairwise_cipher, ssid->pairwise_cipher); in wpa_supplicant_suites_from_ai()
1393 return -1; in wpa_supplicant_suites_from_ai()
1395 if (!(ie->key_mgmt & ssid->key_mgmt)) { in wpa_supplicant_suites_from_ai()
1397 "management 0x%x (mask 0x%x) - reject", in wpa_supplicant_suites_from_ai()
1398 ie->key_mgmt, ssid->key_mgmt); in wpa_supplicant_suites_from_ai()
1399 return -1; in wpa_supplicant_suites_from_ai()
1402 if (!(ie->capabilities & WPA_CAPABILITY_MFPC) && in wpa_supplicant_suites_from_ai()
1405 "that does not support management frame protection - " in wpa_supplicant_suites_from_ai()
1407 return -1; in wpa_supplicant_suites_from_ai()
1417 if (!ie->has_group) in matching_ciphers()
1418 ie->group_cipher = wpa_default_rsn_cipher(freq); in matching_ciphers()
1419 if (!ie->has_pairwise) in matching_ciphers()
1420 ie->pairwise_cipher = wpa_default_rsn_cipher(freq); in matching_ciphers()
1421 return (ie->group_cipher & ssid->group_cipher) && in matching_ciphers()
1422 (ie->pairwise_cipher & ssid->pairwise_cipher); in matching_ciphers()
1431 sel = ie->mgmt_group_cipher; in wpas_set_mgmt_group_cipher()
1432 if (ssid->group_mgmt_cipher) in wpas_set_mgmt_group_cipher()
1433 sel &= ssid->group_mgmt_cipher; in wpas_set_mgmt_group_cipher()
1435 !(ie->capabilities & WPA_CAPABILITY_MFPC)) in wpas_set_mgmt_group_cipher()
1439 ie->mgmt_group_cipher, ssid->group_mgmt_cipher, sel); in wpas_set_mgmt_group_cipher()
1441 wpa_s->mgmt_group_cipher = WPA_CIPHER_AES_128_CMAC; in wpas_set_mgmt_group_cipher()
1443 "WPA: using MGMT group cipher AES-128-CMAC"); in wpas_set_mgmt_group_cipher()
1445 wpa_s->mgmt_group_cipher = WPA_CIPHER_BIP_GMAC_128; in wpas_set_mgmt_group_cipher()
1447 "WPA: using MGMT group cipher BIP-GMAC-128"); in wpas_set_mgmt_group_cipher()
1449 wpa_s->mgmt_group_cipher = WPA_CIPHER_BIP_GMAC_256; in wpas_set_mgmt_group_cipher()
1451 "WPA: using MGMT group cipher BIP-GMAC-256"); in wpas_set_mgmt_group_cipher()
1453 wpa_s->mgmt_group_cipher = WPA_CIPHER_BIP_CMAC_256; in wpas_set_mgmt_group_cipher()
1455 "WPA: using MGMT group cipher BIP-CMAC-256"); in wpas_set_mgmt_group_cipher()
1457 wpa_s->mgmt_group_cipher = 0; in wpas_set_mgmt_group_cipher()
1460 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_MGMT_GROUP, in wpas_set_mgmt_group_cipher()
1461 wpa_s->mgmt_group_cipher); in wpas_set_mgmt_group_cipher()
1462 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_MFP, in wpas_set_mgmt_group_cipher()
1467 * wpa_supplicant_get_psk - Get PSK from config or external database
1472 * Returns: 0 on success or -1 if configuration parsing failed
1481 if (ssid->psk_set) { in wpa_supplicant_get_psk()
1483 ssid->psk, PMK_LEN); in wpa_supplicant_get_psk()
1484 os_memcpy(psk, ssid->psk, PMK_LEN); in wpa_supplicant_get_psk()
1489 if (bss && ssid->bssid_set && ssid->ssid_len == 0 && ssid->passphrase) { in wpa_supplicant_get_psk()
1490 if (pbkdf2_sha1(ssid->passphrase, bss->ssid, bss->ssid_len, in wpa_supplicant_get_psk()
1493 return -1; in wpa_supplicant_get_psk()
1502 if (ssid->ext_psk) { in wpa_supplicant_get_psk()
1503 struct wpabuf *pw = ext_password_get(wpa_s->ext_pw, in wpa_supplicant_get_psk()
1504 ssid->ext_psk); in wpa_supplicant_get_psk()
1510 return -1; in wpa_supplicant_get_psk()
1518 return -1; in wpa_supplicant_get_psk()
1527 if (pbkdf2_sha1(pw_str, bss->ssid, bss->ssid_len, in wpa_supplicant_get_psk()
1533 return -1; in wpa_supplicant_get_psk()
1546 return -1; in wpa_supplicant_get_psk()
1555 return -1; in wpa_supplicant_get_psk()
1565 return -1; in wpa_supplicant_get_psk()
1572 int akm_count = wpa_s->max_num_akms; in wpas_update_allowed_key_mgmt()
1578 akm_count--; in wpas_update_allowed_key_mgmt()
1579 wpa_s->allowed_key_mgmts = 0; in wpas_update_allowed_key_mgmt()
1580 switch (wpa_s->key_mgmt) { in wpas_update_allowed_key_mgmt()
1582 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { in wpas_update_allowed_key_mgmt()
1583 akm_count--; in wpas_update_allowed_key_mgmt()
1584 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE; in wpas_update_allowed_key_mgmt()
1588 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE_EXT_KEY) { in wpas_update_allowed_key_mgmt()
1589 akm_count--; in wpas_update_allowed_key_mgmt()
1590 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE_EXT_KEY; in wpas_update_allowed_key_mgmt()
1594 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK_SHA256) in wpas_update_allowed_key_mgmt()
1595 wpa_s->allowed_key_mgmts |= in wpas_update_allowed_key_mgmt()
1599 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { in wpas_update_allowed_key_mgmt()
1600 akm_count--; in wpas_update_allowed_key_mgmt()
1601 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE; in wpas_update_allowed_key_mgmt()
1605 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE_EXT_KEY) { in wpas_update_allowed_key_mgmt()
1606 akm_count--; in wpas_update_allowed_key_mgmt()
1607 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE_EXT_KEY; in wpas_update_allowed_key_mgmt()
1611 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK) in wpas_update_allowed_key_mgmt()
1612 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_PSK; in wpas_update_allowed_key_mgmt()
1615 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK) { in wpas_update_allowed_key_mgmt()
1616 akm_count--; in wpas_update_allowed_key_mgmt()
1617 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_PSK; in wpas_update_allowed_key_mgmt()
1621 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE_EXT_KEY) { in wpas_update_allowed_key_mgmt()
1622 akm_count--; in wpas_update_allowed_key_mgmt()
1623 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE_EXT_KEY; in wpas_update_allowed_key_mgmt()
1627 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK_SHA256) in wpas_update_allowed_key_mgmt()
1628 wpa_s->allowed_key_mgmts |= in wpas_update_allowed_key_mgmt()
1632 if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) { in wpas_update_allowed_key_mgmt()
1633 akm_count--; in wpas_update_allowed_key_mgmt()
1634 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_SAE; in wpas_update_allowed_key_mgmt()
1638 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK) { in wpas_update_allowed_key_mgmt()
1639 akm_count--; in wpas_update_allowed_key_mgmt()
1640 wpa_s->allowed_key_mgmts |= WPA_KEY_MGMT_PSK; in wpas_update_allowed_key_mgmt()
1644 if (ssid->key_mgmt & WPA_KEY_MGMT_PSK_SHA256) in wpas_update_allowed_key_mgmt()
1645 wpa_s->allowed_key_mgmts |= in wpas_update_allowed_key_mgmt()
1652 if (wpa_s->conf->sae_pwe != SAE_PWE_HUNT_AND_PECK && in wpas_update_allowed_key_mgmt()
1653 wpa_s->conf->sae_pwe != SAE_PWE_FORCE_HUNT_AND_PECK) in wpas_update_allowed_key_mgmt()
1656 if (ssid->sae_pk) in wpas_update_allowed_key_mgmt()
1660 if (!((wpa_s->allowed_key_mgmts & in wpas_update_allowed_key_mgmt()
1664 if (!wpa_s->rsnxe_len) { in wpas_update_allowed_key_mgmt()
1665 wpa_s->rsnxe_len = 3; in wpas_update_allowed_key_mgmt()
1666 wpa_s->rsnxe[0] = WLAN_EID_RSNX; in wpas_update_allowed_key_mgmt()
1667 wpa_s->rsnxe[1] = 1; in wpas_update_allowed_key_mgmt()
1668 wpa_s->rsnxe[2] = 0; in wpas_update_allowed_key_mgmt()
1671 wpa_s->rsnxe[2] |= capab; in wpas_update_allowed_key_mgmt()
1676 * wpa_supplicant_set_suites - Set authentication and encryption parameters
1684 * Returns: 0 on success or -1 on failure
1710 if (bss_rsn && (ssid->proto & WPA_PROTO_RSN) && in wpa_supplicant_set_suites()
1712 matching_ciphers(ssid, &ie, bss->freq) && in wpa_supplicant_set_suites()
1713 (ie.key_mgmt & ssid->key_mgmt)) { in wpa_supplicant_set_suites()
1716 } else if (bss_wpa && (ssid->proto & WPA_PROTO_WPA) && in wpa_supplicant_set_suites()
1718 (ie.group_cipher & ssid->group_cipher) && in wpa_supplicant_set_suites()
1719 (ie.pairwise_cipher & ssid->pairwise_cipher) && in wpa_supplicant_set_suites()
1720 (ie.key_mgmt & ssid->key_mgmt)) { in wpa_supplicant_set_suites()
1724 } else if (bss_osen && (ssid->proto & WPA_PROTO_OSEN) && in wpa_supplicant_set_suites()
1726 (ie.group_cipher & ssid->group_cipher) && in wpa_supplicant_set_suites()
1727 (ie.pairwise_cipher & ssid->pairwise_cipher) && in wpa_supplicant_set_suites()
1728 (ie.key_mgmt & ssid->key_mgmt)) { in wpa_supplicant_set_suites()
1731 } else if (bss_rsn && (ssid->proto & WPA_PROTO_OSEN) && in wpa_supplicant_set_suites()
1733 (ie.group_cipher & ssid->group_cipher) && in wpa_supplicant_set_suites()
1734 (ie.pairwise_cipher & ssid->pairwise_cipher) && in wpa_supplicant_set_suites()
1735 (ie.key_mgmt & ssid->key_mgmt)) { in wpa_supplicant_set_suites()
1743 ssid->proto, ssid->pairwise_cipher, ssid->group_cipher, in wpa_supplicant_set_suites()
1744 ssid->key_mgmt); in wpa_supplicant_set_suites()
1746 MAC2STR(bss->bssid), in wpa_supplicant_set_suites()
1747 wpa_ssid_txt(bss->ssid, bss->ssid_len), in wpa_supplicant_set_suites()
1775 return -1; in wpa_supplicant_set_suites()
1777 if (ssid->proto & WPA_PROTO_OSEN) in wpa_supplicant_set_suites()
1779 else if (ssid->proto & WPA_PROTO_RSN) in wpa_supplicant_set_suites()
1785 ie.group_cipher = ssid->group_cipher; in wpa_supplicant_set_suites()
1786 ie.pairwise_cipher = ssid->pairwise_cipher; in wpa_supplicant_set_suites()
1787 ie.key_mgmt = ssid->key_mgmt; in wpa_supplicant_set_suites()
1789 if (ssid->ieee80211w != NO_MGMT_FRAME_PROTECTION) { in wpa_supplicant_set_suites()
1790 if (ssid->group_mgmt_cipher & in wpa_supplicant_set_suites()
1794 else if (ssid->group_mgmt_cipher & in wpa_supplicant_set_suites()
1798 else if (ssid->group_mgmt_cipher & in wpa_supplicant_set_suites()
1807 if ((ssid->key_mgmt & WPA_KEY_MGMT_OWE) && in wpa_supplicant_set_suites()
1808 !ssid->owe_only && in wpa_supplicant_set_suites()
1811 wpa_s->wpa_proto = 0; in wpa_supplicant_set_suites()
1825 if (ssid->ieee80211w) { in wpa_supplicant_set_suites()
1830 wpa_s->wpa_proto = proto; in wpa_supplicant_set_suites()
1831 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_PROTO, proto); in wpa_supplicant_set_suites()
1832 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_ENABLED, in wpa_supplicant_set_suites()
1833 !!(ssid->proto & (WPA_PROTO_RSN | WPA_PROTO_OSEN))); in wpa_supplicant_set_suites()
1835 if (bss || !wpa_s->ap_ies_from_associnfo) { in wpa_supplicant_set_suites()
1836 if (wpa_sm_set_ap_wpa_ie(wpa_s->wpa, bss_wpa, in wpa_supplicant_set_suites()
1838 wpa_sm_set_ap_rsn_ie(wpa_s->wpa, bss_rsn, in wpa_supplicant_set_suites()
1840 wpa_sm_set_ap_rsnxe(wpa_s->wpa, bss_rsnx, in wpa_supplicant_set_suites()
1842 return -1; in wpa_supplicant_set_suites()
1846 wpa_s->group_cipher = WPA_CIPHER_NONE; in wpa_supplicant_set_suites()
1847 wpa_s->pairwise_cipher = WPA_CIPHER_NONE; in wpa_supplicant_set_suites()
1849 sel = ie.group_cipher & ssid->group_cipher; in wpa_supplicant_set_suites()
1852 ie.group_cipher, ssid->group_cipher, sel); in wpa_supplicant_set_suites()
1853 wpa_s->group_cipher = wpa_pick_group_cipher(sel); in wpa_supplicant_set_suites()
1854 if (wpa_s->group_cipher < 0) { in wpa_supplicant_set_suites()
1857 return -1; in wpa_supplicant_set_suites()
1860 wpa_cipher_txt(wpa_s->group_cipher)); in wpa_supplicant_set_suites()
1862 sel = ie.pairwise_cipher & ssid->pairwise_cipher; in wpa_supplicant_set_suites()
1865 ie.pairwise_cipher, ssid->pairwise_cipher, sel); in wpa_supplicant_set_suites()
1866 wpa_s->pairwise_cipher = wpa_pick_pairwise_cipher(sel, 1); in wpa_supplicant_set_suites()
1867 if (wpa_s->pairwise_cipher < 0) { in wpa_supplicant_set_suites()
1870 return -1; in wpa_supplicant_set_suites()
1873 wpa_cipher_txt(wpa_s->pairwise_cipher)); in wpa_supplicant_set_suites()
1876 sel = ie.key_mgmt & ssid->key_mgmt; in wpa_supplicant_set_suites()
1878 if ((!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SAE) && in wpa_supplicant_set_suites()
1879 !(wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA)) || in wpa_supplicant_set_suites()
1885 if (!(wpa_s->drv_flags & (WPA_DRIVER_FLAGS_SME | in wpa_supplicant_set_suites()
1891 ie.key_mgmt, ssid->key_mgmt, sel); in wpa_supplicant_set_suites()
1897 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_IEEE8021X_SHA384; in wpa_supplicant_set_suites()
1899 "WPA: using KEY_MGMT FT/802.1X-SHA384"); in wpa_supplicant_set_suites()
1900 if (!ssid->ft_eap_pmksa_caching && in wpa_supplicant_set_suites()
1901 pmksa_cache_get_current(wpa_s->wpa)) { in wpa_supplicant_set_suites()
1906 pmksa_cache_clear_current(wpa_s->wpa); in wpa_supplicant_set_suites()
1912 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X_SUITE_B_192; in wpa_supplicant_set_suites()
1914 "WPA: using KEY_MGMT 802.1X with Suite B (192-bit)"); in wpa_supplicant_set_suites()
1918 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X_SUITE_B; in wpa_supplicant_set_suites()
1924 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X_SHA384; in wpa_supplicant_set_suites()
1931 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA384; in wpa_supplicant_set_suites()
1932 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT FT-FILS-SHA384"); in wpa_supplicant_set_suites()
1935 wpa_s->key_mgmt = WPA_KEY_MGMT_FILS_SHA384; in wpa_supplicant_set_suites()
1936 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT FILS-SHA384"); in wpa_supplicant_set_suites()
1939 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA256; in wpa_supplicant_set_suites()
1940 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT FT-FILS-SHA256"); in wpa_supplicant_set_suites()
1943 wpa_s->key_mgmt = WPA_KEY_MGMT_FILS_SHA256; in wpa_supplicant_set_suites()
1944 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT FILS-SHA256"); in wpa_supplicant_set_suites()
1949 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_IEEE8021X; in wpa_supplicant_set_suites()
1951 if (!ssid->ft_eap_pmksa_caching && in wpa_supplicant_set_suites()
1952 pmksa_cache_get_current(wpa_s->wpa)) { in wpa_supplicant_set_suites()
1957 pmksa_cache_clear_current(wpa_s->wpa); in wpa_supplicant_set_suites()
1962 wpa_s->key_mgmt = WPA_KEY_MGMT_DPP; in wpa_supplicant_set_suites()
1967 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_SAE_EXT_KEY; in wpa_supplicant_set_suites()
1971 wpa_s->key_mgmt = WPA_KEY_MGMT_SAE_EXT_KEY; in wpa_supplicant_set_suites()
1974 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_SAE; in wpa_supplicant_set_suites()
1977 wpa_s->key_mgmt = WPA_KEY_MGMT_SAE; in wpa_supplicant_set_suites()
1982 wpa_s->key_mgmt = WPA_KEY_MGMT_FT_PSK; in wpa_supplicant_set_suites()
1986 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X_SHA256; in wpa_supplicant_set_suites()
1990 wpa_s->key_mgmt = WPA_KEY_MGMT_PSK_SHA256; in wpa_supplicant_set_suites()
1994 wpa_s->key_mgmt = WPA_KEY_MGMT_IEEE8021X; in wpa_supplicant_set_suites()
1997 wpa_s->key_mgmt = WPA_KEY_MGMT_PSK; in wpa_supplicant_set_suites()
1998 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT WPA-PSK"); in wpa_supplicant_set_suites()
2000 wpa_s->key_mgmt = WPA_KEY_MGMT_WPA_NONE; in wpa_supplicant_set_suites()
2001 wpa_dbg(wpa_s, MSG_DEBUG, "WPA: using KEY_MGMT WPA-NONE"); in wpa_supplicant_set_suites()
2004 wpa_s->key_mgmt = WPA_KEY_MGMT_OSEN; in wpa_supplicant_set_suites()
2009 wpa_s->key_mgmt = WPA_KEY_MGMT_OWE; in wpa_supplicant_set_suites()
2015 return -1; in wpa_supplicant_set_suites()
2018 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_KEY_MGMT, wpa_s->key_mgmt); in wpa_supplicant_set_suites()
2019 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_PAIRWISE, in wpa_supplicant_set_suites()
2020 wpa_s->pairwise_cipher); in wpa_supplicant_set_suites()
2021 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_GROUP, wpa_s->group_cipher); in wpa_supplicant_set_suites()
2025 (bss && is_6ghz_freq(bss->freq)))) { in wpa_supplicant_set_suites()
2028 return -1; in wpa_supplicant_set_suites()
2033 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) || in wpa_supplicant_set_suites()
2034 (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_OCV)) in wpa_supplicant_set_suites()
2035 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCV, ssid->ocv); in wpa_supplicant_set_suites()
2037 sae_pwe = wpa_s->conf->sae_pwe; in wpa_supplicant_set_suites()
2038 if ((ssid->sae_password_id || in wpa_supplicant_set_suites()
2039 wpa_key_mgmt_sae_ext_key(wpa_s->key_mgmt)) && in wpa_supplicant_set_suites()
2042 if (bss && is_6ghz_freq(bss->freq) && in wpa_supplicant_set_suites()
2045 "RSN: Enable SAE hash-to-element mode for 6 GHz BSS"); in wpa_supplicant_set_suites()
2048 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_SAE_PWE, sae_pwe); in wpa_supplicant_set_suites()
2050 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_SAE_PK, in wpa_supplicant_set_suites()
2051 wpa_key_mgmt_sae(ssid->key_mgmt) && in wpa_supplicant_set_suites()
2052 ssid->sae_pk != SAE_PK_MODE_DISABLED && in wpa_supplicant_set_suites()
2053 ((ssid->sae_password && in wpa_supplicant_set_suites()
2054 sae_pk_valid_password(ssid->sae_password)) || in wpa_supplicant_set_suites()
2055 (!ssid->sae_password && ssid->passphrase && in wpa_supplicant_set_suites()
2056 sae_pk_valid_password(ssid->passphrase)))); in wpa_supplicant_set_suites()
2058 if (bss && is_6ghz_freq(bss->freq) && in wpa_supplicant_set_suites()
2061 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_MFP, in wpa_supplicant_set_suites()
2065 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_FT_RSNXE_USED, in wpa_supplicant_set_suites()
2066 wpa_s->ft_rsnxe_used); in wpa_supplicant_set_suites()
2067 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCI_FREQ_EAPOL, in wpa_supplicant_set_suites()
2068 wpa_s->oci_freq_override_eapol); in wpa_supplicant_set_suites()
2069 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCI_FREQ_EAPOL_G2, in wpa_supplicant_set_suites()
2070 wpa_s->oci_freq_override_eapol_g2); in wpa_supplicant_set_suites()
2071 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCI_FREQ_FT_ASSOC, in wpa_supplicant_set_suites()
2072 wpa_s->oci_freq_override_ft_assoc); in wpa_supplicant_set_suites()
2073 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCI_FREQ_FILS_ASSOC, in wpa_supplicant_set_suites()
2074 wpa_s->oci_freq_override_fils_assoc); in wpa_supplicant_set_suites()
2075 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_DISABLE_EAPOL_G2_TX, in wpa_supplicant_set_suites()
2076 wpa_s->disable_eapol_g2_tx); in wpa_supplicant_set_suites()
2080 if (ssid->mode == WPAS_MODE_INFRA && wpa_s->conf->extended_key_id && in wpa_supplicant_set_suites()
2081 (ssid->proto & WPA_PROTO_RSN) && in wpa_supplicant_set_suites()
2082 ssid->pairwise_cipher & (WPA_CIPHER_CCMP | WPA_CIPHER_CCMP_256 | in wpa_supplicant_set_suites()
2084 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_EXTENDED_KEY_ID)) { in wpa_supplicant_set_suites()
2089 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_EXT_KEY_ID, in wpa_supplicant_set_suites()
2090 wpa_s->conf->extended_key_id); in wpa_supplicant_set_suites()
2092 wpa_s->conf->extended_key_id && in wpa_supplicant_set_suites()
2093 wpa_s->pairwise_cipher != WPA_CIPHER_TKIP && in wpa_supplicant_set_suites()
2096 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_USE_EXT_KEY_ID, in wpa_supplicant_set_suites()
2099 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_EXT_KEY_ID, 0); in wpa_supplicant_set_suites()
2100 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_USE_EXT_KEY_ID, 0); in wpa_supplicant_set_suites()
2112 wmm = wpa_s->connection_set && in wpa_supplicant_set_suites()
2113 (wpa_s->connection_ht || wpa_s->connection_vht || in wpa_supplicant_set_suites()
2114 wpa_s->connection_he || wpa_s->connection_eht); in wpa_supplicant_set_suites()
2117 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_WMM_ENABLED, wmm); in wpa_supplicant_set_suites()
2119 if (ssid->ssid_protection && proto == WPA_PROTO_RSN) { in wpa_supplicant_set_suites()
2129 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_SSID_PROTECTION, in wpa_supplicant_set_suites()
2132 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_SSID_PROTECTION, false); in wpa_supplicant_set_suites()
2136 if (wpa_sm_set_assoc_wpa_ie_default(wpa_s->wpa, wpa_ie, in wpa_supplicant_set_suites()
2140 return -1; in wpa_supplicant_set_suites()
2143 wpa_s->rsnxe_len = sizeof(wpa_s->rsnxe); in wpa_supplicant_set_suites()
2144 if (wpa_sm_set_assoc_rsnxe_default(wpa_s->wpa, wpa_s->rsnxe, in wpa_supplicant_set_suites()
2145 &wpa_s->rsnxe_len)) { in wpa_supplicant_set_suites()
2148 return -1; in wpa_supplicant_set_suites()
2154 } else if (wpa_s->key_mgmt == WPA_KEY_MGMT_DPP) { in wpa_supplicant_set_suites()
2156 wpa_sm_set_pmk_from_pmksa(wpa_s->wpa); in wpa_supplicant_set_suites()
2158 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_DPP_PFS, ssid->dpp_pfs); in wpa_supplicant_set_suites()
2161 } else if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt)) { in wpa_supplicant_set_suites()
2164 if (wpa_key_mgmt_wpa_psk_no_sae(ssid->key_mgmt)) { in wpa_supplicant_set_suites()
2169 wpa_sm_set_pmk(wpa_s->wpa, psk, PMK_LEN, NULL, in wpa_supplicant_set_suites()
2176 if (wpa_key_mgmt_sae(ssid->key_mgmt) && in wpa_supplicant_set_suites()
2177 (ssid->sae_password || ssid->passphrase || ssid->ext_psk)) in wpa_supplicant_set_suites()
2184 return -1; in wpa_supplicant_set_suites()
2187 } else if (wpa_s->key_mgmt == WPA_KEY_MGMT_OWE) { in wpa_supplicant_set_suites()
2188 /* OWE Diffie-Hellman exchange in (Re)Association in wpa_supplicant_set_suites()
2193 wpa_sm_set_pmk_from_pmksa(wpa_s->wpa); in wpa_supplicant_set_suites()
2195 if (ssid->mode != WPAS_MODE_IBSS && in wpa_supplicant_set_suites()
2196 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_WIRED) && in wpa_supplicant_set_suites()
2197 (ssid->wpa_deny_ptk0_rekey == PTK0_REKEY_ALLOW_NEVER || in wpa_supplicant_set_suites()
2198 (ssid->wpa_deny_ptk0_rekey == PTK0_REKEY_ALLOW_LOCAL_OK && in wpa_supplicant_set_suites()
2199 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SAFE_PTK0_REKEYS)))) { in wpa_supplicant_set_suites()
2201 "Disable PTK0 rekey support - replaced with reconnect"); in wpa_supplicant_set_suites()
2202 wpa_s->deny_ptk0_rekey = 1; in wpa_supplicant_set_suites()
2203 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_DENY_PTK0_REKEY, 1); in wpa_supplicant_set_suites()
2205 wpa_s->deny_ptk0_rekey = 0; in wpa_supplicant_set_suites()
2206 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_DENY_PTK0_REKEY, 0); in wpa_supplicant_set_suites()
2209 if (wpa_key_mgmt_cross_akm(wpa_s->key_mgmt) && in wpa_supplicant_set_suites()
2210 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)) in wpa_supplicant_set_suites()
2227 case 0: /* Bits 0-7 */ in wpas_ext_capab_byte()
2229 case 1: /* Bits 8-15 */ in wpas_ext_capab_byte()
2230 if (wpa_s->conf->coloc_intf_reporting) { in wpas_ext_capab_byte()
2231 /* Bit 13 - Collocated Interference Reporting */ in wpas_ext_capab_byte()
2235 case 2: /* Bits 16-23 */ in wpas_ext_capab_byte()
2237 *pos |= 0x02; /* Bit 17 - WNM-Sleep Mode */ in wpas_ext_capab_byte()
2239 !wpa_s->disable_mbo_oce) && in wpas_ext_capab_byte()
2240 !wpa_s->conf->disable_btm) in wpas_ext_capab_byte()
2241 *pos |= 0x08; /* Bit 19 - BSS Transition */ in wpas_ext_capab_byte()
2244 case 3: /* Bits 24-31 */ in wpas_ext_capab_byte()
2246 *pos |= 0x02; /* Bit 25 - SSID List */ in wpas_ext_capab_byte()
2249 if (wpa_s->conf->interworking) in wpas_ext_capab_byte()
2250 *pos |= 0x80; /* Bit 31 - Interworking */ in wpas_ext_capab_byte()
2253 case 4: /* Bits 32-39 */ in wpas_ext_capab_byte()
2255 if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_QOS_MAPPING) in wpas_ext_capab_byte()
2256 *pos |= 0x01; /* Bit 32 - QoS Map */ in wpas_ext_capab_byte()
2259 case 5: /* Bits 40-47 */ in wpas_ext_capab_byte()
2261 if (wpa_s->conf->hs20) in wpas_ext_capab_byte()
2262 *pos |= 0x40; /* Bit 46 - WNM-Notification */ in wpas_ext_capab_byte()
2265 *pos |= 0x40; /* Bit 46 - WNM-Notification */ in wpas_ext_capab_byte()
2268 case 6: /* Bits 48-55 */ in wpas_ext_capab_byte()
2271 if (wpa_s->disable_scs_support) in wpas_ext_capab_byte()
2282 *pos |= 0x40; /* Bit 54 - SCS */ in wpas_ext_capab_byte()
2285 case 7: /* Bits 56-63 */ in wpas_ext_capab_byte()
2287 case 8: /* Bits 64-71 */ in wpas_ext_capab_byte()
2288 if (wpa_s->conf->ftm_responder) in wpas_ext_capab_byte()
2289 *pos |= 0x40; /* Bit 70 - FTM responder */ in wpas_ext_capab_byte()
2290 if (wpa_s->conf->ftm_initiator) in wpas_ext_capab_byte()
2291 *pos |= 0x80; /* Bit 71 - FTM initiator */ in wpas_ext_capab_byte()
2293 case 9: /* Bits 72-79 */ in wpas_ext_capab_byte()
2295 if (!wpa_s->disable_fils) in wpas_ext_capab_byte()
2299 case 10: /* Bits 80-87 */ in wpas_ext_capab_byte()
2302 if (wpa_s->disable_mscs_support) in wpas_ext_capab_byte()
2313 *pos |= 0x20; /* Bit 85 - Mirrored SCS */ in wpas_ext_capab_byte()
2326 if (len < wpa_s->extended_capa_len) in wpas_build_ext_capab()
2327 len = wpa_s->extended_capa_len; in wpas_build_ext_capab()
2331 return -1; in wpas_build_ext_capab()
2339 if (i < wpa_s->extended_capa_len) { in wpas_build_ext_capab()
2340 *pos &= ~wpa_s->extended_capa_mask[i]; in wpas_build_ext_capab()
2341 *pos |= wpa_s->extended_capa[i]; in wpas_build_ext_capab()
2346 len--; in wpas_build_ext_capab()
2361 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in wpas_valid_bss()
2375 for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) { in wpas_valid_ssid()
2405 struct wpa_radio_work *work = wpa_s->connect_work; in wpas_connect_work_done()
2410 wpa_s->connect_work = NULL; in wpas_connect_work_done()
2411 cwork = work->ctx; in wpas_connect_work_done()
2412 work->ctx = NULL; in wpas_connect_work_done()
2428 if (wpa_s->last_mac_addr_style == style && wpa_s->reassoc_same_ess) { in wpas_update_random_addr()
2432 if (ether_addr_equal(wpa_s->own_addr, ssid->mac_value)) in wpas_update_random_addr()
2434 } else if ((wpa_s->last_mac_addr_change.sec != 0 || in wpas_update_random_addr()
2435 wpa_s->last_mac_addr_change.usec != 0) && in wpas_update_random_addr()
2438 &wpa_s->last_mac_addr_change, in wpas_update_random_addr()
2439 wpa_s->conf->rand_addr_lifetime)) { in wpas_update_random_addr()
2449 return -1; in wpas_update_random_addr()
2452 os_memcpy(addr, wpa_s->perm_addr, ETH_ALEN); in wpas_update_random_addr()
2454 return -1; in wpas_update_random_addr()
2460 return -1; in wpas_update_random_addr()
2462 os_memcpy(addr, ssid->mac_value, ETH_ALEN); in wpas_update_random_addr()
2465 return -1; in wpas_update_random_addr()
2471 return -1; in wpas_update_random_addr()
2474 os_get_reltime(&wpa_s->last_mac_addr_change); in wpas_update_random_addr()
2475 wpa_s->mac_addr_changed = 1; in wpas_update_random_addr()
2476 wpa_s->last_mac_addr_style = style; in wpas_update_random_addr()
2481 return -1; in wpas_update_random_addr()
2493 if (wpa_s->wpa_state >= WPA_AUTHENTICATING || in wpas_update_random_addr_disassoc()
2494 !wpa_s->conf->preassoc_mac_addr) in wpas_update_random_addr_disassoc()
2497 return wpas_update_random_addr(wpa_s, wpa_s->conf->preassoc_mac_addr, in wpas_update_random_addr_disassoc()
2506 int *groups = conf->sae_groups; in wpa_s_setup_sae_pt()
2513 password = ssid->sae_password; in wpa_s_setup_sae_pt()
2515 password = ssid->passphrase; in wpa_s_setup_sae_pt()
2518 !wpa_key_mgmt_sae(ssid->key_mgmt) || in wpa_s_setup_sae_pt()
2519 (conf->sae_pwe == SAE_PWE_HUNT_AND_PECK && !ssid->sae_password_id && in wpa_s_setup_sae_pt()
2520 !wpa_key_mgmt_sae_ext_key(ssid->key_mgmt) && in wpa_s_setup_sae_pt()
2523 conf->sae_pwe == SAE_PWE_FORCE_HUNT_AND_PECK) { in wpa_s_setup_sae_pt()
2525 sae_deinit_pt(ssid->pt); in wpa_s_setup_sae_pt()
2526 ssid->pt = NULL; in wpa_s_setup_sae_pt()
2530 if (ssid->pt) in wpa_s_setup_sae_pt()
2532 ssid->pt = sae_derive_pt(groups, ssid->ssid, ssid->ssid_len, in wpa_s_setup_sae_pt()
2534 ssid->sae_password_id); in wpa_s_setup_sae_pt()
2542 os_free(wpa_s->sme.sae_rejected_groups); in wpa_s_clear_sae_rejected()
2543 wpa_s->sme.sae_rejected_groups = NULL; in wpa_s_clear_sae_rejected()
2545 if (wpa_s->extra_sae_rejected_groups) { in wpa_s_clear_sae_rejected()
2546 int i, *groups = wpa_s->extra_sae_rejected_groups; in wpa_s_clear_sae_rejected()
2552 int_array_add_unique(&wpa_s->sme.sae_rejected_groups, in wpa_s_clear_sae_rejected()
2566 return -1; in wpas_restore_permanent_mac_addr()
2568 wpa_s->mac_addr_changed = 0; in wpas_restore_permanent_mac_addr()
2572 return -1; in wpas_restore_permanent_mac_addr()
2582 * wpa_supplicant_associate - Request association
2596 wpa_s->own_disconnect_req = 0; in wpa_supplicant_associate()
2597 wpa_s->own_reconnect_req = 0; in wpa_supplicant_associate()
2603 wpabuf_free(wpa_s->pending_eapol_rx); in wpa_supplicant_associate()
2604 wpa_s->pending_eapol_rx = NULL; in wpa_supplicant_associate()
2606 if (ssid->mac_addr == WPAS_MAC_ADDR_STYLE_NOT_SET) in wpa_supplicant_associate()
2607 rand_style = wpa_s->conf->mac_addr; in wpa_supplicant_associate()
2609 rand_style = ssid->mac_addr; in wpa_supplicant_associate()
2611 wpa_s->eapol_failed = 0; in wpa_supplicant_associate()
2612 wpa_s->multi_ap_ie = 0; in wpa_supplicant_associate()
2617 wpa_s->wnm_mode = 0; in wpa_supplicant_associate()
2618 wpa_s->wnm_target_bss = NULL; in wpa_supplicant_associate()
2620 wpa_s->reassoc_same_bss = 0; in wpa_supplicant_associate()
2621 wpa_s->reassoc_same_ess = 0; in wpa_supplicant_associate()
2623 wpa_s->testing_resend_assoc = 0; in wpa_supplicant_associate()
2626 if (wpa_s->last_ssid == ssid) { in wpa_supplicant_associate()
2627 wpa_dbg(wpa_s, MSG_DEBUG, "Re-association to the same ESS"); in wpa_supplicant_associate()
2628 wpa_s->reassoc_same_ess = 1; in wpa_supplicant_associate()
2629 if (wpa_s->current_bss && wpa_s->current_bss == bss) { in wpa_supplicant_associate()
2633 wpa_s->reassoc_same_bss = 1; in wpa_supplicant_associate()
2635 } else if (wpa_s->current_bss && wpa_s->current_bss != bss) { in wpa_supplicant_associate()
2636 os_get_reltime(&wpa_s->roam_start); in wpa_supplicant_associate()
2644 wpa_s_setup_sae_pt(wpa_s->conf, ssid, false); in wpa_supplicant_associate()
2654 wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid); in wpa_supplicant_associate()
2656 wpa_s->mac_addr_changed) { in wpa_supplicant_associate()
2660 wpa_s->last_ssid = ssid; in wpa_supplicant_associate()
2663 ibss_rsn_deinit(wpa_s->ibss_rsn); in wpa_supplicant_associate()
2664 wpa_s->ibss_rsn = NULL; in wpa_supplicant_associate()
2666 if (ssid->mode == WPAS_MODE_IBSS && in wpa_supplicant_associate()
2667 !(ssid->key_mgmt & (WPA_KEY_MGMT_NONE | WPA_KEY_MGMT_WPA_NONE))) { in wpa_supplicant_associate()
2674 if (ssid->mode == WPAS_MODE_AP || ssid->mode == WPAS_MODE_P2P_GO || in wpa_supplicant_associate()
2675 ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION) { in wpa_supplicant_associate()
2677 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_AP)) { in wpa_supplicant_associate()
2684 if (ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION) in wpa_supplicant_associate()
2688 wpa_s->current_bss = bss; in wpa_supplicant_associate()
2696 if (ssid->mode == WPAS_MODE_MESH) { in wpa_supplicant_associate()
2698 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_MESH)) { in wpa_supplicant_associate()
2704 ssid->frequency = bss->freq; in wpa_supplicant_associate()
2710 wpa_s->current_bss = bss; in wpa_supplicant_associate()
2721 * gets called. This is needed at least for RSN pre-authentication where in wpa_supplicant_associate()
2734 wpa_tdls_ap_ies(wpa_s->wpa, wpa_bss_ie_ptr(bss), bss->ie_len); in wpa_supplicant_associate()
2741 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_supplicant_associate()
2742 ssid->mode == WPAS_MODE_INFRA) { in wpa_supplicant_associate()
2747 if (wpa_s->connect_work) { in wpa_supplicant_associate()
2758 if (ssid->mode == WPAS_MODE_IBSS || ssid->mode == WPAS_MODE_MESH) { in wpa_supplicant_associate()
2760 wpa_s->sme.auth_alg = WPA_AUTH_ALG_OPEN; in wpa_supplicant_associate()
2770 cwork->bss = bss; in wpa_supplicant_associate()
2771 cwork->ssid = ssid; in wpa_supplicant_associate()
2773 if (radio_add_work(wpa_s, bss ? bss->freq : 0, "connect", 1, in wpa_supplicant_associate()
2782 return (bss->caps & (IEEE80211_CAP_ESS | IEEE80211_CAP_IBSS)) == in bss_is_ibss()
2795 hw_mode = ieee80211_freq_to_chan(ssid->frequency, &channel); in drv_supports_vht()
2798 for (i = 0; wpa_s->hw.modes && i < wpa_s->hw.num_modes; i++) { in drv_supports_vht()
2799 if (wpa_s->hw.modes[i].mode == hw_mode) { in drv_supports_vht()
2800 mode = &wpa_s->hw.modes[i]; in drv_supports_vht()
2808 return mode->vht_capab != 0; in drv_supports_vht()
2821 chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR)) in ibss_mesh_is_80mhz_avail()
2834 for (j = 0; j < wpa_s->last_scan_res_used; j++) { in ibss_find_existing_bss()
2835 struct wpa_bss *bss = wpa_s->last_scan_res[j]; in ibss_find_existing_bss()
2840 if (ssid->ssid_len == bss->ssid_len && in ibss_find_existing_bss()
2841 os_memcmp(ssid->ssid, bss->ssid, bss->ssid_len) == 0) in ibss_find_existing_bss()
2853 if (ssid->mode == WPAS_MODE_IBSS && in ibss_mesh_can_use_ht()
2854 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_HT_IBSS)) in ibss_mesh_can_use_ht()
2857 if (wpa_s->group_cipher == WPA_CIPHER_WEP40 || in ibss_mesh_can_use_ht()
2858 wpa_s->group_cipher == WPA_CIPHER_WEP104 || in ibss_mesh_can_use_ht()
2859 wpa_s->pairwise_cipher == WPA_CIPHER_TKIP) { in ibss_mesh_can_use_ht()
2869 if (ssid->disable_ht) in ibss_mesh_can_use_ht()
2881 if (mode->mode != HOSTAPD_MODE_IEEE80211A) in ibss_mesh_can_use_vht()
2888 if (ssid->mode == WPAS_MODE_IBSS && in ibss_mesh_can_use_vht()
2889 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_VHT_IBSS)) in ibss_mesh_can_use_vht()
2896 if (ssid->disable_vht) in ibss_mesh_can_use_vht()
2910 if (ssid->disable_he) in ibss_mesh_can_use_he()
2914 switch (mode->mode) { in ibss_mesh_can_use_he()
2918 return mode->he_capab[ieee80211_mode].he_supported; in ibss_mesh_can_use_he()
2930 if (ssid->disable_eht) in ibss_mesh_can_use_eht()
2933 switch(mode->mode) { in ibss_mesh_can_use_eht()
2937 return mode->eht_capab[ieee80211_mode].eht_supported; in ibss_mesh_can_use_eht()
2957 int ht40 = -1; in ibss_mesh_select_40mhz()
2959 if (!freq->ht_enabled) in ibss_mesh_select_40mhz()
2962 for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) { in ibss_mesh_select_40mhz()
2963 pri_chan = &mode->channels[chan_idx]; in ibss_mesh_select_40mhz()
2964 if (pri_chan->chan == freq->channel) in ibss_mesh_select_40mhz()
2972 if (pri_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR)) in ibss_mesh_select_40mhz()
2976 if (ssid->disable_ht40) in ibss_mesh_select_40mhz()
2980 /* Check/setup HT40+/HT40- */ in ibss_mesh_select_40mhz()
2982 if (ht40plus[j] == freq->channel) { in ibss_mesh_select_40mhz()
2989 for (i = 0; i < mode->num_channels; i++) { in ibss_mesh_select_40mhz()
2990 sec_chan = &mode->channels[i]; in ibss_mesh_select_40mhz()
2991 if (sec_chan->chan == freq->channel + ht40 * 4) in ibss_mesh_select_40mhz()
2999 if (sec_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR)) in ibss_mesh_select_40mhz()
3002 if (ht40 == -1) { in ibss_mesh_select_40mhz()
3003 if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS)) in ibss_mesh_select_40mhz()
3006 if (!(pri_chan->flag & HOSTAPD_CHAN_HT40PLUS)) in ibss_mesh_select_40mhz()
3009 freq->sec_channel_offset = ht40; in ibss_mesh_select_40mhz()
3018 freq->sec_channel_offset = 0; in ibss_mesh_select_40mhz()
3026 freq->sec_channel_offset = 0; in ibss_mesh_select_40mhz()
3033 freq->freq = hw_get_freq(mode, sec_chan->chan); in ibss_mesh_select_40mhz()
3034 freq->sec_channel_offset = -freq->sec_channel_offset; in ibss_mesh_select_40mhz()
3035 freq->channel = sec_chan->chan; in ibss_mesh_select_40mhz()
3038 freq->sec_channel_offset = 0; in ibss_mesh_select_40mhz()
3047 freq->channel, freq->sec_channel_offset); in ibss_mesh_select_40mhz()
3069 u8 channel = freq->channel; in ibss_mesh_select_80_160mhz()
3071 if (!freq->vht_enabled && !freq->he_enabled) in ibss_mesh_select_80_160mhz()
3077 seg0 = freq->channel + 2 * freq->sec_channel_offset; in ibss_mesh_select_80_160mhz()
3079 if (freq->sec_channel_offset == 0) { in ibss_mesh_select_80_160mhz()
3082 if (freq->ht_enabled && !is_6ghz) in ibss_mesh_select_80_160mhz()
3085 if (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_USE_HT) in ibss_mesh_select_80_160mhz()
3090 if (freq->freq >= bw80[j] && in ibss_mesh_select_80_160mhz()
3091 freq->freq < bw80[j] + 80) in ibss_mesh_select_80_160mhz()
3111 if ((mode->he_capab[ieee80211_mode].phy_cap[ in ibss_mesh_select_80_160mhz()
3116 if (freq->freq == bw160[j]) { in ibss_mesh_select_80_160mhz()
3124 if (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_80P80MHZ) { in ibss_mesh_select_80_160mhz()
3128 if (j == k || abs(bw80[j] - bw80[k]) == 80) in ibss_mesh_select_80_160mhz()
3142 if (chan->flag & (HOSTAPD_CHAN_DISABLED | in ibss_mesh_select_80_160mhz()
3158 } else if (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ) { in ibss_mesh_select_80_160mhz()
3159 if (freq->freq == 5180) { in ibss_mesh_select_80_160mhz()
3163 } else if (freq->freq == 5520) { in ibss_mesh_select_80_160mhz()
3171 if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq, in ibss_mesh_select_80_160mhz()
3172 freq->channel, ssid->enable_edmg, in ibss_mesh_select_80_160mhz()
3173 ssid->edmg_channel, freq->ht_enabled, in ibss_mesh_select_80_160mhz()
3174 freq->vht_enabled, freq->he_enabled, in ibss_mesh_select_80_160mhz()
3175 freq->eht_enabled, in ibss_mesh_select_80_160mhz()
3176 freq->sec_channel_offset, in ibss_mesh_select_80_160mhz()
3178 &mode->he_capab[ieee80211_mode], in ibss_mesh_select_80_160mhz()
3179 &mode->eht_capab[ieee80211_mode], 0) != 0) in ibss_mesh_select_80_160mhz()
3185 freq->center_freq1, freq->center_freq2, freq->bandwidth); in ibss_mesh_select_80_160mhz()
3194 int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode); in ibss_mesh_setup_freq()
3201 freq->freq = ssid->frequency; in ibss_mesh_setup_freq()
3203 if (ssid->mode == WPAS_MODE_IBSS && !ssid->fixed_freq) { in ibss_mesh_setup_freq()
3209 bss->freq); in ibss_mesh_setup_freq()
3210 freq->freq = bss->freq; in ibss_mesh_setup_freq()
3215 hw_mode = ieee80211_freq_to_chan(freq->freq, &channel); in ibss_mesh_setup_freq()
3216 mode = get_mode(wpa_s->hw.modes, wpa_s->hw.num_modes, in ibss_mesh_setup_freq()
3217 hw_mode, is_6ghz_freq(ssid->frequency)); in ibss_mesh_setup_freq()
3225 is_6ghz = is_6ghz_freq(freq->freq); in ibss_mesh_setup_freq()
3227 freq->ht_enabled = 0; in ibss_mesh_setup_freq()
3228 freq->vht_enabled = 0; in ibss_mesh_setup_freq()
3229 freq->he_enabled = 0; in ibss_mesh_setup_freq()
3230 freq->eht_enabled = 0; in ibss_mesh_setup_freq()
3233 freq->ht_enabled = ibss_mesh_can_use_ht(wpa_s, ssid, mode); in ibss_mesh_setup_freq()
3234 if (freq->ht_enabled) in ibss_mesh_setup_freq()
3235 freq->vht_enabled = ibss_mesh_can_use_vht(wpa_s, ssid, mode); in ibss_mesh_setup_freq()
3236 if (freq->vht_enabled || (freq->ht_enabled && is_24ghz) || is_6ghz) in ibss_mesh_setup_freq()
3237 freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode, in ibss_mesh_setup_freq()
3239 freq->channel = channel; in ibss_mesh_setup_freq()
3241 if (mode->mode == HOSTAPD_MODE_IEEE80211A) { in ibss_mesh_setup_freq()
3245 freq->he_enabled = freq->vht_enabled = false; in ibss_mesh_setup_freq()
3248 if (freq->he_enabled) in ibss_mesh_setup_freq()
3249 freq->eht_enabled = ibss_mesh_can_use_eht(wpa_s, ssid, mode, in ibss_mesh_setup_freq()
3263 dl_list_for_each(req, &wpa_s->fils_hlp_req, struct fils_hlp_req, in wpas_add_fils_hlp_req()
3265 rem_len = ie_buf_len - ie_len; in wpas_add_fils_hlp_req()
3266 pos = wpabuf_head(req->pkt); in wpas_add_fils_hlp_req()
3268 hlp_len = wpabuf_len(req->pkt); in wpas_add_fils_hlp_req()
3272 "FILS: Cannot fit HLP - rem_len=%lu to_fill=%lu", in wpas_add_fils_hlp_req()
3286 os_memcpy(buf, req->dst, ETH_ALEN); in wpas_add_fils_hlp_req()
3289 os_memcpy(buf, wpa_s->own_addr, ETH_ALEN); in wpas_add_fils_hlp_req()
3295 os_memcpy(buf, pos, len - hdr_len); in wpas_add_fils_hlp_req()
3296 buf += len - hdr_len; in wpas_add_fils_hlp_req()
3297 pos += len - hdr_len; in wpas_add_fils_hlp_req()
3299 hlp_len -= len - hdr_len; in wpas_add_fils_hlp_req()
3301 rem_len -= 2 + len; in wpas_add_fils_hlp_req()
3313 hlp_len -= len; in wpas_add_fils_hlp_req()
3315 rem_len -= 2 + len; in wpas_add_fils_hlp_req()
3325 return (((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_is_fils_supported()
3326 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS)) || in wpa_is_fils_supported()
3327 (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_is_fils_supported()
3328 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD))); in wpa_is_fils_supported()
3335 return (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpa_is_fils_sk_pfs_supported()
3336 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SUPPORT_FILS); in wpa_is_fils_sk_pfs_supported()
3379 if (wpa_s->enable_dscp_policy_capa) in wpas_populate_wfa_capa()
3389 /* Wi-Fi Alliance element */ in wpas_populate_wfa_capa()
3401 wpabuf_put_u8(wfa_ie, buf_len - 2); in wpas_populate_wfa_capa()
3443 dl_list_for_each(req, &wpa_s->fils_hlp_req, struct fils_hlp_req, in wpas_populate_assoc_ies()
3445 max_wpa_ie_len += 3 + 2 * ETH_ALEN + 6 + wpabuf_len(req->pkt) + in wpas_populate_assoc_ies()
3446 2 + 2 * wpabuf_len(req->pkt) / 255; in wpas_populate_assoc_ies()
3460 wpa_key_mgmt_wpa(ssid->key_mgmt)) { in wpas_populate_assoc_ies()
3463 const u8 *addr = bss->bssid; in wpas_populate_assoc_ies()
3465 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpas_populate_assoc_ies()
3466 (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_MLO) && in wpas_populate_assoc_ies()
3467 !is_zero_ether_addr(bss->mld_addr)) in wpas_populate_assoc_ies()
3468 addr = bss->mld_addr; in wpas_populate_assoc_ies()
3470 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) && in wpas_populate_assoc_ies()
3471 wpa_s->valid_links) in wpas_populate_assoc_ies()
3472 addr = wpa_s->ap_mld_addr; in wpas_populate_assoc_ies()
3474 try_opportunistic = (ssid->proactive_key_caching < 0 ? in wpas_populate_assoc_ies()
3475 wpa_s->conf->okc : in wpas_populate_assoc_ies()
3476 ssid->proactive_key_caching) && in wpas_populate_assoc_ies()
3477 (ssid->proto & WPA_PROTO_RSN); in wpas_populate_assoc_ies()
3479 if (wpa_key_mgmt_fils(ssid->key_mgmt)) in wpas_populate_assoc_ies()
3482 if (pmksa_cache_set_current(wpa_s->wpa, NULL, addr, in wpas_populate_assoc_ies()
3485 eapol_sm_notify_pmkid_attempt(wpa_s->eapol); in wpas_populate_assoc_ies()
3500 (ssid->key_mgmt & WPA_KEY_MGMT_OSEN)) { in wpas_populate_assoc_ies()
3511 } else if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) && bss && in wpas_populate_assoc_ies()
3512 wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) { in wpas_populate_assoc_ies()
3514 * Both WPA and non-WPA IEEE 802.1X enabled in configuration - in wpas_populate_assoc_ies()
3515 * use non-WPA since the scan results did not indicate that the in wpas_populate_assoc_ies()
3520 wpa_s->wpa_proto = 0; in wpas_populate_assoc_ies()
3521 } else if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) { in wpas_populate_assoc_ies()
3532 } else if (ssid->key_mgmt & WPA_KEY_MGMT_WPS) { in wpas_populate_assoc_ies()
3542 if (!bss || (bss->caps & IEEE80211_CAP_PRIVACY)) in wpas_populate_assoc_ies()
3543 params->wps = WPS_MODE_PRIVACY; in wpas_populate_assoc_ies()
3545 params->wps = WPS_MODE_OPEN; in wpas_populate_assoc_ies()
3546 wpa_s->wpa_proto = 0; in wpas_populate_assoc_ies()
3551 wpa_s->wpa_proto = 0; in wpas_populate_assoc_ies()
3555 if (ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) { in wpas_populate_assoc_ies()
3556 if (ssid->leap) { in wpas_populate_assoc_ies()
3557 if (ssid->non_leap == 0) in wpas_populate_assoc_ies()
3566 wpa_sm_set_reset_fils_completed(wpa_s->wpa, 0); in wpas_populate_assoc_ies()
3568 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD) && in wpas_populate_assoc_ies()
3569 ssid->eap.erp && wpa_key_mgmt_fils(wpa_s->key_mgmt) && in wpas_populate_assoc_ies()
3570 eapol_sm_get_erp_info(wpa_s->eapol, &ssid->eap, &username, in wpas_populate_assoc_ies()
3573 (!wpa_s->last_con_fail_realm || in wpas_populate_assoc_ies()
3574 wpa_s->last_con_fail_realm_len != realm_len || in wpas_populate_assoc_ies()
3575 os_memcmp(wpa_s->last_con_fail_realm, realm, realm_len) != 0)) { in wpas_populate_assoc_ies()
3577 params->fils_erp_username = username; in wpas_populate_assoc_ies()
3578 params->fils_erp_username_len = username_len; in wpas_populate_assoc_ies()
3579 params->fils_erp_realm = realm; in wpas_populate_assoc_ies()
3580 params->fils_erp_realm_len = realm_len; in wpas_populate_assoc_ies()
3581 params->fils_erp_next_seq_num = next_seq_num; in wpas_populate_assoc_ies()
3582 params->fils_erp_rrk = rrk; in wpas_populate_assoc_ies()
3583 params->fils_erp_rrk_len = rrk_len; in wpas_populate_assoc_ies()
3587 } else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD) && in wpas_populate_assoc_ies()
3588 ssid->eap.erp && wpa_key_mgmt_fils(wpa_s->key_mgmt) && in wpas_populate_assoc_ies()
3595 if (wpa_key_mgmt_sae(wpa_s->key_mgmt)) in wpas_populate_assoc_ies()
3600 if (ssid->auth_alg) { in wpas_populate_assoc_ies()
3601 algs = ssid->auth_alg; in wpas_populate_assoc_ies()
3615 if (wpa_s->global->p2p) { in wpas_populate_assoc_ies()
3620 len = max_wpa_ie_len - wpa_ie_len; in wpas_populate_assoc_ies()
3622 ssid->p2p_group); in wpas_populate_assoc_ies()
3627 wpa_s->cross_connect_disallowed = 0; in wpas_populate_assoc_ies()
3632 wpa_s->cross_connect_disallowed = in wpas_populate_assoc_ies()
3637 wpa_s->cross_connect_disallowed ? in wpas_populate_assoc_ies()
3642 os_memset(wpa_s->p2p_ip_addr_info, 0, sizeof(wpa_s->p2p_ip_addr_info)); in wpas_populate_assoc_ies()
3649 max_wpa_ie_len - in wpas_populate_assoc_ies()
3662 if (ssid->p2p_group) in wpas_populate_assoc_ies()
3678 wpa_ie_len - (pos - wpa_ie)); in wpas_populate_assoc_ies()
3684 if (ssid->max_idle && wpa_ie_len + 5 <= max_wpa_ie_len) { in wpas_populate_assoc_ies()
3689 WPA_PUT_LE16(pos, ssid->max_idle); in wpas_populate_assoc_ies()
3707 len = max_wpa_ie_len - wpa_ie_len; in wpas_populate_assoc_ies()
3720 if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) { in wpas_populate_assoc_ies()
3721 struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]; in wpas_populate_assoc_ies()
3724 len = max_wpa_ie_len - wpa_ie_len; in wpas_populate_assoc_ies()
3733 if (wpa_s->fst_ies) { in wpas_populate_assoc_ies()
3734 int fst_ies_len = wpabuf_len(wpa_s->fst_ies); in wpas_populate_assoc_ies()
3738 wpabuf_head(wpa_s->fst_ies), fst_ies_len); in wpas_populate_assoc_ies()
3746 if (!wpa_s->disable_mbo_oce && mbo_ie) { in wpas_populate_assoc_ies()
3750 max_wpa_ie_len - wpa_ie_len, in wpas_populate_assoc_ies()
3763 max_wpa_ie_len - wpa_ie_len); in wpas_populate_assoc_ies()
3775 ssid->key_mgmt == WPA_KEY_MGMT_OWE && in wpas_populate_assoc_ies()
3776 !(wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_OWE_OFFLOAD_STA)) { in wpas_populate_assoc_ies()
3780 if (ssid->owe_group) { in wpas_populate_assoc_ies()
3781 group = ssid->owe_group; in wpas_populate_assoc_ies()
3782 } else if (wpa_s->assoc_status_code == in wpas_populate_assoc_ies()
3784 if (wpa_s->last_owe_group == 19) in wpas_populate_assoc_ies()
3786 else if (wpa_s->last_owe_group == 20) in wpas_populate_assoc_ies()
3794 wpa_s->last_owe_group = group; in wpas_populate_assoc_ies()
3796 owe_ie = owe_build_assoc_req(wpa_s->wpa, group); in wpas_populate_assoc_ies()
3798 wpabuf_len(owe_ie) <= max_wpa_ie_len - wpa_ie_len) { in wpas_populate_assoc_ies()
3809 wpa_sm_get_key_mgmt(wpa_s->wpa) == WPA_KEY_MGMT_DPP && in wpas_populate_assoc_ies()
3810 ssid->dpp_netaccesskey && in wpas_populate_assoc_ies()
3811 ssid->dpp_pfs != 2 && !ssid->dpp_pfs_fallback) { in wpas_populate_assoc_ies()
3814 pmksa = pmksa_cache_get_current(wpa_s->wpa); in wpas_populate_assoc_ies()
3815 if (!pmksa || !pmksa->dpp_pfs) in wpas_populate_assoc_ies()
3818 dpp_pfs_free(wpa_s->dpp_pfs); in wpas_populate_assoc_ies()
3819 wpa_s->dpp_pfs = dpp_pfs_init(ssid->dpp_netaccesskey, in wpas_populate_assoc_ies()
3820 ssid->dpp_netaccesskey_len); in wpas_populate_assoc_ies()
3821 if (!wpa_s->dpp_pfs) { in wpas_populate_assoc_ies()
3826 if (wpabuf_len(wpa_s->dpp_pfs->ie) <= in wpas_populate_assoc_ies()
3827 max_wpa_ie_len - wpa_ie_len) { in wpas_populate_assoc_ies()
3829 wpabuf_head(wpa_s->dpp_pfs->ie), in wpas_populate_assoc_ies()
3830 wpabuf_len(wpa_s->dpp_pfs->ie)); in wpas_populate_assoc_ies()
3831 wpa_ie_len += wpabuf_len(wpa_s->dpp_pfs->ie); in wpas_populate_assoc_ies()
3842 if (bss && wpa_key_mgmt_ft(wpa_sm_get_key_mgmt(wpa_s->wpa))) { in wpas_populate_assoc_ies()
3848 const u8 *wpa_md = wpa_sm_get_ft_md(wpa_s->wpa); in wpas_populate_assoc_ies()
3854 wpa_s->wpa, wpa_ie + wpa_ie_len, in wpas_populate_assoc_ies()
3855 max_wpa_ie_len - wpa_ie_len, mdie); in wpas_populate_assoc_ies()
3859 if (len > 0 && wpa_s->sme.ft_used && in wpas_populate_assoc_ies()
3860 wpa_sm_has_ft_keys(wpa_s->wpa, md)) { in wpas_populate_assoc_ies()
3862 "SME: Trying to use FT over-the-air"); in wpas_populate_assoc_ies()
3871 if (wpa_s->rsnxe_override_assoc && in wpas_populate_assoc_ies()
3872 wpabuf_len(wpa_s->rsnxe_override_assoc) <= in wpas_populate_assoc_ies()
3873 max_wpa_ie_len - wpa_ie_len) { in wpas_populate_assoc_ies()
3876 wpabuf_head(wpa_s->rsnxe_override_assoc), in wpas_populate_assoc_ies()
3877 wpabuf_len(wpa_s->rsnxe_override_assoc)); in wpas_populate_assoc_ies()
3878 wpa_ie_len += wpabuf_len(wpa_s->rsnxe_override_assoc); in wpas_populate_assoc_ies()
3881 if (wpa_s->rsnxe_len > 0 && in wpas_populate_assoc_ies()
3882 wpa_s->rsnxe_len <= max_wpa_ie_len - wpa_ie_len) { in wpas_populate_assoc_ies()
3883 os_memcpy(wpa_ie + wpa_ie_len, wpa_s->rsnxe, wpa_s->rsnxe_len); in wpas_populate_assoc_ies()
3884 wpa_ie_len += wpa_s->rsnxe_len; in wpas_populate_assoc_ies()
3889 if (wpa_s->disable_mscs_support) in wpas_populate_assoc_ies()
3893 wpa_s->robust_av.valid_config) { in wpas_populate_assoc_ies()
3902 wpa_s->robust_av.frame_classifier_len; in wpas_populate_assoc_ies()
3910 wpas_populate_mscs_descriptor_ie(&wpa_s->robust_av, mscs_ie); in wpas_populate_assoc_ies()
3927 if (ssid->multi_ap_backhaul_sta) { in wpas_populate_assoc_ies()
3932 multi_ap.profile = ssid->multi_ap_profile; in wpas_populate_assoc_ies()
3935 max_wpa_ie_len - wpa_ie_len, in wpas_populate_assoc_ies()
3939 "Multi-AP: Failed to build Multi-AP IE"); in wpas_populate_assoc_ies()
3946 params->wpa_ie = wpa_ie; in wpas_populate_assoc_ies()
3947 params->wpa_ie_len = wpa_ie_len; in wpas_populate_assoc_ies()
3948 params->auth_alg = algs; in wpas_populate_assoc_ies()
3963 wpa_ie = wpas_populate_assoc_ies(wpa_s, wpa_s->current_bss, in wpas_update_owe_connect_params()
3964 wpa_s->current_ssid, &params, NULL); in wpas_update_owe_connect_params()
3981 if (wpa_s->auth_alg != WPA_AUTH_ALG_OPEN) in wpas_update_fils_connect_params()
3985 wpa_ie = wpas_populate_assoc_ies(wpa_s, wpa_s->current_bss, in wpas_update_fils_connect_params()
3986 wpa_s->current_ssid, &params, &mask); in wpas_update_fils_connect_params()
3991 wpa_s->auth_alg = params.auth_alg; in wpas_update_fils_connect_params()
4019 * For supporting non-contiguous (aggregated) channels and for supporting
4039 if (!(result.channels & BIT(primary_channel - 1))) { in get_edmg_intersection()
4058 * bw configuration can have value between 4-7. in get_edmg_intersection()
4091 if (!wpa_s->hw.modes) in get_supported_edmg()
4094 hw_mode = ieee80211_freq_to_chan(freq->freq, &primary_channel); in get_supported_edmg()
4098 mode = get_mode(wpa_s->hw.modes, wpa_s->hw.num_modes, hw_mode, false); in get_supported_edmg()
4102 return get_edmg_intersection(mode->edmg, request_edmg, primary_channel); in get_supported_edmg()
4122 if (wpa_s->wpa_state != WPA_COMPLETED || !wpa_s->current_ssid || in wpas_update_mbo_connect_params()
4123 !wpa_s->current_bss || in wpas_update_mbo_connect_params()
4124 !wpa_bss_get_vendor_ie(wpa_s->current_bss, MBO_IE_VENDOR_TYPE)) in wpas_update_mbo_connect_params()
4128 wpa_ie = wpas_populate_assoc_ies(wpa_s, wpa_s->current_bss, in wpas_update_mbo_connect_params()
4129 wpa_s->current_ssid, &params, NULL); in wpas_update_mbo_connect_params()
4141 struct wpa_connect_work *cwork = work->ctx; in wpas_start_assoc_cb()
4142 struct wpa_bss *bss = cwork->bss; in wpas_start_assoc_cb()
4143 struct wpa_ssid *ssid = cwork->ssid; in wpas_start_assoc_cb()
4144 struct wpa_supplicant *wpa_s = work->wpa_s; in wpas_start_assoc_cb()
4166 wpa_s->roam_in_progress = false; in wpas_start_assoc_cb()
4168 wpa_s->bss_trans_mgmt_in_progress = false; in wpas_start_assoc_cb()
4172 if (work->started) { in wpas_start_assoc_cb()
4173 wpa_s->connect_work = NULL; in wpas_start_assoc_cb()
4183 wpa_s->connect_work = work; in wpas_start_assoc_cb()
4185 if (cwork->bss_removed || !wpas_valid_bss_ssid(wpa_s, bss, ssid) || in wpas_start_assoc_cb()
4187 …wpa_dbg(wpa_s, MSG_DEBUG, "BSS/SSID entry for association not valid anymore - drop connection atte… in wpas_start_assoc_cb()
4193 * Set the current AP's BSSID (for non-MLO connection) or MLD address in wpas_start_assoc_cb()
4195 * handled by SME-in-driver. If wpa_supplicant is in disconnected state, in wpas_start_assoc_cb()
4196 * prev_bssid will be zero as both wpa_s->valid_links and wpa_s->bssid in wpas_start_assoc_cb()
4200 wpa_s->valid_links ? wpa_s->ap_mld_addr : wpa_s->bssid, in wpas_start_assoc_cb()
4203 wpa_s->reassociate = 0; in wpas_start_assoc_cb()
4204 wpa_s->eap_expected_failure = 0; in wpas_start_assoc_cb()
4208 wpa_sm_set_assoc_wpa_ie(wpa_s->wpa, NULL, 0); in wpas_start_assoc_cb()
4209 wpa_sm_set_assoc_rsnxe(wpa_s->wpa, NULL, 0); in wpas_start_assoc_cb()
4210 wpa_s->rsnxe_len = 0; in wpas_start_assoc_cb()
4212 wpa_s->mscs_setup_done = false; in wpas_start_assoc_cb()
4227 " (SSID='%s' freq=%d MHz)", MAC2STR(bss->bssid), in wpas_start_assoc_cb()
4228 wpa_ssid_txt(bss->ssid, bss->ssid_len), bss->freq); in wpas_start_assoc_cb()
4229 bssid_changed = !is_zero_ether_addr(wpa_s->bssid); in wpas_start_assoc_cb()
4230 os_memset(wpa_s->bssid, 0, ETH_ALEN); in wpas_start_assoc_cb()
4231 os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN); in wpas_start_assoc_cb()
4238 wpa_sm_set_ft_params(wpa_s->wpa, ie, ie ? 2 + ie[1] : 0); in wpas_start_assoc_cb()
4241 wpa_ft_prepare_auth_request(wpa_s->wpa, ie); in wpas_start_assoc_cb()
4245 } else if ((ssid->ssid == NULL || ssid->ssid_len == 0) && in wpas_start_assoc_cb()
4246 wpa_s->conf->ap_scan == 2 && in wpas_start_assoc_cb()
4247 (ssid->key_mgmt & WPA_KEY_MGMT_WPS)) { in wpas_start_assoc_cb()
4251 wpa_s->scan_req = MANUAL_SCAN_REQ; in wpas_start_assoc_cb()
4252 wpa_s->reassociate = 1; in wpas_start_assoc_cb()
4259 wpa_ssid_txt(ssid->ssid, ssid->ssid_len)); in wpas_start_assoc_cb()
4261 os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN); in wpas_start_assoc_cb()
4263 os_memset(wpa_s->pending_bssid, 0, ETH_ALEN); in wpas_start_assoc_cb()
4265 if (!wpa_s->pno) in wpas_start_assoc_cb()
4270 wpa_clear_keys(wpa_s, bss ? bss->bssid : NULL); in wpas_start_assoc_cb()
4272 cipher_pairwise = wpa_s->pairwise_cipher; in wpas_start_assoc_cb()
4273 cipher_group = wpa_s->group_cipher; in wpas_start_assoc_cb()
4274 cipher_group_mgmt = wpa_s->mgmt_group_cipher; in wpas_start_assoc_cb()
4275 if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE || in wpas_start_assoc_cb()
4276 wpa_s->key_mgmt == WPA_KEY_MGMT_IEEE8021X_NO_WPA) { in wpas_start_assoc_cb()
4277 if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE) in wpas_start_assoc_cb()
4286 if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPS) in wpas_start_assoc_cb()
4290 if (wpa_s->key_mgmt == WPA_KEY_MGMT_IEEE8021X_NO_WPA) { in wpas_start_assoc_cb()
4291 if ((ssid->eapol_flags & in wpas_start_assoc_cb()
4297 /* Assume that dynamic WEP-104 keys will be used and in wpas_start_assoc_cb()
4305 if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE) { in wpas_start_assoc_cb()
4312 old_ssid = wpa_s->current_ssid; in wpas_start_assoc_cb()
4313 wpa_s->current_ssid = ssid; in wpas_start_assoc_cb()
4317 params.ssid = bss->ssid; in wpas_start_assoc_cb()
4318 params.ssid_len = bss->ssid_len; in wpas_start_assoc_cb()
4319 if (!wpas_driver_bss_selection(wpa_s) || ssid->bssid_set || in wpas_start_assoc_cb()
4320 wpa_s->key_mgmt == WPA_KEY_MGMT_WPS) { in wpas_start_assoc_cb()
4324 MAC2STR(bss->bssid), bss->freq, in wpas_start_assoc_cb()
4325 ssid->bssid_set, in wpas_start_assoc_cb()
4326 wpa_s->key_mgmt == WPA_KEY_MGMT_WPS); in wpas_start_assoc_cb()
4327 params.bssid = bss->bssid; in wpas_start_assoc_cb()
4328 params.freq.freq = bss->freq; in wpas_start_assoc_cb()
4330 params.bssid_hint = bss->bssid; in wpas_start_assoc_cb()
4331 params.freq_hint = bss->freq; in wpas_start_assoc_cb()
4334 if (ssid->bssid_hint_set) in wpas_start_assoc_cb()
4335 params.bssid_hint = ssid->bssid_hint; in wpas_start_assoc_cb()
4337 params.ssid = ssid->ssid; in wpas_start_assoc_cb()
4338 params.ssid_len = ssid->ssid_len; in wpas_start_assoc_cb()
4339 params.pbss = (ssid->pbss != 2) ? ssid->pbss : 0; in wpas_start_assoc_cb()
4342 if (ssid->mode == WPAS_MODE_IBSS && ssid->bssid_set && in wpas_start_assoc_cb()
4343 wpa_s->conf->ap_scan == 2) { in wpas_start_assoc_cb()
4344 params.bssid = ssid->bssid; in wpas_start_assoc_cb()
4349 if ((ssid->mode == WPAS_MODE_IBSS || ssid->mode == WPAS_MODE_MESH) && in wpas_start_assoc_cb()
4350 ssid->frequency > 0 && params.freq.freq == 0) in wpas_start_assoc_cb()
4353 if (ssid->mode == WPAS_MODE_IBSS) { in wpas_start_assoc_cb()
4354 params.fixed_freq = ssid->fixed_freq; in wpas_start_assoc_cb()
4355 if (ssid->beacon_int) in wpas_start_assoc_cb()
4356 params.beacon_int = ssid->beacon_int; in wpas_start_assoc_cb()
4358 params.beacon_int = wpa_s->conf->beacon_int; in wpas_start_assoc_cb()
4361 if (bss && ssid->enable_edmg) in wpas_start_assoc_cb()
4380 if (ssid->edmg_channel) { in wpas_start_assoc_cb()
4385 hw_mode = ieee80211_freq_to_chan(bss->freq, in wpas_start_assoc_cb()
4390 hostapd_encode_edmg_chan(ssid->enable_edmg, in wpas_start_assoc_cb()
4391 ssid->edmg_channel, in wpas_start_assoc_cb()
4400 ssid->edmg_channel); in wpas_start_assoc_cb()
4407 ssid->edmg_channel); in wpas_start_assoc_cb()
4429 params.key_mgmt_suite = wpa_s->key_mgmt; in wpas_start_assoc_cb()
4430 params.allowed_key_mgmts = wpa_s->allowed_key_mgmts; in wpas_start_assoc_cb()
4431 params.wpa_proto = wpa_s->wpa_proto; in wpas_start_assoc_cb()
4432 wpa_s->auth_alg = params.auth_alg; in wpas_start_assoc_cb()
4433 params.mode = ssid->mode; in wpas_start_assoc_cb()
4434 params.bg_scan_period = ssid->bg_scan_period; in wpas_start_assoc_cb()
4440 if (ssid->wep_key_len[i]) in wpas_start_assoc_cb()
4441 params.wep_key[i] = ssid->wep_key[i]; in wpas_start_assoc_cb()
4442 params.wep_key_len[i] = ssid->wep_key_len[i]; in wpas_start_assoc_cb()
4444 params.wep_tx_keyidx = ssid->wep_tx_keyidx; in wpas_start_assoc_cb()
4448 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) && in wpas_start_assoc_cb()
4453 params.passphrase = ssid->passphrase; in wpas_start_assoc_cb()
4458 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) && in wpas_start_assoc_cb()
4466 if (wpa_s->conf->key_mgmt_offload) { in wpas_start_assoc_cb()
4474 ssid->proactive_key_caching < 0 ? in wpas_start_assoc_cb()
4475 wpa_s->conf->okc : ssid->proactive_key_caching; in wpas_start_assoc_cb()
4485 if ((wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA) && in wpas_start_assoc_cb()
4488 if (ssid->sae_password) { in wpas_start_assoc_cb()
4489 params.sae_password = ssid->sae_password; in wpas_start_assoc_cb()
4490 params.sae_password_id = ssid->sae_password_id; in wpas_start_assoc_cb()
4491 } else if (ssid->passphrase) { in wpas_start_assoc_cb()
4492 params.passphrase = ssid->passphrase; in wpas_start_assoc_cb()
4511 } else if (!rsn && (ssid->key_mgmt & WPA_KEY_MGMT_OWE) && in wpas_start_assoc_cb()
4512 !ssid->owe_only) { in wpas_start_assoc_cb()
4518 params.p2p = ssid->p2p_group; in wpas_start_assoc_cb()
4520 if (wpa_s->p2pdev->set_sta_uapsd) in wpas_start_assoc_cb()
4521 params.uapsd = wpa_s->p2pdev->sta_uapsd; in wpas_start_assoc_cb()
4523 params.uapsd = -1; in wpas_start_assoc_cb()
4546 * If multi-channel concurrency is not supported, check for any in wpas_start_assoc_cb()
4550 if (wpa_s->num_multichan_concurrent < 2) { in wpas_start_assoc_cb()
4567 if (wpa_s->reassoc_same_ess && !is_zero_ether_addr(prev_bssid) && in wpas_start_assoc_cb()
4572 params.sae_pwe = wpa_s->conf->sae_pwe; in wpas_start_assoc_cb()
4581 if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_VALID_ERROR_CODES) { in wpas_start_assoc_cb()
4587 wpas_connection_failed(wpa_s, wpa_s->pending_bssid, in wpas_start_assoc_cb()
4590 os_memset(wpa_s->pending_bssid, 0, ETH_ALEN); in wpas_start_assoc_cb()
4598 if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE) { in wpas_start_assoc_cb()
4607 } else if (ssid->mode == WPAS_MODE_IBSS && in wpas_start_assoc_cb()
4608 wpa_s->key_mgmt != WPA_KEY_MGMT_NONE && in wpas_start_assoc_cb()
4609 wpa_s->key_mgmt != WPA_KEY_MGMT_WPA_NONE) { in wpas_start_assoc_cb()
4611 * RSN IBSS authentication is per-STA and we can disable the in wpas_start_assoc_cb()
4612 * per-BSSID authentication. in wpas_start_assoc_cb()
4622 timeout = ssid->mode == WPAS_MODE_IBSS ? 10 : 5; in wpas_start_assoc_cb()
4623 } else if (wpa_s->conf->ap_scan == 1) { in wpas_start_assoc_cb()
4625 timeout = ssid->mode == WPAS_MODE_IBSS ? 20 : 10; in wpas_start_assoc_cb()
4632 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC)) { in wpas_start_assoc_cb()
4643 eapol_sm_invalidate_cached_session(wpa_s->eapol); in wpas_start_assoc_cb()
4648 wpa_s->p2p_in_invitation || in wpas_start_assoc_cb()
4650 ssid->bssid_set) { in wpas_start_assoc_cb()
4651 wpa_s->current_bss = bss; in wpas_start_assoc_cb()
4657 wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid); in wpas_start_assoc_cb()
4659 wpa_sm_set_ssid(wpa_s->wpa, bss->ssid, bss->ssid_len); in wpas_start_assoc_cb()
4661 if (old_ssid != wpa_s->current_ssid) in wpas_start_assoc_cb()
4663 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)) in wpas_start_assoc_cb()
4673 wpa_s->ml_connect_probe_ssid = NULL; in wpa_supplicant_clear_connection()
4674 wpa_s->ml_connect_probe_bss = NULL; in wpa_supplicant_clear_connection()
4677 old_ssid = wpa_s->current_ssid; in wpa_supplicant_clear_connection()
4679 wpa_sm_set_config(wpa_s->wpa, NULL); in wpa_supplicant_clear_connection()
4680 eapol_sm_notify_config(wpa_s->eapol, NULL, NULL); in wpa_supplicant_clear_connection()
4681 if (old_ssid != wpa_s->current_ssid) in wpa_supplicant_clear_connection()
4693 * wpa_supplicant_deauthenticate - Deauthenticate the current connection
4707 wpa_dbg(wpa_s, MSG_DEBUG, "Request to deauthenticate - bssid=" MACSTR in wpa_supplicant_deauthenticate()
4710 MAC2STR(wpa_s->bssid), MAC2STR(wpa_s->pending_bssid), in wpa_supplicant_deauthenticate()
4712 wpa_supplicant_state_txt(wpa_s->wpa_state), wpa_s->valid_links, in wpa_supplicant_deauthenticate()
4713 MAC2STR(wpa_s->ap_mld_addr)); in wpa_supplicant_deauthenticate()
4715 if (wpa_s->valid_links && !is_zero_ether_addr(wpa_s->ap_mld_addr)) in wpa_supplicant_deauthenticate()
4716 addr = wpa_s->ap_mld_addr; in wpa_supplicant_deauthenticate()
4717 else if (!is_zero_ether_addr(wpa_s->pending_bssid) && in wpa_supplicant_deauthenticate()
4718 (wpa_s->wpa_state == WPA_AUTHENTICATING || in wpa_supplicant_deauthenticate()
4719 wpa_s->wpa_state == WPA_ASSOCIATING)) in wpa_supplicant_deauthenticate()
4720 addr = wpa_s->pending_bssid; in wpa_supplicant_deauthenticate()
4721 else if (!is_zero_ether_addr(wpa_s->bssid)) in wpa_supplicant_deauthenticate()
4722 addr = wpa_s->bssid; in wpa_supplicant_deauthenticate()
4723 else if (wpa_s->wpa_state == WPA_ASSOCIATING) { in wpa_supplicant_deauthenticate()
4725 * When using driver-based BSS selection, we may not know the in wpa_supplicant_deauthenticate()
4730 addr = wpa_s->bssid; in wpa_supplicant_deauthenticate()
4734 if (wpa_s->enabled_4addr_mode && wpa_drv_set_4addr_mode(wpa_s, 0) == 0) in wpa_supplicant_deauthenticate()
4735 wpa_s->enabled_4addr_mode = 0; in wpa_supplicant_deauthenticate()
4738 wpa_tdls_teardown_peers(wpa_s->wpa); in wpa_supplicant_deauthenticate()
4742 if (wpa_s->ifmsh) { in wpa_supplicant_deauthenticate()
4745 mconf = wpa_s->ifmsh->mconf; in wpa_supplicant_deauthenticate()
4747 wpa_s->ifname); in wpa_supplicant_deauthenticate()
4748 wpas_notify_mesh_group_removed(wpa_s, mconf->meshid, in wpa_supplicant_deauthenticate()
4749 mconf->meshid_len, reason_code); in wpa_supplicant_deauthenticate()
4770 wpa_s->own_reconnect_req = 1; in wpa_supplicant_reconnect()
4779 if (!ssid || !ssid->disabled || ssid->disabled == 2) in wpa_supplicant_enable_one_network()
4782 ssid->disabled = 0; in wpa_supplicant_enable_one_network()
4783 ssid->owe_transition_bss_select_count = 0; in wpa_supplicant_enable_one_network()
4791 if (!wpa_s->current_ssid && !wpa_s->disconnected) in wpa_supplicant_enable_one_network()
4792 wpa_s->reassociate = 1; in wpa_supplicant_enable_one_network()
4797 * wpa_supplicant_add_network - Add a new network
4811 ssid = wpa_config_add_network(wpa_s->conf); in wpa_supplicant_add_network()
4815 ssid->disabled = 1; in wpa_supplicant_add_network()
4823 * wpa_supplicant_remove_network - Remove a configured network based on id
4826 * Returns: 0 on success, or -1 if the network was not found, -2 if the network
4837 struct wpa_ssid *ssid, *prev = wpa_s->current_ssid; in wpa_supplicant_remove_network()
4840 ssid = wpa_config_get_network(wpa_s->conf, id); in wpa_supplicant_remove_network()
4842 return -1; in wpa_supplicant_remove_network()
4847 wpa_s->sme.prev_bssid_set = 0; in wpa_supplicant_remove_network()
4853 eapol_sm_invalidate_cached_session(wpa_s->eapol); in wpa_supplicant_remove_network()
4857 wpa_sm_set_config(wpa_s->wpa, NULL); in wpa_supplicant_remove_network()
4858 eapol_sm_notify_config(wpa_s->eapol, NULL, NULL); in wpa_supplicant_remove_network()
4860 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_remove_network()
4861 wpa_s->own_disconnect_req = 1; in wpa_supplicant_remove_network()
4866 was_disabled = ssid->disabled; in wpa_supplicant_remove_network()
4868 if (wpa_config_remove_network(wpa_s->conf, id) < 0) in wpa_supplicant_remove_network()
4869 return -2; in wpa_supplicant_remove_network()
4871 if (!was_disabled && wpa_s->sched_scanning) { in wpa_supplicant_remove_network()
4883 * wpa_supplicant_remove_all_networks - Remove all configured networks
4897 if (wpa_s->drv_flags2 & in wpa_supplicant_remove_all_networks()
4902 if (wpa_s->sched_scanning) in wpa_supplicant_remove_all_networks()
4905 eapol_sm_invalidate_cached_session(wpa_s->eapol); in wpa_supplicant_remove_all_networks()
4906 if (wpa_s->current_ssid) { in wpa_supplicant_remove_all_networks()
4908 wpa_s->sme.prev_bssid_set = 0; in wpa_supplicant_remove_all_networks()
4910 wpa_sm_set_config(wpa_s->wpa, NULL); in wpa_supplicant_remove_all_networks()
4911 eapol_sm_notify_config(wpa_s->eapol, NULL, NULL); in wpa_supplicant_remove_all_networks()
4912 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_remove_all_networks()
4913 wpa_s->own_disconnect_req = 1; in wpa_supplicant_remove_all_networks()
4917 ssid = wpa_s->conf->ssid; in wpa_supplicant_remove_all_networks()
4922 id = ssid->id; in wpa_supplicant_remove_all_networks()
4923 ssid = ssid->next; in wpa_supplicant_remove_all_networks()
4925 wpa_config_remove_network(wpa_s->conf, id); in wpa_supplicant_remove_all_networks()
4932 * wpa_supplicant_enable_network - Mark a configured network as enabled
4942 for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) in wpa_supplicant_enable_network()
4947 if (wpa_s->reassociate && !wpa_s->disconnected && in wpa_supplicant_enable_network()
4948 (!wpa_s->current_ssid || in wpa_supplicant_enable_network()
4949 wpa_s->wpa_state == WPA_DISCONNECTED || in wpa_supplicant_enable_network()
4950 wpa_s->wpa_state == WPA_SCANNING)) { in wpa_supplicant_enable_network()
4951 if (wpa_s->sched_scanning) { in wpa_supplicant_enable_network()
4958 wpa_s->scan_req = NORMAL_SCAN_REQ; in wpa_supplicant_enable_network()
4966 * wpa_supplicant_disable_network - Mark a configured network as disabled
4979 if (wpa_s->sched_scanning) in wpa_supplicant_disable_network()
4982 for (other_ssid = wpa_s->conf->ssid; other_ssid; in wpa_supplicant_disable_network()
4983 other_ssid = other_ssid->next) { in wpa_supplicant_disable_network()
4984 was_disabled = other_ssid->disabled; in wpa_supplicant_disable_network()
4989 other_ssid->disabled = 1; in wpa_supplicant_disable_network()
4991 if (was_disabled != other_ssid->disabled) in wpa_supplicant_disable_network()
4995 if (wpa_s->current_ssid) { in wpa_supplicant_disable_network()
4996 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_disable_network()
4997 wpa_s->own_disconnect_req = 1; in wpa_supplicant_disable_network()
5001 } else if (ssid->disabled != 2) { in wpa_supplicant_disable_network()
5002 if (ssid == wpa_s->current_ssid) { in wpa_supplicant_disable_network()
5003 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_disable_network()
5004 wpa_s->own_disconnect_req = 1; in wpa_supplicant_disable_network()
5009 was_disabled = ssid->disabled; in wpa_supplicant_disable_network()
5011 ssid->disabled = 1; in wpa_supplicant_disable_network()
5013 if (was_disabled != ssid->disabled) { in wpa_supplicant_disable_network()
5015 if (wpa_s->sched_scanning) { in wpa_supplicant_disable_network()
5027 * wpa_supplicant_select_network - Attempt association with a network
5038 if (ssid && ssid != wpa_s->current_ssid && wpa_s->current_ssid) { in wpa_supplicant_select_network()
5039 if (wpa_s->wpa_state >= WPA_AUTHENTICATING) in wpa_supplicant_select_network()
5040 wpa_s->own_disconnect_req = 1; in wpa_supplicant_select_network()
5053 for (other_ssid = wpa_s->conf->ssid; other_ssid; in wpa_supplicant_select_network()
5054 other_ssid = other_ssid->next) { in wpa_supplicant_select_network()
5055 int was_disabled = other_ssid->disabled; in wpa_supplicant_select_network()
5059 other_ssid->disabled = ssid ? (ssid->id != other_ssid->id) : 0; in wpa_supplicant_select_network()
5060 if (was_disabled && !other_ssid->disabled) in wpa_supplicant_select_network()
5063 if (was_disabled != other_ssid->disabled) in wpa_supplicant_select_network()
5067 if (ssid && ssid == wpa_s->current_ssid && wpa_s->current_ssid && in wpa_supplicant_select_network()
5068 wpa_s->wpa_state >= WPA_AUTHENTICATING) { in wpa_supplicant_select_network()
5071 "selected network - do nothing"); in wpa_supplicant_select_network()
5076 wpa_s->current_ssid = ssid; in wpa_supplicant_select_network()
5077 eapol_sm_notify_config(wpa_s->eapol, NULL, NULL); in wpa_supplicant_select_network()
5078 wpa_s->connect_without_scan = in wpa_supplicant_select_network()
5079 (ssid->mode == WPAS_MODE_MESH || in wpa_supplicant_select_network()
5080 ssid->mode == WPAS_MODE_AP) ? ssid : NULL; in wpa_supplicant_select_network()
5086 os_free(wpa_s->next_scan_freqs); in wpa_supplicant_select_network()
5087 wpa_s->next_scan_freqs = NULL; in wpa_supplicant_select_network()
5089 wpa_s->connect_without_scan = NULL; in wpa_supplicant_select_network()
5092 wpa_s->disconnected = 0; in wpa_supplicant_select_network()
5093 wpa_s->reassociate = 1; in wpa_supplicant_select_network()
5095 wpa_s->last_owe_group = 0; in wpa_supplicant_select_network()
5097 ssid->owe_transition_bss_select_count = 0; in wpa_supplicant_select_network()
5098 wpa_s_setup_sae_pt(wpa_s->conf, ssid, false); in wpa_supplicant_select_network()
5101 if (wpa_s->connect_without_scan || in wpa_supplicant_select_network()
5103 wpa_s->scan_req = NORMAL_SCAN_REQ; in wpa_supplicant_select_network()
5114 * wpas_remove_cred - Remove the specified credential and all the network
5118 * Returns: 0 on success, -1 on failure
5127 return -1; in wpas_remove_cred()
5130 id = cred->id; in wpas_remove_cred()
5131 if (wpa_config_remove_cred(wpa_s->conf, id) < 0) { in wpas_remove_cred()
5133 return -1; in wpas_remove_cred()
5139 ssid = wpa_s->conf->ssid; in wpas_remove_cred()
5141 next = ssid->next; in wpas_remove_cred()
5143 if (ssid->parent_cred == cred) { in wpas_remove_cred()
5146 ssid->id); in wpas_remove_cred()
5147 if (wpa_supplicant_remove_network(wpa_s, ssid->id) == in wpas_remove_cred()
5148 -1) { in wpas_remove_cred()
5151 ssid->id); in wpas_remove_cred()
5163 * wpas_remove_cred - Remove all the Interworking credentials
5165 * Returns: 0 on success, -1 on failure
5172 cred = wpa_s->conf->cred; in wpas_remove_all_creds()
5175 cred = cred->next; in wpas_remove_all_creds()
5179 "Removal of all credentials failed - failed to remove credential id=%d", in wpas_remove_all_creds()
5180 prev->id); in wpas_remove_all_creds()
5181 ret = -1; in wpas_remove_all_creds()
5190 * wpas_set_pkcs11_engine_and_module_path - Set PKCS #11 engine and module path
5194 * Returns: 0 on success; -1 on failure
5210 return -1; in wpas_set_pkcs11_engine_and_module_path()
5216 return -1; in wpas_set_pkcs11_engine_and_module_path()
5221 os_free(wpa_s->conf->pkcs11_engine_path); in wpas_set_pkcs11_engine_and_module_path()
5222 wpa_s->conf->pkcs11_engine_path = pkcs11_engine_path_copy; in wpas_set_pkcs11_engine_and_module_path()
5225 os_free(wpa_s->conf->pkcs11_module_path); in wpas_set_pkcs11_engine_and_module_path()
5226 wpa_s->conf->pkcs11_module_path = pkcs11_module_path_copy; in wpas_set_pkcs11_engine_and_module_path()
5229 wpa_sm_set_eapol(wpa_s->wpa, NULL); in wpas_set_pkcs11_engine_and_module_path()
5230 eapol_sm_deinit(wpa_s->eapol); in wpas_set_pkcs11_engine_and_module_path()
5231 wpa_s->eapol = NULL; in wpas_set_pkcs11_engine_and_module_path()
5233 /* Error -> Reset paths to the default value (NULL) once. */ in wpas_set_pkcs11_engine_and_module_path()
5238 return -1; in wpas_set_pkcs11_engine_and_module_path()
5240 wpa_sm_set_eapol(wpa_s->wpa, wpa_s->eapol); in wpas_set_pkcs11_engine_and_module_path()
5247 * wpa_supplicant_set_ap_scan - Set AP scan mode for interface
5250 * Returns: 0 if succeed or -1 if ap_scan has an invalid value
5259 return -1; in wpa_supplicant_set_ap_scan()
5261 if (ap_scan == 2 && os_strcmp(wpa_s->driver->name, "nl80211") == 0) { in wpa_supplicant_set_ap_scan()
5267 if (ap_scan == 2 && ap_scan != wpa_s->conf->ap_scan && in wpa_supplicant_set_ap_scan()
5268 wpa_s->wpa_state >= WPA_ASSOCIATING && in wpa_supplicant_set_ap_scan()
5269 wpa_s->wpa_state < WPA_COMPLETED) { in wpa_supplicant_set_ap_scan()
5271 "associating", wpa_s->conf->ap_scan, ap_scan); in wpa_supplicant_set_ap_scan()
5276 old_ap_scan = wpa_s->conf->ap_scan; in wpa_supplicant_set_ap_scan()
5277 wpa_s->conf->ap_scan = ap_scan; in wpa_supplicant_set_ap_scan()
5279 if (old_ap_scan != wpa_s->conf->ap_scan) in wpa_supplicant_set_ap_scan()
5287 * wpa_supplicant_set_bss_expiration_age - Set BSS entry expiration age
5290 * Returns: 0 if succeed or -1 if expire_age has an invalid value
5299 return -1; in wpa_supplicant_set_bss_expiration_age()
5303 wpa_s->conf->bss_expiration_age = bss_expire_age; in wpa_supplicant_set_bss_expiration_age()
5310 * wpa_supplicant_set_bss_expiration_count - Set BSS entry expiration scan count
5313 * Returns: 0 if succeed or -1 if expire_count has an invalid value
5322 return -1; in wpa_supplicant_set_bss_expiration_count()
5326 wpa_s->conf->bss_expiration_scan_count = bss_expire_count; in wpa_supplicant_set_bss_expiration_count()
5333 * wpa_supplicant_set_scan_interval - Set scan interval
5336 * Returns: 0 if succeed or -1 if scan_interval has an invalid value
5345 return -1; in wpa_supplicant_set_scan_interval()
5356 * wpa_supplicant_set_debug_params - Set global debug params
5361 * Returns: 0 if succeed or -1 if debug_level has wrong value
5376 return -1; in wpa_supplicant_set_debug_params()
5419 if (end - pos < ETH_ALEN + 1) in owe_trans_ssid_match()
5423 if (end - pos < ssid_len || ssid_len > SSID_MAX_LEN) in owe_trans_ssid_match()
5433 * wpa_supplicant_get_ssid - Get a pointer to the current network structure
5460 wired = wpa_s->conf->ap_scan == 0 && in wpa_supplicant_get_ssid()
5461 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_WIRED); in wpa_supplicant_get_ssid()
5463 entry = wpa_s->conf->ssid; in wpa_supplicant_get_ssid()
5466 ((ssid_len == entry->ssid_len && in wpa_supplicant_get_ssid()
5467 (!entry->ssid || in wpa_supplicant_get_ssid()
5468 os_memcmp(ssid, entry->ssid, ssid_len) == 0)) || in wpa_supplicant_get_ssid()
5470 (!entry->bssid_set || in wpa_supplicant_get_ssid()
5471 ether_addr_equal(bssid, entry->bssid))) in wpa_supplicant_get_ssid()
5475 (entry->key_mgmt & WPA_KEY_MGMT_WPS) && in wpa_supplicant_get_ssid()
5476 (entry->ssid == NULL || entry->ssid_len == 0) && in wpa_supplicant_get_ssid()
5477 (!entry->bssid_set || in wpa_supplicant_get_ssid()
5478 ether_addr_equal(bssid, entry->bssid))) in wpa_supplicant_get_ssid()
5484 (entry->ssid && in wpa_supplicant_get_ssid()
5485 owe_trans_ssid_match(wpa_s, bssid, entry->ssid, in wpa_supplicant_get_ssid()
5486 entry->ssid_len)) && in wpa_supplicant_get_ssid()
5487 (!entry->bssid_set || in wpa_supplicant_get_ssid()
5488 ether_addr_equal(bssid, entry->bssid))) in wpa_supplicant_get_ssid()
5492 if (!wpas_network_disabled(wpa_s, entry) && entry->bssid_set && in wpa_supplicant_get_ssid()
5493 entry->ssid_len == 0 && in wpa_supplicant_get_ssid()
5494 ether_addr_equal(bssid, entry->bssid)) in wpa_supplicant_get_ssid()
5497 entry = entry->next; in wpa_supplicant_get_ssid()
5506 struct wpa_global *global = wpa_s->global; in select_driver()
5508 if (wpa_drivers[i]->global_init && global->drv_priv[i] == NULL) { in select_driver()
5509 global->drv_priv[i] = wpa_drivers[i]->global_init(global); in select_driver()
5510 if (global->drv_priv[i] == NULL) { in select_driver()
5512 "'%s'", wpa_drivers[i]->name); in select_driver()
5513 return -1; in select_driver()
5517 wpa_s->driver = wpa_drivers[i]; in select_driver()
5518 wpa_s->global_drv_priv = global->drv_priv[i]; in select_driver()
5532 return -1; in wpa_supplicant_set_driver()
5537 return -1; in wpa_supplicant_set_driver()
5547 return -1; in wpa_supplicant_set_driver()
5553 len = pos - driver; in wpa_supplicant_set_driver()
5558 if (os_strlen(wpa_drivers[i]->name) == len && in wpa_supplicant_set_driver()
5559 os_strncmp(driver, wpa_drivers[i]->name, len) == in wpa_supplicant_set_driver()
5571 return -1; in wpa_supplicant_set_driver()
5576 * wpa_supplicant_rx_eapol - Deliver a received EAPOL frame to wpa_supplicant
5595 const u8 *connected_addr = wpa_s->valid_links ? in wpa_supplicant_rx_eapol()
5596 wpa_s->ap_mld_addr : wpa_s->bssid; in wpa_supplicant_rx_eapol()
5602 if (wpa_s->own_disconnect_req) { in wpa_supplicant_rx_eapol()
5609 wpa_msg_ctrl(wpa_s, MSG_INFO, "EAPOL-RX " MACSTR " %zu", in wpa_supplicant_rx_eapol()
5611 if (wpa_s->ignore_auth_resp) { in wpa_supplicant_rx_eapol()
5612 wpa_printf(MSG_INFO, "RX EAPOL - ignore_auth_resp active!"); in wpa_supplicant_rx_eapol()
5617 if (wpa_s->wpa_state < WPA_ASSOCIATED || in wpa_supplicant_rx_eapol()
5618 (wpa_s->last_eapol_matches_bssid && in wpa_supplicant_rx_eapol()
5620 !wpa_s->ap_iface && in wpa_supplicant_rx_eapol()
5630 * driver-based roaming case, so also use src_addr != BSSID as a in wpa_supplicant_rx_eapol()
5636 "Not associated - Delay processing of received EAPOL frame (state=%s connected_addr=" in wpa_supplicant_rx_eapol()
5638 wpa_supplicant_state_txt(wpa_s->wpa_state), in wpa_supplicant_rx_eapol()
5640 wpabuf_free(wpa_s->pending_eapol_rx); in wpa_supplicant_rx_eapol()
5641 wpa_s->pending_eapol_rx = wpabuf_alloc_copy(buf, len); in wpa_supplicant_rx_eapol()
5642 if (wpa_s->pending_eapol_rx) { in wpa_supplicant_rx_eapol()
5643 os_get_reltime(&wpa_s->pending_eapol_rx_time); in wpa_supplicant_rx_eapol()
5644 os_memcpy(wpa_s->pending_eapol_rx_src, src_addr, in wpa_supplicant_rx_eapol()
5646 wpa_s->pending_eapol_encrypted = encrypted; in wpa_supplicant_rx_eapol()
5651 wpa_s->last_eapol_matches_bssid = in wpa_supplicant_rx_eapol()
5655 if (wpa_s->ap_iface) { in wpa_supplicant_rx_eapol()
5662 if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE) { in wpa_supplicant_rx_eapol()
5668 if (wpa_s->eapol_received == 0 && in wpa_supplicant_rx_eapol()
5669 (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) || in wpa_supplicant_rx_eapol()
5670 !wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt) || in wpa_supplicant_rx_eapol()
5671 wpa_s->wpa_state != WPA_COMPLETED) && in wpa_supplicant_rx_eapol()
5672 (wpa_s->current_ssid == NULL || in wpa_supplicant_rx_eapol()
5673 wpa_s->current_ssid->mode != WPAS_MODE_IBSS)) { in wpa_supplicant_rx_eapol()
5677 if (wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt) || in wpa_supplicant_rx_eapol()
5678 wpa_s->key_mgmt == WPA_KEY_MGMT_IEEE8021X_NO_WPA || in wpa_supplicant_rx_eapol()
5679 wpa_s->key_mgmt == WPA_KEY_MGMT_WPS) { in wpa_supplicant_rx_eapol()
5685 if (wpa_s->current_ssid && wpa_s->current_bss && in wpa_supplicant_rx_eapol()
5686 (wpa_s->current_ssid->key_mgmt & WPA_KEY_MGMT_WPS) && in wpa_supplicant_rx_eapol()
5687 eap_is_wps_pin_enrollee(&wpa_s->current_ssid->eap)) { in wpa_supplicant_rx_eapol()
5696 wpa_s->current_bss, WPS_IE_VENDOR_TYPE); in wpa_supplicant_rx_eapol()
5698 !wps_is_addr_authorized(wps_ie, wpa_s->own_addr, 1)) in wpa_supplicant_rx_eapol()
5706 wpa_s->eapol_received++; in wpa_supplicant_rx_eapol()
5708 if (wpa_s->countermeasures) { in wpa_supplicant_rx_eapol()
5709 wpa_msg(wpa_s, MSG_INFO, "WPA: Countermeasures - dropped " in wpa_supplicant_rx_eapol()
5715 if (wpa_s->current_ssid && in wpa_supplicant_rx_eapol()
5716 wpa_s->current_ssid->mode == WPAS_MODE_IBSS) { in wpa_supplicant_rx_eapol()
5717 ibss_rsn_rx_eapol(wpa_s->ibss_rsn, src_addr, buf, len, in wpa_supplicant_rx_eapol()
5729 os_memcpy(wpa_s->last_eapol_src, src_addr, ETH_ALEN); in wpa_supplicant_rx_eapol()
5730 if (!wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt) && in wpa_supplicant_rx_eapol()
5731 wpa_s->key_mgmt != WPA_KEY_MGMT_OWE && in wpa_supplicant_rx_eapol()
5732 wpa_s->key_mgmt != WPA_KEY_MGMT_DPP && in wpa_supplicant_rx_eapol()
5733 eapol_sm_rx_eapol(wpa_s->eapol, src_addr, buf, len, in wpa_supplicant_rx_eapol()
5737 if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK)) in wpa_supplicant_rx_eapol()
5738 wpa_sm_rx_eapol(wpa_s->wpa, src_addr, buf, len, encrypted); in wpa_supplicant_rx_eapol()
5739 else if (wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt)) { in wpa_supplicant_rx_eapol()
5741 * Set portValid = true here since we are going to skip 4-way in wpa_supplicant_rx_eapol()
5744 * without going through EAPOL-Key handshake. in wpa_supplicant_rx_eapol()
5746 eapol_sm_notify_portValid(wpa_s->eapol, true); in wpa_supplicant_rx_eapol()
5761 return !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_CONTROL_PORT) || in wpas_eapol_needs_l2_packet()
5762 !(wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX); in wpas_eapol_needs_l2_packet()
5770 os_memcpy(prev_mac_addr, wpa_s->own_addr, ETH_ALEN); in wpa_supplicant_update_mac_addr()
5772 if ((!wpa_s->p2p_mgmt || in wpa_supplicant_update_mac_addr()
5773 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE)) && in wpa_supplicant_update_mac_addr()
5774 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE)) { in wpa_supplicant_update_mac_addr()
5775 l2_packet_deinit(wpa_s->l2); in wpa_supplicant_update_mac_addr()
5776 wpa_s->l2 = l2_packet_init(wpa_s->ifname, in wpa_supplicant_update_mac_addr()
5782 if (wpa_s->l2 == NULL) in wpa_supplicant_update_mac_addr()
5783 return -1; in wpa_supplicant_update_mac_addr()
5785 if (l2_packet_set_packet_filter(wpa_s->l2, in wpa_supplicant_update_mac_addr()
5790 if (l2_packet_get_own_addr(wpa_s->l2, wpa_s->own_addr)) { in wpa_supplicant_update_mac_addr()
5793 return -1; in wpa_supplicant_update_mac_addr()
5798 os_memcpy(wpa_s->own_addr, addr, ETH_ALEN); in wpa_supplicant_update_mac_addr()
5801 wpa_sm_set_own_addr(wpa_s->wpa, wpa_s->own_addr); in wpa_supplicant_update_mac_addr()
5805 if (wpa_s->fst) in wpa_supplicant_update_mac_addr()
5806 fst_update_mac_addr(wpa_s->fst, wpa_s->own_addr); in wpa_supplicant_update_mac_addr()
5809 if (!ether_addr_equal(prev_mac_addr, wpa_s->own_addr)) in wpa_supplicant_update_mac_addr()
5826 if (!ether_addr_equal(eth->h_dest, wpa_s->own_addr) && in wpa_supplicant_rx_eapol_bridge()
5827 !(eth->h_dest[0] & 0x01)) { in wpa_supplicant_rx_eapol_bridge()
5829 " (bridge - not for this interface - ignore)", in wpa_supplicant_rx_eapol_bridge()
5830 MAC2STR(src_addr), MAC2STR(eth->h_dest)); in wpa_supplicant_rx_eapol_bridge()
5835 " (bridge)", MAC2STR(src_addr), MAC2STR(eth->h_dest)); in wpa_supplicant_rx_eapol_bridge()
5837 len - sizeof(*eth), FRAME_ENCRYPTION_UNKNOWN); in wpa_supplicant_rx_eapol_bridge()
5844 if (wpa_s->wpa_state > WPA_SCANNING) in wpa_supplicant_update_bridge_ifname()
5845 return -EBUSY; in wpa_supplicant_update_bridge_ifname()
5848 os_strlen(bridge_ifname) >= sizeof(wpa_s->bridge_ifname)) in wpa_supplicant_update_bridge_ifname()
5849 return -EINVAL; in wpa_supplicant_update_bridge_ifname()
5854 if (os_strcmp(wpa_s->bridge_ifname, bridge_ifname) == 0) in wpa_supplicant_update_bridge_ifname()
5857 if (wpa_s->l2_br) { in wpa_supplicant_update_bridge_ifname()
5858 l2_packet_deinit(wpa_s->l2_br); in wpa_supplicant_update_bridge_ifname()
5859 wpa_s->l2_br = NULL; in wpa_supplicant_update_bridge_ifname()
5862 os_strlcpy(wpa_s->bridge_ifname, bridge_ifname, in wpa_supplicant_update_bridge_ifname()
5863 sizeof(wpa_s->bridge_ifname)); in wpa_supplicant_update_bridge_ifname()
5865 if (wpa_s->bridge_ifname[0]) { in wpa_supplicant_update_bridge_ifname()
5868 wpa_s->bridge_ifname); in wpa_supplicant_update_bridge_ifname()
5869 wpa_s->l2_br = l2_packet_init_bridge( in wpa_supplicant_update_bridge_ifname()
5870 wpa_s->bridge_ifname, wpa_s->ifname, wpa_s->own_addr, in wpa_supplicant_update_bridge_ifname()
5872 if (!wpa_s->l2_br) { in wpa_supplicant_update_bridge_ifname()
5875 wpa_s->bridge_ifname); in wpa_supplicant_update_bridge_ifname()
5881 if (!wpa_s->p2p_mgmt && wpa_tdls_init(wpa_s->wpa)) in wpa_supplicant_update_bridge_ifname()
5887 wpa_s->bridge_ifname[0] = 0; in wpa_supplicant_update_bridge_ifname()
5888 if (wpa_s->l2_br) { in wpa_supplicant_update_bridge_ifname()
5889 l2_packet_deinit(wpa_s->l2_br); in wpa_supplicant_update_bridge_ifname()
5890 wpa_s->l2_br = NULL; in wpa_supplicant_update_bridge_ifname()
5893 if (!wpa_s->p2p_mgmt) in wpa_supplicant_update_bridge_ifname()
5894 wpa_tdls_init(wpa_s->wpa); in wpa_supplicant_update_bridge_ifname()
5896 return -EIO; in wpa_supplicant_update_bridge_ifname()
5901 * wpa_supplicant_driver_init - Initialize driver interface parameters
5903 * Returns: 0 on success, -1 on failure
5914 return -1; in wpa_supplicant_driver_init()
5917 MAC2STR(wpa_s->own_addr)); in wpa_supplicant_driver_init()
5918 os_memcpy(wpa_s->perm_addr, wpa_s->own_addr, ETH_ALEN); in wpa_supplicant_driver_init()
5919 wpa_sm_set_own_addr(wpa_s->wpa, wpa_s->own_addr); in wpa_supplicant_driver_init()
5921 if (wpa_s->bridge_ifname[0] && wpas_eapol_needs_l2_packet(wpa_s)) { in wpa_supplicant_driver_init()
5923 "interface '%s'", wpa_s->bridge_ifname); in wpa_supplicant_driver_init()
5924 wpa_s->l2_br = l2_packet_init_bridge( in wpa_supplicant_driver_init()
5925 wpa_s->bridge_ifname, wpa_s->ifname, wpa_s->own_addr, in wpa_supplicant_driver_init()
5927 if (wpa_s->l2_br == NULL) { in wpa_supplicant_driver_init()
5930 wpa_s->bridge_ifname); in wpa_supplicant_driver_init()
5931 return -1; in wpa_supplicant_driver_init()
5935 if (wpa_s->conf->ap_scan == 2 && in wpa_supplicant_driver_init()
5936 os_strcmp(wpa_s->driver->name, "nl80211") == 0) { in wpa_supplicant_driver_init()
5950 wpa_s->prev_scan_ssid = WILDCARD_SSID_SCAN; in wpa_supplicant_driver_init()
5951 wpa_s->prev_scan_wildcard = 0; in wpa_supplicant_driver_init()
5954 if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED) { in wpa_supplicant_driver_init()
5959 if (!wpa_s->p2p_mgmt && in wpa_supplicant_driver_init()
5989 wpa_s->scan_req = INITIAL_SCAN_REQ; in wpa_supplicant_alloc()
5990 wpa_s->scan_interval = 5; in wpa_supplicant_alloc()
5991 wpa_s->new_connection = 1; in wpa_supplicant_alloc()
5992 wpa_s->parent = parent ? parent : wpa_s; in wpa_supplicant_alloc()
5993 wpa_s->p2pdev = wpa_s->parent; in wpa_supplicant_alloc()
5994 wpa_s->sched_scanning = 0; in wpa_supplicant_alloc()
5995 wpa_s->setband_mask = WPA_SETBAND_AUTO; in wpa_supplicant_alloc()
5997 dl_list_init(&wpa_s->bss_tmp_disallowed); in wpa_supplicant_alloc()
5998 dl_list_init(&wpa_s->fils_hlp_req); in wpa_supplicant_alloc()
6000 dl_list_init(&wpa_s->drv_signal_override); in wpa_supplicant_alloc()
6001 wpa_s->test_assoc_comeback_type = -1; in wpa_supplicant_alloc()
6004 dl_list_init(&wpa_s->active_scs_ids); in wpa_supplicant_alloc()
6006 wpa_s->ml_probe_mld_id = -1; in wpa_supplicant_alloc()
6029 os_memset(&htcaps->supported_mcs_set, 0, IEEE80211_HT_MCS_MASK_LEN); in wpa_set_htcap_mcs()
6031 wpa_msg(wpa_s, MSG_DEBUG, "set_htcap, ht_mcs -:%s:-", ht_mcs); in wpa_set_htcap_mcs()
6046 htcaps->supported_mcs_set[i] = v; in wpa_set_htcap_mcs()
6050 "Failed to parse ht-mcs: %s, error: %s\n", in wpa_set_htcap_mcs()
6052 return -1; in wpa_set_htcap_mcs()
6060 os_memset(&htcaps_mask->supported_mcs_set, 0xff, in wpa_set_htcap_mcs()
6061 IEEE80211_HT_MCS_MASK_LEN - 1); in wpa_set_htcap_mcs()
6063 htcaps_mask->supported_mcs_set[IEEE80211_HT_MCS_MASK_LEN - 1] = in wpa_set_htcap_mcs()
6078 if (disabled == -1) in wpa_disable_max_amsdu()
6084 htcaps_mask->ht_capabilities_info |= msk; in wpa_disable_max_amsdu()
6086 htcaps->ht_capabilities_info &= msk; in wpa_disable_max_amsdu()
6088 htcaps->ht_capabilities_info |= msk; in wpa_disable_max_amsdu()
6099 if (factor == -1) in wpa_set_ampdu_factor()
6106 "Must be 0-3 or -1", factor); in wpa_set_ampdu_factor()
6107 return -EINVAL; in wpa_set_ampdu_factor()
6110 htcaps_mask->a_mpdu_params |= 0x3; /* 2 bits for factor */ in wpa_set_ampdu_factor()
6111 htcaps->a_mpdu_params &= ~0x3; in wpa_set_ampdu_factor()
6112 htcaps->a_mpdu_params |= factor & 0x3; in wpa_set_ampdu_factor()
6123 if (density == -1) in wpa_set_ampdu_density()
6130 "ampdu_density: %d out of range. Must be 0-7 or -1.", in wpa_set_ampdu_density()
6132 return -EINVAL; in wpa_set_ampdu_density()
6135 htcaps_mask->a_mpdu_params |= 0x1C; in wpa_set_ampdu_density()
6136 htcaps->a_mpdu_params &= ~(0x1C); in wpa_set_ampdu_density()
6137 htcaps->a_mpdu_params |= (density << 2) & 0x1C; in wpa_set_ampdu_density()
6171 htcaps->ht_capabilities_info &= ~msk; in wpa_set_disable_sgi()
6173 htcaps->ht_capabilities_info |= msk; in wpa_set_disable_sgi()
6175 htcaps_mask->ht_capabilities_info |= msk; in wpa_set_disable_sgi()
6193 htcaps->ht_capabilities_info &= ~msk; in wpa_set_disable_ldpc()
6195 htcaps->ht_capabilities_info |= msk; in wpa_set_disable_ldpc()
6197 htcaps_mask->ht_capabilities_info |= msk; in wpa_set_disable_ldpc()
6210 if (tx_stbc == -1) in wpa_set_tx_stbc()
6217 "tx_stbc: %d out of range. Must be 0-1 or -1", tx_stbc); in wpa_set_tx_stbc()
6218 return -EINVAL; in wpa_set_tx_stbc()
6221 htcaps_mask->ht_capabilities_info |= msk; in wpa_set_tx_stbc()
6222 htcaps->ht_capabilities_info &= ~msk; in wpa_set_tx_stbc()
6223 htcaps->ht_capabilities_info |= (tx_stbc << 7) & msk; in wpa_set_tx_stbc()
6236 if (rx_stbc == -1) in wpa_set_rx_stbc()
6243 "rx_stbc: %d out of range. Must be 0-3 or -1", rx_stbc); in wpa_set_rx_stbc()
6244 return -EINVAL; in wpa_set_rx_stbc()
6247 htcaps_mask->ht_capabilities_info |= msk; in wpa_set_rx_stbc()
6248 htcaps->ht_capabilities_info &= ~msk; in wpa_set_rx_stbc()
6249 htcaps->ht_capabilities_info |= (rx_stbc << 8) & msk; in wpa_set_rx_stbc()
6265 params->disable_ht = ssid->disable_ht; in wpa_supplicant_apply_ht_overrides()
6266 if (!params->htcaps || !params->htcaps_mask) in wpa_supplicant_apply_ht_overrides()
6269 htcaps = (struct ieee80211_ht_capabilities *) params->htcaps; in wpa_supplicant_apply_ht_overrides()
6270 htcaps_mask = (struct ieee80211_ht_capabilities *) params->htcaps_mask; in wpa_supplicant_apply_ht_overrides()
6271 wpa_set_htcap_mcs(wpa_s, htcaps, htcaps_mask, ssid->ht_mcs); in wpa_supplicant_apply_ht_overrides()
6273 ssid->disable_max_amsdu); in wpa_supplicant_apply_ht_overrides()
6274 wpa_set_ampdu_factor(wpa_s, htcaps, htcaps_mask, ssid->ampdu_factor); in wpa_supplicant_apply_ht_overrides()
6275 wpa_set_ampdu_density(wpa_s, htcaps, htcaps_mask, ssid->ampdu_density); in wpa_supplicant_apply_ht_overrides()
6276 wpa_set_disable_ht40(wpa_s, htcaps, htcaps_mask, ssid->disable_ht40); in wpa_supplicant_apply_ht_overrides()
6277 wpa_set_disable_sgi(wpa_s, htcaps, htcaps_mask, ssid->disable_sgi); in wpa_supplicant_apply_ht_overrides()
6278 wpa_set_disable_ldpc(wpa_s, htcaps, htcaps_mask, ssid->disable_ldpc); in wpa_supplicant_apply_ht_overrides()
6279 wpa_set_rx_stbc(wpa_s, htcaps, htcaps_mask, ssid->rx_stbc); in wpa_supplicant_apply_ht_overrides()
6280 wpa_set_tx_stbc(wpa_s, htcaps, htcaps_mask, ssid->tx_stbc); in wpa_supplicant_apply_ht_overrides()
6282 if (ssid->ht40_intolerant) { in wpa_supplicant_apply_ht_overrides()
6284 htcaps->ht_capabilities_info |= bit; in wpa_supplicant_apply_ht_overrides()
6285 htcaps_mask->ht_capabilities_info |= bit; in wpa_supplicant_apply_ht_overrides()
6303 params->disable_vht = ssid->disable_vht; in wpa_supplicant_apply_vht_overrides()
6305 vhtcaps = (void *) params->vhtcaps; in wpa_supplicant_apply_vht_overrides()
6306 vhtcaps_mask = (void *) params->vhtcaps_mask; in wpa_supplicant_apply_vht_overrides()
6311 vhtcaps->vht_capabilities_info = host_to_le32(ssid->vht_capa); in wpa_supplicant_apply_vht_overrides()
6312 vhtcaps_mask->vht_capabilities_info = host_to_le32(ssid->vht_capa_mask); in wpa_supplicant_apply_vht_overrides()
6315 if (ssid->disable_sgi) { in wpa_supplicant_apply_vht_overrides()
6316 vhtcaps_mask->vht_capabilities_info |= (VHT_CAP_SHORT_GI_80 | in wpa_supplicant_apply_vht_overrides()
6318 vhtcaps->vht_capabilities_info &= ~(VHT_CAP_SHORT_GI_80 | in wpa_supplicant_apply_vht_overrides()
6321 "disable-sgi override specified, vht-caps: 0x%x", in wpa_supplicant_apply_vht_overrides()
6322 vhtcaps->vht_capabilities_info); in wpa_supplicant_apply_vht_overrides()
6326 if (ssid->vht_capa_mask & VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX) { in wpa_supplicant_apply_vht_overrides()
6329 max_ampdu = (ssid->vht_capa & in wpa_supplicant_apply_vht_overrides()
6335 (void *) params->htcaps, in wpa_supplicant_apply_vht_overrides()
6336 (void *) params->htcaps_mask, in wpa_supplicant_apply_vht_overrides()
6342 if (ssid->vht_tx_mcs_nss_ ##i >= 0) { \ in wpa_supplicant_apply_vht_overrides()
6343 vhtcaps_mask->vht_supported_mcs_set.tx_map |= \ in wpa_supplicant_apply_vht_overrides()
6344 host_to_le16(3 << 2 * (i - 1)); \ in wpa_supplicant_apply_vht_overrides()
6345 vhtcaps->vht_supported_mcs_set.tx_map |= \ in wpa_supplicant_apply_vht_overrides()
6346 host_to_le16(ssid->vht_tx_mcs_nss_ ##i << \ in wpa_supplicant_apply_vht_overrides()
6347 2 * (i - 1)); \ in wpa_supplicant_apply_vht_overrides()
6349 if (ssid->vht_rx_mcs_nss_ ##i >= 0) { \ in wpa_supplicant_apply_vht_overrides()
6350 vhtcaps_mask->vht_supported_mcs_set.rx_map |= \ in wpa_supplicant_apply_vht_overrides()
6351 host_to_le16(3 << 2 * (i - 1)); \ in wpa_supplicant_apply_vht_overrides()
6352 vhtcaps->vht_supported_mcs_set.rx_map |= \ in wpa_supplicant_apply_vht_overrides()
6353 host_to_le16(ssid->vht_rx_mcs_nss_ ##i << \ in wpa_supplicant_apply_vht_overrides()
6354 2 * (i - 1)); \ in wpa_supplicant_apply_vht_overrides()
6377 params->disable_he = ssid->disable_he; in wpa_supplicant_apply_he_overrides()
6389 params->disable_eht = ssid->disable_eht; in wpa_supplicant_apply_eht_overrides()
6398 if (!wpa_s->conf->pcsc_reader) in pcsc_reader_init()
6401 wpa_s->scard = scard_init(wpa_s->conf->pcsc_reader); in pcsc_reader_init()
6402 if (!wpa_s->scard) in pcsc_reader_init()
6405 if (wpa_s->conf->pcsc_pin && in pcsc_reader_init()
6406 scard_set_pin(wpa_s->scard, wpa_s->conf->pcsc_pin) < 0) { in pcsc_reader_init()
6407 scard_deinit(wpa_s->scard); in pcsc_reader_init()
6408 wpa_s->scard = NULL; in pcsc_reader_init()
6410 return -1; in pcsc_reader_init()
6413 len = sizeof(wpa_s->imsi) - 1; in pcsc_reader_init()
6414 if (scard_get_imsi(wpa_s->scard, wpa_s->imsi, &len)) { in pcsc_reader_init()
6415 scard_deinit(wpa_s->scard); in pcsc_reader_init()
6416 wpa_s->scard = NULL; in pcsc_reader_init()
6418 return -1; in pcsc_reader_init()
6420 wpa_s->imsi[len] = '\0'; in pcsc_reader_init()
6422 wpa_s->mnc_len = scard_get_mnc_len(wpa_s->scard); in pcsc_reader_init()
6425 wpa_s->imsi, wpa_s->mnc_len); in pcsc_reader_init()
6427 wpa_sm_set_scard_ctx(wpa_s->wpa, wpa_s->scard); in pcsc_reader_init()
6428 eapol_sm_register_scard_ctx(wpa_s->eapol, wpa_s->scard); in pcsc_reader_init()
6439 ext_password_deinit(wpa_s->ext_pw); in wpas_init_ext_pw()
6440 wpa_s->ext_pw = NULL; in wpas_init_ext_pw()
6441 eapol_sm_set_ext_pw_ctx(wpa_s->eapol, NULL); in wpas_init_ext_pw()
6443 if (!wpa_s->conf->ext_password_backend) in wpas_init_ext_pw()
6446 val = os_strdup(wpa_s->conf->ext_password_backend); in wpas_init_ext_pw()
6448 return -1; in wpas_init_ext_pw()
6455 wpa_s->ext_pw = ext_password_init(val, pos); in wpas_init_ext_pw()
6457 if (wpa_s->ext_pw == NULL) { in wpas_init_ext_pw()
6459 return -1; in wpas_init_ext_pw()
6461 eapol_sm_set_ext_pw_ctx(wpa_s->eapol, wpa_s->ext_pw); in wpas_init_ext_pw()
6473 return (is_zero_ether_addr(wpa_s->bssid) || in wpas_fst_get_bssid_cb()
6474 wpa_s->wpa_state != WPA_COMPLETED) ? NULL : wpa_s->bssid; in wpas_fst_get_bssid_cb()
6484 if (wpa_s->current_bss) { in wpas_fst_get_channel_info_cb()
6485 *hw_mode = ieee80211_freq_to_chan(wpa_s->current_bss->freq, in wpas_fst_get_channel_info_cb()
6487 } else if (wpa_s->hw.num_modes) { in wpas_fst_get_channel_info_cb()
6488 *hw_mode = wpa_s->hw.modes[0].mode; in wpas_fst_get_channel_info_cb()
6500 *modes = wpa_s->hw.modes; in wpas_fst_get_hw_modes()
6501 return wpa_s->hw.num_modes; in wpas_fst_get_hw_modes()
6510 wpa_s->fst_ies = fst_ies; in wpas_fst_set_ies_cb()
6518 if (!ether_addr_equal(wpa_s->bssid, da)) { in wpas_fst_send_action_cb()
6520 __func__, MAC2STR(wpa_s->bssid), MAC2STR(da)); in wpas_fst_send_action_cb()
6521 return -1; in wpas_fst_send_action_cb()
6523 return wpa_drv_send_action(wpa_s, wpa_s->assoc_freq, 0, wpa_s->bssid, in wpas_fst_send_action_cb()
6524 wpa_s->own_addr, wpa_s->bssid, in wpas_fst_send_action_cb()
6534 WPA_ASSERT(ether_addr_equal(wpa_s->bssid, addr)); in wpas_fst_get_mb_ie_cb()
6535 return wpa_s->received_mb_ies; in wpas_fst_get_mb_ie_cb()
6545 WPA_ASSERT(ether_addr_equal(wpa_s->bssid, addr)); in wpas_fst_update_mb_ie_cb()
6548 wpabuf_free(wpa_s->received_mb_ies); in wpas_fst_update_mb_ie_cb()
6549 wpa_s->received_mb_ies = mb_ies_by_info(&info); in wpas_fst_update_mb_ie_cb()
6561 if (!is_zero_ether_addr(wpa_s->bssid)) in wpas_fst_get_peer_first()
6562 return (wpa_s->received_mb_ies || !mb_only) ? in wpas_fst_get_peer_first()
6563 wpa_s->bssid : NULL; in wpas_fst_get_peer_first()
6579 iface_obj->ctx = wpa_s; in fst_wpa_supplicant_fill_iface_obj()
6580 iface_obj->get_bssid = wpas_fst_get_bssid_cb; in fst_wpa_supplicant_fill_iface_obj()
6581 iface_obj->get_channel_info = wpas_fst_get_channel_info_cb; in fst_wpa_supplicant_fill_iface_obj()
6582 iface_obj->get_hw_modes = wpas_fst_get_hw_modes; in fst_wpa_supplicant_fill_iface_obj()
6583 iface_obj->set_ies = wpas_fst_set_ies_cb; in fst_wpa_supplicant_fill_iface_obj()
6584 iface_obj->send_action = wpas_fst_send_action_cb; in fst_wpa_supplicant_fill_iface_obj()
6585 iface_obj->get_mb_ie = wpas_fst_get_mb_ie_cb; in fst_wpa_supplicant_fill_iface_obj()
6586 iface_obj->update_mb_ie = wpas_fst_update_mb_ie_cb; in fst_wpa_supplicant_fill_iface_obj()
6587 iface_obj->get_peer_first = wpas_fst_get_peer_first; in fst_wpa_supplicant_fill_iface_obj()
6588 iface_obj->get_peer_next = wpas_fst_get_peer_next; in fst_wpa_supplicant_fill_iface_obj()
6598 if (!wpa_s->conf->wowlan_triggers) in wpas_set_wowlan_triggers()
6601 triggers = wpa_get_wowlan_triggers(wpa_s->conf->wowlan_triggers, capa); in wpas_set_wowlan_triggers()
6634 for (i = 0; i < wpa_s->hw.num_modes; i++) { in wpas_get_bands()
6635 if (wpa_s->hw.modes[i].num_channels != 0) { in wpas_get_bands()
6636 if (wpa_s->hw.modes[i].mode == in wpas_get_bands()
6638 wpa_s->hw.modes[i].mode == in wpas_get_bands()
6641 else if (wpa_s->hw.modes[i].mode == in wpas_get_bands()
6644 else if (wpa_s->hw.modes[i].mode == in wpas_get_bands()
6647 else if (wpa_s->hw.modes[i].mode == in wpas_get_bands()
6662 struct wpa_supplicant *iface = wpa_s->global->ifaces; in radio_add_interface()
6666 radio = iface->radio; in radio_add_interface()
6667 if (radio && os_strcmp(rn, radio->name) == 0) { in radio_add_interface()
6669 wpa_s->ifname, rn); in radio_add_interface()
6670 dl_list_add(&radio->ifaces, &wpa_s->radio_list); in radio_add_interface()
6674 iface = iface->next; in radio_add_interface()
6678 wpa_s->ifname, rn ? rn : "N/A"); in radio_add_interface()
6684 os_strlcpy(radio->name, rn, sizeof(radio->name)); in radio_add_interface()
6685 dl_list_init(&radio->ifaces); in radio_add_interface()
6686 dl_list_init(&radio->work); in radio_add_interface()
6687 dl_list_add(&radio->ifaces, &wpa_s->radio_list); in radio_add_interface()
6695 if (work->wpa_s->scan_work == work) { in radio_work_free()
6697 …wpa_dbg(work->wpa_s, MSG_INFO, "Freeing radio work '%s'@%p (started=%d) that is marked as scan_wor… in radio_work_free()
6698 work->type, work, work->started); in radio_work_free()
6699 work->wpa_s->scan_work = NULL; in radio_work_free()
6703 if (work->wpa_s->p2p_scan_work == work) { in radio_work_free()
6705 …wpa_dbg(work->wpa_s, MSG_INFO, "Freeing radio work '%s'@%p (started=%d) that is marked as p2p_scan… in radio_work_free()
6706 work->type, work, work->started); in radio_work_free()
6707 work->wpa_s->p2p_scan_work = NULL; in radio_work_free()
6711 if (work->started) { in radio_work_free()
6712 work->wpa_s->radio->num_active_works--; in radio_work_free()
6713 wpa_dbg(work->wpa_s, MSG_DEBUG, in radio_work_free()
6714 "radio_work_free('%s'@%p): num_active_works --> %u", in radio_work_free()
6715 work->type, work, in radio_work_free()
6716 work->wpa_s->radio->num_active_works); in radio_work_free()
6719 dl_list_del(&work->list); in radio_work_free()
6726 return os_strcmp(work->type, "sme-connect") == 0 || in radio_work_is_connect()
6727 os_strcmp(work->type, "connect") == 0; in radio_work_is_connect()
6733 return os_strcmp(work->type, "scan") == 0 || in radio_work_is_scan()
6734 os_strcmp(work->type, "p2p-scan") == 0; in radio_work_is_scan()
6744 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, list) { in radio_work_get_next_work()
6745 if (tmp->started) { in radio_work_get_next_work()
6753 radio->num_active_works = 0; in radio_work_get_next_work()
6754 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, in radio_work_get_next_work()
6756 if (os_strcmp(tmp->type, "scan") == 0 && in radio_work_get_next_work()
6759 tmp->ctx)->only_new_results || in radio_work_get_next_work()
6760 tmp->wpa_s->clear_driver_scan_cache)) in radio_work_get_next_work()
6769 * If the active work is either connect or sme-connect, in radio_work_get_next_work()
6772 wpa_dbg(active_work->wpa_s, MSG_DEBUG, in radio_work_get_next_work()
6774 active_work->type); in radio_work_get_next_work()
6778 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, list) { in radio_work_get_next_work()
6779 if (tmp->started) in radio_work_get_next_work()
6783 * If connect or sme-connect are enqueued, parallelize only in radio_work_get_next_work()
6792 if (active_work->wpa_s == tmp->wpa_s && in radio_work_get_next_work()
6795 wpa_dbg(active_work->wpa_s, MSG_DEBUG, in radio_work_get_next_work()
6797 tmp->type, active_work->type); in radio_work_get_next_work()
6804 if (os_strcmp(active_work->type, tmp->type) != 0 && in radio_work_get_next_work()
6805 (active_work->bands != tmp->bands)) { in radio_work_get_next_work()
6812 if (os_strcmp(tmp->type, "scan") == 0 && in radio_work_get_next_work()
6815 tmp->ctx)->only_new_results || in radio_work_get_next_work()
6816 tmp->wpa_s->clear_driver_scan_cache)) in radio_work_get_next_work()
6819 wpa_dbg(active_work->wpa_s, MSG_DEBUG, in radio_work_get_next_work()
6821 active_work->type, tmp->type); in radio_work_get_next_work()
6838 work = dl_list_first(&radio->work, struct wpa_radio_work, list); in radio_start_next_work()
6840 radio->num_active_works = 0; in radio_start_next_work()
6844 wpa_s = dl_list_first(&radio->ifaces, struct wpa_supplicant, in radio_start_next_work()
6848 wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS)) { in radio_start_next_work()
6849 if (work->started) in radio_start_next_work()
6852 if (wpa_s && external_scan_running(wpa_s->radio)) { in radio_start_next_work()
6858 if (radio->num_active_works < MAX_ACTIVE_WORKS) { in radio_start_next_work()
6866 wpa_s = work->wpa_s; in radio_start_next_work()
6868 os_reltime_sub(&now, &work->time, &diff); in radio_start_next_work()
6871 work->type, work, diff.sec, diff.usec); in radio_start_next_work()
6872 work->started = 1; in radio_start_next_work()
6873 work->time = now; in radio_start_next_work()
6874 radio->num_active_works++; in radio_start_next_work()
6876 work->cb(work, 0); in radio_start_next_work()
6878 if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS) && in radio_start_next_work()
6879 radio->num_active_works < MAX_ACTIVE_WORKS) in radio_start_next_work()
6899 struct wpa_radio *radio = wpa_s->radio; in radio_remove_works()
6901 dl_list_for_each_safe(work, tmp, &radio->work, struct wpa_radio_work, in radio_remove_works()
6903 if (type && os_strcmp(type, work->type) != 0) in radio_remove_works()
6907 if (!remove_all && work->wpa_s != wpa_s) in radio_remove_works()
6911 work->type, work, work->started ? " (started)" : ""); in radio_remove_works()
6912 work->cb(work, 1); in radio_remove_works()
6924 struct wpa_radio *radio = wpa_s->radio; in radio_remove_pending_work()
6926 dl_list_for_each(work, &radio->work, struct wpa_radio_work, list) { in radio_remove_pending_work()
6927 if (work->ctx != ctx) in radio_remove_pending_work()
6930 work->type, work, work->started ? " (started)" : ""); in radio_remove_pending_work()
6939 struct wpa_radio *radio = wpa_s->radio; in radio_remove_interface()
6945 wpa_s->ifname, radio->name); in radio_remove_interface()
6946 dl_list_del(&wpa_s->radio_list); in radio_remove_interface()
6950 if (wpa_s == radio->external_scan_req_interface) in radio_remove_interface()
6951 radio->external_scan_req_interface = NULL; in radio_remove_interface()
6952 wpa_s->radio = NULL; in radio_remove_interface()
6953 if (!dl_list_empty(&radio->ifaces)) in radio_remove_interface()
6956 wpa_printf(MSG_DEBUG, "Remove radio %s", radio->name); in radio_remove_interface()
6964 struct wpa_radio *radio = wpa_s->radio; in radio_work_check_next()
6966 if (dl_list_empty(&radio->work)) in radio_work_check_next()
6968 if (wpa_s->ext_work_in_progress) { in radio_work_check_next()
6970 "External radio work in progress - delay start of pending item"); in radio_work_check_next()
6979 * radio_add_work - Add a radio work item
6985 * @ctx: Context pointer for the work (work->ctx in cb())
6986 * Returns: 0 on success, -1 on failure
7008 struct wpa_radio *radio = wpa_s->radio; in radio_add_work()
7014 return -1; in radio_add_work()
7016 os_get_reltime(&work->time); in radio_add_work()
7017 work->freq = freq; in radio_add_work()
7018 work->type = type; in radio_add_work()
7019 work->wpa_s = wpa_s; in radio_add_work()
7020 work->cb = cb; in radio_add_work()
7021 work->ctx = ctx; in radio_add_work()
7024 work->bands = wpas_freq_to_band(freq); in radio_add_work()
7026 os_strcmp(type, "p2p-scan") == 0) in radio_add_work()
7027 work->bands = wpas_get_bands(wpa_s, in radio_add_work()
7029 ctx)->freqs); in radio_add_work()
7031 work->bands = wpas_get_bands(wpa_s, NULL); in radio_add_work()
7033 was_empty = dl_list_empty(&wpa_s->radio->work); in radio_add_work()
7035 dl_list_add(&wpa_s->radio->work, &work->list); in radio_add_work()
7037 dl_list_add_tail(&wpa_s->radio->work, &work->list); in radio_add_work()
7039 wpa_dbg(wpa_s, MSG_DEBUG, "First radio work item in the queue - schedule start immediately"); in radio_add_work()
7041 } else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS) in radio_add_work()
7042 && radio->num_active_works < MAX_ACTIVE_WORKS) { in radio_add_work()
7045 radio->num_active_works); in radio_add_work()
7054 * radio_work_done - Indicate that a radio work item has been completed
7062 struct wpa_supplicant *wpa_s = work->wpa_s; in radio_work_done()
7064 unsigned int started = work->started; in radio_work_done()
7067 os_reltime_sub(&now, &work->time, &diff); in radio_work_done()
7069 work->type, work, started ? "done" : "canceled", in radio_work_done()
7081 struct wpa_radio *radio = wpa_s->radio; in radio_work_pending()
7083 dl_list_for_each(work, &radio->work, struct wpa_radio_work, list) { in radio_work_pending()
7084 if (work->wpa_s == wpa_s && os_strcmp(work->type, type) == 0) in radio_work_pending()
7097 driver = iface->driver; in wpas_init_driver()
7100 return -1; in wpas_init_driver()
7102 wpa_s->drv_priv = wpa_drv_init(wpa_s, wpa_s->ifname); in wpas_init_driver()
7103 if (wpa_s->drv_priv == NULL) { in wpas_init_driver()
7110 "driver interface - try next driver wrapper"); in wpas_init_driver()
7116 if (wpa_s->matched == WPA_IFACE_MATCHED_NULL) in wpas_init_driver()
7120 return -1; in wpas_init_driver()
7122 if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) { in wpas_init_driver()
7124 "driver_param '%s'", wpa_s->conf->driver_param); in wpas_init_driver()
7125 return -1; in wpas_init_driver()
7129 if (ifname && os_strcmp(ifname, wpa_s->ifname) != 0) { in wpas_init_driver()
7132 os_strlcpy(wpa_s->ifname, ifname, sizeof(wpa_s->ifname)); in wpas_init_driver()
7139 wpa_s->radio = radio_add_interface(wpa_s, rn); in wpas_init_driver()
7140 if (wpa_s->radio == NULL) in wpas_init_driver()
7141 return -1; in wpas_init_driver()
7155 wpa_printf(MSG_DEBUG, "GAS: TX status: freq=%u dst=" MACSTR in wpas_gas_server_tx_status()
7159 (result == OFFCHANNEL_SEND_ACTION_NO_ACK ? "no-ACK" : in wpas_gas_server_tx_status()
7161 gas_server_tx_status(wpa_s->gas_server, dst, data, data_len, in wpas_gas_server_tx_status()
7172 if (wait_time > wpa_s->max_remain_on_chan) in wpas_gas_server_tx()
7173 wait_time = wpa_s->max_remain_on_chan; in wpas_gas_server_tx()
7175 offchannel_send_action(wpa_s, freq, da, wpa_s->own_addr, broadcast, in wpas_gas_server_tx()
7190 "'%s' ctrl_interface '%s' bridge '%s'", iface->ifname, in wpa_supplicant_init_iface()
7191 iface->confname ? iface->confname : "N/A", in wpa_supplicant_init_iface()
7192 iface->driver ? iface->driver : "default", in wpa_supplicant_init_iface()
7193 iface->ctrl_interface ? iface->ctrl_interface : "N/A", in wpa_supplicant_init_iface()
7194 iface->bridge_ifname ? iface->bridge_ifname : "N/A"); in wpa_supplicant_init_iface()
7196 if (iface->confname) { in wpa_supplicant_init_iface()
7198 wpa_s->confname = os_rel2abs_path(iface->confname); in wpa_supplicant_init_iface()
7199 if (wpa_s->confname == NULL) { in wpa_supplicant_init_iface()
7202 iface->confname); in wpa_supplicant_init_iface()
7203 return -1; in wpa_supplicant_init_iface()
7205 wpa_printf(MSG_DEBUG, "Configuration file '%s' -> '%s'", in wpa_supplicant_init_iface()
7206 iface->confname, wpa_s->confname); in wpa_supplicant_init_iface()
7208 wpa_s->confname = os_strdup(iface->confname); in wpa_supplicant_init_iface()
7210 wpa_s->conf = wpa_config_read(wpa_s->confname, NULL, false); in wpa_supplicant_init_iface()
7211 if (wpa_s->conf == NULL) { in wpa_supplicant_init_iface()
7213 "configuration '%s'.", wpa_s->confname); in wpa_supplicant_init_iface()
7214 return -1; in wpa_supplicant_init_iface()
7216 wpa_s->confanother = os_rel2abs_path(iface->confanother); in wpa_supplicant_init_iface()
7217 if (wpa_s->confanother && in wpa_supplicant_init_iface()
7218 !wpa_config_read(wpa_s->confanother, wpa_s->conf, true)) { in wpa_supplicant_init_iface()
7221 wpa_s->confanother); in wpa_supplicant_init_iface()
7222 return -1; in wpa_supplicant_init_iface()
7229 if (iface->ctrl_interface) { in wpa_supplicant_init_iface()
7230 os_free(wpa_s->conf->ctrl_interface); in wpa_supplicant_init_iface()
7231 wpa_s->conf->ctrl_interface = in wpa_supplicant_init_iface()
7232 os_strdup(iface->ctrl_interface); in wpa_supplicant_init_iface()
7233 if (!wpa_s->conf->ctrl_interface) { in wpa_supplicant_init_iface()
7236 iface->ctrl_interface); in wpa_supplicant_init_iface()
7237 return -1; in wpa_supplicant_init_iface()
7241 if (iface->driver_param) { in wpa_supplicant_init_iface()
7242 os_free(wpa_s->conf->driver_param); in wpa_supplicant_init_iface()
7243 wpa_s->conf->driver_param = in wpa_supplicant_init_iface()
7244 os_strdup(iface->driver_param); in wpa_supplicant_init_iface()
7245 if (!wpa_s->conf->driver_param) { in wpa_supplicant_init_iface()
7248 iface->driver_param); in wpa_supplicant_init_iface()
7249 return -1; in wpa_supplicant_init_iface()
7253 if (iface->p2p_mgmt && !iface->ctrl_interface) { in wpa_supplicant_init_iface()
7254 os_free(wpa_s->conf->ctrl_interface); in wpa_supplicant_init_iface()
7255 wpa_s->conf->ctrl_interface = NULL; in wpa_supplicant_init_iface()
7258 wpa_s->conf = wpa_config_alloc_empty(iface->ctrl_interface, in wpa_supplicant_init_iface()
7259 iface->driver_param); in wpa_supplicant_init_iface()
7261 if (wpa_s->conf == NULL) { in wpa_supplicant_init_iface()
7263 return -1; in wpa_supplicant_init_iface()
7266 if (iface->ifname == NULL) { in wpa_supplicant_init_iface()
7268 return -1; in wpa_supplicant_init_iface()
7270 if (os_strlen(iface->ifname) >= sizeof(wpa_s->ifname)) { in wpa_supplicant_init_iface()
7272 iface->ifname); in wpa_supplicant_init_iface()
7273 return -1; in wpa_supplicant_init_iface()
7275 os_strlcpy(wpa_s->ifname, iface->ifname, sizeof(wpa_s->ifname)); in wpa_supplicant_init_iface()
7277 wpa_s->matched = iface->matched; in wpa_supplicant_init_iface()
7280 if (iface->bridge_ifname) { in wpa_supplicant_init_iface()
7281 if (os_strlen(iface->bridge_ifname) >= in wpa_supplicant_init_iface()
7282 sizeof(wpa_s->bridge_ifname)) { in wpa_supplicant_init_iface()
7284 "name '%s'.", iface->bridge_ifname); in wpa_supplicant_init_iface()
7285 return -1; in wpa_supplicant_init_iface()
7287 os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname, in wpa_supplicant_init_iface()
7288 sizeof(wpa_s->bridge_ifname)); in wpa_supplicant_init_iface()
7291 /* RSNA Supplicant Key Management - INITIALIZE */ in wpa_supplicant_init_iface()
7292 eapol_sm_notify_portEnabled(wpa_s->eapol, false); in wpa_supplicant_init_iface()
7293 eapol_sm_notify_portValid(wpa_s->eapol, false); in wpa_supplicant_init_iface()
7297 * EAPOL-Key packets if both become available for the same select() in wpa_supplicant_init_iface()
7300 return -1; in wpa_supplicant_init_iface()
7303 return -1; in wpa_supplicant_init_iface()
7305 wpa_sm_set_ifname(wpa_s->wpa, wpa_s->ifname, in wpa_supplicant_init_iface()
7306 wpa_s->bridge_ifname[0] ? wpa_s->bridge_ifname : in wpa_supplicant_init_iface()
7308 wpa_sm_set_fast_reauth(wpa_s->wpa, wpa_s->conf->fast_reauth); in wpa_supplicant_init_iface()
7310 if (wpa_s->conf->dot11RSNAConfigPMKLifetime && in wpa_supplicant_init_iface()
7311 wpa_sm_set_param(wpa_s->wpa, RSNA_PMK_LIFETIME, in wpa_supplicant_init_iface()
7312 wpa_s->conf->dot11RSNAConfigPMKLifetime)) { in wpa_supplicant_init_iface()
7315 return -1; in wpa_supplicant_init_iface()
7318 if (wpa_s->conf->dot11RSNAConfigPMKReauthThreshold && in wpa_supplicant_init_iface()
7319 wpa_sm_set_param(wpa_s->wpa, RSNA_PMK_REAUTH_THRESHOLD, in wpa_supplicant_init_iface()
7320 wpa_s->conf->dot11RSNAConfigPMKReauthThreshold)) { in wpa_supplicant_init_iface()
7323 return -1; in wpa_supplicant_init_iface()
7326 if (wpa_s->conf->dot11RSNAConfigSATimeout && in wpa_supplicant_init_iface()
7327 wpa_sm_set_param(wpa_s->wpa, RSNA_SA_TIMEOUT, in wpa_supplicant_init_iface()
7328 wpa_s->conf->dot11RSNAConfigSATimeout)) { in wpa_supplicant_init_iface()
7331 return -1; in wpa_supplicant_init_iface()
7334 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_FT_PREPEND_PMKID, in wpa_supplicant_init_iface()
7335 wpa_s->conf->ft_prepend_pmkid); in wpa_supplicant_init_iface()
7337 wpa_s->hw.modes = wpa_drv_get_hw_feature_data(wpa_s, in wpa_supplicant_init_iface()
7338 &wpa_s->hw.num_modes, in wpa_supplicant_init_iface()
7339 &wpa_s->hw.flags, in wpa_supplicant_init_iface()
7341 if (wpa_s->hw.modes) { in wpa_supplicant_init_iface()
7344 for (i = 0; i < wpa_s->hw.num_modes; i++) { in wpa_supplicant_init_iface()
7345 if (wpa_s->hw.modes[i].vht_capab) { in wpa_supplicant_init_iface()
7346 wpa_s->hw_capab = CAPAB_VHT; in wpa_supplicant_init_iface()
7350 if (wpa_s->hw.modes[i].ht_capab & in wpa_supplicant_init_iface()
7352 wpa_s->hw_capab = CAPAB_HT40; in wpa_supplicant_init_iface()
7353 else if (wpa_s->hw.modes[i].ht_capab && in wpa_supplicant_init_iface()
7354 wpa_s->hw_capab == CAPAB_NO_HT_VHT) in wpa_supplicant_init_iface()
7355 wpa_s->hw_capab = CAPAB_HT; in wpa_supplicant_init_iface()
7357 wpa_s->support_6ghz = wpas_is_6ghz_supported(wpa_s, false); in wpa_supplicant_init_iface()
7362 wpa_s->drv_capa_known = 1; in wpa_supplicant_init_iface()
7363 wpa_s->drv_flags = capa.flags; in wpa_supplicant_init_iface()
7364 wpa_s->drv_flags2 = capa.flags2; in wpa_supplicant_init_iface()
7365 wpa_s->drv_enc = capa.enc; in wpa_supplicant_init_iface()
7366 wpa_s->drv_rrm_flags = capa.rrm_flags; in wpa_supplicant_init_iface()
7367 wpa_s->drv_max_acl_mac_addrs = capa.max_acl_mac_addrs; in wpa_supplicant_init_iface()
7368 wpa_s->probe_resp_offloads = capa.probe_resp_offloads; in wpa_supplicant_init_iface()
7369 wpa_s->max_scan_ssids = capa.max_scan_ssids; in wpa_supplicant_init_iface()
7370 wpa_s->max_sched_scan_ssids = capa.max_sched_scan_ssids; in wpa_supplicant_init_iface()
7371 wpa_s->max_sched_scan_plans = capa.max_sched_scan_plans; in wpa_supplicant_init_iface()
7372 wpa_s->max_sched_scan_plan_interval = in wpa_supplicant_init_iface()
7374 wpa_s->max_sched_scan_plan_iterations = in wpa_supplicant_init_iface()
7376 wpa_s->sched_scan_supported = capa.sched_scan_supported; in wpa_supplicant_init_iface()
7377 wpa_s->max_match_sets = capa.max_match_sets; in wpa_supplicant_init_iface()
7378 wpa_s->max_remain_on_chan = capa.max_remain_on_chan; in wpa_supplicant_init_iface()
7379 wpa_s->max_stations = capa.max_stations; in wpa_supplicant_init_iface()
7380 wpa_s->extended_capa = capa.extended_capa; in wpa_supplicant_init_iface()
7381 wpa_s->extended_capa_mask = capa.extended_capa_mask; in wpa_supplicant_init_iface()
7382 wpa_s->extended_capa_len = capa.extended_capa_len; in wpa_supplicant_init_iface()
7383 wpa_s->num_multichan_concurrent = in wpa_supplicant_init_iface()
7386 wpa_s->wmm_ac_supported = capa.wmm_ac_supported; in wpa_supplicant_init_iface()
7388 wpa_s->max_num_akms = capa.max_num_akms; in wpa_supplicant_init_iface()
7391 wpa_s->mac_addr_rand_supported |= MAC_ADDR_RAND_SCAN; in wpa_supplicant_init_iface()
7392 if (wpa_s->sched_scan_supported && in wpa_supplicant_init_iface()
7394 wpa_s->mac_addr_rand_supported |= in wpa_supplicant_init_iface()
7398 if (wpa_s->extended_capa && in wpa_supplicant_init_iface()
7399 wpa_s->extended_capa_len >= 3 && in wpa_supplicant_init_iface()
7400 wpa_s->extended_capa[2] & 0x40) in wpa_supplicant_init_iface()
7401 wpa_s->multi_bss_support = 1; in wpa_supplicant_init_iface()
7404 wpa_pasn_sm_set_caps(wpa_s->wpa, wpa_s->drv_flags2); in wpa_supplicant_init_iface()
7406 wpa_sm_set_driver_bss_selection(wpa_s->wpa, in wpa_supplicant_init_iface()
7407 !!(wpa_s->drv_flags & in wpa_supplicant_init_iface()
7409 if (wpa_s->max_remain_on_chan == 0) in wpa_supplicant_init_iface()
7410 wpa_s->max_remain_on_chan = 1000; in wpa_supplicant_init_iface()
7417 if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) in wpa_supplicant_init_iface()
7418 wpa_s->p2p_mgmt = iface->p2p_mgmt; in wpa_supplicant_init_iface()
7420 if (wpa_s->num_multichan_concurrent == 0) in wpa_supplicant_init_iface()
7421 wpa_s->num_multichan_concurrent = 1; in wpa_supplicant_init_iface()
7424 return -1; in wpa_supplicant_init_iface()
7427 if (!iface->p2p_mgmt && wpa_tdls_init(wpa_s->wpa)) in wpa_supplicant_init_iface()
7428 return -1; in wpa_supplicant_init_iface()
7431 if (wpa_s->conf->country[0] && wpa_s->conf->country[1] && in wpa_supplicant_init_iface()
7432 wpa_drv_set_country(wpa_s, wpa_s->conf->country)) { in wpa_supplicant_init_iface()
7434 return -1; in wpa_supplicant_init_iface()
7438 if (wpa_s->conf->fst_group_id) { in wpa_supplicant_init_iface()
7443 os_strlcpy(cfg.group_id, wpa_s->conf->fst_group_id, in wpa_supplicant_init_iface()
7445 cfg.priority = wpa_s->conf->fst_priority; in wpa_supplicant_init_iface()
7446 cfg.llt = wpa_s->conf->fst_llt; in wpa_supplicant_init_iface()
7448 wpa_s->fst = fst_attach(wpa_s->ifname, wpa_s->own_addr, in wpa_supplicant_init_iface()
7450 if (!wpa_s->fst) { in wpa_supplicant_init_iface()
7453 wpa_s->ifname, cfg.group_id); in wpa_supplicant_init_iface()
7454 return -1; in wpa_supplicant_init_iface()
7460 return -1; in wpa_supplicant_init_iface()
7463 wpa_s->gas_server = gas_server_init(wpa_s, wpas_gas_server_tx); in wpa_supplicant_init_iface()
7464 if (!wpa_s->gas_server) { in wpa_supplicant_init_iface()
7466 return -1; in wpa_supplicant_init_iface()
7472 return -1; in wpa_supplicant_init_iface()
7477 return -1; in wpa_supplicant_init_iface()
7481 return -1; in wpa_supplicant_init_iface()
7482 wpa_sm_set_eapol(wpa_s->wpa, wpa_s->eapol); in wpa_supplicant_init_iface()
7484 wpa_s->ctrl_iface = wpa_supplicant_ctrl_iface_init(wpa_s); in wpa_supplicant_init_iface()
7485 if (wpa_s->ctrl_iface == NULL) { in wpa_supplicant_init_iface()
7490 "left by an unclean termination of wpa_supplicant " in wpa_supplicant_init_iface()
7494 wpa_s->conf->ctrl_interface); in wpa_supplicant_init_iface()
7495 return -1; in wpa_supplicant_init_iface()
7498 wpa_s->gas = gas_query_init(wpa_s); in wpa_supplicant_init_iface()
7499 if (wpa_s->gas == NULL) { in wpa_supplicant_init_iface()
7501 return -1; in wpa_supplicant_init_iface()
7504 if ((!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) || in wpa_supplicant_init_iface()
7505 wpa_s->p2p_mgmt) && in wpa_supplicant_init_iface()
7506 wpas_p2p_init(wpa_s->global, wpa_s) < 0) { in wpa_supplicant_init_iface()
7508 return -1; in wpa_supplicant_init_iface()
7512 return -1; in wpa_supplicant_init_iface()
7516 dl_list_init(&wpa_s->mesh_external_pmksa_cache); in wpa_supplicant_init_iface()
7521 * Set Wake-on-WLAN triggers, if configured. in wpa_supplicant_init_iface()
7526 return -1; in wpa_supplicant_init_iface()
7531 wpa_s->mnc_len = eapol_sm_get_eap_proxy_imsi(wpa_s->eapol, -1, in wpa_supplicant_init_iface()
7532 wpa_s->imsi, &len); in wpa_supplicant_init_iface()
7533 if (wpa_s->mnc_len > 0) { in wpa_supplicant_init_iface()
7534 wpa_s->imsi[len] = '\0'; in wpa_supplicant_init_iface()
7536 wpa_s->imsi, wpa_s->mnc_len); in wpa_supplicant_init_iface()
7544 return -1; in wpa_supplicant_init_iface()
7547 return -1; in wpa_supplicant_init_iface()
7553 wpas_sched_scan_plans_set(wpa_s, wpa_s->conf->sched_scan_plans); in wpa_supplicant_init_iface()
7559 if (!wpa_s->disable_mbo_oce && wpa_s->conf->oce) { in wpa_supplicant_init_iface()
7560 if ((wpa_s->conf->oce & OCE_STA) && in wpa_supplicant_init_iface()
7561 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_OCE_STA)) in wpa_supplicant_init_iface()
7562 wpa_s->enable_oce = OCE_STA; in wpa_supplicant_init_iface()
7563 if ((wpa_s->conf->oce & OCE_STA_CFON) && in wpa_supplicant_init_iface()
7564 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_OCE_STA_CFON)) { in wpa_supplicant_init_iface()
7565 /* TODO: Need to add STA-CFON support */ in wpa_supplicant_init_iface()
7567 "OCE STA-CFON feature is not yet supported"); in wpa_supplicant_init_iface()
7570 wpas_mbo_update_non_pref_chan(wpa_s, wpa_s->conf->non_pref_chan); in wpa_supplicant_init_iface()
7582 struct wpa_global *global = wpa_s->global; in wpa_supplicant_deinit_iface()
7585 if (wpa_s == wpa_s->parent) in wpa_supplicant_deinit_iface()
7588 iface = global->ifaces; in wpa_supplicant_deinit_iface()
7590 if (iface->p2pdev == wpa_s) in wpa_supplicant_deinit_iface()
7591 iface->p2pdev = iface->parent; in wpa_supplicant_deinit_iface()
7592 if (iface == wpa_s || iface->parent != wpa_s) { in wpa_supplicant_deinit_iface()
7593 iface = iface->next; in wpa_supplicant_deinit_iface()
7598 iface->ifname, wpa_s->ifname); in wpa_supplicant_deinit_iface()
7600 iface = iface->next; in wpa_supplicant_deinit_iface()
7604 wpa_s->disconnected = 1; in wpa_supplicant_deinit_iface()
7605 if (wpa_s->drv_priv) { in wpa_supplicant_deinit_iface()
7611 wpa_s->conf->wowlan_disconnect_on_deinit) { in wpa_supplicant_deinit_iface()
7630 if (wpa_s->fst) { in wpa_supplicant_deinit_iface()
7631 fst_detach(wpa_s->fst); in wpa_supplicant_deinit_iface()
7632 wpa_s->fst = NULL; in wpa_supplicant_deinit_iface()
7634 if (wpa_s->received_mb_ies) { in wpa_supplicant_deinit_iface()
7635 wpabuf_free(wpa_s->received_mb_ies); in wpa_supplicant_deinit_iface()
7636 wpa_s->received_mb_ies = NULL; in wpa_supplicant_deinit_iface()
7640 if (wpa_s->drv_priv) in wpa_supplicant_deinit_iface()
7649 wpa_supplicant_ctrl_iface_deinit(wpa_s, wpa_s->ctrl_iface); in wpa_supplicant_deinit_iface()
7650 wpa_s->ctrl_iface = NULL; in wpa_supplicant_deinit_iface()
7653 if (wpa_s->ifmsh) { in wpa_supplicant_deinit_iface()
7654 wpa_supplicant_mesh_iface_deinit(wpa_s, wpa_s->ifmsh, true); in wpa_supplicant_deinit_iface()
7655 wpa_s->ifmsh = NULL; in wpa_supplicant_deinit_iface()
7659 if (wpa_s->conf != NULL) { in wpa_supplicant_deinit_iface()
7660 wpa_config_free(wpa_s->conf); in wpa_supplicant_deinit_iface()
7661 wpa_s->conf = NULL; in wpa_supplicant_deinit_iface()
7664 os_free(wpa_s->ssids_from_scan_req); in wpa_supplicant_deinit_iface()
7665 os_free(wpa_s->last_scan_freqs); in wpa_supplicant_deinit_iface()
7674 * wpa_supplicant_match_iface - Match an interface description to a name
7685 for (i = 0; i < global->params.match_iface_count; i++) { in wpa_supplicant_match_iface()
7686 miface = &global->params.match_ifaces[i]; in wpa_supplicant_match_iface()
7687 if (!miface->ifname || in wpa_supplicant_match_iface()
7688 fnmatch(miface->ifname, ifname, 0) == 0) { in wpa_supplicant_match_iface()
7693 if (!miface->ifname) in wpa_supplicant_match_iface()
7694 iface->matched = WPA_IFACE_MATCHED_NULL; in wpa_supplicant_match_iface()
7696 iface->matched = WPA_IFACE_MATCHED; in wpa_supplicant_match_iface()
7697 iface->ifname = ifname; in wpa_supplicant_match_iface()
7707 * wpa_supplicant_match_existing - Match existing interfaces
7709 * Returns: 0 on success, -1 on failure
7720 return -1; in wpa_supplicant_match_existing()
7723 for (ifi = ifp; ifi->if_name; ifi++) { in wpa_supplicant_match_existing()
7724 wpa_s = wpa_supplicant_get_iface(global, ifi->if_name); in wpa_supplicant_match_existing()
7727 iface = wpa_supplicant_match_iface(global, ifi->if_name); in wpa_supplicant_match_existing()
7742 * wpa_supplicant_add_iface - Add a new network interface
7769 wpa_s->global = global; in wpa_supplicant_add_iface()
7772 if (global->params.override_driver) { in wpa_supplicant_add_iface()
7774 "('%s' -> '%s')", in wpa_supplicant_add_iface()
7775 iface->driver, global->params.override_driver); in wpa_supplicant_add_iface()
7776 t_iface.driver = global->params.override_driver; in wpa_supplicant_add_iface()
7778 if (global->params.override_ctrl_interface) { in wpa_supplicant_add_iface()
7780 "ctrl_interface ('%s' -> '%s')", in wpa_supplicant_add_iface()
7781 iface->ctrl_interface, in wpa_supplicant_add_iface()
7782 global->params.override_ctrl_interface); in wpa_supplicant_add_iface()
7784 global->params.override_ctrl_interface; in wpa_supplicant_add_iface()
7788 iface->ifname); in wpa_supplicant_add_iface()
7793 if (iface->p2p_mgmt == 0) { in wpa_supplicant_add_iface()
7800 for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) in wpa_supplicant_add_iface()
7804 wpa_s->next = global->ifaces; in wpa_supplicant_add_iface()
7805 global->ifaces = wpa_s; in wpa_supplicant_add_iface()
7807 wpa_dbg(wpa_s, MSG_DEBUG, "Added interface %s", wpa_s->ifname); in wpa_supplicant_add_iface()
7811 if (wpa_s->global->p2p == NULL && in wpa_supplicant_add_iface()
7812 !wpa_s->global->p2p_disabled && !wpa_s->conf->p2p_disabled && in wpa_supplicant_add_iface()
7813 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) && in wpa_supplicant_add_iface()
7815 wpa_s, wpa_s->global->params.conf_p2p_dev) < 0) { in wpa_supplicant_add_iface()
7827 * wpa_supplicant_remove_iface - Remove a network interface
7830 * Returns: 0 if interface was removed, -1 if interface was not found
7843 unsigned int mesh_if_created = wpa_s->mesh_if_created; in wpa_supplicant_remove_iface()
7845 struct wpa_supplicant *parent = wpa_s->parent; in wpa_supplicant_remove_iface()
7849 prev = global->ifaces; in wpa_supplicant_remove_iface()
7851 global->ifaces = wpa_s->next; in wpa_supplicant_remove_iface()
7853 while (prev && prev->next != wpa_s) in wpa_supplicant_remove_iface()
7854 prev = prev->next; in wpa_supplicant_remove_iface()
7856 return -1; in wpa_supplicant_remove_iface()
7857 prev->next = wpa_s->next; in wpa_supplicant_remove_iface()
7860 wpa_dbg(wpa_s, MSG_DEBUG, "Removing interface %s", wpa_s->ifname); in wpa_supplicant_remove_iface()
7864 ifname = os_strdup(wpa_s->ifname); in wpa_supplicant_remove_iface()
7868 return -1; in wpa_supplicant_remove_iface()
7873 if (global->p2p_group_formation == wpa_s) in wpa_supplicant_remove_iface()
7874 global->p2p_group_formation = NULL; in wpa_supplicant_remove_iface()
7875 if (global->p2p_invite_group == wpa_s) in wpa_supplicant_remove_iface()
7876 global->p2p_invite_group = NULL; in wpa_supplicant_remove_iface()
7891 * wpa_supplicant_get_eap_mode - Get the current EAP mode
7899 if (wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt) == 0 && in wpa_supplicant_get_eap_mode()
7900 wpa_s->key_mgmt != WPA_KEY_MGMT_IEEE8021X_NO_WPA) { in wpa_supplicant_get_eap_mode()
7901 return "NO-EAP"; in wpa_supplicant_get_eap_mode()
7904 eapol_method = eapol_sm_get_method_name(wpa_s->eapol); in wpa_supplicant_get_eap_mode()
7906 return "UNKNOWN-EAP"; in wpa_supplicant_get_eap_mode()
7913 * wpa_supplicant_get_iface - Get a new network interface
7923 for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) { in wpa_supplicant_get_iface()
7924 if (os_strcmp(wpa_s->ifname, ifname) == 0) in wpa_supplicant_get_iface()
7937 return wpa_s->ifname; in wpa_supplicant_msg_ifname_cb()
7956 if (global->p2p) in wpas_periodic()
7957 p2p_expire_peers(global->p2p); in wpas_periodic()
7960 for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) { in wpas_periodic()
7961 wpa_bss_flush_by_age(wpa_s, wpa_s->conf->bss_expiration_age); in wpas_periodic()
7970 * wpa_supplicant_init - Initialize %wpa_supplicant
7990 if (params->wpa_debug_file_path) in wpa_supplicant_init()
7991 wpa_debug_open_file(params->wpa_debug_file_path); in wpa_supplicant_init()
7992 if (!params->wpa_debug_file_path && !params->wpa_debug_syslog) in wpa_supplicant_init()
7994 if (params->wpa_debug_syslog) in wpa_supplicant_init()
7996 if (params->wpa_debug_tracing) { in wpa_supplicant_init()
8008 if (ret == -2) in wpa_supplicant_init()
8017 dl_list_init(&global->p2p_srv_bonjour); in wpa_supplicant_init()
8018 dl_list_init(&global->p2p_srv_upnp); in wpa_supplicant_init()
8019 global->params.daemonize = params->daemonize; in wpa_supplicant_init()
8020 global->params.wait_for_monitor = params->wait_for_monitor; in wpa_supplicant_init()
8021 global->params.dbus_ctrl_interface = params->dbus_ctrl_interface; in wpa_supplicant_init()
8023 if (params->pid_file) { in wpa_supplicant_init()
8024 global->params.pid_file = os_strdup(params->pid_file); in wpa_supplicant_init()
8025 if (!global->params.pid_file) { in wpa_supplicant_init()
8031 if (params->ctrl_interface) { in wpa_supplicant_init()
8032 global->params.ctrl_interface = in wpa_supplicant_init()
8033 os_strdup(params->ctrl_interface); in wpa_supplicant_init()
8034 if (!global->params.ctrl_interface) { in wpa_supplicant_init()
8040 if (params->ctrl_interface_group) { in wpa_supplicant_init()
8041 global->params.ctrl_interface_group = in wpa_supplicant_init()
8042 os_strdup(params->ctrl_interface_group); in wpa_supplicant_init()
8043 if (!global->params.ctrl_interface_group) { in wpa_supplicant_init()
8049 if (params->override_driver) { in wpa_supplicant_init()
8050 global->params.override_driver = in wpa_supplicant_init()
8051 os_strdup(params->override_driver); in wpa_supplicant_init()
8052 if (!global->params.override_driver) { in wpa_supplicant_init()
8058 if (params->override_ctrl_interface) { in wpa_supplicant_init()
8059 global->params.override_ctrl_interface = in wpa_supplicant_init()
8060 os_strdup(params->override_ctrl_interface); in wpa_supplicant_init()
8061 if (!global->params.override_ctrl_interface) { in wpa_supplicant_init()
8068 global->params.match_iface_count = params->match_iface_count; in wpa_supplicant_init()
8069 if (params->match_iface_count) { in wpa_supplicant_init()
8070 global->params.match_ifaces = in wpa_supplicant_init()
8071 os_calloc(params->match_iface_count, in wpa_supplicant_init()
8073 if (!global->params.match_ifaces) { in wpa_supplicant_init()
8079 os_memcpy(global->params.match_ifaces, in wpa_supplicant_init()
8080 params->match_ifaces, in wpa_supplicant_init()
8081 params->match_iface_count * in wpa_supplicant_init()
8086 if (params->conf_p2p_dev) { in wpa_supplicant_init()
8087 global->params.conf_p2p_dev = in wpa_supplicant_init()
8088 os_strdup(params->conf_p2p_dev); in wpa_supplicant_init()
8089 if (!global->params.conf_p2p_dev) { in wpa_supplicant_init()
8096 wpa_debug_level = global->params.wpa_debug_level = in wpa_supplicant_init()
8097 params->wpa_debug_level; in wpa_supplicant_init()
8098 wpa_debug_show_keys = global->params.wpa_debug_show_keys = in wpa_supplicant_init()
8099 params->wpa_debug_show_keys; in wpa_supplicant_init()
8100 wpa_debug_timestamp = global->params.wpa_debug_timestamp = in wpa_supplicant_init()
8101 params->wpa_debug_timestamp; in wpa_supplicant_init()
8111 random_init(params->entropy_file); in wpa_supplicant_init()
8113 global->ctrl_iface = wpa_supplicant_global_ctrl_iface_init(global); in wpa_supplicant_init()
8114 if (global->ctrl_iface == NULL) { in wpa_supplicant_init()
8125 global->drv_count++; in wpa_supplicant_init()
8126 if (global->drv_count == 0) { in wpa_supplicant_init()
8131 global->drv_priv = os_calloc(global->drv_count, sizeof(void *)); in wpa_supplicant_init()
8132 if (global->drv_priv == NULL) { in wpa_supplicant_init()
8139 wpa_printf(MSG_ERROR, "Failed to initialize Wi-Fi Display"); in wpa_supplicant_init()
8153 * wpa_supplicant_run - Run the %wpa_supplicant main event loop
8155 * Returns: 0 after successful event loop run, -1 on failure
8165 if (global->params.daemonize && in wpa_supplicant_run()
8166 (wpa_supplicant_daemon(global->params.pid_file) || in wpa_supplicant_run()
8168 return -1; in wpa_supplicant_run()
8172 return -1; in wpa_supplicant_run()
8175 if (global->params.wait_for_monitor) { in wpa_supplicant_run()
8176 for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) in wpa_supplicant_run()
8177 if (wpa_s->ctrl_iface && !wpa_s->p2p_mgmt) in wpa_supplicant_run()
8179 wpa_s->ctrl_iface); in wpa_supplicant_run()
8192 * wpa_supplicant_deinit - Deinitialize %wpa_supplicant
8211 while (global->ifaces) in wpa_supplicant_deinit()
8212 wpa_supplicant_remove_iface(global, global->ifaces, 1); in wpa_supplicant_deinit()
8214 if (global->ctrl_iface) in wpa_supplicant_deinit()
8215 wpa_supplicant_global_ctrl_iface_deinit(global->ctrl_iface); in wpa_supplicant_deinit()
8224 for (i = 0; wpa_drivers[i] && global->drv_priv; i++) { in wpa_supplicant_deinit()
8225 if (!global->drv_priv[i]) in wpa_supplicant_deinit()
8227 wpa_drivers[i]->global_deinit(global->drv_priv[i]); in wpa_supplicant_deinit()
8229 os_free(global->drv_priv); in wpa_supplicant_deinit()
8235 if (global->params.pid_file) { in wpa_supplicant_deinit()
8236 os_daemonize_terminate(global->params.pid_file); in wpa_supplicant_deinit()
8237 os_free(global->params.pid_file); in wpa_supplicant_deinit()
8239 os_free(global->params.ctrl_interface); in wpa_supplicant_deinit()
8240 os_free(global->params.ctrl_interface_group); in wpa_supplicant_deinit()
8241 os_free(global->params.override_driver); in wpa_supplicant_deinit()
8242 os_free(global->params.override_ctrl_interface); in wpa_supplicant_deinit()
8244 os_free(global->params.match_ifaces); in wpa_supplicant_deinit()
8247 os_free(global->params.conf_p2p_dev); in wpa_supplicant_deinit()
8250 os_free(global->p2p_disallow_freq.range); in wpa_supplicant_deinit()
8251 os_free(global->p2p_go_avoid_freq.range); in wpa_supplicant_deinit()
8252 os_free(global->add_psk); in wpa_supplicant_deinit()
8263 if ((wpa_s->conf->changed_parameters & CFG_CHANGED_COUNTRY) && in wpa_supplicant_update_config()
8264 wpa_s->conf->country[0] && wpa_s->conf->country[1]) { in wpa_supplicant_update_config()
8266 country[0] = wpa_s->conf->country[0]; in wpa_supplicant_update_config()
8267 country[1] = wpa_s->conf->country[1]; in wpa_supplicant_update_config()
8275 if (wpa_s->conf->changed_parameters & CFG_CHANGED_EXT_PW_BACKEND) in wpa_supplicant_update_config()
8278 if (wpa_s->conf->changed_parameters & CFG_CHANGED_SCHED_SCAN_PLANS) in wpa_supplicant_update_config()
8279 wpas_sched_scan_plans_set(wpa_s, wpa_s->conf->sched_scan_plans); in wpa_supplicant_update_config()
8281 if (wpa_s->conf->changed_parameters & CFG_CHANGED_WOWLAN_TRIGGERS) { in wpa_supplicant_update_config()
8288 wpa_s->conf->wowlan_triggers); in wpa_supplicant_update_config()
8291 if (wpa_s->conf->changed_parameters & CFG_CHANGED_DISABLE_BTM) in wpa_supplicant_update_config()
8294 if (wpa_s->conf->changed_parameters & CFG_CHANGED_FT_PREPEND_PMKID) in wpa_supplicant_update_config()
8295 wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_FT_PREPEND_PMKID, in wpa_supplicant_update_config()
8296 wpa_s->conf->ft_prepend_pmkid); in wpa_supplicant_update_config()
8300 * We default to global bgscan parameters only when per-network bgscan in wpa_supplicant_update_config()
8304 if ((wpa_s->conf->changed_parameters & CFG_CHANGED_BGSCAN) && in wpa_supplicant_update_config()
8305 wpa_s->current_ssid && !wpa_s->current_ssid->bgscan && in wpa_supplicant_update_config()
8306 wpa_s->wpa_state == WPA_COMPLETED) in wpa_supplicant_update_config()
8314 wpa_s->conf->changed_parameters = 0; in wpa_supplicant_update_config()
8343 cbss = wpa_s->current_bss; in get_bss_freqs_in_ess()
8345 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in get_bss_freqs_in_ess()
8348 if (bss->ssid_len == cbss->ssid_len && in get_bss_freqs_in_ess()
8349 os_memcmp(bss->ssid, cbss->ssid, bss->ssid_len) == 0 && in get_bss_freqs_in_ess()
8350 !wpa_bssid_ignore_is_listed(wpa_s, bss->bssid)) { in get_bss_freqs_in_ess()
8351 add_freq(freqs, &num_freqs, bss->freq); in get_bss_freqs_in_ess()
8384 if (wpa_s->own_disconnect_req || wpa_s->own_reconnect_req) { in wpas_connection_failed()
8385 wpa_s->own_disconnect_req = 0; in wpas_connection_failed()
8390 if (wpa_s->disconnected) { in wpas_connection_failed()
8408 if (count == 1 && wpa_s->current_bss) { in wpas_connection_failed()
8425 os_free(wpa_s->next_scan_freqs); in wpas_connection_failed()
8426 wpa_s->next_scan_freqs = freqs; in wpas_connection_failed()
8430 wpa_s->consecutive_conn_failures++; in wpas_connection_failed()
8432 if (wpa_s->consecutive_conn_failures > 3 && wpa_s->current_ssid) { in wpas_connection_failed()
8433 wpa_printf(MSG_DEBUG, "Continuous association failures - " in wpas_connection_failed()
8442 switch (wpa_s->consecutive_conn_failures) { in wpas_connection_failed()
8461 "Consecutive connection failures: %d --> request scan in %d ms", in wpas_connection_failed()
8462 wpa_s->consecutive_conn_failures, timeout); in wpas_connection_failed()
8470 wpa_s->normal_scans = 0; in wpas_connection_failed()
8480 struct wpa_ssid *ssid = wpa_s->current_ssid; in fils_pmksa_cache_flush()
8496 if (!ssid || !ssid->eap.erp || !wpa_key_mgmt_fils(ssid->key_mgmt)) in fils_pmksa_cache_flush()
8499 if (eapol_sm_get_erp_info(wpa_s->eapol, &ssid->eap, in fils_pmksa_cache_flush()
8506 wpa_sm_aborted_external_cached(wpa_s->wpa); in fils_pmksa_cache_flush()
8507 wpa_sm_external_pmksa_cache_flush(wpa_s->wpa, ssid); in fils_pmksa_cache_flush()
8512 wpa_sm_aborted_cached(wpa_s->wpa); in fils_pmksa_cache_flush()
8513 wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid); in fils_pmksa_cache_flush()
8519 struct wpa_ssid *ssid = wpa_s->current_ssid; in fils_connection_failure()
8524 if (!ssid || !ssid->eap.erp || !wpa_key_mgmt_fils(ssid->key_mgmt) || in fils_connection_failure()
8525 eapol_sm_get_erp_info(wpa_s->eapol, &ssid->eap, in fils_connection_failure()
8535 os_free(wpa_s->last_con_fail_realm); in fils_connection_failure()
8536 wpa_s->last_con_fail_realm = os_malloc(realm_len); in fils_connection_failure()
8537 if (wpa_s->last_con_fail_realm) { in fils_connection_failure()
8538 wpa_s->last_con_fail_realm_len = realm_len; in fils_connection_failure()
8539 os_memcpy(wpa_s->last_con_fail_realm, realm, realm_len); in fils_connection_failure()
8547 return wpa_s->conf->ap_scan == 2 || in wpas_driver_bss_selection()
8548 (wpa_s->drv_flags & WPA_DRIVER_FLAGS_BSS_SELECTION); in wpas_driver_bss_selection()
8559 struct eap_peer_config *eap = &ssid->eap; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8567 os_free(eap->identity); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8568 eap->identity = (u8 *) os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8569 if (!eap->identity) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8570 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8571 eap->identity_len = os_strlen(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8572 eap->pending_req_identity = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8573 if (ssid == wpa_s->current_ssid) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8574 wpa_s->reassociate = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8577 bin_clear_free(eap->password, eap->password_len); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8578 eap->password = (u8 *) os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8579 if (!eap->password) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8580 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8581 eap->password_len = os_strlen(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8582 eap->pending_req_password = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8583 if (ssid == wpa_s->current_ssid) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8584 wpa_s->reassociate = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8587 bin_clear_free(eap->new_password, eap->new_password_len); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8588 eap->new_password = (u8 *) os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8589 if (!eap->new_password) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8590 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8591 eap->new_password_len = os_strlen(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8592 eap->pending_req_new_password = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8593 if (ssid == wpa_s->current_ssid) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8594 wpa_s->reassociate = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8597 str_clear_free(eap->cert.pin); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8598 eap->cert.pin = os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8599 if (!eap->cert.pin) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8600 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8601 eap->pending_req_pin = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8602 if (ssid == wpa_s->current_ssid) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8603 wpa_s->reassociate = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8606 bin_clear_free(eap->otp, eap->otp_len); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8607 eap->otp = (u8 *) os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8608 if (!eap->otp) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8609 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8610 eap->otp_len = os_strlen(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8611 os_free(eap->pending_req_otp); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8612 eap->pending_req_otp = NULL; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8613 eap->pending_req_otp_len = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8616 str_clear_free(eap->cert.private_key_passwd); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8617 eap->cert.private_key_passwd = os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8618 if (!eap->cert.private_key_passwd) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8619 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8620 eap->pending_req_passphrase = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8621 if (ssid == wpa_s->current_ssid) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8622 wpa_s->reassociate = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8625 str_clear_free(eap->external_sim_resp); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8626 eap->external_sim_resp = os_strdup(value); in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8627 if (!eap->external_sim_resp) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8628 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8629 eap->pending_req_sim = 0; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8633 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8634 ssid->mem_only_psk = 1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8635 if (ssid->passphrase) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8637 if (wpa_s->wpa_state == WPA_SCANNING && !wpa_s->scanning) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8641 if (eap->pending_ext_cert_check != PENDING_CHECK) in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8642 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8644 eap->pending_ext_cert_check = EXT_CERT_CHECK_GOOD; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8646 eap->pending_ext_cert_check = EXT_CERT_CHECK_BAD; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8648 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8652 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8658 return -1; in wpa_supplicant_ctrl_iface_ctrl_rsp_handle()
8671 if (wpa_s->p2p_mgmt) in wpas_network_disabled()
8677 if (ssid->disabled) in wpas_network_disabled()
8681 if (wpa_s->drv_capa_known) in wpas_network_disabled()
8682 drv_enc = wpa_s->drv_enc; in wpas_network_disabled()
8684 drv_enc = (unsigned int) -1; in wpas_network_disabled()
8687 size_t len = ssid->wep_key_len[i]; in wpas_network_disabled()
8700 if (wpa_key_mgmt_wpa_psk(ssid->key_mgmt) && !ssid->psk_set && in wpas_network_disabled()
8701 (!ssid->passphrase || ssid->ssid_len != 0) && !ssid->ext_psk && in wpas_network_disabled()
8702 !(wpa_key_mgmt_sae(ssid->key_mgmt) && ssid->sae_password) && in wpas_network_disabled()
8703 !ssid->mem_only_psk) in wpas_network_disabled()
8708 if (ssid->eap.imsi_privacy_cert) { in wpas_network_disabled()
8712 key = crypto_rsa_key_read(ssid->eap.imsi_privacy_cert, false); in wpas_network_disabled()
8718 "Invalid imsi_privacy_cert (%s) - disable network", in wpas_network_disabled()
8719 ssid->eap.imsi_privacy_cert); in wpas_network_disabled()
8732 if (ssid == NULL || ssid->ieee80211w == MGMT_FRAME_PROTECTION_DEFAULT) { in wpas_get_ssid_pmf()
8733 if (wpa_s->conf->pmf == MGMT_FRAME_PROTECTION_OPTIONAL && in wpas_get_ssid_pmf()
8734 !(wpa_s->drv_enc & WPA_DRIVER_CAPA_ENC_BIP)) { in wpas_get_ssid_pmf()
8736 * Driver does not support BIP -- ignore pmf=1 default in wpas_get_ssid_pmf()
8744 (ssid->key_mgmt & in wpas_get_ssid_pmf()
8748 * Do not use the default PMF value for non-RSN networks in wpas_get_ssid_pmf()
8758 if (wpa_s->conf->pmf == NO_MGMT_FRAME_PROTECTION && in wpas_get_ssid_pmf()
8759 ssid && ssid->ocv) in wpas_get_ssid_pmf()
8763 return wpa_s->conf->pmf; in wpas_get_ssid_pmf()
8766 return ssid->ieee80211w; in wpas_get_ssid_pmf()
8775 return wpa_s->conf->sae_check_mfp && in wpas_is_sae_avoided()
8776 (!(ie->capabilities & in wpas_is_sae_avoided()
8785 if (wpa_s->current_ssid == NULL || in pmf_in_use()
8786 wpa_s->wpa_state < WPA_4WAY_HANDSHAKE) in pmf_in_use()
8788 if (wpa_s->valid_links) { in pmf_in_use()
8789 if (!ether_addr_equal(addr, wpa_s->ap_mld_addr) && in pmf_in_use()
8793 if (!ether_addr_equal(addr, wpa_s->bssid)) in pmf_in_use()
8796 return wpa_sm_pmf_enabled(wpa_s->wpa); in pmf_in_use()
8802 if (wpa_s->global->conc_pref == WPA_CONC_PREF_P2P) in wpas_is_p2p_prioritized()
8804 if (wpa_s->global->conc_pref == WPA_CONC_PREF_STA) in wpas_is_p2p_prioritized()
8806 return -1; in wpas_is_p2p_prioritized()
8813 struct wpa_ssid *ssid = wpa_s->current_ssid; in wpas_auth_failed()
8823 if (ssid->key_mgmt == WPA_KEY_MGMT_WPS) in wpas_auth_failed()
8826 ssid->auth_failures++; in wpas_auth_failed()
8829 if (ssid->p2p_group && in wpas_auth_failed()
8830 (wpa_s->p2p_in_provisioning || wpa_s->show_group_started)) { in wpas_auth_failed()
8839 if (ssid->auth_failures > 50) in wpas_auth_failed()
8841 else if (ssid->auth_failures > 10) in wpas_auth_failed()
8843 else if (ssid->auth_failures > 5) in wpas_auth_failed()
8845 else if (ssid->auth_failures > 3) in wpas_auth_failed()
8847 else if (ssid->auth_failures > 2) in wpas_auth_failed()
8849 else if (ssid->auth_failures > 1) in wpas_auth_failed()
8854 if (ssid->auth_failures > 1 && in wpas_auth_failed()
8855 wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) in wpas_auth_failed()
8856 dur += os_random() % (ssid->auth_failures * 10); in wpas_auth_failed()
8859 if (now.sec + dur <= ssid->disabled_until.sec) in wpas_auth_failed()
8862 ssid->disabled_until.sec = now.sec + dur; in wpas_auth_failed()
8866 ssid->id, wpa_ssid_txt(ssid->ssid, ssid->ssid_len), in wpas_auth_failed()
8867 ssid->auth_failures, dur, reason); in wpas_auth_failed()
8870 os_memcpy(ssid->disabled_due_to, bssid, ETH_ALEN); in wpas_auth_failed()
8880 if (ssid->disabled_until.sec) { in wpas_clear_temp_disabled()
8883 ssid->id, wpa_ssid_txt(ssid->ssid, ssid->ssid_len)); in wpas_clear_temp_disabled()
8885 ssid->disabled_until.sec = 0; in wpas_clear_temp_disabled()
8886 ssid->disabled_until.usec = 0; in wpas_clear_temp_disabled()
8888 ssid->auth_failures = 0; in wpas_clear_temp_disabled()
8889 } else if (!is_zero_ether_addr(ssid->disabled_due_to)) { in wpas_clear_temp_disabled()
8892 MAC2STR(ssid->disabled_due_to)); in wpas_clear_temp_disabled()
8893 wpa_bssid_ignore_add(wpa_s, ssid->disabled_due_to); in wpas_clear_temp_disabled()
8894 os_memset(ssid->disabled_due_to, 0, ETH_ALEN); in wpas_clear_temp_disabled()
8903 if (wpa_s->disallow_aps_bssid == NULL) in disallowed_bssid()
8906 for (i = 0; i < wpa_s->disallow_aps_bssid_count; i++) { in disallowed_bssid()
8907 if (ether_addr_equal(wpa_s->disallow_aps_bssid + i * ETH_ALEN, in disallowed_bssid()
8921 if (wpa_s->disallow_aps_ssid == NULL || ssid == NULL) in disallowed_ssid()
8924 for (i = 0; i < wpa_s->disallow_aps_ssid_count; i++) { in disallowed_ssid()
8925 struct wpa_ssid_value *s = &wpa_s->disallow_aps_ssid[i]; in disallowed_ssid()
8926 if (ssid_len == s->ssid_len && in disallowed_ssid()
8927 os_memcmp(ssid, s->ssid, ssid_len) == 0) in disallowed_ssid()
8936 * wpas_request_connection - Request a new connection
8945 wpa_s->normal_scans = 0; in wpas_request_connection()
8946 wpa_s->scan_req = NORMAL_SCAN_REQ; in wpas_request_connection()
8948 wpa_s->disconnected = 0; in wpas_request_connection()
8949 wpa_s->reassociate = 1; in wpas_request_connection()
8950 wpa_s->last_owe_group = 0; in wpas_request_connection()
8955 wpa_s->reattach = 0; in wpas_request_connection()
8960 * wpas_request_disconnection - Request disconnection
8969 wpa_s->sme.prev_bssid_set = 0; in wpas_request_disconnection()
8971 wpa_s->reassociate = 0; in wpas_request_disconnection()
8972 wpa_s->disconnected = 1; in wpas_request_disconnection()
8979 radio_remove_works(wpa_s, "sme-connect", 0); in wpas_request_disconnection()
8980 wpa_s->roam_in_progress = false; in wpas_request_disconnection()
8982 wpa_s->bss_trans_mgmt_in_progress = false; in wpas_request_disconnection()
8998 i, cur->freq, cur->flags); in dump_freq_data()
9021 dl_list_for_each(ifs, &wpa_s->radio->ifaces, struct wpa_supplicant, in get_shared_radio_freqs_data()
9029 if (ifs->current_ssid == NULL || ifs->assoc_freq == 0) in get_shared_radio_freqs_data()
9032 if (ifs->current_ssid->mode == WPAS_MODE_AP || in get_shared_radio_freqs_data()
9033 ifs->current_ssid->mode == WPAS_MODE_P2P_GO || in get_shared_radio_freqs_data()
9034 ifs->current_ssid->mode == WPAS_MODE_MESH) in get_shared_radio_freqs_data()
9035 freq = ifs->current_ssid->frequency; in get_shared_radio_freqs_data()
9037 freq = ifs->assoc_freq; in get_shared_radio_freqs_data()
9049 if (ifs->current_ssid->mode == WPAS_MODE_INFRA) { in get_shared_radio_freqs_data()
9050 freqs_data[i].flags |= ifs->current_ssid->p2p_group ? in get_shared_radio_freqs_data()
9076 return -1; in get_shared_radio_freqs()
9107 return wpa_s->p2pdev; in wpas_vendor_elem()
9123 if (wpa_s->vendor_elem[i]) { in wpas_vendor_elem_update()
9129 wpa_s->vendor_elem[i]); in wpas_vendor_elem_update()
9135 if (wpa_s->parent == wpa_s && in wpas_vendor_elem_update()
9136 wpa_s->global->p2p && in wpas_vendor_elem_update()
9137 !wpa_s->global->p2p_disabled) in wpas_vendor_elem_update()
9138 p2p_set_vendor_elems(wpa_s->global->p2p, wpa_s->vendor_elem); in wpas_vendor_elem_update()
9148 ie = wpabuf_mhead_u8(wpa_s->vendor_elem[frame]); in wpas_vendor_elem_remove()
9149 end = ie + wpabuf_len(wpa_s->vendor_elem[frame]); in wpas_vendor_elem_remove()
9157 if (wpabuf_len(wpa_s->vendor_elem[frame]) == len) { in wpas_vendor_elem_remove()
9158 wpabuf_free(wpa_s->vendor_elem[frame]); in wpas_vendor_elem_remove()
9159 wpa_s->vendor_elem[frame] = NULL; in wpas_vendor_elem_remove()
9161 os_memmove(ie, ie + len, end - (ie + len)); in wpas_vendor_elem_remove()
9162 wpa_s->vendor_elem[frame]->used -= len; in wpas_vendor_elem_remove()
9168 return -1; in wpas_vendor_elem_remove()
9215 dl_list_for_each(bss, &wpa_s->bss_tmp_disallowed, in wpas_get_disallowed_bss()
9217 if (ether_addr_equal(bssid, bss->bssid)) in wpas_get_disallowed_bss()
9232 bssids = os_malloc(dl_list_len(&wpa_s->bss_tmp_disallowed) * ETH_ALEN); in wpa_set_driver_tmp_disallow_list()
9234 return -1; in wpa_set_driver_tmp_disallow_list()
9235 dl_list_for_each(tmp, &wpa_s->bss_tmp_disallowed, in wpa_set_driver_tmp_disallow_list()
9237 os_memcpy(&bssids[num_bssid * ETH_ALEN], tmp->bssid, in wpa_set_driver_tmp_disallow_list()
9253 dl_list_for_each(tmp, &wpa_s->bss_tmp_disallowed, in wpa_bss_tmp_disallow_timeout()
9282 os_memcpy(bss->bssid, bssid, ETH_ALEN); in wpa_bss_tmp_disallow()
9283 dl_list_add(&wpa_s->bss_tmp_disallowed, &bss->list); in wpa_bss_tmp_disallow()
9287 bss->rssi_threshold = rssi_threshold; in wpa_bss_tmp_disallow()
9298 dl_list_for_each_safe(tmp, prev, &wpa_s->bss_tmp_disallowed, in wpa_is_bss_tmp_disallowed()
9300 if (ether_addr_equal(bss->bssid, tmp->bssid)) { in wpa_is_bss_tmp_disallowed()
9308 if (disallowed->rssi_threshold != 0 && in wpa_is_bss_tmp_disallowed()
9309 bss->level > disallowed->rssi_threshold) { in wpa_is_bss_tmp_disallowed()
9326 return -1; in wpas_enable_mac_addr_randomization()
9332 return -1; in wpas_enable_mac_addr_randomization()
9338 return -1; in wpas_enable_mac_addr_randomization()
9344 return -1; in wpas_enable_mac_addr_randomization()
9346 if (wpa_s->sched_scanning && !wpa_s->pno) in wpas_enable_mac_addr_randomization()
9353 return -1; in wpas_enable_mac_addr_randomization()
9355 if (wpa_s->pno) { in wpas_enable_mac_addr_randomization()
9369 if (wpa_s->pno) { in wpas_disable_mac_addr_randomization()
9374 } else if (wpa_s->sched_scanning && (type & MAC_ADDR_RAND_SCHED_SCAN)) { in wpas_disable_mac_addr_randomization()
9387 if (!wpa_s->driver->signal_poll) in wpa_drv_signal_poll()
9388 return -1; in wpa_drv_signal_poll()
9390 res = wpa_s->driver->signal_poll(wpa_s->drv_priv, si); in wpa_drv_signal_poll()
9396 dl_list_for_each(dso, &wpa_s->drv_signal_override, in wpa_drv_signal_poll()
9398 if (!ether_addr_equal(wpa_s->bssid, dso->bssid)) in wpa_drv_signal_poll()
9401 …ignal_poll information: current_signal: %d->%d avg_signal: %d->%d avg_beacon_signal: %d->%d curren… in wpa_drv_signal_poll()
9402 si->data.signal, in wpa_drv_signal_poll()
9403 dso->si_current_signal, in wpa_drv_signal_poll()
9404 si->data.avg_signal, in wpa_drv_signal_poll()
9405 dso->si_avg_signal, in wpa_drv_signal_poll()
9406 si->data.avg_beacon_signal, in wpa_drv_signal_poll()
9407 dso->si_avg_beacon_signal, in wpa_drv_signal_poll()
9408 si->current_noise, in wpa_drv_signal_poll()
9409 dso->si_current_noise); in wpa_drv_signal_poll()
9410 si->data.signal = dso->si_current_signal; in wpa_drv_signal_poll()
9411 si->data.avg_signal = dso->si_avg_signal; in wpa_drv_signal_poll()
9412 si->data.avg_beacon_signal = dso->si_avg_beacon_signal; in wpa_drv_signal_poll()
9413 si->current_noise = dso->si_current_noise; in wpa_drv_signal_poll()
9431 if (wpa_s->driver->get_scan_results) in wpa_drv_get_scan_results()
9432 scan_res = wpa_s->driver->get_scan_results(wpa_s->drv_priv, in wpa_drv_get_scan_results()
9434 else if (wpa_s->driver->get_scan_results2) in wpa_drv_get_scan_results()
9435 scan_res = wpa_s->driver->get_scan_results2(wpa_s->drv_priv); in wpa_drv_get_scan_results()
9441 for (idx = 0; scan_res && idx < scan_res->num; idx++) { in wpa_drv_get_scan_results()
9443 struct wpa_scan_res *res = scan_res->res[idx]; in wpa_drv_get_scan_results()
9445 dl_list_for_each(dso, &wpa_s->drv_signal_override, in wpa_drv_get_scan_results()
9447 if (!ether_addr_equal(res->bssid, dso->bssid)) in wpa_drv_get_scan_results()
9450 "Override driver scan signal level %d->%d for " in wpa_drv_get_scan_results()
9452 res->level, dso->scan_level, in wpa_drv_get_scan_results()
9453 MAC2STR(res->bssid)); in wpa_drv_get_scan_results()
9454 res->flags |= WPA_SCAN_QUAL_INVALID; in wpa_drv_get_scan_results()
9455 if (dso->scan_level < 0) in wpa_drv_get_scan_results()
9456 res->flags |= WPA_SCAN_LEVEL_DBM; in wpa_drv_get_scan_results()
9458 res->flags &= ~WPA_SCAN_LEVEL_DBM; in wpa_drv_get_scan_results()
9459 res->level = dso->scan_level; in wpa_drv_get_scan_results()
9473 if (!wpa_s->valid_links) in wpas_ap_link_address()
9476 for_each_link(wpa_s->valid_links, i) { in wpas_ap_link_address()
9477 if (ether_addr_equal(wpa_s->links[i].bssid, addr)) in wpas_ap_link_address()
9490 if (!wpa_s->driver->send_action) in wpa_drv_send_action()
9491 return -1; in wpa_drv_send_action()
9495 dst = wpa_s->ap_mld_addr; in wpa_drv_send_action()
9498 bssid = wpa_s->ap_mld_addr; in wpa_drv_send_action()
9501 return wpa_s->driver->send_action(wpa_s->drv_priv, freq, wait, dst, src, in wpa_drv_send_action()
9511 for (i = 0; i < wpa_s->hw.num_modes; i++) { in wpas_is_6ghz_supported()
9512 if (wpa_s->hw.modes[i].mode == HOSTAPD_MODE_IEEE80211A) { in wpas_is_6ghz_supported()
9513 chnl = wpa_s->hw.modes[i].channels; in wpas_is_6ghz_supported()
9514 for (j = 0; j < wpa_s->hw.modes[i].num_channels; j++) { in wpas_is_6ghz_supported()