|
@@ -1606,20 +1606,21 @@ int p2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *ie,
|
|
|
|
|
|
|
|
|
static int p2p_assoc_req_ie_wlan_ap(struct p2p_data *p2p, const u8 *bssid,
|
|
|
- u8 *buf, size_t len)
|
|
|
+ u8 *buf, size_t len, struct wpabuf *p2p_ie)
|
|
|
{
|
|
|
struct wpabuf *tmp;
|
|
|
u8 *lpos;
|
|
|
size_t tmplen;
|
|
|
int res;
|
|
|
|
|
|
- if (!(p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED))
|
|
|
- return 0;
|
|
|
+ if (p2p_ie == NULL)
|
|
|
+ return 0; /* WLAN AP is not a P2P manager */
|
|
|
|
|
|
/*
|
|
|
* (Re)Association Request - P2P IE
|
|
|
* P2P Capability attribute (shall be present)
|
|
|
- * P2P Interface attribute (present if concurrent device)
|
|
|
+ * P2P Interface attribute (present if concurrent device and
|
|
|
+ * P2P Management is enabled)
|
|
|
*/
|
|
|
tmp = wpabuf_alloc(200);
|
|
|
if (tmp == NULL)
|
|
@@ -1627,7 +1628,8 @@ static int p2p_assoc_req_ie_wlan_ap(struct p2p_data *p2p, const u8 *bssid,
|
|
|
|
|
|
lpos = p2p_buf_add_ie_hdr(tmp);
|
|
|
p2p_buf_add_capability(tmp, p2p->dev_capab, 0);
|
|
|
- if (p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER)
|
|
|
+ if ((p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER) &&
|
|
|
+ (p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED))
|
|
|
p2p_buf_add_p2p_interface(tmp, p2p);
|
|
|
p2p_buf_update_ie_hdr(tmp, lpos);
|
|
|
|
|
@@ -1645,7 +1647,7 @@ static int p2p_assoc_req_ie_wlan_ap(struct p2p_data *p2p, const u8 *bssid,
|
|
|
|
|
|
|
|
|
int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf,
|
|
|
- size_t len, int p2p_group)
|
|
|
+ size_t len, int p2p_group, struct wpabuf *p2p_ie)
|
|
|
{
|
|
|
struct wpabuf *tmp;
|
|
|
u8 *lpos;
|
|
@@ -1654,7 +1656,7 @@ int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf,
|
|
|
int res;
|
|
|
|
|
|
if (!p2p_group)
|
|
|
- return p2p_assoc_req_ie_wlan_ap(p2p, bssid, buf, len);
|
|
|
+ return p2p_assoc_req_ie_wlan_ap(p2p, bssid, buf, len, p2p_ie);
|
|
|
|
|
|
/*
|
|
|
* (Re)Association Request - P2P IE
|