aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2013-10-21 10:20:38 (GMT)
committerJouni Malinen <j@w1.fi>2013-10-21 10:20:38 (GMT)
commitcbc548489205b719897202cffdb3d692ea3ca60f (patch)
treeba6fc0d8f3660e03d8782c11370ea8dc02ac8b23
parentc3775143377887575ad24d244874ea770249f8c8 (diff)
downloadhostap-cbc548489205b719897202cffdb3d692ea3ca60f.zip
hostap-cbc548489205b719897202cffdb3d692ea3ca60f.tar.gz
hostap-cbc548489205b719897202cffdb3d692ea3ca60f.tar.bz2
GAS: Do not start new scan operation during an ongoing GAS query
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>
-rw-r--r--wpa_supplicant/gas_query.c6
-rw-r--r--wpa_supplicant/gas_query.h1
-rw-r--r--wpa_supplicant/scan.c9
3 files changed, 16 insertions, 0 deletions
diff --git a/wpa_supplicant/gas_query.c b/wpa_supplicant/gas_query.c
index 00f730e..c5554bd 100644
--- a/wpa_supplicant/gas_query.c
+++ b/wpa_supplicant/gas_query.c
@@ -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;
+}
diff --git a/wpa_supplicant/gas_query.h b/wpa_supplicant/gas_query.h
index 5c3d161..6b6c77c 100644
--- a/wpa_supplicant/gas_query.h
+++ b/wpa_supplicant/gas_query.h
@@ -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
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index f1f858e..1a3fe24 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -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 {