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