[cleanup] Convert XMALLOC/memset to XCALLOC
[jleu-quagga.git] / doc / overview.texi
blob435834b714b2c9c5c88e350f757403d5c3db63d0
1 @node Overview
2 @chapter Overview
3 @cindex Overview
5   @uref{http://www.quagga.net,,Quagga} is a routing software package that
6 provides TCP/IP based routing services with routing protocols support such
7 as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP-4, and BGP-4+ (@pxref{Supported
8 RFCs}). Quagga also supports special BGP Route Reflector and Route Server
9 behavior.  In addition to traditional IPv4 routing protocols, Quagga also
10 supports IPv6 routing protocols.  With SNMP daemon which supports SMUX
11 protocol, Quagga provides routing protocol MIBs (@pxref{SNMP Support}).
13   Quagga uses an advanced software architecture to provide you with a high
14 quality, multi server routing engine. Quagga has an interactive user
15 interface for each routing protocol and supports common client commands. 
16 Due to this design, you can add new protocol daemons to Quagga easily.  You
17 can use Quagga library as your program's client user interface.
19   Quagga is distributed under the @sc{gnu} General Public License.
21 @menu
22 * About Quagga::                Basic information about Quagga
23 * System Architecture::         The Quagga system architecture
24 * Supported Platforms::         Supported platforms and future plans
25 * Supported RFCs::               Supported RFCs
26 * How to get Quagga::            
27 * Mailing List::                Mailing list information
28 * Bug Reports::                 Mail address for bug data
29 @end menu
31 @node About Quagga
32 @comment  node-name,  next,  previous,  up
33 @section About Quagga
34 @cindex About Quagga
36   Today, TCP/IP networks are covering all of the world.  The Internet has
37 been deployed in many countries, companies, and to the home.  When you
38 connect to the Internet your packet will pass many routers which have TCP/IP
39 routing functionality.
41   A system with Quagga installed acts as a dedicated router.  With Quagga,
42 your machine exchanges routing information with other routers using routing
43 protocols.  Quagga uses this information to update the kernel routing table
44 so that the right data goes to the right place.  You can dynamically change
45 the configuration and you may view routing table information from the Quagga
46 terminal interface.
48   Adding to routing protocol support, Quagga can setup interface's flags,
49 interface's address, static routes and so on.  If you have a small network,
50 or a stub network, or xDSL connection, configuring the Quagga routing
51 software is very easy.  The only thing you have to do is to set up the
52 interfaces and put a few commands about static routes and/or default routes. 
53 If the network is rather large, or if the network structure changes
54 frequently, you will want to take advantage of Quagga's dynamic routing
55 protocol support for protocols such as RIP, OSPF or BGP.
57   Traditionally, UNIX based router configuration is done by
58 @command{ifconfig} and @command{route} commands.  Status of routing
59 table is displayed by @command{netstat} utility.  Almost of these commands
60 work only if the user has root privileges.  Quagga has a different system
61 administration method.  There are two user modes in Quagga.  One is normal
62 mode, the other is enable mode.  Normal mode user can only view system
63 status, enable mode user can change system configuration.  This UNIX account
64 independent feature will be great help to the router administrator.
66   Currently, Quagga supports common unicast routing protocols.  Multicast
67 routing protocols such as BGMP, PIM-SM, PIM-DM may be supported in Quagga
68 2.0.  MPLS support is going on.  In the future, TCP/IP filtering control,
69 QoS control, diffserv configuration will be added to Quagga. Quagga
70 project's final goal is making a productive, quality, free TCP/IP routing
71 software.
73 @node System Architecture
74 @comment  node-name,  next,  previous,  up
75 @section System Architecture
76 @cindex System architecture
77 @cindex Software architecture
78 @cindex Software internals
80   Traditional routing software is made as a one process program which
81 provides all of the routing protocol functionalities.  Quagga takes a
82 different approach.  It is made from a collection of several daemons that
83 work together to build the routing table.  There may be several
84 protocol-specific routing daemons and zebra the kernel routing manager.
86   The @command{ripd} daemon handles the RIP protocol, while
87 @command{ospfd} is a daemon which supports OSPF version 2.
88 @command{bgpd} supports the BGP-4 protocol.  For changing the kernel
89 routing table and for redistribution of routes between different routing
90 protocols, there is a kernel routing table manager @command{zebra} daemon. 
91 It is easy to add a new routing protocol daemons to the entire routing
92 system without affecting any other software.  You need to run only the
93 protocol daemon associated with routing protocols in use.  Thus, user may
94 run a specific daemon and send routing reports to a central routing console.
96   There is no need for these daemons to be running on the same machine. You
97 can even run several same protocol daemons on the same machine.  This
98 architecture creates new possibilities for the routing system.
100 @example
101 @group
102 +----+  +----+  +-----+  +-----+
103 |bgpd|  |ripd|  |ospfd|  |zebra|
104 +----+  +----+  +-----+  +-----+
105                             |
106 +---------------------------|--+
107 |                           v  |
108 |  UNIX Kernel  routing table  |
109 |                              |
110 +------------------------------+
112     Quagga System Architecture
113 @end group
114 @end example
116 Multi-process architecture brings extensibility, modularity and
117 maintainability.  At the same time it also brings many configuration files
118 and terminal interfaces.  Each daemon has it's own configuration file and
119 terminal interface.  When you configure a static route, it must be done in
120 @command{zebra} configuration file.  When you configure BGP network it must
121 be done in @command{bgpd} configuration file.  This can be a very annoying
122 thing.  To resolve the problem, Quagga provides integrated user interface
123 shell called @command{vtysh}.  @command{vtysh} connects to each daemon with
124 UNIX domain socket and then works as a proxy for user input.
126 Quagga was planned to use multi-threaded mechanism when it runs with a
127 kernel that supports multi-threads.  But at the moment, the thread library
128 which comes with @sc{gnu}/Linux or FreeBSD has some problems with running
129 reliable services such as routing software, so we don't use threads at all. 
130 Instead we use the @command{select(2)} system call for multiplexing the
131 events.
133 @node Supported Platforms
134 @comment  node-name,  next,  previous,  up
135 @section Supported Platforms
137 @cindex Supported platforms
138 @cindex Quagga on other systems
139 @cindex Compatibility with other systems
140 @cindex Operating systems that support Quagga
142 Currently Quagga supports @sc{gnu}/Linux, BSD and Solaris. Porting Quagga
143 to other platforms is not too difficult as platform dependent code should
144 most be limited to the @command{zebra} daemon.  Protocol daemons are mostly
145 platform independent. Please let us know when you find out Quagga runs on a
146 platform which is not listed below.
148 The list of officially supported platforms are listed below. Note that
149 Quagga may run correctly on other platforms, and may run with partial
150 functionality on further platforms.
152 @sp 1
153 @itemize @bullet
154 @item
155 @sc{gnu}/Linux 2.4.x and higher
156 @item
157 FreeBSD 4.x and higher
158 @item
159 NetBSD 1.6 and higher
160 @item
161 OpenBSD 2.5 and higher
162 @item
163 Solaris 8 and higher
164 @end itemize
166 @node Supported RFCs
167 @comment  node-name,  next,  previous,  up
168 @section Supported RFCs
170   Below is the list of currently supported RFC's.
172 @table @asis
173 @item @asis{RFC1058}
174 @cite{Routing Information Protocol. C.L. Hedrick. Jun-01-1988.}
176 @item @asis{RF2082}
177 @cite{RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.}
179 @item @asis{RFC2453}
180 @cite{RIP Version 2. G. Malkin. November 1998.}
182 @item @asis{RFC2080}
183 @cite{RIPng for IPv6. G. Malkin, R. Minnear. January 1997.}
185 @item @asis{RFC2328}
186 @cite{OSPF Version 2. J. Moy. April 1998.}
188 @item @asis{RFC2370}
189 @cite{The OSPF Opaque LSA Option R. Coltun. July 1998.}
191 @item @asis{RFC3101}
192 @cite{The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.}
194 @item @asis{RFC2740}
195 @cite{OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.}
197 @item @asis{RFC1771} 
198 @cite{A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.}
200 @item @asis{RFC1965}
201 @cite{Autonomous System Confederations for BGP. P. Traina. June 1996.}
203 @item @asis{RFC1997}
204 @cite{BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.}
206 @item @asis{RFC2545}
207 @cite{Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P. Marques, F. Dupont. March 1999.}
209 @item @asis{RFC2796}
210 @cite{BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R. Chandrasekeran. June 1996.}
212 @item @asis{RFC2858}
213 @cite{Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D. Katz. June 2000.}
215 @item @asis{RFC2842}
216 @cite{Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.}
218 @item @asis{RFC3137}
219 @cite{OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin, D. McPherson. June 2001}
220 @end table
222   When SNMP support is enabled, below RFC is also supported.
224 @table @asis
226 @item @asis{RFC1227}
227 @cite{SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.}
229 @item @asis{RFC1657}
230 @cite{Definitions of Managed Objects for the Fourth Version of the
231 Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
232 J. Chu, Editor. July 1994.}
234 @item @asis{RFC1724}
235 @cite{RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.}
237 @item @asis{RFC1850}
238 @cite{OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
239 November 1995.}
241 @end table
243 @node How to get Quagga
244 @comment  node-name,  next,  previous,  up
245 @section How to get Quagga
247 The official Quagga web-site is located at:
249 @uref{http://www.quagga.net/}
251 and contains further information, as well as links to additional
252 resources. 
254 @uref{http://www.quagga.net/,Quagga} is a fork of GNU Zebra, whose
255 web-site is located at:
257 @uref{http://www.zebra.org/}.
259 @node Mailing List
260 @comment  node-name,  next,  previous,  up
261 @section Mailing List
262 @cindex How to get in touch with Quagga
263 @cindex Mailing Quagga
264 @cindex Contact information
265 @cindex Mailing lists
267 There is a mailing list for discussions about Quagga.  If you have any
268 comments or suggestions to Quagga, please subscribe to:
270 @uref{http://lists.quagga.net/mailman/listinfo/quagga-users}.
272 The @uref{http://www.quagga.net/,,Quagga} site has further information on
273 the available mailing lists, see:
275         @uref{http://www.quagga.net/lists.php}
277 @node Bug Reports
278 @section Bug Reports
280 @cindex Bug Reports
281 @cindex Bug hunting
282 @cindex Found a bug?
283 @cindex Reporting bugs
284 @cindex Reporting software errors
285 @cindex Errors in the software
287 If you think you have found a bug, please send a bug report to:
289 @uref{http://bugzilla.quagga.net}
291 When you send a bug report, please be careful about the points below.
293 @itemize @bullet
294 @item 
295 Please note what kind of OS you are using.  If you use the IPv6 stack
296 please note that as well.
297 @item
298 Please show us the results of @code{netstat -rn} and @code{ifconfig -a}.
299 Information from zebra's VTY command @code{show ip route} will also be
300 helpful.
301 @item
302 Please send your configuration file with the report.  If you specify
303 arguments to the configure script please note that too.
304 @end itemize
306   Bug reports are very important for us to improve the quality of Quagga.
307 Quagga is still in the development stage, but please don't hesitate to
308 send a bug report to @uref{http://bugzilla.quagga.net}.