]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/overview.rst
0d630ce1a8f4b34a2b501e315e12b1bd9510bfb9
[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
8 routing services with routing protocols support such as RIPv1, RIPv2, RIPng,
9 OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (:ref:`supported-rfcs`). FRR also
10 supports special BGP Route Reflector and Route Server behavior. In addition to
11 traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
12 With SNMP daemon which supports SMUX and AgentX protocol, FRR provides routing
13 protocol MIBs (:ref:`snmp-support`).
14
15 FRR uses an advanced software architecture to provide you with a high
16 quality, multi server routing engine. FRR has an interactive user
17 interface for each routing protocol and supports common client commands.
18 Due to this design, you can add new protocol daemons to FRR easily. You
19 can use FRR library as your 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
31 been deployed in many countries, companies, and to the home. When you
32 connect to the Internet your packet will pass many routers which have TCP/IP
33 routing functionality.
34
35 A system with FRR installed acts as a dedicated router. With FRR,
36 your machine exchanges routing information with other routers using routing
37 protocols. FRR uses this information to update the kernel routing table
38 so that the right data goes to the right place. You can dynamically change
39 the configuration and you may view routing table information from the FRR
40 terminal interface.
41
42 Adding to routing protocol support, FRR can setup interface's flags,
43 interface's address, static routes and so on. If you have a small network,
44 or a stub network, or xDSL connection, configuring the FRR routing
45 software is very easy. The only thing you have to do is to set up the
46 interfaces and put a few commands about static routes and/or default routes.
47 If the network is rather large, or if the network structure changes
48 frequently, you will want to take advantage of FRR's dynamic routing
49 protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
50
51 Traditionally, UNIX based router configuration is done by
52 *ifconfig* and *route* commands. Status of routing
53 table is displayed by *netstat* utility. Almost of these commands
54 work only if the user has root privileges. FRR has a different system
55 administration method. There are two user modes in FRR. One is normal
56 mode, the other is enable mode. Normal mode user can only view system
57 status, enable mode user can change system configuration. This UNIX account
58 independent feature will be great help to the router administrator.
59
60 Currently, FRR supports common unicast routing protocols, that is BGP,
61 OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
62 currently being prepared for merging. Implementations of BFD and PIM-SSM
63 (IPv4) also exist, but are not actively being worked on.
64
65 The ultimate goal of the FRR project is making a productive, quality, free
66 TCP/IP routing software package.
67
68
69 System Architecture
70 ===================
71
72 .. index:: System architecture
73
74 .. index:: Software architecture
75
76 .. index:: Software internals
77
78 Traditional routing software is made as a one process program which
79 provides all of the routing protocol functionalities. FRR takes a
80 different approach. It is made from a collection of several daemons that
81 work together to build the routing table. There may be several
82 protocol-specific routing daemons and zebra the kernel routing manager.
83
84 The *ripd* daemon handles the RIP protocol, while
85 *ospfd* is a daemon which supports OSPF version 2.
86 *bgpd* supports the BGP-4 protocol. For changing the kernel
87 routing table and for redistribution of routes between different routing
88 protocols, there is a kernel routing table manager *zebra* daemon.
89 It is easy to add a new routing protocol daemons to the entire routing
90 system without affecting any other software. You need to run only the
91 protocol daemon associated with routing protocols in use. Thus, user may
92 run a specific daemon and send routing reports to a central routing console.
93
94 There is no need for these daemons to be running on the same machine. You
95 can even run several same protocol daemons on the same machine. This
96 architecture creates new possibilities for the routing system.
97
98 ::
99
100 +----+ +----+ +-----+ +-----+
101 |bgpd| |ripd| |ospfd| |zebra|
102 +----+ +----+ +-----+ +-----+
103 |
104 +---------------------------|--+
105 | v |
106 | UNIX Kernel routing table |
107 | |
108 +------------------------------+
109
110 FRR System Architecture
111
112
113 Multi-process architecture brings extensibility, modularity and
114 maintainability. At the same time it also brings many configuration files
115 and terminal interfaces. Each daemon has it's own configuration file and
116 terminal interface. When you configure a static route, it must be done in
117 *zebra* configuration file. When you configure BGP network it must
118 be done in *bgpd* configuration file. This can be a very annoying
119 thing. To resolve the problem, FRR provides integrated user interface
120 shell called *vtysh*. *vtysh* connects to each daemon with
121 UNIX domain socket and then works as a proxy for user input.
122
123 FRR was planned to use multi-threaded mechanism when it runs with a
124 kernel that supports multi-threads. But at the moment, the thread library
125 which comes with GNU/Linux or FreeBSD has some problems with running
126 reliable services such as routing software, so we don't use threads at all.
127 Instead we use the *select(2)* system call for multiplexing the
128 events.
129
130
131 Supported Platforms
132 ===================
133
134 .. index:: Supported platforms
135
136 .. index:: FRR on other systems
137
138 .. index:: Compatibility with other systems
139
140 .. index:: Operating systems that support FRR
141
142 Currently FRR supports GNU/Linux and BSD. Porting FRR
143 to other platforms is not too difficult as platform dependent code should
144 most be limited to the *zebra* daemon. Protocol daemons are mostly
145 platform independent. Please let us know when you find out FRR runs on a
146 platform which is not listed below.
147
148 The list of officially supported platforms are listed below. Note that
149 FRR may run correctly on other platforms, and may run with partial
150 functionality on further platforms.
151
152 - GNU/Linux
153 - FreeBSD
154 - NetBSD
155 - OpenBSD
156
157 Versions of these platforms that are older than around 2 years from the point
158 of their original release (in case of GNU/Linux, this is since the kernel's
159 release on https://kernel.org/) may need some work. Similarly, the following platforms
160 may work with some effort:
161
162 - Solaris
163 - MacOS
164
165 Also note that, in particular regarding proprietary platforms, compiler
166 and C library choice will affect FRR. Only recent versions of the
167 following C compilers are well-tested:
168
169 - GNU's GCC
170 - LLVM's clang
171 - Intel's ICC
172
173
174 .. _supported-rfcs:
175
176 Supported RFCs
177 ==============
178
179 FRR implements the following RFCs:
180
181 - :rfc:`1058`
182 :t:`Routing Information Protocol. C.L. Hedrick. Jun-01-1988.`
183 - :rfc:`2082`
184 :t:`RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.`
185 - :rfc:`2453`
186 :t:`RIP Version 2. G. Malkin. November 1998.`
187 - :rfc:`2080`
188 :t:`RIPng for IPv6. G. Malkin, R. Minnear. January 1997.`
189 - :rfc:`2328`
190 :t:`OSPF Version 2. J. Moy. April 1998.`
191 - :rfc:`2370`
192 :t:`The OSPF Opaque LSA Option R. Coltun. July 1998.`
193 - :rfc:`3101`
194 :t:`The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January 2003.`
195 - :rfc:`2740`
196 :t:`OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.`
197 - :rfc:`1771`
198 :t:`A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.`
199 - :rfc:`1965`
200 :t:`Autonomous System Confederations for BGP. P. Traina. June 1996.`
201 - :rfc:`1997`
202 :t:`BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.`
203 - :rfc:`2545`
204 :t:`Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P.
205 Marques, F. Dupont. March 1999.`
206 - :rfc:`2796`
207 :t:`BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R.
208 Chandrasekeran. June 1996.`
209 - :rfc:`2858`
210 :t:`Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D.
211 Katz. June 2000.`
212 - :rfc:`2842`
213 :t:`Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.`
214 - :rfc:`3137`
215 :t:`OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White, A. Zinin,
216 D. McPherson. June 2001`
217 - :rfc:`4447`
218 :t:`Pseudowire Setup and Maintenance Using the Label Distribution Protocol
219 (LDP), L. Martini, E. Rosen, N. El-Aawar, T. Smith, and G. Heron. April
220 2006.`
221 - :rfc:`4762`
222 :t:`Virtual Private LAN Service (VPLS) Using Label Distribution Protocol
223 (LDP) Signaling, M. Lasserre and V. Kompella. January 2007.`
224 - :rfc:`5036`
225 :t:`LDP Specification, L. Andersson, I. Minei, and B. Thomas. October 2007.`
226 - :rfc:`5561`
227 :t:`LDP Capabilities, B. Thomas, K. Raza, S. Aggarwal, R. Aggarwal, and
228 JL. Le Roux. July 2009.`
229 - :rfc:`5918`
230 :t:`Label Distribution Protocol (LDP) 'Typed Wildcard' Forward Equivalence
231 Class (FEC), R. Asati, I. Minei, and B. Thomas. August 2010.`
232 - :rfc:`5919`
233 :t:`Signaling LDP Label Advertisement Completion, R. Asati, P. Mohapatra,
234 E. Chen, and B. Thomas. August 2010.`
235 - :rfc:`6667`
236 :t:`LDP 'Typed Wildcard' Forwarding Equivalence Class (FEC) for PWid and
237 Generalized PWid FEC Elements, K. Raza, S. Boutros, and C. Pignataro. July
238 2012.`
239 - :rfc:`6720`
240 :t:`The Generalized TTL Security Mechanism (GTSM) for the Label Distribution
241 Protocol (LDP), C. Pignataro and R. Asati. August 2012.`
242 - :rfc:`7552`
243 :t:`Updates to LDP for IPv6, R. Asati, C. Pignataro, K. Raza, V. Manral,
244 and R. Papneja. June 2015.`
245
246 **When SNMP support is enabled, the following RFCs are also supported:**
247
248 - :rfc:`1227`
249 :t:`SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.`
250 - :rfc:`1657`
251 :t:`Definitions of Managed Objects for the Fourth Version of the Border
252 Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss, J. Chu, Editor.
253 July 1994.`
254 - :rfc:`1724`
255 :t:`RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.`
256 - :rfc:`1850`
257 :t:`OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
258 November 1995.`
259 - :rfc:`2741`
260 :t:`Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen. January 2000.`
261
262 How to get FRR
263 ==============
264
265 The official FRR website is located at |PACKAGE_URL| and contains further
266 information, as well as links to additional resources.
267
268 Several distributions provide packages for FRR. Check your distribution's
269 repositories to find out if a suitable version is available.
270
271 Mailing Lists
272 =============
273
274 .. index:: How to get in touch with FRR
275 .. index:: Contact information
276 .. index:: Mailing lists
277
278
279 Italicized lists are private.
280
281 +--------------------------------+------------------------------+
282 | Topic | List |
283 +================================+==============================+
284 | Development | dev@lists.frrouting.org |
285 +--------------------------------+------------------------------+
286 | Users & Operators | frog@lists.frrouting.org |
287 +--------------------------------+------------------------------+
288 | Announcements | announce@lists.frrouting.org |
289 +--------------------------------+------------------------------+
290 | *Security* | security@lists.frrouting.org |
291 +--------------------------------+------------------------------+
292 | *Technical Steering Committee* | tsc@lists.frrouting.org |
293 +--------------------------------+------------------------------+
294
295 The Development list is used to discuss and document general issues related to
296 project development and governance. The public `Slack`_ instance and weekly
297 technical meetings provide a higher bandwidth channel for discussions. The
298 results of such discussions are reflected in updates, as appropriate, to code
299 (i.e., merges), `GitHub issues`_ tracked issues, and for governance or process
300 changes, updates to the Development list and either this file or information
301 posted at `FRR`_.
302
303 .. index:: Bug Reports
304 .. index:: Bug hunting
305 .. index:: Found a bug?
306 .. index:: Reporting bugs
307 .. index:: Reporting software errors
308 .. index:: Errors in the software
309
310 .. _bug-reports:
311
312 Bug Reports
313 ===========
314
315 If you think you have found a bug, please file a bug report on our
316 `GitHub issues`_ page.
317
318 When you send a bug report, please be careful about the points below.
319
320 - Please note what kind of OS you are using. If you use the IPv6 stack
321 please note that as well.
322 - Please show us the results of `netstat -rn` and `ifconfig -a`.
323 Information from zebra's VTY command `show ip route` will also be
324 helpful.
325 - Please send your configuration file with the report. If you specify
326 arguments to the configure script please note that too.
327
328 Bug reports help us improve FRR and are very much appreciated.
329
330 .. _frr: |package-url|
331 .. _github: https://github.com/frrouting/frr/
332 .. _github issues: https://github.com/frrouting/frr/issues
333 .. _slack: https://frrouting.slack.com/