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