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