[PATCH] wait for IBSS join events for drivers that support them
Dan Williams
dcbw
Wed Sep 8 10:58:12 PDT 2010
On Thu, 2010-08-05 at 16:49 -0500, Dan Williams wrote:
> Wait for the join event to come through before indicating COMPLETED
> state, otherwise the driver isn't ready yet and often hasn't even
> started the IBSS yet because it's still scanning for candidates.
Any thoughts or comments on this patch? Just a friendly ping :)
Dan
> Signed-off-by: Dan Williams <dcbw at redhat.com>
> ---
> Diff against 0.7. Please apply to 0.6 too when you get the chance,
> thanks!
>
> diff --git a/src/drivers/driver.h b/src/drivers/driver.h
> index fa49da4..daa6565 100644
> --- a/src/drivers/driver.h
> +++ b/src/drivers/driver.h
> @@ -502,6 +502,8 @@ struct wpa_driver_capa {
> #define WPA_DRIVER_FLAGS_AP 0x00000040
> /* Driver needs static WEP key setup after association has been completed */
> #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE 0x00000080
> +/* Driver signals successful IBSS join/create events */
> +#define WPA_DRIVER_FLAGS_SIGNALS_IBSS_JOIN 0x00000100
> unsigned int flags;
>
> int max_scan_ssids;
> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> index a123327..6eb0deb 100644
> --- a/src/drivers/driver_nl80211.c
> +++ b/src/drivers/driver_nl80211.c
> @@ -1225,7 +1225,9 @@ static int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
> return -1;
> }
>
> - drv->capa.flags |= WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE;
> + drv->capa.flags |= (WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE |
> + WPA_DRIVER_FLAGS_SIGNALS_IBSS_JOIN);
> +
> drv->capa.max_remain_on_chan = 5000;
>
> return 0;
> diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
> index 2614f23..ed3df59 100644
> --- a/src/drivers/driver_wext.c
> +++ b/src/drivers/driver_wext.c
> @@ -1419,6 +1419,11 @@ static int wpa_driver_wext_get_range(void *priv)
> WPA_DRIVER_AUTH_LEAP;
> drv->capa.max_scan_ssids = 1;
>
> + /* WEXT expects drivers to send SIOCSIWAP events on successful
> + * IBSS join/create.
> + */
> + drv->capa.flags |= WPA_DRIVER_FLAGS_SIGNALS_IBSS_JOIN;
> +
> wpa_printf(MSG_DEBUG, " capabilities: key_mgmt 0x%x enc 0x%x "
> "flags 0x%x",
> drv->capa.key_mgmt, drv->capa.enc, drv->capa.flags);
> diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
> index 5563f0b..acd0497 100644
> --- a/wpa_supplicant/wpa_supplicant.c
> +++ b/wpa_supplicant/wpa_supplicant.c
> @@ -1237,7 +1237,8 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
> assoc_failed = 1;
> }
>
> - if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE) {
> + if (wpa_s->key_mgmt == WPA_KEY_MGMT_WPA_NONE &&
> + !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SIGNALS_IBSS_JOIN)) {
> /* Set the key after the association just in case association
> * cleared the previously configured key. */
> wpa_supplicant_set_wpa_none_key(wpa_s, ssid);
>
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap
More information about the Hostap
mailing list