P2P: Allow p2p_invite-persistent to specify channel for GO
The freq and ht40 parameters can now be used with the p2p_invite command when reinvoking a persistent group as the GO. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
55d834e172
commit
4d32c0c44d
6 changed files with 34 additions and 10 deletions
|
@ -125,7 +125,7 @@ join-a-group style PD instead of GO Negotiation style PD.
|
|||
|
||||
p2p_connect <peer device address> <pbc|pin|PIN#> [display|keypad]
|
||||
[persistent|persistent=<network id>] [join|auth]
|
||||
[go_intent=<0..15>] [freq=<in MHz>] [provdisc]
|
||||
[go_intent=<0..15>] [freq=<in MHz>] [ht40] [provdisc]
|
||||
|
||||
Start P2P group formation with a discovered P2P peer. This includes
|
||||
optional group owner negotiation, group interface setup, provisioning,
|
||||
|
@ -166,7 +166,7 @@ used prior to starting GO Negotiation as a workaround with some deployed
|
|||
P2P implementations that require this to allow the user to accept the
|
||||
connection.
|
||||
|
||||
p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>]
|
||||
p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>] [ht40]
|
||||
|
||||
Set up a P2P group owner manually (i.e., without group owner
|
||||
negotiation with a specific peer). This is also known as autonomous
|
||||
|
@ -346,7 +346,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]
|
||||
[go_dev_addr=address] [freq=<freq in MHz>] [ht40]
|
||||
|
||||
Invite a peer to join a group (e.g., group=wlan1) or to reinvoke a
|
||||
persistent group (e.g., persistent=4). If the peer device is the GO of
|
||||
|
@ -354,7 +354,8 @@ the persistent group, the peer parameter is not needed. Otherwise it is
|
|||
used to specify which device to invite. go_dev_addr parameter can be
|
||||
used to override the GO device address for Invitation Request should
|
||||
it be not known for some reason (this should not be needed in most
|
||||
cases).
|
||||
cases). When reinvoking a persistent group, the GO device can specify
|
||||
the frequency for the group with the freq parameter.
|
||||
|
||||
Group Operations
|
||||
|
||||
|
|
|
@ -3515,6 +3515,8 @@ static int p2p_ctrl_invite_persistent(struct wpa_supplicant *wpa_s, char *cmd)
|
|||
int id;
|
||||
struct wpa_ssid *ssid;
|
||||
u8 peer[ETH_ALEN];
|
||||
int freq = 0;
|
||||
int ht40;
|
||||
|
||||
id = atoi(cmd);
|
||||
pos = os_strstr(cmd, " peer=");
|
||||
|
@ -3531,7 +3533,18 @@ 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, pos ? peer : NULL, ssid, NULL, freq,
|
||||
ht40);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -630,7 +630,7 @@ DBusMessage * wpas_dbus_handler_p2p_invite(DBusMessage *message,
|
|||
if (ssid == NULL || ssid->disabled != 2)
|
||||
goto err;
|
||||
|
||||
if (wpas_p2p_invite(wpa_s, peer_addr, ssid, NULL) < 0) {
|
||||
if (wpas_p2p_invite(wpa_s, peer_addr, ssid, NULL, 0, 0) < 0) {
|
||||
reply = wpas_dbus_error_unknown_error(
|
||||
message,
|
||||
"Failed to reinvoke a persistent group");
|
||||
|
|
|
@ -2298,7 +2298,9 @@ static void wpas_invitation_result(void *ctx, int status, const u8 *bssid)
|
|||
}
|
||||
|
||||
wpas_p2p_group_add_persistent(wpa_s, ssid,
|
||||
ssid->mode == WPAS_MODE_P2P_GO, 0, 0);
|
||||
ssid->mode == WPAS_MODE_P2P_GO,
|
||||
wpa_s->p2p_persistent_go_freq,
|
||||
wpa_s->p2p_go_ht40);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4325,11 +4327,14 @@ int wpas_p2p_reject(struct wpa_supplicant *wpa_s, const u8 *addr)
|
|||
|
||||
/* Invite to reinvoke a persistent group */
|
||||
int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
||||
struct wpa_ssid *ssid, const u8 *go_dev_addr)
|
||||
struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
|
||||
int ht40)
|
||||
{
|
||||
enum p2p_invite_role role;
|
||||
u8 *bssid = NULL;
|
||||
|
||||
wpa_s->p2p_persistent_go_freq = freq;
|
||||
wpa_s->p2p_go_ht40 = !!ht40;
|
||||
if (ssid->mode == WPAS_MODE_P2P_GO) {
|
||||
role = P2P_INVITE_ROLE_GO;
|
||||
if (peer_addr == NULL) {
|
||||
|
@ -4363,7 +4368,7 @@ int wpas_p2p_invite(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
|
|||
return -1;
|
||||
|
||||
return p2p_invite(wpa_s->global->p2p, peer_addr, role, bssid,
|
||||
ssid->ssid, ssid->ssid_len, 0, go_dev_addr, 1);
|
||||
ssid->ssid, ssid->ssid_len, freq, go_dev_addr, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4377,6 +4382,9 @@ int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
|
|||
struct wpa_ssid *ssid;
|
||||
int persistent;
|
||||
|
||||
wpa_s->p2p_persistent_go_freq = 0;
|
||||
wpa_s->p2p_go_ht40 = 0;
|
||||
|
||||
for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
|
||||
if (os_strcmp(wpa_s->ifname, ifname) == 0)
|
||||
break;
|
||||
|
|
|
@ -104,7 +104,8 @@ int wpas_p2p_service_del_upnp(struct wpa_supplicant *wpa_s, u8 version,
|
|||
const char *service);
|
||||
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);
|
||||
struct wpa_ssid *ssid, const u8 *go_dev_addr, int freq,
|
||||
int ht40);
|
||||
int wpas_p2p_invite_group(struct wpa_supplicant *wpa_s, const char *ifname,
|
||||
const u8 *peer_addr, const u8 *go_dev_addr);
|
||||
void wpas_p2p_completed(struct wpa_supplicant *wpa_s);
|
||||
|
|
|
@ -539,6 +539,7 @@ struct wpa_supplicant {
|
|||
unsigned int p2p_fallback_to_go_neg:1;
|
||||
unsigned int p2p_pd_before_go_neg:1;
|
||||
unsigned int p2p_go_ht40:1;
|
||||
int p2p_persistent_go_freq;
|
||||
int p2p_persistent_id;
|
||||
int p2p_go_intent;
|
||||
int p2p_connect_freq;
|
||||
|
|
Loading…
Reference in a new issue