From 39ee845f92d951e7b3e4fb1500f51decbe561bd6 Mon Sep 17 00:00:00 2001 From: Dmitry Shmidt Date: Sat, 25 Aug 2012 10:23:22 +0300 Subject: [PATCH] wpa_supplicant: Add bss_flush command to invalidate scan results Signed-off-by: Dmitry Shmidt --- wpa_supplicant/ctrl_iface.c | 16 ++++++++++++++++ wpa_supplicant/wpa_cli.c | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 5de4f7b5b..ec61b844a 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -2884,6 +2884,19 @@ static int wpa_supplicant_ctrl_iface_bss_expire_count( } +static int wpa_supplicant_ctrl_iface_bss_flush( + struct wpa_supplicant *wpa_s, char *cmd) +{ + int flush_age = atoi(cmd); + + if (flush_age == 0) + wpa_bss_flush(wpa_s); + else + wpa_bss_flush_by_age(wpa_s, flush_age); + return 0; +} + + static void wpa_supplicant_ctrl_iface_drop_sa(struct wpa_supplicant *wpa_s) { wpa_printf(MSG_DEBUG, "Dropping SA without deauthentication"); @@ -4578,6 +4591,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, if (wpa_supplicant_ctrl_iface_bss_expire_count(wpa_s, buf + 17)) reply_len = -1; + } else if (os_strncmp(buf, "BSS_FLUSH ", 10) == 0) { + if (wpa_supplicant_ctrl_iface_bss_flush(wpa_s, buf + 10)) + reply_len = -1; #ifdef CONFIG_TDLS } else if (os_strncmp(buf, "TDLS_DISCOVER ", 14) == 0) { if (wpa_supplicant_ctrl_iface_tdls_discover(wpa_s, buf + 14)) diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c index 8e89281bd..53ed05daa 100644 --- a/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c @@ -656,6 +656,23 @@ static int wpa_cli_cmd_bss_expire_count(struct wpa_ctrl *ctrl, int argc, } +static int wpa_cli_cmd_bss_flush(struct wpa_ctrl *ctrl, int argc, char *argv[]) +{ + char cmd[256]; + int res; + + if (argc < 1) + res = os_snprintf(cmd, sizeof(cmd), "BSS_FLUSH 0"); + else + res = os_snprintf(cmd, sizeof(cmd), "BSS_FLUSH %s", argv[0]); + if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { + printf("Too long BSS_FLUSH command.\n"); + return -1; + } + return wpa_ctrl_command(ctrl, cmd); +} + + static int wpa_cli_cmd_stkstart(struct wpa_ctrl *ctrl, int argc, char *argv[]) { @@ -2264,6 +2281,9 @@ static struct wpa_cli_cmd wpa_cli_commands[] = { { "bss_expire_count", wpa_cli_cmd_bss_expire_count, cli_cmd_flag_none, " = set BSS expiration scan count parameter" }, + { "bss_flush", wpa_cli_cmd_bss_flush, + cli_cmd_flag_none, + " = set BSS flush age (0 by default)" }, { "stkstart", wpa_cli_cmd_stkstart, cli_cmd_flag_none, " = request STK negotiation with " },