Print frame type name in debug output
authorPontus Fuchs <pontus.fuchs@gmail.com>
Tue, 3 Jun 2014 08:24:53 +0000 (10:24 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 21 Jun 2014 21:51:39 +0000 (00:51 +0300)
"stype=4" becomes "stype=4 (WLAN_FC_STYPE_PROBE_REQ)" etc.

Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
src/ap/ctrl_iface_ap.c
src/common/ieee802_11_common.c
src/common/ieee802_11_common.h
src/drivers/driver_nl80211.c

index ccbbab5..39edbd7 100644 (file)
@@ -230,11 +230,12 @@ static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
        if (mgmt == NULL)
                return -1;
 
+       mgmt->frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT, stype);
        wpa_dbg(hapd->msg_ctx, MSG_DEBUG, "P2P: Disconnect STA " MACSTR
-               " with minor reason code %u (stype=%u)",
-               MAC2STR(addr), minor_reason_code, stype);
+               " with minor reason code %u (stype=%u (%s))",
+               MAC2STR(addr), minor_reason_code, stype,
+               fc2str(mgmt->frame_control));
 
-       mgmt->frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT, stype);
        os_memcpy(mgmt->da, addr, ETH_ALEN);
        os_memcpy(mgmt->sa, hapd->own_addr, ETH_ALEN);
        os_memcpy(mgmt->bssid, hapd->own_addr, ETH_ALEN);
index faa6a39..173a400 100644 (file)
@@ -546,3 +546,60 @@ int supp_rates_11b_only(struct ieee802_11_elems *elems)
 
        return num_11b > 0 && num_others == 0;
 }
+
+
+const char * fc2str(u16 fc)
+{
+       u16 stype = WLAN_FC_GET_STYPE(fc);
+#define C2S(x) case x: return #x;
+
+       switch (WLAN_FC_GET_TYPE(fc)) {
+       case WLAN_FC_TYPE_MGMT:
+               switch (stype) {
+               C2S(WLAN_FC_STYPE_ASSOC_REQ)
+               C2S(WLAN_FC_STYPE_ASSOC_RESP)
+               C2S(WLAN_FC_STYPE_REASSOC_REQ)
+               C2S(WLAN_FC_STYPE_REASSOC_RESP)
+               C2S(WLAN_FC_STYPE_PROBE_REQ)
+               C2S(WLAN_FC_STYPE_PROBE_RESP)
+               C2S(WLAN_FC_STYPE_BEACON)
+               C2S(WLAN_FC_STYPE_ATIM)
+               C2S(WLAN_FC_STYPE_DISASSOC)
+               C2S(WLAN_FC_STYPE_AUTH)
+               C2S(WLAN_FC_STYPE_DEAUTH)
+               C2S(WLAN_FC_STYPE_ACTION)
+               }
+               break;
+       case WLAN_FC_TYPE_CTRL:
+               switch (stype) {
+               C2S(WLAN_FC_STYPE_PSPOLL)
+               C2S(WLAN_FC_STYPE_RTS)
+               C2S(WLAN_FC_STYPE_CTS)
+               C2S(WLAN_FC_STYPE_ACK)
+               C2S(WLAN_FC_STYPE_CFEND)
+               C2S(WLAN_FC_STYPE_CFENDACK)
+               }
+               break;
+       case WLAN_FC_TYPE_DATA:
+               switch (stype) {
+               C2S(WLAN_FC_STYPE_DATA)
+               C2S(WLAN_FC_STYPE_DATA_CFACK)
+               C2S(WLAN_FC_STYPE_DATA_CFPOLL)
+               C2S(WLAN_FC_STYPE_DATA_CFACKPOLL)
+               C2S(WLAN_FC_STYPE_NULLFUNC)
+               C2S(WLAN_FC_STYPE_CFACK)
+               C2S(WLAN_FC_STYPE_CFPOLL)
+               C2S(WLAN_FC_STYPE_CFACKPOLL)
+               C2S(WLAN_FC_STYPE_QOS_DATA)
+               C2S(WLAN_FC_STYPE_QOS_DATA_CFACK)
+               C2S(WLAN_FC_STYPE_QOS_DATA_CFPOLL)
+               C2S(WLAN_FC_STYPE_QOS_DATA_CFACKPOLL)
+               C2S(WLAN_FC_STYPE_QOS_NULL)
+               C2S(WLAN_FC_STYPE_QOS_CFPOLL)
+               C2S(WLAN_FC_STYPE_QOS_CFACKPOLL)
+               }
+               break;
+       }
+       return "WLAN_FC_TYPE_UNKNOWN";
+#undef C2S
+}
index 9b8bbd1..cf83057 100644 (file)
@@ -98,4 +98,5 @@ enum hostapd_hw_mode ieee80211_freq_to_chan(int freq, u8 *channel);
 
 int supp_rates_11b_only(struct ieee802_11_elems *elems);
 
+const char * fc2str(u16 fc);
 #endif /* IEEE802_11_COMMON_H */
index 04f3e60..e6c2ef6 100644 (file)
@@ -1736,8 +1736,9 @@ static void mlme_event_mgmt(struct i802_bss *bss,
                rx_freq = drv->last_mgmt_freq = event.rx_mgmt.freq;
        }
        wpa_printf(MSG_DEBUG,
-                  "nl80211: RX frame freq=%d ssi_signal=%d stype=%u len=%u",
-                  rx_freq, ssi_signal, stype, (unsigned int) len);
+                  "nl80211: RX frame freq=%d ssi_signal=%d stype=%u (%s) len=%u",
+                  rx_freq, ssi_signal, stype, fc2str(fc),
+                  (unsigned int) len);
        event.rx_mgmt.frame = frame;
        event.rx_mgmt.frame_len = len;
        event.rx_mgmt.ssi_signal = ssi_signal;
@@ -4390,8 +4391,8 @@ static int nl80211_register_frame(struct i802_bss *bss,
 
        buf[0] = '\0';
        wpa_snprintf_hex(buf, sizeof(buf), match, match_len);
-       wpa_printf(MSG_DEBUG, "nl80211: Register frame type=0x%x nl_handle=%p match=%s",
-                  type, nl_handle, buf);
+       wpa_printf(MSG_DEBUG, "nl80211: Register frame type=0x%x (%s) nl_handle=%p match=%s",
+                  type, fc2str(type), nl_handle, buf);
 
        nl80211_cmd(drv, msg, 0, NL80211_CMD_REGISTER_ACTION);
 
@@ -7085,8 +7086,8 @@ static int wpa_driver_nl80211_send_mlme(struct i802_bss *bss, const u8 *data,
 
        mgmt = (struct ieee80211_mgmt *) data;
        fc = le_to_host16(mgmt->frame_control);
-       wpa_printf(MSG_DEBUG, "nl80211: send_mlme - noack=%d freq=%u no_cck=%d offchanok=%d wait_time=%u fc=0x%x nlmode=%d",
-                  noack, freq, no_cck, offchanok, wait_time, fc, drv->nlmode);
+       wpa_printf(MSG_DEBUG, "nl80211: send_mlme - noack=%d freq=%u no_cck=%d offchanok=%d wait_time=%u fc=0x%x (%s) nlmode=%d",
+                  noack, freq, no_cck, offchanok, wait_time, fc, fc2str(fc), drv->nlmode);
 
        if ((is_sta_interface(drv->nlmode) ||
             drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) &&