Add deauthenticate/disassociate ctrl_iface commands
This commit is contained in:
parent
e820cf952f
commit
90a3206a14
2 changed files with 78 additions and 0 deletions
|
@ -155,6 +155,48 @@ static int hostapd_ctrl_iface_new_sta(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_ctrl_iface_deauthenticate(struct hostapd_data *hapd,
|
||||||
|
const char *txtaddr)
|
||||||
|
{
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
struct sta_info *sta;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG, "CTRL_IFACE DEAUTHENTICATE %s", txtaddr);
|
||||||
|
|
||||||
|
if (hwaddr_aton(txtaddr, addr))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
hapd->drv.sta_deauth(hapd, addr, WLAN_REASON_PREV_AUTH_NOT_VALID);
|
||||||
|
sta = ap_get_sta(hapd, addr);
|
||||||
|
if (sta)
|
||||||
|
ap_sta_deauthenticate(hapd, sta,
|
||||||
|
WLAN_REASON_PREV_AUTH_NOT_VALID);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_ctrl_iface_disassociate(struct hostapd_data *hapd,
|
||||||
|
const char *txtaddr)
|
||||||
|
{
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
struct sta_info *sta;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG, "CTRL_IFACE DISASSOCIATE %s", txtaddr);
|
||||||
|
|
||||||
|
if (hwaddr_aton(txtaddr, addr))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
hapd->drv.sta_disassoc(hapd, addr, WLAN_REASON_PREV_AUTH_NOT_VALID);
|
||||||
|
sta = ap_get_sta(hapd, addr);
|
||||||
|
if (sta)
|
||||||
|
ap_sta_disassociate(hapd, sta,
|
||||||
|
WLAN_REASON_PREV_AUTH_NOT_VALID);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
#ifdef NEED_AP_MLME
|
#ifdef NEED_AP_MLME
|
||||||
static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd,
|
static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd,
|
||||||
|
@ -309,6 +351,12 @@ static void hostapd_ctrl_iface_receive(int sock, void *eloop_ctx,
|
||||||
} else if (os_strncmp(buf, "NEW_STA ", 8) == 0) {
|
} else if (os_strncmp(buf, "NEW_STA ", 8) == 0) {
|
||||||
if (hostapd_ctrl_iface_new_sta(hapd, buf + 8))
|
if (hostapd_ctrl_iface_new_sta(hapd, buf + 8))
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
} else if (os_strncmp(buf, "DEAUTHENTICATE ", 15) == 0) {
|
||||||
|
if (hostapd_ctrl_iface_deauthenticate(hapd, buf + 15))
|
||||||
|
reply_len = -1;
|
||||||
|
} else if (os_strncmp(buf, "DISASSOCIATE ", 13) == 0) {
|
||||||
|
if (hostapd_ctrl_iface_disassociate(hapd, buf + 13))
|
||||||
|
reply_len = -1;
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
#ifdef NEED_AP_MLME
|
#ifdef NEED_AP_MLME
|
||||||
} else if (os_strncmp(buf, "SA_QUERY ", 9) == 0) {
|
} else if (os_strncmp(buf, "SA_QUERY ", 9) == 0) {
|
||||||
|
|
|
@ -242,6 +242,34 @@ static int hostapd_cli_cmd_new_sta(struct wpa_ctrl *ctrl, int argc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_cli_cmd_deauthenticate(struct wpa_ctrl *ctrl, int argc,
|
||||||
|
char *argv[])
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
if (argc != 1) {
|
||||||
|
printf("Invalid 'deauthenticate' command - exactly one "
|
||||||
|
"argument, STA address, is required.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "DEAUTHENTICATE %s", argv[0]);
|
||||||
|
return wpa_ctrl_command(ctrl, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int hostapd_cli_cmd_disassociate(struct wpa_ctrl *ctrl, int argc,
|
||||||
|
char *argv[])
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
if (argc != 1) {
|
||||||
|
printf("Invalid 'disassociate' command - exactly one "
|
||||||
|
"argument, STA address, is required.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "DISASSOCIATE %s", argv[0]);
|
||||||
|
return wpa_ctrl_command(ctrl, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc,
|
static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
|
@ -467,6 +495,8 @@ static struct hostapd_cli_cmd hostapd_cli_commands[] = {
|
||||||
{ "sta", hostapd_cli_cmd_sta },
|
{ "sta", hostapd_cli_cmd_sta },
|
||||||
{ "all_sta", hostapd_cli_cmd_all_sta },
|
{ "all_sta", hostapd_cli_cmd_all_sta },
|
||||||
{ "new_sta", hostapd_cli_cmd_new_sta },
|
{ "new_sta", hostapd_cli_cmd_new_sta },
|
||||||
|
{ "deauthenticate", hostapd_cli_cmd_deauthenticate },
|
||||||
|
{ "disassociate", hostapd_cli_cmd_disassociate },
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
{ "sa_query", hostapd_cli_cmd_sa_query },
|
{ "sa_query", hostapd_cli_cmd_sa_query },
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
|
|
Loading…
Reference in a new issue