P2P NFC: WPA state machine config with driver-based BSS selection
wpa_s->current_bss was updated too late for the wpa_supplicant_rsn_supp_set_config() call within wpa_supplicant_select_config(). Re-order code so that current_bss gets updated between current_ssid update and this call to set the WPA state machine configuration, so that the new code that determines whether the current GO support the new IP address assignment mechanism works. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
8e9f53c367
commit
5cd4740580
1 changed files with 28 additions and 29 deletions
|
@ -68,9 +68,25 @@ static int wpas_temp_disabled(struct wpa_supplicant *wpa_s,
|
|||
}
|
||||
|
||||
|
||||
static struct wpa_bss * wpa_supplicant_get_new_bss(
|
||||
struct wpa_supplicant *wpa_s, const u8 *bssid)
|
||||
{
|
||||
struct wpa_bss *bss = NULL;
|
||||
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
||||
|
||||
if (ssid->ssid_len > 0)
|
||||
bss = wpa_bss_get(wpa_s, bssid, ssid->ssid, ssid->ssid_len);
|
||||
if (!bss)
|
||||
bss = wpa_bss_get_bssid(wpa_s, bssid);
|
||||
|
||||
return bss;
|
||||
}
|
||||
|
||||
|
||||
static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
struct wpa_ssid *ssid, *old_ssid;
|
||||
struct wpa_bss *bss;
|
||||
int res;
|
||||
|
||||
if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid)
|
||||
|
@ -119,6 +135,18 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
|
|||
eapol_sm_invalidate_cached_session(wpa_s->eapol);
|
||||
old_ssid = wpa_s->current_ssid;
|
||||
wpa_s->current_ssid = ssid;
|
||||
|
||||
bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
|
||||
if (!bss) {
|
||||
wpa_supplicant_update_scan_results(wpa_s);
|
||||
|
||||
/* Get the BSS from the new scan results */
|
||||
bss = wpa_supplicant_get_new_bss(wpa_s, wpa_s->bssid);
|
||||
}
|
||||
|
||||
if (bss)
|
||||
wpa_s->current_bss = bss;
|
||||
|
||||
wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid);
|
||||
wpa_supplicant_initiate_eapol(wpa_s);
|
||||
if (old_ssid != wpa_s->current_ssid)
|
||||
|
@ -1766,21 +1794,6 @@ static int wpa_supplicant_event_associnfo(struct wpa_supplicant *wpa_s,
|
|||
}
|
||||
|
||||
|
||||
static struct wpa_bss * wpa_supplicant_get_new_bss(
|
||||
struct wpa_supplicant *wpa_s, const u8 *bssid)
|
||||
{
|
||||
struct wpa_bss *bss = NULL;
|
||||
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
||||
|
||||
if (ssid->ssid_len > 0)
|
||||
bss = wpa_bss_get(wpa_s, bssid, ssid->ssid, ssid->ssid_len);
|
||||
if (!bss)
|
||||
bss = wpa_bss_get_bssid(wpa_s, bssid);
|
||||
|
||||
return bss;
|
||||
}
|
||||
|
||||
|
||||
static int wpa_supplicant_assoc_update_ie(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
const u8 *bss_wpa = NULL, *bss_rsn = NULL;
|
||||
|
@ -1850,20 +1863,6 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
|
|||
wpa_s, WLAN_REASON_DEAUTH_LEAVING);
|
||||
return;
|
||||
}
|
||||
if (wpa_s->current_ssid) {
|
||||
struct wpa_bss *bss = NULL;
|
||||
|
||||
bss = wpa_supplicant_get_new_bss(wpa_s, bssid);
|
||||
if (!bss) {
|
||||
wpa_supplicant_update_scan_results(wpa_s);
|
||||
|
||||
/* Get the BSS from the new scan results */
|
||||
bss = wpa_supplicant_get_new_bss(wpa_s, bssid);
|
||||
}
|
||||
|
||||
if (bss)
|
||||
wpa_s->current_bss = bss;
|
||||
}
|
||||
|
||||
if (wpa_s->conf->ap_scan == 1 &&
|
||||
wpa_s->drv_flags & WPA_DRIVER_FLAGS_BSS_SELECTION) {
|
||||
|
|
Loading…
Reference in a new issue