2 * Received Data frame processing
3 * Copyright (c) 2010, Jouni Malinen <j@w1.fi>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
12 * See README and COPYING for more details.
15 #include "utils/includes.h"
17 #include "utils/common.h"
18 #include "common/ieee802_11_defs.h"
22 static const char * data_stype(u16 stype)
25 case WLAN_FC_STYPE_DATA:
27 case WLAN_FC_STYPE_DATA_CFACK:
29 case WLAN_FC_STYPE_DATA_CFPOLL:
31 case WLAN_FC_STYPE_DATA_CFACKPOLL:
32 return "DATA-CFACKPOLL";
33 case WLAN_FC_STYPE_NULLFUNC:
35 case WLAN_FC_STYPE_CFACK:
37 case WLAN_FC_STYPE_CFPOLL:
39 case WLAN_FC_STYPE_CFACKPOLL:
41 case WLAN_FC_STYPE_QOS_DATA:
43 case WLAN_FC_STYPE_QOS_DATA_CFACK:
44 return "QOSDATA-CFACK";
45 case WLAN_FC_STYPE_QOS_DATA_CFPOLL:
46 return "QOSDATA-CFPOLL";
47 case WLAN_FC_STYPE_QOS_DATA_CFACKPOLL:
48 return "QOSDATA-CFACKPOLL";
49 case WLAN_FC_STYPE_QOS_NULL:
51 case WLAN_FC_STYPE_QOS_CFPOLL:
53 case WLAN_FC_STYPE_QOS_CFACKPOLL:
54 return "QOS-CFACKPOLL";
60 void rx_data(struct wlantest *wt, const u8 *data, size_t len)
62 const struct ieee80211_hdr *hdr;
68 hdr = (const struct ieee80211_hdr *) data;
69 fc = le_to_host16(hdr->frame_control);
72 switch (fc & (WLAN_FC_TODS | WLAN_FC_FROMDS)) {
74 wpa_printf(MSG_EXCESSIVE, "DATA %s%s%s IBSS DA=" MACSTR " SA="
75 MACSTR " BSSID=" MACSTR,
76 data_stype(WLAN_FC_GET_STYPE(fc)),
77 fc & WLAN_FC_PWRMGT ? " PwrMgt" : "",
78 fc & WLAN_FC_ISWEP ? " Prot" : "",
79 MAC2STR(hdr->addr1), MAC2STR(hdr->addr2),
83 wpa_printf(MSG_EXCESSIVE, "DATA %s%s%s FromDS DA=" MACSTR
84 " BSSID=" MACSTR " SA=" MACSTR,
85 data_stype(WLAN_FC_GET_STYPE(fc)),
86 fc & WLAN_FC_PWRMGT ? " PwrMgt" : "",
87 fc & WLAN_FC_ISWEP ? " Prot" : "",
88 MAC2STR(hdr->addr1), MAC2STR(hdr->addr2),
92 wpa_printf(MSG_EXCESSIVE, "DATA %s%s%s ToDS BSSID=" MACSTR
93 " SA=" MACSTR " DA=" MACSTR,
94 data_stype(WLAN_FC_GET_STYPE(fc)),
95 fc & WLAN_FC_PWRMGT ? " PwrMgt" : "",
96 fc & WLAN_FC_ISWEP ? " Prot" : "",
97 MAC2STR(hdr->addr1), MAC2STR(hdr->addr2),
100 case WLAN_FC_TODS | WLAN_FC_FROMDS:
101 wpa_printf(MSG_EXCESSIVE, "DATA %s%s%s WDS RA=" MACSTR " TA="
102 MACSTR " DA=" MACSTR " SA=" MACSTR,
103 data_stype(WLAN_FC_GET_STYPE(fc)),
104 fc & WLAN_FC_PWRMGT ? " PwrMgt" : "",
105 fc & WLAN_FC_ISWEP ? " Prot" : "",
106 MAC2STR(hdr->addr1), MAC2STR(hdr->addr2),
108 MAC2STR((const u8 *) (hdr + 1)));