|
@@ -5842,12 +5842,30 @@ static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
|
|
|
|
|
|
/* try using the forced freq */
|
|
|
if (freq) {
|
|
|
- if (!wpas_p2p_supported_freq_go(wpa_s, channels, freq)) {
|
|
|
+ if (wpas_p2p_disallowed_freq(wpa_s->global, freq) ||
|
|
|
+ !freq_included(wpa_s, channels, freq)) {
|
|
|
wpa_printf(MSG_DEBUG,
|
|
|
- "P2P: Forced GO freq %d MHz not accepted",
|
|
|
+ "P2P: Forced GO freq %d MHz disallowed",
|
|
|
freq);
|
|
|
goto fail;
|
|
|
}
|
|
|
+ if (!p2p_supported_freq_go(wpa_s->global->p2p, freq)) {
|
|
|
+ if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD) &&
|
|
|
+ ieee80211_is_dfs(freq)) {
|
|
|
+ /*
|
|
|
+ * If freq is a DFS channel and DFS is offloaded
|
|
|
+ * to the driver, allow P2P GO to use it.
|
|
|
+ */
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "P2P: %s: The forced channel for GO (%u MHz) requires DFS and DFS is offloaded",
|
|
|
+ __func__, freq);
|
|
|
+ } else {
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "P2P: The forced channel for GO (%u MHz) is not supported for P2P uses",
|
|
|
+ freq);
|
|
|
+ goto fail;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
for (i = 0; i < num; i++) {
|
|
|
if (freqs[i].freq == freq) {
|
|
@@ -6086,24 +6104,7 @@ int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
|
|
|
if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, vht_center_freq2,
|
|
|
ht40, vht, max_oper_chwidth, NULL))
|
|
|
return -1;
|
|
|
- if (params.freq &&
|
|
|
- !p2p_supported_freq_go(wpa_s->global->p2p, params.freq)) {
|
|
|
- if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD) &&
|
|
|
- ieee80211_is_dfs(params.freq)) {
|
|
|
- /*
|
|
|
- * If freq is a DFS channel and DFS is offloaded to the
|
|
|
- * driver, allow P2P GO to use it.
|
|
|
- */
|
|
|
- wpa_printf(MSG_DEBUG,
|
|
|
- "P2P: %s: The forced channel for GO (%u MHz) is DFS, and DFS is offloaded to driver",
|
|
|
- __func__, params.freq);
|
|
|
- } else {
|
|
|
- wpa_printf(MSG_DEBUG,
|
|
|
- "P2P: The selected channel for GO (%u MHz) is not supported for P2P uses",
|
|
|
- params.freq);
|
|
|
- return -1;
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
p2p_go_params(wpa_s->global->p2p, ¶ms);
|
|
|
params.persistent_group = persistent_group;
|
|
|
|