-*- text -*- INSANE: An Internet Simulated ATM Networking Environment Version 1.0a11 Bruce A. Mah $Id: CHANGES,v 1.16 1996-10-29 12:21:09-08 bmah Exp $ ========================================================= This document describes the major, user-visible changes to INSANE. 1.0a11 (29 October 1996) ------------------------ This revision contains mostly bugfixes, and brings the released code up to date with what was being used for experiments. Configuration: Now builds under Tcl 7.5 and 7.6. insanemon now works under Tk 4.1 and 4.2. Some marginally more useful ways of finding (and asking about, if necessary) Tcl and Tk libraries. Configuration: tarfile now compatable with legacy SunOS tar. Really a better solution is for everyone to get GNU tar or something more up-to-date. Global: Now prints hostname, PID, and version number to the logfile as part of the global identification information at simulation startup time. AtmDeviceDriver class: Fixed a bug which caused connection caching to not work for some QOS policies. Fallback routes are now cacheable. Minor code reorg (transmitting of packets queued for a given route is now a method). New statistics printing. Minor adjustments to QOS policies. Added packet classifier for TCP discard port (9). CellQueueRcsp class: Cosmetic formatting changes. Fixed a few minor bugs in work-conserving scheduling. Tcp class: Fixed a bug which caused an indefinite number of packets to be sent when doing a multiple-segment TCP send. TelnetClient class: TelnetClient processes now enter a zombie state after their lifetimes expire but before being destroyed. This helps to prevent race conditions in which events can be posted for a process while it's still alive, but delivered after it's been deleted. Other applications probably don't have this problem. 1.0a10 (30 May 1996) -------------------- Maintenence release to fix a CVS-related problem which caused a number of long-deleted files to mysteriously reappear. Note in particular that the documentation file (for 1.0a9) is still valid. 1.0a9 (29 May 1996) ------------------- This revision consists mostly of enhancements to classes and support scripts, to get a snapshot for off-site computations. One change will affect results vs. the results generated by 1.0a8: Within the ATM network, signalling cells are now prioritized above best effort cells (but below guaranteed performance cells). AtmDeviceDriver class: Various changes to real-time parameters for different traffic classes. Added application-specific classes, which send a subset of applications guaranteed and the rest best-effort (telnet, http, ftp, audio, video, isp = telnet + http, av = audio + video). Minor formatting changes in output. Minor tweaks to telnet and http parameters (telnet and http qos types only). CellGoBackN class: Now only sends at most half of maxCells during each retransmission (to prevent retransmissions from self-congesting). Also stops first-time sends (queueing only for new cells) when there are more than half of maxCells cells outstanding (because with a large maxCells, the first-time transmissions are likely to be rejected at the receiver anyways). CellQueueRcsp class: Track amount of buffer space allocated and consumed by all classes. Optional log this information. New signalling traffic class, prioritized lower than guaranteed classes and higher than best-effort. Signalling channels now have 96 cell buffers by default (up from 10), which was not enough to handle bursts from the retransmission modules. CellQueueRcsp, Sig, SigHost, SigRcsp, SigHostRcsp classes: Optionally disable jitter control or rate control. NntpServer class: New class simulating news transfers. Sends data to a SampleTcpServer object. SigRcsp and SigHostRcsp classes: Now can set a number of excess buffers to add to buffer allocation for each channel. A generalization of the facility formerly in SigHostRcsp. SmtpClient class: New class simulating mail transfers. Sends data to a SampleTcpServer object. insane.conf-xunet: Handle work-conserving and static-priority RCSP variants. In various Tcl composite objects that do signalling, increase number of retransmit queue slots in configured CellGoBackN objects from 100 to 512. New support scripts. 1.0a8 (19 April 1996) --------------------- AtmDeviceDriver class: Fixed a glaring bug which caused virtual circuits to be idled on every idle timer tick (instead of corresponding to timeout values). Per-application multiplexing should work now (finally). netstat subcommand now takes -a (all routes) and -d (downcalls) flags. Add statinterval subcommand to output number of routes in use. Per-application logging of VC establishment successes/failures. AudioSink class: Outputs delay histogram in destructor. Now prints number of packets known to be lost. CellQueueRcsp class: Support for work-conserving RCSP scheduling (via mode subcommand). NullDeviceDriver: Fix broken Tcl constructor. Sig class (and derived classes): New statinterval command turns on periodic logging of signalling activity. Support for work-conserving RCSP scheduling (via mode subcommand). SigHost class (and derived classes): New statinterval command turns on periodic logging of signalling activity. Support for work-conserving RCSP scheduling (via mode subcommand). SigHostRcsp class: New admission control tests, which should result in higher network utilization. SigRcsp class: New admission control tests, which should result in higher network utilization. TelnetClient class: No longer depends on code in AppTcpClient class (no user-visible changes). Outputs delay histogram in destructor. Now logs all roundtrip times. VideoSink class: Outputs delay histogram in destructor. Now prints number of packets known to be lost. HostAdapterRcsp composite object: Increase subqueues to handle longer scheduler delays SwitchRcspN composite object: Increase subqueues to handle longer scheduler delays subnetAdd command: Fixed a problem which placed daemons on the wrong hosts. 1.0a7 (8 Mar 1996) ------------------ The most important changes in this version are those required to support the InsaneMon graphical user interface. MAJOR CHANGE: InsaneMon (graphical front-end and simulation monitor). INSANE processes running on different computers can communicate their progress and status via UDP to an InsaneMon process, which summarizes the state of all currently-running INSANE processes. This remote monitoring is enabled by the -R command line flag, given to INSANE. AtmDeviceDriver class: Which picking a cached virtual circuit to use, only call packet classifier when appropriate to qosType (otherwise use the default conversation type). Added netstat subcommand to see callout queue status. CellGoBackN class: Retransmission section completely rewritten to retransmit cells in order (old algorithm caused problems when low-numbered cellss were sent behind high-numbered cells and dropped due to a lack of buffer space, leading to a livelock). Added netstat subcommand to see state of retransmit queues. CellQueueRcsp class: Add netstat subcommand to see state of per-VCID queues. FtpClient class: Fix error handling to deal with the case that the control TCP connection establishment fails. FtpServer class: Handle timeout when establishment of data connection fails. Not clear it should be retrying immediately, though. Not terribly realistic, no real ftpd does retries in this way. HttpClient class: New HttpThinkTime distribution tracks a more interesting busy period of Web usage (a subset of the original time period). In case any TCP connection establishment fails, timeout and try again. It's not clear this is the right thing to do, though. HttpServer class: New multi-threaded HTTP server design is simpler (old single-threaded design/implementation was flawed). Ip class: More useful error messages when dropping a packet. NullDeviceDriver class: New class, drops all output packets. Useful mostly for fixing routing problems. Sig, SigHost, and derived classes: Modifications to netstat subcommand: By default, gives summary of VCIDs in use on each outgoing port. netstat -v gives old output (entire translation table). SigMessage class: SigMessage::Copy virtual method now correctly returns (Pdu *). Tcp class: Add error checking to UserSend, UserClose, UserSet, UserReset to prevent user from attempting an operation on a non-existent connection. TelnetClient class: Destructor now prints lifetime of each telnet session. Die in the case that the TCP connection establishment fails. Fix a memory leak caused by not freeing up TCP data tags on receipt of a server response. VideoSource2 class: New class, simulating VBR video based on vic/vgw trace. INSANE now ensures an exit value of 0, in the event that the simulation run completes without error. 1.0a6 (27 Feb 1996) ------------------- This release makes a few bugfixes and enhancements related to statistics-gathering. The most important enhancement is DOCUMENTATION. MAJOR CHANGE: tar file now extracts into its own directory. MAJOR CHANGE: Manual (doc/InsaneMan.ps) updated to correspond to the software. In AtmDeviceDriverclass: Fix a bug which caused ftpdata(up) conversations to be incorrectly classified as down. Now keeps per-application byte- and packet-counts from the packet classifier. In FtpClient class: Minor enhancements to output statistics. In HttpClient class: Minor enhancements to output statistics. In Tcp class: Corrected omission so that rcv_bytes member of TCP PCB is updated correctly. In TelnetClient class: Minor enhancements to output statistics. configure script regenerated by autoconf 2.7. 1.0a5 (22 Feb 1996) ------------------- Mostly minor bugfixes that showed up during extended testing. In AtmDeviceDriver class: Fixed a bug which caused routes using cached SVCs to "steal" bindings from already-established routes. When doing cached SVCs, make sure that VCs being established don't get timed out. For qos1 policy, flag fallback connections that fail. Some delay bounds adjusted in qos1 policy. VC management debugging output is now level 1. In CellQueueRcsp class: Added statinterval subcommand to show utilization of datalink. In HttpClient class: Add threshold parameter to terminate HttpClient object if thinktime between pages exceeds a certain value. In Lan class: Added statinterval subcommand to show utilization of datalink. In LanHost composite object: Increase default queue size to 64 (more realistic value prevents excessive packet loss during bursty LAN traffic). In SigHost class: Fixed a bug in SigHost which caused potential memory corruption when a SigHost ran out of VCIDs on an establish downcall. In Tcp class: Fix a race condition which occurred when a SYN segment contained data. The data could potentially be delivered to the process before the connection notification. Add Tcp::UserSet and Tcp::UserReset methods to change nodelay mode on a TCP connection. Tcp::Close() no longer attempts to post an EventTcpClosed to the application if the connection is in the TcpsClosed state. This caused applications to get confused and try to close a connection after the TCP object had already disposed of it. Connections dropped due to excessive retransmits no longer cause crashes. Sending keepalives no longer cause connections to be closed. In TelnetClient class: Use nodelay mode on Telnet connections. No longer tries to send after running out of timestamp slots. In TelnetServer class: Added a missing break, which could have caused problems when closing a telnet connection. Use nodelay mode on Telnet connections. For all ScheduledObject subclasses: New address subcommand returns the address of the C++ object (for use in debugging). AIX and IRIX compatability. 1.0a4 (9 Feb 1996) ------------------ Many bugfixes made and a few portions of the simulator were redesigned. MAJOR CHANGE: All packets/cells/frames (IpPacket, TcpSegment, UdpPacket, LanFrame, AalFrame, AtmCell, SigMessage) are now object classes which are subclasses of new Pdu class. Packets and payloads now (hopefully) get allocated and deallocated correctly, and can be iostream-printed. Pdus can contain other Pdus, which get managed via reference counts. MAJOR CHANGE: In Calendar.cc: Made all array subscripts unsigned to fix overflow problems (was causing floating-point errors on i386 and possibly segfaults on other architectures when array subscripts became negative). (This is not a permanent solution.) Fixed a typo which caused a sanity check to be performed too often. MAJOR CHANGE: configure options --with-readline and --with-malloc turn on support for GNU readline library and CSRI malloc library, respectively. In Aal class: Added error checking to avoid a fandago-on-core caused by out-of-bound VCIDs. New AtmDeviceDriver class: Reorganized AtmDeviceDriver subclasses into a single parameterized class, in one source file. Added svccache virtual circuits (and configurable SVC timeouts) to AtmDeviceDriver. Added fallback QosType to force the driver to test out its fallback VC parameters. (The primary set of parameters is set as to be impossible for any network to provide the requested QOS.) In AtmTest class: Moved constructor from src/AtmTest.h to src/AtmTest.cc to eliminate some compiler warnings about in-line functions (no change in functionality). In CellQueueRcsp class: Fixed a glitch when deleting best-effort channels and a potential problem when deleting real-time channels. Initialize all CellQueueRcsp queues to best-effort on startup to prevent the CellQueue from thinking that there should be resources allocated to inactive channels. Disabled EPD for reserved channels (lowest 16), to fix a bug which caused signalling to mysteriously fail when signalling channels were put in EPD mode with no way to escape from it. In HttpClient class: Added item- and page-level logging of HTTP accesses. In Ip class: Add a route query subcommand to allow for querying of routing tables by scripts. Increment counters for looped-back packets. In Sig class: Added netstat subcommand. In SigHost class: Fixed a bug which could cause leakage of downcalls. Improved diagnostic code at debug level 4. Fixed bug/inconsistency in downcall handling between connection accept and connection reject cases. Added netstat subcommand. In Simulation class: Added "sim at" command for scheduled execution of a Tcl script. Added "sim trace" command to enable/disable per-event tracing (can be enabled from the command line with -E option). Add "sim mdebug" command to control CSRI malloc debugging level. "sim go" subcommand takes an optional numeric argument to run until. In Tcp class: Fixed a race condition which could result in an application receiving FIN notification before it had received the last data segment for a connection (this occasionally caused breakage of FtpClient and possibly other classes). Add netstat subcommand to see TCP PCBs. In Udp class: Added debugging output for a failed UDP layer demux. Fixed various memory leaks relating to the packet payloads of UDP applications not getting deleted properly on reception. Add netstat Tcl subcommand, and debugging output. Version/copyright/build strings can now be accessed separately. Build string goes at head of log output Added some explanatory comments to src/Makefile.depend.in. Moved all dependencies on struct in_addr, inet_addr(3), and inet_ntoa(3) into src/IpPacket.{cc,h} to isolate reliance on host IP stack. Provide "uniform" and "zipf" random number distribution commands to Tcl scripts (src/tclRandom.{cc,h}). Added a GetVar method to Tcl class, to support a possible bug workaround for getting a stack trace on i386. In Tcl CLI, "objects" command now prints out information on composite objects, where possible. A single optional argument sets the level of nesting to which object information will be printed. Invoking an object without a subcommand now functions identically to the print subcommand. Added lib/tcl/Site.tcl to create an entire Internet site, complete with servers, clients, Lan and router. In various places, use new Tcl::AddErrorInfo method to improve diagnostics in various places that a Tcl expression/script is evaluated from a C++ procedure. Sample configuration files are now stored in conf/. panic() utility function in src/util.cc now aborts the process (easier to get a stack trace from a debugger). Increased Tcl arithmetic precision to fix some roundoff errors that were causing the simulation scheduler to fail. Ensure that TelnetClient, FtpClient, and HttpClient classes all have their endTime fields initialized by their constructors. Add ev_sender member to Event structure, which gets filled in (usually) with the sender of every event. Event tracing now prints this info if available. Fixed a particularly pernicious bug in {AtmCellList,EventList,TcpDataList,UdpDataList}::Append, which caused all manner of mysterious segfaults. HostAdapter{Fifo,Rcsp} scripts now configure Aal primitive objects for the proper capacity for VCIDs. 1.0a3 (24 Jan 1996) ------------------- Some tcplib distributions did not retain enough precision in their CDF representation to accurately represent their tails. The distributions are now generated from the PDF representation instead. Added queue statistics to CellQueueRcsp. Now works (supposedly) on NetBSD 1.0A (gcc-2.7.2, Tcl-7.4p2). Fixed some problems in toplevel/Makefile for creating distributions (not user-visible). Added additional statistics to AudioSink log output. Added UdpPayloadType field to UDP packets (to simulate RTP payload type). Fixed a really stupid bug in Udp module which caused an infinite loop during demux of a UDP packet when more than one UDP socket was bound. Added VideoSource and VideoSink classes. These simple classes emit a CBR stream of fixed-sized packets. Hopefully a second iteration of these classes will produce some behavior resembling that of current MBONE video tools. Now uses GNU autoconf for configuration. Added skeleton manpages for all primitive classes (these need to be filled in). 1.0a2 (19 Jan 1996) ------------------- Added AudioSink and AudioSource classes, simulating constant bitrate audio (on/off times are determined by tcplib-derived distributions). Adjusted interfaces to Udp class methods to be more consistent (all methods callable from applications now take time arguments). UdpData structures contain sequence numbers. AtmDeviceDriver class (and subclasses) no longer queues the first packets for a new VC out of order. AtmDeviceDriver is now a base class (the formerly default behavior has been taken over by the AtmDeviceDriverSvcRouter class). Fixed some typing bugs to be compatable with gcc-2.7.2. Fixed a bug in detecting duplicates segments in TCP reassembly. Some voodoo constants were removed from ephemeral port number assignment. RCSP queue (CellQueueRcsp) now keeps enough subqueues to buffer packets for a constant amount of time in the future, regardless of the number of levels. Cells that arrive for a closed VCID are now dropped correctly. Added several AtmDeviceDriver subclasses. First attempt at QOS-aware AtmDeviceDriver subclass (AtmDeviceDriverSvcConvQos). Now compiles on FreeBSD-2.1.0, using gcc-2.6.3 that ships with distribution. In Sig class: Fixed a bug that caused resources for the wrong virtual circuit to be released on VC teardown. Documentation desperately needs updating. 1.0a1 ----- Initial release.