overview.texi 12 KB

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