The most used routing method is the “next-hop” method. Every router sends a packet to the next router according to its routing table. A router just takes the packet and forwards it to another router, etc. No differentiation between packets with the same destination are made.

What we would like to achieve would be a way to differentiate packets with the same destination but different source for the routing decision. Each router would then be free to choose the route he would like a packet to use. This little modification could enable multi-homed networks quite easily.

Freifunk gave me the opportunity to work on this project during the Google Summer of Code. I am really grateful for this opportunity, and will do my best to implement source-sensitive routing in Quagga and in the Babel version of Quagga during this time.

For those of you who want more details about the project, here are some more specifications for you :

Source-sensitive routing (or SADR) consist in routing packets depending on the source address of the packets in addition to the destination. It solves a number of routing problems, especially in multihomed edge networks , and may lead to better performance by providing more routes to higher layers. For example, MultiPath TCP at the transport layer is able to use these multiple routes (paper) . Source-sensitive routing is implemented in an experimental branch of the babeld stand-alone daemon.

Quagga is a routing suite written in C providing implementations of network routing protocols for Unix platforms. Quagga’s common layer (“zebrad”) abstracts away the dirty details of low-level networking, allowing all routing protocols implemented in Quagga to use a common API, independent of the underlying operating system. This common layer does not currently implement source-sensitive routing.

The goal of this project is to provide source-sensitive routing in the Quagga routing suite for the netlink interface. The student need to understand and modify the communication protocol between zebrad and the other daemons, change the local RIB of Quagga, and change the interaction between zebrad and the Linux kernel.

Here is my humble participation to the Babel project and I hope you will like it.

Olden