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