FST: wpa_supplicant control interface
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
9fbfd1b0d4
commit
3794af2dc1
2 changed files with 72 additions and 0 deletions
|
@ -279,6 +279,7 @@ extern "C" {
|
||||||
#define WPA_BSS_MASK_MESH_SCAN BIT(18)
|
#define WPA_BSS_MASK_MESH_SCAN BIT(18)
|
||||||
#define WPA_BSS_MASK_SNR BIT(19)
|
#define WPA_BSS_MASK_SNR BIT(19)
|
||||||
#define WPA_BSS_MASK_EST_THROUGHPUT BIT(20)
|
#define WPA_BSS_MASK_EST_THROUGHPUT BIT(20)
|
||||||
|
#define WPA_BSS_MASK_FST BIT(21)
|
||||||
|
|
||||||
|
|
||||||
/* VENDOR_ELEM_* frame id values */
|
/* VENDOR_ELEM_* frame id values */
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "rsn_supp/pmksa_cache.h"
|
#include "rsn_supp/pmksa_cache.h"
|
||||||
#include "l2_packet/l2_packet.h"
|
#include "l2_packet/l2_packet.h"
|
||||||
#include "wps/wps.h"
|
#include "wps/wps.h"
|
||||||
|
#include "fst/fst_ctrl_iface.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wpa_supplicant_i.h"
|
#include "wpa_supplicant_i.h"
|
||||||
#include "driver_i.h"
|
#include "driver_i.h"
|
||||||
|
@ -4291,6 +4292,15 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
|
||||||
pos += ret;
|
pos += ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (mask & WPA_BSS_MASK_FST) {
|
||||||
|
ret = fst_ctrl_iface_mb_info(bss->bssid, pos, end - pos);
|
||||||
|
if (ret < 0 || ret >= end - pos)
|
||||||
|
return 0;
|
||||||
|
pos += ret;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
if (mask & WPA_BSS_MASK_DELIM) {
|
if (mask & WPA_BSS_MASK_DELIM) {
|
||||||
ret = os_snprintf(pos, end - pos, "====\n");
|
ret = os_snprintf(pos, end - pos, "====\n");
|
||||||
if (os_snprintf_error(end - pos, ret))
|
if (os_snprintf_error(end - pos, ret))
|
||||||
|
@ -9130,6 +9140,55 @@ static int wpas_global_ctrl_iface_status(struct wpa_global *global,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
|
||||||
|
static int wpas_global_ctrl_iface_fst_attach(struct wpa_global *global,
|
||||||
|
char *cmd, char *buf,
|
||||||
|
size_t reply_size)
|
||||||
|
{
|
||||||
|
char ifname[IFNAMSIZ + 1];
|
||||||
|
struct fst_iface_cfg cfg;
|
||||||
|
struct wpa_supplicant *wpa_s;
|
||||||
|
struct fst_wpa_obj iface_obj;
|
||||||
|
|
||||||
|
if (!fst_parse_attach_command(cmd, ifname, sizeof(ifname), &cfg)) {
|
||||||
|
wpa_s = wpa_supplicant_get_iface(global, ifname);
|
||||||
|
if (wpa_s) {
|
||||||
|
fst_wpa_supplicant_fill_iface_obj(wpa_s, &iface_obj);
|
||||||
|
wpa_s->fst = fst_attach(ifname, wpa_s->own_addr,
|
||||||
|
&iface_obj, &cfg);
|
||||||
|
if (wpa_s->fst)
|
||||||
|
return os_snprintf(buf, reply_size, "OK\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int wpas_global_ctrl_iface_fst_detach(struct wpa_global *global,
|
||||||
|
char *cmd, char *buf,
|
||||||
|
size_t reply_size)
|
||||||
|
{
|
||||||
|
char ifname[IFNAMSIZ + 1];
|
||||||
|
struct wpa_supplicant *wpa_s;
|
||||||
|
|
||||||
|
if (!fst_parse_detach_command(cmd, ifname, sizeof(ifname))) {
|
||||||
|
wpa_s = wpa_supplicant_get_iface(global, ifname);
|
||||||
|
if (wpa_s) {
|
||||||
|
if (!fst_iface_detach(ifname)) {
|
||||||
|
wpa_s->fst = NULL;
|
||||||
|
return os_snprintf(buf, reply_size, "OK\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
|
|
||||||
char * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global,
|
char * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global,
|
||||||
char *buf, size_t *resp_len)
|
char *buf, size_t *resp_len)
|
||||||
{
|
{
|
||||||
|
@ -9181,6 +9240,18 @@ char * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global,
|
||||||
} else if (os_strcmp(buf, "INTERFACES") == 0) {
|
} else if (os_strcmp(buf, "INTERFACES") == 0) {
|
||||||
reply_len = wpa_supplicant_global_iface_interfaces(
|
reply_len = wpa_supplicant_global_iface_interfaces(
|
||||||
global, reply, reply_size);
|
global, reply, reply_size);
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
} else if (os_strncmp(buf, "FST-ATTACH ", 11) == 0) {
|
||||||
|
reply_len = wpas_global_ctrl_iface_fst_attach(global, buf + 11,
|
||||||
|
reply,
|
||||||
|
reply_size);
|
||||||
|
} else if (os_strncmp(buf, "FST-DETACH ", 11) == 0) {
|
||||||
|
reply_len = wpas_global_ctrl_iface_fst_detach(global, buf + 11,
|
||||||
|
reply,
|
||||||
|
reply_size);
|
||||||
|
} else if (os_strncmp(buf, "FST-MANAGER ", 12) == 0) {
|
||||||
|
reply_len = fst_ctrl_iface_receive(buf + 12, reply, reply_size);
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
} else if (os_strcmp(buf, "TERMINATE") == 0) {
|
} else if (os_strcmp(buf, "TERMINATE") == 0) {
|
||||||
wpa_supplicant_terminate_proc(global);
|
wpa_supplicant_terminate_proc(global);
|
||||||
} else if (os_strcmp(buf, "SUSPEND") == 0) {
|
} else if (os_strcmp(buf, "SUSPEND") == 0) {
|
||||||
|
|
Loading…
Reference in a new issue