Beispiel #1
0
void
update_channel_win(WINDOW *win)
{
	box(win, 0 , 0);
	print_centered(win, 0, 39, " Channel Settings ");

	mvwprintw(win, 2, 2, "a: [%c] Automatically change channel",
		  conf.do_change_channel ? '*' : ' ');
	mvwprintw(win, 3, 2, "d: Channel dwell time: %d ms   ",
		  conf.channel_time/1000);
	mvwprintw(win, 4, 2, "u: Upper channel limit: %d  ", conf.channel_max);

	mvwprintw(win, 6, 2, "m: Manually change channel: %d  ", channel_get_current_chan());

	print_centered(win, 8, 39, "[ Press key or ENTER ]");

	wrefresh(win);
}
Beispiel #2
0
void
update_help_win(WINDOW *win)
{
	int i, t, col, l;

	werase(win);
	wattron(win, WHITE);
	box(win, 0 , 0);
	print_centered(win, 0, COLS, " Help ");
	print_centered(win, 2, COLS, "HORST - Horsts OLSR Radio Scanning Tool (or)");
	print_centered(win, 3, COLS, "HORST - Highly Optimized Radio Scanning Tool");

	print_centered(win, 5, COLS, "Version " VERSION " (build date " __DATE__ " " __TIME__ ")");
	print_centered(win, 6, COLS, "(C) 2005-2015 Bruno Randolf, Licensed under the GPLv2");

	mvwprintw(win, 8, 2, "Known IEEE802.11 Packet Types:");

	for (t = 0; t < WLAN_NUM_TYPES; t++) {
		wattron(win, A_BOLD);
		if (t == 0) {
			l = 10;
			col = 4;
			mvwprintw(win, l++, 2, "MANAGEMENT FRAMES");
		}
		else if (t == 1) {
			l++;
			mvwprintw(win, l++, 2, "CONTROL FRAMES");

		} else {
			l = 10;
			col = 47;
			mvwprintw(win, l++, 45, "DATA FRAMES");
		}
		wattroff(win, A_BOLD);

		for (i = 0; i < WLAN_NUM_STYPES; i++) {
			if (stype_names[t][i].c != '-')
				mvwprintw(win, l++, col, "%c  %-6s  %s",
					  stype_names[t][i].c,
					  stype_names[t][i].name,
					  stype_names[t][i].desc);
		}
	}

	wattron(win, WHITE);
	print_centered(win, 39, COLS, "For more info read the man page or check http://br1.einfach.org/horst/");

	wrefresh(win);
}
Beispiel #3
0
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);
}
Beispiel #4
0
int
filter_input(WINDOW *win, int c)
{
	char buf[18];
	int i;

	switch (c) {
	case 'm':
		TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_MGMT);
		if (conf.filter_pkt & PKT_TYPE_MGMT)
			conf.filter_pkt |= PKT_TYPE_ALL_MGMT;
		else
			conf.filter_pkt &= ~PKT_TYPE_ALL_MGMT;
		break;
	case 'b': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_BEACON); break;
	case 'p': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_PROBE); break;
	case 'a': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ASSOC); break;
	case 'u': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_AUTH); break;
	case 'c':
		TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_CTRL);
		if (conf.filter_pkt & PKT_TYPE_CTRL)
			conf.filter_pkt |= PKT_TYPE_ALL_CTRL;
		else
			conf.filter_pkt &= ~PKT_TYPE_ALL_CTRL;
		break;
	case 'r': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_CTS | PKT_TYPE_RTS); break;
	case 'k': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ACK); break;
	case 'd':
		TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_DATA);
		if (conf.filter_pkt & PKT_TYPE_DATA)
			conf.filter_pkt |= PKT_TYPE_ALL_DATA;
		else
			conf.filter_pkt &= ~PKT_TYPE_ALL_DATA;
		break;
	case 'q': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_QDATA); break;
	case 'n': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_NULL); break;
	case 'R': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ARP); break;
	case 'P': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ICMP); break;
	case 'I': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_IP); break;
	case 'U': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_UDP); break;
	case 'T': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_TCP); break;
	case 'O': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_OLSR|PKT_TYPE_OLSR_LQ|PKT_TYPE_OLSR_GW); break;
	case 'B': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_BATMAN); break;
	case 'M': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_MESHZ); break;

	case 's':
		echo();
		print_centered(win, FILTER_MAX, 57,
			       "[ Enter new BSSID and ENTER ]");
		mvwprintw(win, 5, MAC_COL + 4, ">");
		mvwgetnstr(win, 5, MAC_COL + 7, buf, 17);
		noecho();
		convert_string_to_mac(buf, conf.filterbssid);
		break;

	case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
		i = c - '1';
		if (MAC_NOT_EMPTY(conf.filtermac[i]) && conf.filtermac_enabled[i]) {
			conf.filtermac_enabled[i] = 0;
		}
		else {
			echo();
			print_centered(win, FILTER_MAX, 57,
				       "[ Enter new MAC %d and ENTER ]", i+1);
			mvwprintw(win, 9 + i, MAC_COL + 4, ">");
			mvwgetnstr(win, 9 + i, MAC_COL + 7, buf, 17);
			noecho();
			/* just enable old MAC if user pressed return only */
			if (*buf == '\0' && MAC_NOT_EMPTY(conf.filtermac[i]))
				conf.filtermac_enabled[i] = 1;
			else {
				convert_string_to_mac(buf, conf.filtermac[i]);
				if (MAC_NOT_EMPTY(conf.filtermac[i]))
					conf.filtermac_enabled[i] = true;
			}
		}
		break;

	case 'o':
		conf.filter_off = conf.filter_off ? 0 : 1;
		break;

	default:
		return 0;
	}

	/* convenience: */
	/* if one of the individual mgmt frames is deselected we dont want to see all mgmt frames */
	if ((conf.filter_pkt & PKT_TYPE_ALL_MGMT) != PKT_TYPE_ALL_MGMT)
		conf.filter_pkt = conf.filter_pkt & ~PKT_TYPE_MGMT;
	/* same for ctl */
	if ((conf.filter_pkt & PKT_TYPE_ALL_CTRL) != PKT_TYPE_ALL_CTRL)
		conf.filter_pkt = conf.filter_pkt & ~PKT_TYPE_CTRL;
	/* same for data */
	if ((conf.filter_pkt & PKT_TYPE_ALL_DATA) != PKT_TYPE_ALL_DATA)
		conf.filter_pkt = conf.filter_pkt & ~PKT_TYPE_DATA;

	/* recalculate filter flag */
	conf.do_macfilter = 0;
	for (i = 0; i < MAX_FILTERMAC; i++) {
		if (conf.filtermac_enabled[i])
			conf.do_macfilter = 1;
	}

	net_send_filter_config();

	update_filter_win(win);
	return 1;
}
Beispiel #5
0
void
update_channel_win(WINDOW *win)
{
	int l = 2;

	box(win, 0 , 0);
	print_centered(win, 0, 39, " Channel Settings ");

	wattron(win, WHITE);
	for (int b = 0; b < channel_get_num_bands(); b++) {
		const struct band_info* bp = channel_get_band(b);
		int c = channel_get_idx_from_band_idx(b, 0);
		int col = channel_get_chan(c) > 14 ? COL_BAND2 : 2;
		wattron(win, A_BOLD);
		mvwprintw(win, 2, col, "%s: %s",
			col == 2 ? "2.4GHz" : "5GHz",
			channel_width_string(bp->max_chan_width, -1));

		if (bp->streams_rx || bp->streams_tx)
			wprintw(win, " %dx%d", bp->streams_rx, bp->streams_tx);
		wattroff(win, A_BOLD);
		l = 3;
		for (int i = 0; (c = channel_get_idx_from_band_idx(b, i)) != -1; i++) {
			if (c == conf.channel_idx)
				wattron(win, CYAN);
			else
				wattron(win, WHITE);
			mvwprintw(win, l++,
				col,
				"%s", channel_get_string(c));
		}
	}
	wattroff(win, WHITE);

	l = 17;
	wattron(win, A_BOLD);
	mvwprintw(win, l++, 2, "s: [%c] Scan",
		  CHECKED(conf.do_change_channel));
	wattroff(win, A_BOLD);
	mvwprintw(win, l++, 2, "d: Dwell: %d ms   ",
		  conf.channel_time/1000);
	mvwprintw(win, l++, 2, "u: Upper limit: %d  ", conf.channel_max);

	l++;
	wattron(win, A_BOLD);
	mvwprintw(win, l++, 2, "m: Set channel: %d  ",
		channel_get_chan(conf.channel_idx));
	wattroff(win, A_BOLD);
	mvwprintw(win, l++, 2, "1: [%c] 20 (no HT)",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_20_NOHT));
	mvwprintw(win, l++, 2, "2: [%c] HT20",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_20));
	mvwprintw(win, l++, 2, "4: [%c] HT40-",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_40 && !conf.channel_set_ht40plus));
	mvwprintw(win, l++, 2, "5: [%c] HT40+",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_40 && conf.channel_set_ht40plus));
	mvwprintw(win, l++, 2, "8: [%c] VHT80",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_80));
	mvwprintw(win, l++, 2, "6: [%c] VHT160",
		CHECKED(conf.channel_set_width == CHAN_WIDTH_160));

	print_centered(win, CHANNEL_WIN_HEIGHT-1, CHANNEL_WIN_WIDTH,
		       "[ Press key or ENTER ]");
	wrefresh(win);
}
Beispiel #6
0
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);
}
Beispiel #7
0
bool filter_input(WINDOW *win, int c)
{
	char buf[18];
	int i, t;

	switch (c) {
	case 'm': TOGGLE_BITSET(conf.filter_stype[WLAN_FRAME_TYPE_MGMT], 0xffff, uint16_t); break;
	case 'c': TOGGLE_BITSET(conf.filter_stype[WLAN_FRAME_TYPE_CTRL], 0xffff, uint16_t); break;
	case 'd': TOGGLE_BITSET(conf.filter_stype[WLAN_FRAME_TYPE_DATA], 0xffff, uint16_t); break;

	case 'r': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ARP); break;
	case 'M': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_ICMP); break;
	case 'i': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_IP); break;
	case 'V': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_UDP); break;
	case 'W': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_TCP); break;
	case 'I': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_OLSR); break;
	case 'K': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_BATMAN); break;
	case 'Z': TOGGLE_BIT(conf.filter_pkt, PKT_TYPE_MESHZ); break;

	case '!': TOGGLE_BIT(conf.filter_mode, WLAN_MODE_AP); break;
	case '@': TOGGLE_BIT(conf.filter_mode, WLAN_MODE_STA); break;
	case '#': TOGGLE_BIT(conf.filter_mode, WLAN_MODE_IBSS); break;
	case '%': TOGGLE_BIT(conf.filter_mode, WLAN_MODE_4ADDR); break;
	case '^': TOGGLE_BIT(conf.filter_mode, WLAN_MODE_UNKNOWN); break;

	case '_':
		echo();
		print_centered(win, FILTER_WIN_HEIGHT-1, FILTER_WIN_WIDTH,
			       "[ Enter new BSSID and ENTER ]");
		mvwprintw(win, THIRD_ROW + 1, MODE_COL + 4, ">");
		mvwgetnstr(win, THIRD_ROW + 1, MODE_COL + 7, buf, 17);
		noecho();
		convert_string_to_mac(buf, conf.filterbssid);
		break;

	case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
		i = c - '1';
		if (MAC_NOT_EMPTY(conf.filtermac[i]) && conf.filtermac_enabled[i]) {
			conf.filtermac_enabled[i] = 0;
		}
		else {
			echo();
			print_centered(win, FILTER_WIN_HEIGHT-1, FILTER_WIN_WIDTH,
				       "[ Enter new MAC %d and ENTER ]", i+1);
			mvwprintw(win, THIRD_ROW + 1 + i, MAC_COL + 4, ">");
			mvwgetnstr(win, THIRD_ROW + 1 + i, MAC_COL + 7, buf, 17);
			noecho();
			/* just enable old MAC if user pressed return only */
			if (*buf == '\0' && MAC_NOT_EMPTY(conf.filtermac[i]))
				conf.filtermac_enabled[i] = 1;
			else {
				convert_string_to_mac(buf, conf.filtermac[i]);
				if (MAC_NOT_EMPTY(conf.filtermac[i]))
					conf.filtermac_enabled[i] = true;
			}
		}
		break;

	case '0':
		conf.filter_off = conf.filter_off ? 0 : 1;
		break;

	case '*':
		conf.filter_badfcs = conf.filter_badfcs ? 0 : 1;
		break;

	default:
		for (t = 0; t < WLAN_NUM_TYPES; t++) {
			for (i = 0; i < WLAN_NUM_STYPES; i++) {
				if (stype_names[t][i].c == c) {
					TOGGLE_BIT(conf.filter_stype[t], BIT(i));
					goto out;
				}
			}
		}
		return false; // not found
	}

out:
	/* recalculate filter flag */
	conf.do_macfilter = 0;
	for (i = 0; i < MAX_FILTERMAC; i++) {
		if (conf.filtermac_enabled[i])
			conf.do_macfilter = 1;
	}

	net_send_filter_config();

	update_filter_win(win);
	return true;
}
Beispiel #8
0
int
main(int argc,
     char *argv[])
{
	int
	  graph, i;			/* loop variable */

	FILE *output,			/* output (print) file */
	 *input;			/* input file */
	char
	 *p, *q, totals[60], titles[80], buffer[LINE_SIZE];	/* holds one line */
	Data_point *t;
	Vector *v;
	double

	 
		peak,
		sustain,
		temp,
		temp2,
		temp3, temp4, total, x[3], y[3], area, minjti, cross_over;


	/*
	 * Step 1: check command line parameters
	 */
	progname = argv[0];		/* save program name */
	if (argc != 3) {
		fprintf(stderr, "Usage: %s input-file output-file\n",
			progname);
		exit(1);
	}
	/*
	 * Step 2: Open the input file, create output file
	 */
	input = fopen(argv[1], "r");	/* open input file */
	if (input == NULL) {		/* if we can't read it */
		fprintf(stderr, "%s: Unable to open input file %s\n",	/* talk to human */
			progname, argv[1]);
		exit(1);		/* and die */
	}
	output = fopen(argv[2], "w");	/* create output file */
	if (output == NULL) {		/* if we can't read it */
		fprintf(stderr, "%s: Unable to create output file %s\n",	/* talk to human */
			progname, argv[2]);
		exit(1);		/* and die */
	}
	/*
	 * Step 3: Pull out header records
	 */
	get_line(input, buffer);	/* read in a line */
	get_line(input, buffer);	/* read in a line */
	for (p = buffer, i = 0; i < 4; i++) {
		q = p;
		while (*p != '\t' && *p != '\0')
			p++;
		*p++ = '\0';
		header[i] = strdup(q);
	}
	get_line(input, buffer);	/* read in a line */
	get_line(input, buffer);	/* read in a line */
	/*
	 * Step 4: Fetch data values
	 */
	while (!feof(input)) {		/* while not at end of file */
		t = (Data_point *) malloc(sizeof (Data_point));
		get_line(input, buffer);	/* read in a line */
		if (t == NULL) {
			fprintf(stderr,
				"%s: Unable to allocate memory for line %d.\n",
				progname, line_count);
			exit(1);
		}
		i = sscanf(buffer, "%lf%lf%lf%lf%lf%lf",
			   &t->task, &t->task_rate, &t->jti,
			   &t->real, &t->cpu, &t->jobs_sec_user);
		if (i != 6) {
			fprintf(stderr, "%s: Syntax error on line %d.\n",
				progname, line_count);
			exit(1);
		}
		t->next = data;
		data = t;
		data_points++;
	}
	fclose(input);

	/*
	 * Step 4.5: Calculate sustained and find peak and minimum jti   12/95
	 */

	/*
	 * find peak    
	 */

	peak = 0.0;
	minjti = 100.0;
	t = data;
	for (i = 0; i < data_points; i++) {
		temp = t->task_rate;
		temp2 = t->jti;
		if (temp > peak)
			peak = temp;
		if (temp2 < minjti && i > 1)
			minjti = temp2;
		t = t->next;
	}
	fprintf(stderr, "Peak value is:   %.1f\n", peak);
	fprintf(stderr, "Minimum JTI value is:   %.0f\n", minjti);

	/*
	 * look for cross-over  
	 */
	/*
	 * crossover point can be determined by the last two set of data points.
	 * *  cross_over = [(X1 * Y2) - (X2 * Y1)] / (X1 - Y1 - X2 +Y2)
	 * *  we need the crossover point to calculate the sustained performance
	 * *  correctly
	 */


	t = data;
	for (i = 0; i < 3; i++) {
		x[i] = t->task;
		y[i] = t->task_rate;
		t = t->next;
	}

	cross_over =
		((x[1] * y[2]) - (x[2] * y[1])) / (x[1] - y[1] - x[2] + y[2]);
	fprintf(stderr, "Cross Over value is:   %.1f\n", cross_over);

	/*
	 * to calculate sustained value, calculate the area under the curve
	 * *  using the trapezoidal rule.
	 */

	total = 0.0;
	temp3 = 0.0;
	temp4 = 0.0;
	t = data;
	for (i = 0; i < data_points; i++) {
		temp2 = t->task;
		temp = t->task_rate;
		if (i > 1) {
			if (temp4 < cross_over) {
				area = fabs(((temp + temp3) / 2) * (temp2 -
								    temp4));
				total = total + area;
			} else {
				area = fabs(((cross_over +
					      temp) / 2) * (cross_over -
							    temp2));
				total = total + area;
			}
		}
		temp3 = temp;
		temp4 = temp2;
		t = t->next;
	}

	sustain = sqrt(total);

	fprintf(stderr, "Sustained value is:   %.1f\n", sustain);

	/*
	 * Step 5: Prime for postscript output
	 */
	for (i = 0; i < NUM_PS_INIT; i++)
		fprintf(output, "%s\n", ps_init[i]);
	v = (Vector *) malloc(sizeof (Vector) * data_points);

	/*
	 * Step 6: Print each graph
	 */
	for (graph = 0; graph < 5; graph++) {
		double

		 
			max_x = 0.0, max_y = 0.0,
			base_x, base_y, factor_x, factor_y, delta_x, delta_y;
		t = data;
		for (i = 0; i < data_points; i++) {
			v[i].x = t->task;
			switch (graph) {
			case 0:
				v[i].y = t->task_rate;
				break;
			case 1:
				v[i].y = t->jti;
				break;
			case 2:
				v[i].y = t->real;
				break;
			case 3:
				v[i].y = t->cpu;
				break;
			case 4:
				v[i].y = t->jobs_sec_user;
				break;
			default:
				fprintf(stderr, "%s: Internal error. i = %d\n",
					progname, graph);
				exit(1);
			}
			if (max_y < v[i].y)
				max_y = v[i].y;
			if (max_x < v[i].x)
				max_x = v[i].x;
			t = t->next;
		}

		set_xscale(&max_x);
		set_yscale(&max_y);
		delta_x = 1.0 / max_x;
		delta_y = 1.0 / max_y;
		factor_x = delta_x * GRAPH_WIDTH;
		factor_y = delta_y * GRAPH_HEIGHT;
		base_y = BOTTOM_SPACE + graph * VERTICAL_SPACE_BETWEEN_GRAPHS;
		base_x = LEFT_MARGIN;
		print_centered(output, graph_names[graph], 4.5,
			       base_y + GRAPH_HEIGHT + 0.05, 12);
		fprintf(output, "0.1 setlinewidth\n");
		fprintf(output, "\t%g inch %g inch moveto\n",
			base_x + v[0].x * factor_x,
			base_y + v[0].y * factor_y);
		fprintf(output, "\t%g inch %g inch moveto\n",
			base_x + v[0].x * factor_x, base_y);
		for (i = 1; i < data_points; i++) {
			double

			 
				x = base_x + v[i].x * factor_x,
				y = base_y + v[i].y * factor_y;
			fprintf(output, "\t%g inch %g inch lineto\n", x, y);
		}
		fprintf(output, "\t%g inch %g inch lineto\n",
			base_x + v[data_points - 1].x * factor_x, base_y);
		fprintf(output,
			"closepath gsave 0.75 setgray fill grestore stroke\n");
		fprintf(output, "\tstroke\n");
		fprintf(output, "3 setlinewidth\n");
		draw_line(output, base_x, base_y - 0.1, base_x,
			  base_y + GRAPH_HEIGHT + 0.1);
		draw_line(output, base_x - 0.1, base_y,
			  base_x + GRAPH_WIDTH + 0.1, base_y);
		fprintf(output, "1 setlinewidth\n");
		for (i = 1; i <= 10; i++) {
			char buffer[20];

			sprintf(buffer, "%g", (double)i * max_x / 10.0);
			draw_line(output,
				  base_x +
				  factor_x * (max_x / 10.0) * (double)i,
				  base_y,
				  base_x +
				  factor_x * (max_x / 10.0) * (double)i,
				  base_y - 0.1);
			print_centered(output, buffer,
				       base_x +
				       factor_x * (max_x / 10.0) * (double)i,
				       base_y - 0.25, 10);
		}
		for (i = 1; i <= 4; i++) {
			char buffer[20];
			double y =
				base_y + factor_y * (max_y / 4.0) * (double)i;
			sprintf(buffer, "%g", (double)i * max_y / 4.0);
			draw_line(output, base_x - 0.1, y,
				  base_x + GRAPH_WIDTH, y);
			print_right(output, buffer, base_x - 0.25, y, 10);
		}
	}

	sprintf(titles, "%s     %s", header[2], header[3]);
	sprintf(totals, "Peak = %.1f   Sustained = %.1f    Minimum JTI = %.0f",
		peak, sustain, minjti);

	print_centered(output, header[0], 4.5, 10.25, 24);
	print_centered(output, titles, 4.5, 10.0, 16);
	print_centered(output, totals, 4.5, 9.75, 12);	/*  add peak, sustained, jti */
	print_centered(output, "Loads", 4.5, BOTTOM_SPACE - 0.5, 16);
	print_centered(output,
		       "Copyright (c) 1996 - 2001 Caldera International, Inc.",
		       4.0, 0.50, 8);
	print_centered(output, "All Rights Reserved.", 5.8, 0.50, 8);
	print_centered(output, "These results are not certified.", 4.5, 0.35,
		       8);
	fprintf(output, "showpage\n");
	fclose(output);
	exit(0);
}
Beispiel #9
0
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);
}
Beispiel #10
0
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);
}