#ifdef CONFIG_WNM
wpa_s->bss_trans_mgmt_in_progress = false;
#endif /* CONFIG_WNM */
+ wpa_s->no_suitable_network = 0;
if (deinit) {
if (work->started) {
struct wpa_ssid *other_ssid;
int disconnected = 0;
+ bool request_new_scan = false;
if (ssid && ssid != wpa_s->current_ssid && wpa_s->current_ssid) {
if (wpa_s->wpa_state >= WPA_AUTHENTICATING)
(ssid->mode == WPAS_MODE_MESH ||
ssid->mode == WPAS_MODE_AP) ? ssid : NULL;
+ if (ssid->scan_ssid &&
+ (wpa_s->no_suitable_network || wpa_s->last_scan_external)) {
+ wpa_printf(MSG_DEBUG,
+ "Request a new scan for hidden network");
+ request_new_scan = true;
+ } else if ((ssid->key_mgmt & WPA_KEY_MGMT_OWE) &&
+ !ssid->owe_only) {
+ wpa_printf(MSG_DEBUG,
+ "Request a new scan for OWE transition SSID");
+ request_new_scan = true;
+ }
+
/*
* Don't optimize next scan freqs since a new ESS has been
* selected.
wpa_s_setup_sae_pt(wpa_s->conf, ssid, false);
}
- if (wpa_s->connect_without_scan ||
+ if (wpa_s->connect_without_scan || request_new_scan ||
wpa_supplicant_fast_associate(wpa_s) != 1) {
wpa_s->scan_req = NORMAL_SCAN_REQ;
wpas_scan_reset_sched_scan(wpa_s);
size_t last_scan_res_used;
size_t last_scan_res_size;
struct os_reltime last_scan;
+ bool last_scan_external;
const struct wpa_driver_ops *driver;
int interface_removed; /* whether the network interface has been