P2P: Reject p2p_group_add if forced frequency is not acceptable

If the freq parameter is specified and we are already running legacy STA
on a different frequency with a driver that does not support
multi-channel concurrency, reject p2p_group_add. Same code already
exists in the path of P2P connection with go negotiation but is missing
for autonomous GO.

Signed-hostap: Neeraj Garg <neerajkg@broadcom.com>
This commit is contained in:
Neeraj Kumar Garg 2011-12-27 23:21:45 +02:00 committed by Jouni Malinen
parent 0d891981db
commit b8349523e4

View File

@ -3005,9 +3005,9 @@ int wpas_p2p_group_remove(struct wpa_supplicant *wpa_s, const char *ifname)
} }
static void wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s, static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
struct p2p_go_neg_results *params, struct p2p_go_neg_results *params,
int freq) int freq)
{ {
u8 bssid[ETH_ALEN]; u8 bssid[ETH_ALEN];
int res; int res;
@ -3068,7 +3068,16 @@ static void wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
wpa_printf(MSG_DEBUG, "P2P: Force GO on the channel we are " wpa_printf(MSG_DEBUG, "P2P: Force GO on the channel we are "
"already using on a shared interface"); "already using on a shared interface");
params->freq = res; params->freq = res;
} else if (res > 0 && freq != res &&
!(wpa_s->drv_flags &
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
wpa_printf(MSG_DEBUG, "P2P: Cannot start P2P group on %u MHz "
"while connected on another channel (%u MHz)",
freq, res);
return -1;
} }
return 0;
} }
@ -3163,7 +3172,8 @@ int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
return -1; return -1;
} }
wpas_p2p_init_go_params(wpa_s, &params, freq); if (wpas_p2p_init_go_params(wpa_s, &params, freq))
return -1;
p2p_go_params(wpa_s->global->p2p, &params); p2p_go_params(wpa_s->global->p2p, &params);
params.persistent_group = persistent_group; params.persistent_group = persistent_group;
@ -3246,7 +3256,8 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
if (ssid->mode != WPAS_MODE_P2P_GO) if (ssid->mode != WPAS_MODE_P2P_GO)
return -1; return -1;
wpas_p2p_init_go_params(wpa_s, &params, freq); if (wpas_p2p_init_go_params(wpa_s, &params, freq))
return -1;
params.role_go = 1; params.role_go = 1;
if (ssid->passphrase == NULL || if (ssid->passphrase == NULL ||