blob: 2301c4b7feb492ecceb94a9ffa0a770f83b5a68a [file] [log] [blame]
paul76b89b42004-11-06 17:13:09 +00001@node Overview
paul718e3742002-12-13 20:15:29 +00002@chapter Overview
3@cindex Overview
4
paul76b89b42004-11-06 17:13:09 +00005 @uref{http://www.quagga.net,,Quagga} is a routing software package that
6provides TCP/IP based routing services with routing protocols support such
David Lamparterb0baf072013-01-18 19:11:59 +01007as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (@pxref{Supported
Paul Jakmaf912cb42006-07-27 23:30:16 +00008RFCs}). Quagga also supports special BGP Route Reflector and Route Server
paul76b89b42004-11-06 17:13:09 +00009behavior. In addition to traditional IPv4 routing protocols, Quagga also
Vincent Bernat0ff4b9c2012-05-25 12:04:51 +020010supports IPv6 routing protocols. With SNMP daemon which supports SMUX and AgentX
paul76b89b42004-11-06 17:13:09 +000011protocol, Quagga provides routing protocol MIBs (@pxref{SNMP Support}).
paul718e3742002-12-13 20:15:29 +000012
paul76b89b42004-11-06 17:13:09 +000013 Quagga uses an advanced software architecture to provide you with a high
14quality, multi server routing engine. Quagga has an interactive user
15interface for each routing protocol and supports common client commands.
16Due to this design, you can add new protocol daemons to Quagga easily. You
17can use Quagga library as your program's client user interface.
paul718e3742002-12-13 20:15:29 +000018
paul76b89b42004-11-06 17:13:09 +000019 Quagga is distributed under the @sc{gnu} General Public License.
paul718e3742002-12-13 20:15:29 +000020
21@menu
paul76b89b42004-11-06 17:13:09 +000022* About Quagga:: Basic information about Quagga
paul7190f4e2003-08-12 12:40:20 +000023* System Architecture:: The Quagga system architecture
paul718e3742002-12-13 20:15:29 +000024* Supported Platforms:: Supported platforms and future plans
Paul Jakmaf912cb42006-07-27 23:30:16 +000025* Supported RFCs:: Supported RFCs
paul7190f4e2003-08-12 12:40:20 +000026* How to get Quagga::
paul718e3742002-12-13 20:15:29 +000027* Mailing List:: Mailing list information
28* Bug Reports:: Mail address for bug data
29@end menu
30
paul76b89b42004-11-06 17:13:09 +000031@node About Quagga
paul718e3742002-12-13 20:15:29 +000032@comment node-name, next, previous, up
paul7190f4e2003-08-12 12:40:20 +000033@section About Quagga
34@cindex About Quagga
paul718e3742002-12-13 20:15:29 +000035
paul76b89b42004-11-06 17:13:09 +000036 Today, TCP/IP networks are covering all of the world. The Internet has
37been deployed in many countries, companies, and to the home. When you
38connect to the Internet your packet will pass many routers which have TCP/IP
39routing functionality.
paul718e3742002-12-13 20:15:29 +000040
paul7190f4e2003-08-12 12:40:20 +000041 A system with Quagga installed acts as a dedicated router. With Quagga,
paul76b89b42004-11-06 17:13:09 +000042your machine exchanges routing information with other routers using routing
43protocols. Quagga uses this information to update the kernel routing table
44so that the right data goes to the right place. You can dynamically change
45the configuration and you may view routing table information from the Quagga
46terminal interface.
paul718e3742002-12-13 20:15:29 +000047
paul7190f4e2003-08-12 12:40:20 +000048 Adding to routing protocol support, Quagga can setup interface's flags,
paul76b89b42004-11-06 17:13:09 +000049interface's address, static routes and so on. If you have a small network,
50or a stub network, or xDSL connection, configuring the Quagga routing
51software is very easy. The only thing you have to do is to set up the
52interfaces and put a few commands about static routes and/or default routes.
53If the network is rather large, or if the network structure changes
54frequently, you will want to take advantage of Quagga's dynamic routing
David Lamparterb0baf072013-01-18 19:11:59 +010055protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
paul718e3742002-12-13 20:15:29 +000056
57 Traditionally, UNIX based router configuration is done by
58@command{ifconfig} and @command{route} commands. Status of routing
paul76b89b42004-11-06 17:13:09 +000059table is displayed by @command{netstat} utility. Almost of these commands
60work only if the user has root privileges. Quagga has a different system
61administration method. There are two user modes in Quagga. One is normal
62mode, the other is enable mode. Normal mode user can only view system
63status, enable mode user can change system configuration. This UNIX account
64independent feature will be great help to the router administrator.
paul718e3742002-12-13 20:15:29 +000065
David Lamparterb0baf072013-01-18 19:11:59 +010066 Currently, Quagga supports common unicast routing protocols, that is BGP,
67OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
68currently being prepared for merging. Implementations of BFD and PIM-SSM
69(IPv4) also exist, but are not actively being worked on.
70
71 The ultimate goal of the Quagga project is making a productive, quality, free
72TCP/IP routing software package.
paul718e3742002-12-13 20:15:29 +000073
paul76b89b42004-11-06 17:13:09 +000074@node System Architecture
paul718e3742002-12-13 20:15:29 +000075@comment node-name, next, previous, up
76@section System Architecture
77@cindex System architecture
78@cindex Software architecture
79@cindex Software internals
80
81 Traditional routing software is made as a one process program which
paul7190f4e2003-08-12 12:40:20 +000082provides all of the routing protocol functionalities. Quagga takes a
paul76b89b42004-11-06 17:13:09 +000083different approach. It is made from a collection of several daemons that
84work together to build the routing table. There may be several
paul718e3742002-12-13 20:15:29 +000085protocol-specific routing daemons and zebra the kernel routing manager.
86
87 The @command{ripd} daemon handles the RIP protocol, while
88@command{ospfd} is a daemon which supports OSPF version 2.
89@command{bgpd} supports the BGP-4 protocol. For changing the kernel
90routing table and for redistribution of routes between different routing
paul76b89b42004-11-06 17:13:09 +000091protocols, there is a kernel routing table manager @command{zebra} daemon.
92It is easy to add a new routing protocol daemons to the entire routing
93system without affecting any other software. You need to run only the
94protocol daemon associated with routing protocols in use. Thus, user may
95run a specific daemon and send routing reports to a central routing console.
paul718e3742002-12-13 20:15:29 +000096
paul76b89b42004-11-06 17:13:09 +000097 There is no need for these daemons to be running on the same machine. You
98can even run several same protocol daemons on the same machine. This
paul718e3742002-12-13 20:15:29 +000099architecture creates new possibilities for the routing system.
100
101@example
102@group
103+----+ +----+ +-----+ +-----+
104|bgpd| |ripd| |ospfd| |zebra|
105+----+ +----+ +-----+ +-----+
106 |
107+---------------------------|--+
108| v |
109| UNIX Kernel routing table |
110| |
111+------------------------------+
112
paul7190f4e2003-08-12 12:40:20 +0000113 Quagga System Architecture
paul718e3742002-12-13 20:15:29 +0000114@end group
115@end example
116
Paul Jakmaf912cb42006-07-27 23:30:16 +0000117Multi-process architecture brings extensibility, modularity and
paul76b89b42004-11-06 17:13:09 +0000118maintainability. At the same time it also brings many configuration files
119and terminal interfaces. Each daemon has it's own configuration file and
120terminal interface. When you configure a static route, it must be done in
121@command{zebra} configuration file. When you configure BGP network it must
122be done in @command{bgpd} configuration file. This can be a very annoying
123thing. To resolve the problem, Quagga provides integrated user interface
124shell called @command{vtysh}. @command{vtysh} connects to each daemon with
125UNIX domain socket and then works as a proxy for user input.
paul718e3742002-12-13 20:15:29 +0000126
Paul Jakmaf912cb42006-07-27 23:30:16 +0000127Quagga was planned to use multi-threaded mechanism when it runs with a
paul76b89b42004-11-06 17:13:09 +0000128kernel that supports multi-threads. But at the moment, the thread library
129which comes with @sc{gnu}/Linux or FreeBSD has some problems with running
130reliable services such as routing software, so we don't use threads at all.
131Instead we use the @command{select(2)} system call for multiplexing the
132events.
paul718e3742002-12-13 20:15:29 +0000133
paul76b89b42004-11-06 17:13:09 +0000134@node Supported Platforms
paul718e3742002-12-13 20:15:29 +0000135@comment node-name, next, previous, up
136@section Supported Platforms
137
138@cindex Supported platforms
paul7190f4e2003-08-12 12:40:20 +0000139@cindex Quagga on other systems
paul718e3742002-12-13 20:15:29 +0000140@cindex Compatibility with other systems
paul7190f4e2003-08-12 12:40:20 +0000141@cindex Operating systems that support Quagga
paul718e3742002-12-13 20:15:29 +0000142
David Lamparterb0baf072013-01-18 19:11:59 +0100143Currently Quagga supports @sc{gnu}/Linux and BSD. Porting Quagga
paul76b89b42004-11-06 17:13:09 +0000144to other platforms is not too difficult as platform dependent code should
145most be limited to the @command{zebra} daemon. Protocol daemons are mostly
146platform independent. Please let us know when you find out Quagga runs on a
147platform which is not listed below.
148
Paul Jakmaf912cb42006-07-27 23:30:16 +0000149The list of officially supported platforms are listed below. Note that
paul76b89b42004-11-06 17:13:09 +0000150Quagga may run correctly on other platforms, and may run with partial
151functionality on further platforms.
paul718e3742002-12-13 20:15:29 +0000152
153@sp 1
154@itemize @bullet
155@item
David Lamparterb0baf072013-01-18 19:11:59 +0100156@sc{gnu}/Linux
paul718e3742002-12-13 20:15:29 +0000157@item
David Lamparterb0baf072013-01-18 19:11:59 +0100158FreeBSD
paul718e3742002-12-13 20:15:29 +0000159@item
David Lamparterb0baf072013-01-18 19:11:59 +0100160NetBSD
paul718e3742002-12-13 20:15:29 +0000161@item
David Lamparterb0baf072013-01-18 19:11:59 +0100162OpenBSD
163@end itemize
164
165Versions of these platforms that are older than around 2 years from the point
166of their original release (in case of @sc{gnu}/Linux, this is since the kernel's
167release on kernel.org) may need some work. Similarly, the following platforms
168may work with some effort:
169
170@sp 1
171@itemize @bullet
paul718e3742002-12-13 20:15:29 +0000172@item
David Lamparterb0baf072013-01-18 19:11:59 +0100173Solaris
174@item
175Mac OSX
176@end itemize
177
178Also note that, in particular regarding proprietary platforms, compiler
179and C library choice will affect Quagga. Only recent versions of the
180following C compilers are well-tested:
181
182@sp 1
183@itemize @bullet
184@item
185@sc{gnu}'s GCC
186@item
187LLVM's clang
188@item
189Intel's ICC
paul718e3742002-12-13 20:15:29 +0000190@end itemize
191
Paul Jakmaf912cb42006-07-27 23:30:16 +0000192@node Supported RFCs
paul718e3742002-12-13 20:15:29 +0000193@comment node-name, next, previous, up
Paul Jakmaf912cb42006-07-27 23:30:16 +0000194@section Supported RFCs
paul718e3742002-12-13 20:15:29 +0000195
196 Below is the list of currently supported RFC's.
197
198@table @asis
199@item @asis{RFC1058}
200@cite{Routing Information Protocol. C.L. Hedrick. Jun-01-1988.}
201
202@item @asis{RF2082}
203@cite{RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.}
204
205@item @asis{RFC2453}
206@cite{RIP Version 2. G. Malkin. November 1998.}
207
208@item @asis{RFC2080}
209@cite{RIPng for IPv6. G. Malkin, R. Minnear. January 1997.}
210
211@item @asis{RFC2328}
212@cite{OSPF Version 2. J. Moy. April 1998.}
213
hassoeb3f4632004-04-26 13:22:15 +0000214@item @asis{RFC2370}
215@cite{The OSPF Opaque LSA Option R. Coltun. July 1998.}
216
217@item @asis{RFC3101}
218@cite{The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.}
219
paul718e3742002-12-13 20:15:29 +0000220@item @asis{RFC2740}
221@cite{OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.}
222
223@item @asis{RFC1771}
224@cite{A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.}
225
226@item @asis{RFC1965}
227@cite{Autonomous System Confederations for BGP. P. Traina. June 1996.}
228
229@item @asis{RFC1997}
230@cite{BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.}
231
232@item @asis{RFC2545}
233@cite{Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P. Marques, F. Dupont. March 1999.}
234
235@item @asis{RFC2796}
236@cite{BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R. Chandrasekeran. June 1996.}
237
238@item @asis{RFC2858}
239@cite{Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D. Katz. June 2000.}
240
241@item @asis{RFC2842}
242@cite{Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.}
243
paule5b308d2005-10-29 20:19:49 +0000244@item @asis{RFC3137}
245@cite{OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin, D. McPherson. June 2001}
paul718e3742002-12-13 20:15:29 +0000246@end table
247
248 When SNMP support is enabled, below RFC is also supported.
249
250@table @asis
251
252@item @asis{RFC1227}
253@cite{SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.}
254
255@item @asis{RFC1657}
256@cite{Definitions of Managed Objects for the Fourth Version of the
257Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
258J. Chu, Editor. July 1994.}
259
260@item @asis{RFC1724}
261@cite{RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.}
262
263@item @asis{RFC1850}
264@cite{OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
265November 1995.}
266
Vincent Bernat0ff4b9c2012-05-25 12:04:51 +0200267@item @asis{RFC2741}
268@cite{Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.}
269
paul718e3742002-12-13 20:15:29 +0000270@end table
271
paul76b89b42004-11-06 17:13:09 +0000272@node How to get Quagga
paul718e3742002-12-13 20:15:29 +0000273@comment node-name, next, previous, up
paul7190f4e2003-08-12 12:40:20 +0000274@section How to get Quagga
paul718e3742002-12-13 20:15:29 +0000275
Paul Jakmaf912cb42006-07-27 23:30:16 +0000276The official Quagga web-site is located at:
paul971a4492003-06-20 01:18:07 +0000277
paul76b89b42004-11-06 17:13:09 +0000278@uref{http://www.quagga.net/}
paul971a4492003-06-20 01:18:07 +0000279
Paul Jakmaf912cb42006-07-27 23:30:16 +0000280and contains further information, as well as links to additional
281resources.
282
283@uref{http://www.quagga.net/,Quagga} is a fork of GNU Zebra, whose
284web-site is located at:
285
286@uref{http://www.zebra.org/}.
paul718e3742002-12-13 20:15:29 +0000287
paul76b89b42004-11-06 17:13:09 +0000288@node Mailing List
paul718e3742002-12-13 20:15:29 +0000289@comment node-name, next, previous, up
290@section Mailing List
paul7190f4e2003-08-12 12:40:20 +0000291@cindex How to get in touch with Quagga
292@cindex Mailing Quagga
paul718e3742002-12-13 20:15:29 +0000293@cindex Contact information
294@cindex Mailing lists
295
paul76b89b42004-11-06 17:13:09 +0000296There is a mailing list for discussions about Quagga. If you have any
297comments or suggestions to Quagga, please subscribe to:
paul718e3742002-12-13 20:15:29 +0000298
paul76b89b42004-11-06 17:13:09 +0000299@uref{http://lists.quagga.net/mailman/listinfo/quagga-users}.
paul971a4492003-06-20 01:18:07 +0000300
paul76b89b42004-11-06 17:13:09 +0000301The @uref{http://www.quagga.net/,,Quagga} site has further information on
302the available mailing lists, see:
paul971a4492003-06-20 01:18:07 +0000303
paul76b89b42004-11-06 17:13:09 +0000304 @uref{http://www.quagga.net/lists.php}
paul971a4492003-06-20 01:18:07 +0000305
paul76b89b42004-11-06 17:13:09 +0000306@node Bug Reports
paul718e3742002-12-13 20:15:29 +0000307@section Bug Reports
308
309@cindex Bug Reports
310@cindex Bug hunting
311@cindex Found a bug?
312@cindex Reporting bugs
313@cindex Reporting software errors
314@cindex Errors in the software
315
paul6a22b1f2004-11-07 19:39:13 +0000316If you think you have found a bug, please send a bug report to:
317
318@uref{http://bugzilla.quagga.net}
319
320When you send a bug report, please be careful about the points below.
paul718e3742002-12-13 20:15:29 +0000321
322@itemize @bullet
323@item
324Please note what kind of OS you are using. If you use the IPv6 stack
325please note that as well.
326@item
327Please show us the results of @code{netstat -rn} and @code{ifconfig -a}.
328Information from zebra's VTY command @code{show ip route} will also be
329helpful.
330@item
331Please send your configuration file with the report. If you specify
332arguments to the configure script please note that too.
333@end itemize
334
paul7190f4e2003-08-12 12:40:20 +0000335 Bug reports are very important for us to improve the quality of Quagga.
336Quagga is still in the development stage, but please don't hesitate to
paul76b89b42004-11-06 17:13:09 +0000337send a bug report to @uref{http://bugzilla.quagga.net}.