]> git.proxmox.com Git - mirror_frr.git/blame_incremental - doc/user/overview.rst
Merge pull request #4436 from donaldsharp/tools_frr_flush
[mirror_frr.git] / doc / user / overview.rst
... / ...
CommitLineData
1.. _overview:
2
3********
4Overview
5********
6
7`FRR`_ is a routing software package that provides TCP/IP based routing
8services with routing protocols support such as BGP, RIP, OSPF, IS-IS and more
9(see :ref:`supported-protocols`). FRR also supports
10special BGP Route Reflector and Route Server behavior. In addition to
11traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
12With an SNMP daemon that supports the AgentX protocol, FRR provides routing
13protocol MIB read-only access (:ref:`snmp-support`).
14
15FRR uses an advanced software architecture to provide you with a high quality,
16multi server routing engine. FRR has an interactive user interface for each
17routing protocol and supports common client commands. Due to this design, you
18can add new protocol daemons to FRR easily. You can use FRR library as your
19program's client user interface.
20
21FRR is distributed under the GNU General Public License.
22
23FRR is a fork of `Quagga <http://www.quagga.net/>`_.
24
25.. _about-frr:
26
27About FRR
28=========
29
30Today, TCP/IP networks are covering all of the world. The Internet has been
31deployed in many countries, companies, and to the home. When you connect to
32the Internet your packet will pass many routers which have TCP/IP routing
33functionality.
34
35A system with FRR installed acts as a dedicated router. With FRR, your machine
36exchanges routing information with other routers using routing protocols. FRR
37uses this information to update the kernel routing table so that the right data
38goes to the right place. You can dynamically change the configuration and you
39may view routing table information from the FRR terminal interface.
40
41Adding to routing protocol support, FRR can setup interface's flags,
42interface's address, static routes and so on. If you have a small network, or
43a stub network, or xDSL connection, configuring the FRR routing software is
44very easy. The only thing you have to do is to set up the interfaces and put a
45few commands about static routes and/or default routes. If the network is
46rather large, or if the network structure changes frequently, you will want to
47take advantage of FRR's dynamic routing protocol support for protocols such as
48RIP, OSPF, IS-IS or BGP.
49
50Traditionally, UNIX based router configuration is done by *ifconfig* and
51*route* commands. Status of routing table is displayed by *netstat* utility.
52Almost of these commands work only if the user has root privileges. FRR has a
53different system administration method. There are two user modes in FRR. One
54is normal mode, the other is enable mode. Normal mode user can only view
55system status, enable mode user can change system configuration. This UNIX
56account independent feature will be great help to the router administrator.
57
58Currently, FRR supports common unicast routing protocols, that is BGP, OSPF,
59RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
60currently being prepared for merging. Implementations of BFD and PIM-SSM
61(IPv4) also exist, but are not actively being worked on.
62
63The ultimate goal of the FRR project is making a production-grade, high
64quality, featureful and free IP routing software suite.
65
66
67System Architecture
68===================
69
70.. index:: System architecture
71
72.. index:: Software architecture
73
74.. index:: Software internals
75
76Traditional routing software is made as a one process program which provides
77all of the routing protocol functionalities. FRR takes a different approach.
78FRR is a suite of daemons that work together to build the routing table. There
79is a daemon for each major supported protocol as well as a middleman daemon
80(*Zebra*) which serves as the broker between these daemons and the kernel.
81
82This architecture allows for high resiliency, since an error, crash or exploit
83in one protocol daemon will generally not affect the others. It is also
84flexible and extensible since the modularity makes it easy to implement new
85protocols and tie them into the suite.
86
87An illustration of the large scale architecture is given below.
88
89::
90
91 +----+ +----+ +-----+ +----+ +----+ +----+ +-----+
92 |bgpd| |ripd| |ospfd| |ldpd| |pbrd| |pimd| |.....|
93 +----+ +----+ +-----+ +----+ +----+ +----+ +-----+
94 | | | | | | |
95 +----v-------v--------v-------v-------v-------v--------v
96 | |
97 | Zebra |
98 | |
99 +------------------------------------------------------+
100 | | |
101 | | |
102 +------v------+ +---------v--------+ +------v------+
103 | | | | | |
104 | *NIX Kernel | | Remote dataplane | | ........... |
105 | | | | | |
106 +-------------+ +------------------+ +-------------+
107
108
109The multi-process architecture brings extensibility, modularity and
110maintainability. All of the FRR daemons can be managed through a single
111integrated user interface shell called *vtysh*. *vtysh* connects to each
112daemon through a UNIX domain socket and then works as a proxy for user input.
113In addition to a unified frontend, *vtysh* also provides the ability to
114configure all the daemons using a single configuration file through the
115integrated configuration mode avoiding the problem of having to maintain a
116separate configuration file for each daemon.
117
118Supported Platforms
119===================
120
121.. index:: Supported platforms
122.. index:: FRR on other systems
123.. index:: Compatibility with other systems
124.. index:: Operating systems that support FRR
125
126Currently FRR supports GNU/Linux and BSD. Porting FRR to other platforms is not
127too difficult as platform dependent code should be mostly limited to the
128*Zebra* daemon. Protocol daemons are largely platform independent. Please let
129us know if you can get FRR to run on a platform which is not listed below:
130
131- GNU/Linux
132- FreeBSD
133- NetBSD
134- OpenBSD
135
136Versions of these platforms that are older than around 2 years from the point
137of their original release (in case of GNU/Linux, this is since the kernel's
138release on https://kernel.org/) may need some work. Similarly, the following
139platforms may work with some effort:
140
141- Solaris
142- MacOS
143
144Recent versions of the following compilers are well tested:
145
146- GNU's GCC
147- LLVM's Clang
148- Intel's ICC
149
150.. _supported-protocols:
151
152Supported Protocols vs. Platform
153================================
154
155The following table lists all protocols cross-refrenced to all operating
156systems that have at least CI build tests. Note that for features, only
157features with system dependencies are included here.
158
159.. role:: mark
160
161.. comment - the :mark:`X` pieces mesh with a little bit of JavaScript and
162 CSS in _static/overrides.{js,css} respectively. The JS code looks at the
163 presence of the 'Y' 'N' '≥' '†' or 'CP' strings. This seemed to be the
164 best / least intrusive way of getting a nice table in HTML. The table
165 will look somewhat shoddy on other sphinx targets like PDF or info (but
166 should still be readable.)
167
168+-----------------------------------+----------------+--------------+------------+------------+------------+
169| Daemon / Feature | Linux | OpenBSD | FreeBSD | NetBSD | Solaris |
170+===================================+================+==============+============+============+============+
171| **FRR Core** | | | | | |
172+-----------------------------------+----------------+--------------+------------+------------+------------+
173| `zebra` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
174+-----------------------------------+----------------+--------------+------------+------------+------------+
175| VRF | :mark:`≥4.8` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
176+-----------------------------------+----------------+--------------+------------+------------+------------+
177| MPLS | :mark:`≥4.5` | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` |
178+-----------------------------------+----------------+--------------+------------+------------+------------+
179| `pbrd` (Policy Routing) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
180+-----------------------------------+----------------+--------------+------------+------------+------------+
181| **WAN / Carrier protocols** | | | | | |
182+-----------------------------------+----------------+--------------+------------+------------+------------+
183| `bgpd` (BGP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
184+-----------------------------------+----------------+--------------+------------+------------+------------+
185| VRF / L3VPN | :mark:`≥4.8` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` |
186| | :mark:`†4.3` | | | | |
187+-----------------------------------+----------------+--------------+------------+------------+------------+
188| EVPN | :mark:`≥4.18` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` |
189| | :mark:`†4.9` | | | | |
190+-----------------------------------+----------------+--------------+------------+------------+------------+
191| VNC (Virtual Network Control) | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` |
192+-----------------------------------+----------------+--------------+------------+------------+------------+
193| Flowspec | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` |
194+-----------------------------------+----------------+--------------+------------+------------+------------+
195| `ldpd` (LDP) | :mark:`≥4.5` | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` |
196+-----------------------------------+----------------+--------------+------------+------------+------------+
197| VPWS / PW | :mark:`N` | :mark:`≥5.8` | :mark:`N` | :mark:`N` | :mark:`N` |
198+-----------------------------------+----------------+--------------+------------+------------+------------+
199| VPLS | :mark:`N` | :mark:`≥5.8` | :mark:`N` | :mark:`N` | :mark:`N` |
200+-----------------------------------+----------------+--------------+------------+------------+------------+
201| `nhrpd` (NHRP) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
202+-----------------------------------+----------------+--------------+------------+------------+------------+
203| **Link-State Routing** | | | | | |
204+-----------------------------------+----------------+--------------+------------+------------+------------+
205| `ospfd` (OSPFv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
206+-----------------------------------+----------------+--------------+------------+------------+------------+
207| Segment Routing | :mark:`≥4.12` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
208+-----------------------------------+----------------+--------------+------------+------------+------------+
209| `ospf6d` (OSPFv3) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
210+-----------------------------------+----------------+--------------+------------+------------+------------+
211| `isisd` (IS-IS) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
212+-----------------------------------+----------------+--------------+------------+------------+------------+
213| **Distance-Vector Routing** | | | | | |
214+-----------------------------------+----------------+--------------+------------+------------+------------+
215| `ripd` (RIPv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
216+-----------------------------------+----------------+--------------+------------+------------+------------+
217| `ripngd` (RIPng) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
218+-----------------------------------+----------------+--------------+------------+------------+------------+
219| `babeld` (BABEL) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
220+-----------------------------------+----------------+--------------+------------+------------+------------+
221| `eigrpd` (EIGRP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
222+-----------------------------------+----------------+--------------+------------+------------+------------+
223| **Multicast Routing** | | | | | |
224+-----------------------------------+----------------+--------------+------------+------------+------------+
225| `pimd` (PIM) | :mark:`≥4.18` | :mark:`N` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
226+-----------------------------------+----------------+--------------+------------+------------+------------+
227| SSM (Source Specific) | :mark:`Y` | :mark:`N` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
228+-----------------------------------+----------------+--------------+------------+------------+------------+
229| ASM (Any Source) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
230+-----------------------------------+----------------+--------------+------------+------------+------------+
231| EVPN BUM Forwarding | :mark:`≥5.0` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
232+-----------------------------------+----------------+--------------+------------+------------+------------+
233
234The indicators have the following semantics:
235
236* :mark:`Y` - daemon/feature fully functional
237* :mark:`≥X.X` - fully functional with kernel version X.X or newer
238* :mark:`†X.X` - restricted functionality or impaired performance with kernel version X.X or newer
239* :mark:`CP` - control plane only (i.e. BGP route server / route reflector)
240* :mark:`N` - daemon/feature not supported by operating system
241
242.. _supported-rfcs:
243
244Supported RFCs
245--------------
246
247FRR implements the following RFCs:
248
249.. note:: This list is incomplete.
250
251- :rfc:`1058`
252 :t:`Routing Information Protocol. C.L. Hedrick. Jun-01-1988.`
253- :rfc:`2082`
254 :t:`RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.`
255- :rfc:`2453`
256 :t:`RIP Version 2. G. Malkin. November 1998.`
257- :rfc:`2080`
258 :t:`RIPng for IPv6. G. Malkin, R. Minnear. January 1997.`
259- :rfc:`2328`
260 :t:`OSPF Version 2. J. Moy. April 1998.`
261- :rfc:`2370`
262 :t:`The OSPF Opaque LSA Option R. Coltun. July 1998.`
263- :rfc:`3101`
264 :t:`The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.`
265- :rfc:`2740`
266 :t:`OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.`
267- :rfc:`1771`
268 :t:`A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.`
269- :rfc:`1965`
270 :t:`Autonomous System Confederations for BGP. P. Traina. June 1996.`
271- :rfc:`1997`
272 :t:`BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.`
273- :rfc:`2545`
274 :t:`Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P.
275 Marques, F. Dupont. March 1999.`
276- :rfc:`2796`
277 :t:`BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R.
278 Chandrasekeran. June 1996.`
279- :rfc:`2858`
280 :t:`Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D.
281 Katz. June 2000.`
282- :rfc:`2842`
283 :t:`Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.`
284- :rfc:`3137`
285 :t:`OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin,
286 D. McPherson. June 2001`
287- :rfc:`4447`
288 :t:`Pseudowire Setup and Maintenance Using the Label Distribution Protocol
289 (LDP), L. Martini, E. Rosen, N. El-Aawar, T. Smith, and G. Heron. April
290 2006.`
291- :rfc:`4762`
292 :t:`Virtual Private LAN Service (VPLS) Using Label Distribution Protocol
293 (LDP) Signaling, M. Lasserre and V. Kompella. January 2007.`
294- :rfc:`5036`
295 :t:`LDP Specification, L. Andersson, I. Minei, and B. Thomas. October 2007.`
296- :rfc:`5561`
297 :t:`LDP Capabilities, B. Thomas, K. Raza, S. Aggarwal, R. Aggarwal, and
298 JL. Le Roux. July 2009.`
299- :rfc:`5918`
300 :t:`Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence
301 Class (FEC), R. Asati, I. Minei, and B. Thomas. August 2010.`
302- :rfc:`5919`
303 :t:`Signaling LDP Label Advertisement Completion, R. Asati, P. Mohapatra,
304 E. Chen, and B. Thomas. August 2010.`
305- :rfc:`6667`
306 :t:`LDP 'Typed Wildcard' Forwarding Equivalence Class (FEC) for PWid and
307 Generalized PWid FEC Elements, K. Raza, S. Boutros, and C. Pignataro. July
308 2012.`
309- :rfc:`6720`
310 :t:`The Generalized TTL Security Mechanism (GTSM) for the Label Distribution
311 Protocol (LDP), C. Pignataro and R. Asati. August 2012.`
312- :rfc:`7552`
313 :t:`Updates to LDP for IPv6, R. Asati, C. Pignataro, K. Raza, V. Manral,
314 and R. Papneja. June 2015.`
315- :rfc:`5880`
316 :t:`Bidirectional Forwarding Detection (BFD), D. Katz, D. Ward. June 2010`
317- :rfc:`5881`
318 :t:`Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop),
319 D. Katz, D. Ward. June 2010`
320- :rfc:`5883`
321 :t:`Bidirectional Forwarding Detection (BFD) for Multihop Paths, D. Katz,
322 D. Ward. June 2010`
323
324**When SNMP support is enabled, the following RFCs are also supported:**
325
326- :rfc:`1227`
327 :t:`SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.`
328- :rfc:`1657`
329 :t:`Definitions of Managed Objects for the Fourth Version of the Border
330 Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss, J. Chu, Editor.
331 July 1994.`
332- :rfc:`1724`
333 :t:`RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.`
334- :rfc:`1850`
335 :t:`OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
336 November 1995.`
337- :rfc:`2741`
338 :t:`Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.`
339
340How to get FRR
341==============
342
343The official FRR website is located at |PACKAGE_URL| and contains further
344information, as well as links to additional resources.
345
346Several distributions provide packages for FRR. Check your distribution's
347repositories to find out if a suitable version is available.
348
349Mailing Lists
350=============
351
352.. index:: How to get in touch with FRR
353.. index:: Contact information
354.. index:: Mailing lists
355
356
357Italicized lists are private.
358
359+--------------------------------+------------------------------+
360| Topic | List |
361+================================+==============================+
362| Development | dev@lists.frrouting.org |
363+--------------------------------+------------------------------+
364| Users & Operators | frog@lists.frrouting.org |
365+--------------------------------+------------------------------+
366| Announcements | announce@lists.frrouting.org |
367+--------------------------------+------------------------------+
368| *Security* | security@lists.frrouting.org |
369+--------------------------------+------------------------------+
370| *Technical Steering Committee* | tsc@lists.frrouting.org |
371+--------------------------------+------------------------------+
372
373The Development list is used to discuss and document general issues related to
374project development and governance. The public `Slack`_ instance and weekly
375technical meetings provide a higher bandwidth channel for discussions. The
376results of such discussions are reflected in updates, as appropriate, to code
377(i.e., merges), `GitHub issues`_ tracked issues, and for governance or process
378changes, updates to the Development list and either this file or information
379posted at `FRR`_.
380
381Bug Reports
382===========
383
384For information on reporting bugs, please see :ref:`bug-reports`.
385
386.. _frr: |package-url|
387.. _github: https://github.com/frrouting/frr/
388.. _github issues: https://github.com/frrouting/frr/issues
389.. _slack: https://frrouting.slack.com/