User Tools

Site Tools


High Level Architecture

XORP design philosophy is:

  • modularity
  • extensibility
  • performance
  • robustness

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.

Getting familiar with XORP

Here are a few suggested readings, in order:

  1. Slides of a brief presentation about XORP during the Ecode plenary meeting at INRIA Sophia Antipolis.
    The first pages should give an overview of what is XORP, and how it globally works. 1) 2)
  2. Read the XORP Design Documentation, it is suggested to read it in the following order:

This will take you some time, for sure, but will be of great help when you will plunge into the code…

Design Documentation

API Documentation

Debugging XORP

Project Management

Code structure and documentation

Main directory

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:


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.

(Default) Compilation/Installation Paths

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/

The configuration filepath won't probably exist at the first installation time. You'll probably need to create it via

pierre@pierre-T500:/usr/local/xorp$ sudo mkdir etc 

latex2wiki/dev_getting_started.txt · Last modified: 2011/03/23 00:54 by Ben Greear