Annotation of embedaddon/quagga/doc/overview.texi, revision 1.1.1.2

1.1       misho       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
1.1.1.2 ! misho       7: as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (@pxref{Supported
1.1       misho       8: RFCs}). Quagga also supports special BGP Route Reflector and Route Server
                      9: behavior.  In addition to traditional IPv4 routing protocols, Quagga also
1.1.1.2 ! misho      10: supports IPv6 routing protocols.  With SNMP daemon which supports SMUX and AgentX
1.1       misho      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
1.1.1.2 ! misho      55: protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
1.1       misho      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: 
1.1.1.2 ! misho      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.
1.1       misho      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: 
1.1.1.2 ! misho     143: Currently Quagga supports @sc{gnu}/Linux and BSD. Porting Quagga
1.1       misho     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
1.1.1.2 ! misho     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
1.1       misho     174: @item
1.1.1.2 ! misho     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
1.1       misho     184: @item
1.1.1.2 ! misho     185: @sc{gnu}'s GCC
1.1       misho     186: @item
1.1.1.2 ! misho     187: LLVM's clang
1.1       misho     188: @item
1.1.1.2 ! misho     189: Intel's ICC
1.1       misho     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: 
1.1.1.2 ! misho     267: @item @asis{RFC2741}
        !           268: @cite{Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.}
        !           269: 
1.1       misho     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>