• No results found

Open source BGP-4 implementations

4.5 Implementation alternatives

4.5.2 Open source BGP-4 implementations

In order to implement the proof-of-concept of the routing architecture I propose, I had two possibilities:

1. implement BGP-4 from scratch. This would have meant a new development with a significant amount in debugging in order to provide a solid implementation that would not falsify the results.

2. reuse an existing implementation. For this purpose, there are different open source router implementations that provide implementations of the BGP-4 pro- tocol, which have been proven in real-word deployments.

The objective of my work is to implement an architecture that uses BGP-4 in a new way, in order to reduce the routing table size. It has to be evolutionary and backwards compatible. Therefore it was not necessary to re-implement BGP-4 from scratch, but rather add the required features to an existing implementation.

Following implementations were available when I started my work:

4.5.2.1 Merit’s Multi-threaded Routing Toolkit

Merit’s Multi-threaded Routing Toolkit [78] was one of the first implementations of a routing protocol suite that could be executed on off-the-shelf equipment. Development ceased in the early 2000’s and it’s presence in the Web disappeared 2010. The most significant and lasting result of this effort is the MRT binary format specification, which is maintained and enhanced by the Global Routing Working Group (GROW) of the IETF.

4.5.2.2 Zebra

Zebra [82] is an open-source implementation of a router supporting different routing protocols like RIP [144], OSPF [24] and BGP-4. This routing suite uses a command-line interface that is inspired by Cisco Systems’ command-line interface. It is implemented using the C programming language. The last stable version of the source code was released September of 2005.

4. Related work

The Zebra routing suite is based on a central daemon (zebra) that communicates with different daemons that implement routing protocols on one side and with the kernel routing tables. The communication with the routing daemons is based on a simple protocol, known as the Zebra protocol [145]. The interaction with the kernel routing tables is implemented with the Netlink protocol. Figure 4.2 shows a block diagram of the different components in the Zebra routing protocol suite.

Zebra protocol

bgpd (BGP-4)

netlink

L IN UX K e rne l sp ace

Q

u

a

gg

a

R

o

utin

g

S

u

ite

zebrad:

handles interaction of RIBs and

uses netlink to communicate

with Kernel routing tables

Standard Kernel

routing table

L IN UX U ser spa ce

R

ou

ti

n

g d

ae

m

o

ns

ripd (RIPv2)

ospfd (OSPF)

...

Figure 4.2: High-Level View of the Zebra/Quagga routing protocol suite on deployed on a Linux platform

4.5. Implementation alternatives

4.5.2.3 Quagga

Quagga [83] is a fork of the Zebra routing suite. This project is currently active and has an extended base of supported routing protocols. It has an active community of main- tainers and developers who correct implementation errors. This code base is deployed in many routers in the Internet, and runs on Solaris, BSD and Linux based Operating Systems.

4.5.2.4 OpenBGPD

Zebra and Quagga have been mainly developed by the Linux and Solaris communities and are licensed under the GPL license. This license is incompatible with the OpenBSD operating system. A community of programmers developed a BGP-4 routing daemon with free licensing and stressing security and robustness. This development can be downloaded from the OpenBGPD [146] project’s website. This daemon is an indepen- dent effort, i.e., no routing protocol suite, although the companion project OpenOSPF, also available from the OpenBGPD site, is developing an OSPF implementation under the same model.

4.5.2.5 XORP

The eXtensible Open Router Platform [147] is another project that is developing a router platform that can run on commodity hardware over a number of Operating Systems. It implements additional functionality like GRE tunnelling [103]. This routing suite has GPL licensing and provides a command-line interface akin to the JunOS-command line interface (CLI) [148].

4.5.2.6 The Bird Internet Routing Daemon

The Bird Internet Routing Daemon [149] is another Linux-oriented routing protocol suite developed by the Charles University in Prague, Czech Republic. It implements multiple routing tables and has a command-line interface akin to the JUNOS CLI. This development started 2005 and was dormant for about 4 years. The development activity ramped up after I had already implemented a first working prototype of my parallel routing architecture.

4.5.2.7 Selection criteria

When I planned the development, I was looking for an open source project that was alive, provided a reliable BGP-4 implementation in a code base that could be executed on a Linux environment. Table 4.2 shows the different strengths and weaknesses of the examined BGP-4 implementations. Based on this table, and due to my experience in operating Cisco network equipment, I finally chose to use Quagga.

4. Related work

Table 4.2: Comparison between the different routing suites

Routing Suite Strengths Weaknesses

MRT Very simple code Incomplete BGP-4

implementation Old code base Abandoned project

Zebra Complete BGP-4 im-

plementation

Closed source

Well-known develop- ment environment Cisco CLI

Quagga Complete BGP-4 im-

plementation

Live project, Open Source

Well-known environ- ment

Cisco CLI

OpenBGPD Stable code Incomplete implemen-

tation

Linux support Focusing on FreeBSD Some experience

XORP Apparently feature

complete

Unknown environ- ment

Live project, Open Source

Juniper CLI

BIRD Apparently feature

complete

Unknown environ- ment

Live project, Open Source

Juniper CLI