OSDN Git Service

am 0cc49e8d: Add BOARD_WLAN_DEVICE=mrvl check for ANDROID_P2P support
[android-x86/external-wpa_supplicant_8.git] / wpa_supplicant / ctrl_iface.c
index 20a4086..bcf27be 100644 (file)
@@ -2792,27 +2792,28 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
 #endif /* CONFIG_WIFI_DISPLAY */
 
 #ifdef CONFIG_INTERWORKING
-       if (mask & WPA_BSS_MASK_INTERNETW) {
+       if ((mask & WPA_BSS_MASK_INTERNETW) && bss->anqp) {
+               struct wpa_bss_anqp *anqp = bss->anqp;
                pos = anqp_add_hex(pos, end, "anqp_venue_name",
-                                  bss->anqp_venue_name);
+                                  anqp->venue_name);
                pos = anqp_add_hex(pos, end, "anqp_network_auth_type",
-                                  bss->anqp_network_auth_type);
+                                  anqp->network_auth_type);
                pos = anqp_add_hex(pos, end, "anqp_roaming_consortium",
-                                  bss->anqp_roaming_consortium);
+                                  anqp->roaming_consortium);
                pos = anqp_add_hex(pos, end, "anqp_ip_addr_type_availability",
-                                  bss->anqp_ip_addr_type_availability);
+                                  anqp->ip_addr_type_availability);
                pos = anqp_add_hex(pos, end, "anqp_nai_realm",
-                                  bss->anqp_nai_realm);
-               pos = anqp_add_hex(pos, end, "anqp_3gpp", bss->anqp_3gpp);
+                                  anqp->nai_realm);
+               pos = anqp_add_hex(pos, end, "anqp_3gpp", anqp->anqp_3gpp);
                pos = anqp_add_hex(pos, end, "anqp_domain_name",
-                                  bss->anqp_domain_name);
+                                  anqp->domain_name);
 #ifdef CONFIG_HS20
                pos = anqp_add_hex(pos, end, "hs20_operator_friendly_name",
-                                  bss->hs20_operator_friendly_name);
+                                  anqp->hs20_operator_friendly_name);
                pos = anqp_add_hex(pos, end, "hs20_wan_metrics",
-                                  bss->hs20_wan_metrics);
+                                  anqp->hs20_wan_metrics);
                pos = anqp_add_hex(pos, end, "hs20_connection_capability",
-                                  bss->hs20_connection_capability);
+                                  anqp->hs20_connection_capability);
 #endif /* CONFIG_HS20 */
        }
 #endif /* CONFIG_INTERWORKING */
@@ -3546,7 +3547,9 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
        char *pos;
        int id;
        struct wpa_ssid *ssid;
-       u8 peer[ETH_ALEN];
+       u8 *_peer = NULL, peer[ETH_ALEN];
+       int freq = 0;
+       int ht40;
 
        id = atoi(cmd);
        pos = os_strstr(cmd, " peer=");
@@ -3554,6 +3557,7 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
                pos += 6;
                if (hwaddr_aton(pos, peer))
                        return -1;
+               _peer = peer;
        }
        ssid = wpa_config_get_network(wpa_s->conf, id);
        if (ssid == NULL || ssid->disabled != 2) {
@@ -3563,7 +3567,17 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
                return -1;
        }
 
-       return wpas_p2p_invite(wpa_s, pos ? peer : NULL, ssid, NULL);
+       pos = os_strstr(cmd, " freq=");
+       if (pos) {
+               pos += 6;
+               freq = atoi(pos);
+               if (freq <= 0)
+                       return -1;
+       }
+
+       ht40 = os_strstr(cmd, " ht40") != NULL;
+
+       return wpas_p2p_invite(wpa_s, _peer, ssid, NULL, freq, ht40);
 }
 
 
@@ -4368,6 +4382,7 @@ static int wpa_supplicant_driver_cmd(struct wpa_supplicant *wpa_s, char *cmd,
 }
 #endif
 
+
 char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                                         char *buf, size_t *resp_len)
 {
@@ -4386,6 +4401,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                        level = MSG_EXCESSIVE;
                wpa_hexdump_ascii(level, "RX ctrl_iface",
                                  (const u8 *) buf, os_strlen(buf));
+               wpa_dbg(wpa_s, level, "Control interface command '%s'", buf);
        }
 
        reply = os_malloc(reply_size);