P2PS: Re-factor wpas_p2p_get_go_group() and wpas_p2p_group_go_ssid()
Re-factor wpas_p2p_get_go_group() to: 1. Skip the dedicated P2P Device management interface if it is used. 2. Instead of iterating all the interface configured networks, only access the current_ssid pointer to check if the current interface is acting as a persistent P2P GO. To avoid code duplication, also re-factor wpas_p2p_group_go_ssid() to call wpas_p2p_get_go_group(). Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
8cc4b06f75
commit
8d5e73290f
1 changed files with 27 additions and 27 deletions
|
@ -545,27 +545,39 @@ static unsigned int p2p_group_go_member_count(struct wpa_supplicant *wpa_s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned int p2p_is_active_persistent_group(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
return !wpa_s->p2p_mgmt && wpa_s->current_ssid &&
|
||||||
|
!wpa_s->current_ssid->disabled &&
|
||||||
|
wpa_s->current_ssid->p2p_group &&
|
||||||
|
wpa_s->current_ssid->p2p_persistent_group;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned int p2p_is_active_persistent_go(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
return p2p_is_active_persistent_group(wpa_s) &&
|
||||||
|
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Find an interface for a P2P group where we are the GO */
|
/* Find an interface for a P2P group where we are the GO */
|
||||||
static struct wpa_supplicant *
|
static struct wpa_supplicant *
|
||||||
wpas_p2p_get_go_group(struct wpa_supplicant *wpa_s)
|
wpas_p2p_get_go_group(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
struct wpa_supplicant *save = NULL;
|
struct wpa_supplicant *save = NULL;
|
||||||
struct wpa_ssid *s;
|
|
||||||
|
|
||||||
if (!wpa_s)
|
if (!wpa_s)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (wpa_s = wpa_s->global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
for (wpa_s = wpa_s->global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
||||||
for (s = wpa_s->conf->ssid; s; s = s->next) {
|
if (!p2p_is_active_persistent_go(wpa_s))
|
||||||
if (s->disabled || !s->p2p_group ||
|
continue;
|
||||||
s->mode != WPAS_MODE_P2P_GO)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Prefer a group with connected clients */
|
/* Prefer a group with connected clients */
|
||||||
if (p2p_get_group_num_members(wpa_s->p2p_group))
|
if (p2p_get_group_num_members(wpa_s->p2p_group))
|
||||||
return wpa_s;
|
return wpa_s;
|
||||||
save = wpa_s;
|
save = wpa_s;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No group with connected clients, so pick the one without (if any) */
|
/* No group with connected clients, so pick the one without (if any) */
|
||||||
|
@ -577,25 +589,13 @@ wpas_p2p_get_go_group(struct wpa_supplicant *wpa_s)
|
||||||
static struct wpa_ssid * wpas_p2p_group_go_ssid(struct wpa_supplicant *wpa_s,
|
static struct wpa_ssid * wpas_p2p_group_go_ssid(struct wpa_supplicant *wpa_s,
|
||||||
u8 *bssid)
|
u8 *bssid)
|
||||||
{
|
{
|
||||||
struct wpa_ssid *s, *empty = NULL;
|
struct wpa_supplicant *go = wpas_p2p_get_go_group(wpa_s);
|
||||||
|
|
||||||
if (!wpa_s)
|
if (!go)
|
||||||
return 0;
|
return NULL;
|
||||||
|
|
||||||
for (wpa_s = wpa_s->global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
os_memcpy(bssid, go->own_addr, ETH_ALEN);
|
||||||
for (s = wpa_s->conf->ssid; s; s = s->next) {
|
return go->current_ssid;
|
||||||
if (s->disabled || !s->p2p_group ||
|
|
||||||
s->mode != WPAS_MODE_P2P_GO)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
os_memcpy(bssid, wpa_s->own_addr, ETH_ALEN);
|
|
||||||
if (p2p_get_group_num_members(wpa_s->p2p_group))
|
|
||||||
return s;
|
|
||||||
empty = s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue