1: @node Overview
2: @chapter Overview
3: @cindex Overview
4:
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, IS-IS, 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 and AgentX
11: protocol, Quagga provides routing protocol MIBs (@pxref{SNMP Support}).
12:
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.
18:
19: Quagga is distributed under the @sc{gnu} General Public License.
20:
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
30:
31: @node About Quagga
32: @comment node-name, next, previous, up
33: @section About Quagga
34: @cindex About Quagga
35:
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.
40:
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.
47:
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, IS-IS or BGP.
56:
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.
65:
66: Currently, Quagga supports common unicast routing protocols, that is BGP,
67: OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
68: currently 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
72: TCP/IP routing software package.
73:
74: @node System Architecture
75: @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
82: provides all of the routing protocol functionalities. Quagga takes a
83: different approach. It is made from a collection of several daemons that
84: work together to build the routing table. There may be several
85: protocol-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
90: routing table and for redistribution of routes between different routing
91: protocols, there is a kernel routing table manager @command{zebra} daemon.
92: It is easy to add a new routing protocol daemons to the entire routing
93: system without affecting any other software. You need to run only the
94: protocol daemon associated with routing protocols in use. Thus, user may
95: run a specific daemon and send routing reports to a central routing console.
96:
97: There is no need for these daemons to be running on the same machine. You
98: can even run several same protocol daemons on the same machine. This
99: architecture 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:
113: Quagga System Architecture
114: @end group
115: @end example
116:
117: Multi-process architecture brings extensibility, modularity and
118: maintainability. At the same time it also brings many configuration files
119: and terminal interfaces. Each daemon has it's own configuration file and
120: terminal interface. When you configure a static route, it must be done in
121: @command{zebra} configuration file. When you configure BGP network it must
122: be done in @command{bgpd} configuration file. This can be a very annoying
123: thing. To resolve the problem, Quagga provides integrated user interface
124: shell called @command{vtysh}. @command{vtysh} connects to each daemon with
125: UNIX domain socket and then works as a proxy for user input.
126:
127: Quagga was planned to use multi-threaded mechanism when it runs with a
128: kernel that supports multi-threads. But at the moment, the thread library
129: which comes with @sc{gnu}/Linux or FreeBSD has some problems with running
130: reliable services such as routing software, so we don't use threads at all.
131: Instead we use the @command{select(2)} system call for multiplexing the
132: events.
133:
134: @node Supported Platforms
135: @comment node-name, next, previous, up
136: @section Supported Platforms
137:
138: @cindex Supported platforms
139: @cindex Quagga on other systems
140: @cindex Compatibility with other systems
141: @cindex Operating systems that support Quagga
142:
143: Currently Quagga supports @sc{gnu}/Linux and BSD. Porting Quagga
144: to other platforms is not too difficult as platform dependent code should
145: most be limited to the @command{zebra} daemon. Protocol daemons are mostly
146: platform independent. Please let us know when you find out Quagga runs on a
147: platform which is not listed below.
148:
149: The list of officially supported platforms are listed below. Note that
150: Quagga may run correctly on other platforms, and may run with partial
151: functionality on further platforms.
152:
153: @sp 1
154: @itemize @bullet
155: @item
156: @sc{gnu}/Linux
157: @item
158: FreeBSD
159: @item
160: NetBSD
161: @item
162: OpenBSD
163: @end itemize
164:
165: Versions of these platforms that are older than around 2 years from the point
166: of their original release (in case of @sc{gnu}/Linux, this is since the kernel's
167: release on kernel.org) may need some work. Similarly, the following platforms
168: may work with some effort:
169:
170: @sp 1
171: @itemize @bullet
172: @item
173: Solaris
174: @item
175: Mac OSX
176: @end itemize
177:
178: Also note that, in particular regarding proprietary platforms, compiler
179: and C library choice will affect Quagga. Only recent versions of the
180: following C compilers are well-tested:
181:
182: @sp 1
183: @itemize @bullet
184: @item
185: @sc{gnu}'s GCC
186: @item
187: LLVM's clang
188: @item
189: Intel's ICC
190: @end itemize
191:
192: @node Supported RFCs
193: @comment node-name, next, previous, up
194: @section Supported RFCs
195:
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:
214: @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:
220: @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:
244: @item @asis{RFC3137}
245: @cite{OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin, D. McPherson. June 2001}
246: @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
257: Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
258: J. 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.
265: November 1995.}
266:
267: @item @asis{RFC2741}
268: @cite{Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.}
269:
270: @end table
271:
272: @node How to get Quagga
273: @comment node-name, next, previous, up
274: @section How to get Quagga
275:
276: The official Quagga web-site is located at:
277:
278: @uref{http://www.quagga.net/}
279:
280: and contains further information, as well as links to additional
281: resources.
282:
283: @uref{http://www.quagga.net/,Quagga} is a fork of GNU Zebra, whose
284: web-site is located at:
285:
286: @uref{http://www.zebra.org/}.
287:
288: @node Mailing List
289: @comment node-name, next, previous, up
290: @section Mailing List
291: @cindex How to get in touch with Quagga
292: @cindex Mailing Quagga
293: @cindex Contact information
294: @cindex Mailing lists
295:
296: There is a mailing list for discussions about Quagga. If you have any
297: comments or suggestions to Quagga, please subscribe to:
298:
299: @uref{http://lists.quagga.net/mailman/listinfo/quagga-users}.
300:
301: The @uref{http://www.quagga.net/,,Quagga} site has further information on
302: the available mailing lists, see:
303:
304: @uref{http://www.quagga.net/lists.php}
305:
306: @node Bug Reports
307: @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:
316: If you think you have found a bug, please send a bug report to:
317:
318: @uref{http://bugzilla.quagga.net}
319:
320: When you send a bug report, please be careful about the points below.
321:
322: @itemize @bullet
323: @item
324: Please note what kind of OS you are using. If you use the IPv6 stack
325: please note that as well.
326: @item
327: Please show us the results of @code{netstat -rn} and @code{ifconfig -a}.
328: Information from zebra's VTY command @code{show ip route} will also be
329: helpful.
330: @item
331: Please send your configuration file with the report. If you specify
332: arguments to the configure script please note that too.
333: @end itemize
334:
335: Bug reports are very important for us to improve the quality of Quagga.
336: Quagga is still in the development stage, but please don't hesitate to
337: send a bug report to @uref{http://bugzilla.quagga.net}.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>