Browse Source

wlantest: Add flush command for dropping all BSS data

Jouni Malinen 14 years ago
parent
commit
d356bd630b
6 changed files with 29 additions and 3 deletions
  1. 8 0
      wlantest/bss.c
  2. 11 0
      wlantest/ctrl.c
  3. 1 3
      wlantest/wlantest.c
  4. 1 0
      wlantest/wlantest.h
  5. 7 0
      wlantest/wlantest_cli.c
  6. 1 0
      wlantest/wlantest_ctrl.h

+ 8 - 0
wlantest/bss.c

@@ -252,3 +252,11 @@ void bss_update(struct wlantest *wt, struct wlantest_bss *bss,
 		   bss->rsn_capab & WPA_CAPABILITY_PEERKEY_ENABLED ?
 		   "PEERKEY " : "");
 }
+
+
+void bss_flush(struct wlantest *wt)
+{
+	struct wlantest_bss *bss, *n;
+	dl_list_for_each_safe(bss, n, &wt->bss, struct wlantest_bss, list)
+		bss_deinit(bss);
+}

+ 11 - 0
wlantest/ctrl.c

@@ -149,6 +149,14 @@ static void ctrl_list_sta(struct wlantest *wt, int sock, u8 *cmd, size_t clen)
 }
 
 
+static void ctrl_flush(struct wlantest *wt, int sock)
+{
+	wpa_printf(MSG_DEBUG, "Drop all collected BSS data");
+	bss_flush(wt);
+	ctrl_send_simple(wt, sock, WLANTEST_CTRL_SUCCESS);
+}
+
+
 static void ctrl_read(int sock, void *eloop_ctx, void *sock_ctx)
 {
 	struct wlantest *wt = eloop_ctx;
@@ -193,6 +201,9 @@ static void ctrl_read(int sock, void *eloop_ctx, void *sock_ctx)
 	case WLANTEST_CTRL_LIST_STA:
 		ctrl_list_sta(wt, sock, buf + 4, len - 4);
 		break;
+	case WLANTEST_CTRL_FLUSH:
+		ctrl_flush(wt, sock);
+		break;
 	default:
 		ctrl_send_simple(wt, sock, WLANTEST_CTRL_UNKNOWN_CMD);
 		break;

+ 1 - 3
wlantest/wlantest.c

@@ -78,7 +78,6 @@ void radius_deinit(struct wlantest_radius *r)
 
 static void wlantest_deinit(struct wlantest *wt)
 {
-	struct wlantest_bss *bss, *n;
 	struct wlantest_passphrase *p, *pn;
 	struct wlantest_radius_secret *s, *sn;
 	struct wlantest_radius *r, *rn;
@@ -88,8 +87,7 @@ static void wlantest_deinit(struct wlantest *wt)
 		ctrl_deinit(wt);
 	if (wt->monitor_sock >= 0)
 		monitor_deinit(wt);
-	dl_list_for_each_safe(bss, n, &wt->bss, struct wlantest_bss, list)
-		bss_deinit(bss);
+	bss_flush(wt);
 	dl_list_for_each_safe(p, pn, &wt->passphrase,
 			      struct wlantest_passphrase, list)
 		passphrase_deinit(p);

+ 1 - 0
wlantest/wlantest.h

@@ -148,6 +148,7 @@ struct wlantest_bss * bss_get(struct wlantest *wt, const u8 *bssid);
 void bss_deinit(struct wlantest_bss *bss);
 void bss_update(struct wlantest *wt, struct wlantest_bss *bss,
 		struct ieee802_11_elems *elems);
+void bss_flush(struct wlantest *wt);
 void pmk_deinit(struct wlantest_pmk *pmk);
 
 struct wlantest_sta * sta_get(struct wlantest_bss *bss, const u8 *addr);

+ 7 - 0
wlantest/wlantest_cli.c

@@ -163,6 +163,12 @@ static int cmd_list_sta(int s, int argc, char *argv[])
 }
 
 
+static int cmd_flush(int s, int argc, char *argv[])
+{
+	return cmd_simple(s, WLANTEST_CTRL_FLUSH);
+}
+
+
 struct wlantest_cli_cmd {
 	const char *cmd;
 	int (*handler)(int s, int argc, char *argv[]);
@@ -174,6 +180,7 @@ static const struct wlantest_cli_cmd wlantest_cli_commands[] = {
 	{ "terminate", cmd_terminate, "= terminate wlantest" },
 	{ "list_bss", cmd_list_bss, "= get BSS list" },
 	{ "list_sta", cmd_list_sta, "<BSSID> = get STA list" },
+	{ "flush", cmd_flush, "= drop all collected BSS data" },
 	{ NULL, NULL, NULL }
 };
 

+ 1 - 0
wlantest/wlantest_ctrl.h

@@ -28,6 +28,7 @@ enum wlantest_ctrl_cmd {
 	WLANTEST_CTRL_TERMINATE,
 	WLANTEST_CTRL_LIST_BSS,
 	WLANTEST_CTRL_LIST_STA,
+	WLANTEST_CTRL_FLUSH,
 };
 
 enum wlantest_ctrl_attr {