P2P: Allow requested device type to be specified with p2p_find
This allows filtering of P2P peers that reply to the device discovery Probe Request frames. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
d4c7a2b9e6
commit
2b384109f2
2 changed files with 17 additions and 3 deletions
|
@ -72,7 +72,8 @@ over the main control interface.
|
||||||
Device Discovery
|
Device Discovery
|
||||||
|
|
||||||
p2p_find [timeout in seconds] [type=<social|progressive>] \
|
p2p_find [timeout in seconds] [type=<social|progressive>] \
|
||||||
[dev_id=<addr>] [delay=<search delay in ms>]
|
[dev_id=<addr>] [dev_type=<device type>] \
|
||||||
|
[delay=<search delay in ms>]
|
||||||
|
|
||||||
The default behavior is to run a single full scan in the beginning and
|
The default behavior is to run a single full scan in the beginning and
|
||||||
then scan only social channels. type=social will scan only social
|
then scan only social channels. type=social will scan only social
|
||||||
|
@ -87,6 +88,10 @@ search for. The optional delay parameter can be used to request an extra
|
||||||
delay to be used between search iterations (e.g., to free up radio
|
delay to be used between search iterations (e.g., to free up radio
|
||||||
resources for concurrent operations).
|
resources for concurrent operations).
|
||||||
|
|
||||||
|
The optional dev_type option can be used to specify a single device type
|
||||||
|
(primary or secondary) to search for, e.g.,
|
||||||
|
"p2p_find dev_type=1-0050F204-1".
|
||||||
|
|
||||||
p2p_listen [timeout in seconds]
|
p2p_listen [timeout in seconds]
|
||||||
|
|
||||||
Start Listen-only state (become discoverable without searching for
|
Start Listen-only state (become discoverable without searching for
|
||||||
|
|
|
@ -3652,6 +3652,7 @@ static int p2p_ctrl_find(struct wpa_supplicant *wpa_s, char *cmd)
|
||||||
unsigned int timeout = atoi(cmd);
|
unsigned int timeout = atoi(cmd);
|
||||||
enum p2p_discovery_type type = P2P_FIND_START_WITH_FULL;
|
enum p2p_discovery_type type = P2P_FIND_START_WITH_FULL;
|
||||||
u8 dev_id[ETH_ALEN], *_dev_id = NULL;
|
u8 dev_id[ETH_ALEN], *_dev_id = NULL;
|
||||||
|
u8 dev_type[WPS_DEV_TYPE_LEN], *_dev_type = NULL;
|
||||||
char *pos;
|
char *pos;
|
||||||
unsigned int search_delay;
|
unsigned int search_delay;
|
||||||
|
|
||||||
|
@ -3668,6 +3669,14 @@ static int p2p_ctrl_find(struct wpa_supplicant *wpa_s, char *cmd)
|
||||||
_dev_id = dev_id;
|
_dev_id = dev_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pos = os_strstr(cmd, "dev_type=");
|
||||||
|
if (pos) {
|
||||||
|
pos += 9;
|
||||||
|
if (wps_dev_type_str2bin(pos, dev_type) < 0)
|
||||||
|
return -1;
|
||||||
|
_dev_type = dev_type;
|
||||||
|
}
|
||||||
|
|
||||||
pos = os_strstr(cmd, "delay=");
|
pos = os_strstr(cmd, "delay=");
|
||||||
if (pos) {
|
if (pos) {
|
||||||
pos += 6;
|
pos += 6;
|
||||||
|
@ -3675,8 +3684,8 @@ static int p2p_ctrl_find(struct wpa_supplicant *wpa_s, char *cmd)
|
||||||
} else
|
} else
|
||||||
search_delay = wpas_p2p_search_delay(wpa_s);
|
search_delay = wpas_p2p_search_delay(wpa_s);
|
||||||
|
|
||||||
return wpas_p2p_find(wpa_s, timeout, type, 0, NULL, _dev_id,
|
return wpas_p2p_find(wpa_s, timeout, type, _dev_type != NULL, _dev_type,
|
||||||
search_delay);
|
_dev_id, search_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue