|
@@ -2249,6 +2249,62 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
|
|
/* ignore frame -- wait for timeout */
|
|
|
}
|
|
|
|
|
|
+#define case_WLAN(type) \
|
|
|
+ case WLAN_REASON_##type: return #type
|
|
|
+
|
|
|
+static const char *ieee80211_get_reason_code_string(u16 reason_code)
|
|
|
+{
|
|
|
+ switch (reason_code) {
|
|
|
+ case_WLAN(UNSPECIFIED);
|
|
|
+ case_WLAN(PREV_AUTH_NOT_VALID);
|
|
|
+ case_WLAN(DEAUTH_LEAVING);
|
|
|
+ case_WLAN(DISASSOC_DUE_TO_INACTIVITY);
|
|
|
+ case_WLAN(DISASSOC_AP_BUSY);
|
|
|
+ case_WLAN(CLASS2_FRAME_FROM_NONAUTH_STA);
|
|
|
+ case_WLAN(CLASS3_FRAME_FROM_NONASSOC_STA);
|
|
|
+ case_WLAN(DISASSOC_STA_HAS_LEFT);
|
|
|
+ case_WLAN(STA_REQ_ASSOC_WITHOUT_AUTH);
|
|
|
+ case_WLAN(DISASSOC_BAD_POWER);
|
|
|
+ case_WLAN(DISASSOC_BAD_SUPP_CHAN);
|
|
|
+ case_WLAN(INVALID_IE);
|
|
|
+ case_WLAN(MIC_FAILURE);
|
|
|
+ case_WLAN(4WAY_HANDSHAKE_TIMEOUT);
|
|
|
+ case_WLAN(GROUP_KEY_HANDSHAKE_TIMEOUT);
|
|
|
+ case_WLAN(IE_DIFFERENT);
|
|
|
+ case_WLAN(INVALID_GROUP_CIPHER);
|
|
|
+ case_WLAN(INVALID_PAIRWISE_CIPHER);
|
|
|
+ case_WLAN(INVALID_AKMP);
|
|
|
+ case_WLAN(UNSUPP_RSN_VERSION);
|
|
|
+ case_WLAN(INVALID_RSN_IE_CAP);
|
|
|
+ case_WLAN(IEEE8021X_FAILED);
|
|
|
+ case_WLAN(CIPHER_SUITE_REJECTED);
|
|
|
+ case_WLAN(DISASSOC_UNSPECIFIED_QOS);
|
|
|
+ case_WLAN(DISASSOC_QAP_NO_BANDWIDTH);
|
|
|
+ case_WLAN(DISASSOC_LOW_ACK);
|
|
|
+ case_WLAN(DISASSOC_QAP_EXCEED_TXOP);
|
|
|
+ case_WLAN(QSTA_LEAVE_QBSS);
|
|
|
+ case_WLAN(QSTA_NOT_USE);
|
|
|
+ case_WLAN(QSTA_REQUIRE_SETUP);
|
|
|
+ case_WLAN(QSTA_TIMEOUT);
|
|
|
+ case_WLAN(QSTA_CIPHER_NOT_SUPP);
|
|
|
+ case_WLAN(MESH_PEER_CANCELED);
|
|
|
+ case_WLAN(MESH_MAX_PEERS);
|
|
|
+ case_WLAN(MESH_CONFIG);
|
|
|
+ case_WLAN(MESH_CLOSE);
|
|
|
+ case_WLAN(MESH_MAX_RETRIES);
|
|
|
+ case_WLAN(MESH_CONFIRM_TIMEOUT);
|
|
|
+ case_WLAN(MESH_INVALID_GTK);
|
|
|
+ case_WLAN(MESH_INCONSISTENT_PARAM);
|
|
|
+ case_WLAN(MESH_INVALID_SECURITY);
|
|
|
+ case_WLAN(MESH_PATH_ERROR);
|
|
|
+ case_WLAN(MESH_PATH_NOFORWARD);
|
|
|
+ case_WLAN(MESH_PATH_DEST_UNREACHABLE);
|
|
|
+ case_WLAN(MAC_EXISTS_IN_MBSS);
|
|
|
+ case_WLAN(MESH_CHAN_REGULATORY);
|
|
|
+ case_WLAN(MESH_CHAN);
|
|
|
+ default: return "<unknown>";
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
static void ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata,
|
|
|
struct ieee80211_mgmt *mgmt, size_t len)
|
|
@@ -2270,8 +2326,8 @@ static void ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata,
|
|
|
|
|
|
reason_code = le16_to_cpu(mgmt->u.deauth.reason_code);
|
|
|
|
|
|
- sdata_info(sdata, "deauthenticated from %pM (Reason: %u)\n",
|
|
|
- bssid, reason_code);
|
|
|
+ sdata_info(sdata, "deauthenticated from %pM (Reason: %u=%s)\n",
|
|
|
+ bssid, reason_code, ieee80211_get_reason_code_string(reason_code));
|
|
|
|
|
|
ieee80211_set_disassoc(sdata, 0, 0, false, NULL);
|
|
|
|
|
@@ -4340,8 +4396,8 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
|
|
|
bool report_frame = false;
|
|
|
|
|
|
sdata_info(sdata,
|
|
|
- "deauthenticating from %pM by local choice (reason=%d)\n",
|
|
|
- req->bssid, req->reason_code);
|
|
|
+ "deauthenticating from %pM by local choice (Reason: %u=%s)\n",
|
|
|
+ req->bssid, req->reason_code, ieee80211_get_reason_code_string(req->reason_code));
|
|
|
|
|
|
if (ifmgd->auth_data) {
|
|
|
drv_mgd_prepare_tx(sdata->local, sdata);
|
|
@@ -4387,8 +4443,8 @@ int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
|
|
|
return -ENOLINK;
|
|
|
|
|
|
sdata_info(sdata,
|
|
|
- "disassociating from %pM by local choice (reason=%d)\n",
|
|
|
- req->bss->bssid, req->reason_code);
|
|
|
+ "disassociating from %pM by local choice (Reason: %u=%s)\n",
|
|
|
+ req->bss->bssid, req->reason_code, ieee80211_get_reason_code_string(req->reason_code));
|
|
|
|
|
|
memcpy(bssid, req->bss->bssid, ETH_ALEN);
|
|
|
ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DISASSOC,
|