summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pppstats
diff options
context:
space:
mode:
authorlars <lars@FreeBSD.org>1994-11-12 06:07:15 +0000
committerlars <lars@FreeBSD.org>1994-11-12 06:07:15 +0000
commitb50536d92ee42fb36222dac7a6c6851d6ca1ed91 (patch)
tree8c739a7f12f404eed9eec13e2a89badb30d22fa4 /usr.sbin/pppstats
parent91bf4b94c3ce51ce89870b87c0d489e56d7e6224 (diff)
downloadFreeBSD-src-b50536d92ee42fb36222dac7a6c6851d6ca1ed91.zip
FreeBSD-src-b50536d92ee42fb36222dac7a6c6851d6ca1ed91.tar.gz
pppstats from ppp-2.1.2
Diffstat (limited to 'usr.sbin/pppstats')
-rw-r--r--usr.sbin/pppstats/Makefile12
-rw-r--r--usr.sbin/pppstats/pppstats.8131
-rw-r--r--usr.sbin/pppstats/pppstats.c385
3 files changed, 528 insertions, 0 deletions
diff --git a/usr.sbin/pppstats/Makefile b/usr.sbin/pppstats/Makefile
new file mode 100644
index 0000000..e29e830
--- /dev/null
+++ b/usr.sbin/pppstats/Makefile
@@ -0,0 +1,12 @@
+# $Id: Makefile.bsd,v 1.2 1994/04/25 06:48:25 paulus Exp $
+
+PROG= pppstats
+SRCS= pppstats.c
+MAN8= pppstats.8
+
+LDADD= -lutil -lkvm
+BINMODE=2555
+BINGRP= kmem
+BINDIR= /usr/sbin
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/pppstats/pppstats.8 b/usr.sbin/pppstats/pppstats.8
new file mode 100644
index 0000000..b305740
--- /dev/null
+++ b/usr.sbin/pppstats/pppstats.8
@@ -0,0 +1,131 @@
+.\" Modified from slstat.8 by Lars Fredriksen
+.\"
+.\" Copyright (c) 1986 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)pppstats.8 6.8 (Berkeley) 6/20/91
+.\"
+.TH PPPSTATS 1 "November 09, 1994"
+.UC 4
+.SH NAME
+pppstats \- report Point to Point Protocol statistics
+.SH SYNOPSIS
+.nf
+.ft B
+pppstats [ \-i interval ] [ \-v ] [ unit ] [ system ] [ core ]
+.ft R
+.fi
+.SH DESCRIPTION
+.I Pppstats
+reports certain kernel statistics kept about Point to Point
+Protocol traffic.
+.PP
+The options are as follows:
+.TP
+\-i
+Repeat the display indefinitely every
+.I interval
+seconds.
+If no
+.I interval
+is specified, the default is 5 seconds.
+.TP
+\-v
+Verbose display of extra fields of information.
+.TP
+unit
+is a single digit specifying the slip interface. The default unit is
+.I 0
+for interface
+.I ppp0.
+.TP
+system
+Extract the name list from the specified system instead of the default, /kernel.
+.TP
+core
+Extract values associated with the name list from the specified
+core instead of the default, /dev/kmem.
+.PP
+By default,
+.I pppstats
+displays the following information:
+.PP
+.TP
+in
+bytes received
+.TP
+out
+bytes sent
+.TP
+pack
+packets received or sent
+.TP
+comp
+compressed packets received or sent
+.TP
+uncomp
+uncompressed packets received or sent
+.TP
+err
+input or output errors
+.PP
+With the \-v option, the following information is also displayed:
+.TP
+toss
+inbound packets tossed because of error
+.TP
+search
+searches for connection state
+.TP
+miss
+times we could not find a connectoin state
+.SH EXAMPLES
+The command ``pppstats -i 5'' will print what the system is doing every five
+seconds.
+.SH FILES
+.ta \w'/dev/kmem 'u
+/kernel default kernel namelist
+.br
+/dev/kmem default memory file
+.SH SEE ALSO
+.IR fstat (1),
+.IR netstat (1),
+.IR nfsstat (1),
+.IR ps (1),
+.IR systat (1),
+.IR iostat (8),
+.IR pstat (8)
+.IR slstat (8)
+.sp
+The sections starting with ``Interpreting system activity'' in
+.IR "Installing and Operating 4.3BSD" .
+.SH BUGS
+
diff --git a/usr.sbin/pppstats/pppstats.c b/usr.sbin/pppstats/pppstats.c
new file mode 100644
index 0000000..cabaced
--- /dev/null
+++ b/usr.sbin/pppstats/pppstats.c
@@ -0,0 +1,385 @@
+/*
+ * print PPP statistics:
+ * pppstats [-i interval] [-v] [interface] [system] [core]
+ *
+ * Brad Parker (brad@cayman.com) 6/92
+ *
+ * from the original "slstats" by Van Jaconson
+ *
+ * Copyright (c) 1989 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley. The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989:
+ * - Initial distribution.
+ */
+
+#ifndef lint
+static char rcsid[] = "$Id: pppstats.c,v 1.4 1994/06/08 00:38:49 paulus Exp $";
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <nlist.h>
+#include <stdio.h>
+#include <limits.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>
+#include <netinet/ip.h>
+#include <netinet/ip_var.h>
+
+#define VJC 1
+#include <net/slcompress.h>
+
+#ifndef STREAMS
+#include <net/if_ppp.h>
+#endif
+
+#ifdef STREAMS
+#define PPP_STATS 1 /* should be defined iff it is in ppp_if.c */
+#include <sys/stream.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;
+
+#if defined(sun) || defined(__FreeBSD__)
+#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
+ { "_pii" },
+ "",
+};
+#else
+struct nlist nl[] = {
+#define N_SOFTC 0
+ { "_ppp_softc" },
+ "",
+};
+#endif
+
+#ifndef BSD4_4
+char *system = "/vmunix";
+#else
+#include <paths.h>
+#if defined(__FreeBSD__)
+ /* _PATH_UNIX is defined as "Do not use _PATH_UNIX" */
+char *system = NULL;
+#else
+char *system = _PATH_UNIX;
+#endif
+#endif
+
+int kflag;
+int vflag;
+unsigned interval = 5;
+int unit;
+
+extern char *malloc();
+
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+
+ char errbuf[_POSIX2_LINE_MAX];
+ --argc; ++argv;
+ while (argc > 0) {
+ if (strcmp(argv[0], "-v") == 0) {
+ ++vflag;
+ ++argv, --argc;
+ continue;
+ }
+ if (strcmp(argv[0], "-i") == 0 && argv[1] &&
+ isdigit(argv[1][0])) {
+ interval = atoi(argv[1]);
+ if (interval <= 0)
+ usage();
+ ++argv, --argc;
+ ++argv, --argc;
+ continue;
+ }
+ if (isdigit(argv[0][0])) {
+ unit = atoi(argv[0]);
+ if (unit < 0)
+ usage();
+ ++argv, --argc;
+ continue;
+ }
+ if (kflag)
+ usage();
+
+ system = *argv;
+ ++argv, --argc;
+ if (argc > 0) {
+ kmemf = *argv++;
+ --argc;
+ kflag++;
+ }
+ }
+#ifndef KVMLIB
+ if (nlist(system, nl) < 0 || nl[0].n_type == 0) {
+ fprintf(stderr, "%s: no namelist\n", system);
+ exit(1);
+ }
+ kmem = open(kmemf, O_RDONLY);
+ if (kmem < 0) {
+ perror(kmemf);
+ exit(1);
+ }
+#ifndef ultrix
+ if (kflag) {
+ off_t off;
+
+ Sysmap = (struct pte *)
+ malloc((u_int)(nl[N_SYSSIZE].n_value * sizeof(struct pte)));
+ if (!Sysmap) {
+ fputs("pppstats: can't get memory for Sysmap.\n", stderr);
+ exit(1);
+ }
+ off = nl[N_SYSMAP].n_value & ~KERNBASE;
+ (void)lseek(kmem, off, L_SET);
+ (void)read(kmem, (char *)Sysmap,
+ (int)(nl[N_SYSSIZE].n_value * sizeof(struct pte)));
+ }
+#endif
+#else
+#if defined(sun)
+ /* SunOS */
+ if ((kd = kvm_open(system, kmemf, (char *)0, O_RDONLY, NULL)) == NULL) {
+ perror("kvm_open");
+ exit(1);
+ }
+#else
+ /* BSD4.3+ */
+ if ((kd = kvm_openfiles(system, kmemf, NULL, O_RDONLY, errbuf)) == NULL) {
+ fprintf(stderr, "kvm_openfiles: %s", errbuf);
+ exit(1);
+ }
+#endif
+
+ if (kvm_nlist(KDARG nl)) {
+ fprintf(stderr, "pppstats: can't find symbols in nlist\n");
+ exit(1);
+ }
+#endif
+ intpr();
+ exit(0);
+}
+
+#ifndef KVMLIB
+/*
+ * Seek into the kernel for a value.
+ */
+off_t
+klseek(fd, base, off)
+ int fd, 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));
+}
+#endif
+
+usage()
+{
+ fprintf(stderr,"usage: pppstats [-i interval] [-v] [unit] [system] [core]\n");
+ exit(1);
+}
+
+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
+ * collected over that interval. Assumes that interval is non-zero.
+ * First line printed at top of screen is always cumulative.
+ */
+intpr()
+{
+ register int line = 0;
+ int oldmask;
+#ifdef __STDC__
+ void catchalarm(int);
+#else
+ void catchalarm();
+#endif
+
+ STRUCT *sc, *osc;
+
+ nl[N_SOFTC].n_value += unit * sizeof(STRUCT);
+ sc = (STRUCT *)malloc(sizeof(STRUCT));
+ osc = (STRUCT *)malloc(sizeof(STRUCT));
+
+ bzero((char *)osc, sizeof(STRUCT));
+
+ while (1) {
+#ifndef KVMLIB
+ 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(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');
+ }
+
+ printf("%6d %6d %6d %6d %6d",
+#ifdef BSD4_4
+ V(STATS.if_ibytes),
+#else
+#ifndef STREAMS
+ V(sc_bytesrcvd),
+#else
+#ifdef PPP_STATS
+ V(pii_stats.ppp_ibytes),
+#else
+ 0,
+#endif
+#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,
+#endif
+#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));
+ }
+}
+
+/*
+ * Called if an interval expires before sidewaysintpr has completed a loop.
+ * Sets a flag to not wait for the alarm.
+ */
+void catchalarm(arg)
+int arg;
+{
+ signalled = 1;
+}
OpenPOWER on IntegriCloud