mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-10-31 07:10:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			389 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			389 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _overview:
 | |
| 
 | |
| ********
 | |
| Overview
 | |
| ********
 | |
| 
 | |
| `FRR`_ is a routing software package that provides TCP/IP based routing
 | |
| services with routing protocols support such as BGP, RIP, OSPF, IS-IS and more
 | |
| (see :ref:`supported-protocols`). FRR also supports
 | |
| special BGP Route Reflector and Route Server behavior.  In addition to
 | |
| traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
 | |
| With an SNMP daemon that supports the AgentX protocol, FRR provides routing
 | |
| protocol MIB read-only access (:ref:`snmp-support`).
 | |
| 
 | |
| FRR uses an advanced software architecture to provide you with a high quality,
 | |
| multi server routing engine. FRR has an interactive user interface for each
 | |
| routing protocol and supports common client commands.  Due to this design, you
 | |
| can add new protocol daemons to FRR easily.  You can use FRR library as your
 | |
| program's client user interface.
 | |
| 
 | |
| FRR is distributed under the GNU General Public License.
 | |
| 
 | |
| FRR is a fork of `Quagga <http://www.quagga.net/>`_.
 | |
| 
 | |
| .. _about-frr:
 | |
| 
 | |
| About FRR
 | |
| =========
 | |
| 
 | |
| Today, TCP/IP networks are covering all of the world.  The Internet has been
 | |
| deployed in many countries, companies, and to the home.  When you connect to
 | |
| the Internet your packet will pass many routers which have TCP/IP routing
 | |
| functionality.
 | |
| 
 | |
| A system with FRR installed acts as a dedicated router.  With FRR, your machine
 | |
| exchanges routing information with other routers using routing protocols.  FRR
 | |
| uses this information to update the kernel routing table so that the right data
 | |
| goes to the right place.  You can dynamically change the configuration and you
 | |
| may view routing table information from the FRR terminal interface.
 | |
| 
 | |
| Adding to routing protocol support, FRR can setup interface's flags,
 | |
| interface's address, static routes and so on.  If you have a small network, or
 | |
| a stub network, or xDSL connection, configuring the FRR routing software is
 | |
| very easy.  The only thing you have to do is to set up the interfaces and put a
 | |
| few commands about static routes and/or default routes.  If the network is
 | |
| rather large, or if the network structure changes frequently, you will want to
 | |
| take advantage of FRR's dynamic routing protocol support for protocols such as
 | |
| RIP, OSPF, IS-IS or BGP.
 | |
| 
 | |
| Traditionally, UNIX based router configuration is done by *ifconfig* and
 | |
| *route* commands.  Status of routing table is displayed by *netstat* utility.
 | |
| Almost of these commands work only if the user has root privileges.  FRR has a
 | |
| different system administration method.  There are two user modes in FRR.  One
 | |
| is normal mode, the other is enable mode.  Normal mode user can only view
 | |
| system status, enable mode user can change system configuration.  This UNIX
 | |
| account independent feature will be great help to the router administrator.
 | |
| 
 | |
| Currently, FRR supports common unicast routing protocols, that is BGP, OSPF,
 | |
| RIP and IS-IS.  Upcoming for MPLS support, an implementation of LDP is
 | |
| currently being prepared for merging.  Implementations of BFD and PIM-SSM
 | |
| (IPv4) also exist, but are not actively being worked on.
 | |
| 
 | |
| The ultimate goal of the FRR project is making a production-grade, high
 | |
| quality, featureful and free IP routing software suite.
 | |
| 
 | |
| 
 | |
| System Architecture
 | |
| ===================
 | |
| 
 | |
| .. index:: System architecture
 | |
| 
 | |
| .. index:: Software architecture
 | |
| 
 | |
| .. index:: Software internals
 | |
| 
 | |
| Traditional routing software is made as a one process program which provides
 | |
| all of the routing protocol functionalities. FRR takes a different approach.
 | |
| FRR is a suite of daemons that work together to build the routing table. There
 | |
| is a daemon for each major supported protocol as well as a middleman daemon
 | |
| (*Zebra*) which serves as the broker between these daemons and the kernel.
 | |
| 
 | |
| This architecture allows for high resiliency, since an error, crash or exploit
 | |
| in one protocol daemon will generally not affect the others.  It is also
 | |
| flexible and extensible since the modularity makes it easy to implement new
 | |
| protocols and tie them into the suite.
 | |
| 
 | |
| An illustration of the large scale architecture is given below.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    +----+  +----+  +-----+  +----+  +----+  +----+  +-----+
 | |
|    |bgpd|  |ripd|  |ospfd|  |ldpd|  |pbrd|  |pimd|  |.....|
 | |
|    +----+  +----+  +-----+  +----+  +----+  +----+  +-----+
 | |
|         |       |        |       |       |       |        |
 | |
|    +----v-------v--------v-------v-------v-------v--------v
 | |
|    |                                                      |
 | |
|    |                         Zebra                        |
 | |
|    |                                                      |
 | |
|    +------------------------------------------------------+
 | |
|           |                    |                   |
 | |
|           |                    |                   |
 | |
|    +------v------+   +---------v--------+   +------v------+
 | |
|    |             |   |                  |   |             |
 | |
|    | *NIX Kernel |   | Remote dataplane |   | ........... |
 | |
|    |             |   |                  |   |             |
 | |
|    +-------------+   +------------------+   +-------------+
 | |
| 
 | |
| 
 | |
| The multi-process architecture brings extensibility, modularity and
 | |
| maintainability. At the same time it also brings many configuration files and
 | |
| terminal interfaces. Each daemon has its own configuration file and terminal
 | |
| interface. When you configure a static route, it must be done in the *Zebra*
 | |
| configuration file. When you configure BGP network it must be done in the
 | |
| *bgpd* configuration file. This can become difficult to manage. To resolve the
 | |
| problem, FRR provides integrated user interface shell called *vtysh*. *vtysh*
 | |
| connects to each daemon with UNIX domain socket and then works as a proxy for
 | |
| user input.
 | |
| 
 | |
| Supported Platforms
 | |
| ===================
 | |
| 
 | |
| .. index:: Supported platforms
 | |
| .. index:: FRR on other systems
 | |
| .. index:: Compatibility with other systems
 | |
| .. index:: Operating systems that support FRR
 | |
| 
 | |
| Currently FRR supports GNU/Linux and BSD. Porting FRR to other platforms is not
 | |
| too difficult as platform dependent code should be mostly limited to the
 | |
| *Zebra* daemon. Protocol daemons are largely platform independent. Please let
 | |
| us know if you can get FRR to run on a platform which is not listed below:
 | |
| 
 | |
| - GNU/Linux
 | |
| - FreeBSD
 | |
| - NetBSD
 | |
| - OpenBSD
 | |
| 
 | |
| Versions of these platforms that are older than around 2 years from the point
 | |
| of their original release (in case of GNU/Linux, this is since the kernel's
 | |
| release on https://kernel.org/) may need some work.  Similarly, the following
 | |
| platforms may work with some effort:
 | |
| 
 | |
| - Solaris
 | |
| - MacOS
 | |
| 
 | |
| Recent versions of the following compilers are well tested:
 | |
| 
 | |
| - GNU's GCC
 | |
| - LLVM's Clang
 | |
| - Intel's ICC
 | |
| 
 | |
| .. _supported-protocols:
 | |
| 
 | |
| Supported Protocols vs. Platform
 | |
| ================================
 | |
| 
 | |
| The following table lists all protocols cross-refrenced to all operating
 | |
| systems that have at least CI build tests.  Note that for features, only
 | |
| features with system dependencies are included here.
 | |
| 
 | |
| .. role:: mark
 | |
| 
 | |
| .. comment - the :mark:`X` pieces mesh with a little bit of JavaScript and
 | |
|    CSS in _static/overrides.{js,css} respectively.  The JS code looks at the
 | |
|    presence of the 'Y' 'N' '≥' '†' or 'CP' strings.  This seemed to be the
 | |
|    best / least intrusive way of getting a nice table in HTML.  The table
 | |
|    will look somewhat shoddy on other sphinx targets like PDF or info (but
 | |
|    should still be readable.)
 | |
| 
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | Daemon / Feature                  | Linux          | OpenBSD      | FreeBSD    | NetBSD     | Solaris    |
 | |
| +==+================================+================+==============+============+============+============+
 | |
| | FRR Core                                                                                                 |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `zebra`                           | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | VRF                            | :mark:`≥4.8`   | :mark:`N`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | MPLS                           | :mark:`≥4.5`   | :mark:`Y`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `pbrd` (Policy Routing)           | :mark:`Y`      | :mark:`N`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | WAN / Carrier protocols                                                                                  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `bgpd` (BGP)                      | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | VRF / L3VPN                    | :mark:`≥4.8`   | :mark:`CP`   | :mark:`CP` | :mark:`CP` | :mark:`CP` |
 | |
| |  |                                | :mark:`†4.3`   |              |            |            |            |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | EVPN                           | :mark:`≥4.18`  | :mark:`CP`   | :mark:`CP` | :mark:`CP` | :mark:`CP` |
 | |
| |  |                                | :mark:`†4.9`   |              |            |            |            |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | VNC (Virtual Network Control)  | :mark:`CP`     | :mark:`CP`   | :mark:`CP` | :mark:`CP` | :mark:`CP` |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | Flowspec                       | :mark:`CP`     | :mark:`CP`   | :mark:`CP` | :mark:`CP` | :mark:`CP` |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `ldpd` (LDP)                      | :mark:`≥4.5`   | :mark:`Y`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | VPWS / PW                      | :mark:`N`      | :mark:`≥5.8` | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | VPLS                           | :mark:`N`      | :mark:`≥5.8` | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `nhrpd` (NHRP)                    | :mark:`Y`      | :mark:`N`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | Link-State Routing                                                                                       |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `ospfd` (OSPFv2)                  | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | Segment Routing                | :mark:`≥4.12`  | :mark:`N`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `ospf6d` (OSPFv3)                 | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `isisd` (IS-IS)                   | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | Distance-Vector Routing                                                                                  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `ripd` (RIPv2)                    | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `ripngd` (RIPng)                  | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `babeld` (BABEL)                  | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `eigrpd` (EIGRP)                  | :mark:`Y`      | :mark:`Y`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | Multicast Routing                                                                                        |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| | `pimd` (PIM)                      | :mark:`≥4.18`  | :mark:`N`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | SSM (Source Specific)          | :mark:`Y`      | :mark:`N`    | :mark:`Y`  | :mark:`Y`  | :mark:`Y`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| |  | ASM (Any Source)               | :mark:`Y`      | :mark:`N`    | :mark:`N`  | :mark:`N`  | :mark:`N`  |
 | |
| +--+--------------------------------+----------------+--------------+------------+------------+------------+
 | |
| 
 | |
| The indicators have the following semantics:
 | |
| 
 | |
| * :mark:`Y` - daemon/feature fully functional
 | |
| * :mark:`≥X.X` - fully functional with kernel version X.X or newer
 | |
| * :mark:`†X.X` - restricted functionality or impaired performance with kernel version X.X or newer
 | |
| * :mark:`CP` - control plane only (i.e. BGP route server / route reflector)
 | |
| * :mark:`N` - daemon/feature not supported by operating system
 | |
| 
 | |
| .. _supported-rfcs:
 | |
| 
 | |
| Supported RFCs
 | |
| --------------
 | |
| 
 | |
| FRR implements the following RFCs:
 | |
| 
 | |
| .. note:: This list is incomplete.
 | |
| 
 | |
| - :rfc:`1058`
 | |
|   :t:`Routing Information Protocol. C.L. Hedrick. Jun-01-1988.`
 | |
| - :rfc:`2082`
 | |
|   :t:`RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.`
 | |
| - :rfc:`2453`
 | |
|   :t:`RIP Version 2. G. Malkin. November 1998.`
 | |
| - :rfc:`2080`
 | |
|   :t:`RIPng for IPv6. G. Malkin, R. Minnear. January 1997.`
 | |
| - :rfc:`2328`
 | |
|   :t:`OSPF Version 2. J. Moy. April 1998.`
 | |
| - :rfc:`2370`
 | |
|   :t:`The OSPF Opaque LSA Option R. Coltun. July 1998.`
 | |
| - :rfc:`3101`
 | |
|   :t:`The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.`
 | |
| - :rfc:`2740`
 | |
|   :t:`OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.`
 | |
| - :rfc:`1771`
 | |
|   :t:`A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.`
 | |
| - :rfc:`1965`
 | |
|   :t:`Autonomous System Confederations for BGP. P. Traina. June 1996.`
 | |
| - :rfc:`1997`
 | |
|   :t:`BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.`
 | |
| - :rfc:`2545`
 | |
|   :t:`Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P.
 | |
|   Marques, F. Dupont. March 1999.`
 | |
| - :rfc:`2796`
 | |
|   :t:`BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R.
 | |
|   Chandrasekeran. June 1996.`
 | |
| - :rfc:`2858`
 | |
|   :t:`Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D.
 | |
|   Katz. June 2000.`
 | |
| - :rfc:`2842`
 | |
|   :t:`Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.`
 | |
| - :rfc:`3137`
 | |
|   :t:`OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin,
 | |
|   D. McPherson. June 2001`
 | |
| - :rfc:`4447`
 | |
|   :t:`Pseudowire Setup and Maintenance Using the Label Distribution Protocol
 | |
|   (LDP), L. Martini, E. Rosen, N. El-Aawar, T. Smith, and G. Heron. April
 | |
|   2006.`
 | |
| - :rfc:`4762`
 | |
|   :t:`Virtual Private LAN Service (VPLS) Using Label Distribution Protocol
 | |
|   (LDP) Signaling, M. Lasserre and V. Kompella. January 2007.`
 | |
| - :rfc:`5036`
 | |
|   :t:`LDP Specification, L. Andersson, I. Minei, and B. Thomas. October 2007.`
 | |
| - :rfc:`5561`
 | |
|   :t:`LDP Capabilities, B. Thomas, K. Raza, S. Aggarwal, R. Aggarwal, and
 | |
|   JL. Le Roux. July 2009.`
 | |
| - :rfc:`5918`
 | |
|   :t:`Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence
 | |
|   Class (FEC), R. Asati, I. Minei, and B. Thomas. August 2010.`
 | |
| - :rfc:`5919`
 | |
|   :t:`Signaling LDP Label Advertisement Completion, R. Asati, P. Mohapatra,
 | |
|   E. Chen, and B. Thomas. August 2010.`
 | |
| - :rfc:`6667`
 | |
|   :t:`LDP 'Typed Wildcard' Forwarding Equivalence Class (FEC) for PWid and
 | |
|   Generalized PWid FEC Elements, K. Raza, S. Boutros, and C. Pignataro. July
 | |
|   2012.`
 | |
| - :rfc:`6720`
 | |
|   :t:`The Generalized TTL Security Mechanism (GTSM) for the Label Distribution
 | |
|   Protocol (LDP), C. Pignataro and R. Asati. August 2012.`
 | |
| - :rfc:`7552`
 | |
|   :t:`Updates to LDP for IPv6, R. Asati, C. Pignataro, K. Raza, V. Manral,
 | |
|   and R. Papneja. June 2015.`
 | |
| - :rfc:`5880`
 | |
|   :t:`Bidirectional Forwarding Detection (BFD), D. Katz, D. Ward. June 2010`
 | |
| - :rfc:`5881`
 | |
|   :t:`Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop),
 | |
|   D. Katz, D. Ward. June 2010`
 | |
| - :rfc:`5883`
 | |
|   :t:`Bidirectional Forwarding Detection (BFD) for Multihop Paths, D. Katz,
 | |
|   D. Ward. June 2010`
 | |
| 
 | |
| **When SNMP support is enabled, the following RFCs are also supported:**
 | |
| 
 | |
| - :rfc:`1227`
 | |
|   :t:`SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.`
 | |
| - :rfc:`1657`
 | |
|   :t:`Definitions of Managed Objects for the Fourth Version of the Border
 | |
|   Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss, J. Chu, Editor.
 | |
|   July 1994.`
 | |
| - :rfc:`1724`
 | |
|   :t:`RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.`
 | |
| - :rfc:`1850`
 | |
|   :t:`OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
 | |
|   November 1995.`
 | |
| - :rfc:`2741`
 | |
|   :t:`Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.`
 | |
| 
 | |
| How to get FRR
 | |
| ==============
 | |
| 
 | |
| The official FRR website is located at |PACKAGE_URL| and contains further
 | |
| information, as well as links to additional resources.
 | |
| 
 | |
| Several distributions provide packages for FRR. Check your distribution's
 | |
| repositories to find out if a suitable version is available.
 | |
| 
 | |
| Mailing Lists
 | |
| =============
 | |
| 
 | |
| .. index:: How to get in touch with FRR
 | |
| .. index:: Contact information
 | |
| .. index:: Mailing lists
 | |
| 
 | |
| 
 | |
| Italicized lists are private.
 | |
| 
 | |
| +--------------------------------+------------------------------+
 | |
| | Topic                          | List                         |
 | |
| +================================+==============================+
 | |
| | Development                    | dev@lists.frrouting.org      |
 | |
| +--------------------------------+------------------------------+
 | |
| | Users & Operators              | frog@lists.frrouting.org     |
 | |
| +--------------------------------+------------------------------+
 | |
| | Announcements                  | announce@lists.frrouting.org |
 | |
| +--------------------------------+------------------------------+
 | |
| | *Security*                     | security@lists.frrouting.org |
 | |
| +--------------------------------+------------------------------+
 | |
| | *Technical Steering Committee* | tsc@lists.frrouting.org      |
 | |
| +--------------------------------+------------------------------+
 | |
| 
 | |
| The Development list is used to discuss and document general issues related to
 | |
| project development and governance. The public `Slack`_ instance and weekly
 | |
| technical meetings provide a higher bandwidth channel for discussions. The
 | |
| results of such discussions are reflected in updates, as appropriate, to code
 | |
| (i.e., merges), `GitHub issues`_ tracked issues, and for governance or process
 | |
| changes, updates to the Development list and either this file or information
 | |
| posted at `FRR`_.
 | |
| 
 | |
| Bug Reports
 | |
| ===========
 | |
| 
 | |
| For information on reporting bugs, please see :ref:`bug-reports`.
 | |
| 
 | |
| .. _frr: |package-url|
 | |
| .. _github: https://github.com/frrouting/frr/
 | |
| .. _github issues: https://github.com/frrouting/frr/issues
 | |
| .. _slack: https://frrouting.slack.com/
 | 
