diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index 68607654b..1ffe05eb9 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -3019,6 +3019,7 @@ static const struct global_parse_data global_fields[] = { { INT(p2p_go_ht40), 0 }, { INT(p2p_disabled), 0 }, { INT(p2p_no_group_iface), 0 }, + { INT_RANGE(p2p_ignore_shared_freq, 0, 1), 0 }, #endif /* CONFIG_P2P */ { FUNC(country), CFG_CHANGED_COUNTRY }, { INT(bss_max_count), 0 }, diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h index 2e3e76bb6..03fe6fc70 100644 --- a/wpa_supplicant/config.h +++ b/wpa_supplicant/config.h @@ -571,6 +571,7 @@ struct wpa_config { int p2p_intra_bss; unsigned int num_p2p_pref_chan; struct p2p_channel *p2p_pref_chan; + int p2p_ignore_shared_freq; struct wpabuf *wps_vendor_ext_m1; diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 3a06406e9..afc0dfb5c 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -98,6 +98,10 @@ static void wpas_p2p_set_own_freq_preference(struct wpa_supplicant *wpa_s, { if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL) return; + if (freq > 0 && + (wpa_s->drv_flags & WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT) && + wpa_s->parent->conf->p2p_ignore_shared_freq) + freq = 0; p2p_set_own_freq_preference(wpa_s->global->p2p, freq); }