drv->assoc_req_ies = NULL;
os_free(drv->assoc_resp_ies);
drv->assoc_resp_ies = NULL;
- wpa_supplicant_event(drv->ctx, EVENT_DISASSOC,
- NULL);
+ if (!drv->ignore_next_disconnect) {
+ wpa_supplicant_event(drv->ctx,
+ EVENT_DISASSOC,
+ NULL);
+ drv->ignore_next_disconnect = false;
+ }
} else {
wpa_driver_wext_event_assoc_ies(drv);
wpa_supplicant_event(drv->ctx, EVENT_ASSOC,
NULL);
+ drv->ignore_next_disconnect = false;
}
break;
case IWEVMICHAELMICFAILURE:
"SSID to disconnect");
}
}
+
+ /* wpa_supplicant generates a disconnect event internally already */
+ drv->ignore_next_disconnect = true;
}
wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
ret = -1;
+ /* Ignore spurious disconnect event if we are reassociating */
+ drv->ignore_next_disconnect = true;
+
return ret;
}
int cfg80211; /* whether driver is using cfg80211 */
u8 max_level;
+
+ bool ignore_next_disconnect;
};
int wpa_driver_wext_get_bssid(void *priv, u8 *bssid);