P2P: Optimize scan frequencies list when re-joining a persistent group

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@intel.com>
Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
Avraham Stern 2015-03-29 13:10:36 +03:00 committed by Jouni Malinen
parent 154a1d5f7f
commit 989e784601

View file

@ -5504,18 +5504,26 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
(freq > 0 && !freq_included(channels, freq))) (freq > 0 && !freq_included(channels, freq)))
freq = 0; freq = 0;
} }
} else { } else if (ssid->mode == WPAS_MODE_INFRA) {
freq = neg_freq; freq = neg_freq;
if (freq < 0 || if (freq <= 0 || !freq_included(channels, freq)) {
(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_included(channels, bss->freq))
freq = bss->freq;
else
freq = 0; freq = 0;
} }
if (ssid->mode == WPAS_MODE_INFRA)
return wpas_start_p2p_client(wpa_s, ssid, addr_allocated, freq); return wpas_start_p2p_client(wpa_s, ssid, addr_allocated, freq);
} else {
if (ssid->mode != WPAS_MODE_P2P_GO)
return -1; return -1;
}
if (wpas_p2p_init_go_params(wpa_s, &params, freq, ht40, vht, channels)) if (wpas_p2p_init_go_params(wpa_s, &params, freq, ht40, vht, channels))
return -1; return -1;