Building an Internet Router
Dynamic Routing - PWOSPF
Up until now you have only worked on router-centric functionality. That is, you make decisions on what to do with a packet based on local information, regardless of what the larger network topology may look like. This portion of the project will require your router to incorporate a simple dynamic routing protocol, PWOSPF, so that your router will generate its forwarding table automatically based on routes advertised by other routers on the network. By the end of this project, your router is expected to be able to participate in a large network of routers and route traffic through dynamically generated forwarding tables.
Note that you will have to integrate your software router with the hardware in the next stage of the project. In order to facilitate that step make sure your router can run both in dynamic and static routing modes. It will be much harder to debug your software-hardware communication if your router only supports dynamic routing.
The routing protocol you will be implementing is a link state protocol that is loosely based on OSPFv2. You may find a full specification of PWOSPF here and in the documents section of this website. Note that while PWOSPF is based on OSPFv2, it is sufficiently different that referring to the OSPFv2 as a reference will not be of much help and may confuse or mislead you.
Each team will be assigned a three host topology for developing PWOSPF. We strongly suggest that the teams work together to do incremental tests of their implementations against each other. That is, after implementing the PWOSPF HELLO protocol, ensure that inter-team routers can successfully perform neighbor discovery before going on to develop the link state updates. Testing components individually provides a much saner debugging environment than a fully built system.
Aids and Pointers
A linux reference PWOSPF implementation is available here - don't forget to add execute permission after your download.
Excellent guidance can be found at the PWOSPF VNS assignment pages.