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