Quagga is a routing software suite, providing implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. Quagga is a fork of GNU Zebra which was developed by Kunihiro Ishiguro. The Quagga tree aims to build a more involved community around Quagga than the current centralised model of GNU Zebra.
The Quagga architecture consists of a core daemon, zebra, which acts as an abstraction layer to the underlying Unix kernel and presents the Zserv API over a Unix or TCP stream to Quagga clients. It is these Zserv clients which typically implement a routing protocol and communicate routing updates to the zebra daemon. Existing Zserv implementations are:
|zebra||- kernel interface, static routes, zserv server|
|ripd||ripngd||- RIPv1/RIPv2 for IPv4 and RIPng for IPv6|
|ospfd||ospf6d||- OSPFv2 and OSPFv3|
|bgpd||- BGPv4+ (including address family support for multicast and IPv6)|
|isisd||- IS-IS with support for IPv4 and IPv6|
|externally, not part of Quagga package:|
|olsrd||- OLSR wireless mesh routing through a plugin for olsrd|
|ldpd||- MPLS Label Distribution Protocol (forked from OpenBSD ldpd)|
|bfdd||- Bidirectional Forwarding Detection|
Support for OSPFv3 and IS-IS is various beta states currently; IS-IS for IPv4 is believed to be usable while OSPFv3 and IS-IS for IPv6 have known issues.
Additionally, the Quagga architecture has a rich development library to facilitate the implementation of protocol/client daemons, coherent in configuration and administrative behaviour.
Quagga daemons are each configurable via a network accessible CLI (called a 'vty'). The CLI follows a style similar to that of other routing software. There is an additional tool included with Quagga called 'vtysh', which acts as a single cohesive front-end to all the daemons, allowing one to administer nearly all aspects of the various Quagga daemons in one place.