72 lines
2.4 KiB
Plaintext
72 lines
2.4 KiB
Plaintext
|
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.
|
||
|
|