]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Allow background scan period to be configured
authorBala Shanmugam <bkamatch@qca.qualcomm.com>
Fri, 30 Mar 2012 12:20:35 +0000 (15:20 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 30 Mar 2012 12:20:35 +0000 (15:20 +0300)
A network block specific background scan period can now be configured
for drivers that implement internal background scan mechanism for
roaming and BSS selection.

Signed-hostap: Bala Shanmugam <bkamatch@qca.qualcomm.com>

src/drivers/driver.h
src/drivers/driver_nl80211.c
wpa_supplicant/config.c
wpa_supplicant/config_file.c
wpa_supplicant/config_ssid.h
wpa_supplicant/sme.c
wpa_supplicant/wpa_supplicant.c

index 6eb04211551bdf808f12a605ff682984dba06031..c4f6b5f3d4730ffcfb053fc0d97651b0b53a5cf6 100644 (file)
@@ -332,6 +332,13 @@ struct wpa_driver_associate_params {
         */
        int freq;
 
+       /**
+        * bg_scan_period - Background scan period in seconds, 0 to disable
+        * background scan, or -1 to indicate no change to default driver
+        * configuration
+        */
+       int bg_scan_period;
+
        /**
         * wpa_ie - WPA information element for (Re)Association Request
         * WPA information element to be included in (Re)Association
index 94fbca1061fd6df40a2cbae06a704e60d71d3b71..1cbbbadb4b25185d38a58aca45528cc5aa45ba26 100644 (file)
@@ -6575,6 +6575,12 @@ static int wpa_driver_nl80211_connect(
                wpa_printf(MSG_DEBUG, "  * freq=%d", params->freq);
                NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq);
        }
+       if (params->bg_scan_period >= 0) {
+               wpa_printf(MSG_DEBUG, "  * bg scan period=%d",
+                          params->bg_scan_period);
+               NLA_PUT_U16(msg, NL80211_ATTR_BG_SCAN_PERIOD,
+                           params->bg_scan_period);
+       }
        if (params->ssid) {
                wpa_hexdump_ascii(MSG_DEBUG, "  * SSID",
                                  params->ssid, params->ssid_len);
@@ -6772,6 +6778,12 @@ static int wpa_driver_nl80211_associate(
                drv->assoc_freq = params->freq;
        } else
                drv->assoc_freq = 0;
+       if (params->bg_scan_period >= 0) {
+               wpa_printf(MSG_DEBUG, "  * bg scan period=%d",
+                          params->bg_scan_period);
+               NLA_PUT_U16(msg, NL80211_ATTR_BG_SCAN_PERIOD,
+                           params->bg_scan_period);
+       }
        if (params->ssid) {
                wpa_hexdump_ascii(MSG_DEBUG, "  * SSID",
                                  params->ssid, params->ssid_len);
index 5675d2e6398fc2a532fe7c48f2f1c6ca75c4a207..ea0b6f468a15af7c2af67ffb8b1749104b003ecb 100644 (file)
@@ -1525,6 +1525,7 @@ static const struct parse_data ssid_fields[] = {
        { FUNC_KEY(psk) },
        { FUNC(proto) },
        { FUNC(key_mgmt) },
+       { INT(bg_scan_period) },
        { FUNC(pairwise) },
        { FUNC(group) },
        { FUNC(auth_alg) },
@@ -1978,6 +1979,7 @@ void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
        ssid->pairwise_cipher = DEFAULT_PAIRWISE;
        ssid->group_cipher = DEFAULT_GROUP;
        ssid->key_mgmt = DEFAULT_KEY_MGMT;
+       ssid->bg_scan_period = DEFAULT_BG_SCAN_PERIOD;
 #ifdef IEEE8021X_EAPOL
        ssid->eapol_flags = DEFAULT_EAPOL_FLAGS;
        ssid->eap_workaround = DEFAULT_EAP_WORKAROUND;
index cf5332014ff0cc8132075e008d3d7b17c0692455..e7f3a7ccbcf40bdb80d98f8155c42626108587d6 100644 (file)
@@ -588,6 +588,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
        write_psk(f, ssid);
        write_proto(f, ssid);
        write_key_mgmt(f, ssid);
+       INT(bg_scan_period);
        write_pairwise(f, ssid);
        write_group(f, ssid);
        write_auth_alg(f, ssid);
index fa18826e4536a703884d3ba235f9dd022659215a..80d438248a04c834b9e75ccce7c5d0d0b6795e61 100644 (file)
@@ -25,6 +25,7 @@
                       WPA_CIPHER_WEP104 | WPA_CIPHER_WEP40)
 #define DEFAULT_FRAGMENT_SIZE 1398
 
+#define DEFAULT_BG_SCAN_PERIOD -1
 #define DEFAULT_DISABLE_HT 0
 #define DEFAULT_DISABLE_HT40 0
 #define DEFAULT_DISABLE_MAX_AMSDU -1 /* no change */
@@ -156,6 +157,12 @@ struct wpa_ssid {
         */
        int key_mgmt;
 
+       /**
+        * bg_scan_period - Background scan period in seconds, 0 to disable, or
+        * -1 to indicate no change to default driver configuration
+        */
+       int bg_scan_period;
+
        /**
         * proto - Bitfield of allowed protocols, WPA_PROTO_*
         */
index 690f3950575ab8f5d2abbbe2e2301276c9f2300c..b36684716143021ba0bdd6002e576be39c6b6044 100644 (file)
@@ -371,6 +371,8 @@ void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
        params.ssid = wpa_s->sme.ssid;
        params.ssid_len = wpa_s->sme.ssid_len;
        params.freq = wpa_s->sme.freq;
+       params.bg_scan_period = wpa_s->current_ssid ?
+               wpa_s->current_ssid->bg_scan_period : -1;
        params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
                wpa_s->sme.assoc_req_ie : NULL;
        params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
index 36074d58274b3d59243ff9e780225b06079f9948..71542f0ff3c103e92e6dc4eaad4403000cccd0d7 100644 (file)
@@ -1355,6 +1355,7 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
        params.wpa_proto = wpa_s->wpa_proto;
        params.auth_alg = algs;
        params.mode = ssid->mode;
+       params.bg_scan_period = ssid->bg_scan_period;
        for (i = 0; i < NUM_WEP_KEYS; i++) {
                if (ssid->wep_key_len[i])
                        params.wep_key[i] = ssid->wep_key[i];