]>
Commit | Line | Data |
---|---|---|
f6b25ca5 JM |
1 | wpa_supplicant and Wi-Fi P2P |
2 | ============================ | |
3 | ||
4 | This document describes how the Wi-Fi P2P implementation in | |
5 | wpa_supplicant can be configured and how an external component on the | |
6 | client (e.g., management GUI) is used to enable WPS enrollment and | |
7 | registrar registration. | |
8 | ||
9 | ||
10 | Introduction to Wi-Fi P2P | |
11 | ------------------------- | |
12 | ||
13 | TODO | |
14 | ||
15 | More information about Wi-Fi P2P is available from Wi-Fi Alliance: | |
16 | http://www.wi-fi.org/Wi-Fi_Direct.php | |
17 | ||
18 | ||
19 | wpa_supplicant implementation | |
20 | ----------------------------- | |
21 | ||
22 | TODO | |
23 | ||
24 | ||
25 | wpa_supplicant configuration | |
26 | ---------------------------- | |
27 | ||
28 | Wi-Fi P2P is an optional component that needs to be enabled in the | |
29 | wpa_supplicant build configuration (.config). Here is an example | |
30 | configuration that includes Wi-Fi P2P support and Linux nl80211 | |
31 | -based driver interface: | |
32 | ||
33 | CONFIG_DRIVER_NL80211=y | |
34 | CONFIG_CTRL_IFACE=y | |
35 | CONFIG_P2P=y | |
36 | CONFIG_AP=y | |
37 | CONFIG_WPS=y | |
38 | ||
39 | ||
40 | In run-time configuration file (wpa_supplicant.conf), some parameters | |
41 | for P2P may be set. In order to make the devices easier to recognize, | |
42 | device_name and device_type should be specified. For example, | |
43 | something like this should be included: | |
44 | ||
45 | ctrl_interface=/var/run/wpa_supplicant | |
46 | device_name=My P2P Device | |
47 | device_type=1-0050F204-1 | |
48 | ||
49 | ||
50 | wpa_cli | |
51 | ------- | |
52 | ||
53 | Actual Wi-Fi P2P operations are requested during runtime. These can be | |
54 | done for example using wpa_cli (which is described below) or a GUI | |
55 | like wpa_gui-qt4. | |
56 | ||
57 | ||
58 | wpa_cli starts in interactive mode if no command string is included on | |
59 | the command line. By default, it will select the first network interface | |
60 | that it can find (and that wpa_supplicant controls). If more than one | |
61 | interface is in use, it may be necessary to select one of the explicitly | |
62 | by adding -i argument on the command line (e.g., 'wpa_cli -i wlan1'). | |
63 | ||
64 | Most of the P2P operations are done on the main interface (e.g., the | |
65 | interface that is automatically added when the driver is loaded, e.g., | |
66 | wlan0). When using a separate virtual interface for group operations | |
67 | (e.g., wlan1), the control interface for that group interface may need | |
68 | to be used for some operations (mainly WPS activation in GO). This may | |
69 | change in the future so that all the needed operations could be done | |
70 | over the main control interface. | |
71 | ||
72 | Device Discovery | |
73 | ||
37448ede | 74 | p2p_find [timeout in seconds] [type=<social|progressive>] \ |
2b384109 | 75 | [dev_id=<addr>] [dev_type=<device type>] \ |
fa9f381f | 76 | [delay=<search delay in ms>] [seek=<service name>] [freq=<MHz>] |
f6b25ca5 JM |
77 | |
78 | The default behavior is to run a single full scan in the beginning and | |
79 | then scan only social channels. type=social will scan only social | |
80 | channels, i.e., it skips the initial full scan. type=progressive is | |
81 | like the default behavior, but it will scan through all the channels | |
82 | progressively one channel at the time in the Search state rounds. This | |
83 | will help in finding new groups or groups missed during the initial | |
fa9f381f DN |
84 | full scan. When the type parameter is not included (i.e., full scan), the |
85 | optional freq parameter can be used to override the first scan to use only | |
86 | the specified channel after which only social channels are scanned. | |
f6b25ca5 | 87 | |
37448ede JM |
88 | The optional dev_id option can be used to specify a single P2P peer to |
89 | search for. The optional delay parameter can be used to request an extra | |
90 | delay to be used between search iterations (e.g., to free up radio | |
91 | resources for concurrent operations). | |
92 | ||
2b384109 JM |
93 | The optional dev_type option can be used to specify a single device type |
94 | (primary or secondary) to search for, e.g., | |
95 | "p2p_find dev_type=1-0050F204-1". | |
96 | ||
f92446fb RR |
97 | |
98 | With one or more seek arguments, the command sends Probe Request frames | |
99 | for a P2PS service. For example, | |
100 | p2p_find 5 dev_id=11:22:33:44:55:66 seek=alt.example.chat seek=alt.example.video | |
101 | ||
102 | Parameters description: | |
103 | Timeout - Optional ASCII base-10-encoded u16. If missing, request will not | |
104 | time out and must be canceled manually | |
105 | dev_id - Optional to request responses from a single known remote device | |
106 | Service Name - Mandatory UTF-8 string for ASP seeks | |
107 | Service name must match the remote service being advertised exactly | |
108 | (no prefix matching). | |
109 | Service name may be empty, in which case all ASP services will be | |
110 | returned, and may be filtered with p2p_serv_disc_req settings, and | |
111 | p2p_serv_asp_resp results. | |
112 | Multiple service names may be requested, but if it exceeds internal | |
113 | limit, it will automatically revert to requesting all ASP services. | |
114 | ||
f6b25ca5 JM |
115 | p2p_listen [timeout in seconds] |
116 | ||
117 | Start Listen-only state (become discoverable without searching for | |
118 | other devices). Optional parameter can be used to specify the duration | |
119 | for the Listen operation in seconds. This command may not be of that | |
120 | much use during normal operations and is mainly designed for | |
121 | testing. It can also be used to keep the device discoverable without | |
122 | having to maintain a group. | |
123 | ||
124 | p2p_stop_find | |
125 | ||
126 | Stop ongoing P2P device discovery or other operation (connect, listen | |
127 | mode). | |
128 | ||
129 | p2p_flush | |
130 | ||
131 | Flush P2P peer table and state. | |
132 | ||
133 | Group Formation | |
134 | ||
0918c4bf | 135 | p2p_prov_disc <peer device address> <display|keypad|pbc> [join|auto] |
f6b25ca5 JM |
136 | |
137 | Send P2P provision discovery request to the specified peer. The | |
138 | parameters for this command are the P2P device address of the peer and | |
139 | the desired configuration method. For example, "p2p_prov_disc | |
140 | 02:01:02:03:04:05 display" would request the peer to display a PIN for | |
141 | us and "p2p_prov_disc 02:01:02:03:04:05 keypad" would request the peer | |
142 | to enter a PIN that we display. | |
143 | ||
8c5f7309 JJ |
144 | The optional "join" parameter can be used to indicate that this command |
145 | is requesting an already running GO to prepare for a new client. This is | |
0918c4bf JM |
146 | mainly used with "display" to request it to display a PIN. The "auto" |
147 | parameter can be used to request wpa_supplicant to automatically figure | |
148 | out whether the peer device is operating as a GO and if so, use | |
149 | join-a-group style PD instead of GO Negotiation style PD. | |
8c5f7309 | 150 | |
f92446fb | 151 | p2p_connect <peer device address> <pbc|pin|PIN#|p2ps> [display|keypad|p2ps] |
23c84252 | 152 | [persistent|persistent=<network id>] [join|auth] |
5a3319ab | 153 | [go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [he] [provdisc] [auto] |
8edd9f10 | 154 | [ssid=<hexdump>] |
f6b25ca5 JM |
155 | |
156 | Start P2P group formation with a discovered P2P peer. This includes | |
157 | optional group owner negotiation, group interface setup, provisioning, | |
158 | and establishing data connection. | |
159 | ||
160 | The <pbc|pin|PIN#> parameter specifies the WPS provisioning | |
161 | method. "pbc" string starts pushbutton method, "pin" string start PIN | |
162 | method using an automatically generated PIN (which will be returned as | |
163 | the command return code), PIN# means that a pre-selected PIN can be | |
61ff2c80 JM |
164 | used (e.g., 12345670). [display|keypad] is used with PIN method |
165 | to specify which PIN is used (display=dynamically generated random PIN | |
166 | from local display, keypad=PIN entered from peer display). "persistent" | |
23c84252 JM |
167 | parameter can be used to request a persistent group to be formed. The |
168 | "persistent=<network id>" alternative can be used to pre-populate | |
169 | SSID/passphrase configuration based on a previously used persistent | |
170 | group where this device was the GO. The previously used parameters will | |
171 | then be used if the local end becomes the GO in GO Negotiation (which | |
172 | can be forced with go_intent=15). | |
f6b25ca5 JM |
173 | |
174 | "join" indicates that this is a command to join an existing group as a | |
175 | client. It skips the GO Negotiation part. This will send a Provision | |
176 | Discovery Request message to the target GO before associating for WPS | |
177 | provisioning. | |
178 | ||
179 | "auth" indicates that the WPS parameters are authorized for the peer | |
180 | device without actually starting GO Negotiation (i.e., the peer is | |
181 | expected to initiate GO Negotiation). This is mainly for testing | |
182 | purposes. | |
183 | ||
184 | "go_intent" can be used to override the default GO Intent for this GO | |
185 | Negotiation. | |
186 | ||
187 | "freq" can be used to set a forced operating channel (e.g., freq=2412 | |
188 | to select 2.4 GHz channel 1). | |
189 | ||
3bc462cb JM |
190 | "provdisc" can be used to request a Provision Discovery exchange to be |
191 | used prior to starting GO Negotiation as a workaround with some deployed | |
192 | P2P implementations that require this to allow the user to accept the | |
193 | connection. | |
194 | ||
5b74e086 JM |
195 | "auto" can be used to request wpa_supplicant to automatically figure |
196 | out whether the peer device is operating as a GO and if so, use | |
197 | join-a-group operation rather than GO Negotiation. | |
198 | ||
8edd9f10 JM |
199 | "ssid=<hexdump>" can be used to specify the Group SSID for join |
200 | operations. This allows the P2P Client interface to filter scan results | |
201 | based on SSID to avoid selecting an incorrect BSS entry in case the same | |
202 | P2P Device or Interface address have been used in multiple groups | |
203 | recently. | |
204 | ||
f92446fb RR |
205 | P2PS attribute changes to p2p_connect command: |
206 | ||
207 | P2PS supports two WPS provisioning methods namely PIN method and P2PS default. | |
4194fee5 NC |
208 | The remaining parameters hold same role as in legacy P2P. In case of P2PS |
209 | default config method "p2ps" keyword is added in p2p_connect command. | |
f92446fb RR |
210 | |
211 | For example: | |
212 | p2p_connect 02:0a:f5:85:11:00 12345670 p2ps persistent join | |
213 | (WPS Method = P2PS default) | |
214 | ||
215 | p2p_connect 02:0a:f5:85:11:00 45629034 keypad persistent | |
216 | (WPS Method = PIN) | |
217 | ||
218 | p2p_asp_provision <peer MAC address> <adv_id=peer adv id> | |
219 | <adv_mac=peer MAC address> [role=2|4|1] <session=session id> | |
220 | <session_mac=initiator mac address> | |
221 | [info='service info'] <method=Default|keypad|Display> | |
222 | ||
223 | This command starts provision discovery with the P2PS enabled peer device. | |
224 | ||
225 | For example, | |
226 | p2p_asp_provision 00:11:22:33:44:55 adv_id=4d6fc7 adv_mac=00:55:44:33:22:11 role=1 session=12ab34 session_mac=00:11:22:33:44:55 info='name=john' method=1000 | |
227 | ||
228 | Parameter description: | |
229 | MAC address - Mandatory | |
230 | adv_id - Mandatory remote Advertising ID of service connection is being | |
231 | established for | |
232 | adv_mac - Mandatory MAC address that owns/registered the service | |
233 | role - Optional | |
234 | 2 (group client only) or 4 (group owner only) | |
235 | if not present (or 1) role is negotiated by the two peers. | |
236 | session - Mandatory Session ID of the first session to be established | |
237 | session_mac - Mandatory MAC address that owns/initiated the session | |
238 | method - Optional method to request for provisioning (1000 - P2PS Default, | |
239 | 100 - Keypad(PIN), 8 - Display(PIN)) | |
240 | info - Optional UTF-8 string. Hint for service to indicate possible usage | |
241 | parameters - Escape single quote & backslash: | |
242 | with a backslash 0x27 == ' == \', and 0x5c == \ == \\ | |
243 | ||
244 | p2p_asp_provision_resp <peer mac address> <adv_id= local adv id> | |
245 | <adv_mac=local MAC address> <role=1|2|4> <status=0> | |
246 | <session=session id> <session_mac=peer MAC address> | |
247 | ||
248 | This command sends a provision discovery response from responder side. | |
249 | ||
250 | For example, | |
251 | p2p_asp_provision_resp 00:55:44:33:22:11 adv_id=4d6fc7 adv_mac=00:55:44:33:22:11 role=1 status=0 session=12ab34 session_mac=00:11:22:33:44:55 | |
252 | ||
253 | Parameters definition: | |
254 | MAC address - Mandatory | |
255 | adv_id - Mandatory local Advertising ID of service connection is being | |
256 | established for | |
257 | adv_mac - Mandatory MAC address that owns/registered the service | |
258 | role - Optional 2 (group client only) or 4 (group owner only) | |
259 | if not present (or 1) role is negotiated by the two peers. | |
260 | status - Mandatory Acceptance/Rejection code of Provisioning | |
261 | session - Mandatory Session ID of the first session to be established | |
262 | session_mac - Mandatory MAC address that owns/initiated the session | |
263 | ||
20ea1ca4 | 264 | p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>] |
5a3319ab | 265 | [ht40] [vht] [he] |
f6b25ca5 JM |
266 | |
267 | Set up a P2P group owner manually (i.e., without group owner | |
268 | negotiation with a specific peer). This is also known as autonomous | |
269 | GO. Optional persistent=<network id> can be used to specify restart of | |
270 | a persistent group. Optional freq=<freq in MHz> can be used to force | |
271 | the GO to be started on a specific frequency. Special freq=2 or freq=5 | |
272 | options can be used to request the best 2.4 GHz or 5 GHz band channel | |
273 | to be selected automatically. | |
274 | ||
275 | p2p_reject <peer device address> | |
276 | ||
277 | Reject connection attempt from a peer (specified with a device | |
278 | address). This is a mechanism to reject a pending GO Negotiation with | |
279 | a peer and request to automatically block any further connection or | |
280 | discovery of the peer. | |
281 | ||
282 | p2p_group_remove <group interface> | |
283 | ||
284 | Terminate a P2P group. If a new virtual network interface was used for | |
285 | the group, it will also be removed. The network interface name of the | |
286 | group interface is used as a parameter for this command. | |
287 | ||
288 | p2p_cancel | |
289 | ||
058da39c | 290 | Cancel an ongoing P2P group formation and joining-a-group related |
5d7b1a3c | 291 | operation. This operation unauthorizes the specific peer device (if any |
058da39c JM |
292 | had been authorized to start group formation), stops P2P find (if in |
293 | progress), stops pending operations for join-a-group, and removes the | |
294 | P2P group interface (if one was used) that is in the WPS provisioning | |
295 | step. If the WPS provisioning step has been completed, the group is not | |
296 | terminated. | |
f6b25ca5 | 297 | |
eac8dab8 JM |
298 | p2p_remove_client <peer's P2P Device Address|iface=<interface address>> |
299 | ||
300 | This command can be used to remove the specified client from all groups | |
301 | (operating and persistent) from the local GO. Note that the peer device | |
302 | can rejoin the group if it is in possession of a valid key. See p2p_set | |
303 | per_sta_psk command below for more details on how the peer can be | |
304 | removed securely. | |
305 | ||
f6b25ca5 JM |
306 | Service Discovery |
307 | ||
f92446fb RR |
308 | p2p_service_add asp <auto accept> <adv id> <status 0/1> <Config Methods> |
309 | <Service name> [Service Information] [Response Info] | |
310 | ||
311 | This command can be used to search for a P2PS service which includes | |
312 | Play, Send, Display, and Print service. The parameters for this command | |
313 | are "asp" to identify the command as P2PS one, auto accept value, | |
314 | advertisement id which uniquely identifies the service requests, state | |
315 | of the service whether the service is available or not, config methods | |
316 | which can be either P2PS method or PIN method, service name followed by | |
317 | two optional parameters service information, and response info. | |
318 | ||
319 | For example, | |
320 | p2p_service_add asp 1 4d6fc7 0 1108 alt.example.chat svc_info='name=john' rsp_info='enter PIN 1234' | |
321 | ||
322 | Parameters definition: | |
323 | asp - Mandatory for ASP service registration | |
324 | auto accept - Mandatory ASCII hex-encoded boolean (0 == no auto-accept, | |
325 | 1 == auto-accept ANY role, 2 == auto-accept CLIENT role, | |
326 | 4 == auto-accept GO role) | |
327 | Advertisement ID - Mandatory non-zero ASCII hex-encoded u32 | |
328 | (Must be unique/not yet exist in svc db) | |
329 | State - Mandatory ASCII hex-encoded u8 (0 -- Svc not available, | |
330 | 1 -- Svc available, 2-0xff Application defined) | |
331 | Config Methods - Mandatory ASCII hex-encoded u16 (bitmask of WSC config | |
332 | methods) | |
333 | Service Name - Mandatory UTF-8 string | |
334 | Service Information - Optional UTF-8 string | |
335 | Escape single quote & backslash with a backslash: | |
336 | 0x27 == ' == \', and 0x5c == \ == \\ | |
337 | Session response information - Optional (used only if auto accept is TRUE) | |
338 | UTF-8 string | |
339 | Escape single quote & backslash with a backslash: | |
340 | 0x27 == ' == \', and 0x5c == \ == \\ | |
341 | ||
342 | p2p_service_rep asp <auto accept> <adv id> <status 0/1> <Config Methods> | |
343 | <Service name> [Service Information] [Response Info] | |
344 | ||
345 | This command can be used to replace the existing service request | |
346 | attributes from the initiator side. The replacement is only allowed if | |
347 | the advertisement id issued in the command matches with any one entry in | |
348 | the list of existing SD queries. If advertisement id doesn't match the | |
349 | command returns a failure. | |
350 | ||
351 | For example, | |
352 | p2p_service_rep asp 1 4d6fc7 1 1108 alt.example.chat svc_info='name=john' rsp_info='enter PIN 1234' | |
353 | ||
354 | Parameters definition: | |
355 | asp - Mandatory for ASP service registration | |
356 | auto accept - Mandatory ASCII hex-encoded boolean (1 == true, 0 == false) | |
357 | Advertisement ID - Mandatory non-zero ASCII hex-encoded u32 | |
358 | (Must already exist in svc db) | |
359 | State - Mandatory ASCII hex-encoded u8 (can be used to indicate svc | |
360 | available or not available for instance) | |
361 | Config Methods - Mandatory ASCII hex-encoded u16 (bitmask of WSC config | |
362 | methods) | |
363 | Service Name - Mandatory UTF-8 string (Must match existing string in svc db) | |
364 | Service Information - Optional UTF-8 string | |
365 | Escape single quote & backslash with a backslash: | |
366 | 0x27 == ' == \', and 0x5c == \ == \\ | |
367 | Session response information - Optional (used only if auto accept is TRUE) | |
368 | UTF-8 string | |
369 | Escape single quote & backslash with a backslash: | |
370 | 0x27 == ' == \', and 0x5c == \ == \\ | |
371 | ||
f6b25ca5 JM |
372 | p2p_serv_disc_req |
373 | ||
374 | Schedule a P2P service discovery request. The parameters for this | |
375 | command are the device address of the peer device (or 00:00:00:00:00:00 | |
376 | for wildcard query that is sent to every discovered P2P peer that | |
377 | supports service discovery) and P2P Service Query TLV(s) as hexdump. For | |
378 | example, | |
379 | ||
380 | p2p_serv_disc_req 00:00:00:00:00:00 02000001 | |
381 | ||
382 | schedules a request for listing all available services of all service | |
383 | discovery protocols and requests this to be sent to all discovered | |
384 | peers (note: this can result in long response frames). The pending | |
385 | requests are sent during device discovery (see p2p_find). | |
386 | ||
f667e031 JJ |
387 | There can be multiple pending peer device specific queries (each will be |
388 | sent in sequence whenever the peer is found). | |
f6b25ca5 JM |
389 | |
390 | This command returns an identifier for the pending query (e.g., | |
391 | "1f77628") that can be used to cancel the request. Directed requests | |
392 | will be automatically removed when the specified peer has replied to | |
393 | it. | |
394 | ||
9aadb877 JM |
395 | Service Query TLV has following format: |
396 | Length (2 octets, little endian) - length of following data | |
397 | Service Protocol Type (1 octet) - see the table below | |
398 | Service Transaction ID (1 octet) - nonzero identifier for the TLV | |
399 | Query Data (Length - 2 octets of data) - service protocol specific data | |
400 | ||
401 | Service Protocol Types: | |
402 | 0 = All service protocols | |
403 | 1 = Bonjour | |
404 | 2 = UPnP | |
405 | 3 = WS-Discovery | |
406 | 4 = Wi-Fi Display | |
407 | ||
f6b25ca5 JM |
408 | For UPnP, an alternative command format can be used to specify a |
409 | single query TLV (i.e., a service discovery for a specific UPnP | |
410 | service): | |
411 | ||
412 | p2p_serv_disc_req 00:00:00:00:00:00 upnp <version hex> <ST: from M-SEARCH> | |
413 | ||
414 | For example: | |
415 | ||
416 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:device:InternetGatewayDevice:1 | |
417 | ||
418 | Additional examples for queries: | |
419 | ||
420 | # list of all Bonjour services | |
421 | p2p_serv_disc_req 00:00:00:00:00:00 02000101 | |
422 | ||
423 | # list of all UPnP services | |
424 | p2p_serv_disc_req 00:00:00:00:00:00 02000201 | |
425 | ||
426 | # list of all WS-Discovery services | |
427 | p2p_serv_disc_req 00:00:00:00:00:00 02000301 | |
428 | ||
429 | # list of all Bonjour and UPnP services | |
430 | p2p_serv_disc_req 00:00:00:00:00:00 0200010102000202 | |
431 | ||
432 | # Apple File Sharing over TCP | |
433 | p2p_serv_disc_req 00:00:00:00:00:00 130001010b5f6166706f766572746370c00c000c01 | |
434 | ||
435 | # Bonjour SSTH (supported service type hash) | |
436 | p2p_serv_disc_req 00:00:00:00:00:00 05000101000000 | |
437 | ||
438 | # UPnP examples | |
439 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 ssdp:all | |
440 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 upnp:rootdevice | |
441 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:service:ContentDirectory:2 | |
442 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 uuid:6859dede-8574-59ab-9332-123456789012 | |
443 | p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:device:InternetGatewayDevice:1 | |
444 | ||
347d6a5b JM |
445 | # Wi-Fi Display examples |
446 | # format: wifi-display <list of roles> <list of subelements> | |
447 | p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source] 2,3,4,5 | |
448 | p2p_serv_disc_req 02:01:02:03:04:05 wifi-display [pri-sink] 3 | |
449 | p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [sec-source] 2 | |
450 | p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source+sink] 2,3,4,5 | |
451 | p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source][pri-sink] 2,3,4,5 | |
452 | ||
f92446fb RR |
453 | p2p_serv_disc_req <Unicast|Broadcast mac address> asp <Transaction ID> |
454 | <Service Name> [Service Information] | |
455 | ||
456 | The command can be used for service discovery for P2PS enabled devices. | |
457 | ||
458 | For example: p2p_serv_disc_req 00:00:00:00:00:00 asp a1 alt.example 'john' | |
459 | ||
460 | Parameters definition: | |
461 | MAC address - Mandatory Existing | |
462 | asp - Mandatory for ASP queries | |
463 | Transaction ID - Mandatory non-zero ASCII hex-encoded u8 for GAS | |
464 | Service Name Prefix - Mandatory UTF-8 string. | |
465 | Will match from beginning of remote Service Name | |
466 | Service Information Substring - Optional UTF-8 string | |
467 | If Service Information Substring is not included, all services matching | |
468 | Service Name Prefix will be returned. | |
469 | If Service Information Substring is included, both the Substring and the | |
470 | Service Name Prefix must match for service to be returned. | |
471 | If remote service has no Service Information, all Substring searches | |
472 | will fail. | |
473 | ||
f6b25ca5 JM |
474 | p2p_serv_disc_cancel_req <query identifier> |
475 | ||
476 | Cancel a pending P2P service discovery request. This command takes a | |
477 | single parameter: identifier for the pending query (the value returned | |
478 | by p2p_serv_disc_req, e.g., "p2p_serv_disc_cancel_req 1f77628". | |
479 | ||
480 | p2p_serv_disc_resp | |
481 | ||
482 | Reply to a service discovery query. This command takes following | |
483 | parameters: frequency in MHz, destination address, dialog token, | |
484 | response TLV(s). The first three parameters are copied from the | |
485 | request event. For example, "p2p_serv_disc_resp 2437 02:40:61:c2:f3:b7 | |
486 | 1 0300000101". This command is used only if external program is used | |
487 | to process the request (see p2p_serv_disc_external). | |
488 | ||
489 | p2p_service_update | |
490 | ||
491 | Indicate that local services have changed. This is used to increment | |
492 | the P2P service indicator value so that peers know when previously | |
493 | cached information may have changed. This is only needed when external | |
494 | service discovery processing is enabled since the commands to | |
495 | pre-configure services for internal processing will increment the | |
496 | indicator automatically. | |
497 | ||
498 | p2p_serv_disc_external <0|1> | |
499 | ||
500 | Configure external processing of P2P service requests: 0 (default) = | |
501 | no external processing of requests (i.e., internal code will process | |
502 | each request based on pre-configured services), 1 = external | |
503 | processing of requests (external program is responsible for replying | |
504 | to service discovery requests with p2p_serv_disc_resp). Please note | |
505 | that there is quite strict limit on how quickly the response needs to | |
506 | be transmitted, so use of the internal processing is strongly | |
507 | recommended. | |
508 | ||
509 | p2p_service_add bonjour <query hexdump> <RDATA hexdump> | |
510 | ||
511 | Add a local Bonjour service for internal SD query processing. | |
512 | ||
513 | Examples: | |
514 | ||
515 | # AFP Over TCP (PTR) | |
516 | p2p_service_add bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027 | |
517 | # AFP Over TCP (TXT) (RDATA=null) | |
518 | p2p_service_add bonjour 076578616d706c650b5f6166706f766572746370c00c001001 00 | |
519 | ||
520 | # IP Printing over TCP (PTR) (RDATA=MyPrinter._ipp._tcp.local.) | |
521 | p2p_service_add bonjour 045f697070c00c000c01 094d795072696e746572c027 | |
522 | # IP Printing over TCP (TXT) (RDATA=txtvers=1,pdl=application/postscript) | |
523 | p2p_service_add bonjour 096d797072696e746572045f697070c00c001001 09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074 | |
524 | ||
525 | # Supported Service Type Hash (SSTH) | |
526 | p2p_service_add bonjour 000000 <32-byte bitfield as hexdump> | |
527 | (note: see P2P spec Annex E.4 for information on how to construct the bitfield) | |
528 | ||
529 | p2p_service_del bonjour <query hexdump> | |
530 | ||
531 | Remove a local Bonjour service from internal SD query processing. | |
532 | ||
533 | p2p_service_add upnp <version hex> <service> | |
534 | ||
535 | Add a local UPnP service for internal SD query processing. | |
536 | ||
537 | Examples: | |
538 | ||
539 | p2p_service_add upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice | |
540 | p2p_service_add upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::upnp:rootdevice | |
541 | p2p_service_add upnp 10 uuid:1122de4e-8574-59ab-9322-333456789044::urn:schemas-upnp-org:service:ContentDirectory:2 | |
542 | p2p_service_add upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::urn:schemas-upnp-org:service:ContentDirectory:2 | |
543 | p2p_service_add upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:InternetGatewayDevice:1 | |
544 | ||
545 | p2p_service_del upnp <version hex> <service> | |
546 | ||
547 | Remove a local UPnP service from internal SD query processing. | |
548 | ||
f92446fb RR |
549 | p2p_service_del asp <adv id> |
550 | ||
551 | Removes the local asp service from internal SD query list. | |
552 | For example: p2p_service_del asp 4d6fc7 | |
553 | ||
f6b25ca5 JM |
554 | p2p_service_flush |
555 | ||
556 | Remove all local services from internal SD query processing. | |
557 | ||
558 | Invitation | |
559 | ||
560 | p2p_invite [persistent=<network id>|group=<group ifname>] [peer=address] | |
5a3319ab | 561 | [go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht] [he] |
20ea1ca4 | 562 | [pref=<MHz>] |
f6b25ca5 JM |
563 | |
564 | Invite a peer to join a group (e.g., group=wlan1) or to reinvoke a | |
565 | persistent group (e.g., persistent=4). If the peer device is the GO of | |
781d8e0f | 566 | the persistent group, the peer parameter is not needed. Otherwise it is |
f6b25ca5 JM |
567 | used to specify which device to invite. go_dev_addr parameter can be |
568 | used to override the GO device address for Invitation Request should | |
569 | it be not known for some reason (this should not be needed in most | |
4d32c0c4 | 570 | cases). When reinvoking a persistent group, the GO device can specify |
f5877af0 JM |
571 | the frequency for the group with the freq parameter. When reinvoking a |
572 | persistent group, the P2P client device can use freq parameter to force | |
573 | a specific operating channel (or invitation failure if GO rejects that) | |
574 | or pref parameter to request a specific channel (while allowing GO to | |
575 | select to use another channel, if needed). | |
f6b25ca5 JM |
576 | |
577 | Group Operations | |
578 | ||
579 | (These are used on the group interface.) | |
580 | ||
581 | wps_pin <any|address> <PIN> | |
582 | ||
583 | Start WPS PIN method. This allows a single WPS Enrollee to connect to | |
584 | the AP/GO. This is used on the GO when a P2P client joins an existing | |
585 | group. The second parameter is the address of the Enrollee or a string | |
586 | "any" to allow any station to use the entered PIN (which will restrict | |
587 | the PIN for one-time-use). PIN is the Enrollee PIN read either from a | |
588 | label or display on the P2P Client/WPS Enrollee. | |
589 | ||
590 | wps_pbc | |
591 | ||
592 | Start WPS PBC method (i.e., push the button). This allows a single WPS | |
593 | Enrollee to connect to the AP/GO. This is used on the GO when a P2P | |
594 | client joins an existing group. | |
595 | ||
596 | p2p_get_passphrase | |
597 | ||
598 | Get the passphrase for a group (only available when acting as a GO). | |
599 | ||
600 | p2p_presence_req [<duration> <interval>] [<duration> <interval>] | |
601 | ||
602 | Send a P2P Presence Request to the GO (this is only available when | |
603 | acting as a P2P client). If no duration/interval pairs are given, the | |
604 | request indicates that this client has no special needs for GO | |
c64e3a08 | 605 | presence. The first parameter pair gives the preferred duration and |
f6b25ca5 | 606 | interval values in microseconds. If the second pair is included, that |
c64e3a08 JM |
607 | indicates which value would be acceptable. This command returns OK |
608 | immediately and the response from the GO is indicated in a | |
609 | P2P-PRESENCE-RESPONSE event message. | |
f6b25ca5 JM |
610 | |
611 | Parameters | |
612 | ||
613 | p2p_ext_listen [<period> <interval>] | |
614 | ||
615 | Configure Extended Listen Timing. If the parameters are omitted, this | |
616 | feature is disabled. If the parameters are included, Listen State will | |
617 | be entered every interval msec for at least period msec. Both values | |
618 | have acceptable range of 1-65535 (with interval obviously having to be | |
619 | larger than or equal to duration). If the P2P module is not idle at | |
620 | the time the Extended Listen Timing timeout occurs, the Listen State | |
621 | operation will be skipped. | |
622 | ||
623 | The configured values will also be advertised to other P2P Devices. The | |
624 | received values are available in the p2p_peer command output: | |
625 | ||
626 | ext_listen_period=100 ext_listen_interval=5000 | |
627 | ||
628 | p2p_set <field> <value> | |
629 | ||
630 | Change dynamic P2P parameters | |
631 | ||
632 | p2p_set discoverability <0/1> | |
633 | ||
634 | Disable/enable advertisement of client discoverability. This is | |
635 | enabled by default and this parameter is mainly used to allow testing | |
636 | of device discoverability. | |
637 | ||
638 | p2p_set managed <0/1> | |
639 | ||
640 | Disable/enable managed P2P Device operations. This is disabled by | |
641 | default. | |
642 | ||
dfe0745c | 643 | p2p_set listen_channel <channel> [<op_class>] |
f6b25ca5 JM |
644 | |
645 | Set P2P Listen channel. This is mainly meant for testing purposes and | |
646 | changing the Listen channel during normal operations can result in | |
647 | protocol failures. | |
648 | ||
dfe0745c LD |
649 | When specifying a social channel on the 2.4 GHz band (1/6/11) there is |
650 | no need to specify the operating class since it defaults to 81. When | |
651 | specifying a social channel on the 60 GHz band (2), specify the 60 GHz | |
652 | operating class (180). | |
653 | ||
f6b25ca5 JM |
654 | p2p_set ssid_postfix <postfix> |
655 | ||
656 | Set postfix string to be added to the automatically generated P2P SSID | |
657 | (DIRECT-<two random characters>). For example, postfix of "-testing" | |
658 | could result in the SSID becoming DIRECT-ab-testing. | |
659 | ||
eac8dab8 JM |
660 | p2p_set per_sta_psk <0/1> |
661 | ||
662 | Disabled(default)/enables use of per-client PSK in the P2P groups. This | |
663 | can be used to request GO to assign a unique PSK for each client during | |
664 | WPS provisioning. When enabled, this allow clients to be removed from | |
5d7b1a3c | 665 | the group securely with p2p_remove_client command since that client's |
eac8dab8 JM |
666 | PSK is removed at the same time to prevent it from connecting back using |
667 | the old PSK. When per-client PSK is not used, the client can still be | |
668 | disconnected, but it will be able to re-join the group since the PSK it | |
669 | learned previously is still valid. It should be noted that the default | |
670 | passphrase on the GO that is normally used to allow legacy stations to | |
671 | connect through manual configuration does not change here, so if that is | |
672 | shared, devices with knowledge of that passphrase can still connect. | |
673 | ||
f6b25ca5 JM |
674 | set <field> <value> |
675 | ||
676 | Set global configuration parameters which may also affect P2P | |
677 | operations. The format on these parameters is same as is used in | |
678 | wpa_supplicant.conf. Only the parameters listen here should be | |
679 | changed. Modifying other parameters may result in incorrect behavior | |
680 | since not all existing users of the parameters are updated. | |
681 | ||
682 | set uuid <UUID> | |
683 | ||
684 | Set WPS UUID (by default, this is generated based on the MAC address). | |
685 | ||
686 | set device_name <device name> | |
687 | ||
688 | Set WPS Device Name (also included in some P2P messages). | |
689 | ||
690 | set manufacturer <manufacturer> | |
691 | ||
692 | Set WPS Manufacturer. | |
693 | ||
694 | set model_name <model name> | |
695 | ||
696 | Set WPS Model Name. | |
697 | ||
698 | set model_number <model number> | |
699 | ||
700 | Set WPS Model Number. | |
701 | ||
702 | set serial_number <serial number> | |
703 | ||
704 | Set WPS Serial Number. | |
705 | ||
706 | set device_type <device type> | |
707 | ||
708 | Set WPS Device Type. | |
709 | ||
710 | set os_version <OS version> | |
711 | ||
712 | Set WPS OS Version. | |
713 | ||
714 | set config_methods <config methods> | |
715 | ||
716 | Set WPS Configuration Methods. | |
717 | ||
718 | set sec_device_type <device type> | |
719 | ||
720 | Add a new Secondary Device Type. | |
721 | ||
722 | set p2p_go_intent <GO intent> | |
723 | ||
724 | Set the default P2P GO Intent. Note: This value can be overridden in | |
725 | p2p_connect command and as such, there should be no need to change the | |
726 | default value here during normal operations. | |
727 | ||
728 | set p2p_ssid_postfix <P2P SSID postfix> | |
729 | ||
730 | Set P2P SSID postfix. | |
731 | ||
732 | set persistent_reconnect <0/1> | |
733 | ||
734 | Disable/enabled persistent reconnect for reinvocation of persistent | |
735 | groups. If enabled, invitations to reinvoke a persistent group will be | |
736 | accepted without separate authorization (e.g., user interaction). | |
737 | ||
738 | set country <two character country code> | |
739 | ||
740 | Set country code (this is included in some P2P messages). | |
741 | ||
d3b20469 NS |
742 | set p2p_search_delay <delay> |
743 | ||
744 | Set p2p_search_delay which adds extra delay in milliseconds between | |
745 | concurrent search iterations to make p2p_find friendlier to concurrent | |
746 | operations by avoiding it from taking 100% of radio resources. The | |
747 | default value is 500 ms. | |
748 | ||
f6b25ca5 JM |
749 | Status |
750 | ||
751 | p2p_peers [discovered] | |
752 | ||
753 | List P2P Device Addresses of all the P2P peers we know. The optional | |
754 | "discovered" parameter filters out the peers that we have not fully | |
755 | discovered, i.e., which we have only seen in a received Probe Request | |
756 | frame. | |
757 | ||
758 | p2p_peer <P2P Device Address> | |
759 | ||
760 | Fetch information about a known P2P peer. | |
761 | ||
762 | Group Status | |
763 | ||
764 | (These are used on the group interface.) | |
765 | ||
766 | status | |
767 | ||
768 | Show status information (connection state, role, use encryption | |
769 | parameters, IP address, etc.). | |
770 | ||
771 | sta | |
772 | ||
773 | Show information about an associated station (when acting in AP/GO role). | |
774 | ||
775 | all_sta | |
776 | ||
777 | Lists the currently associated stations. | |
778 | ||
779 | Configuration data | |
780 | ||
781 | list_networks | |
782 | ||
783 | Lists the configured networks, including stored information for | |
784 | persistent groups. The identifier in this list is used with | |
785 | p2p_group_add and p2p_invite to indicate which persistent group is to | |
786 | be reinvoked. | |
787 | ||
788 | remove_network <network id> | |
789 | ||
790 | Remove a network entry from configuration. | |
791 | ||
792 | ||
f92446fb RR |
793 | P2PS Events/Responses: |
794 | ||
795 | P2PS-PROV-START: This events gets triggered when provisioning is issued for | |
796 | either seeker or advertiser. | |
797 | ||
798 | For example, | |
799 | P2PS-PROV-START 00:55:44:33:22:11 adv_id=111 adv_mac=00:55:44:33:22:11 conncap=1 session=1234567 session_mac=00:11:22:33:44:55 info='xxxx' | |
800 | ||
801 | Parameters definition: | |
802 | MAC address - always | |
803 | adv_id - always ASCII hex-encoded u32 | |
804 | adv_mac - always MAC address that owns/registered the service | |
805 | conncap - always mask of 0x01 (new), 0x02 (group client), 0x04 (group owner) | |
806 | bits | |
807 | session - always Session ID of the first session to be established | |
808 | session_mac - always MAC address that owns/initiated the session | |
809 | info - if available, UTF-8 string | |
810 | Escaped single quote & backslash with a backslash: | |
811 | \' == 0x27 == ', and \\ == 0x5c == \ | |
812 | ||
813 | P2PS-PROV-DONE: When provisioning is completed then this event gets triggered. | |
814 | ||
815 | For example, | |
816 | P2PS-PROV-DONE 00:11:22:33:44:55 status=0 adv_id=111 adv_mac=00:55:44:33:22:11 conncap=1 session=1234567 session_mac=00:11:22:33:44:55 [dev_passwd_id=8 | go=p2p-wlan0-0 | join=11:22:33:44:55:66 | persist=0] | |
817 | ||
818 | Parameters definition: | |
819 | MAC address - always main device address of peer. May be different from MAC | |
820 | ultimately connected to. | |
821 | status - always ascii hex-encoded u8 (0 == success, 12 == deferred success) | |
822 | adv_id - always ascii hex-encoded u32 | |
823 | adv_mac - always MAC address that owns/registered the service | |
824 | conncap - always One of: 1 (new), 2 (group client), 4 (group owner) bits | |
825 | session - always Session ID of the first session to be established | |
826 | session_mac - always MAC address that owns/initiated the session | |
827 | dev_passwd_id - only if conncap value == 1 (New GO negotiation) | |
828 | 8 - "p2ps" password must be passed in p2p_connect command | |
829 | 1 - "display" password must be passed in p2p_connect command | |
830 | 5 - "keypad" password must be passed in p2p_connect command | |
831 | join only - if conncap value == 2 (Client Only). Display password and "join" | |
832 | must be passed in p2p_connect and address must be the MAC specified | |
833 | go only - if conncap value == 4 (GO Only). Interface name must be set with a | |
834 | password | |
835 | persist - only if previous persistent group existed between peers and shall | |
836 | be re-used. Group is restarted by sending "p2p_group_add persistent=0" | |
837 | where value is taken from P2P-PROV-DONE | |
838 | ||
839 | Extended Events/Response | |
840 | ||
841 | P2P-DEVICE-FOUND 00:11:22:33:44:55 p2p_dev_addr=00:11:22:33:44:55 pri_dev_type=0-00000000-0 name='' config_methods=0x108 dev_capab=0x21 group_capab=0x0 adv_id=111 asp_svc=alt.example.chat | |
842 | ||
843 | Parameters definition: | |
844 | adv_id - if ASP ASCII hex-encoded u32. If it is reporting the | |
845 | "wildcard service", this value will be 0 | |
846 | asp_svc - if ASP this is the service string. If it is reporting the | |
847 | "wildcard service", this value will be org.wi-fi.wfds | |
848 | ||
849 | ||
f6b25ca5 JM |
850 | wpa_cli action script |
851 | --------------------- | |
852 | ||
853 | See examples/p2p-action.sh | |
854 | ||
855 | TODO: describe DHCP/DNS setup | |
856 | TODO: cross-connection |