[pkg-wpa-devel] r1486 - in /wpasupplicant/trunk/debian: changelog patches/30_cfg80211_association_optimisation.patch patches/series
kelmo-guest at users.alioth.debian.org
kelmo-guest at users.alioth.debian.org
Sat Feb 27 01:31:22 UTC 2010
Author: kelmo-guest
Date: Sat Feb 27 01:31:21 2010
New Revision: 1486
URL: http://svn.debian.org/wsvn/pkg-wpa/?sc=1&rev=1486
Log:
Cherry pick 30_cfg80211_association_optimisation.patch from upstream
git. Add cfg80211-specific optimization to avoid silly behavior.
Added:
wpasupplicant/trunk/debian/patches/30_cfg80211_association_optimisation.patch
Modified:
wpasupplicant/trunk/debian/changelog
wpasupplicant/trunk/debian/patches/series
Modified: wpasupplicant/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/changelog?rev=1486&op=diff
==============================================================================
--- wpasupplicant/trunk/debian/changelog (original)
+++ wpasupplicant/trunk/debian/changelog Sat Feb 27 01:31:21 2010
@@ -11,8 +11,10 @@
for little to no benefit.
* Add traling blank line to debian/NEWS to assist apt-listchanges as
per lintian advice.
-
- -- Kel Modderman <kel at otaku42.de> Sat, 27 Feb 2010 11:22:09 +1000
+ * Cherry pick 30_cfg80211_association_optimisation.patch from upstream
+ git. Add cfg80211-specific optimization to avoid silly behavior.
+
+ -- Kel Modderman <kel at otaku42.de> Sat, 27 Feb 2010 11:30:53 +1000
wpasupplicant (0.6.10-1) unstable; urgency=low
Added: wpasupplicant/trunk/debian/patches/30_cfg80211_association_optimisation.patch
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/patches/30_cfg80211_association_optimisation.patch?rev=1486&op=file
==============================================================================
--- wpasupplicant/trunk/debian/patches/30_cfg80211_association_optimisation.patch (added)
+++ wpasupplicant/trunk/debian/patches/30_cfg80211_association_optimisation.patch Sat Feb 27 01:31:21 2010
@@ -1,0 +1,124 @@
+commit 1fd851e121eb4bd6537cb8c6a018c3b81cddb0f7
+Author: Jouni Malinen <j at w1.fi>
+Date: Tue Jan 12 20:01:09 2010 +0200
+
+ wext: Add cfg80211-specific optimization to avoid silly behavior
+
+ If the driver is detected to use cfg80211, we can rely on it being able
+ to disconnect with SIOCSIWMLME commands and to use empty SSID as a way
+ to stop it from associating when we are in progress of configuring the
+ driver for association. Consequently, we can remove the hack that uses
+ random 32-octet SSID to force disconnection and re-order association
+ commands to match the expectations that cfg80211 has for WEXT ioctls.
+ This gets rid of extra scan rounds and attempts to associate with the
+ silly 32-octet SSID.
+ (cherry picked from commit 3145e6154c11355631b846b0dd2c57eead255401)
+
+diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
+index e771d37..10d2d5e 100644
+--- a/src/drivers/driver_wext.c
++++ b/src/drivers/driver_wext.c
+@@ -1,6 +1,6 @@
+ /*
+- * WPA Supplicant - driver interaction with generic Linux Wireless Extensions
+- * Copyright (c) 2003-2007, Jouni Malinen <j at w1.fi>
++ * Driver interaction with generic Linux Wireless Extensions
++ * Copyright (c) 2003-2010, Jouni Malinen <j at w1.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+@@ -20,6 +20,7 @@
+
+ #include "includes.h"
+ #include <sys/ioctl.h>
++#include <sys/stat.h>
+ #include <net/if_arp.h>
+
+ #include "wireless_copy.h"
+@@ -905,6 +906,8 @@ void * wpa_driver_wext_init(void *ctx, const char *ifname)
+ int s;
+ struct sockaddr_nl local;
+ struct wpa_driver_wext_data *drv;
++ char path[128];
++ struct stat buf;
+
+ drv = os_zalloc(sizeof(*drv));
+ if (drv == NULL)
+@@ -912,6 +915,12 @@ void * wpa_driver_wext_init(void *ctx, const char *ifname)
+ drv->ctx = ctx;
+ os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
+
++ os_snprintf(path, sizeof(path), "/sys/class/net/%s/phy80211", ifname);
++ if (stat(path, &buf) == 0) {
++ wpa_printf(MSG_DEBUG, "WEXT: cfg80211-based driver detected");
++ drv->cfg80211 = 1;
++ }
++
+ drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
+ if (drv->ioctl_sock < 0) {
+ perror("socket(PF_INET,SOCK_DGRAM)");
+@@ -1929,6 +1938,19 @@ static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv)
+ }
+
+ if (iwr.u.mode == IW_MODE_INFRA) {
++ if (drv->cfg80211) {
++ /*
++ * cfg80211 supports SIOCSIWMLME commands, so there is
++ * no need for the random SSID hack, but clear the
++ * BSSID and SSID.
++ */
++ if (wpa_driver_wext_set_bssid(drv, null_bssid) < 0 ||
++ wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
++ wpa_printf(MSG_DEBUG, "WEXT: Failed to clear "
++ "to disconnect");
++ }
++ return;
++ }
+ /*
+ * Clear the BSSID selection and set a random SSID to make sure
+ * the driver will not be trying to associate with something
+@@ -2076,6 +2098,14 @@ int wpa_driver_wext_associate(void *priv,
+
+ wpa_printf(MSG_DEBUG, "%s", __FUNCTION__);
+
++ if (drv->cfg80211) {
++ /*
++ * Stop cfg80211 from trying to associate before we are done
++ * with all parameters.
++ */
++ wpa_driver_wext_set_ssid(drv, (u8 *) "", 0);
++ }
++
+ /*
+ * If the driver did not support SIOCSIWAUTH, fallback to
+ * SIOCSIWENCODE here.
+@@ -2155,11 +2185,15 @@ int wpa_driver_wext_associate(void *priv,
+ #endif /* CONFIG_IEEE80211W */
+ if (params->freq && wpa_driver_wext_set_freq(drv, params->freq) < 0)
+ ret = -1;
+- if (wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
++ if (!drv->cfg80211 &&
++ wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
+ ret = -1;
+ if (params->bssid &&
+ wpa_driver_wext_set_bssid(drv, params->bssid) < 0)
+ ret = -1;
++ if (drv->cfg80211 &&
++ wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
++ ret = -1;
+
+ return ret;
+ }
+diff --git a/src/drivers/driver_wext.h b/src/drivers/driver_wext.h
+index b89c2cb..328f22e 100644
+--- a/src/drivers/driver_wext.h
++++ b/src/drivers/driver_wext.h
+@@ -43,6 +43,8 @@ struct wpa_driver_wext_data {
+ char mlmedev[IFNAMSIZ + 1];
+
+ int scan_complete_events;
++
++ int cfg80211; /* whether driver is using cfg80211 */
+ };
+
+ int wpa_driver_wext_get_ifflags(struct wpa_driver_wext_data *drv, int *flags);
Modified: wpasupplicant/trunk/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/patches/series?rev=1486&op=diff
==============================================================================
--- wpasupplicant/trunk/debian/patches/series (original)
+++ wpasupplicant/trunk/debian/patches/series Sat Feb 27 01:31:21 2010
@@ -6,3 +6,4 @@
18_wpa_gui_wps_ap_avail_annoyance.patch
20_wpa_msg_ctrl_wps.patch
21_kfreebsd.patch
+30_cfg80211_association_optimisation.patch
More information about the Pkg-wpa-devel
mailing list