]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/overview.rst
Merge pull request #4436 from donaldsharp/tools_frr_flush
[mirror_frr.git] / doc / user / overview.rst
CommitLineData
0efdf0fe 1.. _overview:
42fc5d26
QY
2
3********
4Overview
5********
6
2da6ccc3 7`FRR`_ is a routing software package that provides TCP/IP based routing
3175ea5a
DL
8services with routing protocols support such as BGP, RIP, OSPF, IS-IS and more
9(see :ref:`supported-protocols`). FRR also supports
2da6ccc3 10special BGP Route Reflector and Route Server behavior. In addition to
be46d288 11traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
3175ea5a
DL
12With an SNMP daemon that supports the AgentX protocol, FRR provides routing
13protocol MIB read-only access (:ref:`snmp-support`).
be46d288 14
2da6ccc3
QY
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.
42fc5d26 20
be46d288 21FRR is distributed under the GNU General Public License.
42fc5d26 22
717b4866
QY
23FRR is a fork of `Quagga <http://www.quagga.net/>`_.
24
11ab5329 25.. _about-frr:
44f2550e 26
be46d288 27About FRR
42fc5d26
QY
28=========
29
2da6ccc3
QY
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.
42fc5d26 34
2da6ccc3
QY
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.
42fc5d26 40
be46d288 41Adding to routing protocol support, FRR can setup interface's flags,
2da6ccc3
QY
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
42fc5d26
QY
60currently being prepared for merging. Implementations of BFD and PIM-SSM
61(IPv4) also exist, but are not actively being worked on.
62
2da6ccc3
QY
63The ultimate goal of the FRR project is making a production-grade, high
64quality, featureful and free IP routing software suite.
42fc5d26 65
42fc5d26
QY
66
67System Architecture
68===================
69
70.. index:: System architecture
71
72.. index:: Software architecture
73
74.. index:: Software internals
75
2da6ccc3
QY
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.
42fc5d26 81
2da6ccc3
QY
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.
42fc5d26 88
2da6ccc3 89::
42fc5d26 90
2da6ccc3
QY
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
560470b5
WK
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.
42fc5d26
QY
117
118Supported Platforms
119===================
120
121.. index:: Supported platforms
be46d288 122.. index:: FRR on other systems
42fc5d26 123.. index:: Compatibility with other systems
be46d288 124.. index:: Operating systems that support FRR
42fc5d26 125
2da6ccc3
QY
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:
42fc5d26 130
44f2550e
QY
131- GNU/Linux
132- FreeBSD
133- NetBSD
134- OpenBSD
42fc5d26
QY
135
136Versions of these platforms that are older than around 2 years from the point
44f2550e 137of their original release (in case of GNU/Linux, this is since the kernel's
2da6ccc3
QY
138release on https://kernel.org/) may need some work. Similarly, the following
139platforms may work with some effort:
42fc5d26 140
44f2550e
QY
141- Solaris
142- MacOS
42fc5d26 143
2da6ccc3 144Recent versions of the following compilers are well tested:
42fc5d26 145
44f2550e 146- GNU's GCC
2da6ccc3 147- LLVM's Clang
44f2550e 148- Intel's ICC
42fc5d26 149
2da6ccc3
QY
150.. _supported-protocols:
151
36372632
DL
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
2282d928 168+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 169| Daemon / Feature | Linux | OpenBSD | FreeBSD | NetBSD | Solaris |
2282d928
DL
170+===================================+================+==============+============+============+============+
171| **FRR Core** | | | | | |
172+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 173| `zebra` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
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+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 179| `pbrd` (Policy Routing) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
2282d928
DL
180+-----------------------------------+----------------+--------------+------------+------------+------------+
181| **WAN / Carrier protocols** | | | | | |
182+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 183| `bgpd` (BGP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
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+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 195| `ldpd` (LDP) | :mark:`≥4.5` | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` |
2282d928
DL
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+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 201| `nhrpd` (NHRP) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
2282d928
DL
202+-----------------------------------+----------------+--------------+------------+------------+------------+
203| **Link-State Routing** | | | | | |
204+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 205| `ospfd` (OSPFv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
206+-----------------------------------+----------------+--------------+------------+------------+------------+
207| Segment Routing | :mark:`≥4.12` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
208+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 209| `ospf6d` (OSPFv3) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928 210+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 211| `isisd` (IS-IS) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
212+-----------------------------------+----------------+--------------+------------+------------+------------+
213| **Distance-Vector Routing** | | | | | |
214+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 215| `ripd` (RIPv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928 216+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 217| `ripngd` (RIPng) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928 218+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 219| `babeld` (BABEL) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928 220+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 221| `eigrpd` (EIGRP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
222+-----------------------------------+----------------+--------------+------------+------------+------------+
223| **Multicast Routing** | | | | | |
224+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632 225| `pimd` (PIM) | :mark:`≥4.18` | :mark:`N` | :mark:`Y` | :mark:`Y` | :mark:`Y` |
2282d928
DL
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+-----------------------------------+----------------+--------------+------------+------------+------------+
745fc7a5
AK
231| EVPN BUM Forwarding | :mark:`≥5.0` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` |
232+-----------------------------------+----------------+--------------+------------+------------+------------+
36372632
DL
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
42fc5d26 241
44f2550e 242.. _supported-rfcs:
42fc5d26
QY
243
244Supported RFCs
2da6ccc3 245--------------
42fc5d26 246
44f2550e
QY
247FRR implements the following RFCs:
248
2da6ccc3
QY
249.. note:: This list is incomplete.
250
44f2550e
QY
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`
401c1744
RW
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.`
c44032c1
RZ
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`
44f2550e
QY
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.`
42fc5d26 339
be46d288 340How to get FRR
42fc5d26
QY
341==============
342
44f2550e
QY
343The official FRR website is located at |PACKAGE_URL| and contains further
344information, as well as links to additional resources.
42fc5d26 345
717b4866
QY
346Several distributions provide packages for FRR. Check your distribution's
347repositories to find out if a suitable version is available.
42fc5d26 348
44f2550e
QY
349Mailing Lists
350=============
42fc5d26 351
be46d288 352.. index:: How to get in touch with FRR
42fc5d26 353.. index:: Contact information
42fc5d26
QY
354.. index:: Mailing lists
355
42fc5d26 356
44f2550e
QY
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
013f9762
QY
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`_.
42fc5d26 380
07a17e6d
QY
381Bug Reports
382===========
383
2da6ccc3 384For information on reporting bugs, please see :ref:`bug-reports`.
42fc5d26 385
11ab5329 386.. _frr: |package-url|
0efdf0fe 387.. _github: https://github.com/frrouting/frr/
11ab5329 388.. _github issues: https://github.com/frrouting/frr/issues
0efdf0fe 389.. _slack: https://frrouting.slack.com/