P2P: Add option to force SSID/passphrase for GO Negotiation
An existing persistent group information can now be used to force GO Negotiation to use the previously used SSID/passphrase from a persistent group if we become a GO. This can be used as an alternative to inviting a new P2P peer to join the group (i.e., use GO Negotiation with GO intent 15 instead of starting an autonomous GO and using invitation), e.g., in case a GO Negotiation Request is received from a peer while we are not running as a GO. The persistent group to use for parameters is indicated with persistent=<network id> parameter to p2p_connect. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
0918c4bf3b
commit
23c84252a4
9 changed files with 101 additions and 21 deletions
|
@ -1172,7 +1172,8 @@ static void p2p_set_dev_persistent(struct p2p_device *dev,
|
|||
int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
|
||||
enum p2p_wps_method wps_method,
|
||||
int go_intent, const u8 *own_interface_addr,
|
||||
unsigned int force_freq, int persistent_group)
|
||||
unsigned int force_freq, int persistent_group,
|
||||
const u8 *force_ssid, size_t force_ssid_len)
|
||||
{
|
||||
struct p2p_device *dev;
|
||||
|
||||
|
@ -1186,7 +1187,6 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
|
|||
if (p2p_prepare_channel(p2p, force_freq) < 0)
|
||||
return -1;
|
||||
|
||||
p2p->ssid_set = 0;
|
||||
dev = p2p_get_device(p2p, peer_addr);
|
||||
if (dev == NULL || (dev->flags & P2P_DEV_PROBE_REQ_ONLY)) {
|
||||
wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG,
|
||||
|
@ -1219,6 +1219,15 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
|
|||
*/
|
||||
}
|
||||
|
||||
p2p->ssid_set = 0;
|
||||
if (force_ssid) {
|
||||
wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
|
||||
force_ssid, force_ssid_len);
|
||||
os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
|
||||
p2p->ssid_len = force_ssid_len;
|
||||
p2p->ssid_set = 1;
|
||||
}
|
||||
|
||||
dev->flags &= ~P2P_DEV_NOT_YET_READY;
|
||||
dev->flags &= ~P2P_DEV_USER_REJECTED;
|
||||
dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
|
||||
|
@ -1270,7 +1279,8 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
|
|||
int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
|
||||
enum p2p_wps_method wps_method,
|
||||
int go_intent, const u8 *own_interface_addr,
|
||||
unsigned int force_freq, int persistent_group)
|
||||
unsigned int force_freq, int persistent_group,
|
||||
const u8 *force_ssid, size_t force_ssid_len)
|
||||
{
|
||||
struct p2p_device *dev;
|
||||
|
||||
|
@ -1292,6 +1302,15 @@ int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
|
|||
return -1;
|
||||
}
|
||||
|
||||
p2p->ssid_set = 0;
|
||||
if (force_ssid) {
|
||||
wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
|
||||
force_ssid, force_ssid_len);
|
||||
os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
|
||||
p2p->ssid_len = force_ssid_len;
|
||||
p2p->ssid_set = 1;
|
||||
}
|
||||
|
||||
dev->flags &= ~P2P_DEV_NOT_YET_READY;
|
||||
dev->flags &= ~P2P_DEV_USER_REJECTED;
|
||||
dev->go_neg_req_sent = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue