From aa532510a7b8c4da2d7d6e2c11dda5db840894e4 Mon Sep 17 00:00:00 2001 From: Dmitry Shmidt Date: Mon, 24 Sep 2012 10:35:31 -0700 Subject: wpa_supplicant: P2P-related fixes - Remove unused function warning in WPS-NFC case - P2P: Fix p2p_ctrl_invite_persistent to parse peer parameter - hostapd: Fix CONFIG_INTERWORKING=y build without CONFIG_HS20=y - hostapd: Fix WDS VLAN bridge handling - hostapd: Send EAPOL frames from the VO queue if WMM is active - P2P: Remove channel 14 from supported P2P channels - hostapd: Clear WLAN_STA_ASSOC_REQ_OK if sending the assoc response failed - hostapd: Add check for the wds sta flag before creating 4addr VLANs - nl80211: Use the monitor interface if socket tx status is not supported - wpa_supplicant: Set state to DISCONNECTED on AP creation errors - P2P: Fix p2p_group_idle in no-group-interface P2P client case - P2P: Fix PSK configuration for GO network - Print control interface commands in easier format - Add debug print for no enabled networks case - P2P: Add more debug prints for GO start routines - P2P: Fix pending sta scan processing for concurrent operation cases BUG: 6940646 Change-Id: I1b1c54a08c61ec4af2bfd2274afc93501004eea2 Signed-off-by: Dmitry Shmidt --- wpa_supplicant/p2p_supplicant.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'wpa_supplicant/p2p_supplicant.c') diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 903c94f..cf8f935 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -267,13 +267,12 @@ static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, if (ssid == NULL) { /* * The current SSID was not known, but there may still be a - * pending P2P group interface waiting for provisioning. + * pending P2P group interface waiting for provisioning or a + * P2P group that is trying to reconnect. */ ssid = wpa_s->conf->ssid; while (ssid) { - if (ssid->p2p_group && - (ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION || - (ssid->key_mgmt & WPA_KEY_MGMT_WPS))) + if (ssid->p2p_group) break; ssid = ssid->next; } @@ -873,12 +872,18 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s, { struct wpa_ssid *ssid; - if (wpas_copy_go_neg_results(wpa_s, params) < 0) + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Starting GO"); + if (wpas_copy_go_neg_results(wpa_s, params) < 0) { + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Could not copy GO Negotiation " + "results"); return; + } ssid = wpa_config_add_network(wpa_s->conf); - if (ssid == NULL) + if (ssid == NULL) { + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Could not add network for GO"); return; + } wpa_s->show_group_started = 0; @@ -900,6 +905,13 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s, ssid->proto = WPA_PROTO_RSN; ssid->pairwise_cipher = WPA_CIPHER_CCMP; ssid->passphrase = os_strdup(params->passphrase); + if (ssid->passphrase == NULL) { + wpa_msg(wpa_s, MSG_ERROR, "P2P: Failed to copy passphrase for " + "GO"); + wpa_config_remove_network(wpa_s->conf, ssid->id); + return; + } + wpa_config_update_psk(ssid); ssid->ap_max_inactivity = wpa_s->parent->conf->p2p_go_max_inactivity; wpa_s->ap_configured_cb = p2p_go_configured; @@ -908,6 +920,8 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s, wpa_s->connect_without_scan = ssid; wpa_s->reassociate = 1; wpa_s->disconnected = 0; + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Request scan (that will be skipped) to " + "start GO)"); wpa_supplicant_req_scan(wpa_s, 0, 0); } @@ -2517,7 +2531,6 @@ struct p2p_oper_class_map { static struct p2p_oper_class_map op_class[] = { { HOSTAPD_MODE_IEEE80211G, 81, 1, 13, 1, BW20 }, - { HOSTAPD_MODE_IEEE80211G, 82, 14, 14, 1, BW20 }, #if 0 /* Do not enable HT40 on 2 GHz for now */ { HOSTAPD_MODE_IEEE80211G, 83, 1, 9, 1, BW40PLUS }, { HOSTAPD_MODE_IEEE80211G, 84, 5, 13, 1, BW40MINUS }, @@ -3820,18 +3833,27 @@ wpas_p2p_get_group_iface(struct wpa_supplicant *wpa_s, int addr_allocated, { struct wpa_supplicant *group_wpa_s; - if (!wpas_p2p_create_iface(wpa_s)) + if (!wpas_p2p_create_iface(wpa_s)) { + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Use same interface for group " + "operations"); return wpa_s; + } if (wpas_p2p_add_group_interface(wpa_s, go ? WPA_IF_P2P_GO : - WPA_IF_P2P_CLIENT) < 0) + WPA_IF_P2P_CLIENT) < 0) { + wpa_msg(wpa_s, MSG_ERROR, "P2P: Failed to add group interface"); return NULL; + } group_wpa_s = wpas_p2p_init_group_interface(wpa_s, go); if (group_wpa_s == NULL) { + wpa_msg(wpa_s, MSG_ERROR, "P2P: Failed to initialize group " + "interface"); wpas_p2p_remove_pending_group_interface(wpa_s); return NULL; } + wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Use separate group interface %s", + group_wpa_s->ifname); return group_wpa_s; } -- cgit v1.1