blob: a1d96fb59343c5b3aef4b8331c191ec43a82d8ed [file] [log] [blame]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -07001wpa_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
Dmitry Shmidt61d9df32012-08-29 16:22:06 -070074p2p_find [timeout in seconds] [type=<social|progressive>] \
Dmitry Shmidt344abd32014-01-14 13:17:00 -080075 [dev_id=<addr>] [dev_type=<device type>] \
Dmitry Shmidt7f656022015-02-25 14:36:37 -080076 [delay=<search delay in ms>] [seek=<service name>]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -070077
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.
85
Dmitry Shmidt61d9df32012-08-29 16:22:06 -070086The optional dev_id option can be used to specify a single P2P peer to
87search for. The optional delay parameter can be used to request an extra
88delay to be used between search iterations (e.g., to free up radio
89resources for concurrent operations).
90
Dmitry Shmidt344abd32014-01-14 13:17:00 -080091The 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
Dmitry Shmidt7f656022015-02-25 14:36:37 -080095
96With one or more seek arguments, the command sends Probe Request frames
97for a P2PS service. For example,
98p2p_find 5 dev_id=11:22:33:44:55:66 seek=alt.example.chat seek=alt.example.video
99
100Parameters 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
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700113p2p_listen [timeout in seconds]
114
115Start Listen-only state (become discoverable without searching for
116other devices). Optional parameter can be used to specify the duration
117for the Listen operation in seconds. This command may not be of that
118much use during normal operations and is mainly designed for
119testing. It can also be used to keep the device discoverable without
120having to maintain a group.
121
122p2p_stop_find
123
124Stop ongoing P2P device discovery or other operation (connect, listen
125mode).
126
127p2p_flush
128
129Flush P2P peer table and state.
130
131Group Formation
132
Dmitry Shmidt04949592012-07-19 12:16:46 -0700133p2p_prov_disc <peer device address> <display|keypad|pbc> [join|auto]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700134
135Send P2P provision discovery request to the specified peer. The
136parameters for this command are the P2P device address of the peer and
137the desired configuration method. For example, "p2p_prov_disc
13802:01:02:03:04:05 display" would request the peer to display a PIN for
139us and "p2p_prov_disc 02:01:02:03:04:05 keypad" would request the peer
140to enter a PIN that we display.
141
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800142The optional "join" parameter can be used to indicate that this command
143is requesting an already running GO to prepare for a new client. This is
Dmitry Shmidt04949592012-07-19 12:16:46 -0700144mainly used with "display" to request it to display a PIN. The "auto"
145parameter can be used to request wpa_supplicant to automatically figure
146out whether the peer device is operating as a GO and if so, use
147join-a-group style PD instead of GO Negotiation style PD.
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800148
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800149p2p_connect <peer device address> <pbc|pin|PIN#|p2ps> [display|keypad|p2ps]
Dmitry Shmidt04949592012-07-19 12:16:46 -0700150 [persistent|persistent=<network id>] [join|auth]
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800151 [go_intent=<0..15>] [freq=<in MHz>] [ht40] [vht] [provdisc] [auto]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700152
153Start P2P group formation with a discovered P2P peer. This includes
154optional group owner negotiation, group interface setup, provisioning,
155and establishing data connection.
156
157The <pbc|pin|PIN#> parameter specifies the WPS provisioning
158method. "pbc" string starts pushbutton method, "pin" string start PIN
159method using an automatically generated PIN (which will be returned as
160the command return code), PIN# means that a pre-selected PIN can be
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800161used (e.g., 12345670). [display|keypad] is used with PIN method
162to specify which PIN is used (display=dynamically generated random PIN
163from local display, keypad=PIN entered from peer display). "persistent"
Dmitry Shmidt04949592012-07-19 12:16:46 -0700164parameter can be used to request a persistent group to be formed. The
165"persistent=<network id>" alternative can be used to pre-populate
166SSID/passphrase configuration based on a previously used persistent
167group where this device was the GO. The previously used parameters will
168then be used if the local end becomes the GO in GO Negotiation (which
169can be forced with go_intent=15).
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700170
171"join" indicates that this is a command to join an existing group as a
172client. It skips the GO Negotiation part. This will send a Provision
173Discovery Request message to the target GO before associating for WPS
174provisioning.
175
176"auth" indicates that the WPS parameters are authorized for the peer
177device without actually starting GO Negotiation (i.e., the peer is
178expected to initiate GO Negotiation). This is mainly for testing
179purposes.
180
181"go_intent" can be used to override the default GO Intent for this GO
182Negotiation.
183
184"freq" can be used to set a forced operating channel (e.g., freq=2412
185to select 2.4 GHz channel 1).
186
Dmitry Shmidt04949592012-07-19 12:16:46 -0700187"provdisc" can be used to request a Provision Discovery exchange to be
188used prior to starting GO Negotiation as a workaround with some deployed
189P2P implementations that require this to allow the user to accept the
190connection.
191
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800192"auto" can be used to request wpa_supplicant to automatically figure
193out whether the peer device is operating as a GO and if so, use
194join-a-group operation rather than GO Negotiation.
195
196P2PS attribute changes to p2p_connect command:
197
198P2PS supports two WPS provisioning methods namely PIN method and P2PS default.
199The remaining paramters hold same role as in legacy P2P. In case of P2PS default
200config method "p2ps" keyword is added in p2p_connect command.
201
202For example:
203p2p_connect 02:0a:f5:85:11:00 12345670 p2ps persistent join
204 (WPS Method = P2PS default)
205
206p2p_connect 02:0a:f5:85:11:00 45629034 keypad persistent
207 (WPS Method = PIN)
208
209p2p_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
214This command starts provision discovery with the P2PS enabled peer device.
215
216For example,
217p2p_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
219Parameter 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
235p2p_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
239This command sends a provision discovery response from responder side.
240
241For example,
242p2p_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
244Parameters 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
Dmitry Shmidt68d0e3e2013-10-28 17:59:21 -0700255p2p_group_add [persistent|persistent=<network id>] [freq=<freq in MHz>]
256 [ht40] [vht]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700257
258Set up a P2P group owner manually (i.e., without group owner
259negotiation with a specific peer). This is also known as autonomous
260GO. Optional persistent=<network id> can be used to specify restart of
261a persistent group. Optional freq=<freq in MHz> can be used to force
262the GO to be started on a specific frequency. Special freq=2 or freq=5
263options can be used to request the best 2.4 GHz or 5 GHz band channel
264to be selected automatically.
265
266p2p_reject <peer device address>
267
268Reject connection attempt from a peer (specified with a device
269address). This is a mechanism to reject a pending GO Negotiation with
270a peer and request to automatically block any further connection or
271discovery of the peer.
272
273p2p_group_remove <group interface>
274
275Terminate a P2P group. If a new virtual network interface was used for
276the group, it will also be removed. The network interface name of the
277group interface is used as a parameter for this command.
278
279p2p_cancel
280
Dmitry Shmidta54fa5f2013-01-15 13:53:35 -0800281Cancel an ongoing P2P group formation and joining-a-group related
282operation. This operations unauthorizes the specific peer device (if any
283had been authorized to start group formation), stops P2P find (if in
284progress), stops pending operations for join-a-group, and removes the
285P2P group interface (if one was used) that is in the WPS provisioning
286step. If the WPS provisioning step has been completed, the group is not
287terminated.
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700288
Dmitry Shmidt391c59f2013-09-03 12:16:28 -0700289p2p_remove_client <peer's P2P Device Address|iface=<interface address>>
290
291This 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
293can rejoin the group if it is in possession of a valid key. See p2p_set
294per_sta_psk command below for more details on how the peer can be
295removed securely.
296
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700297Service Discovery
298
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800299p2p_service_add asp <auto accept> <adv id> <status 0/1> <Config Methods>
300 <Service name> [Service Information] [Response Info]
301
302This command can be used to search for a P2PS service which includes
303Play, Send, Display, and Print service. The parameters for this command
304are "asp" to identify the command as P2PS one, auto accept value,
305advertisement id which uniquely identifies the service requests, state
306of the service whether the service is available or not, config methods
307which can be either P2PS method or PIN method, service name followed by
308two optional parameters service information, and response info.
309
310For example,
311p2p_service_add asp 1 4d6fc7 0 1108 alt.example.chat svc_info='name=john' rsp_info='enter PIN 1234'
312
313Parameters 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
333p2p_service_rep asp <auto accept> <adv id> <status 0/1> <Config Methods>
334 <Service name> [Service Information] [Response Info]
335
336This command can be used to replace the existing service request
337attributes from the initiator side. The replacement is only allowed if
338the advertisement id issued in the command matches with any one entry in
339the list of existing SD queries. If advertisement id doesn't match the
340command returns a failure.
341
342For example,
343p2p_service_rep asp 1 4d6fc7 1 1108 alt.example.chat svc_info='name=john' rsp_info='enter PIN 1234'
344
345Parameters 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
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700363p2p_serv_disc_req
364
365Schedule a P2P service discovery request. The parameters for this
366command are the device address of the peer device (or 00:00:00:00:00:00
367for wildcard query that is sent to every discovered P2P peer that
368supports service discovery) and P2P Service Query TLV(s) as hexdump. For
369example,
370
371p2p_serv_disc_req 00:00:00:00:00:00 02000001
372
373schedules a request for listing all available services of all service
374discovery protocols and requests this to be sent to all discovered
375peers (note: this can result in long response frames). The pending
376requests are sent during device discovery (see p2p_find).
377
Dmitry Shmidt13ca8d82014-02-20 10:18:40 -0800378There can be multiple pending peer device specific queries (each will be
379sent in sequence whenever the peer is found).
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700380
381This command returns an identifier for the pending query (e.g.,
382"1f77628") that can be used to cancel the request. Directed requests
383will be automatically removed when the specified peer has replied to
384it.
385
Dmitry Shmidta54fa5f2013-01-15 13:53:35 -0800386Service Query TLV has following format:
387Length (2 octets, little endian) - length of following data
388Service Protocol Type (1 octet) - see the table below
389Service Transaction ID (1 octet) - nonzero identifier for the TLV
390Query Data (Length - 2 octets of data) - service protocol specific data
391
392Service Protocol Types:
3930 = All service protocols
3941 = Bonjour
3952 = UPnP
3963 = WS-Discovery
3974 = Wi-Fi Display
398
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700399For UPnP, an alternative command format can be used to specify a
400single query TLV (i.e., a service discovery for a specific UPnP
401service):
402
403p2p_serv_disc_req 00:00:00:00:00:00 upnp <version hex> <ST: from M-SEARCH>
404
405For example:
406
407p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:device:InternetGatewayDevice:1
408
409Additional examples for queries:
410
411# list of all Bonjour services
412p2p_serv_disc_req 00:00:00:00:00:00 02000101
413
414# list of all UPnP services
415p2p_serv_disc_req 00:00:00:00:00:00 02000201
416
417# list of all WS-Discovery services
418p2p_serv_disc_req 00:00:00:00:00:00 02000301
419
420# list of all Bonjour and UPnP services
421p2p_serv_disc_req 00:00:00:00:00:00 0200010102000202
422
423# Apple File Sharing over TCP
424p2p_serv_disc_req 00:00:00:00:00:00 130001010b5f6166706f766572746370c00c000c01
425
426# Bonjour SSTH (supported service type hash)
427p2p_serv_disc_req 00:00:00:00:00:00 05000101000000
428
429# UPnP examples
430p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 ssdp:all
431p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 upnp:rootdevice
432p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:service:ContentDirectory:2
433p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 uuid:6859dede-8574-59ab-9332-123456789012
434p2p_serv_disc_req 00:00:00:00:00:00 upnp 10 urn:schemas-upnp-org:device:InternetGatewayDevice:1
435
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700436# Wi-Fi Display examples
437# format: wifi-display <list of roles> <list of subelements>
438p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source] 2,3,4,5
439p2p_serv_disc_req 02:01:02:03:04:05 wifi-display [pri-sink] 3
440p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [sec-source] 2
441p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source+sink] 2,3,4,5
442p2p_serv_disc_req 00:00:00:00:00:00 wifi-display [source][pri-sink] 2,3,4,5
443
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800444p2p_serv_disc_req <Unicast|Broadcast mac address> asp <Transaction ID>
445 <Service Name> [Service Information]
446
447The command can be used for service discovery for P2PS enabled devices.
448
449For example: p2p_serv_disc_req 00:00:00:00:00:00 asp a1 alt.example 'john'
450
451Parameters 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
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700465p2p_serv_disc_cancel_req <query identifier>
466
467Cancel a pending P2P service discovery request. This command takes a
468single parameter: identifier for the pending query (the value returned
469by p2p_serv_disc_req, e.g., "p2p_serv_disc_cancel_req 1f77628".
470
471p2p_serv_disc_resp
472
473Reply to a service discovery query. This command takes following
474parameters: frequency in MHz, destination address, dialog token,
475response TLV(s). The first three parameters are copied from the
476request event. For example, "p2p_serv_disc_resp 2437 02:40:61:c2:f3:b7
4771 0300000101". This command is used only if external program is used
478to process the request (see p2p_serv_disc_external).
479
480p2p_service_update
481
482Indicate that local services have changed. This is used to increment
483the P2P service indicator value so that peers know when previously
484cached information may have changed. This is only needed when external
485service discovery processing is enabled since the commands to
486pre-configure services for internal processing will increment the
487indicator automatically.
488
489p2p_serv_disc_external <0|1>
490
491Configure external processing of P2P service requests: 0 (default) =
492no external processing of requests (i.e., internal code will process
493each request based on pre-configured services), 1 = external
494processing of requests (external program is responsible for replying
495to service discovery requests with p2p_serv_disc_resp). Please note
496that there is quite strict limit on how quickly the response needs to
497be transmitted, so use of the internal processing is strongly
498recommended.
499
500p2p_service_add bonjour <query hexdump> <RDATA hexdump>
501
502Add a local Bonjour service for internal SD query processing.
503
504Examples:
505
506# AFP Over TCP (PTR)
507p2p_service_add bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027
508# AFP Over TCP (TXT) (RDATA=null)
509p2p_service_add bonjour 076578616d706c650b5f6166706f766572746370c00c001001 00
510
511# IP Printing over TCP (PTR) (RDATA=MyPrinter._ipp._tcp.local.)
512p2p_service_add bonjour 045f697070c00c000c01 094d795072696e746572c027
513# IP Printing over TCP (TXT) (RDATA=txtvers=1,pdl=application/postscript)
514p2p_service_add bonjour 096d797072696e746572045f697070c00c001001 09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074
515
516# Supported Service Type Hash (SSTH)
517p2p_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
520p2p_service_del bonjour <query hexdump>
521
522Remove a local Bonjour service from internal SD query processing.
523
524p2p_service_add upnp <version hex> <service>
525
526Add a local UPnP service for internal SD query processing.
527
528Examples:
529
530p2p_service_add upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice
531p2p_service_add upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::upnp:rootdevice
532p2p_service_add upnp 10 uuid:1122de4e-8574-59ab-9322-333456789044::urn:schemas-upnp-org:service:ContentDirectory:2
533p2p_service_add upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::urn:schemas-upnp-org:service:ContentDirectory:2
534p2p_service_add upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:InternetGatewayDevice:1
535
536p2p_service_del upnp <version hex> <service>
537
538Remove a local UPnP service from internal SD query processing.
539
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800540p2p_service_del asp <adv id>
541
542Removes the local asp service from internal SD query list.
543For example: p2p_service_del asp 4d6fc7
544
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700545p2p_service_flush
546
547Remove all local services from internal SD query processing.
548
549Invitation
550
551p2p_invite [persistent=<network id>|group=<group ifname>] [peer=address]
Dmitry Shmidt68d0e3e2013-10-28 17:59:21 -0700552 [go_dev_addr=address] [freq=<freq in MHz>] [ht40] [vht]
553 [pref=<MHz>]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700554
555Invite a peer to join a group (e.g., group=wlan1) or to reinvoke a
556persistent group (e.g., persistent=4). If the peer device is the GO of
Dmitry Shmidt04949592012-07-19 12:16:46 -0700557the persistent group, the peer parameter is not needed. Otherwise it is
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700558used to specify which device to invite. go_dev_addr parameter can be
559used to override the GO device address for Invitation Request should
560it be not known for some reason (this should not be needed in most
Jouni Malinen31be0a42012-08-31 21:20:51 +0300561cases). When reinvoking a persistent group, the GO device can specify
Dmitry Shmidt7a5e50a2013-03-05 12:37:16 -0800562the frequency for the group with the freq parameter. When reinvoking a
563persistent group, the P2P client device can use freq parameter to force
564a specific operating channel (or invitation failure if GO rejects that)
565or pref parameter to request a specific channel (while allowing GO to
566select to use another channel, if needed).
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700567
568Group Operations
569
570(These are used on the group interface.)
571
572wps_pin <any|address> <PIN>
573
574Start WPS PIN method. This allows a single WPS Enrollee to connect to
575the AP/GO. This is used on the GO when a P2P client joins an existing
576group. 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
578the PIN for one-time-use). PIN is the Enrollee PIN read either from a
579label or display on the P2P Client/WPS Enrollee.
580
581wps_pbc
582
583Start WPS PBC method (i.e., push the button). This allows a single WPS
584Enrollee to connect to the AP/GO. This is used on the GO when a P2P
585client joins an existing group.
586
587p2p_get_passphrase
588
589Get the passphrase for a group (only available when acting as a GO).
590
591p2p_presence_req [<duration> <interval>] [<duration> <interval>]
592
593Send a P2P Presence Request to the GO (this is only available when
594acting as a P2P client). If no duration/interval pairs are given, the
595request indicates that this client has no special needs for GO
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800596presence. The first parameter pair gives the preferred duration and
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700597interval values in microseconds. If the second pair is included, that
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800598indicates which value would be acceptable. This command returns OK
599immediately and the response from the GO is indicated in a
600P2P-PRESENCE-RESPONSE event message.
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700601
602Parameters
603
604p2p_ext_listen [<period> <interval>]
605
606Configure Extended Listen Timing. If the parameters are omitted, this
607feature is disabled. If the parameters are included, Listen State will
608be entered every interval msec for at least period msec. Both values
609have acceptable range of 1-65535 (with interval obviously having to be
610larger than or equal to duration). If the P2P module is not idle at
611the time the Extended Listen Timing timeout occurs, the Listen State
612operation will be skipped.
613
614The configured values will also be advertised to other P2P Devices. The
615received values are available in the p2p_peer command output:
616
617ext_listen_period=100 ext_listen_interval=5000
618
619p2p_set <field> <value>
620
621Change dynamic P2P parameters
622
623p2p_set discoverability <0/1>
624
625Disable/enable advertisement of client discoverability. This is
626enabled by default and this parameter is mainly used to allow testing
627of device discoverability.
628
629p2p_set managed <0/1>
630
631Disable/enable managed P2P Device operations. This is disabled by
632default.
633
634p2p_set listen_channel <1/6/11>
635
636Set P2P Listen channel. This is mainly meant for testing purposes and
637changing the Listen channel during normal operations can result in
638protocol failures.
639
640p2p_set ssid_postfix <postfix>
641
642Set postfix string to be added to the automatically generated P2P SSID
643(DIRECT-<two random characters>). For example, postfix of "-testing"
644could result in the SSID becoming DIRECT-ab-testing.
645
Dmitry Shmidt391c59f2013-09-03 12:16:28 -0700646p2p_set per_sta_psk <0/1>
647
648Disabled(default)/enables use of per-client PSK in the P2P groups. This
649can be used to request GO to assign a unique PSK for each client during
650WPS provisioning. When enabled, this allow clients to be removed from
651the group securily with p2p_remove_client command since that client's
652PSK is removed at the same time to prevent it from connecting back using
653the old PSK. When per-client PSK is not used, the client can still be
654disconnected, but it will be able to re-join the group since the PSK it
655learned previously is still valid. It should be noted that the default
656passphrase on the GO that is normally used to allow legacy stations to
657connect through manual configuration does not change here, so if that is
658shared, devices with knowledge of that passphrase can still connect.
659
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700660set <field> <value>
661
662Set global configuration parameters which may also affect P2P
663operations. The format on these parameters is same as is used in
664wpa_supplicant.conf. Only the parameters listen here should be
665changed. Modifying other parameters may result in incorrect behavior
666since not all existing users of the parameters are updated.
667
668set uuid <UUID>
669
670Set WPS UUID (by default, this is generated based on the MAC address).
671
672set device_name <device name>
673
674Set WPS Device Name (also included in some P2P messages).
675
676set manufacturer <manufacturer>
677
678Set WPS Manufacturer.
679
680set model_name <model name>
681
682Set WPS Model Name.
683
684set model_number <model number>
685
686Set WPS Model Number.
687
688set serial_number <serial number>
689
690Set WPS Serial Number.
691
692set device_type <device type>
693
694Set WPS Device Type.
695
696set os_version <OS version>
697
698Set WPS OS Version.
699
700set config_methods <config methods>
701
702Set WPS Configuration Methods.
703
704set sec_device_type <device type>
705
706Add a new Secondary Device Type.
707
708set p2p_go_intent <GO intent>
709
710Set the default P2P GO Intent. Note: This value can be overridden in
711p2p_connect command and as such, there should be no need to change the
712default value here during normal operations.
713
714set p2p_ssid_postfix <P2P SSID postfix>
715
716Set P2P SSID postfix.
717
718set persistent_reconnect <0/1>
719
720Disable/enabled persistent reconnect for reinvocation of persistent
721groups. If enabled, invitations to reinvoke a persistent group will be
722accepted without separate authorization (e.g., user interaction).
723
724set country <two character country code>
725
726Set country code (this is included in some P2P messages).
727
Dmitry Shmidt09f57ba2014-06-10 16:07:13 -0700728set p2p_search_delay <delay>
729
730Set p2p_search_delay which adds extra delay in milliseconds between
731concurrent search iterations to make p2p_find friendlier to concurrent
732operations by avoiding it from taking 100% of radio resources. The
733default value is 500 ms.
734
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700735Status
736
737p2p_peers [discovered]
738
739List P2P Device Addresses of all the P2P peers we know. The optional
740"discovered" parameter filters out the peers that we have not fully
741discovered, i.e., which we have only seen in a received Probe Request
742frame.
743
744p2p_peer <P2P Device Address>
745
746Fetch information about a known P2P peer.
747
748Group Status
749
750(These are used on the group interface.)
751
752status
753
754Show status information (connection state, role, use encryption
755parameters, IP address, etc.).
756
757sta
758
759Show information about an associated station (when acting in AP/GO role).
760
761all_sta
762
763Lists the currently associated stations.
764
765Configuration data
766
767list_networks
768
769Lists the configured networks, including stored information for
770persistent groups. The identifier in this list is used with
771p2p_group_add and p2p_invite to indicate which persistent group is to
772be reinvoked.
773
774remove_network <network id>
775
776Remove a network entry from configuration.
777
778
Dmitry Shmidt7f656022015-02-25 14:36:37 -0800779P2PS Events/Responses:
780
781P2PS-PROV-START: This events gets triggered when provisioning is issued for
782either seeker or advertiser.
783
784For example,
785P2PS-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
787Parameters 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
799P2PS-PROV-DONE: When provisioning is completed then this event gets triggered.
800
801For example,
802P2PS-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
804Parameters 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
825Extended Events/Response
826
827P2P-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
829Parameters 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
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700836wpa_cli action script
837---------------------
838
839See examples/p2p-action.sh
840
841TODO: describe DHCP/DNS setup
842TODO: cross-connection