void update_filter_win(WINDOW *win) { int l, i; box(win, 0 , 0); print_centered(win, 0, 57, " Edit Packet Filter "); mvwprintw(win, 2, 2, "Show these Packet Types"); l = 4; wattron(win, get_packet_type_color(IEEE80211_FTYPE_MGMT)); wattron(win, A_BOLD); mvwprintw(win, l++, 2, "m: [%c] MANAGEMENT FRAMES", CHECKED(PKT_TYPE_MGMT)); wattroff(win, A_BOLD); mvwprintw(win, l++, 2, "b: [%c] Beacons", CHECKED(PKT_TYPE_BEACON)); mvwprintw(win, l++, 2, "p: [%c] Probe Req/Resp", CHECKED(PKT_TYPE_PROBE)); mvwprintw(win, l++, 2, "a: [%c] Association", CHECKED(PKT_TYPE_ASSOC)); mvwprintw(win, l++, 2, "u: [%c] Authentication", CHECKED(PKT_TYPE_AUTH)); l++; wattron(win, get_packet_type_color(IEEE80211_FTYPE_CTL)); wattron(win, A_BOLD); mvwprintw(win, l++, 2, "c: [%c] CONTROL FRAMES", CHECKED(PKT_TYPE_CTRL)); wattroff(win, A_BOLD); mvwprintw(win, l++, 2, "r: [%c] CTS/RTS", CHECKED(PKT_TYPE_CTS | PKT_TYPE_RTS)); mvwprintw(win, l++, 2, "k: [%c] ACK", CHECKED(PKT_TYPE_ACK)); l++; wattron(win, get_packet_type_color(IEEE80211_FTYPE_DATA)); wattron(win, A_BOLD); mvwprintw(win, l++, 2, "d: [%c] DATA FRAMES", CHECKED(PKT_TYPE_DATA)); wattroff(win, A_BOLD); mvwprintw(win, l++, 2, "q: [%c] QoS Data", CHECKED(PKT_TYPE_QDATA)); mvwprintw(win, l++, 2, "n: [%c] Null Data", CHECKED(PKT_TYPE_NULL)); mvwprintw(win, l++, 2, "R: [%c] ARP", CHECKED(PKT_TYPE_ARP)); mvwprintw(win, l++, 2, "P: [%c] ICMP/PING", CHECKED(PKT_TYPE_ICMP)); mvwprintw(win, l++, 2, "I: [%c] IP", CHECKED(PKT_TYPE_IP)); mvwprintw(win, l++, 2, "U: [%c] UDP", CHECKED(PKT_TYPE_UDP)); mvwprintw(win, l++, 2, "T: [%c] TCP", CHECKED(PKT_TYPE_TCP)); mvwprintw(win, l++, 2, "O: [%c] OLSR", CHECKED(PKT_TYPE_OLSR)); mvwprintw(win, l++, 2, "B: [%c] BATMAN", CHECKED(PKT_TYPE_BATMAN)); mvwprintw(win, l++, 2, "M: [%c] MeshCruzer", CHECKED(PKT_TYPE_MESHZ)); l = 4; wattron(win, WHITE); wattron(win, A_BOLD); mvwprintw(win, l++, MAC_COL, "BSSID"); wattroff(win, A_BOLD); mvwprintw(win, l++, MAC_COL, "s: [%c] %s", CHECK_ETHER(conf.filterbssid), ether_sprintf(conf.filterbssid)); l++; mvwprintw(win, l++, MAC_COL, "Show only these"); wattron(win, A_BOLD); mvwprintw(win, l++, MAC_COL, "Source MAC ADDRESSES"); wattroff(win, A_BOLD); for (i = 0; i < MAX_FILTERMAC; i++) { mvwprintw(win, l++, MAC_COL, "%d: [%c] %s", i+1, CHECK_FILTER_EN(i), ether_sprintf(conf.filtermac[i])); } l++; wattron(win, A_BOLD); mvwprintw(win, l++, MAC_COL, "o: [%c] All Filters Off", conf.filter_off ? '*' : ' ' ); wattroff(win, A_BOLD); print_centered(win, FILTER_MAX, 57, "[ Press key or ENTER ]"); wrefresh(win); }
void update_history_win(WINDOW *win) { int i; int col = COLS-2; int sig, rat; if (col > MAX_HISTORY) col = 4 + MAX_HISTORY; werase(win); wattron(win, WHITE); box(win, 0 , 0); print_centered(win, 0, COLS, " Signal/Rate History "); mvwhline(win, SIGN_POS, 1, ACS_HLINE, col); mvwhline(win, SIGN_POS+2, 1, ACS_HLINE, col); mvwvline(win, 1, 4, ACS_VLINE, LINES-3); wattron(win, GREEN); mvwprintw(win, 2, 1, "dBm"); mvwprintw(win, normalize_db(30, SIGN_POS - 1) + 1, 1, "-30"); mvwprintw(win, normalize_db(40, SIGN_POS - 1) + 1, 1, "-40"); mvwprintw(win, normalize_db(50, SIGN_POS - 1) + 1, 1, "-50"); mvwprintw(win, normalize_db(60, SIGN_POS - 1) + 1, 1, "-60"); mvwprintw(win, normalize_db(70, SIGN_POS - 1) + 1, 1, "-70"); mvwprintw(win, normalize_db(80, SIGN_POS - 1) + 1, 1, "-80"); mvwprintw(win, normalize_db(90, SIGN_POS - 1) + 1, 1, "-90"); mvwprintw(win, SIGN_POS-1, 1, "-99"); mvwprintw(win, 1, col-6, "Signal"); wattron(win, CYAN); mvwprintw(win, TYPE_POS, 1, "TYP"); mvwprintw(win, 2, col-11, "Packet Type"); wattron(win, A_BOLD); wattron(win, BLUE); mvwprintw(win, 3, col-4, "Rate"); mvwprintw(win, RATE_POS-12, 1, "300"); mvwprintw(win, RATE_POS-11, 1, "275"); mvwprintw(win, RATE_POS-10, 1, "250"); mvwprintw(win, RATE_POS-9, 1, "225"); mvwprintw(win, RATE_POS-8, 1, "200"); mvwprintw(win, RATE_POS-7, 1, "175"); mvwprintw(win, RATE_POS-6, 1, "150"); mvwprintw(win, RATE_POS-5, 1, "125"); mvwprintw(win, RATE_POS-4, 1, "100"); mvwprintw(win, RATE_POS-3, 1, " 75"); mvwprintw(win, RATE_POS-2, 1, " 50"); mvwprintw(win, RATE_POS-1, 1, " 25"); wattroff(win, A_BOLD); i = hist.index - 1; while (col > 4 && hist.signal[i] != 0) { sig = normalize_db(-hist.signal[i], SIGN_POS - 1); wattron(win, ALLGREEN); mvwvline(win, sig + 1, col, ACS_BLOCK, SIGN_POS - sig - 1); wattron(win, get_packet_type_color(hist.type[i])); mvwprintw(win, TYPE_POS, col, "%c", \ get_packet_type_char(hist.type[i])); if (hist.retry[i]) mvwprintw(win, TYPE_POS+1, col, "r"); rat = hist.rate[i]/250; wattron(win, A_BOLD); wattron(win, BLUE); mvwvline(win, RATE_POS - rat, col, 'x', rat); wattroff(win, A_BOLD); i--; col--; if (i < 0) i = MAX_HISTORY-1; } wnoutrefresh(win); }
void update_filter_win(WINDOW *win) { int l, i, t, col = 2; box(win, 0 , 0); print_centered(win, 0, 57, " Edit Filters "); for (t = 0; t < WLAN_NUM_TYPES; t++) { l = 2; wattron(win, get_packet_type_color(WLAN_FRAME_FC(t, 0))); wattron(win, A_BOLD); if (t == 0) mvwprintw(win, l++, col, "m: [%c] Management", CHECKED(conf.filter_stype[t] & 0xffff)); else if (t == 1) mvwprintw(win, l++, col, "c: [%c] Control", CHECKED(conf.filter_stype[t] & 0xffff)); else mvwprintw(win, l++, col, "d: [%c] Data", CHECKED(conf.filter_stype[t] & 0xffff)); wattroff(win, A_BOLD); for (i = 0; i < WLAN_NUM_STYPES; i++) { if (stype_names[t][i].c != '-') mvwprintw(win, l++, col, "%c: [%c] %s", stype_names[t][i].c, CHECKED(conf.filter_stype[t] & BIT(i)), stype_names[t][i].name); } col += 19; } l = 15; wattron(win, RED); mvwprintw(win, l++, 21, "*: [%c] Bad FCS", CHECKED(conf.filter_badfcs)); wattroff(win, RED); wattron(win, A_BOLD); mvwprintw(win, l++, 21, "0: [%c] All Off", CHECKED(conf.filter_off)); wattroff(win, A_BOLD); l = SECOND_ROW-1; wattron(win, A_BOLD); mvwprintw(win, l++, 2, "Higher Level Protocols"); wattroff(win, A_BOLD); wattron(win, WHITE); mvwprintw(win, l++, 2, "r: [%c] ARP", CHECKED(conf.filter_pkt & PKT_TYPE_ARP)); mvwprintw(win, l++, 2, "M: [%c] ICMP/PING", CHECKED(conf.filter_pkt & PKT_TYPE_ICMP)); mvwprintw(win, l++, 2, "i: [%c] IP", CHECKED(conf.filter_pkt & PKT_TYPE_IP)); l = SECOND_ROW; mvwprintw(win, l++, 21, "V: [%c] UDP", CHECKED(conf.filter_pkt & PKT_TYPE_UDP)); mvwprintw(win, l++, 21, "W: [%c] TCP", CHECKED(conf.filter_pkt & PKT_TYPE_TCP)); l = SECOND_ROW; mvwprintw(win, l++, 40, "I: [%c] OLSR", CHECKED(conf.filter_pkt & PKT_TYPE_OLSR)); mvwprintw(win, l++, 40, "K: [%c] BATMAN", CHECKED(conf.filter_pkt & PKT_TYPE_BATMAN)); mvwprintw(win, l++, 40, "Z: [%c] Meshz", CHECKED(conf.filter_pkt & PKT_TYPE_MESHZ)); l = THIRD_ROW; wattron(win, A_BOLD); mvwprintw(win, l++, MAC_COL, "Source MAC Addresses"); wattroff(win, A_BOLD); for (i = 0; i < MAX_FILTERMAC; i++) { mvwprintw(win, l++, MAC_COL, "%d: [%c] " MAC_FMT, i+1, CHECKED(conf.filtermac_enabled[i]), MAC_PAR(conf.filtermac[i])); } l = THIRD_ROW; wattron(win, A_BOLD); mvwprintw(win, l++, MODE_COL, "BSSID"); wattroff(win, A_BOLD); mvwprintw(win, l++, MODE_COL, "_: [%c] " MAC_FMT, CHECKED(MAC_NOT_EMPTY(conf.filterbssid)), MAC_PAR(conf.filterbssid)); l++; wattron(win, A_BOLD); mvwprintw(win, l++, MODE_COL, "Mode"); wattroff(win, A_BOLD); mvwprintw(win, l++, MODE_COL, "!: [%c] Access Point", CHECKED(conf.filter_mode & WLAN_MODE_AP)); mvwprintw(win, l++, MODE_COL, "@: [%c] Station", CHECKED(conf.filter_mode & WLAN_MODE_STA)); mvwprintw(win, l++, MODE_COL, "#: [%c] IBSS (Ad-hoc)", CHECKED(conf.filter_mode & WLAN_MODE_IBSS)); mvwprintw(win, l++, MODE_COL, "%: [%c] WDS/4ADDR", CHECKED(conf.filter_mode & WLAN_MODE_4ADDR)); mvwprintw(win, l++, MODE_COL, "^: [%c] Unknown", CHECKED(conf.filter_mode & WLAN_MODE_UNKNOWN)); wattroff(win, WHITE); print_centered(win, ++l, FILTER_WIN_WIDTH, "[ Press key or ENTER ]"); wrefresh(win); }
void update_statistics_win(WINDOW *win) { int i; int line; int bps, dps, pps, rps; float duration; werase(win); wattron(win, WHITE); box(win, 0 , 0); print_centered(win, 0, COLS, " Packet Statistics "); if (stats.packets == 0) { wnoutrefresh(win); return; /* avoid floating point exceptions */ } mvwprintw(win, 2, 2, "Packets: %d", stats.packets ); mvwprintw(win, 3, 2, "Bytes: %s (%d)", kilo_mega_ize(stats.bytes), stats.bytes ); mvwprintw(win, 4, 2, "Average: ~%d B/Pkt", stats.bytes / stats.packets); mvwprintw(win, 2, 40, "Retries: %3.1f%% (%d)", stats.retries * 100.0 / stats.packets, stats.retries); get_per_second(stats.bytes, stats.duration, stats.packets, stats.retries, &bps, &dps, &pps, &rps); bps = bps * 8; mvwprintw(win, 3, 40, "Total bit/sec: %s (%d)", kilo_mega_ize(bps), bps); wattron(win, A_BOLD); mvwprintw(win, 4, 40, "Total Usage: %3.1f%% (%d)", dps * 1.0 / 10000, dps ); /* usec in % */ wattroff(win, A_BOLD); line = 6; mvwprintw(win, line, STAT_PACK_POS, " Packets"); mvwprintw(win, line, STAT_BYTE_POS, " Bytes"); mvwprintw(win, line, STAT_BPP_POS, "~B/P"); mvwprintw(win, line, STAT_PP_POS, "Pkts%%"); mvwprintw(win, line, STAT_BP_POS, "Byte%%"); wattron(win, A_BOLD); mvwprintw(win, line, STAT_AIR_POS, "Usage%%"); mvwprintw(win, line++, 2, "RATE"); wattroff(win, A_BOLD); mvwhline(win, line++, 2, '-', COLS-4); for (i = 1; i < MAX_RATES && line < LINES - 2; i++) { if (stats.packets_per_rate[i] > 0) { wattron(win, A_BOLD); if (i <= 12) mvwprintw(win, line, 2, "%3dM", rate_index_to_rate(i)/10); else mvwprintw(win, line, 2, "MCS%d", i - 12); wattroff(win, A_BOLD); mvwprintw(win, line, STAT_PACK_POS, "%8d", stats.packets_per_rate[i]); mvwprintw(win, line, STAT_BYTE_POS, "%8s", kilo_mega_ize(stats.bytes_per_rate[i])); mvwprintw(win, line, STAT_BPP_POS, "%4d", stats.bytes_per_rate[i] / stats.packets_per_rate[i]); mvwprintw(win, line, STAT_PP_POS, "%2.1f", stats.packets_per_rate[i] * 100.0 / stats.packets); mvwprintw(win, line, STAT_BP_POS, "%2.1f", stats.bytes_per_rate[i] * 100.0 / stats.bytes); wattron(win, A_BOLD); duration = stats.duration_per_rate[i] * 100.0 / stats.duration; mvwprintw(win, line, STAT_AIR_POS, "%2.1f", duration); mvwhline(win, line, STAT_AIRG_POS, '*', normalize(duration, 100, COLS - STAT_AIRG_POS - 2)); wattroff(win, A_BOLD); line++; } } line++; if (line < LINES - 2) { mvwprintw(win, line, STAT_PACK_POS, " Packets"); mvwprintw(win, line, STAT_BYTE_POS, " Bytes"); mvwprintw(win, line, STAT_BPP_POS, "~B/P"); mvwprintw(win, line, STAT_PP_POS, "Pkts%%"); mvwprintw(win, line, STAT_BP_POS, "Byte%%"); wattron(win, A_BOLD); mvwprintw(win, line, STAT_AIR_POS, "Usage%%"); mvwprintw(win, line++, 2, "TYPE"); wattroff(win, A_BOLD); } if (line < LINES - 2) mvwhline(win, line++, 2, '-', COLS - 4); for (i = 0; i < MAX_FSTYPE && line < LINES - 2; i++) { if (stats.packets_per_type[i] > 0) { wattron(win, get_packet_type_color(i)); wattron(win, A_BOLD); mvwprintw(win, line, 2, "%s", get_packet_type_name(i)); wattroff(win, A_BOLD); mvwprintw(win, line, STAT_PACK_POS, "%8d", stats.packets_per_type[i]); mvwprintw(win, line, STAT_BYTE_POS, "%8s", kilo_mega_ize(stats.bytes_per_type[i])); mvwprintw(win, line, STAT_BPP_POS, "%4d", stats.bytes_per_type[i] / stats.packets_per_type[i]); mvwprintw(win, line, STAT_PP_POS, "%2.1f", stats.packets_per_type[i] * 100.0 / stats.packets); mvwprintw(win, line, STAT_BP_POS, "%2.1f", stats.bytes_per_type[i] * 100.0 / stats.bytes); wattron(win, A_BOLD); if (stats.duration > 0) duration = stats.duration_per_type[i] * 100.0 / stats.duration; else duration = 100.0; mvwprintw(win, line, STAT_AIR_POS, "%2.1f", duration); mvwhline(win, line, STAT_AIRG_POS, '*', normalize(duration, 100, COLS - STAT_AIRG_POS - 2)); wattroff(win, A_BOLD); line++; } } wnoutrefresh(win); }