|
@@ -1877,6 +1877,8 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s,
|
|
ssid->frequency = params->freq;
|
|
ssid->frequency = params->freq;
|
|
ssid->ht40 = params->ht40;
|
|
ssid->ht40 = params->ht40;
|
|
ssid->vht = params->vht;
|
|
ssid->vht = params->vht;
|
|
|
|
+ ssid->max_oper_chwidth = params->max_oper_chwidth;
|
|
|
|
+ ssid->vht_center_freq2 = params->vht_center_freq2;
|
|
ssid->ssid = os_zalloc(params->ssid_len + 1);
|
|
ssid->ssid = os_zalloc(params->ssid_len + 1);
|
|
if (ssid->ssid) {
|
|
if (ssid->ssid) {
|
|
os_memcpy(ssid->ssid, params->ssid, params->ssid_len);
|
|
os_memcpy(ssid->ssid, params->ssid, params->ssid_len);
|
|
@@ -2178,6 +2180,8 @@ static void wpas_go_neg_completed(void *ctx, struct p2p_go_neg_results *res)
|
|
res->ht40 = 1;
|
|
res->ht40 = 1;
|
|
if (wpa_s->p2p_go_vht)
|
|
if (wpa_s->p2p_go_vht)
|
|
res->vht = 1;
|
|
res->vht = 1;
|
|
|
|
+ res->max_oper_chwidth = wpa_s->p2p_go_max_oper_chwidth;
|
|
|
|
+ res->vht_center_freq2 = wpa_s->p2p_go_vht_center_freq2;
|
|
|
|
|
|
wpa_msg_global(wpa_s, MSG_INFO, P2P_EVENT_GO_NEG_SUCCESS "role=%s "
|
|
wpa_msg_global(wpa_s, MSG_INFO, P2P_EVENT_GO_NEG_SUCCESS "role=%s "
|
|
"freq=%d ht40=%d peer_dev=" MACSTR " peer_iface=" MACSTR
|
|
"freq=%d ht40=%d peer_dev=" MACSTR " peer_iface=" MACSTR
|
|
@@ -2966,7 +2970,7 @@ static void wpas_invitation_received(void *ctx, const u8 *sa, const u8 *bssid,
|
|
if (s) {
|
|
if (s) {
|
|
int go = s->mode == WPAS_MODE_P2P_GO;
|
|
int go = s->mode == WPAS_MODE_P2P_GO;
|
|
wpas_p2p_group_add_persistent(
|
|
wpas_p2p_group_add_persistent(
|
|
- wpa_s, s, go, 0, op_freq, 0, 0, NULL,
|
|
|
|
|
|
+ wpa_s, s, go, 0, op_freq, 0, 0, 0, 0, NULL,
|
|
go ? P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0,
|
|
go ? P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0,
|
|
1);
|
|
1);
|
|
} else if (bssid) {
|
|
} else if (bssid) {
|
|
@@ -3183,7 +3187,9 @@ static void wpas_invitation_result(void *ctx, int status, const u8 *bssid,
|
|
ssid->mode == WPAS_MODE_P2P_GO,
|
|
ssid->mode == WPAS_MODE_P2P_GO,
|
|
wpa_s->p2p_persistent_go_freq,
|
|
wpa_s->p2p_persistent_go_freq,
|
|
freq,
|
|
freq,
|
|
|
|
+ wpa_s->p2p_go_vht_center_freq2,
|
|
wpa_s->p2p_go_ht40, wpa_s->p2p_go_vht,
|
|
wpa_s->p2p_go_ht40, wpa_s->p2p_go_vht,
|
|
|
|
+ wpa_s->p2p_go_max_oper_chwidth,
|
|
channels,
|
|
channels,
|
|
ssid->mode == WPAS_MODE_P2P_GO ?
|
|
ssid->mode == WPAS_MODE_P2P_GO ?
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
|
|
@@ -4124,13 +4130,13 @@ static void wpas_p2ps_prov_complete(void *ctx, u8 status, const u8 *dev,
|
|
if (response_done && persistent_go) {
|
|
if (response_done && persistent_go) {
|
|
wpas_p2p_group_add_persistent(
|
|
wpas_p2p_group_add_persistent(
|
|
wpa_s, persistent_go,
|
|
wpa_s, persistent_go,
|
|
- 0, 0, freq, 0, 0, NULL,
|
|
|
|
|
|
+ 0, 0, freq, 0, 0, 0, 0, NULL,
|
|
persistent_go->mode ==
|
|
persistent_go->mode ==
|
|
WPAS_MODE_P2P_GO ?
|
|
WPAS_MODE_P2P_GO ?
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE :
|
|
0, 0);
|
|
0, 0);
|
|
} else if (response_done) {
|
|
} else if (response_done) {
|
|
- wpas_p2p_group_add(wpa_s, 1, freq, 0, 0);
|
|
|
|
|
|
+ wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
|
|
if (passwd_id == DEV_PW_P2PS_DEFAULT) {
|
|
if (passwd_id == DEV_PW_P2PS_DEFAULT) {
|
|
@@ -4234,11 +4240,11 @@ static int wpas_prov_disc_resp_cb(void *ctx)
|
|
|
|
|
|
if (persistent_go) {
|
|
if (persistent_go) {
|
|
wpas_p2p_group_add_persistent(
|
|
wpas_p2p_group_add_persistent(
|
|
- wpa_s, persistent_go, 0, 0, 0, 0, 0, NULL,
|
|
|
|
|
|
+ wpa_s, persistent_go, 0, 0, 0, 0, 0, 0, 0, NULL,
|
|
persistent_go->mode == WPAS_MODE_P2P_GO ?
|
|
persistent_go->mode == WPAS_MODE_P2P_GO ?
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0, 0);
|
|
P2P_MAX_INITIAL_CONN_WAIT_GO_REINVOKE : 0, 0);
|
|
} else {
|
|
} else {
|
|
- wpas_p2p_group_add(wpa_s, 1, freq, 0, 0);
|
|
|
|
|
|
+ wpas_p2p_group_add(wpa_s, 1, freq, 0, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
|
|
return 1;
|
|
return 1;
|
|
@@ -4756,10 +4762,12 @@ static void wpas_p2p_scan_res_join(struct wpa_supplicant *wpa_s,
|
|
wpa_s->p2p_persistent_group, 0, 0, 0,
|
|
wpa_s->p2p_persistent_group, 0, 0, 0,
|
|
wpa_s->p2p_go_intent,
|
|
wpa_s->p2p_go_intent,
|
|
wpa_s->p2p_connect_freq,
|
|
wpa_s->p2p_connect_freq,
|
|
|
|
+ wpa_s->p2p_go_vht_center_freq2,
|
|
wpa_s->p2p_persistent_id,
|
|
wpa_s->p2p_persistent_id,
|
|
wpa_s->p2p_pd_before_go_neg,
|
|
wpa_s->p2p_pd_before_go_neg,
|
|
wpa_s->p2p_go_ht40,
|
|
wpa_s->p2p_go_ht40,
|
|
- wpa_s->p2p_go_vht);
|
|
|
|
|
|
+ wpa_s->p2p_go_vht,
|
|
|
|
+ wpa_s->p2p_go_max_oper_chwidth);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5264,12 +5272,15 @@ exit_free:
|
|
* initiating Group Owner negotiation
|
|
* initiating Group Owner negotiation
|
|
* @go_intent: GO Intent or -1 to use default
|
|
* @go_intent: GO Intent or -1 to use default
|
|
* @freq: Frequency for the group or 0 for auto-selection
|
|
* @freq: Frequency for the group or 0 for auto-selection
|
|
|
|
+ * @freq2: Center frequency of segment 1 for the GO operating in VHT 80P80 mode
|
|
* @persistent_id: Persistent group credentials to use for forcing GO
|
|
* @persistent_id: Persistent group credentials to use for forcing GO
|
|
* parameters or -1 to generate new values (SSID/passphrase)
|
|
* parameters or -1 to generate new values (SSID/passphrase)
|
|
* @pd: Whether to send Provision Discovery prior to GO Negotiation as an
|
|
* @pd: Whether to send Provision Discovery prior to GO Negotiation as an
|
|
* interoperability workaround when initiating group formation
|
|
* interoperability workaround when initiating group formation
|
|
* @ht40: Start GO with 40 MHz channel width
|
|
* @ht40: Start GO with 40 MHz channel width
|
|
* @vht: Start GO with VHT support
|
|
* @vht: Start GO with VHT support
|
|
|
|
+ * @vht_chwidth: Channel width supported by GO operating with VHT support
|
|
|
|
+ * (VHT_CHANWIDTH_*).
|
|
* Returns: 0 or new PIN (if pin was %NULL) on success, -1 on unspecified
|
|
* Returns: 0 or new PIN (if pin was %NULL) on success, -1 on unspecified
|
|
* failure, -2 on failure due to channel not currently available,
|
|
* failure, -2 on failure due to channel not currently available,
|
|
* -3 if forced channel is not supported
|
|
* -3 if forced channel is not supported
|
|
@@ -5277,8 +5288,9 @@ exit_free:
|
|
int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|
int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|
const char *pin, enum p2p_wps_method wps_method,
|
|
const char *pin, enum p2p_wps_method wps_method,
|
|
int persistent_group, int auto_join, int join, int auth,
|
|
int persistent_group, int auto_join, int join, int auth,
|
|
- int go_intent, int freq, int persistent_id, int pd,
|
|
|
|
- int ht40, int vht)
|
|
|
|
|
|
+ int go_intent, int freq, unsigned int vht_center_freq2,
|
|
|
|
+ int persistent_id, int pd, int ht40, int vht,
|
|
|
|
+ unsigned int vht_chwidth)
|
|
{
|
|
{
|
|
int force_freq = 0, pref_freq = 0;
|
|
int force_freq = 0, pref_freq = 0;
|
|
int ret = 0, res;
|
|
int ret = 0, res;
|
|
@@ -5320,6 +5332,8 @@ int wpas_p2p_connect(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|
wpa_s->p2p_pd_before_go_neg = !!pd;
|
|
wpa_s->p2p_pd_before_go_neg = !!pd;
|
|
wpa_s->p2p_go_ht40 = !!ht40;
|
|
wpa_s->p2p_go_ht40 = !!ht40;
|
|
wpa_s->p2p_go_vht = !!vht;
|
|
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;
|
|
|
|
|
|
if (pin)
|
|
if (pin)
|
|
os_strlcpy(wpa_s->p2p_pin, pin, sizeof(wpa_s->p2p_pin));
|
|
os_strlcpy(wpa_s->p2p_pin, pin, sizeof(wpa_s->p2p_pin));
|
|
@@ -5718,7 +5732,8 @@ out:
|
|
|
|
|
|
static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
|
|
static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
|
|
struct p2p_go_neg_results *params,
|
|
struct p2p_go_neg_results *params,
|
|
- int freq, int ht40, int vht,
|
|
|
|
|
|
+ int freq, int vht_center_freq2, int ht40,
|
|
|
|
+ int vht, int max_oper_chwidth,
|
|
const struct p2p_channels *channels)
|
|
const struct p2p_channels *channels)
|
|
{
|
|
{
|
|
struct wpa_used_freq_data *freqs;
|
|
struct wpa_used_freq_data *freqs;
|
|
@@ -5730,6 +5745,8 @@ static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
|
|
params->role_go = 1;
|
|
params->role_go = 1;
|
|
params->ht40 = ht40;
|
|
params->ht40 = ht40;
|
|
params->vht = vht;
|
|
params->vht = vht;
|
|
|
|
+ params->max_oper_chwidth = max_oper_chwidth;
|
|
|
|
+ params->vht_center_freq2 = vht_center_freq2;
|
|
|
|
|
|
freqs = os_calloc(wpa_s->num_multichan_concurrent,
|
|
freqs = os_calloc(wpa_s->num_multichan_concurrent,
|
|
sizeof(struct wpa_used_freq_data));
|
|
sizeof(struct wpa_used_freq_data));
|
|
@@ -5964,15 +5981,18 @@ wpas_p2p_get_group_iface(struct wpa_supplicant *wpa_s, int addr_allocated,
|
|
* @wpa_s: Pointer to wpa_supplicant data from wpa_supplicant_add_iface()
|
|
* @wpa_s: Pointer to wpa_supplicant data from wpa_supplicant_add_iface()
|
|
* @persistent_group: Whether to create a persistent group
|
|
* @persistent_group: Whether to create a persistent group
|
|
* @freq: Frequency for the group or 0 to indicate no hardcoding
|
|
* @freq: Frequency for the group or 0 to indicate no hardcoding
|
|
|
|
+ * @vht_center_freq2: segment_1 center frequency for GO operating in VHT 80P80
|
|
* @ht40: Start GO with 40 MHz channel width
|
|
* @ht40: Start GO with 40 MHz channel width
|
|
* @vht: Start GO with VHT support
|
|
* @vht: Start GO with VHT support
|
|
|
|
+ * @vht_chwidth: channel bandwidth for GO operating with VHT support
|
|
* Returns: 0 on success, -1 on failure
|
|
* Returns: 0 on success, -1 on failure
|
|
*
|
|
*
|
|
* This function creates a new P2P group with the local end as the Group Owner,
|
|
* This function creates a new P2P group with the local end as the Group Owner,
|
|
* i.e., without using Group Owner Negotiation.
|
|
* i.e., without using Group Owner Negotiation.
|
|
*/
|
|
*/
|
|
int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
|
|
int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
|
|
- int freq, int ht40, int vht)
|
|
|
|
|
|
+ int freq, int vht_center_freq2, int ht40, int vht,
|
|
|
|
+ int max_oper_chwidth)
|
|
{
|
|
{
|
|
struct p2p_go_neg_results params;
|
|
struct p2p_go_neg_results params;
|
|
|
|
|
|
@@ -5990,7 +6010,8 @@ int wpas_p2p_group_add(struct wpa_supplicant *wpa_s, int persistent_group,
|
|
if (freq < 0)
|
|
if (freq < 0)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
- if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, ht40, vht, NULL))
|
|
|
|
|
|
+ if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, vht_center_freq2,
|
|
|
|
+ ht40, vht, max_oper_chwidth, NULL))
|
|
return -1;
|
|
return -1;
|
|
if (params.freq &&
|
|
if (params.freq &&
|
|
!p2p_supported_freq_go(wpa_s->global->p2p, params.freq)) {
|
|
!p2p_supported_freq_go(wpa_s->global->p2p, params.freq)) {
|
|
@@ -6080,8 +6101,10 @@ static int wpas_start_p2p_client(struct wpa_supplicant *wpa_s,
|
|
|
|
|
|
int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
|
|
int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
|
|
struct wpa_ssid *ssid, int addr_allocated,
|
|
struct wpa_ssid *ssid, int addr_allocated,
|
|
- int force_freq, int neg_freq, int ht40,
|
|
|
|
- int vht, const struct p2p_channels *channels,
|
|
|
|
|
|
+ int force_freq, int neg_freq,
|
|
|
|
+ int vht_center_freq2, int ht40,
|
|
|
|
+ int vht, int max_oper_chwidth,
|
|
|
|
+ const struct p2p_channels *channels,
|
|
int connection_timeout, int force_scan)
|
|
int connection_timeout, int force_scan)
|
|
{
|
|
{
|
|
struct p2p_go_neg_results params;
|
|
struct p2p_go_neg_results params;
|
|
@@ -6155,7 +6178,8 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
- if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, ht40, vht, channels))
|
|
|
|
|
|
+ if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, vht_center_freq2,
|
|
|
|
+ ht40, vht, max_oper_chwidth, channels))
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
params.role_go = 1;
|
|
params.role_go = 1;
|
|
@@ -6682,7 +6706,8 @@ int wpas_p2p_reject(struct wpa_supplicant *wpa_s, const u8 *addr)
|
|
/* Invite to reinvoke a persistent group */
|
|
/* Invite to reinvoke a persistent group */
|
|
int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_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,
|
|
struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
|
|
- int ht40, int vht, int pref_freq)
|
|
|
|
|
|
+ int vht_center_freq2, int ht40, int vht, int max_chwidth,
|
|
|
|
+ int pref_freq)
|
|
{
|
|
{
|
|
enum p2p_invite_role role;
|
|
enum p2p_invite_role role;
|
|
u8 *bssid = NULL;
|
|
u8 *bssid = NULL;
|
|
@@ -6699,6 +6724,9 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|
|
|
|
|
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;
|
|
|
|
+ wpa_s->p2p_go_vht = !!vht;
|
|
|
|
+ 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) {
|
|
if (ssid->mode == WPAS_MODE_P2P_GO) {
|
|
role = P2P_INVITE_ROLE_GO;
|
|
role = P2P_INVITE_ROLE_GO;
|
|
if (peer_addr == NULL) {
|
|
if (peer_addr == NULL) {
|
|
@@ -6771,6 +6799,8 @@ int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
|
|
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;
|
|
wpa_s->p2p_go_vht = 0;
|
|
wpa_s->p2p_go_vht = 0;
|
|
|
|
+ wpa_s->p2p_go_vht_center_freq2 = 0;
|
|
|
|
+ wpa_s->p2p_go_max_oper_chwidth = 0;
|
|
|
|
|
|
for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
|
for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
|
if (os_strcmp(wpa_s->ifname, ifname) == 0)
|
|
if (os_strcmp(wpa_s->ifname, ifname) == 0)
|
|
@@ -7701,10 +7731,12 @@ static int wpas_p2p_fallback_to_go_neg(struct wpa_supplicant *wpa_s,
|
|
wpas_p2p_connect(wpa_s, wpa_s->pending_join_dev_addr, wpa_s->p2p_pin,
|
|
wpas_p2p_connect(wpa_s, wpa_s->pending_join_dev_addr, wpa_s->p2p_pin,
|
|
wpa_s->p2p_wps_method, wpa_s->p2p_persistent_group, 0,
|
|
wpa_s->p2p_wps_method, wpa_s->p2p_persistent_group, 0,
|
|
0, 0, wpa_s->p2p_go_intent, wpa_s->p2p_connect_freq,
|
|
0, 0, wpa_s->p2p_go_intent, wpa_s->p2p_connect_freq,
|
|
|
|
+ wpa_s->p2p_go_vht_center_freq2,
|
|
wpa_s->p2p_persistent_id,
|
|
wpa_s->p2p_persistent_id,
|
|
wpa_s->p2p_pd_before_go_neg,
|
|
wpa_s->p2p_pd_before_go_neg,
|
|
wpa_s->p2p_go_ht40,
|
|
wpa_s->p2p_go_ht40,
|
|
- wpa_s->p2p_go_vht);
|
|
|
|
|
|
+ wpa_s->p2p_go_vht,
|
|
|
|
+ wpa_s->p2p_go_max_oper_chwidth);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -8238,7 +8270,8 @@ static int wpas_p2p_nfc_join_group(struct wpa_supplicant *wpa_s,
|
|
|
|
|
|
return wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
return wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
WPS_NFC, 0, 0, 1, 0, wpa_s->conf->p2p_go_intent,
|
|
WPS_NFC, 0, 0, 1, 0, wpa_s->conf->p2p_go_intent,
|
|
- params->go_freq, -1, 0, 1, 1);
|
|
|
|
|
|
+ params->go_freq, wpa_s->p2p_go_vht_center_freq2,
|
|
|
|
+ -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -8314,7 +8347,8 @@ static int wpas_p2p_nfc_init_go_neg(struct wpa_supplicant *wpa_s,
|
|
"connection handover");
|
|
"connection handover");
|
|
return wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
return wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
WPS_NFC, 0, 0, 0, 0, wpa_s->conf->p2p_go_intent,
|
|
WPS_NFC, 0, 0, 0, 0, wpa_s->conf->p2p_go_intent,
|
|
- forced_freq, -1, 0, 1, 1);
|
|
|
|
|
|
+ forced_freq, wpa_s->p2p_go_vht_center_freq2,
|
|
|
|
+ -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -8328,7 +8362,8 @@ static int wpas_p2p_nfc_resp_go_neg(struct wpa_supplicant *wpa_s,
|
|
"connection handover");
|
|
"connection handover");
|
|
res = wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
res = wpas_p2p_connect(wpa_s, params->peer->p2p_device_addr, NULL,
|
|
WPS_NFC, 0, 0, 0, 1, wpa_s->conf->p2p_go_intent,
|
|
WPS_NFC, 0, 0, 0, 1, wpa_s->conf->p2p_go_intent,
|
|
- forced_freq, -1, 0, 1, 1);
|
|
|
|
|
|
+ forced_freq, wpa_s->p2p_go_vht_center_freq2,
|
|
|
|
+ -1, 0, 1, 1, wpa_s->p2p_go_max_oper_chwidth);
|
|
if (res)
|
|
if (res)
|
|
return res;
|
|
return res;
|
|
|
|
|
|
@@ -8711,7 +8746,7 @@ static int wpas_p2p_move_go_csa(struct wpa_supplicant *wpa_s)
|
|
* TODO: This function may not always work correctly. For example,
|
|
* TODO: This function may not always work correctly. For example,
|
|
* when we have a running GO and a BSS on a DFS channel.
|
|
* when we have a running GO and a BSS on a DFS channel.
|
|
*/
|
|
*/
|
|
- if (wpas_p2p_init_go_params(wpa_s, ¶ms, 0, 0, 0, NULL)) {
|
|
|
|
|
|
+ if (wpas_p2p_init_go_params(wpa_s, ¶ms, 0, 0, 0, 0, 0, NULL)) {
|
|
wpa_dbg(wpa_s, MSG_DEBUG,
|
|
wpa_dbg(wpa_s, MSG_DEBUG,
|
|
"P2P CSA: Failed to select new frequency for GO");
|
|
"P2P CSA: Failed to select new frequency for GO");
|
|
return -1;
|
|
return -1;
|
|
@@ -8823,7 +8858,7 @@ static void wpas_p2p_move_go_no_csa(struct wpa_supplicant *wpa_s)
|
|
wpa_supplicant_ap_deinit(wpa_s);
|
|
wpa_supplicant_ap_deinit(wpa_s);
|
|
|
|
|
|
/* Reselect the GO frequency */
|
|
/* Reselect the GO frequency */
|
|
- if (wpas_p2p_init_go_params(wpa_s, ¶ms, 0, 0, 0, NULL)) {
|
|
|
|
|
|
+ if (wpas_p2p_init_go_params(wpa_s, ¶ms, 0, 0, 0, 0, 0, NULL)) {
|
|
wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Failed to reselect freq");
|
|
wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Failed to reselect freq");
|
|
wpas_p2p_group_delete(wpa_s,
|
|
wpas_p2p_group_delete(wpa_s,
|
|
P2P_GROUP_REMOVAL_GO_LEAVE_CHANNEL);
|
|
P2P_GROUP_REMOVAL_GO_LEAVE_CHANNEL);
|