]> git.ozlabs.org Git - ppp.git/blobdiff - pppstats/pppstats.c
update
[ppp.git] / pppstats / pppstats.c
index aa7457576dcce6a739116fced6a670c6bcbb6633..98ca87ac3a7ac78d7854be734f2f498683c5e8de 100644 (file)
@@ -32,7 +32,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: pppstats.c,v 1.15 1996/08/28 06:43:30 paulus Exp $";
+static const char rcsid[] = "$Id: pppstats.c,v 1.26 1999/08/12 04:25:57 paulus Exp $";
 #endif
 
 #include <stdio.h>
@@ -47,15 +47,34 @@ static char rcsid[] = "$Id: pppstats.c,v 1.15 1996/08/28 06:43:30 paulus Exp $";
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/ioctl.h>
-#include <net/ppp_defs.h>
 
 #ifndef STREAMS
+#if defined(_linux_) && defined(__powerpc__) \
+    && (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
+/* kludge alert! */
+#undef __GLIBC__
+#endif
 #include <sys/socket.h>                /* *BSD, Linux, NeXT, Ultrix etc. */
+#ifndef _linux_
 #include <net/if.h>
+#include <net/ppp_defs.h>
 #include <net/if_ppp.h>
+#else
+/* Linux */
+#if __GLIBC__ >= 2
+#include <asm/types.h>         /* glibc 2 conflicts with linux/types.h */
+#include <net/if.h>
+#else
+#include <linux/types.h>
+#include <linux/if.h>
+#endif
+#include <linux/ppp_defs.h>
+#include <linux/if_ppp.h>
+#endif /* _linux_ */
 
 #else  /* STREAMS */
 #include <sys/stropts.h>       /* SVR4, Solaris 2, SunOS 4, OSF/1, etc. */
+#include <net/ppp_defs.h>
 #include <net/pppio.h>
 
 #endif /* STREAMS */
@@ -71,7 +90,20 @@ int  signalled;              /* set if alarm goes off "early" */
 char   *progname;
 char   *interface;
 
-void
+#if defined(SUNOS4) || defined(ULTRIX) || defined(NeXT)
+extern int optind;
+extern char *optarg;
+#endif
+
+static void usage __P((void));
+static void catchalarm __P((int));
+static void get_ppp_stats __P((struct ppp_stats *));
+static void get_ppp_cstats __P((struct ppp_comp_stats *));
+static void intpr __P((void));
+
+int main __P((int, char *argv[]));
+
+static void
 usage()
 {
     fprintf(stderr, "Usage: %s [-a|-d] [-v|-r|-z] [-c count] [-w wait] [interface]\n",
@@ -83,7 +115,7 @@ usage()
  * Called if an interval expires before intpr has completed a loop.
  * Sets a flag to not wait for the alarm.
  */
-void
+static void
 catchalarm(arg)
     int arg;
 {
@@ -92,7 +124,7 @@ catchalarm(arg)
 
 
 #ifndef STREAMS
-void
+static void
 get_ppp_stats(curp)
     struct ppp_stats *curp;
 {
@@ -118,7 +150,7 @@ get_ppp_stats(curp)
     *curp = req.stats;
 }
 
-void
+static void
 get_ppp_cstats(csp)
     struct ppp_comp_stats *csp;
 {
@@ -147,17 +179,25 @@ get_ppp_cstats(csp)
     }
 
 #ifdef _linux_
+    if (creq.stats.c.bytes_out == 0) {
+       creq.stats.c.bytes_out = creq.stats.c.comp_bytes + creq.stats.c.inc_bytes;
+       creq.stats.c.in_count = creq.stats.c.unc_bytes;
+    }
     if (creq.stats.c.bytes_out == 0)
        creq.stats.c.ratio = 0.0;
     else
-       creq.stats.c.ratio = (double) creq.stats.c.in_count /
-                            (double) creq.stats.c.bytes_out;
+       creq.stats.c.ratio = 256.0 * creq.stats.c.in_count /
+                            creq.stats.c.bytes_out;
 
+    if (creq.stats.d.bytes_out == 0) {
+       creq.stats.d.bytes_out = creq.stats.d.comp_bytes + creq.stats.d.inc_bytes;
+       creq.stats.d.in_count = creq.stats.d.unc_bytes;
+    }
     if (creq.stats.d.bytes_out == 0)
        creq.stats.d.ratio = 0.0;
     else
-       creq.stats.d.ratio = (double) creq.stats.d.in_count /
-                            (double) creq.stats.d.bytes_out;
+       creq.stats.d.ratio = 256.0 * creq.stats.d.in_count /
+                            creq.stats.d.bytes_out;
 #endif
 
     *csp = creq.stats;
@@ -184,7 +224,7 @@ strioctl(fd, cmd, ptr, ilen, olen)
     return 0;
 }
 
-void
+static void
 get_ppp_stats(curp)
     struct ppp_stats *curp;
 {
@@ -198,7 +238,7 @@ get_ppp_stats(curp)
     }
 }
 
-void
+static void
 get_ppp_cstats(csp)
     struct ppp_comp_stats *csp;
 {
@@ -233,7 +273,7 @@ get_ppp_cstats(csp)
  * collected over that interval.  Assumes that interval is non-zero.
  * First line printed is cumulative.
  */
-void
+static void
 intpr()
 {
     register int line = 0;
@@ -292,26 +332,26 @@ intpr()
                       W(d.comp_packets),
                       KBPS(W(d.inc_bytes)),
                       W(d.inc_packets),
-                      ccs.d.ratio * 256.0);
+                      ccs.d.ratio / 256.0);
                printf(" | %8.3f %6u %8.3f %6u %6.2f",
                       KBPS(W(c.comp_bytes)),
                       W(c.comp_packets),
                       KBPS(W(c.inc_bytes)),
                       W(c.inc_packets),
-                      ccs.c.ratio * 256.0);
+                      ccs.c.ratio / 256.0);
            } else {
                printf("%8u %6u %8u %6u %6.2f",
                       W(d.comp_bytes),
                       W(d.comp_packets),
                       W(d.inc_bytes),
                       W(d.inc_packets),
-                      ccs.d.ratio * 256.0);
+                      ccs.d.ratio / 256.0);
                printf(" | %8u %6u %8u %6u %6.2f",
                       W(c.comp_bytes),
                       W(c.comp_packets),
                       W(c.inc_bytes),
                       W(c.inc_packets),
-                      ccs.c.ratio * 256.0);
+                      ccs.c.ratio / 256.0);
            }
        
        } else {
@@ -343,7 +383,6 @@ intpr()
            else
                printf("  | %8u", V(p.ppp_obytes));
            printf(" %6u %6u",
-                  V(p.ppp_obytes),
                   V(p.ppp_opackets),
                   V(vj.vjs_compressed));
            if (!rflag)