xref: /original-bsd/usr.bin/systat/mbufs.c (revision 40192f2d)
1 #ifndef lint
2 static char sccsid[] = "@(#)mbufs.c	1.6 (Berkeley) 05/01/85";
3 #endif
4 
5 #include "systat.h"
6 #include <sys/mbuf.h>
7 
8 WINDOW *
9 openmbufs()
10 {
11 
12 	return (subwin(stdscr, LINES-5-1, 0, 5, 0));
13 }
14 
15 closembufs(w)
16 	WINDOW *w;
17 {
18 
19 	if (w == NULL)
20 		return;
21 	wclear(w);
22 	wrefresh(w);
23 	delwin(w);
24 }
25 
26 struct	mbstat *mb;
27 
28 labelmbufs()
29 {
30 
31         wmove(wnd, 0, 0); wclrtoeol(wnd);
32         mvwaddstr(wnd, 0, 10,
33            "/0   /5   /10  /15  /20  /25  /30  /35  /40  /45  /50  /55  /60");
34 }
35 
36 char *mtnames[] = {
37 	"free",
38 	"data",
39 	"headers",
40 	"sockets",
41 	"pcbs",
42 	"routes",
43 	"hosts",
44 	"arps",
45 	"socknames",
46 	"zombies",
47 	"sockopts",
48 	"frags",
49 	"rights",
50 	"ifaddrs",
51 };
52 #define	NNAMES	(sizeof (mtnames) / sizeof (mtnames[0]))
53 
54 showmbufs()
55 {
56 	register int i, j, max, index;
57 	char buf[10];
58 
59 	if (mb == 0)
60 		return;
61 	for (j = 0; j < wnd->_maxy; j++) {
62 		max = 0, index = -1;
63 		for (i = 0; i < wnd->_maxy; i++)
64 			if (mb->m_mtypes[i] > max) {
65 				max = mb->m_mtypes[i];
66 				index = i;
67 			}
68 		if (max == 0)
69 			break;
70 		if (j > NNAMES)
71 			mvwprintw(wnd, 1+j, 0, "%10d", index);
72 		else
73 			mvwprintw(wnd, 1+j, 0, "%-10.10s", mtnames[index]);
74 		wmove(wnd, 1 + j, 10);
75 		if (max > 60) {
76 			sprintf(buf, " %d", max);
77 			max = 60;
78 			while (max--)
79 				waddch(wnd, 'X');
80 			waddstr(wnd, buf);
81 		} else {
82 			while (max--)
83 				waddch(wnd, 'X');
84 			wclrtoeol(wnd);
85 		}
86 		mb->m_mtypes[index] = 0;
87 	}
88 	wmove(wnd, 1+j, 0); wclrtobot(wnd);
89 }
90 
91 static struct nlist nlst[] = {
92 #define	X_MBSTAT	0
93 	{ "_mbstat" },
94         { "" }
95 };
96 
97 initmbufs()
98 {
99 
100 	if (nlst[X_MBSTAT].n_type == 0) {
101 		nlist("/vmunix", nlst);
102 		if (nlst[X_MBSTAT].n_type == 0) {
103 			error("namelist on /vmunix failed");
104 			return;
105 		}
106 	}
107 	if (mb == 0)
108 		mb = (struct mbstat *)calloc(1, sizeof (*mb));
109 }
110 
111 fetchmbufs()
112 {
113 
114 	if (nlst[X_MBSTAT].n_type == 0)
115 		return;
116 	lseek(kmem, nlst[X_MBSTAT].n_value, L_SET);
117 	read(kmem, mb, sizeof (*mb));
118 }
119