]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
bgscan: Add global bgscan configuration
authorHaim Dreyfuss <haim.dreyfuss@intel.com>
Sun, 3 Nov 2013 13:19:59 +0000 (15:19 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 5 Nov 2013 08:26:31 +0000 (10:26 +0200)
This option can be used to globally configure bgscan parameters
for all the network blocks.

Note that this configuration will not override a network block
specific bgscan settings, but will only be used in case that
the network block does not have a valid bgscan configuration.

Signed-hostap: Haim Dreyfuss <haim.dreyfuss@intel.com>

wpa_supplicant/bgscan.c
wpa_supplicant/bgscan.h
wpa_supplicant/config.c
wpa_supplicant/config.h
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpa_supplicant.conf

index 9a9bd5207a90ed510474e90f904d8c862d4e9561..f74cdbf24a450c0eb1fec8e45914cff004471b40 100644 (file)
@@ -31,9 +31,9 @@ static const struct bgscan_ops * bgscan_modules[] = {
 };
 
 
-int bgscan_init(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
+int bgscan_init(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
+               const char *name)
 {
-       const char *name = ssid->bgscan;
        const char *params;
        size_t nlen;
        int i;
@@ -41,7 +41,7 @@ int bgscan_init(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
 
        bgscan_deinit(wpa_s);
        if (name == NULL)
-               return 0;
+               return -1;
 
        params = os_strchr(name, ':');
        if (params == NULL) {
index e9d15fc5cf53325260723352535d79464f69c0d4..9131e4ecddc058a5f016e81aa1c84a2f43d1efa4 100644 (file)
@@ -29,7 +29,8 @@ struct bgscan_ops {
 
 #ifdef CONFIG_BGSCAN
 
-int bgscan_init(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
+int bgscan_init(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
+               const char *name);
 void bgscan_deinit(struct wpa_supplicant *wpa_s);
 int bgscan_notify_scan(struct wpa_supplicant *wpa_s,
                       struct wpa_scan_results *scan_res);
@@ -41,7 +42,7 @@ void bgscan_notify_signal_change(struct wpa_supplicant *wpa_s, int above,
 #else /* CONFIG_BGSCAN */
 
 static inline int bgscan_init(struct wpa_supplicant *wpa_s,
-                             struct wpa_ssid *ssid)
+                             struct wpa_ssid *ssid, const char name)
 {
        return 0;
 }
index 08d2ecdd9dfccf23784aeae45322e8347ed2a726..19bcecebd0b9fb9303dcc2d9a7c26a2820cf3ec7 100644 (file)
@@ -2848,6 +2848,24 @@ static int wpa_global_config_parse_str(const struct global_parse_data *data,
 }
 
 
+static int wpa_config_process_bgscan(const struct global_parse_data *data,
+                                    struct wpa_config *config, int line,
+                                    const char *pos)
+{
+       size_t len;
+       char *tmp;
+
+       tmp = wpa_config_parse_string(pos, &len);
+       if (tmp == NULL) {
+               wpa_printf(MSG_ERROR, "Line %d: failed to parse %s",
+                          line, data->name);
+               return -1;
+       }
+
+       return wpa_global_config_parse_str(data, config, line, tmp);
+}
+
+
 static int wpa_global_config_parse_bin(const struct global_parse_data *data,
                                       struct wpa_config *config, int line,
                                       const char *pos)
@@ -3209,6 +3227,7 @@ static const struct global_parse_data global_fields[] = {
 #endif /* CONFIG_CTRL_IFACE */
        { INT_RANGE(eapol_version, 1, 2), 0 },
        { INT(ap_scan), 0 },
+       { FUNC(bgscan), 0 },
        { INT(disable_scan_offload), 0 },
        { INT(fast_reauth), 0 },
        { STR(opensc_engine_path), 0 },
index 8cbeb62862b3720fc74ba569a7b687884e8b2ec0..55a2d62ede56e16b01ae5069d91c66fa00f0aa5c 100644 (file)
@@ -328,6 +328,18 @@ struct wpa_config {
         */
        int ap_scan;
 
+       /**
+        * bgscan - Background scan and roaming parameters or %NULL if none
+        *
+        * This is an optional set of parameters for background scanning and
+        * roaming within a network (ESS). For more detailed information see
+        * ssid block documentation.
+        *
+        * The variable defines default bgscan behavior for all BSS station
+        * networks except for those which have their own bgscan configuration.
+        */
+        char *bgscan;
+
        /**
         * disable_scan_offload - Disable automatic offloading of scan requests
         *
index 255c712a2e6e7ec10f6792a1f4e0d9a8784377b8..3abe460d6cfb89700344174b675d4228f0429dc5 100644 (file)
@@ -570,14 +570,22 @@ const char * wpa_supplicant_state_txt(enum wpa_states state)
 
 static void wpa_supplicant_start_bgscan(struct wpa_supplicant *wpa_s)
 {
+       const char *name;
+
+       if (wpa_s->current_ssid && wpa_s->current_ssid->bgscan)
+               name = wpa_s->current_ssid->bgscan;
+       else
+               name = wpa_s->conf->bgscan;
+       if (name == NULL)
+               return;
        if (wpas_driver_bss_selection(wpa_s))
                return;
        if (wpa_s->current_ssid == wpa_s->bgscan_ssid)
                return;
 
        bgscan_deinit(wpa_s);
-       if (wpa_s->current_ssid && wpa_s->current_ssid->bgscan) {
-               if (bgscan_init(wpa_s, wpa_s->current_ssid)) {
+       if (wpa_s->current_ssid) {
+               if (bgscan_init(wpa_s, wpa_s->current_ssid, name)) {
                        wpa_dbg(wpa_s, MSG_DEBUG, "Failed to initialize "
                                "bgscan");
                        /*
index 11be8dd51558c20814d99d46beb2206ed46485b4..0ecfaa68b3a39170548dd6c4db6e9904bbf28998 100644 (file)
@@ -550,6 +550,10 @@ fast_reauth=1
 # <long interval>[:<database file name>]"
 # bgscan="learn:30:-45:300:/etc/wpa_supplicant/network1.bgscan"
 #
+# This option can also be set outside of all network blocks for the bgscan
+# parameter to apply for all the networks that have no specific bgscan
+# parameter.
+#
 # proto: list of accepted protocols
 # WPA = WPA/IEEE 802.11i/D3.0
 # RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)