diff --git a/Makefile b/Makefile index 0d8bef6..bc16cac 100644 --- a/Makefile +++ b/Makefile @@ -43,164 +43,3 @@ nodepend: rm -f depend # DO NOT DELETE - -iftop.o: /usr/include/pcap/pcap.h /usr/include/sys/types.h -iftop.o: /usr/include/features.h /usr/include/sys/cdefs.h -iftop.o: /usr/include/gnu/stubs.h /usr/include/bits/types.h -iftop.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -iftop.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h -iftop.o: /usr/include/sys/select.h /usr/include/bits/select.h -iftop.o: /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h -iftop.o: /usr/include/sys/time.h /usr/include/bits/time.h -iftop.o: /usr/include/pcap/net/bpf.h /usr/include/stdio.h -iftop.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -iftop.o: /usr/include/libio.h /usr/include/_G_config.h -iftop.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h -iftop.o: /usr/include/alloca.h /usr/include/net/ethernet.h -iftop.o: /usr/include/linux/if_ether.h /usr/include/netinet/ip.h -iftop.o: /usr/include/netinet/in.h /usr/include/limits.h -iftop.o: /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h -iftop.o: /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h -iftop.o: /usr/include/stdint.h /usr/include/bits/wordsize.h -iftop.o: /usr/include/bits/socket.h /usr/include/bits/sockaddr.h -iftop.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h -iftop.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h -iftop.o: /usr/include/pthread.h /usr/include/sched.h -iftop.o: /usr/include/bits/sched.h /usr/include/signal.h -iftop.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sigthread.h -iftop.o: /usr/include/curses.h /usr/include/ncurses/unctrl.h -iftop.o: /usr/include/ncurses/curses.h /usr/include/string.h iftop.h -iftop.o: addr_hash.h /usr/include/sys/socket.h /usr/include/arpa/inet.h -iftop.o: hash.h resolver.h ui.h -addr_hash.o: /usr/include/stdio.h /usr/include/features.h -addr_hash.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -addr_hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -addr_hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -addr_hash.o: /usr/include/bits/types.h /usr/include/libio.h -addr_hash.o: /usr/include/_G_config.h /usr/include/bits/stdio_lim.h -addr_hash.o: /usr/include/stdlib.h /usr/include/sys/types.h -addr_hash.o: /usr/include/time.h /usr/include/endian.h -addr_hash.o: /usr/include/bits/endian.h /usr/include/sys/select.h -addr_hash.o: /usr/include/bits/select.h /usr/include/bits/sigset.h -addr_hash.o: /usr/include/sys/sysmacros.h /usr/include/alloca.h addr_hash.h -addr_hash.o: /usr/include/sys/socket.h /usr/include/bits/socket.h -addr_hash.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h -addr_hash.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h -addr_hash.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h -addr_hash.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h -addr_hash.o: /usr/include/netinet/in.h /usr/include/stdint.h -addr_hash.o: /usr/include/bits/wordsize.h /usr/include/bits/in.h -addr_hash.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h hash.h -addr_hash.o: iftop.h -hash.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h -hash.o: /usr/include/gnu/stubs.h -hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -hash.o: /usr/include/bits/types.h /usr/include/libio.h -hash.o: /usr/include/_G_config.h /usr/include/bits/stdio_lim.h -hash.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h -hash.o: /usr/include/endian.h /usr/include/bits/endian.h -hash.o: /usr/include/sys/select.h /usr/include/bits/select.h -hash.o: /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h -hash.o: /usr/include/alloca.h hash.h iftop.h -ns_hash.o: /usr/include/stdio.h /usr/include/features.h -ns_hash.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -ns_hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -ns_hash.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -ns_hash.o: /usr/include/bits/types.h /usr/include/libio.h -ns_hash.o: /usr/include/_G_config.h /usr/include/bits/stdio_lim.h -ns_hash.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h -ns_hash.o: /usr/include/endian.h /usr/include/bits/endian.h -ns_hash.o: /usr/include/sys/select.h /usr/include/bits/select.h -ns_hash.o: /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h -ns_hash.o: /usr/include/alloca.h /usr/include/sys/socket.h -ns_hash.o: /usr/include/bits/socket.h /usr/include/limits.h -ns_hash.o: /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h -ns_hash.o: /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h -ns_hash.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h -ns_hash.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h -ns_hash.o: /usr/include/stdint.h /usr/include/bits/wordsize.h -ns_hash.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h -ns_hash.o: /usr/include/arpa/inet.h ns_hash.h hash.h iftop.h -resolver.o: /usr/include/netinet/in.h /usr/include/features.h -resolver.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -resolver.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h -resolver.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h -resolver.o: /usr/include/bits/posix2_lim.h /usr/include/stdint.h -resolver.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -resolver.o: /usr/include/bits/wordsize.h /usr/include/sys/types.h -resolver.o: /usr/include/bits/types.h /usr/include/time.h -resolver.o: /usr/include/endian.h /usr/include/bits/endian.h -resolver.o: /usr/include/sys/select.h /usr/include/bits/select.h -resolver.o: /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h -resolver.o: /usr/include/bits/socket.h /usr/include/bits/sockaddr.h -resolver.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h -resolver.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h -resolver.o: /usr/include/sys/socket.h /usr/include/arpa/inet.h -resolver.o: /usr/include/pthread.h /usr/include/sched.h -resolver.o: /usr/include/bits/sched.h /usr/include/signal.h -resolver.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sigthread.h -resolver.o: /usr/include/stdio.h -resolver.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -resolver.o: /usr/include/libio.h /usr/include/_G_config.h -resolver.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h -resolver.o: /usr/include/alloca.h /usr/include/netdb.h -resolver.o: /usr/include/rpc/netdb.h /usr/include/errno.h -resolver.o: /usr/include/bits/errno.h /usr/include/linux/errno.h -resolver.o: /usr/include/asm/errno.h /usr/include/string.h ns_hash.h hash.h -resolver.o: iftop.h -ui.o: /usr/include/curses.h /usr/include/stdio.h /usr/include/features.h -ui.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -ui.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -ui.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -ui.o: /usr/include/bits/types.h /usr/include/libio.h /usr/include/_G_config.h -ui.o: /usr/include/bits/stdio_lim.h /usr/include/ncurses/unctrl.h -ui.o: /usr/include/ncurses/curses.h /usr/include/string.h /usr/include/math.h -ui.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h -ui.o: /usr/include/bits/mathcalls.h -ui.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/float.h -ui.o: /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h -ui.o: /usr/include/bits/sched.h /usr/include/signal.h -ui.o: /usr/include/bits/sigset.h /usr/include/bits/pthreadtypes.h -ui.o: /usr/include/bits/sigthread.h /usr/include/stdlib.h -ui.o: /usr/include/sys/types.h /usr/include/endian.h -ui.o: /usr/include/bits/endian.h /usr/include/sys/select.h -ui.o: /usr/include/bits/select.h /usr/include/sys/sysmacros.h -ui.o: /usr/include/alloca.h /usr/include/sys/time.h /usr/include/bits/time.h -ui.o: addr_hash.h /usr/include/sys/socket.h /usr/include/bits/socket.h -ui.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h -ui.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h -ui.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h -ui.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h -ui.o: /usr/include/netinet/in.h /usr/include/stdint.h -ui.o: /usr/include/bits/wordsize.h /usr/include/bits/in.h -ui.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h hash.h iftop.h -ui.o: resolver.h sorted_list.h -util.o: /usr/include/sys/types.h /usr/include/features.h -util.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -util.o: /usr/include/bits/types.h -util.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -util.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h -util.o: /usr/include/sys/select.h /usr/include/bits/select.h -util.o: /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h -util.o: /usr/include/errno.h /usr/include/bits/errno.h -util.o: /usr/include/linux/errno.h /usr/include/asm/errno.h -util.o: /usr/include/stdio.h -util.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -util.o: /usr/include/libio.h /usr/include/_G_config.h -util.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h -util.o: /usr/include/alloca.h /usr/include/string.h /usr/include/unistd.h -util.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h -util.o: /usr/include/getopt.h iftop.h -sorted_list.o: /usr/include/stdlib.h /usr/include/features.h -sorted_list.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h -sorted_list.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stddef.h -sorted_list.o: /usr/include/sys/types.h /usr/include/bits/types.h -sorted_list.o: /usr/include/time.h /usr/include/endian.h -sorted_list.o: /usr/include/bits/endian.h /usr/include/sys/select.h -sorted_list.o: /usr/include/bits/select.h /usr/include/bits/sigset.h -sorted_list.o: /usr/include/sys/sysmacros.h /usr/include/alloca.h -sorted_list.o: /usr/include/stdio.h -sorted_list.o: /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/stdarg.h -sorted_list.o: /usr/include/libio.h /usr/include/_G_config.h -sorted_list.o: /usr/include/bits/stdio_lim.h sorted_list.h iftop.h diff --git a/iftop.c b/iftop.c index 96146f2..b20c276 100644 --- a/iftop.c +++ b/iftop.c @@ -29,7 +29,8 @@ pthread_mutex_t tick_mutex; -#define CAPTURE_LENGTH 512 +/* Only need ethernet and IP headers. */ +#define CAPTURE_LENGTH 48 void init_history() { history = addr_hash_create(); diff --git a/ui.c b/ui.c index 7008f7b..c159384 100644 --- a/ui.c +++ b/ui.c @@ -15,7 +15,7 @@ #include "resolver.h" #include "sorted_list.h" -#define HOSTNAME_LENGTH 20 +#define HOSTNAME_LENGTH 256 #define HISTORY_DIVISIONS 3 @@ -87,10 +87,16 @@ void ui_print() { hash_node_type* n = NULL; sorted_list_node* nn = NULL; char hostname[HOSTNAME_LENGTH]; - char line[80]; // FIXME + static char *line; + static int lcols; int y = 2; sorted_list_type screen_list; + if (!line || lcols != COLS) { + xfree(line); + line = calloc(COLS + 1, 1); + } + screen_list.compare = &screen_line_compare; sorted_list_initialise(&screen_list); @@ -119,11 +125,12 @@ void ui_print() { sorted_list_insert(&screen_list, screen_line); } + /* Screen layout: we have 2 * HISTORY_DIVISIONS 6-character wide history + * items, and so can use COLS - 12 * HISTORY_DIVISIONS to print the two + * host names. */ + while((nn = sorted_list_next_item(&screen_list, nn)) != NULL) { - int x = 0; - int j; - int L; - int t; + int x = 0, j, L, t; host_pair_line* screen_line = (host_pair_line*)nn->data; if(history_len < history_divs[j]) { @@ -132,15 +139,17 @@ void ui_print() { t = history_divs[j] * RESOLUTION; } + L = COLS - 12 * HISTORY_DIVISIONS; + resolve(&screen_line->ap->src, hostname, HOSTNAME_LENGTH); - sprintf(line, "%s ", hostname); + sprintf(line, "%s", hostname); mvaddstr(y, x, line); - x += 20; + x += L / 2 - 2; resolve(&screen_line->ap->dst, hostname, HOSTNAME_LENGTH); - sprintf(line ,"=> %10s ", hostname); + sprintf(line, " => %*s", L / 2 - 2, hostname); mvaddstr(y, x, line); - x += 24; + x = L; for(j = 0; j < HISTORY_DIVISIONS; j++) { readable_size(screen_line->sent[j] / t, line, 10);