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:
parent
cfaab58007
commit
7da2c5276d
1 changed files with 19 additions and 0 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue