Patchwork allow OBSS scan and 20/40 coex reports to non-SME drivers

login
register
mail settings
Submitter Amitkumar Karwar
Date Oct. 5, 2012, 8:35 a.m.
Message ID <5FF020A1CFFEEC49BD1E09530C4FF59506A25A0CD0@SC-VEXCH1.marvell.com>
Download mbox | patch
Permalink /patch/189448/
State Changes Requested
Headers show

Comments

Amitkumar Karwar - Oct. 5, 2012, 8:35 a.m.
From: Amitkumar Karwar <akarwar@marvell.com>

Some nl80211 based non-SME drivers (ex. mwifiex) are capable of
receiving management frames prepared in wpa_supplicant. Hence the
check for WPA_DRIVER_FLAGS_SME flag is removed so that they can
use 20/40 coex feature.

Tested-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
---
 wpa_supplicant/sme.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)
Jouni Malinen - Nov. 3, 2012, 2:48 p.m.
On Fri, Oct 05, 2012 at 01:35:55AM -0700, Amitkumar Karwar wrote:
> Some nl80211 based non-SME drivers (ex. mwifiex) are capable of
> receiving management frames prepared in wpa_supplicant. Hence the
> check for WPA_DRIVER_FLAGS_SME flag is removed so that they can
> use 20/40 coex feature.

This is not exactly planned way of using wpa_supplicant/sme.c, but I
guess it would be fine to re-use the same OBSS scan mechanism with both
types of drivers. However, this specific way of doing that could result
in undesired extra scans if the driver happens to implement OBSS scans
internally.

Is there any way of determining that a driver that does not use
wpa_supplicant SME needs this functionality from user space? If not, we
may need to add nl80211 advertisement for this and enable this
functionality only if the driver indicates needs for it.

Patch

diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index 02c44d4..7ee8b6e 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -976,9 +976,8 @@  void sme_sched_obss_scan(struct wpa_supplicant *wpa_s, int enable)
 	if (!enable)
 		return;
 
-	if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) || ssid == NULL ||
-	    ssid->mode != IEEE80211_MODE_INFRA)
-		return; /* Not using station SME in wpa_supplicant */
+	if (ssid == NULL || ssid->mode != IEEE80211_MODE_INFRA)
+		return;
 
 	if (!wpa_s->hw.modes)
 		return;