diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2012-01-24 16:10:04 -0800 |
---|---|---|
committer | Dmitry Shmidt <dimitrysh@google.com> | 2012-01-24 16:44:49 -0800 |
commit | 1f69aa52ea2e0a73ac502565df8c666ee49cab6a (patch) | |
tree | 8ea94735f75f461769454853da0c24cbb89cc4cc /wpa_supplicant/wps_supplicant.c | |
parent | bf5edf439c90418b6f4122ff5e3925123263bda4 (diff) | |
download | external_wpa_supplicant_8-1f69aa52ea2e0a73ac502565df8c666ee49cab6a.zip external_wpa_supplicant_8-1f69aa52ea2e0a73ac502565df8c666ee49cab6a.tar.gz external_wpa_supplicant_8-1f69aa52ea2e0a73ac502565df8c666ee49cab6a.tar.bz2 |
Update to new version 0.8.16 from BRCM
Sync with main tree commit b8349523e460493fa0b4de36c689595109e45e91
Author: Neeraj Kumar Garg <neerajkg@broadcom.com>
Date: Tue Dec 27 23:21:45 2011 +0200
P2P: Reject p2p_group_add if forced frequency is not acceptable
Change-Id: Icb4541a371b05c270e80440d7a7fdea7f33ff61e
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'wpa_supplicant/wps_supplicant.c')
-rw-r--r-- | wpa_supplicant/wps_supplicant.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/wpa_supplicant/wps_supplicant.c b/wpa_supplicant/wps_supplicant.c index e3388bd..870aff5 100644 --- a/wpa_supplicant/wps_supplicant.c +++ b/wpa_supplicant/wps_supplicant.c @@ -88,6 +88,7 @@ int wpas_wps_eapol_cb(struct wpa_supplicant *wpa_s) } wpa_s->after_wps = 5; wpa_s->wps_freq = wpa_s->assoc_freq; + wpa_s->normal_scans = 0; wpa_s->reassociate = 1; wpa_supplicant_req_scan(wpa_s, 0, 0); return 1; @@ -127,6 +128,8 @@ static void wpas_wps_security_workaround(struct wpa_supplicant *wpa_s, if (wpa_drv_get_capa(wpa_s, &capa)) return; /* Unknown what driver supports */ + if (ssid->ssid == NULL) + return; bss = wpa_bss_get(wpa_s, cred->mac_addr, ssid->ssid, ssid->ssid_len); if (bss == NULL) { wpa_printf(MSG_DEBUG, "WPS: The AP was not found from BSS " @@ -192,7 +195,9 @@ static int wpa_supplicant_wps_cred(void *ctx, struct wpa_ssid *ssid = wpa_s->current_ssid; u8 key_idx = 0; u16 auth_type; +#ifdef CONFIG_WPS_REG_DISABLE_OPEN int registrar = 0; +#endif /* CONFIG_WPS_REG_DISABLE_OPEN */ if ((wpa_s->conf->wps_cred_processing == 1 || wpa_s->conf->wps_cred_processing == 2) && cred->cred_attr) { @@ -246,11 +251,13 @@ static int wpa_supplicant_wps_cred(void *ctx, if (ssid && (ssid->key_mgmt & WPA_KEY_MGMT_WPS)) { wpa_printf(MSG_DEBUG, "WPS: Replace WPS network block based " "on the received credential"); +#ifdef CONFIG_WPS_REG_DISABLE_OPEN if (ssid->eap.identity && ssid->eap.identity_len == WSC_ID_REGISTRAR_LEN && os_memcmp(ssid->eap.identity, WSC_ID_REGISTRAR, WSC_ID_REGISTRAR_LEN) == 0) registrar = 1; +#endif /* CONFIG_WPS_REG_DISABLE_OPEN */ os_free(ssid->eap.identity); ssid->eap.identity = NULL; ssid->eap.identity_len = 0; @@ -787,6 +794,10 @@ static void wpas_wps_reassoc(struct wpa_supplicant *wpa_s, { struct wpa_ssid *ssid; + if (wpa_s->current_ssid) + wpa_supplicant_deauthenticate( + wpa_s, WLAN_REASON_DEAUTH_LEAVING); + /* Mark all other networks disabled and trigger reassociation */ ssid = wpa_s->conf->ssid; while (ssid) { @@ -808,6 +819,7 @@ static void wpas_wps_reassoc(struct wpa_supplicant *wpa_s, wpa_s->disconnected = 0; wpa_s->reassociate = 1; wpa_s->scan_runs = 0; + wpa_s->normal_scans = 0; wpa_s->wps_success = 0; wpa_s->blacklist_cleared = 0; wpa_supplicant_req_scan(wpa_s, 0, 0); @@ -1114,6 +1126,8 @@ int wpas_wps_init(struct wpa_supplicant *wpa_s) { struct wps_context *wps; struct wps_registrar_config rcfg; + struct hostapd_hw_modes *modes; + u16 m; wps = os_zalloc(sizeof(*wps)); if (wps == NULL) @@ -1138,6 +1152,7 @@ int wpas_wps_init(struct wpa_supplicant *wpa_s) return -1; } wps->config_methods = wps_fix_config_methods(wps->config_methods); + wps->dev.config_methods = wps->config_methods; os_memcpy(wps->dev.pri_dev_type, wpa_s->conf->device_type, WPS_DEV_TYPE_LEN); @@ -1146,7 +1161,23 @@ int wpas_wps_init(struct wpa_supplicant *wpa_s) WPS_DEV_TYPE_LEN * wps->dev.num_sec_dev_types); wps->dev.os_version = WPA_GET_BE32(wpa_s->conf->os_version); - wps->dev.rf_bands = WPS_RF_24GHZ | WPS_RF_50GHZ; /* TODO: config */ + modes = wpa_s->hw.modes; + if (modes) { + for (m = 0; m < wpa_s->hw.num_modes; m++) { + if (modes[m].mode == HOSTAPD_MODE_IEEE80211B || + modes[m].mode == HOSTAPD_MODE_IEEE80211G) + wps->dev.rf_bands |= WPS_RF_24GHZ; + else if (modes[m].mode == HOSTAPD_MODE_IEEE80211A) + wps->dev.rf_bands |= WPS_RF_50GHZ; + } + } + if (wps->dev.rf_bands == 0) { + /* + * Default to claiming support for both bands if the driver + * does not provide support for fetching supported bands. + */ + wps->dev.rf_bands = WPS_RF_24GHZ | WPS_RF_50GHZ; + } os_memcpy(wps->dev.mac_addr, wpa_s->own_addr, ETH_ALEN); wpas_wps_set_uuid(wpa_s, wps); |