@node Overview, Installation, Top, Top
@comment  node-name,  next,  previous,  up
@chapter Overview
@cindex Overview

  Quagga is a routing software package that provides TCP/IP based
routing services with routing protocols support such as RIPv1, RIPv2,
RIPng, OSPFv2, OSPFv3, BGP-4, and BGP-4+ (@pxref{Supported RFC}).
Quagga also supports special BGP Route Reflector and Route Server
behavior.  In addition to traditional IPv4 routing protocols, Quagga
also supports IPv6 routing protocols.  With SNMP daemon which supports
SMUX protocol, Quagga provides routing protocol MIBs (@pxref{SNMP
Support}).

  Quagga uses an advanced software architecture to provide you with a
high quality, multi server routing engine.  Quagga has an interactive
user interface for each routing protocol and supports common client
commands.  Due to this design, you can add new protocol daemons to Quagga
easily.  You can use Quagga library as your program's client user
interface.

  Zebra is distributed under the @sc{gnu} General Public License.

@menu
* About Quagga::                 Basic information about Quagga
* System Architecture::         The Quagga system architecture
* Supported Platforms::         Supported platforms and future plans
* Supported RFC::               Supported RFCs
* How to get Quagga::            
* Mailing List::                Mailing list information
* Bug Reports::                 Mail address for bug data
@end menu

@node About Quagga, System Architecture, Overview, Overview
@comment  node-name,  next,  previous,  up
@section About Quagga
@cindex About Quagga

  Today, TCP/IP networks are covering all of the world.  The Internet
has been deployed in many countries, companies, and to the home.  When
you connect to the Internet your packet will pass many routers which
have TCP/IP routing functionality.

  A system with Quagga installed acts as a dedicated router.  With Quagga,
your machine exchanges routing information with other routers using
routing protocols.  Quagga uses this information to update the kernel
routing table so that the right data goes to the right place.  You can
dynamically change the configuration and you may view routing table
information from the Quagga terminal interface.

  Adding to routing protocol support, Quagga can setup interface's flags,
interface's address, static routes and so on.  If you have a small
network, or a stub network, or xDSL connection, configuring the Quagga
routing software is very easy.  The only thing you have to do is to set
up the interfaces and put a few commands about static routes and/or
default routes.  If the network is rather large, or if the network
structure changes frequently, you will want to take advantage of Quagga's
dynamic routing protocol support for protocols such as RIP, OSPF or BGP.
Quagga is with you.

  Traditionally, UNIX based router configuration is done by
@command{ifconfig} and @command{route} commands.  Status of routing
table is displayed by @command{netstat} utility.  Almost of these
commands work only if the user has root privileges.  Quagga has a different
system administration method.  There are two user modes in Quagga.  One is
normal mode, the other is enable mode.  Normal mode user can only view
system status, enable mode user can change system configuration.  This
UNIX account independent feature will be great help to the router
administrator.

  Currently, Quagga supports common unicast routing protocols.  Multicast
routing protocols such as BGMP, PIM-SM, PIM-DM may be supported in
Quagga 2.0.  MPLS support is going on.  In the future, TCP/IP filtering
control, QoS control, diffserv configuration will be added to Quagga.
Quagga project's final goal is making a productive, quality free TCP/IP
routing software.

@node System Architecture, Supported Platforms, About Quagga, Overview
@comment  node-name,  next,  previous,  up
@section System Architecture
@cindex System architecture
@cindex Software architecture
@cindex Software internals

  Traditional routing software is made as a one process program which
provides all of the routing protocol functionalities.  Quagga takes a
different approach.  It is made from a collection of several daemons
that work together to build the routing table.  There may be several
protocol-specific routing daemons and zebra the kernel routing manager.

  The @command{ripd} daemon handles the RIP protocol, while
@command{ospfd} is a daemon which supports OSPF version 2.
@command{bgpd} supports the BGP-4 protocol.  For changing the kernel
routing table and for redistribution of routes between different routing
protocols, there is a kernel routing table manager @command{zebra}
daemon.  It is easy to add a new routing protocol daemons to the entire
routing system without affecting any other software.  You need to run only
the protocol daemon associated with routing protocols in use.  Thus,
user may run a specific daemon and send routing reports to a central
routing console.

  There is no need for these daemons to be running on the same machine.
You can even run several same protocol daemons on the same machine.  This
architecture creates new possibilities for the routing system.

@example
@group
+----+  +----+  +-----+  +-----+
|bgpd|  |ripd|  |ospfd|  |zebra|
+----+  +----+  +-----+  +-----+
                            |
+---------------------------|--+
|                           v  |
|  UNIX Kernel  routing table  |
|                              |
+------------------------------+

    Quagga System Architecture
@end group
@end example

  Multi-process architecture brings extensibility, modularity and
maintainability.  At the same time it also brings many configuration
files and terminal interfaces.  Each daemon has it's own configuration
file and terminal interface.  When you configure a static route, it must
be done in @command{zebra} configuration file.  When you configure BGP
network it must be done in @command{bgpd} configuration file.  This can be a
very annoying thing.  To resolve the problem, Quagga provides integrated
user interface shell called @command{vtysh}.  @command{vtysh} connects to
each daemon with UNIX domain socket and then works as a proxy for user input.

  Quagga was planned to use multi-threaded mechanism when it runs with a
kernel that supports multi-threads.  But at the moment, the thread
library which comes with @sc{gnu}/Linux or FreeBSD has some problems with
running reliable services such as routing software, so we don't use
threads at all.  Instead we use the @command{select(2)} system call for
multiplexing the events.

  When @command{zebra} runs under a @sc{gnu} Hurd kernel it will act as a
kernel routing table itself.  Under @sc{gnu} Hurd, all TCP/IP services are
provided by user processes called @command{pfinet}.  Quagga will provide
all the routing selection mechanisms for the process.  This feature will
be implemented when @sc{gnu} Hurd becomes stable.

@node Supported Platforms, Supported RFC, System Architecture, Overview
@comment  node-name,  next,  previous,  up
@section Supported Platforms

@cindex Supported platforms
@cindex Quagga on other systems
@cindex Compatibility with other systems
@cindex Operating systems that support Quagga

  Currently Quagga supports @sc{gnu}/Linux, BSD and Solaris.  Below is a list
of OS versions on which Quagga runs.  Porting Quagga to other platforms is
not so too difficult.  Platform dependent codes exist only in
@command{zebra} daemon.  Protocol daemons are platform independent.
Please let us know when you find out Quagga runs on a platform which is not
listed below.

@sp 1
@itemize @bullet
@item
GNU/Linux 2.0.37
@item
GNU/Linux 2.2.x and higher
@item
FreeBSD 2.2.8
@item
FreeBSD 3.x
@item
FreeBSD 4.x
@item
NetBSD 1.4
@item
OpenBSD 2.5
@item
Solaris 2.6
@item
Solaris 7
@end itemize

@sp 1
  Some IPv6 stacks are in development.  Quagga supports following IPv6
stacks.  For BSD, we recommend KAME IPv6 stack.  Solaris IPv6 stack is
not yet supported.
@sp 1
@itemize @bullet
@item
Linux IPv6 stack for GNU/Linux 2.2.x and higher.
@item
KAME IPv6 stack for BSD.
@item
INRIA IPv6 stack for BSD.
@end itemize

@node Supported RFC, How to get Quagga, Supported Platforms, Overview
@comment  node-name,  next,  previous,  up
@section Supported RFC

  Below is the list of currently supported RFC's.

@table @asis
@item @asis{RFC1058}
@cite{Routing Information Protocol. C.L. Hedrick. Jun-01-1988.}

@item @asis{RF2082}
@cite{RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.}

@item @asis{RFC2453}
@cite{RIP Version 2. G. Malkin. November 1998.}

@item @asis{RFC2080}
@cite{RIPng for IPv6. G. Malkin, R. Minnear. January 1997.}

@item @asis{RFC2328}
@cite{OSPF Version 2. J. Moy. April 1998.}

@item @asis{RFC2370}
@cite{The OSPF Opaque LSA Option R. Coltun. July 1998.}

@item @asis{RFC3101}
@cite{The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.}

@item @asis{RFC2740}
@cite{OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.}

@item @asis{RFC1771} 
@cite{A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.}

@item @asis{RFC1965}
@cite{Autonomous System Confederations for BGP. P. Traina. June 1996.}

@item @asis{RFC1997}
@cite{BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.}

@item @asis{RFC2545}
@cite{Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P. Marques, F. Dupont. March 1999.}

@item @asis{RFC2796}
@cite{BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R. Chandrasekeran. June 1996.}

@item @asis{RFC2858}
@cite{Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D. Katz. June 2000.}

@item @asis{RFC2842}
@cite{Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.}

@end table

  When SNMP support is enabled, below RFC is also supported.

@table @asis

@item @asis{RFC1227}
@cite{SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.}

@item @asis{RFC1657}
@cite{Definitions of Managed Objects for the Fourth Version of the
Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
J. Chu, Editor. July 1994.}

@item @asis{RFC1724}
@cite{RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.}

@item @asis{RFC1850}
@cite{OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
November 1995.}

@end table

@node How to get Quagga, Mailing List, Supported RFC, Overview
@comment  node-name,  next,  previous,  up
@section How to get Quagga

  Quagga is still beta software and there is no officially released
version. Once Quagga is released you can get it from @sc{gnu} FTP
site and its mirror sites.  We are planning Quagga-1.0 as the first
released version.

  Zebra's official web page is located at:

@url{http://www.gnu.org/software/zebra/zebra.html}.

  The original Zebra web site is located at: 

@url{http://www.zebra.org/}.

  As of this writing, development by zebra.org on Zebra has slowed down.
Some work is being done by third-parties to try maintain bug-fixes and
enhancements to the current Zebra code-base, which has resulted in a fork of
Zebra called Quagga, see:

@url{http://www.quagga.net/}.

for further information, as well as links to additional zebra resources.

@node Mailing List, Bug Reports, How to get Quagga, Overview
@comment  node-name,  next,  previous,  up
@section Mailing List
@cindex How to get in touch with Quagga
@cindex Mailing Quagga
@cindex Contact information
@cindex Mailing lists

  There is a mailing list for discussions about Quagga.  If you have any
comments or suggestions to Quagga, please subscribe to
@url{http://lists.quagga.net/mailman/listinfo/quagga-users}.

  There is an additional mailing list, @email{znog@@dishone.st,ZNOG} for
general discussion of zebra related issues and network operation. To
subscribe send an email to @email{znog-subscribe@@dishone.st} with a message
body that includes only:

@quotation
subscribe znog
@end quotation

 To unsubscribe, send an email to @email{znog-unsubscribe@@dishone.st}
with a message body that includes only:

@quotation
unsubscribe znog
@end quotation

 Alternatively, you may use the web interface located at
@url{http://www.dishone.st/mailman/listinfo/znog}. Links to archives of the
znog list are available at this URL.

@node Bug Reports,  , Mailing List, Overview
@comment  node-name,  next,  previous,  up
@section Bug Reports

@cindex Bug Reports
@cindex Bug hunting
@cindex Found a bug?
@cindex Reporting bugs
@cindex Reporting software errors
@cindex Errors in the software

  If you think you have found a bug, please send a bug report to
@url{http://bugzilla.quagga.net}.  When you send a bug report, please be
careful about the points below.

@itemize @bullet
@item 
Please note what kind of OS you are using.  If you use the IPv6 stack
please note that as well.
@item
Please show us the results of @code{netstat -rn} and @code{ifconfig -a}.
Information from zebra's VTY command @code{show ip route} will also be
helpful.
@item
Please send your configuration file with the report.  If you specify
arguments to the configure script please note that too.
@end itemize

  Bug reports are very important for us to improve the quality of Quagga.
Quagga is still in the development stage, but please don't hesitate to
send a bug report to @url{http://bugzilla.quagga.net}.

