diff -u --new-file pppload-1.0/Makefile ./Makefile --- pppload-1.0/Makefile Wed Sep 11 19:49:33 1996 +++ ./Makefile Sat Jan 31 16:54:54 1998 @@ -2,20 +2,20 @@ RM=rm -f LN=ln -sf INSTALL=install -PREFIX=/usr +PREFIX=/usr/local BINDIR=$(PREFIX)/bin MANDIR=$(PREFIX)/man/man1 ####### Directories -QTDIR = /usr/lib/qt +QTDIR = /usr/X11R6/include/X11 #/usr/lib/qt BASEDIR = $(QTDIR) -INCDIR = $(BASEDIR)/include -LIBDIR = $(BASEDIR)/lib +INCDIR = /usr/X11R6/include/X11/qt #$(BASEDIR)/include +LIBDIR = /usr/X11R6/lib #$(BASEDIR)/lib ####### Compiler -CFLAGS = -pipe -O2 -m486 -Wall +CFLAGS = -pipe -O2 -Wall LFLAGS = -L$(LIBDIR) -lqt LEXTRA = CC = g++ @@ -75,7 +75,7 @@ doc: ../h2html-1.0/h2html $(HEADERS) - + srctar: make veryclean make doc @@ -107,70 +107,90 @@ # DO NOT DELETE THIS LINE -- make depend depends on it. -pppload.o: /usr/lib/qt/include/qapp.h /usr/lib/qt/include/qwidget.h -pppload.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h -pppload.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qobject.h -pppload.o: /usr/lib/qt/include/qstring.h /usr/lib/qt/include/qarray.h -pppload.o: /usr/lib/qt/include/qgarray.h /usr/lib/qt/include/qshared.h -pppload.o: /usr/lib/qt/include/qgeneric.h /usr/include/string.h -pppload.o: /usr/include/features.h /usr/include/sys/cdefs.h -pppload.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h -pppload.o: /usr/lib/qt/include/qevent.h /usr/lib/qt/include/qrect.h -pppload.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h -pppload.o: /usr/lib/qt/include/qpaintd.h /usr/lib/qt/include/qpalette.h -pppload.o: /usr/lib/qt/include/qcolor.h /usr/lib/qt/include/qcursor.h -pppload.o: /usr/lib/qt/include/qfont.h /usr/lib/qt/include/qfontmet.h -pppload.o: /usr/lib/qt/include/qfontinf.h PPPStats.H MainWindow.H -pppload.o: /usr/lib/qt/include/qpixmap.h Options.H -PPPStats.o: /usr/include/stdlib.h /usr/include/features.h -PPPStats.o: /usr/include/sys/cdefs.h -PPPStats.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h -PPPStats.o: /usr/include/errno.h /usr/include/linux/errno.h -PPPStats.o: /usr/include/asm/errno.h /usr/include/alloca.h -PPPStats.o: /usr/include/stdio.h /usr/include/libio.h -PPPStats.o: /usr/include/_G_config.h /usr/include/sys/ioctl.h -PPPStats.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h -PPPStats.o: /usr/include/sys/termios.h /usr/include/sys/socketio.h -PPPStats.o: /usr/include/linux/sockios.h /usr/include/asm/sockios.h -PPPStats.o: /usr/include/sys/socket.h /usr/include/linux/socket.h -PPPStats.o: /usr/include/asm/socket.h /usr/include/linux/uio.h -PPPStats.o: /usr/include/sys/types.h /usr/include/linux/types.h -PPPStats.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h -PPPStats.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h -PPPStats.o: /usr/include/net/if.h /usr/include/linux/if.h -PPPStats.o: /usr/include/linux/ppp_defs.h PPPStats.H -PPPStats.o: /usr/lib/qt/include/qobject.h /usr/lib/qt/include/qobjdefs.h -PPPStats.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qstring.h -PPPStats.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h -PPPStats.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h -PPPStats.o: /usr/include/string.h /usr/lib/qt/include/qevent.h -PPPStats.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qrect.h -PPPStats.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h -PPPStats.o: Options.H /usr/lib/qt/include/qcolor.h -MainWindow.o: /usr/lib/qt/include/qpainter.h /usr/lib/qt/include/qpaintd.h -MainWindow.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h -MainWindow.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qrect.h -MainWindow.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h -MainWindow.o: /usr/lib/qt/include/qcolor.h /usr/lib/qt/include/qfontmet.h -MainWindow.o: /usr/lib/qt/include/qfont.h /usr/lib/qt/include/qstring.h -MainWindow.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h -MainWindow.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h -MainWindow.o: /usr/include/string.h /usr/include/features.h -MainWindow.o: /usr/include/sys/cdefs.h -MainWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h -MainWindow.o: /usr/lib/qt/include/qfontinf.h /usr/lib/qt/include/qregion.h -MainWindow.o: /usr/lib/qt/include/qpen.h /usr/lib/qt/include/qbrush.h -MainWindow.o: /usr/lib/qt/include/qpntarry.h /usr/lib/qt/include/qwmatrix.h -MainWindow.o: MainWindow.H /usr/lib/qt/include/qwidget.h -MainWindow.o: /usr/lib/qt/include/qobject.h /usr/lib/qt/include/qevent.h -MainWindow.o: /usr/lib/qt/include/qpalette.h /usr/lib/qt/include/qcursor.h -MainWindow.o: /usr/lib/qt/include/qpixmap.h Options.H -Options.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h -Options.o: Options.H /usr/lib/qt/include/qcolor.h -Options.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h -Options.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qstring.h -Options.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h -Options.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h -Options.o: /usr/include/string.h /usr/include/features.h -Options.o: /usr/include/sys/cdefs.h -Options.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h +pppload.o: /usr/X11R6/include/X11/qt/qapp.h +pppload.o: /usr/X11R6/include/X11/qt/qwidget.h +pppload.o: /usr/X11R6/include/X11/qt/qwindefs.h +pppload.o: /usr/X11R6/include/X11/qt/qobjdefs.h +pppload.o: /usr/X11R6/include/X11/qt/qglobal.h +pppload.o: /usr/X11R6/include/X11/qt/qobject.h +pppload.o: /usr/X11R6/include/X11/qt/qstring.h +pppload.o: /usr/X11R6/include/X11/qt/qarray.h +pppload.o: /usr/X11R6/include/X11/qt/qgarray.h +pppload.o: /usr/X11R6/include/X11/qt/qshared.h +pppload.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h +pppload.o: /usr/include/machine/ansi.h /usr/include/sys/cdefs.h +pppload.o: /usr/X11R6/include/X11/qt/qevent.h +pppload.o: /usr/X11R6/include/X11/qt/qrect.h +pppload.o: /usr/X11R6/include/X11/qt/qsize.h +pppload.o: /usr/X11R6/include/X11/qt/qpoint.h +pppload.o: /usr/X11R6/include/X11/qt/qpaintd.h +pppload.o: /usr/X11R6/include/X11/qt/qpalette.h +pppload.o: /usr/X11R6/include/X11/qt/qcolor.h +pppload.o: /usr/X11R6/include/X11/qt/qcursor.h +pppload.o: /usr/X11R6/include/X11/qt/qfont.h +pppload.o: /usr/X11R6/include/X11/qt/qfontmet.h +pppload.o: /usr/X11R6/include/X11/qt/qfontinf.h PPPStats.H MainWindow.H +pppload.o: /usr/X11R6/include/X11/qt/qpixmap.h Options.H +PPPStats.o: /usr/include/stdlib.h /usr/include/machine/ansi.h +PPPStats.o: /usr/include/machine/types.h /usr/include/sys/cdefs.h +PPPStats.o: /usr/include/stdio.h /usr/include/sys/types.h +PPPStats.o: /usr/include/machine/endian.h /usr/include/sys/select.h +PPPStats.o: /usr/include/sys/ioctl.h /usr/include/sys/ttycom.h +PPPStats.o: /usr/include/sys/ioccom.h /usr/include/sys/filio.h +PPPStats.o: /usr/include/sys/sockio.h /usr/include/sys/socket.h +PPPStats.o: /usr/include/sys/time.h /usr/include/time.h /usr/include/net/if.h +PPPStats.o: /usr/include/net/if_ppp.h /usr/include/net/ppp_defs.h PPPStats.H +PPPStats.o: /usr/X11R6/include/X11/qt/qobject.h +PPPStats.o: /usr/X11R6/include/X11/qt/qobjdefs.h +PPPStats.o: /usr/X11R6/include/X11/qt/qglobal.h +PPPStats.o: /usr/X11R6/include/X11/qt/qstring.h +PPPStats.o: /usr/X11R6/include/X11/qt/qarray.h +PPPStats.o: /usr/X11R6/include/X11/qt/qgarray.h +PPPStats.o: /usr/X11R6/include/X11/qt/qshared.h +PPPStats.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h +PPPStats.o: /usr/X11R6/include/X11/qt/qevent.h +PPPStats.o: /usr/X11R6/include/X11/qt/qwindefs.h +PPPStats.o: /usr/X11R6/include/X11/qt/qrect.h +PPPStats.o: /usr/X11R6/include/X11/qt/qsize.h +PPPStats.o: /usr/X11R6/include/X11/qt/qpoint.h Options.H +PPPStats.o: /usr/X11R6/include/X11/qt/qcolor.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpainter.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpaintd.h +MainWindow.o: /usr/X11R6/include/X11/qt/qwindefs.h +MainWindow.o: /usr/X11R6/include/X11/qt/qobjdefs.h +MainWindow.o: /usr/X11R6/include/X11/qt/qglobal.h +MainWindow.o: /usr/X11R6/include/X11/qt/qrect.h +MainWindow.o: /usr/X11R6/include/X11/qt/qsize.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpoint.h +MainWindow.o: /usr/X11R6/include/X11/qt/qcolor.h +MainWindow.o: /usr/X11R6/include/X11/qt/qfontmet.h +MainWindow.o: /usr/X11R6/include/X11/qt/qfont.h +MainWindow.o: /usr/X11R6/include/X11/qt/qstring.h +MainWindow.o: /usr/X11R6/include/X11/qt/qarray.h +MainWindow.o: /usr/X11R6/include/X11/qt/qgarray.h +MainWindow.o: /usr/X11R6/include/X11/qt/qshared.h +MainWindow.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h +MainWindow.o: /usr/include/machine/ansi.h /usr/include/sys/cdefs.h +MainWindow.o: /usr/X11R6/include/X11/qt/qfontinf.h +MainWindow.o: /usr/X11R6/include/X11/qt/qregion.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpen.h +MainWindow.o: /usr/X11R6/include/X11/qt/qbrush.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpntarry.h +MainWindow.o: /usr/X11R6/include/X11/qt/qwmatrix.h MainWindow.H +MainWindow.o: /usr/X11R6/include/X11/qt/qwidget.h +MainWindow.o: /usr/X11R6/include/X11/qt/qobject.h +MainWindow.o: /usr/X11R6/include/X11/qt/qevent.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpalette.h +MainWindow.o: /usr/X11R6/include/X11/qt/qcursor.h +MainWindow.o: /usr/X11R6/include/X11/qt/qpixmap.h Options.H +Options.o: /usr/include/stdio.h /usr/include/sys/cdefs.h +Options.o: /usr/include/machine/ansi.h Options.H +Options.o: /usr/X11R6/include/X11/qt/qcolor.h +Options.o: /usr/X11R6/include/X11/qt/qwindefs.h +Options.o: /usr/X11R6/include/X11/qt/qobjdefs.h +Options.o: /usr/X11R6/include/X11/qt/qglobal.h +Options.o: /usr/X11R6/include/X11/qt/qstring.h +Options.o: /usr/X11R6/include/X11/qt/qarray.h +Options.o: /usr/X11R6/include/X11/qt/qgarray.h +Options.o: /usr/X11R6/include/X11/qt/qshared.h +Options.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h diff -u --new-file pppload-1.0/Options.C ./Options.C --- pppload-1.0/Options.C Tue Sep 10 16:55:27 1996 +++ ./Options.C Fri Jan 30 20:01:38 1998 @@ -24,7 +24,7 @@ #include "Options.H" Options::Options( int argc, char* argv[] ) -: _divider( 512 ), _interval( 5 ), _link( 0 ), _period( 60 ), _retry( 60 ), _showTx( true ), _showRx( true ), _txColor( "forestgreen" ), _rxColor( "red" ) +: _divider( 512 ), _interval( 5 ), _device("tun"), _link( 0 ), _period( 60 ), _retry( 60 ), _showTx( true ), _showRx( true ), _txColor( "forestgreen" ), _rxColor( "red" ) { for ( int i = 1; i < argc; i++ ) { if ( !strcmp( argv[i], "-cmd" ) ) { @@ -33,6 +33,8 @@ sscanf( argv[++i], "%d", &_divider ); } else if ( !strcmp( argv[i], "-i" ) ) { sscanf( argv[++i], "%d", &_interval ); + } else if ( !strcmp( argv[i], "-device" ) ) { + strcpy(_device,argv[++i]); } else if ( !strcmp( argv[i], "-link" ) ) { sscanf( argv[++i], "%d", &_link ); } else if ( !strcmp( argv[i], "-p" ) ) { @@ -60,6 +62,7 @@ fprintf( stderr, "-d n Horizontal divider spacing in bytes per second (default: %d).\n", divider() ); fprintf( stderr, "-h Print this help.\n" ); fprintf( stderr, "-i interval Set the polling interval to be 'interval' seconds (default: %d).\n", interval() ); + fprintf( stderr, "-device name Name of the device to monitor (default is tun). \n"); fprintf( stderr, "-link link The PPP link number to monitor (default: %d).\n", link() ); fprintf( stderr, "-p period Set the load averaging period to be 'period seconds (default: %d).\n", period() ); fprintf( stderr, "-retry interval Time between retries when dialling PPP link (default: %d).\n", retry() ); @@ -74,7 +77,7 @@ fprintf( stderr, "pppload comes with ABSOLUTELY NO WARRANTY; for details see the LICENSE file.\n" ); fprintf( stderr, "This is free software, and you are welcome to redistribute it\n" ); fprintf( stderr, "under certain conditions; see the LICENSE file for details.\n" ); - + fprintf( stderr, "Modified for FreeBSD 1998 \n"); exit( 1 ); } } diff -u --new-file pppload-1.0/Options.H ./Options.H --- pppload-1.0/Options.H Tue Sep 10 16:53:36 1996 +++ ./Options.H Thu Jan 29 21:12:01 1998 @@ -31,6 +31,8 @@ int _divider; //: Statistics polling interval in seconds. int _interval; + //: Network device to monitor + char _device[4]; //: PPP link number to monitor. int _link; //: Load averaging interval in seconds. @@ -49,9 +51,12 @@ //: Extract command line opotions from argc and argv. Options( int argc, char* argv[] ); - //: Return the PPP command. - QString& cmd() { return _cmd; } + //: Return the PPP command. + QString& cmd() { return _cmd; } + //: Return the name of the device being monitored + char * device() { return _device; } + //: Return the spacing between horizontal dividers. int divider() { return _divider; } diff -u --new-file pppload-1.0/PPPStats.C ./PPPStats.C --- pppload-1.0/PPPStats.C Wed Sep 11 19:50:13 1996 +++ ./PPPStats.C Fri Jan 30 20:16:04 1998 @@ -19,16 +19,22 @@ extern "C" { #include -#include #include +#include +#include #include #include -#include -#include +#include +#include +#include } #include "PPPStats.H" #include "Options.H" +#include + +void get_command(char *); +char command[200]; typedef struct { @@ -53,38 +59,42 @@ system( (const char*)options->cmd() ); } - DclPPPInfo PPPInfo[1]; - struct ifreq ifreq; + DclPPPInfo PPPInfo[1]; + struct ifpppstatsreq ifreq; struct ppp_stats* PPPStat; - struct ppp_stats LastPPPStat[1]; - - memset (& ifreq, 0, sizeof (ifreq)); - sprintf (ifreq.ifr_ifrn.ifrn_name, "ppp%d", options->link()); + struct ppp_stats LastPPPStat[1]; - ifreq.ifr_ifru.ifru_data = (caddr_t) PPPInfo; + memset (&ifreq, 0, sizeof (ifreq)); + sprintf (ifreq.ifr_name, "%s%d",(const char*)options->device(),options->link()); + PPPStat = & PPPInfo->stats; memset (LastPPPStat, 0, sizeof (LastPPPStat)); - if ( (ioctl (_s, SIOCDEVPRIVATE, (caddr_t) & ifreq) < 0) || - ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || - ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 ) ) - ) { - if ( _isUp ) { - _isUp = false; - emit linkDown(); - if ( options->cmd().length() ) { - _retryId = startTimer( options->retry() * 1000 ); - system( (const char*)options->cmd() ); - } - } - PPPStat->p.ppp_ibytes = 0; - PPPStat->p.ppp_obytes = 0; + get_command(ifreq.ifr_name); + FILE * fptr; + fptr=popen(command,"r+"); + fscanf(fptr,"%u%u",&PPPStat->p.ppp_ibytes,&PPPStat->p.ppp_obytes); + pclose(fptr); + + if ( ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || + ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 )) + ) { + if ( _isUp ) { + _isUp = false; + emit linkDown(); + if ( options->cmd().length() ) { + _retryId = startTimer( options->retry() * 1000 ); + system( (const char*)options->cmd() ); + } + } + PPPStat->p.ppp_ibytes = 0; + PPPStat->p.ppp_obytes = 0; } else if ( !_isUp ) { - _isUp = true; - killTimer( _retryId ); - _retryId = -1; + _isUp = true; + killTimer( _retryId ); + _retryId = -1; } - + unsigned int rxDelta = PPPStat->p.ppp_ibytes - _rxTotal; unsigned int txDelta = PPPStat->p.ppp_obytes - _txTotal; _rxTotal = PPPStat->p.ppp_ibytes; @@ -92,4 +102,17 @@ if ( rxDelta == _rxTotal ) rxDelta = 0; if ( txDelta == _txTotal ) txDelta = 0; emit changeStats( rxDelta, txDelta, _rxTotal, _txTotal ); + +} + +void get_command(char * interface) { + /*"/usr/bin/netstat -b -I tun0 | /usr/bin/grep Link | awk '{print $(NF-4),$(NF-1)}' */ + const char * netstat_command ="/usr/bin/netstat -n -b -I "; + const char * grep_command =" | /usr/bin/grep Link | /usr/bin/awk '{print $(NF-4),$(NF-1)}'"; + command[0]='\0'; + strcat(command,netstat_command); + strcat(command,interface); + strcat(command,grep_command); } + + diff -u --new-file pppload-1.0/PPPStats.C.ppp ./PPPStats.C.ppp --- pppload-1.0/PPPStats.C.ppp Wed Dec 31 16:00:00 1969 +++ ./PPPStats.C.ppp Wed Jan 28 18:27:30 1998 @@ -0,0 +1,120 @@ +// pppload - A PPP Load Monitor +// Copyright (C) 1996 Sean Vyain +// svyain@mail.tds.net +// smvyain@softart.com +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +} + +#include "PPPStats.H" +#include "Options.H" +#include + + +typedef struct +{ + struct ppp_stats stats; +} DclPPPInfo; + +PPPStats::PPPStats() +: _rxTotal( 0 ), _txTotal( 0 ), _isUp( true ), _retryId( -1 ) +{ + if ((_s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + perror("couldn't create IP socket"); + exit(1); + } + + startTimer( options->interval() * 1000 ); +} + +void PPPStats::timerEvent( QTimerEvent* e ) +{ + if ( e->timerId() == _retryId ) + { + system( (const char*)options->cmd() ); + } + + DclPPPInfo PPPInfo[1]; // what is this var for? + struct ifpppstatsreq ifreq; // ifreq ifreq; + struct ppp_stats* PPPStat; + struct ppp_stats LastPPPStat[1]; // what is this var for? + + memset (&ifreq, 0, sizeof (ifreq)); +// sprintf (ifreq.ifr_ifrn.ifrn_name, "ppp%d", options->link()); + sprintf (ifreq.ifr_name, "tun%d", options->link()); + +// ifreq.ifr_ifru.ifru_data = (caddr_t) PPPInfo; + + PPPStat = & PPPInfo->stats; + memset (LastPPPStat, 0, sizeof (LastPPPStat)); + + + +// if ( (ioctl (_s, SIOCDEVPRIVATE, (caddr_t) & ifreq) < 0) || +// ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || +// ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 ) ) + if ( (ioctl (_s, SIOCGPPPSTATS , &ifreq) < 0) || + ( _isUp && ( ifreq.stats.p.ppp_ibytes < _rxTotal ) ) || + ( !_isUp && ( ifreq.stats.p.ppp_ibytes == 0 )) + ) { + if ( _isUp ) { + _isUp = false; + emit linkDown(); + if ( options->cmd().length() ) { + _retryId = startTimer( options->retry() * 1000 ); + system( (const char*)options->cmd() ); + } + } + PPPStat->p.ppp_ibytes = 0; + PPPStat->p.ppp_obytes = 0; + } else if ( !_isUp ) { + _isUp = true; + killTimer( _retryId ); + _retryId = -1; + } + + PPPStat->p.ppp_ibytes=ifreq.stats.p.ppp_ibytes; + PPPStat->p.ppp_obytes=ifreq.stats.p.ppp_obytes; + + +cout<p.ppp_ibytes<<" "<p.ppp_ipackets<<" " + <p.ppp_ierrors<<" "<p.ppp_obytes <<" " + <p.ppp_opackets<<" "<p.ppp_oerrors<p.ppp_ibytes - _rxTotal; + unsigned int txDelta = PPPStat->p.ppp_obytes - _txTotal; + _rxTotal = PPPStat->p.ppp_ibytes; + _txTotal = PPPStat->p.ppp_obytes; + if ( rxDelta == _rxTotal ) rxDelta = 0; + if ( txDelta == _txTotal ) txDelta = 0; + emit changeStats( rxDelta, txDelta, _rxTotal, _txTotal ); + +} + diff -u --new-file pppload-1.0/README.freebsd ./README.freebsd --- pppload-1.0/README.freebsd Wed Dec 31 16:00:00 1969 +++ ./README.freebsd Fri Jan 30 20:14:36 1998 @@ -0,0 +1,45 @@ +PPPLoad is designed to display the current throughput of a particular +PPP link in a format that is similar to xload. Written by Sean Vyain. + +This is a FreeBSD port of the linux program called pppload, available at +http://sunsite.unc.edu/pub/Linux/system/network/serial/ppp/pppload-1.0.tar.gz + +Original program homepage at: +http://www.geocities.com/SiliconValley/Pines/1029/pppload.html + +I have modified the FreeBSD port to be able to show the throughput of +any network device that will work with netstat, e.g. tun, ppp, ed, +etc. I just wanted a program to nicely display throughput +statistics for the tun device. + + Examples of usage: +For tun0 (tun is the default device,0 is the default link number): +% pppload & + +For first ne2000 clone: +% pppload -device ed -link 0 & + +for ppp2: +% pppload -device ppp -link 2 & + +BUGS +Command line is awkward with -device and -link. + +Can't detect whether the network device is up or not, so any command +line options like -cmd -percmd -retry probably don't work. This is +different that the original linux version. + +Keeps track of all packets network device has ever used, even if it +has gone down then up again. This is also different than the linux +version. + +Requires awk, grep, and netstat to get the data. Very short polling +time are definitely not recommended. + +Network interface names are limited to a total of 4 characters or less +at the moment, e.g. ppp0 ed3 ze1. + + +Documentation of this FreeBSD port is not complete. + + Common subdirectories: pppload-1.0/backup and ./backup diff -u --new-file pppload-1.0/patch ./patch --- pppload-1.0/patch Wed Dec 31 16:00:00 1969 +++ ./patch Sat Jan 31 16:54:56 1998 @@ -0,0 +1,561 @@ +diff -u --new-file pppload-1.0/Makefile ./Makefile +--- pppload-1.0/Makefile Wed Sep 11 19:49:33 1996 ++++ ./Makefile Sat Jan 31 16:54:54 1998 +@@ -2,20 +2,20 @@ + RM=rm -f + LN=ln -sf + INSTALL=install +-PREFIX=/usr ++PREFIX=/usr/local + BINDIR=$(PREFIX)/bin + MANDIR=$(PREFIX)/man/man1 + + ####### Directories + +-QTDIR = /usr/lib/qt ++QTDIR = /usr/X11R6/include/X11 #/usr/lib/qt + BASEDIR = $(QTDIR) +-INCDIR = $(BASEDIR)/include +-LIBDIR = $(BASEDIR)/lib ++INCDIR = /usr/X11R6/include/X11/qt #$(BASEDIR)/include ++LIBDIR = /usr/X11R6/lib #$(BASEDIR)/lib + + ####### Compiler + +-CFLAGS = -pipe -O2 -m486 -Wall ++CFLAGS = -pipe -O2 -Wall + LFLAGS = -L$(LIBDIR) -lqt + LEXTRA = + CC = g++ +@@ -75,7 +75,7 @@ + + doc: + ../h2html-1.0/h2html $(HEADERS) +- ++ + srctar: + make veryclean + make doc +@@ -90,8 +90,8 @@ + cd ..; tar -zcvf pppload-$(VERSION)-bin.tar.gz pppload-$(VERSION) + + install: +- $(INSTALL) -s pppload $(BINDIR) +- $(INSTALL) pppload.1 $(MANDIR) ++# $(INSTALL) -c pppload $(BINDIR) ++# $(INSTALL) -c pppload.1 $(MANDIR) + + uninstall: + $(RM) $(BINDIR)/pppload +@@ -107,70 +107,90 @@ + + # DO NOT DELETE THIS LINE -- make depend depends on it. + +-pppload.o: /usr/lib/qt/include/qapp.h /usr/lib/qt/include/qwidget.h +-pppload.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h +-pppload.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qobject.h +-pppload.o: /usr/lib/qt/include/qstring.h /usr/lib/qt/include/qarray.h +-pppload.o: /usr/lib/qt/include/qgarray.h /usr/lib/qt/include/qshared.h +-pppload.o: /usr/lib/qt/include/qgeneric.h /usr/include/string.h +-pppload.o: /usr/include/features.h /usr/include/sys/cdefs.h +-pppload.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h +-pppload.o: /usr/lib/qt/include/qevent.h /usr/lib/qt/include/qrect.h +-pppload.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h +-pppload.o: /usr/lib/qt/include/qpaintd.h /usr/lib/qt/include/qpalette.h +-pppload.o: /usr/lib/qt/include/qcolor.h /usr/lib/qt/include/qcursor.h +-pppload.o: /usr/lib/qt/include/qfont.h /usr/lib/qt/include/qfontmet.h +-pppload.o: /usr/lib/qt/include/qfontinf.h PPPStats.H MainWindow.H +-pppload.o: /usr/lib/qt/include/qpixmap.h Options.H +-PPPStats.o: /usr/include/stdlib.h /usr/include/features.h +-PPPStats.o: /usr/include/sys/cdefs.h +-PPPStats.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h +-PPPStats.o: /usr/include/errno.h /usr/include/linux/errno.h +-PPPStats.o: /usr/include/asm/errno.h /usr/include/alloca.h +-PPPStats.o: /usr/include/stdio.h /usr/include/libio.h +-PPPStats.o: /usr/include/_G_config.h /usr/include/sys/ioctl.h +-PPPStats.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h +-PPPStats.o: /usr/include/sys/termios.h /usr/include/sys/socketio.h +-PPPStats.o: /usr/include/linux/sockios.h /usr/include/asm/sockios.h +-PPPStats.o: /usr/include/sys/socket.h /usr/include/linux/socket.h +-PPPStats.o: /usr/include/asm/socket.h /usr/include/linux/uio.h +-PPPStats.o: /usr/include/sys/types.h /usr/include/linux/types.h +-PPPStats.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h +-PPPStats.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h +-PPPStats.o: /usr/include/net/if.h /usr/include/linux/if.h +-PPPStats.o: /usr/include/linux/ppp_defs.h PPPStats.H +-PPPStats.o: /usr/lib/qt/include/qobject.h /usr/lib/qt/include/qobjdefs.h +-PPPStats.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qstring.h +-PPPStats.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h +-PPPStats.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h +-PPPStats.o: /usr/include/string.h /usr/lib/qt/include/qevent.h +-PPPStats.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qrect.h +-PPPStats.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h +-PPPStats.o: Options.H /usr/lib/qt/include/qcolor.h +-MainWindow.o: /usr/lib/qt/include/qpainter.h /usr/lib/qt/include/qpaintd.h +-MainWindow.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h +-MainWindow.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qrect.h +-MainWindow.o: /usr/lib/qt/include/qsize.h /usr/lib/qt/include/qpoint.h +-MainWindow.o: /usr/lib/qt/include/qcolor.h /usr/lib/qt/include/qfontmet.h +-MainWindow.o: /usr/lib/qt/include/qfont.h /usr/lib/qt/include/qstring.h +-MainWindow.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h +-MainWindow.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h +-MainWindow.o: /usr/include/string.h /usr/include/features.h +-MainWindow.o: /usr/include/sys/cdefs.h +-MainWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h +-MainWindow.o: /usr/lib/qt/include/qfontinf.h /usr/lib/qt/include/qregion.h +-MainWindow.o: /usr/lib/qt/include/qpen.h /usr/lib/qt/include/qbrush.h +-MainWindow.o: /usr/lib/qt/include/qpntarry.h /usr/lib/qt/include/qwmatrix.h +-MainWindow.o: MainWindow.H /usr/lib/qt/include/qwidget.h +-MainWindow.o: /usr/lib/qt/include/qobject.h /usr/lib/qt/include/qevent.h +-MainWindow.o: /usr/lib/qt/include/qpalette.h /usr/lib/qt/include/qcursor.h +-MainWindow.o: /usr/lib/qt/include/qpixmap.h Options.H +-Options.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h +-Options.o: Options.H /usr/lib/qt/include/qcolor.h +-Options.o: /usr/lib/qt/include/qwindefs.h /usr/lib/qt/include/qobjdefs.h +-Options.o: /usr/lib/qt/include/qglobal.h /usr/lib/qt/include/qstring.h +-Options.o: /usr/lib/qt/include/qarray.h /usr/lib/qt/include/qgarray.h +-Options.o: /usr/lib/qt/include/qshared.h /usr/lib/qt/include/qgeneric.h +-Options.o: /usr/include/string.h /usr/include/features.h +-Options.o: /usr/include/sys/cdefs.h +-Options.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h ++pppload.o: /usr/X11R6/include/X11/qt/qapp.h ++pppload.o: /usr/X11R6/include/X11/qt/qwidget.h ++pppload.o: /usr/X11R6/include/X11/qt/qwindefs.h ++pppload.o: /usr/X11R6/include/X11/qt/qobjdefs.h ++pppload.o: /usr/X11R6/include/X11/qt/qglobal.h ++pppload.o: /usr/X11R6/include/X11/qt/qobject.h ++pppload.o: /usr/X11R6/include/X11/qt/qstring.h ++pppload.o: /usr/X11R6/include/X11/qt/qarray.h ++pppload.o: /usr/X11R6/include/X11/qt/qgarray.h ++pppload.o: /usr/X11R6/include/X11/qt/qshared.h ++pppload.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h ++pppload.o: /usr/include/machine/ansi.h /usr/include/sys/cdefs.h ++pppload.o: /usr/X11R6/include/X11/qt/qevent.h ++pppload.o: /usr/X11R6/include/X11/qt/qrect.h ++pppload.o: /usr/X11R6/include/X11/qt/qsize.h ++pppload.o: /usr/X11R6/include/X11/qt/qpoint.h ++pppload.o: /usr/X11R6/include/X11/qt/qpaintd.h ++pppload.o: /usr/X11R6/include/X11/qt/qpalette.h ++pppload.o: /usr/X11R6/include/X11/qt/qcolor.h ++pppload.o: /usr/X11R6/include/X11/qt/qcursor.h ++pppload.o: /usr/X11R6/include/X11/qt/qfont.h ++pppload.o: /usr/X11R6/include/X11/qt/qfontmet.h ++pppload.o: /usr/X11R6/include/X11/qt/qfontinf.h PPPStats.H MainWindow.H ++pppload.o: /usr/X11R6/include/X11/qt/qpixmap.h Options.H ++PPPStats.o: /usr/include/stdlib.h /usr/include/machine/ansi.h ++PPPStats.o: /usr/include/machine/types.h /usr/include/sys/cdefs.h ++PPPStats.o: /usr/include/stdio.h /usr/include/sys/types.h ++PPPStats.o: /usr/include/machine/endian.h /usr/include/sys/select.h ++PPPStats.o: /usr/include/sys/ioctl.h /usr/include/sys/ttycom.h ++PPPStats.o: /usr/include/sys/ioccom.h /usr/include/sys/filio.h ++PPPStats.o: /usr/include/sys/sockio.h /usr/include/sys/socket.h ++PPPStats.o: /usr/include/sys/time.h /usr/include/time.h /usr/include/net/if.h ++PPPStats.o: /usr/include/net/if_ppp.h /usr/include/net/ppp_defs.h PPPStats.H ++PPPStats.o: /usr/X11R6/include/X11/qt/qobject.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qobjdefs.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qglobal.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qstring.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qarray.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qgarray.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qshared.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qevent.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qwindefs.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qrect.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qsize.h ++PPPStats.o: /usr/X11R6/include/X11/qt/qpoint.h Options.H ++PPPStats.o: /usr/X11R6/include/X11/qt/qcolor.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpainter.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpaintd.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qwindefs.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qobjdefs.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qglobal.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qrect.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qsize.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpoint.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qcolor.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qfontmet.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qfont.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qstring.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qarray.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qgarray.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qshared.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h ++MainWindow.o: /usr/include/machine/ansi.h /usr/include/sys/cdefs.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qfontinf.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qregion.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpen.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qbrush.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpntarry.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qwmatrix.h MainWindow.H ++MainWindow.o: /usr/X11R6/include/X11/qt/qwidget.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qobject.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qevent.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpalette.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qcursor.h ++MainWindow.o: /usr/X11R6/include/X11/qt/qpixmap.h Options.H ++Options.o: /usr/include/stdio.h /usr/include/sys/cdefs.h ++Options.o: /usr/include/machine/ansi.h Options.H ++Options.o: /usr/X11R6/include/X11/qt/qcolor.h ++Options.o: /usr/X11R6/include/X11/qt/qwindefs.h ++Options.o: /usr/X11R6/include/X11/qt/qobjdefs.h ++Options.o: /usr/X11R6/include/X11/qt/qglobal.h ++Options.o: /usr/X11R6/include/X11/qt/qstring.h ++Options.o: /usr/X11R6/include/X11/qt/qarray.h ++Options.o: /usr/X11R6/include/X11/qt/qgarray.h ++Options.o: /usr/X11R6/include/X11/qt/qshared.h ++Options.o: /usr/X11R6/include/X11/qt/qgeneric.h /usr/include/string.h +diff -u --new-file pppload-1.0/Options.C ./Options.C +--- pppload-1.0/Options.C Tue Sep 10 16:55:27 1996 ++++ ./Options.C Fri Jan 30 20:01:38 1998 +@@ -24,7 +24,7 @@ + #include "Options.H" + + Options::Options( int argc, char* argv[] ) +-: _divider( 512 ), _interval( 5 ), _link( 0 ), _period( 60 ), _retry( 60 ), _showTx( true ), _showRx( true ), _txColor( "forestgreen" ), _rxColor( "red" ) ++: _divider( 512 ), _interval( 5 ), _device("tun"), _link( 0 ), _period( 60 ), _retry( 60 ), _showTx( true ), _showRx( true ), _txColor( "forestgreen" ), _rxColor( "red" ) + { + for ( int i = 1; i < argc; i++ ) { + if ( !strcmp( argv[i], "-cmd" ) ) { +@@ -33,6 +33,8 @@ + sscanf( argv[++i], "%d", &_divider ); + } else if ( !strcmp( argv[i], "-i" ) ) { + sscanf( argv[++i], "%d", &_interval ); ++ } else if ( !strcmp( argv[i], "-device" ) ) { ++ strcpy(_device,argv[++i]); + } else if ( !strcmp( argv[i], "-link" ) ) { + sscanf( argv[++i], "%d", &_link ); + } else if ( !strcmp( argv[i], "-p" ) ) { +@@ -60,6 +62,7 @@ + fprintf( stderr, "-d n Horizontal divider spacing in bytes per second (default: %d).\n", divider() ); + fprintf( stderr, "-h Print this help.\n" ); + fprintf( stderr, "-i interval Set the polling interval to be 'interval' seconds (default: %d).\n", interval() ); ++ fprintf( stderr, "-device name Name of the device to monitor (default is tun). \n"); + fprintf( stderr, "-link link The PPP link number to monitor (default: %d).\n", link() ); + fprintf( stderr, "-p period Set the load averaging period to be 'period seconds (default: %d).\n", period() ); + fprintf( stderr, "-retry interval Time between retries when dialling PPP link (default: %d).\n", retry() ); +@@ -74,7 +77,7 @@ + fprintf( stderr, "pppload comes with ABSOLUTELY NO WARRANTY; for details see the LICENSE file.\n" ); + fprintf( stderr, "This is free software, and you are welcome to redistribute it\n" ); + fprintf( stderr, "under certain conditions; see the LICENSE file for details.\n" ); +- ++ fprintf( stderr, "Modified for FreeBSD 1998 \n"); + exit( 1 ); + } + } +diff -u --new-file pppload-1.0/Options.H ./Options.H +--- pppload-1.0/Options.H Tue Sep 10 16:53:36 1996 ++++ ./Options.H Thu Jan 29 21:12:01 1998 +@@ -31,6 +31,8 @@ + int _divider; + //: Statistics polling interval in seconds. + int _interval; ++ //: Network device to monitor ++ char _device[4]; + //: PPP link number to monitor. + int _link; + //: Load averaging interval in seconds. +@@ -49,9 +51,12 @@ + //: Extract command line opotions from argc and argv. + Options( int argc, char* argv[] ); + +- //: Return the PPP command. +- QString& cmd() { return _cmd; } ++ //: Return the PPP command. ++ QString& cmd() { return _cmd; } + ++ //: Return the name of the device being monitored ++ char * device() { return _device; } ++ + //: Return the spacing between horizontal dividers. + int divider() { return _divider; } + +diff -u --new-file pppload-1.0/PPPStats.C ./PPPStats.C +--- pppload-1.0/PPPStats.C Wed Sep 11 19:50:13 1996 ++++ ./PPPStats.C Fri Jan 30 20:16:04 1998 +@@ -19,16 +19,22 @@ + + extern "C" { + #include +-#include + #include ++#include ++#include + #include + #include +-#include +-#include ++#include ++#include ++#include + } + + #include "PPPStats.H" + #include "Options.H" ++#include ++ ++void get_command(char *); ++char command[200]; + + typedef struct + { +@@ -53,38 +59,42 @@ + system( (const char*)options->cmd() ); + } + +- DclPPPInfo PPPInfo[1]; +- struct ifreq ifreq; ++ DclPPPInfo PPPInfo[1]; ++ struct ifpppstatsreq ifreq; + struct ppp_stats* PPPStat; +- struct ppp_stats LastPPPStat[1]; +- +- memset (& ifreq, 0, sizeof (ifreq)); +- sprintf (ifreq.ifr_ifrn.ifrn_name, "ppp%d", options->link()); ++ struct ppp_stats LastPPPStat[1]; + +- ifreq.ifr_ifru.ifru_data = (caddr_t) PPPInfo; ++ memset (&ifreq, 0, sizeof (ifreq)); ++ sprintf (ifreq.ifr_name, "%s%d",(const char*)options->device(),options->link()); ++ + PPPStat = & PPPInfo->stats; + memset (LastPPPStat, 0, sizeof (LastPPPStat)); + +- if ( (ioctl (_s, SIOCDEVPRIVATE, (caddr_t) & ifreq) < 0) || +- ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || +- ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 ) ) +- ) { +- if ( _isUp ) { +- _isUp = false; +- emit linkDown(); +- if ( options->cmd().length() ) { +- _retryId = startTimer( options->retry() * 1000 ); +- system( (const char*)options->cmd() ); +- } +- } +- PPPStat->p.ppp_ibytes = 0; +- PPPStat->p.ppp_obytes = 0; ++ get_command(ifreq.ifr_name); ++ FILE * fptr; ++ fptr=popen(command,"r+"); ++ fscanf(fptr,"%u%u",&PPPStat->p.ppp_ibytes,&PPPStat->p.ppp_obytes); ++ pclose(fptr); ++ ++ if ( ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || ++ ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 )) ++ ) { ++ if ( _isUp ) { ++ _isUp = false; ++ emit linkDown(); ++ if ( options->cmd().length() ) { ++ _retryId = startTimer( options->retry() * 1000 ); ++ system( (const char*)options->cmd() ); ++ } ++ } ++ PPPStat->p.ppp_ibytes = 0; ++ PPPStat->p.ppp_obytes = 0; + } else if ( !_isUp ) { +- _isUp = true; +- killTimer( _retryId ); +- _retryId = -1; ++ _isUp = true; ++ killTimer( _retryId ); ++ _retryId = -1; + } +- ++ + unsigned int rxDelta = PPPStat->p.ppp_ibytes - _rxTotal; + unsigned int txDelta = PPPStat->p.ppp_obytes - _txTotal; + _rxTotal = PPPStat->p.ppp_ibytes; +@@ -92,4 +102,17 @@ + if ( rxDelta == _rxTotal ) rxDelta = 0; + if ( txDelta == _txTotal ) txDelta = 0; + emit changeStats( rxDelta, txDelta, _rxTotal, _txTotal ); ++ ++} ++ ++void get_command(char * interface) { ++ /*"/usr/bin/netstat -b -I tun0 | /usr/bin/grep Link | awk '{print $(NF-4),$(NF-1)}' */ ++ const char * netstat_command ="/usr/bin/netstat -n -b -I "; ++ const char * grep_command =" | /usr/bin/grep Link | /usr/bin/awk '{print $(NF-4),$(NF-1)}'"; ++ command[0]='\0'; ++ strcat(command,netstat_command); ++ strcat(command,interface); ++ strcat(command,grep_command); + } ++ ++ +diff -u --new-file pppload-1.0/PPPStats.C.ppp ./PPPStats.C.ppp +--- pppload-1.0/PPPStats.C.ppp Wed Dec 31 16:00:00 1969 ++++ ./PPPStats.C.ppp Wed Jan 28 18:27:30 1998 +@@ -0,0 +1,120 @@ ++// pppload - A PPP Load Monitor ++// Copyright (C) 1996 Sean Vyain ++// svyain@mail.tds.net ++// smvyain@softart.com ++// ++// This program is free software; you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation; either version 2 of the License, or ++// (at your option) any later version. ++// ++// This program is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with this program; if not, write to the Free Software ++// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++extern "C" { ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++} ++ ++#include "PPPStats.H" ++#include "Options.H" ++#include ++ ++ ++typedef struct ++{ ++ struct ppp_stats stats; ++} DclPPPInfo; ++ ++PPPStats::PPPStats() ++: _rxTotal( 0 ), _txTotal( 0 ), _isUp( true ), _retryId( -1 ) ++{ ++ if ((_s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { ++ perror("couldn't create IP socket"); ++ exit(1); ++ } ++ ++ startTimer( options->interval() * 1000 ); ++} ++ ++void PPPStats::timerEvent( QTimerEvent* e ) ++{ ++ if ( e->timerId() == _retryId ) ++ { ++ system( (const char*)options->cmd() ); ++ } ++ ++ DclPPPInfo PPPInfo[1]; // what is this var for? ++ struct ifpppstatsreq ifreq; // ifreq ifreq; ++ struct ppp_stats* PPPStat; ++ struct ppp_stats LastPPPStat[1]; // what is this var for? ++ ++ memset (&ifreq, 0, sizeof (ifreq)); ++// sprintf (ifreq.ifr_ifrn.ifrn_name, "ppp%d", options->link()); ++ sprintf (ifreq.ifr_name, "tun%d", options->link()); ++ ++// ifreq.ifr_ifru.ifru_data = (caddr_t) PPPInfo; ++ ++ PPPStat = & PPPInfo->stats; ++ memset (LastPPPStat, 0, sizeof (LastPPPStat)); ++ ++ ++ ++// if ( (ioctl (_s, SIOCDEVPRIVATE, (caddr_t) & ifreq) < 0) || ++// ( _isUp && ( PPPStat->p.ppp_ibytes < _rxTotal ) ) || ++// ( !_isUp && ( PPPStat->p.ppp_ibytes == 0 ) ) ++ if ( (ioctl (_s, SIOCGPPPSTATS , &ifreq) < 0) || ++ ( _isUp && ( ifreq.stats.p.ppp_ibytes < _rxTotal ) ) || ++ ( !_isUp && ( ifreq.stats.p.ppp_ibytes == 0 )) ++ ) { ++ if ( _isUp ) { ++ _isUp = false; ++ emit linkDown(); ++ if ( options->cmd().length() ) { ++ _retryId = startTimer( options->retry() * 1000 ); ++ system( (const char*)options->cmd() ); ++ } ++ } ++ PPPStat->p.ppp_ibytes = 0; ++ PPPStat->p.ppp_obytes = 0; ++ } else if ( !_isUp ) { ++ _isUp = true; ++ killTimer( _retryId ); ++ _retryId = -1; ++ } ++ ++ PPPStat->p.ppp_ibytes=ifreq.stats.p.ppp_ibytes; ++ PPPStat->p.ppp_obytes=ifreq.stats.p.ppp_obytes; ++ ++ ++cout<p.ppp_ibytes<<" "<p.ppp_ipackets<<" " ++ <p.ppp_ierrors<<" "<p.ppp_obytes <<" " ++ <p.ppp_opackets<<" "<p.ppp_oerrors<p.ppp_ibytes - _rxTotal; ++ unsigned int txDelta = PPPStat->p.ppp_obytes - _txTotal; ++ _rxTotal = PPPStat->p.ppp_ibytes; ++ _txTotal = PPPStat->p.ppp_obytes; ++ if ( rxDelta == _rxTotal ) rxDelta = 0; ++ if ( txDelta == _txTotal ) txDelta = 0; ++ emit changeStats( rxDelta, txDelta, _rxTotal, _txTotal ); ++ ++} ++ +diff -u --new-file pppload-1.0/README.freebsd ./README.freebsd +--- pppload-1.0/README.freebsd Wed Dec 31 16:00:00 1969 ++++ ./README.freebsd Fri Jan 30 20:14:36 1998 +@@ -0,0 +1,45 @@ ++PPPLoad is designed to display the current throughput of a particular ++PPP link in a format that is similar to xload. Written by Sean Vyain. ++ ++This is a FreeBSD port of the linux program called pppload, available at ++http://sunsite.unc.edu/pub/Linux/system/network/serial/ppp/pppload-1.0.tar.gz ++ ++Original program homepage at: ++http://www.geocities.com/SiliconValley/Pines/1029/pppload.html ++ ++I have modified the FreeBSD port to be able to show the throughput of ++any network device that will work with netstat, e.g. tun, ppp, ed, ++etc. I just wanted a program to nicely display throughput ++statistics for the tun device. ++ ++ Examples of usage: ++For tun0 (tun is the default device,0 is the default link number): ++% pppload & ++ ++For first ne2000 clone: ++% pppload -device ed -link 0 & ++ ++for ppp2: ++% pppload -device ppp -link 2 & ++ ++BUGS ++Command line is awkward with -device and -link. ++ ++Can't detect whether the network device is up or not, so any command ++line options like -cmd -percmd -retry probably don't work. This is ++different that the original linux version. ++ ++Keeps track of all packets network device has ever used, even if it ++has gone down then up again. This is also different than the linux ++version. ++ ++Requires awk, grep, and netstat to get the data. Very short polling ++time are definitely not recommended. ++ ++Network interface names are limited to a total of 4 characters or less ++at the moment, e.g. ppp0 ed3 ze1. ++ ++ ++Documentation of this FreeBSD port is not complete. ++ ++ +Common subdirectories: pppload-1.0/backup and ./backup Binary files pppload-1.0/pppload and ./pppload differ Common subdirectories: pppload-1.0/pppload-1.0 and ./pppload-1.0 diff -u --new-file pppload-1.0/pppload.1 ./pppload.1 --- pppload-1.0/pppload.1 Tue Sep 10 16:56:20 1996 +++ ./pppload.1 Fri Jan 30 21:35:55 1998 @@ -3,7 +3,7 @@ pppload \- display an xload-style graph of PPP activity .SH SYNOPSIS .B pppload -[\-cmd ppp_cmd] [\-i interval] [\-p period] [\-retry interval] [\-rx] [\-norx] +[\-cmd ppp_cmd] [\-i interval] [\-device name] [\-p period] [\-retry interval] [\-rx] [\-norx] [\-rxcolor color] [\-tx] [\-notx] [\-txcolor color] .SH DESCRIPTION .BR pppload @@ -28,6 +28,9 @@ .I "\-h" Print command line usage. .TP +.I "\-device name" +Network device to monitor (default: tun) +.TP .I "\-i interval" The statistics polling interval in seconds (default: 5). .TP @@ -60,3 +63,41 @@ The name of the color to draw transmit rates in (default: red). .SH AUTHOR Sean Vyain +www.geocities.com/SiliconValley/Pines/1029/pppload.html + +.SH FREEBSD PORT +Examples of usage for the FreeBSD port: + +For tun0 (tun is the default device,0 is the default link number): + +% pppload & + +For the first ne2000 ethernet card: + +% pppload -device ed -link 0 & + +for the third ppp device: + +% pppload -device ppp -link 2 & + +.SH BUGS +The port to FreeBSD can't determine when the link is up or down, so +some of the command line options like +.I "\-cmd" +.I "\-percmd" +may not work. + +Command line is awkward with -device and -link. + +Keeps track of all packets network device has ever used, even if it +has gone down then up again. This is different than the linux +version. + +Requires awk, grep, and netstat to get the data. Very short polling +times are definitely not recommended. + +Network interface names are limited to a total of 4 characters or less +at the moment, e.g. ppp0 ed3 ze1. + + +Modified January 1998 diff -u --new-file pppload-1.0/pppload.C ./pppload.C --- pppload-1.0/pppload.C Wed Sep 11 19:56:40 1996 +++ ./pppload.C Fri Jan 30 14:33:07 1998 @@ -27,6 +27,7 @@ int main(int argc, char* argv[]) { + QApplication a( argc, argv ); options = new Options( argc, argv ); MainWindow* mw = new MainWindow; @@ -39,3 +40,4 @@ mw->show(); return a.exec(); } +