ns-3 meeting summary, November 2007 The ns-3 development team met at the University of Washington from November 26-30, 2007, to review the ns-3 codebase and discuss next development steps and roadmap. Attendees: ========== Matt Adams (for wifi discussions) Raj Bhattacharjea Craig Dowell Tom Henderson Joe Kopena Mathieu Lacage Ilango Purushothaman (for wifi) George Riley Sumit Roy (for wifi) Fei Ye (for wifi) Main topics covered: ============== - Packet object design -- whether they support interface aggregation -- whether they should subclass Object - Socket API issues -- Threading and blocking socket calls -- char pointer-based Send() calls - Whether to rename, reorganize code to better distingish between Components, Objects, and Interfaces, or otherwise how to better explain the system - ns-3-wifi, ns-2 802.11 work, and wireless in general - Layout and topology code, and linking to topology generators - The TCP repository and Internet Node internal architecture - API stabilization is an important goal to work toward for the sake of early adopters, and affects task ordering and plans. - Roadmap items Action items and agreements: ============================ - No need to put Packet into QI framework for now; we can add later if need arises, without changing the API (which is Ptr). - Design a RefCountObject base class and have class Packet subclass from it. This avoids ref counted objects that don't support QI from having to reimplement Ref and Unref. Public methods would be Ref(), Unref(), and Dispose(). This is independent of class Object. (George) - Document packet metadata and interaction with ascii tracing better. (Mathieu) - Add Send and SendTo methods to the socket API to accept char pointers; document that the callee immediately makes a copy of it. These are non-virtual and simply immediately create a Packet and pass it on to the corresponding Send(Packet) methods. (Raj) - Document how to use Packet Header and Footer classes to conveniently add data to a packet. (Mathieu) - Investigate threading and blocking APIs needed to support NRL Protolib and the protocols built on it. (Joe) - After long discussion, decided on no change to class names (IObject, CObject), file names, and source code directory organization to better distinguish between Interface and Components. Instead, we will try to resolve possible ambiguity in these concepts within the tutorial and documentation. We will not require use of a component manager to create objects. (all) - Identified a number of objects that require iids, cids, and agreed to be more consistent about adding InterfaceId and ClassId where appropriate. (Craig to work on some guidelines for documenting this) - Two conventions regarding default values will be adopted: -- Default values used to set values on an object should, in general, also have getters and setters to access the value through the object's interface. -- Default values may be used for initialization only, and can either be global, static values or global but changeable per node. - For higher-level code such as topology code, it should be documented what are the interfaces in use in the code, what classids are supported, and what default values are used beneath the API. - We spent a day discussing topology code (building larger simulations) and concluded the following: -- We want some notion of a container to group nodes and net devices. We ought to be able to add objects to existing containers, and to merge containers into a new container. Some of these layout operations will then operate on containers of objects instead of the objects themselves. -- We will probably want to create some Layout classes that apply a particular mobility/position model to a container of nodes -- The current MobilityModel framework is probably not aligned with this approach. -- We need some kind of IP address generator (Craig had started one of these in the tutorial branch) -- Some more work needs to be done on HierarchicalMobilityModel. There needs to be multiple mobility models defined: A reference mobility model that lays out the center point of each cluster, followed by a mobility model that computes position relative to the center point, (and so on if it recurses). - Despite initial consideration to rename a lot of objects in Internet Node (relating to socket factories), will keep most of the naming the same. We had a lot of discussion/confirmation of current design points. - Agreed to try to refactor Internet Node so that it is not a subclass but instead is a special object that aggregates all of the consitutent interfaces (i.e., Internet Node no longer derives from Node but is an object with cid and iid that basically implements what is in Construct() presently). Rename it to "InternetStack." - Developers prefer ns-3 manual to be written in Doxygen instead of texinfo. We think that it can be fixed up to do this (support images). Keep tutorial as texinfo or whatever format is preferred. Also, avoid use of docs repository; keep everything in main tree. (Tom) - Python bindings will not be immediately prioritized, but work will continue on developing these. (Gustavo, in absentia, and Craig) - Create new src/contrib directory for allowing users/developers to place contributed code that we as a group have not yet planned to maintain as part of the API (perhaps because we are gauging interest in adopting them in the core). Headers from contrib directory could be included from any module. Two candidates for the initial contrib/ code are Gustavo's EventGarbageCollector (now only in the OLSR branch) and Mathieu's Gnuplot class from ns-3-wifi. Roadmap: ======= - We intend to continue monthly releases (Dec. 15, Jan 15, ...) for the time being. - The group agreed that, while neither module is completely done, there is value in merging ns-3-wifi and ns-3-tcp so that early users have main tree support for a wifi model and a reliable stream service is functional, even if it is not yet RFC compliant. - The push will be to get the wifi and tcp merge done before Dec. 15, and get things to usable, debugged state by Jan or Feb. - Mathieu intends to work the following on ns-3-wifi: -- Phy layer cleanup, bug fixing -- Split to accommodate multiple phys -- Documentation, scalability -- 802.11e (EDCA almost there, HDCA more work needed -> scheduler) --- End of January, usable 802.11e EDCA - Raj intends to continue work on TCP ported from GTNetS: -- Coarse retransmission timer (Tahoe behavior) -- Delayed ack timer and delayed acks -- Fork on accept -- Fix newreno behavior -- Expose DefaultValues through class Tcp's public inteface -- Connection close -- Then work on other GTNetS variants - The next major chunk to tackle is topology/layout code. -- Mathieu and Craig are both working on this, with Mathieu working on some initial prototyping and mobility model refactoring, and Craig working on requirements and possibly some prototyping also -- Probably nothing for merging until February timeframe, but this is a last critical piece of our core APIs that we have to settle soon -- Refactoring class Internet Node is left for the topology exercise - A stable release with TCP, WiFi, and topology/layout helpers is seen as a major milestone accomplishment for the project and likely starting point for wider adoption. -- Should work toward having code and support (documentation) stable in mid-summer 2008 to start publicizing in research and educational settings that fall. -- Major changes such be rolled in ASAP with the goal of stabilizing the API for early adopters. - Other items on the near-term roadmap: -- Protolib integration (Joe, Tom) -- Calendar scheduler (Raj) -- Real-time scheduler (Craig, Tom) -- Network simulation cradle support (Tom, Sam Jansen)