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 &&
|
if (!wpa_s->disconnected &&
|
||||||
(!wpa_s->auto_reconnect_disabled ||
|
(!wpa_s->auto_reconnect_disabled ||
|
||||||
wpa_s->key_mgmt == WPA_KEY_MGMT_WPS ||
|
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 "
|
wpa_dbg(wpa_s, MSG_DEBUG, "Auto connect enabled: try to "
|
||||||
"reconnect (wps=%d/%d wpa_state=%d)",
|
"reconnect (wps=%d/%d wpa_state=%d)",
|
||||||
wpa_s->key_mgmt == WPA_KEY_MGMT_WPS,
|
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)
|
static void wpa_supplicant_wps_event_success(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_SUCCESS);
|
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,
|
void wpas_wps_update_ap_info(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_scan_results *scan_res);
|
struct wpa_scan_results *scan_res);
|
||||||
void wpas_wps_notify_assoc(struct wpa_supplicant *wpa_s, const u8 *bssid);
|
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 */
|
#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 /* CONFIG_WPS */
|
||||||
|
|
||||||
#endif /* WPS_SUPPLICANT_H */
|
#endif /* WPS_SUPPLICANT_H */
|
||||||
|
|
Loading…
Reference in a new issue