This paper describes the features of the daemon, how the daemon was merged from different projects and the resulting architecture. The section ends with a description of how a packet is forwarded through the forwarding plane. The reference section contains
RSVP-TE daemon for DiffServ over MPLS under Linux Features, Components and Architecture
1 The RSVP-TE for DiffServ over MPLS under Linux project This paper describes the features of the daemon, how the daemon was merged from different projects and the resulting architecture. The section ends with a description of how a packet is forwarded through the forwarding plane. The reference section contains links to papers and RFCs about MPLS and DiffServ.
1.1 Features
First of all the daemon supports the set up of Label Switched Paths (LSPs) in the network according to the IP routing tables or by explicitly specifying the hops to be traversed (shortest path LSPs and Explicitly Routed-LSPs respectively). There’s an RSVP API (RAPI), an API to aid developers to build custom applications that interact with the RSVP daemon. There is support for DiffServ allowing to differentiate the forwarding behavior based on the value in the EXP field of the MPLS header. There is also support for IntServ where resources are explicitly allocated on a per-LSP level. Traffic can be mapped on the LSPs very flexibly based on the destination address, protocol, destination ports and port ranges of the IP packets. There is also the ability to trace an LSP, comparable to IP’s traceroute. It checks the route taken by an LSP by probing the routers along the path. Resilience is also supported with LSP rerouting and LSP protection switching.
1.2 Merged components
The daemon is based upon the Nistswich version 2.0 daemon for Free BSD by USC (Figure 1: RSVP-MPLS BSD) and a port of an IntServ RSVP daemon to Linux by Alexey Kuznetsov (Figure 1: RSVP Linux). Both daemons are based on the same code base (ISI RSVP implementation, Figure 1: RSVP BSD) but they forked a while ago. This effort combines the daemons again so that the MPLS support found in the Nistswitch version is now available on Linux. Moreover support for DiffServ over MPLS (DS/MPLS) is also added (Figure 1: DiffServ extension).
The MPLS Linux kernel code is based upon mpls-linux by James R. Leu (Figure 1: MPLS Linux). Our release originally added kernel support for DiffServ over MPLS support, the use of multiple routing tables and LSP byte and packet counters. However the more recent v1.1 branch adds this functionality so we are using unpatched version now.
Figure 1 illustrates the merge process. We started by extracting the MPLS extensions from the Nistswitch version and applying these extensions to Alexey’s Linux RSVP daemon. We then added support to daemon for James Lieu’s Linux MPLS patches. Finally we added our own support for DiffServ over MPLS and flexible traffic mappings.