static void print_assoclist(const struct iwinfo_ops *iw, const char *ifname) { int i, len; char buf[IWINFO_BUFSIZE]; struct iwinfo_assoclist_entry *e; if (iw->assoclist(ifname, buf, &len)) { printf("No information available\n"); return; } else if (len <= 0) { printf("No station connected\n"); return; } for (i = 0; i < len; i += sizeof(struct iwinfo_assoclist_entry)) { e = (struct iwinfo_assoclist_entry *) &buf[i]; printf("%s %s / %s (SNR %d)\n", format_bssid(e->mac), format_signal(e->signal), format_noise(e->noise), (e->signal - e->noise)); } }
static char * format_monitor(struct iwinfo_assoclist_entry *e,bool *isAlive) { static char buf[256]; *isAlive = false; memset (buf,0x00,256); if (NULL == e) { sprintf(buf,"Station|Rssi/Nf/Snr|na|MCS r/t|Mbps r/t |load| online |R rate|T rate"); } else { // unsigned char qlen = 0x000000ff & e->drop_qlen; // unsigned int drop = 0x00fffff & (e->drop_qlen >> 24); unsigned int drop = 0; unsigned char qlen = get_queue_length(); uint32_t delta_tx_packets = e->tx_packets - last_tx_packets; uint32_t delta_tx_failed = (drop + e->tx_failed) - last_tx_failed; int tx_KBps = 0; int rx_KBps = 0; struct timeval current_time; gettimeofday (¤t_time,NULL); time_t diff_in_ms = (current_time.tv_sec - last_count_time.tv_sec) * 1000 + (current_time.tv_usec - last_count_time.tv_usec) / 1000; last_count_time.tv_sec = current_time.tv_sec; last_count_time.tv_usec = current_time.tv_usec; last_tx_packets = e->tx_packets; last_tx_failed = drop + e->tx_failed; if (diff_in_ms > 0) { if (last_rx_bytes < e->rx_bytes) rx_KBps = (e->rx_bytes - last_rx_bytes) / diff_in_ms; if (last_tx_bytes < e->tx_bytes) tx_KBps = (e->tx_bytes - last_tx_bytes) / diff_in_ms; last_rx_bytes = e->rx_bytes; last_tx_bytes = e->tx_bytes; } *isAlive = (e->inactive <= MAX_INACTIVE_MS) ? true : false; sprintf(buf,"%s|% 11s|%s|% 7s|% 9s|%3d%%|%8s|% 6s|% 6s", format_bssid(e->mac), format_snr(e->signal,e->noise), format_timer(e->inactive), format_mcs(&e->rx_rate,&e->tx_rate), format_bps(&e->rx_rate,&e->tx_rate), 100 * qlen / MAX_QUEUE_LEN, format_online_time(e->t_connect), format_throughput_rx(8 * rx_KBps), format_throughput_tx(8 * tx_KBps) ); } return buf; }
static void print_assoclist(const struct iwinfo_ops *iw, const char *ifname) { int i, len; char buf[IWINFO_BUFSIZE]; struct iwinfo_assoclist_entry *e; if (iw->assoclist(ifname, buf, &len)) { printf("No information available\n"); return; } else if (len <= 0) { printf("No station connected\n"); return; } for (i = 0; i < len; i += sizeof(struct iwinfo_assoclist_entry)) { e = (struct iwinfo_assoclist_entry *) &buf[i]; printf("%s %s / %s (SNR %d) %d ms ago\n", format_bssid(e->mac), format_signal(e->signal), format_noise(e->noise), (e->signal - e->noise), e->inactive); printf(" RX: %-38s %8d Pkts.\n", format_assocrate(&e->rx_rate), e->rx_packets ); printf(" TX: %-38s %8d Pkts.\n\n", format_assocrate(&e->tx_rate), e->tx_packets ); } }
static void print_scanlist(const struct iwinfo_ops *iw, const char *ifname) { int i, x, len; char buf[IWINFO_BUFSIZE]; struct iwinfo_scanlist_entry *e; if (iw->scanlist(ifname, buf, &len)) { printf("Scanning not possible\n\n"); return; } else if (len <= 0) { printf("No scan results\n\n"); return; } for (i = 0, x = 1; i < len; i += sizeof(struct iwinfo_scanlist_entry), x++) { e = (struct iwinfo_scanlist_entry *) &buf[i]; printf("Cell %02d - Address: %s\n", x, format_bssid(e->mac)); printf(" ESSID: %s\n", format_ssid(e->ssid)); printf(" Mode: %s Channel: %s\n", e->mode ? (char *)e->mode : "unknown", format_channel(e->channel)); printf(" Signal: %s Quality: %s/%s\n", format_signal(e->signal - 0x100), format_quality(e->quality), format_quality_max(e->quality_max)); printf(" Encryption: %s\n\n", format_encryption(&e->crypto)); } }