XORP design philosophy is:
This is achieved by carefully separating functionalities into independent modules, and by providing an API for each module.
XORP divides into two subsystems. The higher-level (“user-level”) subsystem consists of the routing protocols. The lower-level (“kernel”) manages the forwarding path, and provides APIs for the higher-level to access.
User-level XORP uses multi-process architecture with one process per routing protocol, and a novel inter-process communication mechanism called XRL (XORP Resource Locator).
The lower-level subsystem can use traditional UNIX kernel forwarding, or Click modular router. The modularity and independency of the lower-level from the user-level subsystem allows for its easily replacement with other solutions including high-end hardware-based forwarding engines.
Here are a few suggested readings, in order:
This will take you some time, for sure, but will be of great help when you will plunge into the code…
The code is split into several directories, each containing libraries, components or implementation of the various XORP modules. Typically, documentation for each of them is available in one or more of the following places:
docs/<modulename>/The content of each of the directories is the following:
| Subdir | Description |
|---|---|
| xorp/bgp | BGP implementation. |
| xorp/cli | CLI (Command-Line Interface) library. It is used by the Router Manager (rtrmgr), and by some of the multicast code (the multicast-specific part of fea, mld6igmp, pim). |
| docs | XORP user documentation. |
| xorp/etc | Various XORP-related files (e.g., configuration, templates). |
| xorp/fea | Forwarding Engine Abstraction. The FEA implements the interface between XORP and the underlying forwarding engine (e.g., the UNIX kernel). It is used both for unicast and multicast. Note that the multicast-specific documentation is in ${XORP}/docs/mfea. |
| xorp/fib2mrib | Forwarding Information Base to the Multicast Routing Information Base route propagator. It uses the FEA to obtain the FIB information from the underlying system, and propagates it to the MRIB, so it can be used by multicast routing protocols such as PIM-SM. Typically, it is needed only if the unicast routing protocols run within XORP do not inject routes in the MRIB. |
| xorp/libcomm | Communication socket library. |
| xorp/libfeaclient | Library that is useful to clients of the FEA. |
| xorp/libproto | Abstract protocol library. Used by the following modules/directories: cli, fea, mld6igmp, ospf, pim. |
| xorp/libxipc | XRL (XORP Resource Locator) library and XRL-related programs. |
| xorp/libxorp | XORP library that contains various basic functionalities such as IP addresses, IP subnets, etc. |
| xorp/mld6igmp | Multicast Listen Discovery/Internet Group Management Protocol (MLD/IGMP) implementation. |
| xorp/mrt | Various multicast-related code. Used by the following modules/directories: fea, mld6igmp, pim. |
| xorp/ospf | Open Shortest Path First implementation. |
| xorp/policy | Policy-related library. |
| xorp/pim | Protocol Independent Multicast - Sparse Mode (PIM-SM) implementation. |
| xorp/rib | Routing Information Base. It is used to store the routing information from various protocols. |
| xorp/rip | Routing Information Protocol implementation. |
| xorp/rtrmgr | Router Manager. It is used to manage and configure all XORP components. |
| xorp/static_routes | Static routes management. It is used to configure static routes. |
| xorp/vrrp | Virtual Router Redundancy Protocol implementation. |
| xorp/xrl | XRL (XORP Resource Locator) interface. |
| The directories listed below contain third-party contributed code which is distributed with each XORP source release. | |
| xorp/contrib | various contributed code. |
| xorp/contrib/olsr | RFC 3626 Optimized Link State Routing implementation. Generously funded by CenGen, Inc. |
| xorp/contrib/mld6igmp_lite | Implementation of the Lightweight IGMPv3/MLDv2 protocols |
| The directories listed below contain various information that are of limited interest, or are not relevant to the current release. | |
| devnotes | various notes for the XORP core members. |
| utils | Various XORP-related utilities. |
| Directory | |
|---|---|
| Compiled object files & generated stubs | /xorp.ct/xorp/obj/ |
| Installation (installdir) | /usr/local/xorp |
| Binaries | installdir/sbin |
| Configuration file | installdir/etc/xorp.conf |
| Modules | installdir/lib/xorp/sbin |
| Commands | installdir/lib/xorp/bin |
| Templates | /xorp.ct/xorp/etc/templates/ and installdir/share/xorp/templates |
pierre@pierre-T500:/usr/local/xorp$ sudo mkdir etc