P2P: Use P2P Device ID attribute if Device Info not available

The "BSS p2p_dev_addr=address" command uses p2p_parse_dev_addr() to
figure out the P2P Device Address of the GO from scan results. This used
to work only if the P2P IE was received from Probe Response frames since
only those include the P2P Device Info attribute. Make this work with
Beacon frames, too, by using P2P Device ID attribute if the P2P Device
Info attribute is not present.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2012-03-30 15:50:33 +03:00 committed by Jouni Malinen
parent 1f6c0ab872
commit 526ec4aee8

View file

@ -2116,6 +2116,7 @@ int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr)
{ {
struct wpabuf *p2p_ie; struct wpabuf *p2p_ie;
struct p2p_message msg; struct p2p_message msg;
int ret = -1;
p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len, p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len,
P2P_IE_VENDOR_TYPE); P2P_IE_VENDOR_TYPE);
@ -2127,14 +2128,16 @@ int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr)
return -1; return -1;
} }
if (msg.p2p_device_addr == NULL) { if (msg.p2p_device_addr) {
wpabuf_free(p2p_ie); os_memcpy(dev_addr, msg.p2p_device_addr, ETH_ALEN);
return -1; ret = 0;
} else if (msg.device_id) {
os_memcpy(dev_addr, msg.device_id, ETH_ALEN);
ret = 0;
} }
os_memcpy(dev_addr, msg.p2p_device_addr, ETH_ALEN);
wpabuf_free(p2p_ie); wpabuf_free(p2p_ie);
return 0; return ret;
} }