xref: /aosp_15_r20/external/wpa_supplicant_8/wpa_supplicant/README-WPS (revision 03f9172ca588f91df233974f4258bab95191f931)
1*03f9172cSAndroid Build Coastguard Workerwpa_supplicant and Wi-Fi Protected Setup (WPS)
2*03f9172cSAndroid Build Coastguard Worker==============================================
3*03f9172cSAndroid Build Coastguard Worker
4*03f9172cSAndroid Build Coastguard WorkerThis document describes how the WPS implementation in wpa_supplicant
5*03f9172cSAndroid Build Coastguard Workercan be configured and how an external component on the client (e.g.,
6*03f9172cSAndroid Build Coastguard Workermanagement GUI) is used to enable WPS enrollment and registrar
7*03f9172cSAndroid Build Coastguard Workerregistration.
8*03f9172cSAndroid Build Coastguard Worker
9*03f9172cSAndroid Build Coastguard Worker
10*03f9172cSAndroid Build Coastguard WorkerIntroduction to WPS
11*03f9172cSAndroid Build Coastguard Worker-------------------
12*03f9172cSAndroid Build Coastguard Worker
13*03f9172cSAndroid Build Coastguard WorkerWi-Fi Protected Setup (WPS) is a mechanism for easy configuration of a
14*03f9172cSAndroid Build Coastguard Workerwireless network. It allows automated generation of random keys (WPA
15*03f9172cSAndroid Build Coastguard Workerpassphrase/PSK) and configuration of an access point and client
16*03f9172cSAndroid Build Coastguard Workerdevices. WPS includes number of methods for setting up connections
17*03f9172cSAndroid Build Coastguard Workerwith PIN method and push-button configuration (PBC) being the most
18*03f9172cSAndroid Build Coastguard Workercommonly deployed options.
19*03f9172cSAndroid Build Coastguard Worker
20*03f9172cSAndroid Build Coastguard WorkerWhile WPS can enable more home networks to use encryption in the
21*03f9172cSAndroid Build Coastguard Workerwireless network, it should be noted that the use of the PIN and
22*03f9172cSAndroid Build Coastguard Workerespecially PBC mechanisms for authenticating the initial key setup is
23*03f9172cSAndroid Build Coastguard Workernot very secure. As such, use of WPS may not be suitable for
24*03f9172cSAndroid Build Coastguard Workerenvironments that require secure network access without chance for
25*03f9172cSAndroid Build Coastguard Workerallowing outsiders to gain access during the setup phase.
26*03f9172cSAndroid Build Coastguard Worker
27*03f9172cSAndroid Build Coastguard WorkerWPS uses the following terms to describe the entities participating
28*03f9172cSAndroid Build Coastguard Workerin the network setup:
29*03f9172cSAndroid Build Coastguard Worker- access point: the WLAN access point
30*03f9172cSAndroid Build Coastguard Worker- Registrar: a device that control a network and can authorize
31*03f9172cSAndroid Build Coastguard Worker  addition of new devices); this may be either in the AP ("internal
32*03f9172cSAndroid Build Coastguard Worker  Registrar") or in an external device, e.g., a laptop, ("external
33*03f9172cSAndroid Build Coastguard Worker  Registrar")
34*03f9172cSAndroid Build Coastguard Worker- Enrollee: a device that is being authorized to use the network
35*03f9172cSAndroid Build Coastguard Worker
36*03f9172cSAndroid Build Coastguard WorkerIt should also be noted that the AP and a client device may change
37*03f9172cSAndroid Build Coastguard Workerroles (i.e., AP acts as an Enrollee and client device as a Registrar)
38*03f9172cSAndroid Build Coastguard Workerwhen WPS is used to configure the access point.
39*03f9172cSAndroid Build Coastguard Worker
40*03f9172cSAndroid Build Coastguard Worker
41*03f9172cSAndroid Build Coastguard WorkerMore information about WPS is available from Wi-Fi Alliance:
42*03f9172cSAndroid Build Coastguard Workerhttp://www.wi-fi.org/wifi-protected-setup
43*03f9172cSAndroid Build Coastguard Worker
44*03f9172cSAndroid Build Coastguard Worker
45*03f9172cSAndroid Build Coastguard Workerwpa_supplicant implementation
46*03f9172cSAndroid Build Coastguard Worker-----------------------------
47*03f9172cSAndroid Build Coastguard Worker
48*03f9172cSAndroid Build Coastguard Workerwpa_supplicant includes an optional WPS component that can be used as
49*03f9172cSAndroid Build Coastguard Workeran Enrollee to enroll new network credential or as a Registrar to
50*03f9172cSAndroid Build Coastguard Workerconfigure an AP.
51*03f9172cSAndroid Build Coastguard Worker
52*03f9172cSAndroid Build Coastguard Worker
53*03f9172cSAndroid Build Coastguard Workerwpa_supplicant configuration
54*03f9172cSAndroid Build Coastguard Worker----------------------------
55*03f9172cSAndroid Build Coastguard Worker
56*03f9172cSAndroid Build Coastguard WorkerWPS is an optional component that needs to be enabled in
57*03f9172cSAndroid Build Coastguard Workerwpa_supplicant build configuration (.config). Here is an example
58*03f9172cSAndroid Build Coastguard Workerconfiguration that includes WPS support and Linux nl80211-based
59*03f9172cSAndroid Build Coastguard Workerdriver interface:
60*03f9172cSAndroid Build Coastguard Worker
61*03f9172cSAndroid Build Coastguard WorkerCONFIG_DRIVER_NL80211=y
62*03f9172cSAndroid Build Coastguard WorkerCONFIG_WPS=y
63*03f9172cSAndroid Build Coastguard Worker
64*03f9172cSAndroid Build Coastguard WorkerIf you want to enable WPS external registrar (ER) functionality, you
65*03f9172cSAndroid Build Coastguard Workerwill also need to add the following line:
66*03f9172cSAndroid Build Coastguard Worker
67*03f9172cSAndroid Build Coastguard WorkerCONFIG_WPS_ER=y
68*03f9172cSAndroid Build Coastguard Worker
69*03f9172cSAndroid Build Coastguard WorkerThe following parameter can be used to enable support for NFC config
70*03f9172cSAndroid Build Coastguard Workermethod:
71*03f9172cSAndroid Build Coastguard Worker
72*03f9172cSAndroid Build Coastguard WorkerCONFIG_WPS_NFC=y
73*03f9172cSAndroid Build Coastguard Worker
74*03f9172cSAndroid Build Coastguard WorkerWPS needs the Universally Unique IDentifier (UUID; see RFC 4122) for
75*03f9172cSAndroid Build Coastguard Workerthe device. This is configured in the runtime configuration for
76*03f9172cSAndroid Build Coastguard Workerwpa_supplicant (if not set, UUID will be generated based on local MAC
77*03f9172cSAndroid Build Coastguard Workeraddress):
78*03f9172cSAndroid Build Coastguard Worker
79*03f9172cSAndroid Build Coastguard Worker# example UUID for WPS
80*03f9172cSAndroid Build Coastguard Workeruuid=12345678-9abc-def0-1234-56789abcdef0
81*03f9172cSAndroid Build Coastguard Worker
82*03f9172cSAndroid Build Coastguard WorkerThe network configuration blocks needed for WPS are added
83*03f9172cSAndroid Build Coastguard Workerautomatically based on control interface commands, so they do not need
84*03f9172cSAndroid Build Coastguard Workerto be added explicitly in the configuration file.
85*03f9172cSAndroid Build Coastguard Worker
86*03f9172cSAndroid Build Coastguard WorkerWPS registration will generate new network blocks for the acquired
87*03f9172cSAndroid Build Coastguard Workercredentials. If these are to be stored for future use (after
88*03f9172cSAndroid Build Coastguard Workerrestarting wpa_supplicant), wpa_supplicant will need to be configured
89*03f9172cSAndroid Build Coastguard Workerto allow configuration file updates:
90*03f9172cSAndroid Build Coastguard Worker
91*03f9172cSAndroid Build Coastguard Workerupdate_config=1
92*03f9172cSAndroid Build Coastguard Worker
93*03f9172cSAndroid Build Coastguard Worker
94*03f9172cSAndroid Build Coastguard WorkerExternal operations
95*03f9172cSAndroid Build Coastguard Worker-------------------
96*03f9172cSAndroid Build Coastguard Worker
97*03f9172cSAndroid Build Coastguard WorkerWPS requires either a device PIN code (usually, 8-digit number) or a
98*03f9172cSAndroid Build Coastguard Workerpushbutton event (for PBC) to allow a new WPS Enrollee to join the
99*03f9172cSAndroid Build Coastguard Workernetwork. wpa_supplicant uses the control interface as an input channel
100*03f9172cSAndroid Build Coastguard Workerfor these events.
101*03f9172cSAndroid Build Coastguard Worker
102*03f9172cSAndroid Build Coastguard WorkerThe PIN value used in the commands must be processed by an UI to
103*03f9172cSAndroid Build Coastguard Workerremove non-digit characters and potentially, to verify the checksum
104*03f9172cSAndroid Build Coastguard Workerdigit. "wpa_cli wps_check_pin <PIN>" can be used to do such processing.
105*03f9172cSAndroid Build Coastguard WorkerIt returns FAIL if the PIN is invalid, or FAIL-CHECKSUM if the checksum
106*03f9172cSAndroid Build Coastguard Workerdigit is incorrect, or the processed PIN (non-digit characters removed)
107*03f9172cSAndroid Build Coastguard Workerif the PIN is valid.
108*03f9172cSAndroid Build Coastguard Worker
109*03f9172cSAndroid Build Coastguard WorkerIf the client device has a display, a random PIN has to be generated
110*03f9172cSAndroid Build Coastguard Workerfor each WPS registration session. wpa_supplicant can do this with a
111*03f9172cSAndroid Build Coastguard Workercontrol interface request, e.g., by calling wpa_cli:
112*03f9172cSAndroid Build Coastguard Worker
113*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_pin any
114*03f9172cSAndroid Build Coastguard Worker
115*03f9172cSAndroid Build Coastguard WorkerThis will return the generated 8-digit PIN which will then need to be
116*03f9172cSAndroid Build Coastguard Workerentered at the Registrar to complete WPS registration. At that point,
117*03f9172cSAndroid Build Coastguard Workerthe client will be enrolled with credentials needed to connect to the
118*03f9172cSAndroid Build Coastguard WorkerAP to access the network.
119*03f9172cSAndroid Build Coastguard Worker
120*03f9172cSAndroid Build Coastguard WorkerIf the client device does not have a display that could show the
121*03f9172cSAndroid Build Coastguard Workerrandom PIN, a hardcoded PIN that is printed on a label can be
122*03f9172cSAndroid Build Coastguard Workerused. wpa_supplicant is notified this with a control interface
123*03f9172cSAndroid Build Coastguard Workerrequest, e.g., by calling wpa_cli:
124*03f9172cSAndroid Build Coastguard Worker
125*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_pin any 12345670
126*03f9172cSAndroid Build Coastguard Worker
127*03f9172cSAndroid Build Coastguard WorkerThis starts the WPS negotiation in the same way as above with the
128*03f9172cSAndroid Build Coastguard Workergenerated PIN.
129*03f9172cSAndroid Build Coastguard Worker
130*03f9172cSAndroid Build Coastguard WorkerWhen the wps_pin command is issued for an AP (including P2P GO) mode
131*03f9172cSAndroid Build Coastguard Workerinterface, an optional timeout parameter can be used to specify
132*03f9172cSAndroid Build Coastguard Workerexpiration timeout for the PIN in seconds. For example:
133*03f9172cSAndroid Build Coastguard Worker
134*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_pin any 12345670 300
135*03f9172cSAndroid Build Coastguard Worker
136*03f9172cSAndroid Build Coastguard WorkerIf a random PIN is needed for a user interface, "wpa_cli wps_pin get"
137*03f9172cSAndroid Build Coastguard Workercan be used to generate a new PIN without starting WPS negotiation.
138*03f9172cSAndroid Build Coastguard WorkerThis random PIN can then be passed as an argument to another wps_pin
139*03f9172cSAndroid Build Coastguard Workercall when the actual operation should be started.
140*03f9172cSAndroid Build Coastguard Worker
141*03f9172cSAndroid Build Coastguard WorkerIf the client design wants to support optional WPS PBC mode, this can
142*03f9172cSAndroid Build Coastguard Workerbe enabled by either a physical button in the client device or a
143*03f9172cSAndroid Build Coastguard Workervirtual button in the user interface. The PBC operation requires that
144*03f9172cSAndroid Build Coastguard Workera button is also pressed at the AP/Registrar at about the same time (2
145*03f9172cSAndroid Build Coastguard Workerminute window). wpa_supplicant is notified of the local button event
146*03f9172cSAndroid Build Coastguard Workerover the control interface, e.g., by calling wpa_cli:
147*03f9172cSAndroid Build Coastguard Worker
148*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_pbc
149*03f9172cSAndroid Build Coastguard Worker
150*03f9172cSAndroid Build Coastguard WorkerAt this point, the AP/Registrar has two minutes to complete WPS
151*03f9172cSAndroid Build Coastguard Workernegotiation which will generate a new WPA PSK in the same way as the
152*03f9172cSAndroid Build Coastguard WorkerPIN method described above.
153*03f9172cSAndroid Build Coastguard Worker
154*03f9172cSAndroid Build Coastguard WorkerIf the client wants to operate in the Registrar role to learn the
155*03f9172cSAndroid Build Coastguard Workercurrent AP configuration and optionally, to configure an AP,
156*03f9172cSAndroid Build Coastguard Workerwpa_supplicant is notified over the control interface, e.g., with
157*03f9172cSAndroid Build Coastguard Workerwpa_cli:
158*03f9172cSAndroid Build Coastguard Worker
159*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_reg <AP BSSID> <AP PIN>
160*03f9172cSAndroid Build Coastguard Worker(example: wpa_cli wps_reg 02:34:56:78:9a:bc 12345670)
161*03f9172cSAndroid Build Coastguard Worker
162*03f9172cSAndroid Build Coastguard WorkerThis is used to fetch the current AP settings instead of actually
163*03f9172cSAndroid Build Coastguard Workerchanging them. The main difference with the wps_pin command is that
164*03f9172cSAndroid Build Coastguard Workerwps_reg uses the AP PIN (e.g., from a label on the AP) instead of a
165*03f9172cSAndroid Build Coastguard WorkerPIN generated at the client.
166*03f9172cSAndroid Build Coastguard Worker
167*03f9172cSAndroid Build Coastguard WorkerIn order to change the AP configuration, the new configuration
168*03f9172cSAndroid Build Coastguard Workerparameters are given to the wps_reg command:
169*03f9172cSAndroid Build Coastguard Worker
170*03f9172cSAndroid Build Coastguard Workerwpa_cli wps_reg <AP BSSID> <AP PIN> <new SSID> <auth> <encr> <new key>
171*03f9172cSAndroid Build Coastguard Workerexamples:
172*03f9172cSAndroid Build Coastguard Worker  wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 testing WPA2PSK CCMP 12345678
173*03f9172cSAndroid Build Coastguard Worker  wpa_cli wps_reg 02:34:56:78:9a:bc 12345670 clear OPEN NONE ""
174*03f9172cSAndroid Build Coastguard Worker
175*03f9172cSAndroid Build Coastguard Worker<auth> must be one of the following: OPEN WPAPSK WPA2PSK
176*03f9172cSAndroid Build Coastguard Worker<encr> must be one of the following: NONE WEP TKIP CCMP
177*03f9172cSAndroid Build Coastguard Worker
178*03f9172cSAndroid Build Coastguard Worker
179*03f9172cSAndroid Build Coastguard WorkerScanning
180*03f9172cSAndroid Build Coastguard Worker--------
181*03f9172cSAndroid Build Coastguard Worker
182*03f9172cSAndroid Build Coastguard WorkerScan results ('wpa_cli scan_results' or 'wpa_cli bss <idx>') include a
183*03f9172cSAndroid Build Coastguard Workerflags field that is used to indicate whether the BSS support WPS. If
184*03f9172cSAndroid Build Coastguard Workerthe AP support WPS, but has not recently activated a Registrar, [WPS]
185*03f9172cSAndroid Build Coastguard Workerflag will be included. If PIN method has been recently selected,
186*03f9172cSAndroid Build Coastguard Worker[WPS-PIN] is shown instead. Similarly, [WPS-PBC] is shown if PBC mode
187*03f9172cSAndroid Build Coastguard Workeris in progress. GUI programs can use these as triggers for suggesting
188*03f9172cSAndroid Build Coastguard Workera guided WPS configuration to the user. In addition, control interface
189*03f9172cSAndroid Build Coastguard Workermonitor events WPS-AP-AVAILABLE{,-PBC,-PIN} can be used to find out if
190*03f9172cSAndroid Build Coastguard Workerthere are WPS enabled APs in scan results without having to go through
191*03f9172cSAndroid Build Coastguard Workerall the details in the GUI. These notification could be used, e.g., to
192*03f9172cSAndroid Build Coastguard Workersuggest possible WPS connection to the user.
193*03f9172cSAndroid Build Coastguard Worker
194*03f9172cSAndroid Build Coastguard Worker
195*03f9172cSAndroid Build Coastguard Workerwpa_gui
196*03f9172cSAndroid Build Coastguard Worker-------
197*03f9172cSAndroid Build Coastguard Worker
198*03f9172cSAndroid Build Coastguard Workerwpa_gui-qt4 directory contains a sample GUI that shows an example of
199*03f9172cSAndroid Build Coastguard Workerhow WPS support can be integrated into the GUI. Its main window has a
200*03f9172cSAndroid Build Coastguard WorkerWPS tab that guides user through WPS registration with automatic AP
201*03f9172cSAndroid Build Coastguard Workerselection. In addition, it shows how WPS can be started manually by
202*03f9172cSAndroid Build Coastguard Workerselecting an AP from scan results.
203*03f9172cSAndroid Build Coastguard Worker
204*03f9172cSAndroid Build Coastguard Worker
205*03f9172cSAndroid Build Coastguard WorkerCredential processing
206*03f9172cSAndroid Build Coastguard Worker---------------------
207*03f9172cSAndroid Build Coastguard Worker
208*03f9172cSAndroid Build Coastguard WorkerBy default, wpa_supplicant processes received credentials and updates
209*03f9172cSAndroid Build Coastguard Workerits configuration internally. However, it is possible to
210*03f9172cSAndroid Build Coastguard Workercontrol these operations from external programs, if desired.
211*03f9172cSAndroid Build Coastguard Worker
212*03f9172cSAndroid Build Coastguard WorkerThis internal processing can be disabled with wps_cred_processing=1
213*03f9172cSAndroid Build Coastguard Workeroption. When this is used, an external program is responsible for
214*03f9172cSAndroid Build Coastguard Workerprocessing the credential attributes and updating wpa_supplicant
215*03f9172cSAndroid Build Coastguard Workerconfiguration based on them.
216*03f9172cSAndroid Build Coastguard Worker
217*03f9172cSAndroid Build Coastguard WorkerThe following control interface messages are sent out for external
218*03f9172cSAndroid Build Coastguard Workerprograms:
219*03f9172cSAndroid Build Coastguard Worker
220*03f9172cSAndroid Build Coastguard WorkerWPS-CRED-RECEIVED  <hexdump of Credential attribute(s)>
221*03f9172cSAndroid Build Coastguard WorkerFor example:
222*03f9172cSAndroid Build Coastguard Worker<2>WPS-CRED-RECEIVED 100e006f10260001011045000c6a6b6d2d7770732d74657374100300020020100f000200081027004030653462303435366332363666653064333961643135353461316634626637313234333761636664623766333939653534663166316230323061643434386235102000060266a0ee1727
223*03f9172cSAndroid Build Coastguard Worker
224*03f9172cSAndroid Build Coastguard Worker
225*03f9172cSAndroid Build Coastguard Workerwpa_supplicant as WPS External Registrar (ER)
226*03f9172cSAndroid Build Coastguard Worker---------------------------------------------
227*03f9172cSAndroid Build Coastguard Worker
228*03f9172cSAndroid Build Coastguard Workerwpa_supplicant can be used as a WPS ER to configure an AP or enroll
229*03f9172cSAndroid Build Coastguard Workernew Enrollee to join the network. This functionality uses UPnP and
230*03f9172cSAndroid Build Coastguard Workerrequires that a working IP connectivity is available with the AP (this
231*03f9172cSAndroid Build Coastguard Workercan be either over a wired or wireless connection).
232*03f9172cSAndroid Build Coastguard Worker
233*03f9172cSAndroid Build Coastguard WorkerSeparate wpa_supplicant process can be started for WPS ER
234*03f9172cSAndroid Build Coastguard Workeroperations. A special "none" driver can be used in such a case to
235*03f9172cSAndroid Build Coastguard Workerindicate that no local network interface is actually controlled. For
236*03f9172cSAndroid Build Coastguard Workerexample, the following command could be used to start the ER:
237*03f9172cSAndroid Build Coastguard Worker
238*03f9172cSAndroid Build Coastguard Workerwpa_supplicant -Dnone -c er.conf -ieth0
239*03f9172cSAndroid Build Coastguard Worker
240*03f9172cSAndroid Build Coastguard WorkerSample er.conf:
241*03f9172cSAndroid Build Coastguard Worker
242*03f9172cSAndroid Build Coastguard Workerctrl_interface=DIR=/var/run/wpa_supplicant GROUP=admin
243*03f9172cSAndroid Build Coastguard Workerdevice_name=WPS External Registrar
244*03f9172cSAndroid Build Coastguard Worker
245*03f9172cSAndroid Build Coastguard Workerwpa_cli commands for ER functionality:
246*03f9172cSAndroid Build Coastguard Worker
247*03f9172cSAndroid Build Coastguard Workerwps_er_start [IP address]
248*03f9172cSAndroid Build Coastguard Worker- start WPS ER functionality
249*03f9172cSAndroid Build Coastguard Worker- the optional IP address parameter can be used to filter operations only
250*03f9172cSAndroid Build Coastguard Worker  to include a single AP
251*03f9172cSAndroid Build Coastguard Worker- if run again while ER is active, the stored information (discovered APs
252*03f9172cSAndroid Build Coastguard Worker  and Enrollees) are shown again
253*03f9172cSAndroid Build Coastguard Worker
254*03f9172cSAndroid Build Coastguard Workerwps_er_stop
255*03f9172cSAndroid Build Coastguard Worker- stop WPS ER functionality
256*03f9172cSAndroid Build Coastguard Worker
257*03f9172cSAndroid Build Coastguard Workerwps_er_learn <UUID|BSSID> <AP PIN>
258*03f9172cSAndroid Build Coastguard Worker- learn AP configuration
259*03f9172cSAndroid Build Coastguard Worker
260*03f9172cSAndroid Build Coastguard Workerwps_er_set_config <UUID|BSSID> <network id>
261*03f9172cSAndroid Build Coastguard Worker- use AP configuration from a locally configured network (e.g., from
262*03f9172cSAndroid Build Coastguard Worker  wps_reg command); this does not change the AP's configuration, but
263*03f9172cSAndroid Build Coastguard Worker  only prepares a configuration to be used when enrolling a new device
264*03f9172cSAndroid Build Coastguard Worker  to the AP
265*03f9172cSAndroid Build Coastguard Worker
266*03f9172cSAndroid Build Coastguard Workerwps_er_config <UUID|BSSID> <AP PIN> <new SSID> <auth> <encr> <new key>
267*03f9172cSAndroid Build Coastguard Worker- examples:
268*03f9172cSAndroid Build Coastguard Worker  wps_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 testing WPA2PSK CCMP 12345678
269*03f9172cSAndroid Build Coastguard Worker  wpa_er_config 87654321-9abc-def0-1234-56789abc0002 12345670 clear OPEN NONE ""
270*03f9172cSAndroid Build Coastguard Worker
271*03f9172cSAndroid Build Coastguard Worker<auth> must be one of the following: OPEN WPAPSK WPA2PSK
272*03f9172cSAndroid Build Coastguard Worker<encr> must be one of the following: NONE WEP TKIP CCMP
273*03f9172cSAndroid Build Coastguard Worker
274*03f9172cSAndroid Build Coastguard Workerwps_er_pbc <Enrollee UUID|MAC address>
275*03f9172cSAndroid Build Coastguard Worker- accept an Enrollee PBC using External Registrar
276*03f9172cSAndroid Build Coastguard Worker
277*03f9172cSAndroid Build Coastguard Workerwps_er_pin <Enrollee UUID|"any"|MAC address> <PIN> [Enrollee MAC address]
278*03f9172cSAndroid Build Coastguard Worker- add an Enrollee PIN to External Registrar
279*03f9172cSAndroid Build Coastguard Worker- if Enrollee UUID is not known, "any" can be used to add a wildcard PIN
280*03f9172cSAndroid Build Coastguard Worker- if the MAC address of the enrollee is known, it should be configured
281*03f9172cSAndroid Build Coastguard Worker  to allow the AP to advertise list of authorized enrollees
282*03f9172cSAndroid Build Coastguard Worker
283*03f9172cSAndroid Build Coastguard WorkerWPS ER events:
284*03f9172cSAndroid Build Coastguard Worker
285*03f9172cSAndroid Build Coastguard WorkerWPS_EVENT_ER_AP_ADD
286*03f9172cSAndroid Build Coastguard Worker- WPS ER discovered an AP
287*03f9172cSAndroid Build Coastguard Worker
288*03f9172cSAndroid Build Coastguard WorkerWPS-ER-AP-ADD 87654321-9abc-def0-1234-56789abc0002 02:11:22:33:44:55 pri_dev_type=6-0050F204-1 wps_state=1 |Very friendly name|Company|Long description of the model|WAP|http://w1.fi/|http://w1.fi/hostapd/
289*03f9172cSAndroid Build Coastguard Worker
290*03f9172cSAndroid Build Coastguard WorkerWPS_EVENT_ER_AP_REMOVE
291*03f9172cSAndroid Build Coastguard Worker- WPS ER removed an AP entry
292*03f9172cSAndroid Build Coastguard Worker
293*03f9172cSAndroid Build Coastguard WorkerWPS-ER-AP-REMOVE 87654321-9abc-def0-1234-56789abc0002
294*03f9172cSAndroid Build Coastguard Worker
295*03f9172cSAndroid Build Coastguard WorkerWPS_EVENT_ER_ENROLLEE_ADD
296*03f9172cSAndroid Build Coastguard Worker- WPS ER discovered a new Enrollee
297*03f9172cSAndroid Build Coastguard Worker
298*03f9172cSAndroid Build Coastguard WorkerWPS-ER-ENROLLEE-ADD 2b7093f1-d6fb-5108-adbb-bea66bb87333 02:66:a0:ee:17:27 M1=1 config_methods=0x14d dev_passwd_id=0 pri_dev_type=1-0050F204-1 |Wireless Client|Company|cmodel|123|12345|
299*03f9172cSAndroid Build Coastguard Worker
300*03f9172cSAndroid Build Coastguard WorkerWPS_EVENT_ER_ENROLLEE_REMOVE
301*03f9172cSAndroid Build Coastguard Worker- WPS ER removed an Enrollee entry
302*03f9172cSAndroid Build Coastguard Worker
303*03f9172cSAndroid Build Coastguard WorkerWPS-ER-ENROLLEE-REMOVE 2b7093f1-d6fb-5108-adbb-bea66bb87333 02:66:a0:ee:17:27
304*03f9172cSAndroid Build Coastguard Worker
305*03f9172cSAndroid Build Coastguard WorkerWPS-ER-AP-SETTINGS
306*03f9172cSAndroid Build Coastguard Worker- WPS ER learned AP settings
307*03f9172cSAndroid Build Coastguard Worker
308*03f9172cSAndroid Build Coastguard WorkerWPS-ER-AP-SETTINGS uuid=fd91b4ec-e3fa-5891-a57d-8c59efeed1d2 ssid=test-wps auth_type=0x0020 encr_type=0x0008 key=12345678
309*03f9172cSAndroid Build Coastguard Worker
310*03f9172cSAndroid Build Coastguard Worker
311*03f9172cSAndroid Build Coastguard WorkerWPS with NFC
312*03f9172cSAndroid Build Coastguard Worker------------
313*03f9172cSAndroid Build Coastguard Worker
314*03f9172cSAndroid Build Coastguard WorkerWPS can be used with NFC-based configuration method. An NFC tag
315*03f9172cSAndroid Build Coastguard Workercontaining a password token from the Enrollee can be used to
316*03f9172cSAndroid Build Coastguard Workerauthenticate the connection instead of the PIN. In addition, an NFC tag
317*03f9172cSAndroid Build Coastguard Workerwith a configuration token can be used to transfer AP settings without
318*03f9172cSAndroid Build Coastguard Workergoing through the WPS protocol.
319*03f9172cSAndroid Build Coastguard Worker
320*03f9172cSAndroid Build Coastguard WorkerWhen the station acts as an Enrollee, a local NFC tag with a password
321*03f9172cSAndroid Build Coastguard Workertoken can be used by touching the NFC interface of a Registrar.
322*03f9172cSAndroid Build Coastguard Worker
323*03f9172cSAndroid Build Coastguard Worker"wps_nfc [BSSID]" command starts WPS protocol run with the local end as
324*03f9172cSAndroid Build Coastguard Workerthe Enrollee using the NFC password token that is either pre-configured
325*03f9172cSAndroid Build Coastguard Workerin the configuration file (wps_nfc_dev_pw_id, wps_nfc_dh_pubkey,
326*03f9172cSAndroid Build Coastguard Workerwps_nfc_dh_privkey, wps_nfc_dev_pw) or generated dynamically with
327*03f9172cSAndroid Build Coastguard Worker"wps_nfc_token <WPS|NDEF>" command. The included nfc_pw_token tool
328*03f9172cSAndroid Build Coastguard Worker(build with "make nfc_pw_token") can be used to generate NFC password
329*03f9172cSAndroid Build Coastguard Workertokens during manufacturing (each station needs to have its own random
330*03f9172cSAndroid Build Coastguard Workerkeys).
331*03f9172cSAndroid Build Coastguard Worker
332*03f9172cSAndroid Build Coastguard WorkerThe "wps_nfc_config_token <WPS/NDEF>" command can be used to build an
333*03f9172cSAndroid Build Coastguard WorkerNFC configuration token when wpa_supplicant is controlling an AP
334*03f9172cSAndroid Build Coastguard Workerinterface (AP or P2P GO). The output value from this command is a
335*03f9172cSAndroid Build Coastguard Workerhexdump of the current AP configuration (WPS parameter requests this to
336*03f9172cSAndroid Build Coastguard Workerinclude only the WPS attributes; NDEF parameter requests additional NDEF
337*03f9172cSAndroid Build Coastguard Workerencapsulation to be included). This data needs to be written to an NFC
338*03f9172cSAndroid Build Coastguard Workertag with an external program. Once written, the NFC configuration token
339*03f9172cSAndroid Build Coastguard Workercan be used to touch an NFC interface on a station to provision the
340*03f9172cSAndroid Build Coastguard Workercredentials needed to access the network.
341*03f9172cSAndroid Build Coastguard Worker
342*03f9172cSAndroid Build Coastguard WorkerThe "wps_nfc_config_token <WPS/NDEF> <network id>" command can be used
343*03f9172cSAndroid Build Coastguard Workerto build an NFC configuration token based on a locally configured
344*03f9172cSAndroid Build Coastguard Workernetwork.
345*03f9172cSAndroid Build Coastguard Worker
346*03f9172cSAndroid Build Coastguard WorkerIf the station includes NFC interface and reads an NFC tag with a MIME
347*03f9172cSAndroid Build Coastguard Workermedia type "application/vnd.wfa.wsc", the NDEF message payload (with or
348*03f9172cSAndroid Build Coastguard Workerwithout NDEF encapsulation) can be delivered to wpa_supplicant using the
349*03f9172cSAndroid Build Coastguard Workerfollowing wpa_cli command:
350*03f9172cSAndroid Build Coastguard Worker
351*03f9172cSAndroid Build Coastguard Workerwps_nfc_tag_read <hexdump of payload>
352*03f9172cSAndroid Build Coastguard Worker
353*03f9172cSAndroid Build Coastguard WorkerIf the NFC tag contains a configuration token, the network is added to
354*03f9172cSAndroid Build Coastguard Workerwpa_supplicant configuration. If the NFC tag contains a password token,
355*03f9172cSAndroid Build Coastguard Workerthe token is added to the WPS Registrar component. This information can
356*03f9172cSAndroid Build Coastguard Workerthen be used with wps_reg command (when the NFC password token was from
357*03f9172cSAndroid Build Coastguard Workeran AP) using a special value "nfc-pw" in place of the PIN parameter. If
358*03f9172cSAndroid Build Coastguard Workerthe ER functionality has been started (wps_er_start), the NFC password
359*03f9172cSAndroid Build Coastguard Workertoken is used to enable enrollment of a new station (that was the source
360*03f9172cSAndroid Build Coastguard Workerof the NFC password token).
361*03f9172cSAndroid Build Coastguard Worker
362*03f9172cSAndroid Build Coastguard Worker"nfc_get_handover_req <NDEF> <WPS-CR>" command can be used to build the
363*03f9172cSAndroid Build Coastguard WorkerWPS carrier record for a Handover Request Message for connection
364*03f9172cSAndroid Build Coastguard Workerhandover. The first argument selects the format of the output data and
365*03f9172cSAndroid Build Coastguard Workerthe second argument selects which type of connection handover is
366*03f9172cSAndroid Build Coastguard Workerrequested (WPS-CR = Wi-Fi handover as specified in WSC 2.0).
367*03f9172cSAndroid Build Coastguard Worker
368*03f9172cSAndroid Build Coastguard Worker"nfc_get_handover_sel <NDEF> <WPS> [UUID|BSSID]" command can be used to
369*03f9172cSAndroid Build Coastguard Workerbuild the contents of a Handover Select Message for connection handover
370*03f9172cSAndroid Build Coastguard Workerwhen this does not depend on the contents of the Handover Request
371*03f9172cSAndroid Build Coastguard WorkerMessage. The first argument selects the format of the output data and
372*03f9172cSAndroid Build Coastguard Workerthe second argument selects which type of connection handover is
373*03f9172cSAndroid Build Coastguard Workerrequested (WPS = Wi-Fi handover as specified in WSC 2.0). If the options
374*03f9172cSAndroid Build Coastguard WorkerUUID|BSSID argument is included, this is a request to build the handover
375*03f9172cSAndroid Build Coastguard Workermessage for the specified AP when wpa_supplicant is operating as a WPS
376*03f9172cSAndroid Build Coastguard WorkerER.
377*03f9172cSAndroid Build Coastguard Worker
378*03f9172cSAndroid Build Coastguard Worker"nfc_report_handover <INIT/RESP> WPS <carrier from handover request>
379*03f9172cSAndroid Build Coastguard Worker<carrier from handover select>" can be used as an alternative way for
380*03f9172cSAndroid Build Coastguard Workerreporting completed NFC connection handover. The first parameter
381*03f9172cSAndroid Build Coastguard Workerindicates whether the local device initiated or responded to the
382*03f9172cSAndroid Build Coastguard Workerconnection handover and the carrier records are the selected carrier
383*03f9172cSAndroid Build Coastguard Workerfrom the handover request and select messages as a hexdump.
384*03f9172cSAndroid Build Coastguard Worker
385*03f9172cSAndroid Build Coastguard WorkerThe "wps_er_nfc_config_token <WPS/NDEF> <UUID|BSSID>" command can be
386*03f9172cSAndroid Build Coastguard Workerused to build an NFC configuration token for the specified AP when
387*03f9172cSAndroid Build Coastguard Workerwpa_supplicant is operating as a WPS ER. The output value from this
388*03f9172cSAndroid Build Coastguard Workercommand is a hexdump of the selected AP configuration (WPS parameter
389*03f9172cSAndroid Build Coastguard Workerrequests this to include only the WPS attributes; NDEF parameter
390*03f9172cSAndroid Build Coastguard Workerrequests additional NDEF encapsulation to be included). This data needs
391*03f9172cSAndroid Build Coastguard Workerto be written to an NFC tag with an external program. Once written, the
392*03f9172cSAndroid Build Coastguard WorkerNFC configuration token can be used to touch an NFC interface on a
393*03f9172cSAndroid Build Coastguard Workerstation to provision the credentials needed to access the network.
394