1 1.16 christos /* $NetBSD: mbufs.c,v 1.16 2012/11/23 01:43:10 christos Exp $ */ 2 1.2 jtc 3 1.1 jtc /*- 4 1.1 jtc * Copyright (c) 1980, 1992, 1993 5 1.1 jtc * The Regents of the University of California. All rights reserved. 6 1.1 jtc * 7 1.1 jtc * Redistribution and use in source and binary forms, with or without 8 1.1 jtc * modification, are permitted provided that the following conditions 9 1.1 jtc * are met: 10 1.1 jtc * 1. Redistributions of source code must retain the above copyright 11 1.1 jtc * notice, this list of conditions and the following disclaimer. 12 1.1 jtc * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 jtc * notice, this list of conditions and the following disclaimer in the 14 1.1 jtc * documentation and/or other materials provided with the distribution. 15 1.12 agc * 3. Neither the name of the University nor the names of its contributors 16 1.1 jtc * may be used to endorse or promote products derived from this software 17 1.1 jtc * without specific prior written permission. 18 1.1 jtc * 19 1.1 jtc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 1.1 jtc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 1.1 jtc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 1.1 jtc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 1.1 jtc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 1.1 jtc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 1.1 jtc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 1.1 jtc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 1.1 jtc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 1.1 jtc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 1.1 jtc * SUCH DAMAGE. 30 1.1 jtc */ 31 1.1 jtc 32 1.4 mrg #include <sys/cdefs.h> 33 1.1 jtc #ifndef lint 34 1.2 jtc #if 0 35 1.1 jtc static char sccsid[] = "@(#)mbufs.c 8.1 (Berkeley) 6/6/93"; 36 1.2 jtc #endif 37 1.16 christos __RCSID("$NetBSD: mbufs.c,v 1.16 2012/11/23 01:43:10 christos Exp $"); 38 1.1 jtc #endif /* not lint */ 39 1.1 jtc 40 1.1 jtc #include <sys/param.h> 41 1.16 christos #define MBUFTYPES 42 1.1 jtc #include <sys/mbuf.h> 43 1.16 christos #include <sys/sysctl.h> 44 1.1 jtc 45 1.1 jtc #include <stdlib.h> 46 1.16 christos #include <errno.h> 47 1.16 christos #include <string.h> 48 1.10 simonb 49 1.1 jtc #include "systat.h" 50 1.1 jtc #include "extern.h" 51 1.1 jtc 52 1.1 jtc static struct mbstat *mb; 53 1.1 jtc 54 1.16 christos #define NNAMES __arraycount(mbuftypes) 55 1.1 jtc 56 1.1 jtc WINDOW * 57 1.9 ad openmbufs(void) 58 1.1 jtc { 59 1.6 mrg 60 1.11 dsl return (subwin(stdscr, -1, 0, 5, 0)); 61 1.1 jtc } 62 1.1 jtc 63 1.1 jtc void 64 1.9 ad closembufs(WINDOW *w) 65 1.1 jtc { 66 1.6 mrg 67 1.1 jtc if (w == NULL) 68 1.1 jtc return; 69 1.1 jtc wclear(w); 70 1.1 jtc wrefresh(w); 71 1.1 jtc delwin(w); 72 1.1 jtc } 73 1.1 jtc 74 1.1 jtc void 75 1.9 ad labelmbufs(void) 76 1.1 jtc { 77 1.6 mrg 78 1.1 jtc wmove(wnd, 0, 0); wclrtoeol(wnd); 79 1.1 jtc mvwaddstr(wnd, 0, 10, 80 1.1 jtc "/0 /5 /10 /15 /20 /25 /30 /35 /40 /45 /50 /55 /60"); 81 1.1 jtc } 82 1.1 jtc 83 1.1 jtc void 84 1.9 ad showmbufs(void) 85 1.1 jtc { 86 1.13 dsl int i, j, max, idx; 87 1.1 jtc char buf[10]; 88 1.1 jtc 89 1.1 jtc if (mb == 0) 90 1.1 jtc return; 91 1.16 christos for (j = 1; j <= getmaxy(wnd); j++) { 92 1.13 dsl max = 0, idx = -1; 93 1.3 jtc for (i = 0; i < getmaxy(wnd); i++) 94 1.1 jtc if (mb->m_mtypes[i] > max) { 95 1.1 jtc max = mb->m_mtypes[i]; 96 1.13 dsl idx = i; 97 1.1 jtc } 98 1.1 jtc if (max == 0) 99 1.1 jtc break; 100 1.16 christos if (j >= (int)NNAMES) 101 1.16 christos mvwprintw(wnd, j, 0, "%10d", idx); 102 1.1 jtc else 103 1.16 christos mvwprintw(wnd, j, 0, "%-10.10s", &mbuftypes[idx][2]); 104 1.16 christos wmove(wnd, j, 10); 105 1.1 jtc if (max > 60) { 106 1.7 bgrayson snprintf(buf, sizeof buf, " %5d", max); 107 1.1 jtc max = 60; 108 1.1 jtc while (max--) 109 1.1 jtc waddch(wnd, 'X'); 110 1.1 jtc waddstr(wnd, buf); 111 1.1 jtc } else { 112 1.1 jtc wclrtoeol(wnd); 113 1.8 mycroft whline(wnd, 'X', max); 114 1.1 jtc } 115 1.13 dsl mb->m_mtypes[idx] = 0; 116 1.1 jtc } 117 1.16 christos wmove(wnd, j, 0); 118 1.16 christos wclrtobot(wnd); 119 1.1 jtc } 120 1.1 jtc 121 1.1 jtc int 122 1.9 ad initmbufs(void) 123 1.1 jtc { 124 1.1 jtc if (mb == 0) 125 1.16 christos mb = calloc(1, sizeof (*mb)); 126 1.1 jtc return(1); 127 1.1 jtc } 128 1.1 jtc 129 1.1 jtc void 130 1.9 ad fetchmbufs(void) 131 1.1 jtc { 132 1.16 christos size_t len = sizeof(*mb); 133 1.16 christos if (sysctlbyname("kern.mbuf.stats", mb, &len, NULL, 0)) 134 1.16 christos error("error getting \"kern.mbuf.stats\": %s", strerror(errno)); 135 1.1 jtc } 136