]>
Commit | Line | Data |
---|---|---|
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. All of the FRR daemons can be managed through a single | |
111 | integrated user interface shell called *vtysh*. *vtysh* connects to each | |
112 | daemon through a UNIX domain socket and then works as a proxy for user input. | |
113 | In addition to a unified frontend, *vtysh* also provides the ability to | |
114 | configure all the daemons using a single configuration file through the | |
115 | integrated configuration mode avoiding the problem of having to maintain a | |
116 | separate configuration file for each daemon. | |
117 | ||
118 | Supported 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 | ||
126 | Currently FRR supports GNU/Linux and BSD. Porting FRR to other platforms is not | |
127 | too difficult as platform dependent code should be mostly limited to the | |
128 | *Zebra* daemon. Protocol daemons are largely platform independent. Please let | |
129 | us 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 | ||
136 | Versions of these platforms that are older than around 2 years from the point | |
137 | of their original release (in case of GNU/Linux, this is since the kernel's | |
138 | release on https://kernel.org/) may need some work. Similarly, the following | |
139 | platforms may work with some effort: | |
140 | ||
141 | - Solaris | |
142 | - MacOS | |
143 | ||
144 | Recent 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 | ||
152 | Supported Protocols vs. Platform | |
153 | ================================ | |
154 | ||
155 | The following table lists all protocols cross-refrenced to all operating | |
156 | systems that have at least CI build tests. Note that for features, only | |
157 | features 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 | ||
234 | The 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 | ||
244 | Supported RFCs | |
245 | -------------- | |
246 | ||
247 | FRR 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 | ||
340 | How to get FRR | |
341 | ============== | |
342 | ||
343 | The official FRR website is located at |PACKAGE_URL| and contains further | |
344 | information, as well as links to additional resources. | |
345 | ||
346 | Several distributions provide packages for FRR. Check your distribution's | |
347 | repositories to find out if a suitable version is available. | |
348 | ||
349 | Mailing Lists | |
350 | ============= | |
351 | ||
352 | .. index:: How to get in touch with FRR | |
353 | .. index:: Contact information | |
354 | .. index:: Mailing lists | |
355 | ||
356 | ||
357 | Italicized 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 | ||
373 | The Development list is used to discuss and document general issues related to | |
374 | project development and governance. The public `Slack`_ instance and weekly | |
375 | technical meetings provide a higher bandwidth channel for discussions. The | |
376 | results of such discussions are reflected in updates, as appropriate, to code | |
377 | (i.e., merges), `GitHub issues`_ tracked issues, and for governance or process | |
378 | changes, updates to the Development list and either this file or information | |
379 | posted at `FRR`_. | |
380 | ||
381 | Bug Reports | |
382 | =========== | |
383 | ||
384 | For 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/ |