[BACK]Return to mbufs.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / systat

Diff for /src/usr.bin/systat/mbufs.c between version 1.17 and 1.18

version 1.17, 2007/02/25 18:21:24 version 1.18, 2008/06/12 22:26:01
Line 30 
Line 30 
  * SUCH DAMAGE.   * SUCH DAMAGE.
  */   */
   
 #ifndef lint  
 #if 0  
 static char sccsid[] = "@(#)mbufs.c     8.1 (Berkeley) 6/6/93";  
 #endif  
 static char rcsid[] = "$OpenBSD$";  
 #endif /* not lint */  
   
 #include <sys/param.h>  #include <sys/param.h>
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/mbuf.h>  #include <sys/mbuf.h>
Line 47 
Line 40 
 #include <err.h>  #include <err.h>
 #include <paths.h>  #include <paths.h>
 #include "systat.h"  #include "systat.h"
 #include "extern.h"  
   
   
   void print_mb(void);
   int read_mb(void);
   int select_mb(void);
   static void showmbuf(int);
   
 static struct mbstat mb;  static struct mbstat mb;
   
 char *mtnames[] = {  char *mtnames[] = {
Line 68 
Line 66 
         "ifaddrs",          "ifaddrs",
 };  };
   
   #define NUM_TYPES (sizeof(mb.m_mtypes) / sizeof(mb.m_mtypes[0]))
 #define NNAMES  (sizeof (mtnames) / sizeof (mtnames[0]))  #define NNAMES  (sizeof (mtnames) / sizeof (mtnames[0]))
   
 WINDOW *  int mb_index[NUM_TYPES];
 openmbufs(void)  int mbuf_cnt = 0;
 {  
         return (subwin(stdscr, LINES-1-2, 0, 2, 0));  
 }  
   
 void  
 closembufs(WINDOW *w)  field_def fields_mb[] = {
           {"TYPE", 6, 16, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
           {"VALUE", 5, 8, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
           {"", 40, 80, 1, FLD_ALIGN_BAR, -1, 0, 0, 60},
   };
   
   #define FIELD_ADDR(x) (&fields_mb[x])
   
   #define FLD_MB_NAME     FIELD_ADDR(0)
   #define FLD_MB_VALUE    FIELD_ADDR(1)
   #define FLD_MB_BAR      FIELD_ADDR(2)
   
   /* Define views */
   field_def *view_mb_0[] = {
           FLD_MB_NAME, FLD_MB_VALUE, FLD_MB_BAR, NULL
   };
   
   
   /* Define view managers */
   struct view_manager mbuf_mgr = {
           "Mbufs", select_mb, read_mb, NULL, print_header,
           print_mb, keyboard_callback, NULL, NULL
   };
   
   field_view views_mb[] = {
           {view_mb_0, "mbufs", '4', &mbuf_mgr},
           {NULL, NULL, 0, NULL}
   };
   
   
   int
   select_mb(void)
 {  {
         if (w == NULL)          int i, w = 50;
                 return;  
         wclear(w);          read_mb();
         wrefresh(w);          for (i = 0; i < NUM_TYPES; i++)
         delwin(w);                  if (w < (5 * mb.m_mtypes[i] / 4))
                           w = 5 * mb.m_mtypes[i] / 4;
   
           w -= w % 10;
           FLD_MB_BAR->arg = w;
   
           return (0);
 }  }
   
 void  int
 labelmbufs(void)  read_mb(void)
 {  {
         wmove(wnd, 0, 0);          int mib[2], i;
         wclrtoeol(wnd);          size_t size = sizeof (mb);
         mvwaddstr(wnd, 0, 10,  
             "/0   /5   /10  /15  /20  /25  /30  /35  /40  /45  /50  /55  /60");          mib[0] = CTL_KERN;
           mib[1] = KERN_MBSTAT;
   
           if (sysctl(mib, 2, &mb, &size, NULL, 0) < 0) {
                   error("sysctl(KERN_MBSTAT) failed");
                   return 1;
           }
   
           mbuf_cnt = 0;
           memset(mb_index, 0, sizeof(mb_index));
   
           for (i = 0; i < NUM_TYPES; i++) {
                   if (mb.m_mtypes[i])
                           mb_index[mbuf_cnt++] = i;
           }
   
           num_disp = mbuf_cnt;
   
           return 0;
 }  }
   
   
 void  void
 showmbufs(void)  print_mb(void)
 {  {
         int i, j, max, ind;          int n, count = 0;
         char buf[13];  
   
         for (j = 0; j < wnd->_maxy; j++) {          for (n = dispstart; n < num_disp; n++) {
                 max = 0, ind = -1;                  showmbuf(n);
                 for (i = 0; i < wnd->_maxy; i++)                  count++;
                         if (mb.m_mtypes[i] > max) {                  if (maxprint > 0 && count >= maxprint)
                                 max = mb.m_mtypes[i];  
                                 ind = i;  
                         }  
                 if (max == 0)  
                         break;                          break;
                 if (j > NNAMES)  
                         mvwprintw(wnd, 1+j, 0, "%10d", ind);  
                 else  
                         mvwprintw(wnd, 1+j, 0, "%-10.10s", mtnames[ind]);  
                 wmove(wnd, 1 + j, 10);  
                 if (max > 60) {  
                         snprintf(buf, sizeof buf, " %d", max);  
                         max = 60;  
                         while (max--)  
                                 waddch(wnd, 'X');  
                         waddstr(wnd, buf);  
                 } else {  
                         while (max--)  
                                 waddch(wnd, 'X');  
                         wclrtoeol(wnd);  
                 }  
                 mb.m_mtypes[ind] = 0;  
         }          }
         wmove(wnd, 1+j, 0);  
         wclrtobot(wnd);  
 }  }
   
   int
 void  initmembufs(void)
 fetchmbufs(void)  
 {  {
         int mib[2];          field_view *v;
         size_t size = sizeof (mb);  
   
         mib[0] = CTL_KERN;          for (v = views_mb; v->name != NULL; v++)
         mib[1] = KERN_MBSTAT;                  add_view(v);
         if (sysctl(mib, 2, &mb, &size, NULL, 0) < 0)  
                 err(1, "sysctl(KERN_MBSTAT) failed");          return(1);
 }  }
   
 int  
 initmbufs(void)  static void
   showmbuf(int m)
 {  {
         return (1);          int i;
   
           i = mb_index[m];
   
           if (i < NNAMES)
                   print_fld_str(FLD_MB_NAME, mtnames[i]);
           else
                   print_fld_uint(FLD_MB_NAME, i);
   
           print_fld_uint(FLD_MB_VALUE, mb.m_mtypes[i]);
           print_fld_bar(FLD_MB_BAR, mb.m_mtypes[i]);
   
           end_line();
 }  }
   
   

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18