Add STOP_AP control interface command
This is mainly for testing purposes to allow beaconing to be stopped without clearing AP state in hostapd. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
6b00512164
commit
99650cadc9
7 changed files with 33 additions and 1 deletions
|
@ -1955,6 +1955,9 @@ static void hostapd_ctrl_iface_receive(int sock, void *eloop_ctx,
|
||||||
} else if (os_strncmp(buf, "DISASSOCIATE ", 13) == 0) {
|
} else if (os_strncmp(buf, "DISASSOCIATE ", 13) == 0) {
|
||||||
if (hostapd_ctrl_iface_disassociate(hapd, buf + 13))
|
if (hostapd_ctrl_iface_disassociate(hapd, buf + 13))
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
} else if (os_strcmp(buf, "STOP_AP") == 0) {
|
||||||
|
if (hostapd_ctrl_iface_stop_ap(hapd))
|
||||||
|
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) {
|
||||||
|
|
|
@ -335,4 +335,11 @@ static inline int hostapd_drv_vendor_cmd(struct hostapd_data *hapd,
|
||||||
data_len, buf);
|
data_len, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int hostapd_drv_stop_ap(struct hostapd_data *hapd)
|
||||||
|
{
|
||||||
|
if (hapd->driver == NULL || hapd->driver->stop_ap == NULL)
|
||||||
|
return 0;
|
||||||
|
return hapd->driver->stop_ap(hapd->drv_priv);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* AP_DRV_OPS */
|
#endif /* AP_DRV_OPS */
|
||||||
|
|
|
@ -537,3 +537,9 @@ int hostapd_parse_csa_settings(const char *pos,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd)
|
||||||
|
{
|
||||||
|
return hostapd_drv_stop_ap(hapd);
|
||||||
|
}
|
||||||
|
|
|
@ -23,6 +23,6 @@ int hostapd_ctrl_iface_status(struct hostapd_data *hapd, char *buf,
|
||||||
size_t buflen);
|
size_t buflen);
|
||||||
int hostapd_parse_csa_settings(const char *pos,
|
int hostapd_parse_csa_settings(const char *pos,
|
||||||
struct csa_settings *settings);
|
struct csa_settings *settings);
|
||||||
|
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd);
|
||||||
|
|
||||||
#endif /* CTRL_IFACE_AP_H */
|
#endif /* CTRL_IFACE_AP_H */
|
||||||
|
|
|
@ -1238,3 +1238,14 @@ int wpas_ap_wps_add_nfc_pw(struct wpa_supplicant *wpa_s, u16 pw_id,
|
||||||
pw ? wpabuf_len(pw) : 0, 1);
|
pw ? wpabuf_len(pw) : 0, 1);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_WPS_NFC */
|
#endif /* CONFIG_WPS_NFC */
|
||||||
|
|
||||||
|
|
||||||
|
int wpas_ap_stop_ap(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
struct hostapd_data *hapd;
|
||||||
|
|
||||||
|
if (!wpa_s->ap_iface)
|
||||||
|
return -1;
|
||||||
|
hapd = wpa_s->ap_iface->bss[0];
|
||||||
|
return hostapd_ctrl_iface_stop_ap(hapd);
|
||||||
|
}
|
||||||
|
|
|
@ -80,4 +80,6 @@ void wpa_supplicant_conf_ap_ht(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid,
|
struct wpa_ssid *ssid,
|
||||||
struct hostapd_config *conf);
|
struct hostapd_config *conf);
|
||||||
|
|
||||||
|
int wpas_ap_stop_ap(struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
#endif /* AP_H */
|
#endif /* AP_H */
|
||||||
|
|
|
@ -8278,6 +8278,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
|
||||||
} else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) {
|
} else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) {
|
||||||
if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12))
|
if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12))
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
} else if (os_strcmp(buf, "STOP_AP") == 0) {
|
||||||
|
if (wpas_ap_stop_ap(wpa_s))
|
||||||
|
reply_len = -1;
|
||||||
#endif /* CONFIG_AP */
|
#endif /* CONFIG_AP */
|
||||||
} else if (os_strcmp(buf, "SUSPEND") == 0) {
|
} else if (os_strcmp(buf, "SUSPEND") == 0) {
|
||||||
wpas_notify_suspend(wpa_s->global);
|
wpas_notify_suspend(wpa_s->global);
|
||||||
|
|
Loading…
Reference in a new issue