Cumulative patch from commit 2b6623ab134fff6d96114f5fe329a2f87d5e893a
2b6623a hostapd: Do not terminate process on dynamic interface add failure
217cf49 P2P: Add more debug prints for frequency selection
4dd3f86 P2P: Fix bug in GO frequency selection
9804873 wpa_supplicant: Fix bug in get_shared_radio_freqs
3342c26 wpa_supplicant: Fix updating GO beacons on WFD subelements change
72c12c1 EAPOL: Fix static analyzer warnings for pac_opaque_encr_key
3139270 bgscan: Add global bgscan configuration
efc58df eap_proxy: Re-read IMSI from proxy in Interworking functionality
Change-Id: I006abd3b52fbbd1a7b97059364c72ab0386d5f63
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 41ae8f1..27cbd44 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -570,14 +570,22 @@
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");
/*
@@ -4022,6 +4030,18 @@
}
+void dump_freq_array(struct wpa_supplicant *wpa_s, const char *title,
+ int *freq_array, unsigned int len)
+{
+ unsigned int i;
+
+ wpa_dbg(wpa_s, MSG_DEBUG, "Shared frequencies (len=%u): %s",
+ len, title);
+ for (i = 0; i < len; i++)
+ wpa_dbg(wpa_s, MSG_DEBUG, "freq[%u]: %d", i, freq_array[i]);
+}
+
+
/*
* Find the operating frequencies of any of the virtual interfaces that
* are using the same radio as the current interface.
@@ -4035,6 +4055,8 @@
int freq;
unsigned int idx = 0, i;
+ wpa_dbg(wpa_s, MSG_DEBUG,
+ "Determining shared radio frequencies (max len %u)", len);
os_memset(freq_array, 0, sizeof(int) * len);
/* First add the frequency of the local interface */
@@ -4052,14 +4074,18 @@
if (freq > 0 && idx < len &&
(idx == 0 || freq_array[0] != freq))
freq_array[idx++] = freq;
+ dump_freq_array(wpa_s, "No get_radio_name", freq_array, idx);
return idx;
}
rn = wpa_s->driver->get_radio_name(wpa_s->drv_priv);
- if (rn == NULL || rn[0] == '\0')
+ if (rn == NULL || rn[0] == '\0') {
+ dump_freq_array(wpa_s, "get_radio_name failed",
+ freq_array, idx);
return idx;
+ }
- for (ifs = wpa_s->global->ifaces, idx = 0; ifs && idx < len;
+ for (ifs = wpa_s->global->ifaces; ifs && idx < len;
ifs = ifs->next) {
if (wpa_s == ifs || !ifs->driver->get_radio_name)
continue;
@@ -4087,5 +4113,7 @@
if (i == idx)
freq_array[idx++] = freq;
}
+
+ dump_freq_array(wpa_s, "completed iteration", freq_array, idx);
return idx;
}