WPS: Reconnect for a failed data connection when STA_AUTOCONNECT is 0
If "STA_AUTOCONNECT 0" has been used to disable automatic connection on disconnection event and the driver indicates a failure for the data connection after successful WPS handshake, it is possible to hit a case where wpa_s->disconnected is set to 1 and further attempts to connect shall stop. While "STA_AUTOCONNECT 0" is used to disable automatic reconnection attempts in general, this specific WPS case can benefit from trying again even with that configuration for a short period of time. Extend the wpa_supplicant re-enable-networks-after-WPS 10 second timeout to apply for ignoring disabled STA_AUTOCONNECT immediately after a WPS provisioning step. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
1992af115a
commit
5e238cc682
3 changed files with 16 additions and 1 deletions
|
@ -2376,7 +2376,8 @@ static void wpa_supplicant_event_disassoc_finish(struct wpa_supplicant *wpa_s,
|
|||
if (!wpa_s->disconnected &&
|
||||
(!wpa_s->auto_reconnect_disabled ||
|
||||
wpa_s->key_mgmt == WPA_KEY_MGMT_WPS ||
|
||||
wpas_wps_searching(wpa_s))) {
|
||||
wpas_wps_searching(wpa_s) ||
|
||||
wpas_wps_reenable_networks_pending(wpa_s))) {
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Auto connect enabled: try to "
|
||||
"reconnect (wps=%d/%d wpa_state=%d)",
|
||||
wpa_s->key_mgmt == WPA_KEY_MGMT_WPS,
|
||||
|
|
|
@ -683,6 +683,13 @@ static void wpas_wps_reenable_networks_cb(void *eloop_ctx, void *timeout_ctx)
|
|||
}
|
||||
|
||||
|
||||
int wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
return eloop_is_timeout_registered(wpas_wps_reenable_networks_cb,
|
||||
wpa_s, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void wpa_supplicant_wps_event_success(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_SUCCESS);
|
||||
|
|
|
@ -85,6 +85,7 @@ int wpas_er_wps_nfc_report_handover(struct wpa_supplicant *wpa_s,
|
|||
void wpas_wps_update_ap_info(struct wpa_supplicant *wpa_s,
|
||||
struct wpa_scan_results *scan_res);
|
||||
void wpas_wps_notify_assoc(struct wpa_supplicant *wpa_s, const u8 *bssid);
|
||||
int wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s);
|
||||
|
||||
#else /* CONFIG_WPS */
|
||||
|
||||
|
@ -147,6 +148,12 @@ static inline void wpas_wps_notify_assoc(struct wpa_supplicant *wpa_s,
|
|||
{
|
||||
}
|
||||
|
||||
static inline int
|
||||
wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_WPS */
|
||||
|
||||
#endif /* WPS_SUPPLICANT_H */
|
||||
|
|
Loading…
Reference in a new issue