mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
WPS: Add control interface command for fetching latest status
The new wps_get_status command can be used to fetch the result of the latest WPS operation and the current PBC state from hostapd. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
e96872a4f2
commit
3351a3847c
@ -487,6 +487,75 @@ static int hostapd_ctrl_iface_wps_config(struct hostapd_data *hapd, char *txt)
|
|||||||
|
|
||||||
return hostapd_wps_config_ap(hapd, ssid, auth, encr, key);
|
return hostapd_wps_config_ap(hapd, ssid, auth, encr, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char * pbc_status_str(enum pbc_status status)
|
||||||
|
{
|
||||||
|
switch (status) {
|
||||||
|
case WPS_PBC_STATUS_DISABLE:
|
||||||
|
return "Disabled";
|
||||||
|
case WPS_PBC_STATUS_ACTIVE:
|
||||||
|
return "Active";
|
||||||
|
case WPS_PBC_STATUS_TIMEOUT:
|
||||||
|
return "Timed-out";
|
||||||
|
case WPS_PBC_STATUS_OVERLAP:
|
||||||
|
return "Overlap";
|
||||||
|
default:
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_ctrl_iface_wps_get_status(struct hostapd_data *hapd,
|
||||||
|
char *buf, size_t buflen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
char *pos, *end;
|
||||||
|
|
||||||
|
pos = buf;
|
||||||
|
end = buf + buflen;
|
||||||
|
|
||||||
|
ret = os_snprintf(pos, end - pos, "PBC Status: %s\n",
|
||||||
|
pbc_status_str(hapd->wps_stats.pbc_status));
|
||||||
|
|
||||||
|
if (ret < 0 || ret >= end - pos)
|
||||||
|
return pos - buf;
|
||||||
|
pos += ret;
|
||||||
|
|
||||||
|
ret = os_snprintf(pos, end - pos, "Last WPS result: %s\n",
|
||||||
|
(hapd->wps_stats.status == WPS_STATUS_SUCCESS ?
|
||||||
|
"Success":
|
||||||
|
(hapd->wps_stats.status == WPS_STATUS_FAILURE ?
|
||||||
|
"Failed" : "None")));
|
||||||
|
|
||||||
|
if (ret < 0 || ret >= end - pos)
|
||||||
|
return pos - buf;
|
||||||
|
pos += ret;
|
||||||
|
|
||||||
|
/* If status == Failure - Add possible Reasons */
|
||||||
|
if(hapd->wps_stats.status == WPS_STATUS_FAILURE &&
|
||||||
|
hapd->wps_stats.failure_reason > 0) {
|
||||||
|
ret = os_snprintf(pos, end - pos,
|
||||||
|
"Failure Reason: %s\n",
|
||||||
|
wps_ei_str(hapd->wps_stats.failure_reason));
|
||||||
|
|
||||||
|
if (ret < 0 || ret >= end - pos)
|
||||||
|
return pos - buf;
|
||||||
|
pos += ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hapd->wps_stats.status) {
|
||||||
|
ret = os_snprintf(pos, end - pos, "Peer Address: " MACSTR "\n",
|
||||||
|
MAC2STR(hapd->wps_stats.peer_addr));
|
||||||
|
|
||||||
|
if (ret < 0 || ret >= end - pos)
|
||||||
|
return pos - buf;
|
||||||
|
pos += ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos - buf;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
|
|
||||||
|
|
||||||
@ -1003,6 +1072,9 @@ static void hostapd_ctrl_iface_receive(int sock, void *eloop_ctx,
|
|||||||
} else if (os_strncmp(buf, "WPS_CONFIG ", 11) == 0) {
|
} else if (os_strncmp(buf, "WPS_CONFIG ", 11) == 0) {
|
||||||
if (hostapd_ctrl_iface_wps_config(hapd, buf + 11) < 0)
|
if (hostapd_ctrl_iface_wps_config(hapd, buf + 11) < 0)
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
} else if (os_strncmp(buf, "WPS_GET_STATUS", 13) == 0) {
|
||||||
|
reply_len = hostapd_ctrl_iface_wps_get_status(hapd, reply,
|
||||||
|
reply_size);
|
||||||
#ifdef CONFIG_WPS_NFC
|
#ifdef CONFIG_WPS_NFC
|
||||||
} else if (os_strncmp(buf, "WPS_NFC_TAG_READ ", 17) == 0) {
|
} else if (os_strncmp(buf, "WPS_NFC_TAG_READ ", 17) == 0) {
|
||||||
if (hostapd_ctrl_iface_wps_nfc_tag_read(hapd, buf + 17))
|
if (hostapd_ctrl_iface_wps_nfc_tag_read(hapd, buf + 17))
|
||||||
|
@ -79,6 +79,7 @@ static const char *commands_help =
|
|||||||
#endif /* CONFIG_WPS_NFC */
|
#endif /* CONFIG_WPS_NFC */
|
||||||
" wps_ap_pin <cmd> [params..] enable/disable AP PIN\n"
|
" wps_ap_pin <cmd> [params..] enable/disable AP PIN\n"
|
||||||
" wps_config <SSID> <auth> <encr> <key> configure AP\n"
|
" wps_config <SSID> <auth> <encr> <key> configure AP\n"
|
||||||
|
" wps_get_status show current WPS status\n"
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
" get_config show current configuration\n"
|
" get_config show current configuration\n"
|
||||||
" help show this usage help\n"
|
" help show this usage help\n"
|
||||||
@ -517,6 +518,13 @@ static int hostapd_cli_cmd_wps_ap_pin(struct wpa_ctrl *ctrl, int argc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_cli_cmd_wps_get_status(struct wpa_ctrl *ctrl, int argc,
|
||||||
|
char *argv[])
|
||||||
|
{
|
||||||
|
return wpa_ctrl_command(ctrl, "WPS_GET_STATUS");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc,
|
static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
{
|
{
|
||||||
@ -818,6 +826,7 @@ static struct hostapd_cli_cmd hostapd_cli_commands[] = {
|
|||||||
#endif /* CONFIG_WPS_NFC */
|
#endif /* CONFIG_WPS_NFC */
|
||||||
{ "wps_ap_pin", hostapd_cli_cmd_wps_ap_pin },
|
{ "wps_ap_pin", hostapd_cli_cmd_wps_ap_pin },
|
||||||
{ "wps_config", hostapd_cli_cmd_wps_config },
|
{ "wps_config", hostapd_cli_cmd_wps_config },
|
||||||
|
{ "wps_get_status", hostapd_cli_cmd_wps_get_status },
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
{ "disassoc_imminent", hostapd_cli_cmd_disassoc_imminent },
|
{ "disassoc_imminent", hostapd_cli_cmd_disassoc_imminent },
|
||||||
{ "ess_disassoc", hostapd_cli_cmd_ess_disassoc },
|
{ "ess_disassoc", hostapd_cli_cmd_ess_disassoc },
|
||||||
|
Loading…
Reference in New Issue
Block a user