Annotation of src/usr.bin/netstat/net80211.c, Revision 1.1
1.1 ! reyk 1: /* $OpenBSD$ */
! 2:
! 3: /*
! 4: * Copyright (c) 2005 Reyk Floeter <reyk@vantronix.net>
! 5: *
! 6: * Permission to use, copy, modify, and distribute this software for any
! 7: * purpose with or without fee is hereby granted, provided that the above
! 8: * copyright notice and this permission notice appear in all copies.
! 9: *
! 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 17: */
! 18:
! 19: #include <sys/cdefs.h>
! 20: #include <sys/param.h>
! 21: #include <sys/time.h>
! 22: #include <sys/socket.h>
! 23: #include <sys/file.h>
! 24: #include <sys/ioctl.h>
! 25:
! 26: #include <net/if.h>
! 27:
! 28: #include <netinet/in.h>
! 29: #include <netinet/in_systm.h>
! 30: #include <netinet/if_ether.h>
! 31:
! 32: #include <net80211/ieee80211.h>
! 33: #include <net80211/ieee80211_ioctl.h>
! 34:
! 35: #include <stdio.h>
! 36: #include <string.h>
! 37: #include <unistd.h>
! 38: #include "netstat.h"
! 39:
! 40: /*
! 41: * Dump IEEE802.11 per-interface statistics
! 42: */
! 43: void
! 44: net80211_ifstats(char *ifname)
! 45: {
! 46: struct ifreq ifr;
! 47: struct ieee80211_stats stats;
! 48: int s;
! 49:
! 50: #define p(f, m) printf(m, (unsigned long)stats.f, plural(stats.f))
! 51:
! 52: if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
! 53: perror("Warning: socket(AF_INET)");
! 54: return;
! 55: }
! 56:
! 57: ifr.ifr_data = (caddr_t)&stats;
! 58: strlcpy(ifr.ifr_name, ifname, sizeof ifr.ifr_name);
! 59: printf("ieee80211 on %s:\n", ifr.ifr_name);
! 60:
! 61: if (ioctl(s, SIOCG80211STATS, &ifr) < 0) {
! 62: perror("Warning: ioctl(SIOCG80211STATS)");
! 63: goto end;
! 64: }
! 65:
! 66: p(is_rx_badversion, "\t%lu input packet%s with bad version\n");
! 67: p(is_rx_tooshort, "\t%lu input packet%s too short\n");
! 68: p(is_rx_wrongbss, "\t%lu input packet%s from wrong bssid\n");
! 69: p(is_rx_dup, "\t%lu input packet duplicate%s discarded\n");
! 70: p(is_rx_wrongdir, "\t%lu input packet%s with wrong direction\n");
! 71: p(is_rx_mcastecho, "\t%lu input multicast echo packet%s discarded\n");
! 72: p(is_rx_notassoc, "\t%lu input packet%s from unassociated station discarded\n");
! 73: p(is_rx_nowep, "\t%lu input wep packet%s without wep discarded\n");
! 74: p(is_rx_wepfail, "\t%lu input wep packet%s processing failed\n");
! 75: p(is_rx_decap, "\t%lu input packet decapsulation%s failed\n");
! 76: p(is_rx_mgtdiscard, "\t%lu input management packet%s discarded\n");
! 77: p(is_rx_ctl, "\t%lu input control packet%s discarded\n");
! 78: p(is_rx_rstoobig, "\t%lu input packet%s with truncated rate set\n");
! 79: p(is_rx_elem_missing, "\t%lu input packet%s with missing elements\n");
! 80: p(is_rx_elem_toobig, "\t%lu input packet%s with elements too big\n");
! 81: p(is_rx_elem_toosmall, "\t%lu input packet%s with elements too small\n");
! 82: p(is_rx_elem_unknown, "\t%lu input packet%s with unknown elements\n");
! 83: p(is_rx_badchan, "\t%lu input packet%s with invalid channel\n");
! 84: p(is_rx_chanmismatch, "\t%lu input packet%s with mismatched channel\n");
! 85: p(is_rx_nodealloc, "\t%lu input packet%s dropped\n");
! 86: p(is_rx_ssidmismatch, "\t%lu input packet%s with mismatched ssid\n");
! 87: p(is_rx_auth_unsupported, "\t%lu input packet%s with unsupported auth algorithm\n");
! 88: p(is_rx_auth_fail, "\t%lu input authentication%s failed\n");
! 89: p(is_rx_assoc_bss, "\t%lu input association%s from wrong bssid\n");
! 90: p(is_rx_assoc_notauth, "\t%lu input association%s without authentication\n");
! 91: p(is_rx_assoc_capmismatch, "\t%lu input association%s with mismatched capabilities\n");
! 92: p(is_rx_assoc_norate, "\t%lu input association%s without matching rates\n");
! 93: p(is_rx_deauth, "\t%lu input deauthentication packet%s\n");
! 94: p(is_rx_disassoc, "\t%lu input disassociation packet%s\n");
! 95: p(is_rx_badsubtype, "\t%lu input packet%s with unknown subtype\n");
! 96: p(is_rx_nombuf, "\t%lu input packet%s failed for lack of mbufs\n");
! 97: p(is_rx_decryptcrc, "\t%lu input decryption%s failed on crc\n");
! 98: p(is_rx_ahdemo_mgt, "\t%lu input ahdemo management packet%s discarded\n");
! 99: p(is_rx_bad_auth, "\t%lu input packet%s with bad auth request\n");
! 100: p(is_tx_nombuf, "\t%lu output packet%s failed for lack of mbufs\n");
! 101: p(is_tx_nonode, "\t%lu output packet%s failed for no nodes\n");
! 102: p(is_tx_unknownmgt, "\t%lu output packet%s of unknown management type\n");
! 103: p(is_scan_active, "\t%lu active scan%s started\n");
! 104: p(is_scan_passive, "\t%lu passive scan%s started\n");
! 105: p(is_node_timeout, "\t%lu node%s timed out\n");
! 106: p(is_crypto_nomem, "\t%lu failure%s with no memory for crypto ctx\n");
! 107:
! 108: end:
! 109: close(s);
! 110:
! 111: #undef p
! 112: }