diff --git a/README.md b/README.md index 40e31b8..2a3b639 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,34 @@ -# \#lang uwu BGP Router + __ __ __ + __/ // /_/ /___ _____ ____ _ __ ___ ____ __ + /_ _ __/ / __ `/ __ \/ __ `/ / / / / | /| / / / / / + /_ _ __/ / /_/ / / / / /_/ / / /_/ /| |/ |/ / /_/ / + /_//_/ /_/\__,_/_/ /_/\__, / \__,_/ |__/|__/\__,_/ + /____/ + +## High level approach + +The design of this "BGP" router is based on an internal radix tree structure containing the routing +database. Routes are indexed in the tree based on the bit pattern of their subnet, and route lookup +walks the tree to find the most specific route node corresponding to the requested destination +address. The router itself is based on Racket's built-in I/O multiplexing to automatically manage +I/O between multiple sockets. + +## Challenges + + - **No existing radix tree package in Racket.** + Due to Racket's unfortunate lack of adoption in the networks field, nobody has written any public + radix tree library for Racket that we could find, so we had to implement our own. This went + through approximately 3 iterations and it's still mildly spaghetti code. + - **No stdlib `SOCK_SEQPACKET` support.** + There's no support for `SOCK_SEQPACKET` in the standard UNIX domain socket module, so we pulled + the source code for this module and added a mode for `SOCK_SEQPACKET`. + - **Interesting simulator dependencies.** + The provided simulator has a hard dependency on Python 3.6, which neither of us actually had + installed or were capable of installing, and it did not work with Python 3.8. + +## Testing + +For the milestone submission, we included some basic internal unit tests but there isn't a lot of +code coverage on those yet. We also ran the simulator milestone tests against the current router +implementation and both milestone tests are passing. diff --git a/router b/router index 43c2f9e..15c69c8 100755 --- a/router +++ b/router @@ -1,6 +1,5 @@ #!/usr/bin/env racket #lang racket -; vim:syntax=racket ; vim:ft=racket ; __ __ __