pochmara@cse.ogi.edu (John Pochmara) (03/20/91)
Submitted-by: John Pochmara <pochmara@cse.ogi.edu> Posting-number: Volume 12, Issue 46 Archive-name: xtr/part03 Path: ogicse!ogicse.cse.ogi.edu!pochmara From: pochmara@ogicse.cse.ogi.edu (John Pochmara) Newsgroups: comp.sources.x Subject: xtr - X front end to etherd (Part 3/3) Message-ID: <18620@ogicse.ogi.edu> Date: 14 Mar 91 18:04:12 GMT Article-I.D.: ogicse.18620 Posted: Thu Mar 14 10:04:12 1991 Sender: pochmara@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@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@ora.com argv@zipcode.com ------------------------------------------------ General Email: argv@sun.com Comp-sources-x stuff: comp-sources.x@uunet.uu.net