# ns: Change History

- [EA] Added very first rough draft of NamSimulator that produces a nam_config for automatic layout.
- [EA] Added RTP Session class along with RTP and RTCP agents.

### ns-2.0a4 Sun Nov 10 11:06:46 PST 1996

Snapshot to VINT collaborators.

- [SM] Removed re-parenting hooks from ns-lib.tcl since TclClass now automatically makes all the classes in a class path name.
- [SM] Ported partially completed ivs module from ns-1.
- [SM] Fix from Ahmed A-G Helmy to omit unecessary code in MultiNode::init.
- [SM] Coalesce multiple sources into a single graft message to avoid dropped grafts with a large number of messages would otherwise blast into the first hop and overflow the queue (grafts are not yet sent reliably).

### ns-2.0a3 Sun Nov 10 11:06:46 PST 1996

Snapshot to VINT collaborators.

- [SM] Implemented simple RPF style flood and prune multicast (see tcl/lib/ns-mcast.tcl). Multicast routing object is build from a number of classifier objects (e.g., the primary classifier routes the packet either to a multicast or to a unicast classifier based on the multicast bit in the in the destination address). Multicast routes are computed statically from unicast routes. Prune timers are not yet implemented and grafts are currently sent unreliably.
- [SM] Created Node and Link classes to clean up Simulator class and allow these objects to be more easily abstracted into composite object. E.g., a multicast-node is composed of a number of sub-objects.
- [SM] Use re-parenting trick across a lot more classes in ns-lib.tcl. Created source base class for source/ftp, source/telnet, etc.
- [SM] Modified tcp-sink module to avoid virtual multiple inheritance (this causes too many problems with non-compliant C++ compilers). Created Acker and Sacker classes that are instanced in the sink classes.
- [SM] Type-cast bug fixes from Ahmed A-G Helmy.

### ns-2.0a2 Thu Nov 7 1996

Snapshot to VINT collaborators.

- [SM] First cut at multicast router from fine-grained objects.
- [SM] Add missing files to FILES.
- [SM] Implemented replicator and classifier/mcast objects as first step toward supporting multicast routers and broadcast LANs.
- [SM] Clean up class interface. Created Simulator OTcl class as uniform API for manipulating simulator. Moved almost all of the ns-1 backward compatability code into a new class called OldSim.

### ns-2.0a1 Wed Nov 6 13:57:31 PST 1996

Pre-release to VINT collaborators.

- [SM] Major architectural changes. Object are now finer grained. We have developed a more cleanly defined Tcl API so that developers can change the back-end while more easily maintaining backward compatibility. The simulator is now based entirely MIT's Object Tcl. The TclClass C++ base class replaces the old Matcher class. An OTcl class is created in C++ by statically declaring a derived subclass of TclClass. OTcl makes it easy to extend a class with new methods either on the C++ side or the Tcl side.

### v1.0 Tue Jul 23 11:27:17 PDT 1996

- Added a hook to dump a stack trace and exit when a background error is encounter (i.e., an error in a proc scheduled with ns-at). This makes it MUCH easier to debug simulator scripts that have syntax erros and what not in scheduled tcl stubs.
- Removed sack-tcp.cc from distribution. This leaves tcp-sack1.cc as the only SACK TCP implementation distributed with ns.
- Put back hook to source "~/.ns.tcl" since people rely on this. Fix provided by John Wroclawski.

### v1.0b4 Mon May 6 22:22:31 PDT 1996

- Corrected fix to TCP's window decrease algorithm in v1.0b2. Now, after a Reno Fast Retransmit, the window decreases to min(cwnd_, wnd_)/2, not to cwnd_/2 (before v1.0b2) or to min(cwnd_ + dupwnd_, wnd_)/2 (as in v1.0b2,3).
- Corrected calculation of congestion window for NewReno TCP for the case when multiple packets are dropped from a single window of data.
- Fixed bug in tcp-sink.cc that allowed an infinite loop under some circumstances when the number of outstanding packets in TCP was exactly MWS-1. Also added a note to the man page about MWS and other constants in ns. Thanks to Bernhard Suter for the bug report and fix.
- In TCP, changed the constant TCP_TICK to the variable tcp_tick_, with the default set in ns_default.tcl.

### v1.0b3 Mon Apr 29 19:10:33 PDT 1996

- Ported to Tcl v7.5. Changed trace objects to use new Tcl_Channel abstraction (for O/S indepedence). ns will NOT compile with earlier versions of Tcl.
- Added the parameter "maxcwnd", for the maximum congestion window, and corrected the use of "window", the receiver's advertised window, in the reno and sack implementations of TCP.
- Changed some of the *.tcl scripts to take into account the corrected use of the receiver's advertised window, and to use "maxcwnd".

### v1.0b2 Fri Mar 29 16:40:25 PST 1996

- Changed interpreter to not source ".ns.tcl" since tcl no longer uses the tcl_RcFileName C variable.
- Fixed a couple more SunPro C++ compiler problems. Patcjes from Michael Pearce.
- Corrected TCP's window decrease algorithm from "cwnd_ /= 2;" to "cwnd_ = window() / 2;". Thanks to Thomas Ziegler for the bug report.

### v1.0b1 Sun Mar 3 1996

- Fixed bug in tcp.cc that caused the retransmit timeout backoff behavior never to reset. Thanks to Jamshid Mahdavi for reporting both the bug and the fix.
- Fixed bug in tcplib telnet module. Random number generator was being seeded on each call (from the system clock) rather than once at start-up. Replaced calls to random number routines with calls to Random::uniform. Thanks to Werner Vogels for reporting this bug.
- Added local explicit-join notification for experimentation with RLM.
- Added a "message" agent that allows abibtrary message packets to be sent and received using tcl.
- Moved type-specific packet fields into a "body" union. Eliminated "reason" field (rather than move it to tcp body) since we should have just used the "flags" field to begin with.
- Added tracing functionality to loss-monitor agents (e.g., so we can compute sliding window loss statistics using an external tool).
- Changed ns-now to use 17 digits of precision. Otherwise, truncation could cause certain algorithms (e.g., RLM) to try to schedule events into the past.
- Added "random" attribute to cbr sources to cause them to generate a Poisson rather than fixed-rate packet stream.
- Fixed bug in RED initialization that could cause (almost-) infinite loop at start up.
- Incorporated patches from Michael Pearce to compile with SunPro C++ v3.0.1.
- Fixed bug that caused memory corruption when using class ID's larger than 10.

### v1.0a17 Thu Dec 27 1995

- Finished port of "tcp-sack1" and "sack1-tcp-sink", a second format for selective acks.
- Added "bursty" source for tcp connections.
- Added new loss policies for drop-tail links, "lossy-uniform" and "lossy-det". [Kevin Fall].
- Added more test files to the distribution: test-all-cbq, test-all-red, test-all-sack, and test-sack, in addition to test-all.

### v1.0a16 Tue Dec 12 19:05:56 PST 1995

- Added source code for sack-tcp.cc.

### v1.0a15 Tue Dec 12 17:52:32 PST 1995

- First cut at adding code for "tcp-sack1" and "sack1-tcp-sink", from Matt Mathis (mathis@zippy.psc.edu) and Jamshid Mahdavi (mahdavi@psc.edu).
- Changed format of window and RTT reports sent from tcp.cc to the trace file.
- Added "maxpkts" for ftp and telnet sources.

### v1.0a14 Fri Dec 1 10:35:30 PST 1995

- Finished port of TCP with selective acks, along with SACK acceptance tests in "test-sack".
- Added a modified version of Reno TCP, tcp-newreno.cc, for research purposes.
- Have not yet added tcp-sack or tcp-newreno to the man page.

### v1.0a13 Wed Nov 22 15:14:50 PST 1995

- Finished port of cbq code from tcpsim (with contributions from Michael Speer), and added cbq simulator tests.
- Added unique ID to each event in scheduler queue and added hook to lookup an event by using this ID.
- Added hook for deleting at callbacks.
- Fixed bugs in multicast delivery where agent could modify routing desstructors during the callback.
- First cut at port of TCP with selective acks.

### v1.0a12 Sun Nov 5 21:19

- Added config.h and loss-monitor.cc to FILES so they get included in tar.

### v1.0a11 Sun Nov 5 21:19

- Added loss-monitor agent, which is the same as a null-sink but calls a tcl proc whenever there is a gap in the received sequence space. Will expand functionality as necessary for MMG experiments.
- Integrated more mature tcl/c++ architecture from vic/vat. This has a major impact on the way ns objects are created and deleted, but we maintain backward compatibility with previous versions. The "ns" command is no longer implemented in C++, but rather as a library function (in ns_default.tcl) that provides glue between the old commands and the new "new/delete" interface.
- First cut at port of cbq code from tcpsim.

### v1.0a10 Fri Oct 27 17:44:39 PDT 1995

- Added "flush" method to trace objects so that output can be flushed before exiting.
- Added link-level src/dst fields to Packet class so node can tell which "interface" a packet arrived on.
- Added support for dense-mode PIM style flooding with prune/graft machinery.

### v1.0a10 Fri Oct 27 17:44:39 PDT 1995

- Fixed test-suite.tcl so that old awk works. Problem reported by Kannan Varadhan.
- Fixed Makefile.in to use V_LIB_TCL, as intended. Fix supplied by Kannan Varadhan.

### v1.0a9 Wed Oct 11 16:58:00 PDT 1995

- Fixed solaris compilation problems.
- Changed configure to use "-mv8 -msupersparc" only for gcc.

### v1.0a8 Fri Sep 29 15:11:04 PDT 1995

- Fixed more for-stmt scope bugs.
- Fixed compilation problems with Sun and DEC compilers. Problem reported by Thierry Turletti.

### v1.0a7 Wed Sep 27 19:55:23 PDT 1995

- First public (alpha) release.
- Included man page to FILES so it goes in tar.
- Updated README.

### v1.0a6 Sep 21 09:24 PDT 1995

- Added "bug-fix" hook to tcp reno.
- Ported to tcl-7.4.
- Include Matt Mathis' test-all script.
- Changed "for" statement conventions to adhere to the proposed ANSI standard change which re-defines the lexical scope semantics of the initializer statement. In order to be compatible with both the old and new semantics, we have changed all instances of
  - for (int i = ... ) ...
  - use(i);
  to
  - int i;
  - for (i = ... ) ...
  - use(i);

### v1.0a4

- Fixed bug in xgraph output: new version of xgraph doesn't understand FileorDev because it now uses the PRINTER environment variable. Bug fix from Matt Mathis (mathis@psc.edu).
- Added a 'test-all' sh script to distribution, which runs whole suite of regression tests and compares them against a reference output. Thanks to Matt Mathis (mathis@psc.edu).
- Don't include tk.h from Tcl.cc.

### v1.0a1 Mon Jul 31 16:05:08 PDT 1995

- Changed all references to random() to use Random class so we can easily change our pseudo-random number generator.
- Added convention to object names so we can derive their type from their name.
- Changed nodes to be first class objects like rest of objects.
- Changed trace syntax to use tcl files rather than it's own open/close. For example,
  - set f1 [open out.hop w]
  - $trace attach $f1
- Changed '-' and 'd' trace records to have same format as '+' and 'h' trace records.
- Incoporate vic's "matcher" abstraction into agent and link models.
- Major hacking to port tcpsim to tcl framework.