Date: Fri, 17 Jul 2009 00:51:58 GMT From: Gabor Pali <pgj@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166187 for review Message-ID: <200907170051.n6H0pwJ2069618@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166187 Change 166187 by pgj@petymeg-current on 2009/07/17 00:51:21 Improve nettop: - Create a screen() framework, so user can switch between different monitoring modes. - Add a screen for local and inet connections. - Add a header and footer section. Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/nettop/main.c#9 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/nettop/main.c#9 (text+ko) ==== @@ -33,16 +33,18 @@ #include <stdlib.h> #include <unistd.h> -static void screen(struct socket_type_list *local, - struct socket_type_list *inet); +static void header(void); +static void footer(void); +static void screen_local(void); +static void screen_inet(void); int main(int argc, char *argv[]) { char ch; char running = 1; - struct socket_type_list *local, *inet; - int st_flags, refresh = 0; + int refresh = 0; + void (*screen)(void) = screen_local; initscr(); clear(); @@ -52,25 +54,26 @@ /* Handle input. */ ch = getch(); switch (ch) { + case 'L': + case 'l': + screen = screen_local; + break; + case 'I': + case 'i': + screen = screen_inet; + break; case 'Q': case 'q': running = 0; break; } if (refresh == 0) { - /* Get data. */ - local = netstat_stl_alloc(); - inet = netstat_stl_alloc(); - st_flags = NETSTAT_SOCKET_ALL; - netstat_socket(PF_LOCAL, 0, 0, local, st_flags, NULL); - netstat_socket(PF_INET, 0, 0, inet, st_flags, NULL); - netstat_socket(PF_INET6, 0, 0, inet, st_flags, NULL); /* Render screen. */ clear(); - screen(local, inet); + header(); + screen(); + footer(); refresh(); - netstat_stl_free(local); - netstat_stl_free(inet); refresh = 3; /* Refresh it only in every 4th cycle */ } refresh--; @@ -82,16 +85,34 @@ } void -screen(struct socket_type_list *local, struct socket_type_list *inet) +header(void) +{ + attron(A_STANDOUT); + mvprintw(0, 0, " Very Simple Network Monitor "); + attroff(A_STANDOUT); +} + +void +footer(void) +{ + attron(A_STANDOUT); + mvprintw(24, 0, " Q - Quit, L - PF_LOCAL, I - PF_INET "); + attroff(A_STANDOUT); +} + +void +screen_local(void) { + struct socket_type_list *list; struct socket_type_iterator *stip; const struct socket_type *stp; - struct addr_type *atp, *laddr, *faddr; - int row; + struct addr_type *atp; + int row, st_flags; + + st_flags = NETSTAT_SOCKET_ALL; + list = netstat_stl_alloc(); + netstat_socket(PF_LOCAL, 0, 0, list, st_flags, NULL); - attron(A_STANDOUT); - mvprintw(0, 0, "Very Simple Network Monitor (Press Q to quit)"); - attroff(A_STANDOUT); attron(A_BOLD); mvprintw(2, 0, "Active UNIX domain sockets"); mvprintw(3, 0, @@ -99,8 +120,8 @@ "Address", "Type", "Recv-Q", "Send-Q", "Inode", "Conn", "Refs", "Nextref"); attroff(A_BOLD); - netstat_sti_alloc(local, &stip); - for (stp = netstat_sti_first(stip), row = 4; stp != NULL && row < 14; + netstat_sti_alloc(list, &stip); + for (stp = netstat_sti_first(stip), row = 4; stp != NULL && row < 24; stp = netstat_sti_next(stip), row++) { mvprintw(row, 0, "%8lx %-6.6s %6u %6u %8lx %8lx %8lx %8lx", @@ -117,15 +138,32 @@ } } netstat_sti_free(stip); + netstat_stl_free(list); +} + +void +screen_inet(void) +{ + struct socket_type_list *list; + struct socket_type_iterator *stip; + const struct socket_type *stp; + struct addr_type *laddr, *faddr; + int row, st_flags; + + st_flags = NETSTAT_SOCKET_ALL; + list = netstat_stl_alloc(); + netstat_socket(PF_INET, 0, 0, list, st_flags, NULL); + netstat_socket(PF_INET6, 0, 0, list, st_flags, NULL); + attron(A_BOLD); - mvprintw(15, 0, "Active Internet connections (including servers)"); - mvprintw(16, 0, + mvprintw(2, 0, "Active Internet connections (including servers)"); + mvprintw(3, 0, "%-5.5s %-6.6s %-6.6s %-17.17s %-6.6s %-17.17s %-6.6s (state)", "Proto", "Recv-Q", "Send-Q", "Local Address", "Port", "Foreign Address", "Port"); attroff(A_BOLD); - netstat_sti_alloc(inet, &stip); - for (stp = netstat_sti_first(stip), row = 17; stp != NULL && row < 25; + netstat_sti_alloc(list, &stip); + for (stp = netstat_sti_first(stip), row = 4; stp != NULL && row < 24; stp = netstat_sti_next(stip), row++) { laddr = netstat_st_get_address(stp, 0); faddr = netstat_st_get_address(stp, 1); @@ -141,4 +179,5 @@ netstat_st_get_tcpstate(stp)); } netstat_sti_free(stip); + netstat_stl_free(list); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907170051.n6H0pwJ2069618>