Date: Wed, 9 Apr 2008 23:29:30 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 139691 for review Message-ID: <200804092329.m39NTUMp050748@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=139691 Change 139691 by sam@sam_ebb on 2008/04/09 23:28:45 show last auth failure, deauth, and disassoc reasons Affected files ... .. //depot/projects/vap/tools/tools/net80211/wlanstats/wlanstats.c#7 edit Differences ... ==== //depot/projects/vap/tools/tools/net80211/wlanstats/wlanstats.c#7 (text+ko) ==== @@ -113,7 +113,10 @@ "rx w/ unsupported auth alg" }, #define S_RX_AUTH_FAIL AFTER(S_RX_AUTH_UNSUPPORTED) { 5, "rx_auth_fail", "auth_fail", "rx sta auth failure" }, -#define S_RX_AUTH_COUNTERMEASURES AFTER(S_RX_AUTH_FAIL) +#define S_RX_AUTH_FAIL_CODE AFTER(S_RX_AUTH_FAIL) + { 5, "rx_auth_fail_code","auth_fail_code", + "last rx auth failure reason" }, +#define S_RX_AUTH_COUNTERMEASURES AFTER(S_RX_AUTH_FAIL_CODE) { 5, "rx_auth_countermeasures", "auth_countermeasures", "rx sta auth failure 'cuz of TKIP countermeasures" }, #define S_RX_ASSOC_BSS AFTER(S_RX_AUTH_COUNTERMEASURES) @@ -130,9 +133,14 @@ "rx assoc w/ bad WPA IE" }, #define S_RX_DEAUTH AFTER(S_RX_ASSOC_BADWPAIE) { 5, "rx_deauth", "deauth", "rx deauthentication" }, -#define S_RX_DISASSOC AFTER(S_RX_DEAUTH) +#define S_RX_DEAUTH_CODE AFTER(S_RX_DEAUTH) + { 5, "rx_deauth_code","deauth_code", "last rx deauth reason" }, +#define S_RX_DISASSOC AFTER(S_RX_DEAUTH_CODE) { 5, "rx_disassoc", "disassoc", "rx disassociation" }, -#define S_RX_BADSUBTYPE AFTER(S_RX_DISASSOC) +#define S_RX_DISASSOC_CODE AFTER(S_RX_DISASSOC) + { 5, "rx_disassoc_code","disassoc_code", + "last rx disassoc reason" }, +#define S_RX_BADSUBTYPE AFTER(S_RX_DISASSOC_CODE) { 5, "rx_badsubtype", "badsubtype", "rx frame w/ unknown subtype" }, #define S_RX_NOBUF AFTER(S_RX_BADSUBTYPE) { 5, "rx_nobuf", "nobuf", "rx failed for lack of mbuf" }, @@ -448,14 +456,14 @@ wf->ireq.i_data = (caddr_t) &wf->u_info; wf->ireq.i_len = sizeof(wf->u_info); if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) - err(1, "%s (IEEE80211_IOC_STA_INFO)", wf->ireq.i_name); + warn("%s (IEEE80211_IOC_STA_INFO)", wf->ireq.i_name); IEEE80211_ADDR_COPY(nstats->is_u.macaddr, wf->mac); wf->ireq.i_type = IEEE80211_IOC_STA_STATS; wf->ireq.i_data = (caddr_t) nstats; wf->ireq.i_len = sizeof(*nstats); if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) - err(1, "%s (IEEE80211_IOC_STA_STATS)", wf->ireq.i_name); + warn("%s (IEEE80211_IOC_STA_STATS)", wf->ireq.i_name); wf->ifr.ifr_data = (caddr_t) stats; if (ioctl(wf->s, SIOCG80211STATS, &wf->ifr) < 0) @@ -487,6 +495,81 @@ wf->ntotal = wf->ncur; } +void +setreason(char b[], size_t bs, int v) +{ +#define N(a) (sizeof(a)/sizeof(a[0])) + static const char *reasons[] = { + [IEEE80211_REASON_UNSPECIFIED] = "unspecified", + [IEEE80211_REASON_AUTH_EXPIRE] = "auth expire", + [IEEE80211_REASON_AUTH_LEAVE] = "auth leave", + [IEEE80211_REASON_ASSOC_EXPIRE] = "assoc expire", + [IEEE80211_REASON_ASSOC_TOOMANY] = "assoc toomany", + [IEEE80211_REASON_NOT_AUTHED] = "not authed", + [IEEE80211_REASON_NOT_ASSOCED] = "not assoced", + [IEEE80211_REASON_ASSOC_LEAVE] = "assoc leave", + [IEEE80211_REASON_ASSOC_NOT_AUTHED] = "assoc not authed", + [IEEE80211_REASON_DISASSOC_PWRCAP_BAD] = "disassoc pwrcap bad", + [IEEE80211_REASON_DISASSOC_SUPCHAN_BAD] = "disassoc supchan bad", + [IEEE80211_REASON_IE_INVALID] = "ie invalid", + [IEEE80211_REASON_MIC_FAILURE] = "mic failure", + [IEEE80211_REASON_4WAY_HANDSHAKE_TIMEOUT]= "4-way handshake timeout", + [IEEE80211_REASON_GROUP_KEY_UPDATE_TIMEOUT] = "group key update timeout", + [IEEE80211_REASON_IE_IN_4WAY_DIFFERS] = "ie in 4-way differs", + [IEEE80211_REASON_GROUP_CIPHER_INVALID] = "group cipher invalid", + [IEEE80211_REASON_PAIRWISE_CIPHER_INVALID]= "pairwise cipher invalid", + [IEEE80211_REASON_AKMP_INVALID] = "akmp invalid", + [IEEE80211_REASON_UNSUPP_RSN_IE_VERSION]= "unsupported rsn ie version", + [IEEE80211_REASON_INVALID_RSN_IE_CAP] = "invalid rsn ie cap", + [IEEE80211_REASON_802_1X_AUTH_FAILED] = "802.1x auth failed", + [IEEE80211_REASON_CIPHER_SUITE_REJECTED]= "cipher suite rejected", + }; + if (v < N(reasons) && reasons[v] != NULL) + snprintf(b, bs, "%s (%u)", reasons[v], v); + else + snprintf(b, bs, "%u", v); +#undef N +} + +void +setstatus(char b[], size_t bs, int v) +{ +#define N(a) (sizeof(a)/sizeof(a[0])) + static const char *status[] = { + [IEEE80211_STATUS_SUCCESS] = "success", + [IEEE80211_STATUS_UNSPECIFIED] = "unspecified", + [IEEE80211_STATUS_CAPINFO] = "capinfo", + [IEEE80211_STATUS_NOT_ASSOCED] = "not assoced", + [IEEE80211_STATUS_OTHER] = "other", + [IEEE80211_STATUS_ALG] = "algorithm", + [IEEE80211_STATUS_SEQUENCE] = "sequence", + [IEEE80211_STATUS_CHALLENGE] = "challenge", + [IEEE80211_STATUS_TIMEOUT] = "timeout", + [IEEE80211_STATUS_TOOMANY] = "toomany", + [IEEE80211_STATUS_BASIC_RATE] = "basic rate", + [IEEE80211_STATUS_SP_REQUIRED] = "sp required", + [IEEE80211_STATUS_PBCC_REQUIRED] = "pbcc required", + [IEEE80211_STATUS_CA_REQUIRED] = "ca required", + [IEEE80211_STATUS_SPECMGMT_REQUIRED] = "specmgmt required", + [IEEE80211_STATUS_PWRCAP_REQUIRED] = "pwrcap required", + [IEEE80211_STATUS_SUPCHAN_REQUIRED] = "supchan required", + [IEEE80211_STATUS_SHORTSLOT_REQUIRED] = "shortslot required", + [IEEE80211_STATUS_DSSSOFDM_REQUIRED] = "dsssofdm required", + [IEEE80211_STATUS_INVALID_IE] = "invalid ie", + [IEEE80211_STATUS_GROUP_CIPHER_INVALID] = "group cipher invalid", + [IEEE80211_STATUS_PAIRWISE_CIPHER_INVALID]= "pairwise cipher invalid", + [IEEE80211_STATUS_AKMP_INVALID] = "akmp invalid", + [IEEE80211_STATUS_UNSUPP_RSN_IE_VERSION]= "unsupported rsn ie version", + [IEEE80211_STATUS_INVALID_RSN_IE_CAP] = "invalid rsn ie cap", + [IEEE80211_STATUS_CIPHER_SUITE_REJECTED]= "cipher suite rejected", + }; + if (v < N(status) && status[v] != NULL) + snprintf(b, bs, "%s (%u)", status[v], v); + else + snprintf(b, bs, "%u", v); +#undef N +} + static int wlan_getinfo(struct wlanstatfoo_p *wf, int s, char b[], size_t bs) { @@ -505,6 +588,21 @@ case S_SIGNAL: snprintf(b, bs, "%d", si->isi_rssi + si->isi_noise); return 1; + case S_RX_AUTH_FAIL_CODE: + if (wf->cur.is_rx_authfail_code == 0) + break; + setstatus(b, bs, wf->cur.is_rx_authfail_code); + return 1; + case S_RX_DEAUTH_CODE: + if (wf->cur.is_rx_deauth_code == 0) + break; + setreason(b, bs, wf->cur.is_rx_deauth_code); + return 1; + case S_RX_DISASSOC_CODE: + if (wf->cur.is_rx_disassoc_code == 0) + break; + setreason(b, bs, wf->cur.is_rx_disassoc_code); + return 1; } b[0] = '\0'; return 0;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804092329.m39NTUMp050748>