P2P: Use shared function for setting up frequencies
p2p_connect() and p2p_invite() cases used more or less identical implementatin. Use a shared function to avoid duplicated code. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
79879f4ae8
commit
5de4b72177
1 changed files with 71 additions and 119 deletions
|
@ -3549,6 +3549,60 @@ static int wpas_p2p_join_start(struct wpa_supplicant *wpa_s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int wpas_p2p_setup_freqs(struct wpa_supplicant *wpa_s, int freq,
|
||||||
|
int *force_freq, int *pref_freq,
|
||||||
|
int *oper_freq)
|
||||||
|
{
|
||||||
|
if (freq > 0) {
|
||||||
|
if (!p2p_supported_freq(wpa_s->global->p2p, freq)) {
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: The forced channel "
|
||||||
|
"(%u MHz) is not supported for P2P uses",
|
||||||
|
freq);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*oper_freq > 0 && freq != *oper_freq &&
|
||||||
|
!(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, *oper_freq);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
||||||
|
"requested channel (%u MHz)", freq);
|
||||||
|
*force_freq = freq;
|
||||||
|
} else if (*oper_freq > 0 &&
|
||||||
|
!p2p_supported_freq(wpa_s->global->p2p, *oper_freq)) {
|
||||||
|
if (!(wpa_s->drv_flags &
|
||||||
|
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: Cannot start P2P group "
|
||||||
|
"while connected on non-P2P supported "
|
||||||
|
"channel (%u MHz)", *oper_freq);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: Current operating channel "
|
||||||
|
"(%u MHz) not available for P2P - try to use "
|
||||||
|
"another channel", *oper_freq);
|
||||||
|
*force_freq = 0;
|
||||||
|
} else if (*oper_freq > 0 &&
|
||||||
|
(wpa_s->drv_flags &
|
||||||
|
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: Trying to prefer the channel we "
|
||||||
|
"are already using (%u MHz) on another interface",
|
||||||
|
*oper_freq);
|
||||||
|
*pref_freq = *oper_freq;
|
||||||
|
} else if (*oper_freq > 0) {
|
||||||
|
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
||||||
|
"channel we are already using (%u MHz) on another "
|
||||||
|
"interface", *oper_freq);
|
||||||
|
*force_freq = *oper_freq;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_p2p_connect - Request P2P Group Formation to be started
|
* wpas_p2p_connect - Request P2P Group Formation to be started
|
||||||
* @wpa_s: Pointer to wpa_supplicant data from wpa_supplicant_add_iface()
|
* @wpa_s: Pointer to wpa_supplicant data from wpa_supplicant_add_iface()
|
||||||
|
@ -3579,7 +3633,7 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
||||||
{
|
{
|
||||||
int force_freq = 0, pref_freq = 0, oper_freq = 0;
|
int force_freq = 0, pref_freq = 0, oper_freq = 0;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
int ret = 0;
|
int ret = 0, res;
|
||||||
enum wpa_driver_if_type iftype;
|
enum wpa_driver_if_type iftype;
|
||||||
const u8 *if_addr;
|
const u8 *if_addr;
|
||||||
struct wpa_ssid *ssid = NULL;
|
struct wpa_ssid *ssid = NULL;
|
||||||
|
@ -3651,59 +3705,18 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wpa_s->current_ssid && wpa_drv_get_bssid(wpa_s, bssid) == 0 &&
|
if (wpa_s->current_ssid && wpa_drv_get_bssid(wpa_s, bssid) == 0 &&
|
||||||
wpa_s->assoc_freq)
|
wpa_s->assoc_freq) {
|
||||||
oper_freq = wpa_s->assoc_freq;
|
oper_freq = wpa_s->assoc_freq;
|
||||||
else {
|
} else {
|
||||||
oper_freq = wpa_drv_shared_freq(wpa_s);
|
oper_freq = wpa_drv_shared_freq(wpa_s);
|
||||||
if (oper_freq < 0)
|
if (oper_freq < 0)
|
||||||
oper_freq = 0;
|
oper_freq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freq > 0) {
|
res = wpas_p2p_setup_freqs(wpa_s, freq, &force_freq, &pref_freq,
|
||||||
if (!p2p_supported_freq(wpa_s->global->p2p, freq)) {
|
&oper_freq);
|
||||||
wpa_printf(MSG_DEBUG, "P2P: The forced channel "
|
if (res)
|
||||||
"(%u MHz) is not supported for P2P uses",
|
return res;
|
||||||
freq);
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oper_freq > 0 && freq != oper_freq &&
|
|
||||||
!(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, oper_freq);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
|
||||||
"requested channel (%u MHz)", freq);
|
|
||||||
force_freq = freq;
|
|
||||||
} else if (oper_freq > 0 &&
|
|
||||||
!p2p_supported_freq(wpa_s->global->p2p, oper_freq)) {
|
|
||||||
if (!(wpa_s->drv_flags &
|
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Cannot start P2P group "
|
|
||||||
"while connected on non-P2P supported "
|
|
||||||
"channel (%u MHz)", oper_freq);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Current operating channel "
|
|
||||||
"(%u MHz) not available for P2P - try to use "
|
|
||||||
"another channel", oper_freq);
|
|
||||||
force_freq = 0;
|
|
||||||
} else if (oper_freq > 0 &&
|
|
||||||
(wpa_s->drv_flags &
|
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to prefer the channel we "
|
|
||||||
"are already using (%u MHz) on another interface",
|
|
||||||
oper_freq);
|
|
||||||
pref_freq = oper_freq;
|
|
||||||
} else if (oper_freq > 0) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
|
||||||
"channel we are already using (%u MHz) on another "
|
|
||||||
"interface", oper_freq);
|
|
||||||
force_freq = oper_freq;
|
|
||||||
}
|
|
||||||
|
|
||||||
wpa_s->create_p2p_iface = wpas_p2p_create_iface(wpa_s);
|
wpa_s->create_p2p_iface = wpas_p2p_create_iface(wpa_s);
|
||||||
|
|
||||||
|
@ -4575,6 +4588,7 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
||||||
enum p2p_invite_role role;
|
enum p2p_invite_role role;
|
||||||
u8 *bssid = NULL, bssid_buf[ETH_ALEN];
|
u8 *bssid = NULL, bssid_buf[ETH_ALEN];
|
||||||
int force_freq = 0, pref_freq = 0, oper_freq = 0;
|
int force_freq = 0, pref_freq = 0, oper_freq = 0;
|
||||||
|
int res;
|
||||||
|
|
||||||
wpa_s->p2p_persistent_go_freq = freq;
|
wpa_s->p2p_persistent_go_freq = freq;
|
||||||
wpa_s->p2p_go_ht40 = !!ht40;
|
wpa_s->p2p_go_ht40 = !!ht40;
|
||||||
|
@ -4613,51 +4627,10 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
||||||
oper_freq = 0;
|
oper_freq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freq > 0) {
|
res = wpas_p2p_setup_freqs(wpa_s, freq, &force_freq, &pref_freq,
|
||||||
if (!p2p_supported_freq(wpa_s->global->p2p, freq)) {
|
&oper_freq);
|
||||||
wpa_printf(MSG_DEBUG, "P2P: The forced channel "
|
if (res)
|
||||||
"(%u MHz) is not supported for P2P uses",
|
return res;
|
||||||
freq);
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oper_freq > 0 && freq != oper_freq &&
|
|
||||||
!(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, oper_freq);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
|
||||||
"requested channel (%u MHz)", freq);
|
|
||||||
force_freq = freq;
|
|
||||||
} else if (oper_freq > 0 &&
|
|
||||||
!p2p_supported_freq(wpa_s->global->p2p, oper_freq)) {
|
|
||||||
if (!(wpa_s->drv_flags &
|
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Cannot start P2P group "
|
|
||||||
"while connected on non-P2P supported "
|
|
||||||
"channel (%u MHz)", oper_freq);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Current operating channel "
|
|
||||||
"(%u MHz) not available for P2P - try to use "
|
|
||||||
"another channel", oper_freq);
|
|
||||||
force_freq = 0;
|
|
||||||
} else if (oper_freq > 0 &&
|
|
||||||
(wpa_s->drv_flags &
|
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to prefer the channel we "
|
|
||||||
"are already using (%u MHz) on another interface",
|
|
||||||
oper_freq);
|
|
||||||
pref_freq = oper_freq;
|
|
||||||
} else if (oper_freq > 0) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
|
||||||
"channel we are already using (%u MHz) on another "
|
|
||||||
"interface", oper_freq);
|
|
||||||
force_freq = oper_freq;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_MGMT)
|
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_MGMT)
|
||||||
return wpa_drv_p2p_invite(wpa_s, peer_addr, role, bssid,
|
return wpa_drv_p2p_invite(wpa_s, peer_addr, role, bssid,
|
||||||
|
@ -4683,6 +4656,7 @@ int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
|
||||||
struct wpa_ssid *ssid;
|
struct wpa_ssid *ssid;
|
||||||
int persistent;
|
int persistent;
|
||||||
int force_freq = 0, oper_freq = 0, pref_freq = 0;
|
int force_freq = 0, oper_freq = 0, pref_freq = 0;
|
||||||
|
int res;
|
||||||
|
|
||||||
wpa_s->p2p_persistent_go_freq = 0;
|
wpa_s->p2p_persistent_go_freq = 0;
|
||||||
wpa_s->p2p_go_ht40 = 0;
|
wpa_s->p2p_go_ht40 = 0;
|
||||||
|
@ -4745,32 +4719,10 @@ int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
|
||||||
oper_freq = 0;
|
oper_freq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oper_freq > 0 &&
|
res = wpas_p2p_setup_freqs(wpa_s, 0, &force_freq, &pref_freq,
|
||||||
!p2p_supported_freq(wpa_s->global->p2p, oper_freq)) {
|
&oper_freq);
|
||||||
if (!(wpa_s->drv_flags &
|
if (res)
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
return res;
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Cannot start P2P group "
|
|
||||||
"while connected on non-P2P supported "
|
|
||||||
"channel (%u MHz)", oper_freq);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Current operating channel "
|
|
||||||
"(%u MHz) not available for P2P - try to use "
|
|
||||||
"another channel", oper_freq);
|
|
||||||
force_freq = 0;
|
|
||||||
} else if (oper_freq > 0 &&
|
|
||||||
(wpa_s->drv_flags &
|
|
||||||
WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to prefer the channel we "
|
|
||||||
"are already using (%u MHz) on another interface",
|
|
||||||
oper_freq);
|
|
||||||
pref_freq = oper_freq;
|
|
||||||
} else if (oper_freq > 0) {
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Trying to force us to use the "
|
|
||||||
"channel we are already using (%u MHz) on another "
|
|
||||||
"interface", oper_freq);
|
|
||||||
force_freq = oper_freq;
|
|
||||||
}
|
|
||||||
|
|
||||||
return p2p_invite(wpa_s->global->p2p, peer_addr, role, bssid,
|
return p2p_invite(wpa_s->global->p2p, peer_addr, role, bssid,
|
||||||
ssid->ssid, ssid->ssid_len, force_freq,
|
ssid->ssid, ssid->ssid_len, force_freq,
|
||||||
|
|
Loading…
Reference in a new issue