P2P: Fix setting of P2P Client Discoverability bit
In the P2P specification v1.1, the P2P Client Discoverability bit is described in Table 12 "Device Capability Bitmap definition". The table says "Within a P2P Group Info attribute and a (Re)association request frame the P2P Client Discoverability field shall be set to 1 when the P2P Device supports P2P Client Discoverability, and is set to 0 otherwise. This field shall be reserved and set to 0 in all other frames or uses.". To match with this, filter out P2P Client Discoverability bit from frames where its use is reserved. Signed-hostap: Masashi Honma <masashi.honma@gmail.com>
This commit is contained in:
parent
1cebaabd80
commit
18485b5469
3 changed files with 15 additions and 6 deletions
|
@ -1815,7 +1815,8 @@ struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p)
|
||||||
|
|
||||||
/* P2P IE */
|
/* P2P IE */
|
||||||
len = p2p_buf_add_ie_hdr(buf);
|
len = p2p_buf_add_ie_hdr(buf);
|
||||||
p2p_buf_add_capability(buf, p2p->dev_capab, 0);
|
p2p_buf_add_capability(buf, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
|
||||||
if (p2p->ext_listen_interval)
|
if (p2p->ext_listen_interval)
|
||||||
p2p_buf_add_ext_listen_timing(buf, p2p->ext_listen_period,
|
p2p_buf_add_ext_listen_timing(buf, p2p->ext_listen_period,
|
||||||
p2p->ext_listen_interval);
|
p2p->ext_listen_interval);
|
||||||
|
@ -2662,7 +2663,8 @@ void p2p_scan_res_handled(struct p2p_data *p2p)
|
||||||
void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id)
|
void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id)
|
||||||
{
|
{
|
||||||
u8 *len = p2p_buf_add_ie_hdr(ies);
|
u8 *len = p2p_buf_add_ie_hdr(ies);
|
||||||
p2p_buf_add_capability(ies, p2p->dev_capab, 0);
|
p2p_buf_add_capability(ies, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
|
||||||
if (dev_id)
|
if (dev_id)
|
||||||
p2p_buf_add_device_id(ies, dev_id);
|
p2p_buf_add_device_id(ies, dev_id);
|
||||||
if (p2p->cfg->reg_class && p2p->cfg->channel)
|
if (p2p->cfg->reg_class && p2p->cfg->channel)
|
||||||
|
|
|
@ -155,7 +155,9 @@ static struct wpabuf * p2p_build_go_neg_req(struct p2p_data *p2p,
|
||||||
group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
|
group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
|
||||||
if (p2p->cfg->p2p_intra_bss)
|
if (p2p->cfg->p2p_intra_bss)
|
||||||
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
||||||
p2p_buf_add_capability(buf, p2p->dev_capab, group_capab);
|
p2p_buf_add_capability(buf, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
|
||||||
|
group_capab);
|
||||||
p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) |
|
p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) |
|
||||||
p2p->next_tie_breaker);
|
p2p->next_tie_breaker);
|
||||||
p2p->next_tie_breaker = !p2p->next_tie_breaker;
|
p2p->next_tie_breaker = !p2p->next_tie_breaker;
|
||||||
|
@ -268,7 +270,9 @@ static struct wpabuf * p2p_build_go_neg_resp(struct p2p_data *p2p,
|
||||||
if (p2p->cfg->p2p_intra_bss)
|
if (p2p->cfg->p2p_intra_bss)
|
||||||
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
||||||
}
|
}
|
||||||
p2p_buf_add_capability(buf, p2p->dev_capab, group_capab);
|
p2p_buf_add_capability(buf, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
|
||||||
|
group_capab);
|
||||||
p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) | tie_breaker);
|
p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) | tie_breaker);
|
||||||
p2p_buf_add_config_timeout(buf, 100, 20);
|
p2p_buf_add_config_timeout(buf, 100, 20);
|
||||||
if (peer && peer->go_state == REMOTE_GO) {
|
if (peer && peer->go_state == REMOTE_GO) {
|
||||||
|
@ -730,7 +734,9 @@ static struct wpabuf * p2p_build_go_neg_conf(struct p2p_data *p2p,
|
||||||
if (p2p->cfg->p2p_intra_bss)
|
if (p2p->cfg->p2p_intra_bss)
|
||||||
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
|
||||||
}
|
}
|
||||||
p2p_buf_add_capability(buf, p2p->dev_capab, group_capab);
|
p2p_buf_add_capability(buf, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
|
||||||
|
group_capab);
|
||||||
if (go || resp_chan == NULL)
|
if (go || resp_chan == NULL)
|
||||||
p2p_buf_add_operating_channel(buf, p2p->cfg->country,
|
p2p_buf_add_operating_channel(buf, p2p->cfg->country,
|
||||||
p2p->op_reg_class,
|
p2p->op_reg_class,
|
||||||
|
|
|
@ -54,7 +54,8 @@ static struct wpabuf * p2p_build_prov_disc_req(struct p2p_data *p2p,
|
||||||
p2p_buf_add_public_action_hdr(buf, P2P_PROV_DISC_REQ, dialog_token);
|
p2p_buf_add_public_action_hdr(buf, P2P_PROV_DISC_REQ, dialog_token);
|
||||||
|
|
||||||
len = p2p_buf_add_ie_hdr(buf);
|
len = p2p_buf_add_ie_hdr(buf);
|
||||||
p2p_buf_add_capability(buf, p2p->dev_capab, 0);
|
p2p_buf_add_capability(buf, p2p->dev_capab &
|
||||||
|
~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
|
||||||
p2p_buf_add_device_info(buf, p2p, NULL);
|
p2p_buf_add_device_info(buf, p2p, NULL);
|
||||||
if (go) {
|
if (go) {
|
||||||
p2p_buf_add_group_id(buf, go->info.p2p_device_addr,
|
p2p_buf_add_group_id(buf, go->info.p2p_device_addr,
|
||||||
|
|
Loading…
Reference in a new issue