X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppstats%2Fpppstats.c;h=a0d3d7f5b6d00f6968ff5c5d9f99b25d5ba43a0d;hp=36e1ed60dd6c7f42af3003f52496f36cdf786ee2;hb=3371dbae2932c2f3035587d05962240d95b1f63b;hpb=a6bdb0dc29e5779e2d35bae19739d3ce93f72335 diff --git a/pppstats/pppstats.c b/pppstats/pppstats.c index 36e1ed6..a0d3d7f 100644 --- a/pppstats/pppstats.c +++ b/pppstats/pppstats.c @@ -31,8 +31,12 @@ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +#ifndef __STDC__ +#define const +#endif + #ifndef lint -static char rcsid[] = "$Id: pppstats.c,v 1.22 1998/03/31 23:48:03 paulus Exp $"; +static const char rcsid[] = "$Id: pppstats.c,v 1.28 2000/04/24 02:54:18 masputra Exp $"; #endif #include @@ -49,6 +53,11 @@ static char rcsid[] = "$Id: pppstats.c,v 1.22 1998/03/31 23:48:03 paulus Exp $"; #include #ifndef STREAMS +#if defined(_linux_) && defined(__powerpc__) \ + && (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0) +/* kludge alert! */ +#undef __GLIBC__ +#endif #include /* *BSD, Linux, NeXT, Ultrix etc. */ #ifndef _linux_ #include @@ -57,11 +66,12 @@ static char rcsid[] = "$Id: pppstats.c,v 1.22 1998/03/31 23:48:03 paulus Exp $"; #else /* Linux */ #if __GLIBC__ >= 2 +#include /* glibc 2 conflicts with linux/types.h */ #include #else +#include #include #endif -#include #include #include #endif /* _linux_ */ @@ -89,6 +99,14 @@ extern int optind; extern char *optarg; #endif +/* + * If PPP_DRV_NAME is not defined, use the legacy "ppp" as the + * device name. + */ +#if !defined(PPP_DRV_NAME) +#define PPP_DRV_NAME "ppp" +#endif /* !defined(PPP_DRV_NAME) */ + static void usage __P((void)); static void catchalarm __P((int)); static void get_ppp_stats __P((struct ppp_stats *)); @@ -173,17 +191,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; @@ -318,26 +344,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 { @@ -426,7 +452,7 @@ main(argc, argv) char *dev; #endif - interface = "ppp0"; + interface = PPP_DRV_NAME "0"; if ((progname = strrchr(argv[0], '/')) == NULL) progname = argv[0]; else @@ -480,7 +506,7 @@ main(argc, argv) if (argc > 0) interface = argv[0]; - if (sscanf(interface, "ppp%d", &unit) != 1) { + if (sscanf(interface, PPP_DRV_NAME "%d", &unit) != 1) { fprintf(stderr, "%s: invalid interface '%s' specified\n", progname, interface); } @@ -512,7 +538,7 @@ main(argc, argv) #ifdef __osf__ dev = "/dev/streams/ppp"; #else - dev = "/dev/ppp"; + dev = "/dev/" PPP_DRV_NAME; #endif if ((s = open(dev, O_RDONLY)) < 0) { fprintf(stderr, "%s: couldn't open ", progname);