v3.27	Wed Jan  29	@wbn

	- Fixed the link state inconsistency problem
	When one side of a link said the link was DOWN, and the other said the
	link was UP, we incorrectly called the link UP.  We now log the 
	inconsistency and report the link DOWN.

	Also, the Display programs now independently check to assure BOTH
	InetRoverd and nsfnett3Roverd are running.  For NewRover, we check
	the modification time of the newrover.cycle, and for oldrover we
	check the modification time of the CHECKING file.

	The xmap now looks in $PINGKYDIR for the STATUS files.  This is 
	keeping with the model of having all necessary files available on 
	perhaps a separate NFS mounted partition.  Then the collector
	can run on a separate machine than the Display, whether text or
	X-based.  All of the necessary information should be available
	in $PINGKYDIR.

3.29	Fri Jan 31	@wbn

	Linda found a bug - when xmap is started specifying a full path
	the classname is incorrectly set to the full pathname.  Also, the
	Display program was fixed to not complain about a missing newrover
	collector, if there doesn't exist a newrover.cycle file.

3.31	Mon Feb  3	@wbn

	Modified nsfnetRoverd startup scripts to use a process ID file 
	instead of ps -aux style mechanism to assure daemon isn't already
	running.

3.32	Tue Feb 4	@wbn
	
	Updated AS code to use AS-AS.NOW for "Name" of AS.  Now as new ASs
	are discovered, they are added with a UniqueID of the AS Number and
	a name like "86(SuraNet)".  xmap will display these ASs in the map
	if invoked with the -a option: nsfnett3 -a nsfnett3.STATUS nsfnett3.MAP
	( Don't do this though - it can look really messy )
	Also, Don't show Node as Busy unless BUSY for 5 minutes, and Don't
	show AS as DOWN unless Down for 2 1/2 minutes. 

3.33	Wed Feb 5	@wbn

	BGP MIB doesn't exist on the backbone!  As a result I've implemented
	a kludge that deduces that all ASs not announced by EGP sessions we
	have discovered are announced via BGP.  These ASs, when Not Reachable,
	are reported to the ProblemManager, who puts up an alert.  One 
	down side of this is that there is no indication about which nodes
	peer with which AS.  

3.34	Sun Feb 9	@wbn
	
	Fix BGP enhancement to wait 5 minutes before calling a BGP announced
	AS Not Reachable for the Text System.  It could just be the local ENSS
	missing a SNMP query.  Also, include rmlinks in the distribution.
	rmlinks is the code that allos the user to remove nodes/links that rover
	has inadvertently discovered.  There is also a fix to SortStatus that
	removes problem entries from the PROBLEM.FILE when BGP announced
	ASs are back on the air.

3.36	Wed Mar 3 	@wbn

	xmap now has pop-up menus for both nodes and links.  Currently the 
	number of menu items is limited to 20 for each menu.  The menu is
	activated by button 3.  

	Some Screen optimizing was done to improve X performance, but there 
	still exists and open problem having to do with screen redraws 
	taking up the entire X station CPU.  We don't understand why this 
	happens, but it seems consistent across platforms.

	The scripts are also moved to ~/NewRover/scripts for cleanliness.  This
	directory is now in the rover path so this shouldn't  cause any problems.
	
	The Display program was also fixed so that user updates aren't interupted
	by the alarm.  

	The code was also documented while being split into separate files for
	managability reasons.  

3.38
	Fixed placement algorithm
	nsfnett3.status file is stored daily so rover playback is possible
	Some Screen optimization - draw segments rather than individual draw
		lines
	Reduced expose callbacks by using the DrawArea Widgets Expose Callback
		rather than as an expose event. This fixed some redraw problems
		such as the screen only being partially updated when you remove
		and overlapping window.   
	
3.39
	Fixed bad memory leak.  The StatusFileio routine was not freeing the 
	old memory structures correctly, so the heap grew and grew!  This may	
	have also exercized the well-known malloc() problem in AIX, which 
	resulted in the xmap never going away after you press quit.

	Tuned up the screen routines to only redraw what is necessary.  
	This involved not using the ClearScreen unless the user forces a 
	refresh, or the user moves a node.  When the user moves a node, 
	the lines to that node have to be erased and redrawn.  The erase 
	process may clear a pixel in another line - rather then
	deal with it now, we'll redraw the entire screen.  We don't move 
	nodes around much now.  In the future, we can optimize this as well.

3.40
	Found the problem with redraws - the IBM X-server doesn't handle 
	line widths of greater than one very well!.  If you specify in
	your Graphics Context a line width of 0, it will try to use 
	hardware to accomplish your task.  This is the only way we get
	reasonable performance out of this thing.  It smokes now!

3.41
	Modified collector not to write into the CHECKING file - this is
	the territory of InetRoverd.  The display programs count on this
	file to show the status of the InetRoverd collector.  If the InetRover
	stops, the file doesn't get updated, and the Display program complains
	that the collector has died.  It is important that only the InetRover
	update this file.

3.43
	Due to popular demand, I have turned off the bell on state transitions.
	If you enjoy the bell, you may enable it by specifying -b#, where
	the # is the volume (0-100) of the bell.  There are many parms now
	you can set:
	
Usage: [-a] [-l#] [-c#] [-C#] nsfnett3 StateFile [ MAPFILE ] [ X resources ]
-a  Show Autonmous Systems           (value=0)
-l# Specifies line default thickness 
-b# Specifies bell volume (0-100) (value=0)
-c# Specifies interval to check Network Status File in secs (value=5)
-C# Specifies Elapsed Time before calling Collector Dead in mins(value=5)
StateFile is the Network Status File
MAPFILE contains the names and x,y coordinates for the MAP

	In our rover .Xdefaults we have set up some of the nodes as icons,
	where NASA ENSS looks like a rocket, Merit's ENSS has its own
	logo, and ANS's enss has a text name on it as well.  Any node can
	have its own icon, or use any font in the name of the node.  See
	the rover .Xdefaults for an example.

	Also notice that there is some on-line documentation under the
	about window.  These are basic information about rover.  This
	has been designed to easily allow additional documentation.  All
	you need to do is create a text file with a .doc filename extension,
	and put it in the $PINGKYDIR, and it shows up as on-line documentation.

	There is also a playback feature, but don't use it yet.  It is still
	being investigated.  It works, but not very well.  

	There is also now a file lock on the STATUS file, so the xmap doesn't
	read the file while the collector is writing it.  In the past, it
	was possible for the map program to read the status file while
	it was being written by the collector.  The result was a 
	blank (no line) map.

	Also, the text Display program was modified to allow the operator to
	request a specific trouble ticket.  This requires the tt command.

	The main point of this release was to stop the terrible bells, and
	prevent the xmap from displaying blank maps..

Bill

PS - There still appears to be a memory leak, but it is not in my code.  I
went through stubbing all of my mallocs into my own malloc routine.  My code
does its mallocs(), and the application still increases in size, even though
I don't malloc any more.  

Fair warning - keep an eye on the size of the xmap.  You may want to kill
the graphical display nightly to prevent it from using up lots of memory.

3.44	I don't like the way the STATUS file is locked.  It causes people
 	to have to wait for access to the status file during other read
	operations.  I would like an advisery lock mechanism so reads
	don't need to LOCK the file, but rather check the mod times of the
	file or existence of the lock to read.

	Also, variable link width is supported. 

3.45	The LOCK mechanism has once again been revised to now retry more
	often to avoid delays before accessing the STATUS/PROBLEM file.
	
	pingd has been added to allow for a more configurable PING() routine.
	This allows us to specify (in the hostfile) on a node-by-node basis
	how many pings to send, time between retries, and how long to hold
	the state before repolling.

	Also, variable linkwidth functionality has been added.  This means that
	folks can create a file specifying 1 pair of nodes and a line width
	specification.  The file needs to exist in the $PINGKYDIR and have
	a .LW suffix.  The user can then select the link width option and
	the map will display the link using the specified width.  

	For example, We have  created a LinkSpeed.LW file that shows line 
	width according to link speed.  T3 lines are link width 3, and T1 and
	link width 1.  

	As a separate linkwidth file example, we have a LinkUse.LW file that
	gets updated by a script every 15 minutes.  This script looks at the
	last 15 minute samples and creates the link width file entries based
	on hundreds of packets-per-second.

3.49
	pingd may be fixed - I think that the receive loop was invoking a
	time-consuming ProblemManager routine, which was in turn locking
	the PROBLEM.FILE and getting interrupted mid-stream.  This code
	solves that by providing a communication channel via a stack.

	Also, the Display program has been modified to remove all 
	cycle times, and no longer reads or displays the CHECKING 
	message...that was always getting interrupted by the timer anyway.

3.50
	Restructured the lay out of the release.  Generally cleaned up the
	code so that it should compile easier in more environments.

	Centralized all of the configuration in the top-level Makefile and
	include/pathnames.h.

	Display program feature to set alerts timestamp into the future...
	delaying the alert until some next action should be done.

	pingd also has been modified to allow specification of different
	packet sizes for ping packets.  Use the '-s' flag for this.

	pingd also now writes a pid file so it can tell if one is already
	running; if one is, it does not start another one.

3.52
	Allows for hierarchical maps.. more details later
	pingd - batch problem Adds/Deletes added to improve performance
		when network is really broken.  Also, pingd now updates the
		cycle time more frequently to avoid cycle time file getting
		too old.  Otherwise, the Display programs incorrectly
		think the pingd has died.
	The code compiles and runs on a sun, aix 3.1 and aix 3.2
	Playback functionality is temporarily taken out
	Associated with the bell option (-b3) is an automatic zoom feature
	Merit Rover code had several bugs fixed and now has a graphical map


3.54
	Merit Rover change in StatusFileManager - remove PCP-SCP links that
	have moved.  This is done in two stages.  First the link is migrated
	to the MOVED state.  The SortStatus program will delete Problems 
	associated with this MOVED link.  After a certain amount of time has
	elapsed, this MOVED link will be ignored.

	The code now creates all files with rw owner and group to 
	accomodate multi-user NOCs.

	We have a basic version of network discovery working now also.  It is
	being tested on umnet, cicnet, Michnet, and merit.

3.57
	We have enough different collectors now that we are no longer using 
	the .cycle files to assure that they are running.  Instead, since we 
	have STATUS files that are being maintained, we'll have the displays
	do stats on those.

	The xmap arguments have changed.  From now on, if you want to specify
	a different MAP of STATUS file than the default, you must specify
	a -s NetworkStatusFile and/or a -m MapFileName.

	The trouble test has been changed from:
        	rsh merit.edu -n -l k9 'ls /usr/spool/mail/down' 2>/dev/null | grep down  >/dev/null
	to:
		rsh merit.edu -n 'ls /usr/spool/mail/down' 2>/dev/null | grep down  >/dev/null

	Since rover on merit.edu is tructing rover on whitman/melville/knock,
	this will work.  This is an emergency fix - the k9 home directory on 
	merit.edu doesn't exist anymore, so the trouble test is broken.

3.59	TROUBLE() now rsh's into knock to check the trouble mailbox

	The SortStatus code and ProblemManager code has been modified to deal 
	with Problem-Prefixes.  This means that the CICNET, MICHNET, MERIT
	collectors can each have their own problem prefix, allowing operators
	the ability to quickly identify which networks are associated with 
	which problems.

	John S. found a bug in the link width algorithm having to do with
	unanswered queries.  

	We now have a michnetRoverd for the Michnet cisco backbone.

	Several additional scripts have been bound to the node and link menus,
	including an updated and more efficient interface counter routine. It
	uses the fastsnmpapi to poll the interface counters every second. It
	can take any mib counter variables as parameters, so the NOC can watch
	the ds3 counters ifInError counters for example.
	
	Other scripts show the calculations used to determine link width,
	dump the routing tables, interface table, etc.

3.60
Display
	Daniel found a solution to the tty disconnect problem for the Display
	program.  His fixes involve the display.c code in the Display dir.
	Good catch Daniel!

	The Display program also had a problem with the help file display.c
	routines.  The problem was that the search routines were using the
	nodename as the key rather than then the uniqueid.

DNS
	When ipaddresses don't resolve to dns names, the default behavior is 
	use the ipaddresses as names.  This conflicts with the desire to use
	the first part of the dns name (up to the '.') as a problem name. 
	A patch was made to only do this problem name refinement if the 
	name is not an ipaddress.  SortStatus.c was modified.

POP
	The warning message was removed that indicates that the POP files are
	missing.  This was causing unecessary confusion since only this code
	is only applicable to the national network, and the rest of the rovers
	don't need to care if a POP file doesn't exist.
	
	All code is now under RCS instead of SCCS - this will make the code more
	easily portable to other environments.  

-c option
	All xmap invocations now specify the community name, so that the shell
	scripts don't need to hard code the community names, but rather will
	be passed the community name from the xmap invocation.  This makes
	the NMS only have a very few places where the community name needs to
	maintained - in the pollers and in the graphical display scripts.

xmap invocation
	New strategy for X resources - invoke a "Execution Environment script"
	( NSFNET, CICNET, MERIT, MICHNET, etc. ) which will use the 
	appropriate resource file for the network specified.  This way each
	individual network map can be programmed for all who use the map, 
	rather than as one big conglomerate like it is now with .Xdefaults
	and the $PINGKYDIR/.Xdefaults.   


3.61
	Bug fix to snmp api - AddAddress() does parameter checking now to 
	assure caller is passing non-null Address.  

	All traces of script hard-coded community names were removed to
	avoid publishing non-public community strings.  We need to come up
	with a way for sites to maintain the community names for the
	individual rovers separately from the distribution.

	The documents have been sectionalized into slate, postscript, but also
	concateneated into a text file called README.

	This will be the first beta release of the code.  Probably the part 
	that will have to be most improved is the installation and 
	documentation.  For someone who has not used or heard of rover,
	my feeling is that they will have problems understanding and
	installing it. 

3.62
	Bug fix - ALl invokations of SortStatus MUST use the -s option to 
	specify the network status file.  The Roverd scripts were updated to 
	reflect this new requirement.

	Added a gate restricting the size of the Unique Identifiers to
	the Problem Manager.  This bug has been pervasive - when a UID is
	passed, too long to be used in the PROBLEM FILE, it is truncated
	to fit in the field.... but the caller keeps adding the n byte
	problem, when only n-1 bytes are allowed.  A copy of the caller's
	parameter is truncated and used for all operations.
	
	Fix problem in xmap.  The code was putting NULL environmental variables
	into the environment space and 3.2 was spewing:
	" : The specified data is not a valid identifier", which, of course,
	means that you have specified an invalid environmental variable value.

	Display program was modified to make the Help files relative
	to the $PINGKYDIR.

	Bug fix - makelinkwidth application.  When the counters exceeded 2^31
	atol would peg the value at 2^31.  

	Linda Liebengood (ANS) found a bug in the CircuitCheck code having
	to do with buffer overwrites.  Linda's code fixes the problem in	
	dsuchk2.c.

	The Display program no longer invokes more to page the trouble ticket
	or help files.  This was to plug security holes.

	The Rover Server is now installed - you can telnet to port 4000,
	enter your display and the network you want to view, and up pops 
	a network map.  

	Finally, the distribution includes a sample watchdog and killrover
	script that can be invoked by cron to assure the rovers and
	rover server are running.

3.63
	Vince Fuller and Cathy Wittbrodt (BARRNET) were kind enough to forward
	a list of changes needed to compile the code on an ultrix box.  
	Several removals of unneeded include files were also done.

3.64
	ctools.c - if stat fails it now tells the file it was trying to open
	problem.c - if file doesn't exist (config file) fprintf wasn't
		formatted correctly and would cause a core dump.
		Now if file doesn't exist, it logs it and then creates the file
	fileio.c - if PROBLEM.FILE doesn't exist it now creates it.
	manager.c - Dennis Shiao found that old config entries were hanging
		around...The fix was to bzero the old entry out before 
		overwriting.  Thanks Dennis.

3.65
	Display/display.c Display/main.c - added menu Ping & TraceRoute
	Distributed Rovers Support
	--------------------------
	ProblemManager - snmpaccess - provided hooks for SNMPv1/SNMPv2 agent
		( This allows centralized rovers to poll distributed rovers )
	Currently the interface is via the CMU SNMP/SNMPv2 code, and there is
	a Distributed Rovers MIB for the PROBLEM.FILE, STATUS files for each
	daemon, and provides for the remote checking, starting, and stopping
	of distributed rover daemons.  Through this mechanism, applicatioons
	can be written to assimilate multiple views of the network for a more
	complete and correct list of problems.

3.73	hostfile entries that have parameters in the test (like PING(5,5,60))
	will show up with the first parameter in the alert.  This allows
	multiple GOPHER tests for a single entity.  This code is now deployed
	in source form to the NAP.
