int main(int argc, char *argv[]) { #ifdef __linux__ const char *ifname = "wifi0"; #else const char *ifname = "ath0"; #endif int s; struct ifreq ifr; s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) err(1, "socket"); if (argc > 1 && strcmp(argv[1], "-i") == 0) { if (argc < 2) { fprintf(stderr, "%s: missing interface name for -i\n", argv[0]); exit(-1); } ifname = argv[2]; argc -= 2, argv += 2; } strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name)); if (argc > 1) { u_long interval = strtoul(argv[1], NULL, 0); int line; sigset_t omask, nmask; u_int rate; struct ath_stats cur, total; u_long icur, ocur; u_long itot, otot; if (interval < 1) interval = 1; signal(SIGALRM, catchalarm); signalled = 0; alarm(interval); banner: printf("%8s %8s %7s %7s %7s %6s %6s %6s %7s %4s %4s", "input", "output", "altrate", "short", "long", "xretry", "crcerr", "crypt", "phyerr", "rssi", "rate"); putchar('\n'); fflush(stdout); line = 0; loop: rate = getifrate(s, ifr.ifr_name); if (line != 0) { ifr.ifr_data = (caddr_t) &cur; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, ifr.ifr_name); if (!getifstats(ifr.ifr_name, &icur, &ocur)) err(1, ifr.ifr_name); printf("%8lu %8lu %7u %7u %7u %6u %6u %6u %7u %4u %3uM\n", (icur - itot) - (cur.ast_rx_mgt - total.ast_rx_mgt), ocur - otot, cur.ast_tx_altrate - total.ast_tx_altrate, cur.ast_tx_shortretry - total.ast_tx_shortretry, cur.ast_tx_longretry - total.ast_tx_longretry, cur.ast_tx_xretries - total.ast_tx_xretries, cur.ast_rx_crcerr - total.ast_rx_crcerr, cur.ast_rx_badcrypt - total.ast_rx_badcrypt, cur.ast_rx_phyerr - total.ast_rx_phyerr, cur.ast_rx_rssi, rate); total = cur; itot = icur; otot = ocur; } else { ifr.ifr_data = (caddr_t) &total; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, ifr.ifr_name); if (!getifstats(ifr.ifr_name, &itot, &otot)) err(1, ifr.ifr_name); printf("%8lu %8lu %7u %7u %7u %6u %6u %6u %7u %4u %3uM\n", itot - total.ast_rx_mgt, otot, total.ast_tx_altrate, total.ast_tx_shortretry, total.ast_tx_longretry, total.ast_tx_xretries, total.ast_rx_crcerr, total.ast_rx_badcrypt, total.ast_rx_phyerr, total.ast_rx_rssi, rate); } fflush(stdout); sigemptyset(&nmask); sigaddset(&nmask,SIGALRM); sigprocmask(SIG_BLOCK, &nmask, &omask); sigemptyset(&nmask); if (!signalled) sigsuspend(&nmask); sigprocmask(SIG_SETMASK, &omask, NULL); signalled = 0; alarm(interval); line++; if (line == 21) /* XXX tty line count */ goto banner; else goto loop; /*NOTREACHED*/ } else { struct ath_stats stats; ifr.ifr_data = (caddr_t) &stats; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, ifr.ifr_name); printstats(stdout, &stats); } return 0; }
int main(int argc, char *argv[]) { #ifdef __linux__ const char *ifname = "wifi0"; #else const char *ifname = "ath0"; #endif int s; struct ifreq ifr; s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) err(1, "socket"); if (argc > 1 && strcmp(argv[1], "-i") == 0) { if (argc < 2) { fprintf(stderr, "%s: missing interface name for -i\n", argv[0]); exit(-1); } ifname = argv[2]; argc -= 2, argv += 2; } strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name)); ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0'; #if 0 if (argc > 1) { u_long interval = strtoul(argv[1], NULL, 0); u_long off; int line, omask; u_int rate, rssi; struct ath_stats cur, total; u_long icur, ocur; u_long itot, otot; if (interval < 1) interval = 1; signal(SIGALRM, catchalarm); signalled = 0; alarm(interval); banner: printf("%8s %7s %7s %7s %6s %6s %6s %7s %4s %4s" , "output" , "altrate" , "short" , "long" , "xretry" , "crcerr" , "crypt" , "phyerr" , "rssi" , "rate" ); putchar('\n'); fflush(stdout); line = 0; loop: rate = getifrate(s, ifr.ifr_name); rssi = getrssi(s, ifr.ifr_name); if (line != 0) { ifr.ifr_data = (caddr_t) &cur; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, ifr.ifr_name); if (!getifstats(ifr.ifr_name, &icur, &ocur)) err(1, ifr.ifr_name); printf("%8u %7u %7u %7u %6u %6u %6u %7u %4u %3uM\n" , ocur - otot , cur.ast_tx_altrate - total.ast_tx_altrate , cur.ast_tx_shortretry - total.ast_tx_shortretry , cur.ast_tx_longretry - total.ast_tx_longretry , cur.ast_tx_xretries - total.ast_tx_xretries , cur.ast_rx_crcerr - total.ast_rx_crcerr , cur.ast_rx_badcrypt - total.ast_rx_badcrypt , cur.ast_rx_phyerr - total.ast_rx_phyerr , rssi , rate ); total = cur; itot = icur; otot = ocur; } else { ifr.ifr_data = (caddr_t) &total; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, ifr.ifr_name); if (!getifstats(ifr.ifr_name, &itot, &otot)) err(1, ifr.ifr_name); printf("%8u %8u %7u %7u %7u %6u %6u %6u %7u %4u %3uM\n" , itot - total.ast_rx_mgt , otot , total.ast_tx_altrate , total.ast_tx_shortretry , total.ast_tx_longretry , total.ast_tx_xretries , total.ast_rx_crcerr , total.ast_rx_badcrypt , total.ast_rx_phyerr , rssi , rate ); } fflush(stdout); omask = sigblock(sigmask(SIGALRM)); if (!signalled) sigpause(0); sigsetmask(omask); signalled = 0; alarm(interval); line++; if (line == 21) /* XXX tty line count */ goto banner; else goto loop; /*NOTREACHED*/ } else { #endif struct ath_stats stats = { 0 }; ifr.ifr_data = (caddr_t) &stats; if (ioctl(s, SIOCGATHSTATS, &ifr) < 0) err(1, "%s", ifr.ifr_name); /*Begin:Added by duanmingzhe for print txq info*/ if(!strcmp(ifr.ifr_name,"wifi0")) { devid = 0; } else { devid = 1; } /*End:Added by duanmingzhe for print txq info*/ printstats(stdout, &stats); #if 0 } #endif return 0; }