aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas Pedersen <c_tpeder@qca.qualcomm.com>2012-07-25 16:56:43 +0300
committerJouni Malinen <j@w1.fi>2012-07-25 16:56:43 +0300
commitbf8d6d2430c1603419fb01823feba81be971518a (patch)
treeda5e98b0c4bc1df6856c4af26a209c4751482244 /src
parentcae2119c863d3ea013ec820691bffc4a940e4f0b (diff)
downloadexternal_wpa_supplicant_8_ti-bf8d6d2430c1603419fb01823feba81be971518a.zip
external_wpa_supplicant_8_ti-bf8d6d2430c1603419fb01823feba81be971518a.tar.gz
external_wpa_supplicant_8_ti-bf8d6d2430c1603419fb01823feba81be971518a.tar.bz2
nl80211: Support setting sched scan RSSI threshold
Allow the user to configure an RSSI threshold in dBm below which the nl80211 driver won't report scan results. Currently only supported during scheduled (PNO) scans. Signed-off-by: Thomas Pedersen <c_tpeder@qca.qualcomm.com> Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/driver.h9
-rw-r--r--src/drivers/driver_nl80211.c18
2 files changed, 25 insertions, 2 deletions
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index c5941dd..99da31c 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -274,6 +274,15 @@ struct wpa_driver_scan_params {
size_t num_filter_ssids;
/**
+ * filter_rssi - Filter by RSSI
+ *
+ * The driver may filter scan results in firmware to reduce host
+ * wakeups and thereby save power. Specify the RSSI threshold in s32
+ * dBm.
+ */
+ s32 filter_rssi;
+
+ /**
* p2p_probe - Used to disable CCK (802.11b) rates for P2P probes
*
* When set, the driver is expected to remove rates 1, 2, 5.5, and 11
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 0373f43..a30f2e3 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -3612,6 +3612,7 @@ static int wpa_driver_nl80211_sched_scan(void *priv,
struct wpa_driver_nl80211_data *drv = bss->drv;
int ret = 0;
struct nl_msg *msg, *ssids, *freqs, *match_set_ssid, *match_sets;
+ struct nl_msg *match_set_rssi;
size_t i;
#ifdef ANDROID
@@ -3640,8 +3641,9 @@ static int wpa_driver_nl80211_sched_scan(void *priv,
NLA_PUT_U32(msg, NL80211_ATTR_SCHED_SCAN_INTERVAL, interval);
- if (drv->num_filter_ssids &&
- (int) drv->num_filter_ssids <= drv->capa.max_match_sets) {
+ if ((drv->num_filter_ssids &&
+ (int) drv->num_filter_ssids <= drv->capa.max_match_sets) ||
+ params->filter_rssi) {
match_sets = nlmsg_alloc();
for (i = 0; i < drv->num_filter_ssids; i++) {
@@ -3661,6 +3663,18 @@ static int wpa_driver_nl80211_sched_scan(void *priv,
nlmsg_free(match_set_ssid);
}
+ if (params->filter_rssi) {
+ match_set_rssi = nlmsg_alloc();
+ NLA_PUT_U32(match_set_rssi,
+ NL80211_SCHED_SCAN_MATCH_ATTR_RSSI,
+ params->filter_rssi);
+ wpa_printf(MSG_MSGDUMP,
+ "nl80211: Sched scan RSSI filter %d dBm",
+ params->filter_rssi);
+ nla_put_nested(match_sets, 0, match_set_rssi);
+ nlmsg_free(match_set_rssi);
+ }
+
nla_put_nested(msg, NL80211_ATTR_SCHED_SCAN_MATCH,
match_sets);
nlmsg_free(match_sets);