]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
IBSS RSN: Wait for connection event and do not use auth timeout
authorJouni Malinen <j@w1.fi>
Fri, 4 Dec 2009 20:09:06 +0000 (22:09 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 4 Dec 2009 20:09:06 +0000 (22:09 +0200)
Wait for connection (IBSS join completed) event before marking state
completed. In addition, do not use the station mode authentication
timeout since that can trigger full disconnection from IBSS when
there is a timeout with just one of the peers.

wpa_supplicant/events.c
wpa_supplicant/wpa_supplicant.c

index 429eac8f811c81e39b59c371ff139bb5f03f8030..c5283900e7aea443db5f3b86cb7e2866d2c54e2f 100644 (file)
@@ -1046,7 +1046,9 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
        eapol_sm_notify_portEnabled(wpa_s->eapol, TRUE);
        wpa_s->eapol_received = 0;
        if (wpa_s->key_mgmt == WPA_KEY_MGMT_NONE ||
-           wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE) {
+           wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE ||
+           (wpa_s->current_ssid &&
+            wpa_s->current_ssid->mode == IEEE80211_MODE_IBSS)) {
                wpa_supplicant_cancel_auth_timeout(wpa_s);
                wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
        } else if (!ft_completed) {
index 7decd7a03dbb0b2babc37aacd6d3f9fa16eb79c6..bda436f353f4d4cc456c31048db747e63332684f 100644 (file)
@@ -1244,7 +1244,6 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
                 * per-BSSID authentication.
                 */
                wpa_supplicant_cancel_auth_timeout(wpa_s);
-               wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
 #endif /* CONFIG_IBSS_RSN */
        } else {
                /* Timeout for IEEE 802.11 authentication and association */
@@ -1774,7 +1773,9 @@ void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr,
        if (wpa_s->eapol_received == 0 &&
            (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) ||
             !wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt) ||
-            wpa_s->wpa_state != WPA_COMPLETED)) {
+            wpa_s->wpa_state != WPA_COMPLETED) &&
+           (wpa_s->current_ssid == NULL ||
+            wpa_s->current_ssid->mode != IEEE80211_MODE_IBSS)) {
                /* Timeout for completing IEEE 802.1X and WPA authentication */
                wpa_supplicant_req_auth_timeout(
                        wpa_s,