xtr - X front end to etherd (Part 3/3)
John Pochmara
pochmara at ogicse.cse.ogi.edu
Fri Mar 15 04:04:12 AEST 1991
Article-I.D.: ogicse.18620
Posted: Thu Mar 14 10:04:12 1991
Sender: pochmara at ogicse.ogi.edu
Distribution: usa
Organization: Oregon Graduate Institute (formerly OGC), Beaverton, OR
Lines: 828
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 3 (of 3)."
# Contents: host.c stat.c
# Wrapped by pochmara at ogicse on Thu Mar 14 10:00:08 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'host.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'host.c'\"
else
echo shar: Extracting \"'host.c'\" \(5918 characters\)
sed "s/^X//" >'host.c' <<'END_OF_FILE'
X/*
X *
X * host.c
X *
X *
X */
X#include <sys/types.h>
X#include <sys/socket.h>
X#include <netdb.h>
X#include <netinet/in.h>
X#include <stdio.h>
X#include "bar.h"
X#include "button.h"
X#include "rpc_stuff.h"
X#include "display.h"
X#include "misc.h"
X
X#define HASH_SIZE (256)
X#define MAX_NAME (15)
X
X#define SRC_DATA (1)
X#define DST_DATA (2)
X
Xstruct host_node {
X struct in_addr hn_addr;
X char hn_name[MAX_NAME];
X int hn_bar;
X int hn_count;
X struct host_node *hn_next;
X};
X
X
Xstatic struct host_node *NewHostNode();
Xstatic struct host_node *FindHostByAddr();
Xstatic void ShowHostsBars();
Xstatic void HideHostsBars();
Xstatic struct host_node *InsertHost();
Xstatic void MakeBars();
Xstatic void MakeHostBar();
Xstatic void LeaveFunc();
Xstatic void DataFunc();
Xstatic void ShowHostButtons();
Xstatic void HideHostButtons();
Xstatic void MakeHostButtons();
Xstatic void GetData();
Xstatic int GetNextData();
Xstatic int HashAddr();
X
Xstatic struct host_node HostTable[HASH_SIZE];
X
Xstatic int NumberOfHosts = 0;
Xstatic int ContinueHosts = TRUE;
Xstatic int DataType = SRC_DATA;
X
Xstatic int ButHostCon;
Xstatic int ButData;
X
Xstatic int WindowWidth = 400;
Xstatic int WindowHeight = 400;
X
Xvoid DoHosts()
X{
X struct host_node *tmp;
X int addr, count;
X int delta;
X
X GetData();
X
X while( GetNextData( &addr, &count ) != FALSE ) {
X
X tmp = FindHostByAddr( (unsigned long)addr );
X
X if( tmp == NULL ) {
X tmp = InsertHost( (unsigned long)addr );
X tmp->hn_count = count - 1;
X }
X
X delta = count - tmp->hn_count;
X
X if( delta > 0 ) {
X if( tmp->hn_bar != -1 ) {
X UpdateBarVal(tmp->hn_bar, delta );
X tmp->hn_count = count;
X } else {
X MakeHostBar( tmp );
X ShowBar( tmp->hn_bar );
X RedrawBar( tmp->hn_bar );
X UpdateBarVal(tmp->hn_bar, delta );
X }
X } else if( tmp->hn_bar != -1 ) {
X UpdateBarVal(tmp->hn_bar, delta );
X tmp->hn_count = count;
X }
X
X }
X
X FlushDpy();
X}
X
Xvoid ShowHostWindow()
X{
X ResizeWindow( WindowWidth, WindowHeight );
X ShowHostButtons();
X ShowHostsBars();
X}
X
Xvoid HideHostWindow()
X{
X HideHostsBars();
X HideHostButtons();
X}
X
Xstatic void GetData()
X{
X if( DataType == SRC_DATA ) {
X GetSrcData();
X TopSrcData();
X } else if( DataType == DST_DATA ) {
X GetDstData();
X TopDstData();
X } else {
X printf( "xtr: Bad DataType.\n" );
X }
X}
X
Xstatic int GetNextData( addr, count )
Xint *addr;
Xint *count;
X{
X if( DataType == SRC_DATA ) {
X return( GetNextSrcData( addr, count ) );
X } else if( DataType == DST_DATA ) {
X return( GetNextDstData( addr, count ) );
X } else {
X printf( "xtr: Bad DataType.\n" );
X }
X}
X
Xvoid MakeHostDisplay()
X{
X struct host_node *tmp;
X int addr, count;
X int i;
X
X MakeHostButtons();
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X HostTable[i].hn_addr.s_addr = 0;
X HostTable[i].hn_bar = -1;
X HostTable[i].hn_name[0] = NULL;
X HostTable[i].hn_next = NULL;
X HostTable[i].hn_count = 0;
X }
X
X WindowWidth = 2 * 200;
X WindowHeight = 50 * 15 + 70;
X
X GetSrcData(); /* Prime the pump */
X TopSrcData();
X
X while( GetNextSrcData( &addr, &count ) != FALSE ) {
X tmp = InsertHost( addr );
X tmp->hn_count = count;
X }
X
X}
X
Xstatic void MakeHostButtons()
X{
X ButHostCon = CreateButton( "Exit", 30, 15, 5, 5, LeaveFunc );
X ButData = CreateButton( "Change to Dst", 80, 15, 40, 5, DataFunc );
X}
X
Xstatic void ShowHostButtons()
X{
X ShowButton( ButHostCon );
X ShowButton( ButData );
X}
X
Xstatic void HideHostButtons()
X{
X HideButton( ButHostCon );
X HideButton( ButData );
X}
X
Xstatic void LeaveFunc()
X{
X ReturnToMain();
X}
X
Xstatic void DataFunc()
X{
X if( DataType == SRC_DATA ) {
X DataType = DST_DATA;
X ChangeButtonLable( ButData, "Change to Src" );
X } else {
X DataType = SRC_DATA;
X ChangeButtonLable( ButData, "Change to Dst" );
X }
X}
X
Xstatic void MakeHostBar( host )
Xstruct host_node *host;
X{
X static int ncol = 1;
X static int xpos = 0;
X static int ypos = 50;
X static int count = 0;
X struct hostent *hinfo;
X
X if( ncol > ( WindowWidth / 200 ) ) {
X WindowWidth += 200;
X ResizeWindow( WindowWidth, WindowHeight );
X }
X
X/*
X hinfo = gethostbyaddr( (char *)&host->hn_addr.s_addr,
X sizeof( host->hn_addr.s_addr ), AF_INET );
X*/
X hinfo = NULL;
X
X
X if( hinfo == NULL ) {
X/*
X strncpy( host->hn_name, inet_ntoa(host->hn_addr), MAX_NAME );
X*/
X strncpy( host->hn_name, NetAddrToString(&(host->hn_addr)), MAX_NAME );
X } else {
X strncpy( host->hn_name, hinfo->h_name, MAX_NAME );
X }
X
X host->hn_bar = CreateBarGraph( host->hn_name, 0,
X 100, 200, 17, FALSE, 90, xpos, ypos);
X
X if( count < 50 ) {
X ypos += 15;
X count++;
X } else {
X ncol++;
X xpos += 200;
X ypos = 50;
X count = 0;
X }
X
X}
X
Xstatic void ShowHostsBars()
X{
X struct host_node *tmp;
X int i;
X
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X
X tmp = HostTable[i].hn_next;
X
X while( tmp != NULL ) {
X
X if( tmp->hn_bar != -1 ) {
X ShowBar( tmp->hn_bar );
X RedrawBar( tmp->hn_bar );
X }
X
X tmp = tmp->hn_next;
X }
X }
X}
X
Xstatic void HideHostsBars()
X{
X struct host_node *tmp;
X int i;
X
X
X for( i = 0; i < HASH_SIZE; i++ ) {
X tmp = HostTable[i].hn_next;
X while( tmp != NULL ) {
X if( tmp->hn_bar != -1 ) {
X HideBar( tmp->hn_bar );
X }
X tmp = tmp->hn_next;
X }
X }
X}
X
Xstatic struct host_node *InsertHost( addr )
Xunsigned long addr;
X{
X struct host_node *tmp;
X int hash;
X
X tmp = NewHostNode();
X
X tmp->hn_addr.s_addr = addr;
X
X hash = HashAddr( addr );
X
X tmp->hn_next = HostTable[hash].hn_next;
X HostTable[hash].hn_next = tmp;
X
X NumberOfHosts++;
X
X return( tmp );
X
X}
X
Xstatic struct host_node *FindHostByAddr( addr )
Xunsigned long addr;
X{
X struct host_node *tmp;
X int hash;
X
X hash = HashAddr( addr );
X
X tmp = HostTable[hash].hn_next;
X
X while( tmp != NULL ) {
X
X if( tmp->hn_addr.s_addr == addr ) {
X return( tmp );
X }
X
X tmp = tmp->hn_next;
X }
X
X return( NULL );
X
X}
X
Xstatic int HashAddr( addr )
Xunsigned long addr;
X{
X return( addr % HASH_SIZE );
X}
X
Xstatic struct host_node *NewHostNode()
X{
X struct host_node *tmp;
X
X tmp = (struct host_node *)malloc( sizeof(struct host_node) );
X
X tmp->hn_addr.s_addr = 0;
X tmp->hn_bar = -1;
X tmp->hn_name[0] = NULL;
X tmp->hn_next = NULL;
X
X return( tmp );
X
X}
X
X
END_OF_FILE
if test 5918 -ne `wc -c <'host.c'`; then
echo shar: \"'host.c'\" unpacked with wrong size!
fi
# end of 'host.c'
fi
if test -f 'stat.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'stat.c'\"
else
echo shar: Extracting \"'stat.c'\" \(8741 characters\)
sed "s/^X//" >'stat.c' <<'END_OF_FILE'
X/*
X * stat.c
X *
X *
X */
X#include <stdio.h>
X#include "rpc_stuff.h"
X#include "bar.h"
X#include "button.h"
X#include "strip.h"
X#include "display.h"
X#include "misc.h"
X
X
Xstatic void ShowProto();
Xstatic void ShowSizes();
Xstatic void ShowTraffic();
Xstatic void MakeTrafficBars();
Xstatic void MakeProtoBars();
Xstatic void MakeSizesBars();
Xstatic void HideProto();
Xstatic void HideTraffic();
Xstatic void HideSizes();
Xstatic void MakeStatBars();
Xstatic void MakeButtons();
Xstatic void ShowButtons();
Xstatic void HideButtons();
Xstatic void MakeStrips();
Xstatic void ShowStrips();
Xstatic void HideStrips();
X
Xstatic void LeaveFunc();
Xstatic void SizesBut();
Xstatic void TrafficBut();
Xstatic void ProtoBut();
Xstatic void COrPBut();
X
X/* Bar Graphs for Stats Display */
Xstatic int BarBytes;
Xstatic int BarPack;
Xstatic int BarBCast;
X
Xstatic int BarUDP;
Xstatic int BarND;
Xstatic int BarICMP;
Xstatic int BarTCP;
Xstatic int BarARP;
Xstatic int BarOther;
X
Xstatic int BarSizes[16];
X
X/* Buttons for Stats display */
Xstatic int ButProto;
Xstatic int ButTraffic;
Xstatic int ButSizes;
Xstatic int ButCon;
Xstatic int ButCOrP;
X
X/* Strips of Stat display */
Xstatic int StrLoad;
X
Xstatic int DisplayProto = TRUE;
Xstatic int DisplayTraffic = TRUE;
Xstatic int DisplaySizes = TRUE;
X
Xstatic int PerSecond = TRUE;
X
Xvoid DoStats()
X{
X long td;
X int j;
X
X GetStatData();
X
X if( PerSecond == TRUE ) {
X td = GetTimeDelta();
X } else {
X td = 1;
X }
X
X if( DisplayTraffic == TRUE ) {
X UpdateBarVal( BarBytes, GetBytesDelta()/td );
X UpdateBarVal( BarPack, GetPacketsDelta()/td );
X UpdateBarVal( BarBCast, GetBCastDelta()/td );
X }
X
X if( DisplayProto == TRUE ) {
X UpdateBarVal( BarND, GetNDProtoDelta()/td );
X UpdateBarVal( BarUDP, GetUDPProtoDelta()/td );
X UpdateBarVal( BarICMP, GetICMPProtoDelta()/td );
X UpdateBarVal( BarTCP, GetTCPProtoDelta()/td );
X UpdateBarVal( BarARP, GetARPProtoDelta()/td );
X UpdateBarVal( BarOther, GetOtherProtoDelta()/td );
X }
X
X if( DisplaySizes == TRUE ) {
X for( j = 0; j < 16; j++ ) {
X UpdateBarVal( BarSizes[j],GetSizeDelta( j )/td);
X }
X }
X
X UpdateStripVal( StrLoad, (int)GetNetLoad() );
X
X FlushDpy();
X}
X
Xvoid ShowStatWindow()
X{
X ResizeWindow( 400, 295 );
X ShowSizes();
X ShowProto();
X ShowTraffic();
X ShowButtons();
X ShowStrips();
X}
X
Xvoid HideStatWindow()
X{
X HideProto();
X HideTraffic();
X HideSizes();
X HideButtons();
X HideStrips();
X}
X
Xvoid MakeStatDisplay()
X{
X MakeStatBars();
X MakeButtons();
X MakeStrips();
X}
X
Xstatic void MakeStatBars()
X{
X MakeTrafficBars();
X MakeProtoBars();
X MakeSizesBars();
X}
X
Xstatic void MakeTrafficBars()
X{
X int val;
X
X val = GetDefaultValInt( "Maxbytes", 20000 );
X BarBytes = CreateBarGraph( "bytes", 0, val, 400, 17,
X FALSE, 60, 0, 55 );
X
X val = GetDefaultValInt( "Maxpackets", 500 );
X BarPack = CreateBarGraph( "packets", 0, val, 400, 17,
X FALSE, 60, 0, 70 );
X
X val = GetDefaultValInt( "Maxbroadcast", 100 );
X BarBCast = CreateBarGraph("broadcast", 0, val, 400, 17,
X FALSE, 60, 0, 85 );
X}
X
Xstatic void MakeProtoBars()
X{
X int val;
X
X val = GetDefaultValInt( "MaxUDP", 100 );
X BarUDP = CreateBarGraph("UDP", 0, val, 400, 17, FALSE, 60, 0, 105 );
X
X val = GetDefaultValInt( "MaxTCP", 100 );
X BarTCP = CreateBarGraph("TCP", 0, val, 400, 17, FALSE, 60, 0, 120 );
X
X val = GetDefaultValInt( "MaxICMP", 100 );
X BarICMP = CreateBarGraph("ICMP", 0, val, 200, 17, FALSE, 60, 0, 135 );
X
X val = GetDefaultValInt( "MaxARP", 100 );
X BarARP = CreateBarGraph("ARP", 0, val, 200, 17, FALSE, 60, 200, 135 );
X
X val = GetDefaultValInt( "MaxND", 100 );
X BarND = CreateBarGraph("ND", 0, val, 200, 17, FALSE, 60, 0, 150 );
X
X val = GetDefaultValInt( "MaxOther", 100 );
X BarOther = CreateBarGraph("Other", 0, val, 200, 17,
X FALSE, 60, 200, 150 );
X}
X
Xstatic void MakeSizesBars()
X{
X int val;
X
X val = GetDefaultValInt( "MaxSize60", 100 );
X BarSizes[0] = CreateBarGraph("60 - 150", 0, val, 200, 17,
X FALSE, 70, 0, 170 );
X
X val = GetDefaultValInt( "MaxSize151", 100 );
X BarSizes[1] = CreateBarGraph("151 - 240", 0, val, 200, 17,
X FALSE, 70, 0, 185 );
X
X val = GetDefaultValInt( "MaxSize241", 100 );
X BarSizes[2] = CreateBarGraph("241 - 330", 0, val, 200, 17,
X FALSE, 70, 0, 200 );
X
X val = GetDefaultValInt( "MaxSize331", 100 );
X BarSizes[3] = CreateBarGraph("331 - 420", 0, val, 200, 17,
X FALSE, 70, 0, 215 );
X
X val = GetDefaultValInt( "MaxSize421", 100 );
X BarSizes[4] = CreateBarGraph("421 - 510", 0, val, 200, 17,
X FALSE, 70, 0, 230 );
X
X val = GetDefaultValInt( "MaxSize511", 100 );
X BarSizes[5] = CreateBarGraph("511 - 600", 0, val, 200, 17,
X FALSE, 70, 0, 245 );
X
X val = GetDefaultValInt( "MaxSize601", 100 );
X BarSizes[6] = CreateBarGraph("601 - 690", 0, val, 200, 17,
X FALSE, 70, 0, 260 );
X
X val = GetDefaultValInt( "MaxSize691", 100 );
X BarSizes[7] = CreateBarGraph("691 - 780", 0, val, 200, 17,
X FALSE, 70, 0, 275 );
X
X val = GetDefaultValInt( "MaxSize781", 100 );
X BarSizes[8] = CreateBarGraph("781 - 870", 0, val, 200,17,
X FALSE,70,200,170);
X
X val = GetDefaultValInt( "MaxSize871", 100 );
X BarSizes[9] = CreateBarGraph("871 - 960", 0, val, 200,17,
X FALSE, 70, 200,185);
X
X val = GetDefaultValInt( "MaxSize961", 100 );
X BarSizes[10] = CreateBarGraph("961 - 1050",0,val, 200,17,
X FALSE, 70, 200,200);
X
X val = GetDefaultValInt( "MaxSize1051", 100 );
X BarSizes[11] = CreateBarGraph("1051 - 1140",0,val,200,17,
X FALSE, 70, 200,215);
X
X val = GetDefaultValInt( "MaxSize1141", 100 );
X BarSizes[12] = CreateBarGraph("1141 - 1230",0,val,200,17,
X FALSE, 70, 200,230);
X
X val = GetDefaultValInt( "MaxSize1231", 100 );
X BarSizes[13] = CreateBarGraph("1231 - 1320",0,val,200,17,
X FALSE, 70, 200,245);
X
X val = GetDefaultValInt( "MaxSize1321", 100 );
X BarSizes[14] = CreateBarGraph("1321 - 1410",0,val,200,17,
X FALSE, 70, 200,260);
X
X val = GetDefaultValInt( "MaxSize1410", 100 );
X BarSizes[15] = CreateBarGraph("1410 - 1514",0,val,200,17,
X FALSE, 70, 200,275);
X}
X
Xstatic void ShowSizes()
X{
X int i;
X
X for( i = 0; i < 16; i++ ) {
X ShowBar( BarSizes[i] );
X RedrawBar( BarSizes[i] );
X }
X
X}
X
Xstatic void HideSizes()
X{
X int i;
X
X for( i = 0; i < 16; i++ ) {
X HideBar( BarSizes[i] );
X }
X}
X
X
Xstatic void ShowTraffic()
X{
X ShowBar( BarBCast );
X RedrawBar( BarBCast );
X
X ShowBar( BarBytes );
X RedrawBar( BarBytes );
X
X ShowBar( BarPack );
X RedrawBar( BarPack );
X
X}
X
Xstatic void HideTraffic()
X{
X HideBar( BarBCast );
X HideBar( BarBytes );
X HideBar( BarPack );
X}
X
Xstatic void ShowProto()
X{
X
X ShowBar( BarUDP );
X RedrawBar( BarUDP );
X
X ShowBar( BarICMP );
X RedrawBar( BarICMP );
X
X ShowBar( BarND );
X RedrawBar( BarND );
X
X ShowBar( BarTCP );
X RedrawBar( BarTCP );
X
X ShowBar( BarARP );
X RedrawBar( BarARP );
X
X ShowBar( BarOther );
X RedrawBar( BarOther );
X
X}
X
Xstatic void HideProto()
X{
X HideBar( BarUDP );
X HideBar( BarICMP );
X HideBar( BarND );
X HideBar( BarTCP );
X HideBar( BarARP );
X HideBar( BarOther );
X
X}
X
Xstatic void ProtoBut()
X{
X
X if( DisplayProto == TRUE ) {
X HideProto();
X ChangeButtonLable( ButProto, "Proto On" );
X DisplayProto = FALSE;
X } else {
X ShowProto();
X ChangeButtonLable( ButProto, "Proto Off" );
X DisplayProto = TRUE;
X }
X}
X
Xstatic void TrafficBut()
X{
X
X if( DisplayTraffic == TRUE ) {
X HideTraffic();
X ChangeButtonLable( ButTraffic, "Traffic On" );
X DisplayTraffic = FALSE;
X } else {
X ShowTraffic();
X ChangeButtonLable( ButTraffic, "Traffic Off" );
X DisplayTraffic = TRUE;
X }
X}
X
Xstatic void SizesBut()
X{
X
X if( DisplaySizes == TRUE ) {
X HideSizes();
X ChangeButtonLable( ButSizes, "Sizes On" );
X DisplaySizes = FALSE;
X } else {
X ShowSizes();
X ChangeButtonLable( ButSizes, "Sizes Off" );
X DisplaySizes = TRUE;
X }
X}
X
Xstatic void COrPBut()
X{
X if( PerSecond == TRUE ) {
X ChangeButtonLable( ButCOrP, "Cumulative" );
X PerSecond = FALSE;
X } else {
X ChangeButtonLable( ButCOrP, "Per/sec" );
X PerSecond = TRUE;
X }
X}
X
Xstatic void LeaveFunc()
X{
X ReturnToMain();
X}
X
Xstatic void MakeStrips()
X{
X int val;
X
X val = GetDefaultValInt( "MaxLoad", 20 );
X StrLoad = CreateStrip( "Load", 0, val, 250, 25, 125, 25 );
X}
X
Xstatic void ShowStrips()
X{
X ShowStrip( StrLoad );
X RedrawStrip( StrLoad );
X}
X
Xstatic void HideStrips()
X{
X HideStrip( StrLoad );
X}
X
Xstatic void MakeButtons()
X{
X ButCon = CreateButton( "Exit", 30, 15, 5, 5, LeaveFunc );
X ButTraffic = CreateButton( "Traffic Off", 75, 15, 40, 5, TrafficBut );
X ButProto = CreateButton( "Proto Off", 65, 15, 120, 5, ProtoBut );
X ButSizes = CreateButton( "Sizes Off", 65, 15, 190, 5, SizesBut );
X ButCOrP = CreateButton( "Per/sec", 65, 15, 260, 5, COrPBut );
X
X}
X
Xstatic void ShowButtons()
X{
X ShowButton( ButCon );
X ShowButton( ButProto );
X ShowButton( ButTraffic );
X ShowButton( ButSizes );
X ShowButton( ButCOrP );
X}
X
Xstatic void HideButtons()
X{
X HideButton( ButCon );
X HideButton( ButProto );
X HideButton( ButTraffic );
X HideButton( ButSizes );
X HideButton( ButCOrP );
X}
END_OF_FILE
if test 8741 -ne `wc -c <'stat.c'`; then
echo shar: \"'stat.c'\" unpacked with wrong size!
fi
# end of 'stat.c'
fi
echo shar: End of archive 3 \(of 3\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Dan Heller
------------------------------------------------
O'Reilly && Associates Z-Code Software
Senior Writer President
argv at ora.com argv at zipcode.com
------------------------------------------------
General Email: argv at sun.com
Comp-sources-x stuff: comp-sources.x at uunet.uu.net
More information about the Comp.sources.x
mailing list