WPS: Add 'wpa_cli wps_pin get' for generating random PINs

This can be used, e.g., in a UI to generate a PIN without
starting WPS (or P2P) operation.
This commit is contained in:
Jouni Malinen 2011-09-02 21:29:06 +03:00 committed by Jouni Malinen
parent 64fa840a97
commit 98aa7ca5d8
2 changed files with 10 additions and 1 deletions

View file

@ -127,6 +127,11 @@ This starts the WPS negotiation in the same way as above with the
generated PIN. generated PIN.
If a random PIN is needed for a user interface, "wpa_cli wps_pin get"
can be used to generate a new PIN without starting WPS negotiation.
This random PIN can then be passed as an argument to another wps_pin
call when the actual operation should be started.
If the client design wants to support optional WPS PBC mode, this can If the client design wants to support optional WPS PBC mode, this can
be enabled by either a physical button in the client device or a be enabled by either a physical button in the client device or a
virtual button in the user interface. The PBC operation requires that virtual button in the user interface. The PBC operation requires that

View file

@ -340,7 +340,10 @@ static int wpa_supplicant_ctrl_iface_wps_pin(struct wpa_supplicant *wpa_s,
if (os_strcmp(cmd, "any") == 0) if (os_strcmp(cmd, "any") == 0)
_bssid = NULL; _bssid = NULL;
else if (hwaddr_aton(cmd, bssid)) { else if (os_strcmp(cmd, "get") == 0) {
ret = wps_generate_pin();
goto done;
} else if (hwaddr_aton(cmd, bssid)) {
wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: invalid BSSID '%s'", wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: invalid BSSID '%s'",
cmd); cmd);
return -1; return -1;
@ -367,6 +370,7 @@ static int wpa_supplicant_ctrl_iface_wps_pin(struct wpa_supplicant *wpa_s,
if (ret < 0) if (ret < 0)
return -1; return -1;
done:
/* Return the generated PIN */ /* Return the generated PIN */
ret = os_snprintf(buf, buflen, "%08d", ret); ret = os_snprintf(buf, buflen, "%08d", ret);
if (ret < 0 || (size_t) ret >= buflen) if (ret < 0 || (size_t) ret >= buflen)