GAS: Do not start new scan operation during an ongoing GAS query
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 21 Oct 2013 10:20:38 +0000 (13:20 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 21 Oct 2013 10:20:38 +0000 (13:20 +0300)
These operations can have conflicting offchannel requirements, so wait
with a new scan trigger until a pending GAS query has been completed.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/gas_query.c
wpa_supplicant/gas_query.h
wpa_supplicant/scan.c

index 00f730e..c5554bd 100644 (file)
@@ -598,3 +598,9 @@ void gas_query_cancel(struct gas_query *gas, const u8 *dst, u8 dialog_token)
                gas_query_done(gas, query, GAS_QUERY_CANCELLED);
 
 }
+
+
+int gas_query_in_progress(struct gas_query *gas)
+{
+       return gas->current != NULL;
+}
index 5c3d161..6b6c77c 100644 (file)
@@ -18,6 +18,7 @@ struct gas_query * gas_query_init(struct wpa_supplicant *wpa_s);
 void gas_query_deinit(struct gas_query *gas);
 int gas_query_rx(struct gas_query *gas, const u8 *da, const u8 *sa,
                 const u8 *bssid, const u8 *data, size_t len, int freq);
+int gas_query_in_progress(struct gas_query *gas);
 
 /**
  * enum gas_query_result - GAS query result
index f1f858e..1a3fe24 100644 (file)
@@ -21,6 +21,7 @@
 #include "hs20_supplicant.h"
 #include "notify.h"
 #include "bss.h"
+#include "gas_query.h"
 #include "scan.h"
 
 
@@ -604,6 +605,14 @@ static void wpa_supplicant_scan(void *eloop_ctx, void *timeout_ctx)
        }
 #endif /* CONFIG_P2P */
 
+#ifdef CONFIG_GAS
+       if (gas_query_in_progress(wpa_s->gas)) {
+               wpa_dbg(wpa_s, MSG_DEBUG, "Delay scan while GAS query is in progress");
+               wpa_supplicant_req_scan(wpa_s, 1, 0);
+               return;
+       }
+#endif /* CONFIG_GAS */
+
        if (wpa_s->conf->ap_scan == 2)
                max_ssids = 1;
        else {