Cumulative patch from commit 00043740251716e83ca8a01b5b8a2bed1ed02db9
0004374 P2P: Prefer U-NII-3 over U-NII-1 during channel selection
1b665cb P2P: Fix channel preference use for MCC p2p_connect
5624ccf P2P: Optimize default case for own freq preference setting
d0f61a4 P2P: Fix p2p_ignore_shared_freq=1 when inviting a peer
21e491f P2P: Fix p2p_ignore_shared_freq=1 during invitation processing
Change-Id: I79cdeb935ff2eb14ba99b5fc3d364b9399e3f89f
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index e23e96f..b877cf5 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -183,10 +183,13 @@
{
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL)
return;
- if (freq > 0 && wpa_s->num_multichan_concurrent > 1 &&
- wpas_p2p_num_unused_channels(wpa_s) > 0 &&
- wpa_s->parent->conf->p2p_ignore_shared_freq)
+ if (wpa_s->parent->conf->p2p_ignore_shared_freq &&
+ freq > 0 && wpa_s->num_multichan_concurrent > 1 &&
+ wpas_p2p_num_unused_channels(wpa_s) > 0) {
+ wpa_printf(MSG_DEBUG, "P2P: Ignore own channel preference %d MHz due to p2p_ignore_shared_freq=1 configuration",
+ freq);
freq = 0;
+ }
p2p_set_own_freq_preference(wpa_s->global->p2p, freq);
}
@@ -2719,9 +2722,14 @@
/* Get one of the frequencies currently in use */
if (wpas_p2p_valid_oper_freqs(wpa_s, &res, 1) > 0) {
- wpa_printf(MSG_DEBUG, "P2P: Trying to force channel to match a channel already used by one of the interfaces");
- *force_freq = res;
+ wpa_printf(MSG_DEBUG, "P2P: Trying to prefer a channel already used by one of the interfaces");
wpas_p2p_set_own_freq_preference(wpa_s, res);
+
+ if (wpa_s->num_multichan_concurrent < 2 ||
+ wpas_p2p_num_unused_channels(wpa_s) < 1) {
+ wpa_printf(MSG_DEBUG, "P2P: No extra channels available - trying to force channel to match a channel already used by one of the interfaces");
+ *force_freq = res;
+ }
}
if (*force_freq > 0 && wpa_s->num_multichan_concurrent > 1 &&
@@ -4355,7 +4363,8 @@
go_intent == 15);
if (res)
return res;
- wpas_p2p_set_own_freq_preference(wpa_s, force_freq);
+ wpas_p2p_set_own_freq_preference(wpa_s,
+ force_freq ? force_freq : pref_freq);
wpa_s->create_p2p_iface = wpas_p2p_create_iface(wpa_s);
@@ -5327,6 +5336,7 @@
u8 *bssid = NULL;
int force_freq = 0;
int res;
+ int no_pref_freq_given = pref_freq == 0;
wpa_s->global->p2p_invite_group = NULL;
if (peer_addr)
@@ -5373,6 +5383,15 @@
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL)
return -1;
+ if (wpa_s->parent->conf->p2p_ignore_shared_freq &&
+ no_pref_freq_given && pref_freq > 0 &&
+ wpa_s->num_multichan_concurrent > 1 &&
+ wpas_p2p_num_unused_channels(wpa_s) > 0) {
+ wpa_printf(MSG_DEBUG, "P2P: Ignore own channel preference %d MHz for invitation due to p2p_ignore_shared_freq=1 configuration",
+ pref_freq);
+ pref_freq = 0;
+ }
+
return p2p_invite(wpa_s->global->p2p, peer_addr, role, bssid,
ssid->ssid, ssid->ssid_len, force_freq, go_dev_addr,
1, pref_freq);