[PATCH 2/2] p2p: Use scan supported rate attr for p2p probing
Rajkumar Manoharan
rmanohar
Sat Sep 3 09:51:51 PDT 2011
This patch ensures that p2p probing does not use
11b rates by setting supported rates in the scan
attributes.
Signed-off-by: Rajkumar Manoharan <rmanohar at qca.qualcomm.com>
---
src/drivers/driver.h | 4 ++++
src/drivers/driver_nl80211.c | 17 +++++++++++++++--
wpa_supplicant/mlme.c | 4 ++--
wpa_supplicant/p2p_supplicant.c | 2 ++
4 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 822dc21..1c16228 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -242,6 +242,10 @@ struct wpa_driver_scan_params {
int *freqs;
/**
+ * p2p_probe - Used to disables 11b rates for P2P probes
+ */
+ u8 p2p_probe;
+ /**
* filter_ssids - Filter for reporting SSIDs
*
* This optional parameter can be used to request the driver wrapper to
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 19dcc85..06f7709 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -2361,16 +2361,18 @@ static int wpa_driver_nl80211_scan(void *priv,
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
int ret = 0, timeout;
- struct nl_msg *msg, *ssids, *freqs;
+ struct nl_msg *msg, *ssids, *freqs, *rates;
size_t i;
msg = nlmsg_alloc();
ssids = nlmsg_alloc();
freqs = nlmsg_alloc();
- if (!msg || !ssids || !freqs) {
+ rates = nlmsg_alloc();
+ if (!msg || !ssids || !freqs || !rates) {
nlmsg_free(msg);
nlmsg_free(ssids);
nlmsg_free(freqs);
+ nlmsg_free(rates);
return -1;
}
@@ -2410,6 +2412,16 @@ static int wpa_driver_nl80211_scan(void *priv,
nla_put_nested(msg, NL80211_ATTR_SCAN_FREQUENCIES, freqs);
}
+ if (params->p2p_probe) {
+ /*
+ * Disable 2 GHz rates 1, 2, 5.5, 11 Mbps by masking out
+ * everything else apart from 6, 9, 12, 18, 24, 36, 48, 54 Mbps
+ * from non-MCS rates. All 5 GHz rates are left enabled.
+ */
+ NLA_PUT(rates, NL80211_BAND_2GHZ, 8,
+ "\x0c\x12\x18\x24\x30\x48\x60\x6c");
+ nla_put_nested(msg, NL80211_ATTR_SCAN_SUPP_RATES, rates);
+ }
ret = send_and_recv_msgs(drv, msg, NULL, NULL);
msg = NULL;
if (ret) {
@@ -2461,6 +2473,7 @@ nla_put_failure:
nlmsg_free(ssids);
nlmsg_free(msg);
nlmsg_free(freqs);
+ nlmsg_free(rates);
return ret;
}
diff --git a/wpa_supplicant/mlme.c b/wpa_supplicant/mlme.c
index 49713f5..9a221a8 100644
--- a/wpa_supplicant/mlme.c
+++ b/wpa_supplicant/mlme.c
@@ -2864,8 +2864,8 @@ int ieee80211_sta_req_scan(struct wpa_supplicant *wpa_s,
os_memcpy(wpa_s->mlme.scan_ssid, ssid, ssid_len);
} else
wpa_s->mlme.scan_ssid_len = 0;
- wpa_s->mlme.scan_skip_11b = 1; /* FIX: clear this is 11g is not
- * supported */
+ if (params->p2p_probe)
+ wpa_s->mlme.scan_skip_11b = 1;
wpa_s->mlme.scan_state = SCAN_SET_CHANNEL;
wpa_s->mlme.scan_hw_mode_idx = 0;
wpa_s->mlme.scan_channel_idx = 0;
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index cf4900c..c1a31fd 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -120,6 +120,7 @@ static int wpas_p2p_scan(void *ctx, enum p2p_scan_type type, int freq,
p2p_scan_ie(wpa_s->global->p2p, ies);
+ params.p2p_probe = 1;
params.extra_ies = wpabuf_head(ies);
params.extra_ies_len = wpabuf_len(ies);
@@ -2785,6 +2786,7 @@ static void wpas_p2p_join_scan(void *eloop_ctx, void *timeout_ctx)
p2p_scan_ie(wpa_s->global->p2p, ies);
+ params.p2p_probe = 1;
params.extra_ies = wpabuf_head(ies);
params.extra_ies_len = wpabuf_len(ies);
--
1.7.6.1
More information about the Hostap
mailing list