mbufs.c revision 1.13 1 /* $NetBSD: mbufs.c,v 1.13 2005/02/26 22:12:33 dsl Exp $ */
2
3 /*-
4 * Copyright (c) 1980, 1992, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 */
31
32 #include <sys/cdefs.h>
33 #ifndef lint
34 #if 0
35 static char sccsid[] = "@(#)mbufs.c 8.1 (Berkeley) 6/6/93";
36 #endif
37 __RCSID("$NetBSD: mbufs.c,v 1.13 2005/02/26 22:12:33 dsl Exp $");
38 #endif /* not lint */
39
40 #include <sys/param.h>
41 #include <sys/mbuf.h>
42
43 #include <stdlib.h>
44
45 #include "systat.h"
46 #include "extern.h"
47
48 static struct mbstat *mb;
49
50 const char *mtnames[] = {
51 "free",
52 "data",
53 "headers",
54 "sockets",
55 "pcbs",
56 "routes",
57 "hosts",
58 "arps",
59 "socknames",
60 "zombies",
61 "sockopts",
62 "frags",
63 "rights",
64 "ifaddrs",
65 };
66
67 #define NNAMES (sizeof (mtnames) / sizeof (mtnames[0]))
68
69 WINDOW *
70 openmbufs(void)
71 {
72
73 return (subwin(stdscr, -1, 0, 5, 0));
74 }
75
76 void
77 closembufs(WINDOW *w)
78 {
79
80 if (w == NULL)
81 return;
82 wclear(w);
83 wrefresh(w);
84 delwin(w);
85 }
86
87 void
88 labelmbufs(void)
89 {
90
91 wmove(wnd, 0, 0); wclrtoeol(wnd);
92 mvwaddstr(wnd, 0, 10,
93 "/0 /5 /10 /15 /20 /25 /30 /35 /40 /45 /50 /55 /60");
94 }
95
96 void
97 showmbufs(void)
98 {
99 int i, j, max, idx;
100 char buf[10];
101
102 if (mb == 0)
103 return;
104 for (j = 0; j < getmaxy(wnd); j++) {
105 max = 0, idx = -1;
106 for (i = 0; i < getmaxy(wnd); i++)
107 if (mb->m_mtypes[i] > max) {
108 max = mb->m_mtypes[i];
109 idx = i;
110 }
111 if (max == 0)
112 break;
113 if (j > NNAMES)
114 mvwprintw(wnd, 1+j, 0, "%10d", idx);
115 else
116 mvwprintw(wnd, 1+j, 0, "%-10.10s", mtnames[idx]);
117 wmove(wnd, 1 + j, 10);
118 if (max > 60) {
119 snprintf(buf, sizeof buf, " %5d", max);
120 max = 60;
121 while (max--)
122 waddch(wnd, 'X');
123 waddstr(wnd, buf);
124 } else {
125 wclrtoeol(wnd);
126 whline(wnd, 'X', max);
127 }
128 mb->m_mtypes[idx] = 0;
129 }
130 wmove(wnd, 1+j, 0); wclrtobot(wnd);
131 }
132
133 static struct nlist namelist[] = {
134 #define X_MBSTAT 0
135 { "_mbstat" },
136 { "" }
137 };
138
139 int
140 initmbufs(void)
141 {
142
143 if (namelist[X_MBSTAT].n_type == 0) {
144 if (kvm_nlist(kd, namelist)) {
145 nlisterr(namelist);
146 return(0);
147 }
148 if (namelist[X_MBSTAT].n_type == 0) {
149 error("No namelist");
150 return(0);
151 }
152 }
153 if (mb == 0)
154 mb = (struct mbstat *)calloc(1, sizeof (*mb));
155 return(1);
156 }
157
158 void
159 fetchmbufs(void)
160 {
161
162 if (namelist[X_MBSTAT].n_type == 0)
163 return;
164 NREAD(X_MBSTAT, mb, sizeof (*mb));
165 }
166