Stacks includes, functionality: status
Four stacks are included with similar levels of functionality. They have gone through various levels of testing and validation. The lessons learned during the original integration of FreeBSD 5.0 have helped to ease the process for integration of further stacks. The process has been streamlined and the "cradle" code has got smaller and simpler.
FreeBSD
FreeBSD was chosen first as a BSD-derived TCP/IP stack that is widely used and has had a lot of development. Originally version 5.0 was chosen for integration, thought it has been upgraded as newer versions of FreeBSD have been released.
FreeBSD 3.x has actually been run in user space for different reasons before in another unrelated project: Alpine. Though some insight was gained from this project, the parts of the kernel which needed support had changed sufficiently by FreeBSD 5 that little to no code is shared between the two projects.
Version 5.x works and has been validated. The technical integration of FreeBSD is described in the technical report Network Simulation Cradle published at the end of 2003. It has been updated incrementally, the current version used in simulation is 5.3.
lwIP
lwIP is an open source TCP/IP stack designed to be lightweight so it can be used on embedded systems "with tenths of kilobytes of free RAM and room for around 40 kilobytes of code ROM." It is designed in such a way that is is simple to add to an existing operating system or work without an operating system. Because of this it was an ideal choice as the second stack to integrate, it provided little challenge to get running while giving a good test bed to develop code to allow multiple network stacks to be loaded into the simulator.
lwIP's stable release 0.7.2 is used along with patches to fix a couple of bugs found in the TCP code. lwIP was integrated into NSC in two days, though further development was needed to have the simulator support multiple stacks fully.
Simulation has been used to find some bugs and aid some development of lwIP. Today version 1.0 of lwIP is used in simulation.
OpenBSD
OpenBSD is another BSD-derived network stack, similar to FreeBSD. However, a quick glance at the differences in the TCP code for both shows that they have deviated quite a lot. OpenBSD also implements TCP Selective Acknowledgements, a notable lack of FreeBSD at the time, which was thought to be an attractive feature to have available for simulation at the time.
Version 3.5 of OpenBSD is supported in NSC. Due to it's similarities to FreeBSD, integration was quick, around one week of work to get up and running.
Linux
Linux has a network stack far removed from the traditional BSD-derived (FreeBSD and OpenBSD above) or BSD-based (lwIP) implementations. One of the major goals of the Network Simulation Cradle project was always to allow simulation using Linux's TCP/IP stack. This was achieved in June/July 2004.
Currently the version used in NSC is Linux 2.4.28. The original version was 2.4.26, but this has been subsequently updated over time.
Validation work progressed well with Linux. A test network has been set up with Linux 2.4.28 machines. The accuracy found was very good, comparing packet traces between simulation and the test network showed similar results.
Linux 2.6.10 is also available to simulation as of late 2004.