C-BGP is an efficient solver for BGP, the de facto standard protocol used for exchanging routing information accross domains in the Internet. BGP was initially described in RFC1771 in 1995. It has since undergone several updates recently standardized in RFC4271 (2006).

C-BGP is aimed at computing the outcome of the BGP decision process in networks composed of several routers. For this purpose, it takes into account the routers' configuration, the externally received BGP routes and the network topology. It supports the complete BGP decision process, versatile import and export filters, route-reflection, and experimental attributes such as redistribution communities. It is easily configurable through a CISCO-like command-line interface. C-BGP has been described in an IEEE Network magazine paper entitled "Modeling the Routing of an Autonomous System with C-BGP" (please refer to this paper when you cite C-BGP). More details on the architecture are also available here.

C-BGP can be used as a research tool to experiment with modified decision processes and additional BGP route attributes. It can also be used by the operator of an ISP network to evaluate the impact of logical and topological changes on the routing tables computed in its routers. Topological changes include links and routers failures. Logical changes include changes in the configuration of the routers such as input/output routing policies or IGP link weights. Thanks to its efficiency, C-BGP can be used on large topologies with sizes of the same order of magnitude than the Internet. For the moment, we mainly use it to study interdomain traffic engineering techniques and to model the network of ISPs.

The original version of C-BGP was written by Bruno Quoitin when he was with the IP Networking Lab, Computer Science and Engineering Department, at Université Catholique de Louvain (UCLouvain), in Belgium. It is now maintained by the Networking Lab at University of Mons (UMONS). It has also been contributed by others (complete list here). C-BGP is written in C language. It is mainly used and tested on Linux and Mac OS X. It has also been used on other platforms such as FreeBSD, Solaris and even under Windows, using the cygwin API. It should compile on most POSIX compliant environment. C-BGP is Open-Source and provided under the LGPL license. This means that it can be freely embedded in a commercial tool. The text of the LGPL license is available here and more information can be obtained from the Free Software Foundation.

Related tools

There are other tools that you might want to consider for experimenting with BGP. Implementations of BGP daemons are available in Zebra, Quagga, XORP and OpenBGPd. Packet-level simulators also partially support BGP: SSFNet, J-Sim and ns-2 with BGP++. It is also possible to use network emulation environments such as IMUNES to run multiple instances of BGP daemons on a single workstation.