[PATCH] Bgscan simple: Add Support for incremental short scan.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When the AP goes below the configured threshold value bgcsan starts at
short scan interval on the STA. If no better AP is found, the STA
continues scanning frequently, causing increased power consumption. To
resolve this, introduce an incremental scanning interval strategy:
after each unsuccessful scan attempt, increment the short scan
interval by (scan_count * short_scan_interval). This approach
significantly reduces unnecessary power consumption during extended
periods without a suitable alternative AP.

Signed off by: Ria Polly Thomas <ria.thomas@xxxxxxxxxxxxxx>
---
 wpa_supplicant/bgscan_simple.c     | 23 +++++++++++++++++++++--
 wpa_supplicant/wpa_supplicant.conf |  6 +++++-
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/wpa_supplicant/bgscan_simple.c b/wpa_supplicant/bgscan_simple.c
index d9aaa634f..9596ecdea 100644
--- a/wpa_supplicant/bgscan_simple.c
+++ b/wpa_supplicant/bgscan_simple.c
@@ -31,6 +31,7 @@ struct bgscan_simple_data {
     int max_short_scans; /* maximum times we short-scan before back-off */
     int short_interval; /* use if signal < threshold */
     int long_interval; /* use if signal > threshold */
+    bool use_incremental_scan;
     struct os_reltime last_bgscan;
 };

@@ -106,8 +107,11 @@ static void bgscan_simple_timeout(void
*eloop_ctx, void *timeout_ctx)
                        bgscan_simple_timeout, data, NULL);
     } else {
     scan_ok:
-        if (data->scan_interval == data->short_interval) {
+        if (data->scan_interval == data->short_interval ||
+            data->scan_interval < data->long_interval) {
             data->short_scan_count++;
+            if (data->use_incremental_scan && data->short_scan_count > 1)
+                data->scan_interval = data->short_interval *
data->short_scan_count;
             if (data->short_scan_count >= data->max_short_scans) {
                 data->scan_interval = data->long_interval;
                 wpa_printf(MSG_DEBUG, "bgscan simple: Backing "
@@ -133,6 +137,7 @@ static int bgscan_simple_get_params(struct
bgscan_simple_data *data,
     const char *pos;

     data->use_btm_query = 0;
+    data->use_incremental_scan = 0;

     data->short_interval = atoi(params);

@@ -151,8 +156,22 @@ static int bgscan_simple_get_params(struct
bgscan_simple_data *data,
     data->long_interval = atoi(pos);
     pos = os_strchr(pos, ':');
     if (pos) {
+        const char *pos_tmp;
         pos++;
-        data->use_btm_query = atoi(pos);
+        pos_tmp = pos;
+        pos = os_strchr(pos, 'i');
+
+        if (pos)
+            data->use_incremental_scan = 1;
+        if (!pos || pos_tmp != pos) {
+            data->use_btm_query = atoi(pos_tmp);
+        } else {
+            pos = os_strchr(pos_tmp, ':');
+            if (pos) {
+                pos++;
+                data->use_btm_query = atoi(pos);
+            }
+        }
     }

     return 0;
diff --git a/wpa_supplicant/wpa_supplicant.conf
b/wpa_supplicant/wpa_supplicant.conf
index 121ad3879..dca992df1 100644
--- a/wpa_supplicant/wpa_supplicant.conf
+++ b/wpa_supplicant/wpa_supplicant.conf
@@ -1066,10 +1066,14 @@ fast_reauth=1
 # Following bgscan modules are available:
 # simple - Periodic background scans based on signal strength
 # send_btm_query > 0 means do this many BTM queries before attempting a scan.
+# incremental_short_scan - i means do incremental short scan if no valid AP is
+# found when RSSI falls below threshold.
 # bgscan="simple:<short bgscan interval in seconds>:<signal strength
threshold>:
-# <long interval>[:<send_btm_query>]"
+# <long interval>[:<send_btm_query>][:<incremental_short_scan>]"
 # bgscan="simple:30:-45:300"
 # bgscan="simple:30:-45:300:3"
+# bgscan="simple:30:-45:300:i"
+# bgscan="simple:30:-45:300:3:i"
 # learn - Learn channels used by the network and try to avoid bgscans on other
 # channels (experimental)
 # bgscan="learn:<short bgscan interval in seconds>:<signal strength threshold>:
-- 
2.25.1

_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux