15-441 Project 2 -- Checkpoint 2
Useful Resources:
- UDP Example Code with hints for OSPF : UDP Client Server
Guideline:
- Begin with your repository and state of work from Checkpoint 1.
- This is also the final submission of your project. The grading rubric is specified in the project handout.
- Enable multiple routing daemons to communicate with each other using UDP on the routing port.
- Implement OSPF reliable flooding to flood information about the network topology and objects in the network.
- Specifications and requirements of the protocol along with the packet formats can be found in the project document.
- You may also use the UDP example code as a starter.
- Extend the routing daemon's object look up mechanism to include non-local objects.
- If an object is available locally, the routing daemon should return the URI based on the relative path information (This was your work for Checkpoint 1). But, now the routing daemons learns about remote objects using the OSPF flooding. Given an object name (using GETRD protocol), if the object is not available locally, the routing daemon should be able to find the nearest node that is hosting the object.
- Using the network topology that it learnt from OSPF flooding, it should find the next hop node in the shortest path to get to the above node and construct and return the next hop URI using the peername, serverport, localport and object name.
- Extra Credits
- There are three options for extra credits as mentioned in the project document (Caching, Longest Prefix Match, Persistent Connection and Pipelined Requests).
- You can choose a maximum of two of the three features above to implement. Not all of them have the same points. So choose wisely!
Files we expect to see in your submission:
- Makefile - make sure nothing is hard coded specific to your user; should build a 'routed' file which runs the routing daemon.
- webserver.py - Implement the flask application by completing the skeletal code given to you in the starter package.
- All of your source code - all .c and .h files for the routing daemon.
- readme.txt - file containing a brief description of your current implementation of the flask application and the routing daemon.
- tests.txt - file containing a brief description of your testing methods.
- vulnerabilities.txt - identify at least one vulnerability in your current implementation.
- Any supplementary files needed for the course staff to run your code.
Important notes about submission:
Make sure the following. Please note that submissions not following the instructions could significantly affect the grading procedure.
- Code compiles and runs on Andrew machines.
- Submission is self-contained as much as possible.
- Specifically, your code should work without requiring modifications to the source files.
- Submitted code should not assume or depend on external configurations other than those available on Andrew machines. (E.g., avoid hard-coded absolute path names.)
- If some manual set-up cannot be avoided to run your code, ask TAs about what needs to be handed in and what can be omitted from your submission.
- Documentation (*.txt) is in the top directory of your submission, with specified names.
- In readme.txt, describe exact steps needed to run your code. In particular, if arguments must be passed in a specific way, or some initialization is required, please explain that.