nl80211: Ignore connect/roam/disconnect events when using SME

Getting double association/disassociation events can get core code
confused, so better filter out the extra events.
This commit is contained in:
Jouni Malinen 2009-09-04 16:39:41 +03:00 committed by Jouni Malinen
parent cfaab58007
commit 7da2c5276d

View file

@ -748,6 +748,16 @@ static void mlme_event_connect(struct wpa_driver_nl80211_data *drv,
{ {
union wpa_event_data event; union wpa_event_data event;
if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) {
/*
* Avoid reporting two association events that would confuse
* the core code.
*/
wpa_printf(MSG_DEBUG, "nl80211: Ignore connect event (cmd=%d) "
"when using userspace SME", cmd);
return;
}
os_memset(&event, 0, sizeof(event)); os_memset(&event, 0, sizeof(event));
if (cmd == NL80211_CMD_CONNECT && if (cmd == NL80211_CMD_CONNECT &&
nla_get_u16(status) != WLAN_STATUS_SUCCESS) { nla_get_u16(status) != WLAN_STATUS_SUCCESS) {
@ -940,6 +950,15 @@ static int process_event(struct nl_msg *msg, void *arg)
tb[NL80211_ATTR_RESP_IE]); tb[NL80211_ATTR_RESP_IE]);
break; break;
case NL80211_CMD_DISCONNECT: case NL80211_CMD_DISCONNECT:
if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) {
/*
* Avoid reporting two disassociation events that could
* confuse the core code.
*/
wpa_printf(MSG_DEBUG, "nl80211: Ignore disconnect "
"event when using userspace SME");
break;
}
drv->associated = 0; drv->associated = 0;
wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL); wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
break; break;