Commit 12b1cd9e authored by Jeff Johnson's avatar Jeff Johnson Committed by Irfan Sheriff
Browse files

Support conc_pref when use_p2p_group_interface=0

The original implementation of wpas_p2p_handle_frequency_conflicts()
only works correctly when P2P groups use a separate interface
(i.e. use_p2p_group_interface=1).  Update the implementation so
that it also works when the device interfaces is used
(i.e. use_p2p_group_interface=0).

Bug: 7290509
Change-Id: Icbc489125c5b7bd6e174d6aecd53555cdc9ad99d
parent 81931b8b
......@@ -5444,32 +5444,35 @@ int wpas_p2p_handle_frequency_conflicts(struct wpa_supplicant *wpa_s, int freq)
struct p2p_data *p2p = wpa_s->global->p2p;
for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
if((iface->p2p_group_interface) && (iface->current_ssid) &&
(iface->current_ssid->frequency != freq)) {
if (iface->p2p_group_interface == P2P_GROUP_INTERFACE_GO) {
/* Try to see whether we can move the GO. If it
* is not possible, remove the GO interface
*/
if(wpa_drv_switch_channel(iface, freq) == 0) {
wpa_printf(MSG_ERROR, "P2P: GO Moved to freq(%d)", freq);
iface->current_ssid->frequency = freq;
continue;
}
if ((iface->current_ssid) &&
(iface->current_ssid->frequency != freq) &&
((iface->p2p_group_interface) ||
(iface->current_ssid->p2p_group))) {
if ((iface->p2p_group_interface == P2P_GROUP_INTERFACE_GO) ||
(iface->current_ssid->mode == WPAS_MODE_P2P_GO)) {
/* Try to see whether we can move the GO. If it
* is not possible, remove the GO interface
*/
if (wpa_drv_switch_channel(iface, freq) == 0) {
wpa_printf(MSG_ERROR, "P2P: GO Moved to freq(%d)", freq);
iface->current_ssid->frequency = freq;
continue;
}
}
/* If GO cannot be moved or if the conflicting interface is a
* P2P Client, remove the interface depending up on the connection
* priority */
if(!wpas_is_p2p_prioritized(wpa_s)) {
if (!wpas_is_p2p_prioritized(wpa_s)) {
/* STA connection has priority over existing
* P2P connection. So remove the interface */
wpa_printf(MSG_DEBUG, "P2P: Removing P2P connection due to Single channel"
wpa_printf(MSG_DEBUG, "P2P: Removing P2P connection due to Single channel "
"concurrent mode frequency conflict");
wpas_p2p_group_delete(iface, P2P_GROUP_REMOVAL_FREQ_CONFLICT);
} else {
/* Existing connection has the priority. Disable the newly
* selected network and let the application know about it.
* selected network and let the application know about it.
*/
return -1;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment