[PATCH 3/3] P2P: Optimize scan frequencies list when re-joining a persistent group
Ilan Peer
ilan.peer
Sun Mar 15 22:20:03 PDT 2015
From: Avraham Stern <avraham.stern at intel.com>
When starting a P2P client to re-join a persistent group
(P2P_GROUP_ADD persistent=<id>), it is possible that the P2P GO was
already found in previous scans. Try to get the P2P GO operating
frequency from the scan results list so wpa_supplicant will initially
scan only the P2P GO known operating frequency.
Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
wpa_supplicant/p2p_supplicant.c | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index bb61808..8acdbd2 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -5504,18 +5504,26 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
(freq > 0 && !freq_included(channels, freq)))
freq = 0;
}
- } else {
- freq = neg_freq;
- if (freq < 0 ||
- (freq > 0 && !freq_included(channels, freq)))
- freq = 0;
- }
+ } else if (ssid->mode == WPAS_MODE_INFRA) {
+ freq = wpas_p2p_select_go_freq(wpa_s, neg_freq);
+ if (freq <= 0 ||
+ (freq > 0 && !freq_included(channels, freq))) {
+ struct os_reltime now;
+ struct wpa_bss *bss =
+ wpa_bss_get_p2p_dev_addr(wpa_s, ssid->bssid);
+
+ os_get_reltime(&now);
+ if (bss &&
+ !os_reltime_expired(&now, &bss->last_update, 5))
+ freq = bss->freq;
+ else
+ freq = 0;
+ }
- if (ssid->mode == WPAS_MODE_INFRA)
return wpas_start_p2p_client(wpa_s, ssid, addr_allocated, freq);
-
- if (ssid->mode != WPAS_MODE_P2P_GO)
+ } else {
return -1;
+ }
if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, ht40, vht, channels))
return -1;
--
1.8.3.2
More information about the Hostap
mailing list