NetStack A managed code IP host implementation This directory contains the code for NetStack. NetStack was developed by Yaron Weinsberg during an internship at Microsoft Research during the summer of 2004. The code base has since had a fair amount of hacking. The changes include: - localizing code that can not work in Singularity (ie anything using reflection) - replacement of types (System.Net.IPAddress -> IPv4/IPv6 classes). - clean-up dependencies between types, factoring out base types, etc. - addition of UDP and DHCP client code. - Bug fixes and applying naming and coding conventions. The code is still fairly rough, but it's a tough task to write an IP stack in short period of time. There is very little test code here and this is an area that needs to be worked on if NetStack is going to be used in the longer term. NetStack support builds in Singularity and outside of Singularity. Building and running outside of Singularity =========================================== Warning: The following information is not up-to-date with the current build system. The top-level nmake file 'Makefile' is set up to make builds outside of the Singularity environment. Simply typing nmake will build the appropriate assemblies. Unit tests can be run by typing 'nmake check'. To send and receive packets in userland the PacketTap NDIS module is needed. It is available from: \\cam-01-srv\dfsroot\groups\sysperf\topology\rawether\ At the time of writing the raw ethernet driver is not connected to the build. The relevant file that needs to be plumbed into the build is NetDrivers\RawEtherPacketTap.cs. Building and running within Singularity ======================================= The NetStack directory must be located under the top-level Singularity source directory. It's plumbed into the Singularity build by the top-level makefile. Builds from within the directory can be performed with: nmake /F Makefile.Singularity NetStack Directory Organization =============================== Base - Base types IPv4, IPv6, EthernetAddress, NetPacket, ByteOrder. Compat - classes that NetStack uses that are not in Singularity's Kernel BCL. NetDrivers - Driver interface code. Protocol - Protocol packet formats and utilities. Runtime - Most of the code - protocol implementations, mux/demux code, etc.