*** empty log message ***
[ppp.git] / pppstats / pppstats.c
index 5fb2f77af47d3ca1e1e7c4fc071031bb23e21705..cab9597867e43506754f14dcc3713af6a44d560e 100644 (file)
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: pppstats.c,v 1.1 1993/11/11 03:54:25 paulus Exp $";
+static char rcsid[] = "$Id: pppstats.c,v 1.3 1994/04/21 03:11:03 paulus Exp $";
 #endif
 
-#include <sys/param.h>
-#include <sys/mbuf.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#ifndef KVMLIB
-#include <machine/pte.h>
-#endif
-#ifdef sun
-#include <kvm.h>
-#endif
 #include <ctype.h>
 #include <errno.h>
 #include <nlist.h>
 #include <stdio.h>
 #include <signal.h>
+#include <sys/param.h>
+#include <sys/mbuf.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/file.h>
 #include <net/if.h>
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
@@ -56,10 +50,42 @@ static char rcsid[] = "$Id: pppstats.c,v 1.1 1993/11/11 03:54:25 paulus Exp $";
 #include <net/if_ppp.h>
 
 #ifdef STREAMS
+#define PPP_STATS      1       /* should be defined iff it is in ppp_if.c */
 #include <sys/stream.h>
-#include "ppp_str.h"
+#include <net/ppp_str.h>
 #endif
 
+#ifdef BSD4_4
+#define KVMLIB
+#endif
+
+#ifndef KVMLIB
+
+#include <machine/pte.h>
+#ifdef ultrix
+#include <machine/cpu.h>
+#endif
+
+struct pte *Sysmap;
+int    kmem;
+char   *kmemf = "/dev/kmem";
+extern off_t lseek();
+
+#else  /* KVMLIB */
+
+char   *kmemf;
+
+#ifdef sun
+#include <kvm.h>
+kvm_t  *kd;
+#define KDARG  kd,
+
+#else  /* sun */
+#define KDARG
+#endif /* sun */
+
+#endif /* KVMLIB */
+
 #ifdef STREAMS
 struct nlist nl[] = {
 #define N_SOFTC 0
@@ -74,31 +100,13 @@ struct nlist nl[] = {
 };
 #endif
 
-#ifndef KVMLIB
-struct pte *Sysmap;
-int    kmem;
-extern off_t lseek();
-#endif
-
-#ifdef sun
-kvm_t  *kd;
-#endif
-
-#ifdef sun
+#ifndef BSD4_4
 char   *system = "/vmunix";
 #else
-#ifdef __NetBSD__
-char   *system = "/netbsd";
-#else
-char   *system = "/386bsd";
-#endif
+#include <paths.h>
+char   *system = _PATH_UNIX;
 #endif
 
-#ifndef KVMLIB
-char   *kmemf = "/dev/kmem";
-#else
-char   *kmemf;
-#endif
 int    kflag;
 int    vflag;
 unsigned interval = 5;
@@ -106,7 +114,6 @@ int unit;
 
 extern char *malloc();
 
-
 main(argc, argv)
        int argc;
        char *argv[];
@@ -155,6 +162,7 @@ main(argc, argv)
                perror(kmemf);
                exit(1);
        }
+#ifndef ultrix
        if (kflag) {
                off_t off;
 
@@ -169,28 +177,25 @@ main(argc, argv)
                (void)read(kmem, (char *)Sysmap,
                    (int)(nl[N_SYSSIZE].n_value * sizeof(struct pte)));
        }
+#endif
 #else
 #ifdef sun
        /* SunOS */
        if ((kd = kvm_open(system, kmemf, (char *)0, O_RDONLY, NULL)) == NULL) {
-         perror("kvm_open");
-         exit(1);
+           perror("kvm_open");
+           exit(1);
        }
 #else
        /* BSD4.3+ */
        if (kvm_openfiles(system, kmemf, (char *)0) == -1) {
-         fprintf(stderr, "kvm_openfiles: %s", kvm_geterr());
-         exit(1);
+           fprintf(stderr, "kvm_openfiles: %s", kvm_geterr());
+           exit(1);
        }
 #endif
 
-#ifdef sun
-       if (kvm_nlist(kd, nl)) {
-#else
-       if (kvm_nlist(nl)) {
-#endif
-         fprintf(stderr, "pppstats: can't find symbols in nlist\n");
-         exit(1);
+       if (kvm_nlist(KDARG nl)) {
+           fprintf(stderr, "pppstats: can't find symbols in nlist\n");
+           exit(1);
        }
 #endif
        intpr();
@@ -207,9 +212,13 @@ klseek(fd, base, off)
        off_t base;
 {
        if (kflag) {
+#ifdef ultrix
+               base = K0_TO_PHYS(base);
+#else
                /* get kernel pte */
                base &= ~KERNBASE;
                 base = ctob(Sysmap[btop(base)].pg_pfnum) + (base & PGOFSET);
+#endif
        }
        return (lseek(fd, base, off));
 }
@@ -225,6 +234,16 @@ u_char     signalled;                      /* set if alarm goes off "early" */
 
 #define V(offset) ((line % 20)? sc->offset - osc->offset : sc->offset)
 
+#ifdef STREAMS
+#define STRUCT struct ppp_if_info
+#define        COMP    pii_sc_comp
+#define        STATS   pii_ifnet
+#else
+#define STRUCT struct ppp_softc
+#define        COMP    sc_comp
+#define        STATS   sc_if
+#endif
+
 /*
  * Print a running summary of interface statistics.
  * Repeat display every interval seconds, showing statistics
@@ -241,15 +260,9 @@ intpr()
        void catchalarm();
 #endif
 
-#ifdef STREAMS
-#define STRUCT struct ppp_if_info
-#else
-#define STRUCT struct ppp_softc
-#endif
-
        STRUCT *sc, *osc;
 
-       nl[N_SOFTC].n_value += unit * sizeof(struct ppp_softc);
+       nl[N_SOFTC].n_value += unit * sizeof(STRUCT);
        sc = (STRUCT *)malloc(sizeof(STRUCT));
        osc = (STRUCT *)malloc(sizeof(STRUCT));
 
@@ -257,89 +270,96 @@ intpr()
 
        while (1) {
 #ifndef KVMLIB
-               if (klseek(kmem, (off_t)nl[N_SOFTC].n_value, 0) < 0)
-                       if(errno != EINTR)
-                               perror("kmem seek");
-               if (read(kmem, (char *)sc, sizeof(STRUCT)) <= 0)
-                       perror("kmem read");
-#else
-#ifdef sun
-               if (kvm_read(kd, nl[N_SOFTC].n_value,
+           if (klseek(kmem, (off_t)nl[N_SOFTC].n_value, 0) == -1) {
+               perror("kmem seek");
+               exit(1);
+           }
+           if (read(kmem, (char *)sc, sizeof(STRUCT)) <= 0) {
+               perror("kmem read");
+               exit(1);
+           }
 #else
-               if (kvm_read(nl[N_SOFTC].n_value,
-#endif
-                            sc, sizeof(STRUCT)) !=
-                   sizeof(STRUCT))
-                 perror("kvm_read");
+           if (kvm_read(KDARG nl[N_SOFTC].n_value, sc,
+                        sizeof(STRUCT)) != sizeof(STRUCT)) {
+               perror("kvm_read");
+               exit(1);
+           }
 #endif
 
-               (void)signal(SIGALRM, catchalarm);
-               signalled = 0;
-               (void)alarm(interval);
-
-               if ((line % 20) == 0) {
-                       printf("%6.6s %6.6s %6.6s %6.6s %6.6s",
-                               "in", "pack", "comp", "uncomp", "err");
-                       if (vflag)
-                               printf(" %6.6s %6.6s", "toss", "ip");
-                       printf(" | %6.6s %6.6s %6.6s %6.6s %6.6s",
-                               "out", "pack", "comp", "uncomp", "ip");
-                       if (vflag)
-                               printf(" %6.6s %6.6s", "search", "miss");
-                       putchar('\n');
-               }
+           (void)signal(SIGALRM, catchalarm);
+           signalled = 0;
+           (void)alarm(interval);
 
-#ifdef STREAMS
-#define        COMP    pii_sc_comp
-#define        STATS   pii_ifnet
-#else
-#define        COMP    sc_comp
-#define        STATS   sc_if
-#endif
+           if ((line % 20) == 0) {
+               printf("%6.6s %6.6s %6.6s %6.6s %6.6s",
+                      "in", "pack", "comp", "uncomp", "err");
+               if (vflag)
+                   printf(" %6.6s %6.6s", "toss", "ip");
+               printf(" | %6.6s %6.6s %6.6s %6.6s %6.6s",
+                      "out", "pack", "comp", "uncomp", "ip");
+               if (vflag)
+                   printf(" %6.6s %6.6s", "search", "miss");
+               putchar('\n');
+           }
 
-               printf("%6d %6d %6d %6d %6d",
-#if BSD > 43
-                       V(STATS.if_ibytes),
+           printf("%6d %6d %6d %6d %6d",
+#ifdef BSD4_4
+                  V(STATS.if_ibytes),
 #else
-                       0,
+#ifndef STREAMS
+                  V(sc_bytesrcvd),
+#else
+#ifdef PPP_STATS
+                  V(pii_stats.ppp_ibytes),
+#else
+                  0,
 #endif
-                       V(STATS.if_ipackets),
-                       V(COMP.sls_compressedin),
-                       V(COMP.sls_uncompressedin),
-                       V(COMP.sls_errorin));
-               if (vflag)
-                       printf(" %6d %6d",
-                               V(COMP.sls_tossed),
-                               V(STATS.if_ipackets) -
-                                 V(COMP.sls_compressedin) -
-                                 V(COMP.sls_uncompressedin) -
-                                 V(COMP.sls_errorin));
-               printf(" | %6d %6d %6d %6d %6d",
-#if BSD > 43
-                       V(STATS.if_obytes),
+#endif
+#endif
+                  V(STATS.if_ipackets),
+                  V(COMP.sls_compressedin),
+                  V(COMP.sls_uncompressedin),
+                  V(COMP.sls_errorin));
+           if (vflag)
+               printf(" %6d %6d",
+                      V(COMP.sls_tossed),
+                      V(STATS.if_ipackets) - V(COMP.sls_compressedin) -
+                       V(COMP.sls_uncompressedin) - V(COMP.sls_errorin));
+           printf(" | %6d %6d %6d %6d %6d",
+#ifdef BSD4_4
+                  V(STATS.if_obytes),
+#else
+#ifndef STREAMS
+                  V(sc_bytessent),
+#else
+#ifdef PPP_STATS
+                  V(pii_stats.ppp_obytes),
 #else
-                       0,
+                  0,
 #endif
-                       V(STATS.if_opackets),
-                       V(COMP.sls_compressed),
-                       V(COMP.sls_packets) - V(COMP.sls_compressed),
-                       V(STATS.if_opackets) - V(COMP.sls_packets));
-               if (vflag)
-                       printf(" %6d %6d",
-                               V(COMP.sls_searches),
-                               V(COMP.sls_misses));
+#endif
+#endif
+                  V(STATS.if_opackets),
+                  V(COMP.sls_compressed),
+                  V(COMP.sls_packets) - V(COMP.sls_compressed),
+                  V(STATS.if_opackets) - V(COMP.sls_packets));
+           if (vflag)
+               printf(" %6d %6d",
+                      V(COMP.sls_searches),
+                      V(COMP.sls_misses));
 
-               putchar('\n');
-               fflush(stdout);
-               line++;
-               oldmask = sigblock(sigmask(SIGALRM));
-               if (! signalled) {
-                       sigpause(0);
-               }
-               sigsetmask(oldmask);
-               signalled = 0;
-               (void)alarm(interval);
-               bcopy((char *)sc, (char *)osc, sizeof(STRUCT));
+           putchar('\n');
+           fflush(stdout);
+           line++;
+
+           oldmask = sigblock(sigmask(SIGALRM));
+           if (! signalled) {
+               sigpause(0);
+           }
+           sigsetmask(oldmask);
+           signalled = 0;
+           (void)alarm(interval);
+           bcopy((char *)sc, (char *)osc, sizeof(STRUCT));
        }
 }