nl80211: Ignore auth/assoc events when testing driver-SME
Previously, extra connect/roam events were ignored when user space SME was used to avoid confusing double events for association. However, there was no matching code for ignoring auth/assoc events when using driver SME. Such events would not normally show up since the driver SME case would not generated them. However, when testing forced connect command with force_connect_cmd=1 driver param, these events are indicated. Ignore the extra events in testing cases to make the hwsim test cases match more closely the real code path for driver SME. In addition, this resolves some test case failures where double association event could end up causing a failure, e.g., when doing PMKSA caching in pmksa_cache_oppurtunistic_connect. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
377babb205
commit
b497a21267
1 changed files with 24 additions and 0 deletions
|
@ -310,6 +310,7 @@ struct wpa_driver_nl80211_data {
|
|||
unsigned int roaming_vendor_cmd_avail:1;
|
||||
unsigned int dfs_vendor_cmd_avail:1;
|
||||
unsigned int have_low_prio_scan:1;
|
||||
unsigned int force_connect_cmd:1;
|
||||
|
||||
u64 remain_on_chan_cookie;
|
||||
u64 send_action_cookie;
|
||||
|
@ -1411,6 +1412,17 @@ static void mlme_event_auth(struct wpa_driver_nl80211_data *drv,
|
|||
const struct ieee80211_mgmt *mgmt;
|
||||
union wpa_event_data event;
|
||||
|
||||
if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
|
||||
drv->force_connect_cmd) {
|
||||
/*
|
||||
* Avoid reporting two association events that would confuse
|
||||
* the core code.
|
||||
*/
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"nl80211: Ignore auth event when using driver SME");
|
||||
return;
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG, "nl80211: Authenticate event");
|
||||
mgmt = (const struct ieee80211_mgmt *) frame;
|
||||
if (len < 24 + sizeof(mgmt->u.auth)) {
|
||||
|
@ -1477,6 +1489,17 @@ static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv,
|
|||
union wpa_event_data event;
|
||||
u16 status;
|
||||
|
||||
if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) &&
|
||||
drv->force_connect_cmd) {
|
||||
/*
|
||||
* Avoid reporting two association events that would confuse
|
||||
* the core code.
|
||||
*/
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"nl80211: Ignore assoc event when using driver SME");
|
||||
return;
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG, "nl80211: Associate event");
|
||||
mgmt = (const struct ieee80211_mgmt *) frame;
|
||||
if (len < 24 + sizeof(mgmt->u.assoc_resp)) {
|
||||
|
@ -10993,6 +11016,7 @@ static int nl80211_set_param(void *priv, const char *param)
|
|||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
drv->capa.flags &= ~WPA_DRIVER_FLAGS_SME;
|
||||
drv->force_connect_cmd = 1;
|
||||
}
|
||||
|
||||
if (os_strstr(param, "no_offchannel_tx=1")) {
|
||||
|
|
Loading…
Reference in a new issue