]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Add 802.11ax support for P2P GO
authorPeng Xu <pxu@codeaurora.org>
Fri, 21 Dec 2018 18:20:28 +0000 (10:20 -0800)
committerJouni Malinen <j@w1.fi>
Sat, 12 Jan 2019 11:09:39 +0000 (13:09 +0200)
An optional parameter "he" is added to p2p_connect, p2p_group_add, and
p2p_invite to enable 11ax HE support. The new p2p_go_he=1 configuration
parameter can be used to request this to be enabled by default.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
12 files changed:
src/p2p/p2p.h
wpa_supplicant/README-P2P
wpa_supplicant/ap.c
wpa_supplicant/config.c
wpa_supplicant/config.h
wpa_supplicant/config_file.c
wpa_supplicant/config_ssid.h
wpa_supplicant/ctrl_iface.c
wpa_supplicant/dbus/dbus_new_handlers_p2p.c
wpa_supplicant/p2p_supplicant.c
wpa_supplicant/p2p_supplicant.h
wpa_supplicant/wpa_supplicant_i.h

index fac5ce05ae6e14042d104c3481d861d04770c206..dd2c25d34805eb8218d318334fbf65a72cf0aebe 100644 (file)
@@ -103,6 +103,11 @@ struct p2p_go_neg_results {
 
        unsigned int vht_center_freq2;
 
+       /**
+        * he - Indicates if IEEE 802.11ax HE is enabled
+        */
+       int he;
+
        /**
         * ssid - SSID of the group
         */
index 23ac7fa056a463d257c969044241871885785309..55a60a296ad71ffef0876a20f01a2e117affaca0 100644 (file)
@@ -150,7 +150,7 @@ join-a-group style PD instead of GO Negotiation style PD.
 
 p2p_connect <peer device address> <pbc|pin|PIN#|p2ps> [display|keypad|p2ps]
        [persistent|persistent=<network id>] [join|auth]
-       [go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [provdisc] [auto]
+       [go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [he] [provdisc] [auto]
        [ssid=<hexdump>]
 
 Start P2P group formation with a discovered P2P peer. This includes
@@ -262,7 +262,7 @@ Parameters definition:
     session_mac - Mandatory MAC address that owns/initiated the session
 
 p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>]
-       [ht40] [vht]
+       [ht40] [vht] [he]
 
 Set up a P2P group owner manually (i.e., without group owner
 negotiation with a specific peer). This is also known as autonomous
@@ -558,7 +558,7 @@ Remove all local services from internal SD query processing.
 Invitation
 
 p2p_invite [persistent=<network id>|group=<group ifname>] [peer=address]
-       [go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht]
+       [go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht] [he]
        [pref=<MHz>]
 
 Invite a peer to join a group (e.g., group=wlan1) or to reinvoke a
index c651ad83ce8d13b72b148d894d6424484c833c66..453c99dd512dfe61b05f06c82c725da83ea9a3c0 100644 (file)
@@ -334,6 +334,9 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
                        list[8] = -1;
                }
                conf->supported_rates = list;
+#ifdef CONFIG_IEEE80211AX
+               conf->ieee80211ax = ssid->he;
+#endif /* CONFIG_IEEE80211AX */
        }
 
        bss->isolate = !wpa_s->conf->p2p_intra_bss;
index bfca69ff7e482a50b93239a661ad69f872064bba..78f0e68f3baf6f35f458066b8824fdad9ca4daf9 100644 (file)
@@ -4760,6 +4760,7 @@ static const struct global_parse_data global_fields[] = {
        { INT_RANGE(p2p_optimize_listen_chan, 0, 1), 0 },
        { INT(p2p_go_ht40), 0 },
        { INT(p2p_go_vht), 0 },
+       { INT(p2p_go_he), 0 },
        { INT(p2p_disabled), 0 },
        { INT_RANGE(p2p_go_ctwindow, 0, 127), 0 },
        { INT(p2p_no_group_iface), 0 },
index cd7571f593291e0ca1d9e2ab972b6bafd45f9d70..2e8e057339b83f06483db1da8b99af72336ad60e 100644 (file)
@@ -1078,6 +1078,16 @@ struct wpa_config {
         */
        int p2p_go_vht;
 
+       /**
+        * p2p_go_he - Default mode for 11ax HE enable when operating as GO
+        *
+        * This will take effect for p2p_group_add, p2p_connect, and p2p_invite.
+        * Note that regulatory constraints and driver capabilities are
+        * consulted anyway, so setting it to 1 can't do real harm.
+        * By default: 0 (disabled)
+        */
+       int p2p_go_he;
+
        /**
         * p2p_go_ctwindow - CTWindow to use when operating as GO
         *
index 73fcf2c5acdcad4d57ebb2d48a19f46277073190..72252a29f0c39c9ad25def0ce6266e2961894ad3 100644 (file)
@@ -1261,6 +1261,8 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
                fprintf(f, "p2p_go_ht40=%d\n", config->p2p_go_ht40);
        if (config->p2p_go_vht)
                fprintf(f, "p2p_go_vht=%d\n", config->p2p_go_vht);
+       if (config->p2p_go_he)
+               fprintf(f, "p2p_go_he=%d\n", config->p2p_go_he);
        if (config->p2p_go_ctwindow != DEFAULT_P2P_GO_CTWINDOW)
                fprintf(f, "p2p_go_ctwindow=%d\n", config->p2p_go_ctwindow);
        if (config->p2p_disabled)
index 9abecc0ad0b154a9b95b34622f07a9fc546725d4..1b2b1f1a36f1556cb4772aaa87aa3b05cfe922aa 100644 (file)
@@ -519,6 +519,8 @@ struct wpa_ssid {
 
        int vht;
 
+       int he;
+
        int max_oper_chwidth;
 
        unsigned int vht_center_freq1;
index b4ab9088baf244eeaf7bc73698372307743c4822..9c4b3eaf2c871d6bd6d5468cd8c2ca31b51cb012 100644 (file)
@@ -5538,6 +5538,7 @@ static int p2p_ctrl_connect(struct wpa_supplicant *wpa_s, char *cmd,
        int ht40, vht, max_oper_chwidth, chwidth = 0, freq2 = 0;
        u8 _group_ssid[SSID_MAX_LEN], *group_ssid = NULL;
        size_t group_ssid_len = 0;
+       int he;
 
        if (!wpa_s->global->p2p_init_wpa_s)
                return -1;
@@ -5550,7 +5551,7 @@ static int p2p_ctrl_connect(struct wpa_supplicant *wpa_s, char *cmd,
        /* <addr> <"pbc" | "pin" | PIN> [label|display|keypad|p2ps]
         * [persistent|persistent=<network id>]
         * [join] [auth] [go_intent=<0..15>] [freq=<in MHz>] [provdisc]
-        * [ht40] [vht] [auto] [ssid=<hexdump>] */
+        * [ht40] [vht] [he] [auto] [ssid=<hexdump>] */
 
        if (hwaddr_aton(cmd, addr))
                return -1;
@@ -5581,6 +5582,7 @@ static int p2p_ctrl_connect(struct wpa_supplicant *wpa_s, char *cmd,
        vht = (os_strstr(cmd, " vht") != NULL) || wpa_s->conf->p2p_go_vht;
        ht40 = (os_strstr(cmd, " ht40") != NULL) || wpa_s->conf->p2p_go_ht40 ||
                vht;
+       he = (os_strstr(cmd, " he") != NULL) || wpa_s->conf->p2p_go_he;
 
        pos2 = os_strstr(pos, " go_intent=");
        if (pos2) {
@@ -5651,7 +5653,7 @@ static int p2p_ctrl_connect(struct wpa_supplicant *wpa_s, char *cmd,
        new_pin = wpas_p2p_connect(wpa_s, addr, pin, wps_method,
                                   persistent_group, automatic, join,
                                   auth, go_intent, freq, freq2, persistent_id,
-                                  pd, ht40, vht, max_oper_chwidth,
+                                  pd, ht40, vht, max_oper_chwidth, he,
                                   group_ssid, group_ssid_len);
        if (new_pin == -2) {
                os_memcpy(buf, "FAIL-CHANNEL-UNAVAILABLE\n", 25);
@@ -6207,7 +6209,7 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
        struct wpa_ssid *ssid;
        u8 *_peer = NULL, peer[ETH_ALEN];
        int freq = 0, pref_freq = 0;
-       int ht40, vht, max_oper_chwidth, chwidth = 0, freq2 = 0;
+       int ht40, vht, he, max_oper_chwidth, chwidth = 0, freq2 = 0;
 
        id = atoi(cmd);
        pos = os_strstr(cmd, " peer=");
@@ -6244,6 +6246,7 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
        vht = (os_strstr(cmd, " vht") != NULL) || wpa_s->conf->p2p_go_vht;
        ht40 = (os_strstr(cmd, " ht40") != NULL) || wpa_s->conf->p2p_go_ht40 ||
                vht;
+       he = (os_strstr(cmd, " he") != NULL) || wpa_s->conf->p2p_go_he;
 
        pos = os_strstr(cmd, "freq2=");
        if (pos)
@@ -6258,7 +6261,7 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
                return -1;
 
        return wpas_p2p_invite(wpa_s, _peer, ssid, NULL, freq, freq2, ht40, vht,
-                              max_oper_chwidth, pref_freq);
+                              max_oper_chwidth, pref_freq, he);
 }
 
 
@@ -6306,7 +6309,8 @@ static int p2p_ctrl_invite(struct wpa_supplicant *wpa_s, char *cmd)
 
 static int p2p_ctrl_group_add_persistent(struct wpa_supplicant *wpa_s,
                                         int id, int freq, int vht_center_freq2,
-                                        int ht40, int vht, int vht_chwidth)
+                                        int ht40, int vht, int vht_chwidth,
+                                        int he)
 {
        struct wpa_ssid *ssid;
 
@@ -6320,7 +6324,7 @@ static int p2p_ctrl_group_add_persistent(struct wpa_supplicant *wpa_s,
 
        return wpas_p2p_group_add_persistent(wpa_s, ssid, 0, freq,
                                             vht_center_freq2, 0, ht40, vht,
-                                            vht_chwidth, NULL, 0, 0);
+                                            vht_chwidth, he, NULL, 0, 0);
 }
 
 
@@ -6329,6 +6333,7 @@ static int p2p_ctrl_group_add(struct wpa_supplicant *wpa_s, char *cmd)
        int freq = 0, persistent = 0, group_id = -1;
        int vht = wpa_s->conf->p2p_go_vht;
        int ht40 = wpa_s->conf->p2p_go_ht40 || vht;
+       int he = wpa_s->conf->p2p_go_he;
        int max_oper_chwidth, chwidth = 0, freq2 = 0;
        char *token, *context = NULL;
 #ifdef CONFIG_ACS
@@ -6351,6 +6356,8 @@ static int p2p_ctrl_group_add(struct wpa_supplicant *wpa_s, char *cmd)
                } else if (os_strcmp(token, "vht") == 0) {
                        vht = 1;
                        ht40 = 1;
+               } else if (os_strcmp(token, "he") == 0) {
+                       he = 1;
                } else if (os_strcmp(token, "persistent") == 0) {
                        persistent = 1;
                } else {
@@ -6386,10 +6393,10 @@ static int p2p_ctrl_group_add(struct wpa_supplicant *wpa_s, char *cmd)
        if (group_id >= 0)
                return p2p_ctrl_group_add_persistent(wpa_s, group_id,
                                                     freq, freq2, ht40, vht,
-                                                    max_oper_chwidth);
+                                                    max_oper_chwidth, he);
 
        return wpas_p2p_group_add(wpa_s, persistent, freq, freq2, ht40, vht,
-                                 max_oper_chwidth);
+                                 max_oper_chwidth, he);
 }
 
 
index 137321f6b747d616f77d6eab77590542f4d03d45..d7457237deff824490edca59f812d30a62189206 100644 (file)
@@ -384,14 +384,14 @@ DBusMessage * wpas_dbus_handler_p2p_group_add(DBusMessage *message,
                        goto inv_args;
 
                if (wpas_p2p_group_add_persistent(wpa_s, ssid, 0, freq, 0, 0, 0,
-                                                 0, 0, NULL, 0, 0)) {
+                                                 0, 0, 0, NULL, 0, 0)) {
                        reply = wpas_dbus_error_unknown_error(
                                message,
                                "Failed to reinvoke a persistent group");
                        goto out;
                }
        } else if (wpas_p2p_group_add(wpa_s, persistent_group, freq, 0, 0, 0,
-                                     0))
+                                     0, 0))
                goto inv_args;
 
 out:
@@ -604,7 +604,8 @@ DBusMessage * wpas_dbus_handler_p2p_connect(DBusMessage *message,
 
        new_pin = wpas_p2p_connect(wpa_s, addr, pin, wps_method,
                                   persistent_group, 0, join, authorize_only,
-                                  go_intent, freq, 0, -1, 0, 0, 0, 0, NULL, 0);
+                                  go_intent, freq, 0, -1, 0, 0, 0, 0, 0,
+                                  NULL, 0);
 
        if (new_pin >= 0) {
                char npin[9];
@@ -761,7 +762,7 @@ DBusMessage * wpas_dbus_handler_p2p_invite(DBusMessage *message,
                        goto err;
 
                if (wpas_p2p_invite(wpa_s, peer_addr, ssid, NULL, 0, 0, 0, 0, 0,
-                                   0) < 0) {
+                                   0, 0) < 0) {
                        reply = wpas_dbus_error_unknown_error(
                                message,
                                "Failed to reinvoke a persistent group");
index b549103e81d381d01e2dad1325ebed11db4a577d..570c09b59d5055dd21bee927f402fc436e637b28 100644 (file)
@@ -1912,6 +1912,7 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s,
        ssid->vht = params->vht;
        ssid->max_oper_chwidth = params->max_oper_chwidth;
        ssid->vht_center_freq2 = params->vht_center_freq2;
+       ssid->he = params->he;
        ssid->ssid = os_zalloc(params->ssid_len + 1);
        if (ssid->ssid) {
                os_memcpy(ssid->ssid, params->ssid, params->ssid_len);
@@ -3048,7 +3049,7 @@ static void wpas_invitation_received(void *ctx, const u8 *sa, const u8 *bssid,
                                               MAC2STR(sa), s->id);
                        }
                        wpas_p2p_group_add_persistent(
-                               wpa_s, s, go, 0, op_freq, 0, 0, 0, 0, NULL,
+                               wpa_s, s, go, 0, op_freq, 0, 0, 0, 0, 0, NULL,
                                go ? P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0,
                                1);
                } else if (bssid) {
@@ -3274,6 +3275,7 @@ static void wpas_invitation_result(void *ctx, int status, const u8 *bssid,
                                      wpa_s->p2p_go_vht_center_freq2,
                                      wpa_s->p2p_go_ht40, wpa_s->p2p_go_vht,
                                      wpa_s->p2p_go_max_oper_chwidth,
+                                     wpa_s->p2p_go_he,
                                      channels,
                                      ssid->mode == WPAS_MODE_P2P_GO ?
                                      P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
@@ -4183,13 +4185,14 @@ static void wpas_p2ps_prov_complete(void *ctx, u8 status, const u8 *dev,
                        if (response_done && persistent_go) {
                                wpas_p2p_group_add_persistent(
                                        wpa_s, persistent_go,
-                                       0, 0, freq, 0, 0, 0, 0, NULL,
+                                       0, 0, freq, 0, 0, 0, 0, 0, NULL,
                                        persistent_go->mode ==
                                        WPAS_MODE_P2P_GO ?
                                        P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
                                        0, 0);
                        } else if (response_done) {
-                               wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
+                               wpas_p2p_group_add(wpa_s, 1, freq,
+                                                  0, 0, 0, 0, 0);
                        }
 
                        if (passwd_id == DEV_PW_P2PS_DEFAULT) {
@@ -4305,11 +4308,11 @@ static int wpas_prov_disc_resp_cb(void *ctx)
 
        if (persistent_go) {
                wpas_p2p_group_add_persistent(
-                       wpa_s, persistent_go, 0, 0, 0, 0, 0, 0, 0, NULL,
+                       wpa_s, persistent_go, 0, 0, 0, 0, 0, 0, 0, 0, NULL,
                        persistent_go->mode == WPAS_MODE_P2P_GO ?
                        P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0, 0);
        } else {
-               wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
+               wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0, 0);
        }
 
        return 1;
@@ -4832,6 +4835,7 @@ static void wpas_p2p_scan_res_join(struct wpa_supplicant *wpa_s,
                                         wpa_s->p2p_go_ht40,
                                         wpa_s->p2p_go_vht,
                                         wpa_s->p2p_go_max_oper_chwidth,
+                                        wpa_s->p2p_go_he,
                                         NULL, 0);
                        return;
                }
@@ -5380,7 +5384,7 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
                     int persistent_group, int auto_join, int join, int auth,
                     int go_intent, int freq, unsigned int vht_center_freq2,
                     int persistent_id, int pd, int ht40, int vht,
-                    unsigned int vht_chwidth, const u8 *group_ssid,
+                    unsigned int vht_chwidth, int he, const u8 *group_ssid,
                     size_t group_ssid_len)
 {
        int force_freq = 0, pref_freq = 0;
@@ -5425,6 +5429,7 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
        wpa_s->p2p_go_vht = !!vht;
        wpa_s->p2p_go_vht_center_freq2 = vht_center_freq2;
        wpa_s->p2p_go_max_oper_chwidth = vht_chwidth;
+       wpa_s->p2p_go_he = !!he;
 
        if (pin)
                os_strlcpy(wpa_s->p2p_pin, pin, sizeof(wpa_s->p2p_pin));
@@ -5848,7 +5853,7 @@ static int wpas_same_band(int freq1, int freq2)
 static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
                                   struct p2p_go_neg_results *params,
                                   int freq, int vht_center_freq2, int ht40,
-                                  int vht, int max_oper_chwidth,
+                                  int vht, int max_oper_chwidth, int he,
                                   const struct p2p_channels *channels)
 {
        struct wpa_used_freq_data *freqs;
@@ -5861,6 +5866,7 @@ static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
        params->role_go = 1;
        params->ht40 = ht40;
        params->vht = vht;
+       params->he = he;
        params->max_oper_chwidth = max_oper_chwidth;
        params->vht_center_freq2 = vht_center_freq2;
 
@@ -6217,7 +6223,7 @@ wpas_p2p_get_group_iface(struct wpa_supplicant *wpa_s, int addr_allocated,
  */
 int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
                       int freq, int vht_center_freq2, int ht40, int vht,
-                      int max_oper_chwidth)
+                      int max_oper_chwidth, int he)
 {
        struct p2p_go_neg_results params;
 
@@ -6238,7 +6244,7 @@ int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
        }
 
        if (wpas_p2p_init_go_params(wpa_s, &params, freq, vht_center_freq2,
-                                   ht40, vht, max_oper_chwidth, NULL))
+                                   ht40, vht, max_oper_chwidth, he, NULL))
                return -1;
 
        p2p_go_params(wpa_s->global->p2p, &params);
@@ -6317,7 +6323,7 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
                                  struct wpa_ssid *ssid, int addr_allocated,
                                  int force_freq, int neg_freq,
                                  int vht_center_freq2, int ht40,
-                                 int vht, int max_oper_chwidth,
+                                 int vht, int max_oper_chwidth, int he,
                                  const struct p2p_channels *channels,
                                  int connection_timeout, int force_scan)
 {
@@ -6393,7 +6399,7 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
        }
 
        if (wpas_p2p_init_go_params(wpa_s, &params, freq, vht_center_freq2,
-                                   ht40, vht, max_oper_chwidth, channels))
+                                   ht40, vht, max_oper_chwidth, he, channels))
                return -1;
 
        params.role_go = 1;
@@ -6945,7 +6951,7 @@ int wpas_p2p_reject(struct wpa_supplicant *wpa_s, const u8 *addr)
 int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
                    struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
                    int vht_center_freq2, int ht40, int vht, int max_chwidth,
-                   int pref_freq)
+                   int pref_freq, int he)
 {
        enum p2p_invite_role role;
        u8 *bssid = NULL;
@@ -6963,6 +6969,7 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
        wpa_s->p2p_persistent_go_freq = freq;
        wpa_s->p2p_go_ht40 = !!ht40;
        wpa_s->p2p_go_vht = !!vht;
+       wpa_s->p2p_go_he = !!he;
        wpa_s->p2p_go_max_oper_chwidth = max_chwidth;
        wpa_s->p2p_go_vht_center_freq2 = vht_center_freq2;
        if (ssid->mode == WPAS_MODE_P2P_GO) {
@@ -7985,7 +7992,8 @@ static int wpas_p2p_fallback_to_go_neg(struct wpa_supplicant *wpa_s,
                         wpa_s->p2p_pd_before_go_neg,
                         wpa_s->p2p_go_ht40,
                         wpa_s->p2p_go_vht,
-                        wpa_s->p2p_go_max_oper_chwidth, NULL, 0);
+                        wpa_s->p2p_go_max_oper_chwidth,
+                        wpa_s->p2p_go_he, NULL, 0);
        return ret;
 }
 
@@ -8521,6 +8529,7 @@ static int wpas_p2p_nfc_join_group(struct wpa_supplicant *wpa_s,
                                WPS_NFC, 0, 0, 1, 0, wpa_s->conf->p2p_go_intent,
                                params->go_freq, wpa_s->p2p_go_vht_center_freq2,
                                -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
+                               wpa_s->p2p_go_he,
                                params->go_ssid_len ? params->go_ssid : NULL,
                                params->go_ssid_len);
 }
@@ -8600,7 +8609,7 @@ static int wpas_p2p_nfc_init_go_neg(struct wpa_supplicant *wpa_s,
                                WPS_NFC, 0, 0, 0, 0, wpa_s->conf->p2p_go_intent,
                                forced_freq, wpa_s->p2p_go_vht_center_freq2,
                                -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
-                               NULL, 0);
+                               wpa_s->p2p_go_he, NULL, 0);
 }
 
 
@@ -8616,7 +8625,7 @@ static int wpas_p2p_nfc_resp_go_neg(struct wpa_supplicant *wpa_s,
                               WPS_NFC, 0, 0, 0, 1, wpa_s->conf->p2p_go_intent,
                               forced_freq, wpa_s->p2p_go_vht_center_freq2,
                               -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth,
-                              NULL, 0);
+                              wpa_s->p2p_go_he, NULL, 0);
        if (res)
                return res;
 
@@ -9001,7 +9010,7 @@ static int wpas_p2p_move_go_csa(struct wpa_supplicant *wpa_s)
         * TODO: This function may not always work correctly. For example,
         * when we have a running GO and a BSS on a DFS channel.
         */
-       if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, NULL)) {
+       if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, 0, NULL)) {
                wpa_dbg(wpa_s, MSG_DEBUG,
                        "P2P CSA: Failed to select new frequency for GO");
                return -1;
@@ -9113,7 +9122,7 @@ static void wpas_p2p_move_go_no_csa(struct wpa_supplicant *wpa_s)
        wpa_supplicant_ap_deinit(wpa_s);
 
        /* Reselect the GO frequency */
-       if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, NULL)) {
+       if (wpas_p2p_init_go_params(wpa_s, &params, 0, 0, 0, 0, 0, 0, NULL)) {
                wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Failed to reselect freq");
                wpas_p2p_group_delete(wpa_s,
                                      P2P_GROUP_REMOVAL_GO_LEAVE_CHANNEL);
index 63910d1c268ed2e815f08bf6a4f987b3b98f8a40..128dfb7679666aa6fc467dea1fabfea1251bc4e2 100644 (file)
@@ -37,18 +37,18 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
                     int persistent_group, int auto_join, int join, int auth,
                     int go_intent, int freq, unsigned int vht_center_freq2,
                     int persistent_id, int pd, int ht40, int vht,
-                    unsigned int vht_chwidth, const u8 *group_ssid,
+                    unsigned int vht_chwidth, int he, const u8 *group_ssid,
                     size_t group_ssid_len);
 int wpas_p2p_handle_frequency_conflicts(struct wpa_supplicant *wpa_s,
                                           int freq, struct wpa_ssid *ssid);
 int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
                       int freq, int vht_center_freq2, int ht40, int vht,
-                      int max_oper_chwidth);
+                      int max_oper_chwidth, int he);
 int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
                                  struct wpa_ssid *ssid, int addr_allocated,
                                  int force_freq, int neg_freq,
                                  int vht_center_freq2, int ht40,
-                                 int vht, int max_oper_chwidth,
+                                 int vht, int max_oper_chwidth, int he,
                                  const struct p2p_channels *channels,
                                  int connection_timeout, int force_scan);
 struct p2p_group * wpas_p2p_group_init(struct wpa_supplicant *wpa_s,
@@ -117,7 +117,7 @@ int wpas_p2p_reject(struct wpa_supplicant *wpa_s, const u8 *addr);
 int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
                    struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
                    int vht_center_freq2, int ht40, int vht,
-                   int max_oper_chwidth, int pref_freq);
+                   int max_oper_chwidth, int pref_freq, int he);
 int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
                          const u8 *peer_addr, const u8 *go_dev_addr);
 int wpas_p2p_presence_req(struct wpa_supplicant *wpa_s, u32 duration1,
index 2f2637ce7bea1512ee2f6f69adad87bf1b6977f3..ee581e75657f791ec1f0ee5d24cbb2125d01d45f 100644 (file)
@@ -918,6 +918,7 @@ struct wpa_supplicant {
        unsigned int p2p_pd_before_go_neg:1;
        unsigned int p2p_go_ht40:1;
        unsigned int p2p_go_vht:1;
+       unsigned int p2p_go_he:1;
        unsigned int user_initiated_pd:1;
        unsigned int p2p_go_group_formation_completed:1;
        unsigned int group_formation_reported:1;