# ns: TODO list

The person who recommends the todo work does not necessarily do them by him/herself.

List of topics: Using hash classifier in hierarchical nodes introduction, code cleanup, interfaces, queueing, full-tcp, validation, documentation, research results, release, logging, test suite for error models

- introduction Here's the format: a boldface set of keywords about what part of ns is relevant, text describing what's going on, then a signature and date. ([johnh] Thu Jun 17 18:04:37 PDT 1999)

- Tcp-int
  Need to fix tcp-int. see tcp-int.tcl under tcl/ex. Also need to add a test-suite for same. Currently no testcase which is not good for code that got merged into ns way back in '97.

- Documentation
  Add doc for event-tracing.
  Convert README file in PGM into doc for PGM for ns-manual. ([haldar] Mon Jul 22 11:51:54 PDT 2002

- wireless code
  Cleanup of wireless code; move out from ns-lib into under mobility. move aodv.tcl from ~ns/aodv to tcl/mobility. cleanup for rtg-module much in the same way it 's been done for wired nodes. remove redundant codes in ns-mobilenode.tcl. ([haldar] Wed Jun 12 09:08:41 PDT 2002

- Port mac/null
  Look at the mailing list archive for porting information. Basically the code needs to be added to the current ns version and a test script needs to be written for it. ([John Mehringer] Thu Nov 9 17:27:57 EST 2000)

- Node Structure:
  - New node structure should be documented.
  - For this purpose, Node::*[nodetype_] instprocs should be cleaned up: the base Node should provide a set of customization interfaces, and each add-on routing module be an independent object which uses these interfaces to customize classifier settings inside the node;
    Also, numerous Simulator condition checks should be moved to the initialization process of individual modules instead of staying in the Simulator;
  - We should get rid of all wireless code that is _really_ for backward compatibility only, and move them to a separate directory instead of polluting tcl/lib and so on.
  ([haoboy] Thu Aug 24 14:25:08 PDT 2000)

- Queueing: Change the Drop-Tail queue size so that it includes the packet currently being transmitted, and add a backward-compatibility mode so that we don't break all of the validation tests. This will result in Drop-Tail and RED queues having the same size in packets (now they are off by one packet). ([floyd] Tue Jul 4 15:13:34 PDT 2000

- Test suite for error models: Currently we have 8+ different error models in ns. They seem to be used frequently but there is no test suite to guarantee that they function correctly in every release. What's more, there is little documentation about their expected behavior, especially for the newer error models, e.g. two state. What we need is first a test suite for all error models, then a fairly detailed doc on their expected behavior. This will save users' time and help them customize these models for their own purpose. ([haoboy] Mon Nov 29 16:31:59 PST 1999)

- Using hash classifier in hierarchical node The classifier cannot be used because of some strange problem with the hash table. It seems like there is either a bug with the Tcl hash function or the way we use it. ([salehi] Thu Sep 30 15:30:37 PDT 1999)

- gen-map update $ns gen-map needs a cleanup + adding lan support. ([yuri] Thu Sep 9 12:13:41 PDT 1999)

- This looks like a bug to look into After I edited mobility/scene/cbr-50-20-4-512 to replace all

             $cbr_(xx) set packetSize_ 512

  with

             $cbr_(xx) set packetSize_ 210

  and tried to re-run the test-suite-wireless-gridkeeper/dsdv, ns got into a dead loop in DSDV_Agent::processUpdate() right where the XXX-ed comment says it might:

      	  while ((queued_p = rte.q->deque()))
      	  // XXX possible loop here
      	  // while ((queued_p = rte.q->deque()))
      	  // Only retry once to avoid looping
      	  // for (int jj = 0; jj < rte.q->length(); jj++){
      	  //  queued_p = rte.q->deque();
      	    recv(queued_p, 0); // give the packets to ourselves to forward
      	  // }
      	  delete rte.q;
      	  rte.q = 0;
      	  table_->AddEntry(rte); // record the now zero'd queue

  Yet it works with packetSize_ set to 512. ([yuri] Thu Aug 5 15:58:36 PDT 1999)

- code cleanup, interfaces Aligning bound variable names [ns3?] Aligning bound variable names in OTcl and C++, where possible (change the C++ name, not the OTcl name). ([tomh] Jul 1 19:19:00 PDT 1999)

- queueing Adding FRED, from the contributed code web page, into the main NS distribution. ([floyd] Thu May 13 14:34:00 PDT 1999)

- queueuing? Adding RIO into the main NS distribution. (The original authors of RIO did many simulations in NS, so I would assume that they have an implementation somewhere...) ([floyd] Thu May 13 14:34:00 PDT 1999)

- one-way-tcp, full-tcp Implement the "careful" variant of bug-fix as described in rfc2582. See ns-users messages subject "Bug in TCPReno ?..." posted September 1999. ([johnh] Fri Sep 24 10:00:10 PDT 1999)

- full-tcp, validation Validating ECN functionality for full-TCP (and, in the process, updating full-TCP to make sure that ECN functions the same in full-TCP as in one-way TCP). ([floyd] Thu May 13 14:34:00 PDT 1999)

- full-tcp, validation Replicating all of the TCP validation tests to make sure that they work as we would like with full-TCP also. (There are a number of things that are tested in the one-way validation tests, but that are not verified in two-way (i.e., full-TCP) validation tests. ([floyd] Thu May 13 14:34:00 PDT 1999)

- validation Adding either short *.txt files, or longer documents, for each validation test that does not now have one, so that users can tell reasonably easily what is and is not tested in each validation test. ([floyd] Thu May 13 14:34:00 PDT 1999)

- documentation, validation Standardize documentation for valdation tests. ([johnh] Thu Jun 17 18:04:37 PDT 1999)

- validation Expanding the validation tests for all of the various scheduling algorithms. ([floyd] Thu May 13 14:34:00 PDT 1999)

- research results, validation More simulation scripts on-line somewhere. (Has everyone in the VINT project made all of the simulation scripts for all of the simulations that they have writted papers about publically available, so that readers can easily reproduce those simulations themselves?) ([floyd] Thu May 13 14:34:00 PDT 1999)

- documentation Better document trace file format (both ns output trace) and the 32-bit integer thing. (A very FAQ.) ([johnh] Thu Jun 17 18:04:37 PDT 1999)

- documentation Describe the ns programming model (event driven and the IO model). ([johnh]Wed Sep 8 13:38:19 PDT 1999)

- release, allinone Allinone should add tcl-debug and update dmalloc. ([johnh]Thu Nov 9 10:01:41 PST 2000)

- logging Trace output is a mess. There are currently two different formats (wired and wireless), neither of which is easily extnesible. Switching to something like what nam uses seems like a win. ([johnh]Fri Aug 27 17:24:44 PDT 1999)

- full-tcp, application APIs We need to compare the ns full-tcp with the south-bay full-tcp in terms of corner cases and APIs (i.e., with the cisco http models). ([johnh]Mon Aug 30 15:17:59 PDT 1999)

- queueing Make sure that all ns constructs (1-way and full-tcp, queueing protocols) have both packet and byte-oriented modes and that they are selected consistently. ([johnh]Mon Aug 30 15:20:00 PDT 1999)

- emulation merge nse into ns, have emulation controled by a configure option (--with-emulation or something). ([johnh]Thu Oct 14 10:25:47 PDT 1999)

- debugging Insure that gen-map works correctly with lans and wireless. ([johnh] Fri Sep 3 21:26:38 PDT 1999)

- test suites, error models Create tests suites for the error models. ([johnh] Wed Nov 24 13:20:55 PST 1999)

- routing Add source routing to ns. Suggested by several people, including ashish. Could possibly start with MPLS contributed code? ([johnh] Mon Dec 20 15:57:11 PST 1999)

- optimization, routing, classifiers An optimization in classifier sizing: When Polly mentioned that Classifiers just double their routing tables when the currently allocated space is exceeded, I thought it was a bug: Classifiers normally are populated when all nodes are created, which means that we know what the routing size will be and can give Classifiers a hint, so we don't need to double. ([johnh] Tue Dec 21 10:25:56 PST 1999 )

- topology generation Contributed topology generators to possibly integrate from Graham Phillips <graham@ISI.EDU>: I've written some topology generator programs that the ns community is more than welcome to use. These programs are reasonably mature and I've used them over the past year while preparing a sigcomm paper about multicast trees.

  The programs essentially create and manipulate Standford Graph Base topology files, but there are also programs for converting from 1) tiers to SGB, and 2) ISI's mbone collection format to SGB. Obviously the ns community would use the existing SGB to ns converter to create the appropriate ns topologies.

  The basic idea was to widen the range of real and artificial topologies that might be constructed. All utilities and documentation are available from http://www-scf.usc.edu/~grahamph/contrib/index.html.

  ([johnh] Tue Dec 21 10:30:47 PST 1999)

- tracing, visualization Need to review MAC-layer tracing, support tracing at multiple levels. ([johnh] Tue Dec 21 10:50:34 PST 1999)

- binding [ns3?] We need to clean up inconsistent binding of variables (but this is hard to do while keeping backwards compatibility).

      Date: Fri, 23 Jul 1999 17:37:04 +0100 (BST)
      From: Lloyd Wood <L.Wood@surrey.ac.uk>
      In:

      http://www-mash.cs.berkeley.edu/dist/archive/ns-users/9906/0304.html
      http://www-mash.cs.berkeley.edu/dist/archive/ns-users/9906/0313.html

      I grumbled about consistent use of bind, so that OTcl and C++ users
      can talk about the same variables and you don't have to go hunting for
      the bind statement to see what maps to what when you're working across
      the divide.

      The thing is, once you start going a bit deeper into the ns code,
      however reluctantly, there's a second level of confusion. A search on
      'return ' in headers for member functions returning variables produces
      rather similar results for bind; almost all are obvious and sensibly
      mapped: blah() to blah_, but the odd thing like:

      tcp.h:  int& flags() { return (tcp_flags_); }
      rtp.h:  u_int16_t& flags() { return (flags_); }

      (or
      ip.h:   int& flowid() { return (fid_); }
      address.h:      inline int portshift() {return PortShift_;}
      address.h:      inline int portmask() {return PortMask_;}
      packet.h:       inline double& timestamp() { return (ts_); }  )

      can really throw you for a loop and complicate digging up responsible
      bits of code affected by changes.

  ([johnh] Tue Jan 4 10:55:56 PST 2000)

- routing, scaling Should reimplement algorithm routing solely in C++. ([johnh] Wed Jan 19 07:42:32 PST 2000)

- mixed-mode, scaling Should check, change code so that packets can stay completely in C++ when being forwarded between regions in mixed-model simulations. ([johnh] Wed Jan 19 07:46:49 PST 2000)

- TCP Check the TCP reset function. From email with "Subject: Re: TCP reset bug" and "Subject: question about TCPAgent reset()" on the ns-users mailing list. ([floyd] Fri Feb 25 09:06:59 PST 2000)

- one-way TCP Deal with the issue of segment size vs. header size. From email on the ns-users mailing list. ([floyd] Fri Feb 25 09:06:59 PST 2000)

- documentation Make sure that documentation includes all variables in ns-default.tcl. ([floyd] Fri Feb 25 09:06:59 PST 2000)

- validation Suppress "using backward compatibility mode" message during *-v1.tcl validation tests? Correct procedures for V1 validation tests that are not run: e.g., test cbqForOld in "./test-all-cbq-v1". From email on "Subject: Re: a validation question" on the ns-users mailing list. ([floyd] Fri Feb 25 09:06:59 PST 2000)

- probability distributions Add validation tests. ([floyd] Fri Feb 25 09:06:59 PST 2000)

- LANs Make LAN nodes be generated with [$ns node] and node-config rather than special APIs. ([johnh] Tue Jun 20 17:19:27 PDT 2000)

- SRM/event tracing SRM's tcl tracing code should use real event tracing (which should include tcl support), not the current hack (see srm.tcl for commands "$self evTrace Q NTIMER"). ([johnh] Wed Jul 24 10:41:06 PDT 2002)

# DONE list

These things have been completed:

- hier addressing str2addr in address.cc should do some error checking to insure that fields are not larger than they should be. ([johnh] Mon Oct 30 22:52:32 PST 2000); completed by Padma in 2001