]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wlantest: Add support for injecting Deauth/Disassoc frames
authorJouni Malinen <jouni.malinen@atheros.com>
Fri, 19 Nov 2010 14:22:44 +0000 (16:22 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 19 Nov 2010 14:22:44 +0000 (16:22 +0200)
wlantest/ctrl.c

index 5d818c3b0ab7076555421c8cfb8136d0d391d958..d5cea99b449f48d905b5e3da58b3728f6998292e 100644 (file)
@@ -403,6 +403,56 @@ static int ctrl_inject_auth(struct wlantest *wt, struct wlantest_bss *bss,
 }
 
 
+static int ctrl_inject_deauth(struct wlantest *wt, struct wlantest_bss *bss,
+                             struct wlantest_sta *sta, int sender_ap,
+                             enum wlantest_inject_protection prot)
+{
+       struct ieee80211_mgmt mgmt;
+
+       if (sender_ap) {
+               if (sta)
+                       wpa_printf(MSG_INFO, "INJECT: Deauth " MACSTR " -> "
+                                  MACSTR,
+                                  MAC2STR(bss->bssid), MAC2STR(sta->addr));
+               else
+                       wpa_printf(MSG_INFO, "INJECT: Deauth " MACSTR
+                                  " -> broadcast", MAC2STR(bss->bssid));
+       } else
+               wpa_printf(MSG_INFO, "INJECT: Deauth " MACSTR " -> " MACSTR,
+                          MAC2STR(sta->addr), MAC2STR(bss->bssid));
+       build_mgmt_hdr(&mgmt, bss, sta, sender_ap, WLAN_FC_STYPE_DEAUTH);
+
+       mgmt.u.deauth.reason_code = host_to_le16(WLAN_REASON_UNSPECIFIED);
+
+       return wlantest_inject(wt, bss, sta, (u8 *) &mgmt, 24 + 2, prot);
+}
+
+
+static int ctrl_inject_disassoc(struct wlantest *wt, struct wlantest_bss *bss,
+                               struct wlantest_sta *sta, int sender_ap,
+                               enum wlantest_inject_protection prot)
+{
+       struct ieee80211_mgmt mgmt;
+
+       if (sender_ap) {
+               if (sta)
+                       wpa_printf(MSG_INFO, "INJECT: Disassoc " MACSTR " -> "
+                                  MACSTR,
+                                  MAC2STR(bss->bssid), MAC2STR(sta->addr));
+               else
+                       wpa_printf(MSG_INFO, "INJECT: Disassoc " MACSTR
+                                  " -> broadcast", MAC2STR(bss->bssid));
+       } else
+               wpa_printf(MSG_INFO, "INJECT: Disassoc " MACSTR " -> " MACSTR,
+                          MAC2STR(sta->addr), MAC2STR(bss->bssid));
+       build_mgmt_hdr(&mgmt, bss, sta, sender_ap, WLAN_FC_STYPE_DISASSOC);
+
+       mgmt.u.disassoc.reason_code = host_to_le16(WLAN_REASON_UNSPECIFIED);
+
+       return wlantest_inject(wt, bss, sta, (u8 *) &mgmt, 24 + 2, prot);
+}
+
+
 static int ctrl_inject_saqueryreq(struct wlantest *wt,
                                  struct wlantest_bss *bss,
                                  struct wlantest_sta *sta, int sender_ap,
@@ -481,6 +531,12 @@ static void ctrl_inject(struct wlantest *wt, int sock, u8 *cmd, size_t clen)
        case WLANTEST_FRAME_AUTH:
                ret = ctrl_inject_auth(wt, bss, sta, sender_ap, prot);
                break;
+       case WLANTEST_FRAME_DEAUTH:
+               ret = ctrl_inject_deauth(wt, bss, sta, sender_ap, prot);
+               break;
+       case WLANTEST_FRAME_DISASSOC:
+               ret = ctrl_inject_disassoc(wt, bss, sta, sender_ap, prot);
+               break;
        case WLANTEST_FRAME_SAQUERYREQ:
                ret = ctrl_inject_saqueryreq(wt, bss, sta, sender_ap, prot);
                break;