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