mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 07:56:29 +00:00
doc: clean up introductory user docs
* Update the list of protocol daemons from 5 to the current 13 * Rewrap and clean up formatting for lots of miscellaneous code blocks * Improve English in various spots * Update architecture description and diagram * Remove duplicate information on reporting bugs Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
db910447b8
commit
2da6ccc392
@ -4,20 +4,7 @@
|
|||||||
Basic Commands
|
Basic Commands
|
||||||
**************
|
**************
|
||||||
|
|
||||||
There are five routing daemons in use, and there is one manager daemon.
|
The following sections discuss commands common to all the routing daemons.
|
||||||
These daemons may be located on separate machines from the manager
|
|
||||||
daemon. Each of these daemons will listen on a particular port for
|
|
||||||
incoming VTY connections. The routing daemons are:
|
|
||||||
|
|
||||||
- *ripd*
|
|
||||||
- *ripngd*
|
|
||||||
- *ospfd*
|
|
||||||
- *ospf6d*
|
|
||||||
- *bgpd*
|
|
||||||
- *zebra*
|
|
||||||
|
|
||||||
The following sections discuss commands common to all the routing
|
|
||||||
daemons.
|
|
||||||
|
|
||||||
.. _config-commands:
|
.. _config-commands:
|
||||||
|
|
||||||
@ -33,9 +20,8 @@ Config Commands
|
|||||||
.. index:: Getting the herd running
|
.. index:: Getting the herd running
|
||||||
|
|
||||||
In a config file, you can write the debugging options, a vty's password,
|
In a config file, you can write the debugging options, a vty's password,
|
||||||
routing daemon configurations, a log file name, and so forth. This
|
routing daemon configurations, a log file name, and so forth. This information
|
||||||
information forms the initial command set for a routing beast as it is
|
forms the initial command set for a routing beast as it is starting.
|
||||||
starting.
|
|
||||||
|
|
||||||
Config files are generally found in |INSTALL_PREFIX_ETC|.
|
Config files are generally found in |INSTALL_PREFIX_ETC|.
|
||||||
|
|
||||||
@ -50,7 +36,6 @@ Basic Config Commands
|
|||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
.. index:: hostname HOSTNAME
|
.. index:: hostname HOSTNAME
|
||||||
|
|
||||||
.. clicmd:: hostname HOSTNAME
|
.. clicmd:: hostname HOSTNAME
|
||||||
|
|
||||||
Set hostname of the router.
|
Set hostname of the router.
|
||||||
@ -83,9 +68,9 @@ Basic Config Commands
|
|||||||
compatibility. The log trap command sets the current logging level for all
|
compatibility. The log trap command sets the current logging level for all
|
||||||
enabled logging destinations, and it sets the default for all future logging
|
enabled logging destinations, and it sets the default for all future logging
|
||||||
commands that do not specify a level. The normal default logging level is
|
commands that do not specify a level. The normal default logging level is
|
||||||
debugging. The ``no`` form of the command resets the default level for future
|
debugging. The ``no`` form of the command resets the default level for
|
||||||
logging commands to debugging, but it does not change the logging level of
|
future logging commands to debugging, but it does not change the logging
|
||||||
existing logging destinations.
|
level of existing logging destinations.
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: no log stdout [LEVEL]
|
single: no log stdout [LEVEL]
|
||||||
@ -95,12 +80,11 @@ Basic Config Commands
|
|||||||
|
|
||||||
Enable logging output to stdout. If the optional second argument specifying
|
Enable logging output to stdout. If the optional second argument specifying
|
||||||
the logging level is not present, the default logging level (typically
|
the logging level is not present, the default logging level (typically
|
||||||
debugging, but can be changed using the deprecated ``log trap`` command) will
|
debugging) will be used. The ``no`` form of the command disables logging to
|
||||||
be used. The ``no`` form of the command disables logging to stdout. The
|
stdout. The ``LEVEL`` argument must have one of these values: emergencies,
|
||||||
``LEVEL`` argument must have one of these values: emergencies, alerts,
|
alerts, critical, errors, warnings, notifications, informational, or
|
||||||
critical, errors, warnings, notifications, informational, or debugging. Note
|
debugging. Note that the existing code logs its most important messages with
|
||||||
that the existing code logs its most important messages with severity
|
severity ``errors``.
|
||||||
``errors``.
|
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: no log file [FILENAME [LEVEL]]
|
single: no log file [FILENAME [LEVEL]]
|
||||||
@ -109,19 +93,24 @@ Basic Config Commands
|
|||||||
.. clicmd:: [no] log file [FILENAME [LEVEL]]
|
.. clicmd:: [no] log file [FILENAME [LEVEL]]
|
||||||
|
|
||||||
If you want to log into a file, please specify ``filename`` as
|
If you want to log into a file, please specify ``filename`` as
|
||||||
in this example: ::
|
in this example:
|
||||||
|
|
||||||
log file /var/log/frr/bgpd.log informational
|
::
|
||||||
|
|
||||||
|
log file /var/log/frr/bgpd.log informational
|
||||||
|
|
||||||
If the optional second argument specifying the logging level is not present,
|
If the optional second argument specifying the logging level is not present,
|
||||||
the default logging level (typically debugging, but can be changed using the
|
the default logging level (typically debugging, but can be changed using the
|
||||||
deprecated ``log trap`` command) will be used. The ``no`` form of the command
|
deprecated ``log trap`` command) will be used. The ``no`` form of the command
|
||||||
disables logging to a file. *Note:* if you do not configure any file logging,
|
disables logging to a file.
|
||||||
and a daemon crashes due to a signal or an assertion failure, it will attempt
|
|
||||||
to save the crash information in a file named /var/tmp/frr.<daemon
|
.. note::
|
||||||
name>.crashlog. For security reasons, this will not happen if the file exists
|
|
||||||
already, so it is important to delete the file after reporting the crash
|
If you do not configure any file logging, and a daemon crashes due to a
|
||||||
information.
|
signal or an assertion failure, it will attempt to save the crash
|
||||||
|
information in a file named :file:`/var/tmp/frr.<daemon name>.crashlog`.
|
||||||
|
For security reasons, this will not happen if the file exists already, so
|
||||||
|
it is important to delete the file after reporting the crash information.
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: no log syslog [LEVEL]
|
single: no log syslog [LEVEL]
|
||||||
@ -142,12 +131,11 @@ Basic Config Commands
|
|||||||
|
|
||||||
Enable logging output to vty terminals that have enabled logging using the
|
Enable logging output to vty terminals that have enabled logging using the
|
||||||
``terminal monitor`` command. By default, monitor logging is enabled at the
|
``terminal monitor`` command. By default, monitor logging is enabled at the
|
||||||
debugging level, but this command (or the deprecated ``log trap`` command) can
|
debugging level, but this command (or the deprecated ``log trap`` command)
|
||||||
be used to change the monitor logging level. If the optional second argument
|
can be used to change the monitor logging level. If the optional second
|
||||||
specifying the logging level is not present, the default logging level
|
argument specifying the logging level is not present, the default logging
|
||||||
(typically debugging, but can be changed using the deprecated ``log trap``
|
level (typically debugging) will be used. The ``no`` form of the command
|
||||||
command) will be used. The ``no`` form of the command disables logging to
|
disables logging to terminal monitors.
|
||||||
terminal monitors.
|
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: no log facility [FACILITY]
|
single: no log facility [FACILITY]
|
||||||
@ -156,8 +144,8 @@ Basic Config Commands
|
|||||||
.. clicmd:: [no] log facility [FACILITY]
|
.. clicmd:: [no] log facility [FACILITY]
|
||||||
|
|
||||||
This command changes the facility used in syslog messages. The default
|
This command changes the facility used in syslog messages. The default
|
||||||
facility is ``daemon``. The ``no`` form of the command resets
|
facility is ``daemon``. The ``no`` form of the command resets the facility
|
||||||
the facility to the default ``daemon`` facility.
|
to the default ``daemon`` facility.
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: no log record-priority
|
single: no log record-priority
|
||||||
@ -179,67 +167,59 @@ Basic Config Commands
|
|||||||
|
|
||||||
.. clicmd:: [no] log timestamp precision [(0-6)]
|
.. clicmd:: [no] log timestamp precision [(0-6)]
|
||||||
|
|
||||||
This command sets the precision of log message timestamps to the given number
|
This command sets the precision of log message timestamps to the given
|
||||||
of digits after the decimal point. Currently, the value must be in the range
|
number of digits after the decimal point. Currently, the value must be in
|
||||||
0 to 6 (i.e. the maximum precision is microseconds). To restore the default
|
the range 0 to 6 (i.e. the maximum precision is microseconds). To restore
|
||||||
behavior (1-second accuracy), use the ``no`` form of the command, or set the
|
the default behavior (1-second accuracy), use the ``no`` form of the
|
||||||
precision explicitly to 0.
|
command, or set the precision explicitly to 0.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
log timestamp precision 3
|
log timestamp precision 3
|
||||||
|
|
||||||
In this example, the precision is set to provide timestamps with
|
In this example, the precision is set to provide timestamps with
|
||||||
millisecond accuracy.
|
millisecond accuracy.
|
||||||
|
|
||||||
.. index:: log commands
|
.. index:: log commands
|
||||||
|
|
||||||
.. clicmd:: log commands
|
.. clicmd:: log commands
|
||||||
|
|
||||||
This command enables the logging of all commands typed by a user to
|
This command enables the logging of all commands typed by a user to all
|
||||||
all enabled log destinations. The note that logging includes full
|
enabled log destinations. The note that logging includes full command lines,
|
||||||
command lines, including passwords. Once set, command logging can only
|
including passwords. Once set, command logging can only be turned off by
|
||||||
be turned off by restarting the daemon.
|
restarting the daemon.
|
||||||
|
|
||||||
.. index:: service password-encryption
|
.. index:: service password-encryption
|
||||||
|
|
||||||
.. clicmd:: service password-encryption
|
.. clicmd:: service password-encryption
|
||||||
|
|
||||||
Encrypt password.
|
Encrypt password.
|
||||||
|
|
||||||
.. index:: service advanced-vty
|
.. index:: service advanced-vty
|
||||||
|
|
||||||
.. clicmd:: service advanced-vty
|
.. clicmd:: service advanced-vty
|
||||||
|
|
||||||
Enable advanced mode VTY.
|
Enable advanced mode VTY.
|
||||||
|
|
||||||
.. index:: service terminal-length (0-512)
|
.. index:: service terminal-length (0-512)
|
||||||
|
|
||||||
.. clicmd:: service terminal-length (0-512)
|
.. clicmd:: service terminal-length (0-512)
|
||||||
|
|
||||||
Set system wide line configuration. This configuration command applies
|
Set system wide line configuration. This configuration command applies to
|
||||||
to all VTY interfaces.
|
all VTY interfaces.
|
||||||
|
|
||||||
.. index:: line vty
|
.. index:: line vty
|
||||||
|
|
||||||
.. clicmd:: line vty
|
.. clicmd:: line vty
|
||||||
|
|
||||||
Enter vty configuration mode.
|
Enter vty configuration mode.
|
||||||
|
|
||||||
.. index:: banner motd default
|
.. index:: banner motd default
|
||||||
|
|
||||||
.. clicmd:: banner motd default
|
.. clicmd:: banner motd default
|
||||||
|
|
||||||
Set default motd string.
|
Set default motd string.
|
||||||
|
|
||||||
.. index:: no banner motd
|
.. index:: no banner motd
|
||||||
|
|
||||||
.. clicmd:: no banner motd
|
.. clicmd:: no banner motd
|
||||||
|
|
||||||
No motd banner string will be printed.
|
No motd banner string will be printed.
|
||||||
|
|
||||||
.. index:: exec-timeout MINUTE [SECOND]
|
.. index:: exec-timeout MINUTE [SECOND]
|
||||||
|
|
||||||
.. clicmd:: exec-timeout MINUTE [SECOND]
|
.. clicmd:: exec-timeout MINUTE [SECOND]
|
||||||
|
|
||||||
Set VTY connection timeout value. When only one argument is specified
|
Set VTY connection timeout value. When only one argument is specified
|
||||||
@ -248,17 +228,17 @@ Basic Config Commands
|
|||||||
When timeout value is zero, it means no timeout.
|
When timeout value is zero, it means no timeout.
|
||||||
|
|
||||||
.. index:: no exec-timeout
|
.. index:: no exec-timeout
|
||||||
|
|
||||||
.. clicmd:: no exec-timeout
|
.. clicmd:: no exec-timeout
|
||||||
|
|
||||||
Do not perform timeout at all. This command is as same as *exec-timeout 0 0*.
|
Do not perform timeout at all. This command is as same as
|
||||||
|
``exec-timeout 0 0``.
|
||||||
|
|
||||||
.. index:: access-class ACCESS-LIST
|
.. index:: access-class ACCESS-LIST
|
||||||
|
|
||||||
.. clicmd:: access-class ACCESS-LIST
|
.. clicmd:: access-class ACCESS-LIST
|
||||||
|
|
||||||
Restrict vty connections with an access list.
|
Restrict vty connections with an access list.
|
||||||
|
|
||||||
|
|
||||||
.. _sample-config-file:
|
.. _sample-config-file:
|
||||||
|
|
||||||
Sample Config File
|
Sample Config File
|
||||||
@ -280,17 +260,17 @@ Below is a sample configuration file for the zebra daemon.
|
|||||||
!
|
!
|
||||||
|
|
||||||
|
|
||||||
'!' and '#' are comment characters. If the first character of the word
|
``!`` and ``#`` are comment characters. If the first character of the word is
|
||||||
is one of the comment characters then from the rest of the line forward
|
one of the comment characters then from the rest of the line forward will be
|
||||||
will be ignored as a comment.
|
ignored as a comment.
|
||||||
|
|
||||||
.. code-block:: frr
|
.. code-block:: frr
|
||||||
|
|
||||||
password zebra!password
|
password zebra!password
|
||||||
|
|
||||||
If a comment character is not the first character of the word, it's a
|
If a comment character is not the first character of the word, it's a normal
|
||||||
normal character. So in the above example '!' will not be regarded as a
|
character. So in the above example ``!`` will not be regarded as a comment and
|
||||||
comment and the password is set to 'zebra!password'.
|
the password is set to ``zebra!password``.
|
||||||
|
|
||||||
.. _terminal-mode-commands:
|
.. _terminal-mode-commands:
|
||||||
|
|
||||||
@ -298,62 +278,54 @@ Terminal Mode Commands
|
|||||||
======================
|
======================
|
||||||
|
|
||||||
.. index:: write terminal
|
.. index:: write terminal
|
||||||
|
|
||||||
.. clicmd:: write terminal
|
.. clicmd:: write terminal
|
||||||
|
|
||||||
Displays the current configuration to the vty interface.
|
Displays the current configuration to the vty interface.
|
||||||
|
|
||||||
.. index:: write file
|
.. index:: write file
|
||||||
|
|
||||||
.. clicmd:: write file
|
.. clicmd:: write file
|
||||||
|
|
||||||
Write current configuration to configuration file.
|
Write current configuration to configuration file.
|
||||||
|
|
||||||
.. index:: configure terminal
|
.. index:: configure terminal
|
||||||
|
|
||||||
.. clicmd:: configure terminal
|
.. clicmd:: configure terminal
|
||||||
|
|
||||||
Change to configuration mode. This command is the first step to
|
Change to configuration mode. This command is the first step to
|
||||||
configuration.
|
configuration.
|
||||||
|
|
||||||
.. index:: terminal length (0-512)
|
.. index:: terminal length (0-512)
|
||||||
|
|
||||||
.. clicmd:: terminal length (0-512)
|
.. clicmd:: terminal length (0-512)
|
||||||
|
|
||||||
Set terminal display length to ``(0-512)``. If length is 0, no
|
Set terminal display length to ``(0-512)``. If length is 0, no display
|
||||||
display control is performed.
|
control is performed.
|
||||||
|
|
||||||
.. index:: who
|
.. index:: who
|
||||||
|
|
||||||
.. clicmd:: who
|
.. clicmd:: who
|
||||||
|
|
||||||
Show a list of currently connected vty sessions.
|
Show a list of currently connected vty sessions.
|
||||||
|
|
||||||
.. index:: list
|
.. index:: list
|
||||||
|
|
||||||
.. clicmd:: list
|
.. clicmd:: list
|
||||||
|
|
||||||
List all available commands.
|
List all available commands.
|
||||||
|
|
||||||
.. index:: show version
|
.. index:: show version
|
||||||
|
|
||||||
.. clicmd:: show version
|
.. clicmd:: show version
|
||||||
|
|
||||||
Show the current version of |PACKAGE_NAME| and its build host information.
|
Show the current version of |PACKAGE_NAME| and its build host information.
|
||||||
|
|
||||||
.. index:: show logging
|
.. index:: show logging
|
||||||
|
|
||||||
.. clicmd:: show logging
|
.. clicmd:: show logging
|
||||||
|
|
||||||
Shows the current configuration of the logging system. This includes
|
Shows the current configuration of the logging system. This includes the
|
||||||
the status of all logging destinations.
|
status of all logging destinations.
|
||||||
|
|
||||||
.. index:: logmsg LEVEL MESSAGE
|
.. index:: logmsg LEVEL MESSAGE
|
||||||
|
|
||||||
.. clicmd:: logmsg LEVEL MESSAGE
|
.. clicmd:: logmsg LEVEL MESSAGE
|
||||||
|
|
||||||
Send a message to all logging destinations that are enabled for messages
|
Send a message to all logging destinations that are enabled for messages of
|
||||||
of the given severity.
|
the given severity.
|
||||||
|
|
||||||
|
|
||||||
.. _common-invocation-options:
|
.. _common-invocation-options:
|
||||||
|
|
||||||
@ -382,16 +354,16 @@ These options apply to all |PACKAGE_NAME| daemons.
|
|||||||
to implement commands such as ``.../init.d/zebra status``,
|
to implement commands such as ``.../init.d/zebra status``,
|
||||||
``.../init.d/zebra restart`` or ``.../init.d/zebra stop``.
|
``.../init.d/zebra restart`` or ``.../init.d/zebra stop``.
|
||||||
|
|
||||||
The file name is an run-time option rather than a configure-time option
|
The file name is an run-time option rather than a configure-time option so
|
||||||
so that multiple routing daemons can be run simultaneously. This is
|
that multiple routing daemons can be run simultaneously. This is useful when
|
||||||
useful when using |PACKAGE_NAME| to implement a routing looking glass. One
|
using |PACKAGE_NAME| to implement a routing looking glass. One machine can
|
||||||
machine can be used to collect differing routing views from differing
|
be used to collect differing routing views from differing points in the
|
||||||
points in the network.
|
network.
|
||||||
|
|
||||||
.. option:: -A, --vty_addr <address>
|
.. option:: -A, --vty_addr <address>
|
||||||
|
|
||||||
Set the VTY local address to bind to. If set, the VTY socket will only
|
Set the VTY local address to bind to. If set, the VTY socket will only be
|
||||||
be bound to this address.
|
bound to this address.
|
||||||
|
|
||||||
.. option:: -P, --vty_port <port>
|
.. option:: -P, --vty_port <port>
|
||||||
|
|
||||||
@ -428,15 +400,17 @@ the following command line option at daemon startup:
|
|||||||
This option is available on all daemons, though some daemons may not have
|
This option is available on all daemons, though some daemons may not have
|
||||||
any modules available to be loaded.
|
any modules available to be loaded.
|
||||||
|
|
||||||
|
|
||||||
The SNMP Module
|
The SNMP Module
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
If SNMP is enabled during compile-time and installed as part of the package,
|
If SNMP is enabled during compile-time and installed as part of the package,
|
||||||
the ``snmp`` module can be loaded for the *zebra*, *bgpd*, *ospfd*, *ospf6d*
|
the ``snmp`` module can be loaded for the *Zebra*, *bgpd*, *ospfd*, *ospf6d*
|
||||||
and *ripd* daemons.
|
and *ripd* daemons.
|
||||||
|
|
||||||
The module ignores any options passed to it. Refer to :ref:`snmp-support`
|
The module ignores any options passed to it. Refer to :ref:`snmp-support` for
|
||||||
for information on its usage.
|
information on its usage.
|
||||||
|
|
||||||
|
|
||||||
The FPM Module
|
The FPM Module
|
||||||
--------------
|
--------------
|
||||||
@ -450,6 +424,7 @@ specifying the encapsulation to use. ``Netlink`` is the default, and
|
|||||||
``protobuf`` may not be available if the module was built without protobuf
|
``protobuf`` may not be available if the module was built without protobuf
|
||||||
support. Refer to :ref:`zebra-fib-push-interface` for more information.
|
support. Refer to :ref:`zebra-fib-push-interface` for more information.
|
||||||
|
|
||||||
|
|
||||||
.. _virtual-terminal-interfaces:
|
.. _virtual-terminal-interfaces:
|
||||||
|
|
||||||
Virtual Terminal Interfaces
|
Virtual Terminal Interfaces
|
||||||
@ -458,6 +433,7 @@ Virtual Terminal Interfaces
|
|||||||
VTY -- Virtual Terminal [aka TeletYpe] Interface is a command line
|
VTY -- Virtual Terminal [aka TeletYpe] Interface is a command line
|
||||||
interface (CLI) for user interaction with the routing daemon.
|
interface (CLI) for user interaction with the routing daemon.
|
||||||
|
|
||||||
|
|
||||||
.. _vty-overview:
|
.. _vty-overview:
|
||||||
|
|
||||||
VTY Overview
|
VTY Overview
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
.. _bugs:
|
.. index:: Bug Reports
|
||||||
|
.. index:: Reporting bugs
|
||||||
|
|
||||||
|
.. _bug-reports:
|
||||||
|
|
||||||
**************
|
**************
|
||||||
Reporting Bugs
|
Reporting Bugs
|
||||||
|
@ -4,19 +4,19 @@
|
|||||||
Overview
|
Overview
|
||||||
********
|
********
|
||||||
|
|
||||||
`FRR`_ is a routing software package that provides TCP/IP based
|
`FRR`_ is a routing software package that provides TCP/IP based routing
|
||||||
routing services with routing protocols support such as RIPv1, RIPv2, RIPng,
|
services with routing protocols support such as RIPv1, RIPv2, RIPng, OSPFv2,
|
||||||
OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (:ref:`supported-rfcs`). FRR also
|
OSPFv3, IS-IS, BGP-4, and BGP-4+ (:ref:`supported-rfcs`). FRR also supports
|
||||||
supports special BGP Route Reflector and Route Server behavior. In addition to
|
special BGP Route Reflector and Route Server behavior. In addition to
|
||||||
traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
|
traditional IPv4 routing protocols, FRR also supports IPv6 routing protocols.
|
||||||
With SNMP daemon which supports SMUX and AgentX protocol, FRR provides routing
|
With SNMP daemon which supports SMUX and AgentX protocol, FRR provides routing
|
||||||
protocol MIBs (:ref:`snmp-support`).
|
protocol MIBs (:ref:`snmp-support`).
|
||||||
|
|
||||||
FRR uses an advanced software architecture to provide you with a high
|
FRR uses an advanced software architecture to provide you with a high quality,
|
||||||
quality, multi server routing engine. FRR has an interactive user
|
multi server routing engine. FRR has an interactive user interface for each
|
||||||
interface for each routing protocol and supports common client commands.
|
routing protocol and supports common client commands. Due to this design, you
|
||||||
Due to this design, you can add new protocol daemons to FRR easily. You
|
can add new protocol daemons to FRR easily. You can use FRR library as your
|
||||||
can use FRR library as your program's client user interface.
|
program's client user interface.
|
||||||
|
|
||||||
FRR is distributed under the GNU General Public License.
|
FRR is distributed under the GNU General Public License.
|
||||||
|
|
||||||
@ -27,43 +27,41 @@ FRR is a fork of `Quagga <http://www.quagga.net/>`_.
|
|||||||
About FRR
|
About FRR
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Today, TCP/IP networks are covering all of the world. The Internet has
|
Today, TCP/IP networks are covering all of the world. The Internet has been
|
||||||
been deployed in many countries, companies, and to the home. When you
|
deployed in many countries, companies, and to the home. When you connect to
|
||||||
connect to the Internet your packet will pass many routers which have TCP/IP
|
the Internet your packet will pass many routers which have TCP/IP routing
|
||||||
routing functionality.
|
functionality.
|
||||||
|
|
||||||
A system with FRR installed acts as a dedicated router. With FRR,
|
A system with FRR installed acts as a dedicated router. With FRR, your machine
|
||||||
your machine exchanges routing information with other routers using routing
|
exchanges routing information with other routers using routing protocols. FRR
|
||||||
protocols. FRR uses this information to update the kernel routing table
|
uses this information to update the kernel routing table so that the right data
|
||||||
so that the right data goes to the right place. You can dynamically change
|
goes to the right place. You can dynamically change the configuration and you
|
||||||
the configuration and you may view routing table information from the FRR
|
may view routing table information from the FRR terminal interface.
|
||||||
terminal interface.
|
|
||||||
|
|
||||||
Adding to routing protocol support, FRR can setup interface's flags,
|
Adding to routing protocol support, FRR can setup interface's flags,
|
||||||
interface's address, static routes and so on. If you have a small network,
|
interface's address, static routes and so on. If you have a small network, or
|
||||||
or a stub network, or xDSL connection, configuring the FRR routing
|
a stub network, or xDSL connection, configuring the FRR routing software is
|
||||||
software is very easy. The only thing you have to do is to set up the
|
very easy. The only thing you have to do is to set up the interfaces and put a
|
||||||
interfaces and put a few commands about static routes and/or default routes.
|
few commands about static routes and/or default routes. If the network is
|
||||||
If the network is rather large, or if the network structure changes
|
rather large, or if the network structure changes frequently, you will want to
|
||||||
frequently, you will want to take advantage of FRR's dynamic routing
|
take advantage of FRR's dynamic routing protocol support for protocols such as
|
||||||
protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
|
RIP, OSPF, IS-IS or BGP.
|
||||||
|
|
||||||
Traditionally, UNIX based router configuration is done by
|
Traditionally, UNIX based router configuration is done by *ifconfig* and
|
||||||
*ifconfig* and *route* commands. Status of routing
|
*route* commands. Status of routing table is displayed by *netstat* utility.
|
||||||
table is displayed by *netstat* utility. Almost of these commands
|
Almost of these commands work only if the user has root privileges. FRR has a
|
||||||
work only if the user has root privileges. FRR has a different system
|
different system administration method. There are two user modes in FRR. One
|
||||||
administration method. There are two user modes in FRR. One is normal
|
is normal mode, the other is enable mode. Normal mode user can only view
|
||||||
mode, the other is enable mode. Normal mode user can only view system
|
system status, enable mode user can change system configuration. This UNIX
|
||||||
status, enable mode user can change system configuration. This UNIX account
|
account independent feature will be great help to the router administrator.
|
||||||
independent feature will be great help to the router administrator.
|
|
||||||
|
|
||||||
Currently, FRR supports common unicast routing protocols, that is BGP,
|
Currently, FRR supports common unicast routing protocols, that is BGP, OSPF,
|
||||||
OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
|
RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
|
||||||
currently being prepared for merging. Implementations of BFD and PIM-SSM
|
currently being prepared for merging. Implementations of BFD and PIM-SSM
|
||||||
(IPv4) also exist, but are not actively being worked on.
|
(IPv4) also exist, but are not actively being worked on.
|
||||||
|
|
||||||
The ultimate goal of the FRR project is making a productive, quality, free
|
The ultimate goal of the FRR project is making a production-grade, high
|
||||||
TCP/IP routing software package.
|
quality, featureful and free IP routing software suite.
|
||||||
|
|
||||||
|
|
||||||
System Architecture
|
System Architecture
|
||||||
@ -75,79 +73,61 @@ System Architecture
|
|||||||
|
|
||||||
.. index:: Software internals
|
.. index:: Software internals
|
||||||
|
|
||||||
Traditional routing software is made as a one process program which
|
Traditional routing software is made as a one process program which provides
|
||||||
provides all of the routing protocol functionalities. FRR takes a
|
all of the routing protocol functionalities. FRR takes a different approach.
|
||||||
different approach. It is made from a collection of several daemons that
|
FRR is a suite of daemons that work together to build the routing table. There
|
||||||
work together to build the routing table. There may be several
|
is a daemon for each major supported protocol as well as a middleman daemon
|
||||||
protocol-specific routing daemons and zebra the kernel routing manager.
|
(*Zebra*) which serves as the broker between these daemons and the kernel.
|
||||||
|
|
||||||
The *ripd* daemon handles the RIP protocol, while
|
This architecture allows for high resiliency, since an error, crash or exploit
|
||||||
*ospfd* is a daemon which supports OSPF version 2.
|
in one protocol daemon will generally not affect the others. It is also
|
||||||
*bgpd* supports the BGP-4 protocol. For changing the kernel
|
flexible and extensible since the modularity makes it easy to implement new
|
||||||
routing table and for redistribution of routes between different routing
|
protocols and tie them into the suite.
|
||||||
protocols, there is a kernel routing table manager *zebra* daemon.
|
|
||||||
It is easy to add a new routing protocol daemons to the entire routing
|
|
||||||
system without affecting any other software. You need to run only the
|
|
||||||
protocol daemon associated with routing protocols in use. Thus, user may
|
|
||||||
run a specific daemon and send routing reports to a central routing console.
|
|
||||||
|
|
||||||
There is no need for these daemons to be running on the same machine. You
|
An illustration of the large scale architecture is given below.
|
||||||
can even run several same protocol daemons on the same machine. This
|
|
||||||
architecture creates new possibilities for the routing system.
|
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
+----+ +----+ +-----+ +-----+
|
+----+ +----+ +-----+ +----+ +----+ +----+ +-----+
|
||||||
|bgpd| |ripd| |ospfd| |zebra|
|
|bgpd| |ripd| |ospfd| |ldpd| |pbrd| |pimd| |.....|
|
||||||
+----+ +----+ +-----+ +-----+
|
+----+ +----+ +-----+ +----+ +----+ +----+ +-----+
|
||||||
|
|
| | | | | | |
|
||||||
+---------------------------|--+
|
+----v-------v--------v-------v-------v-------v--------v
|
||||||
| v |
|
| |
|
||||||
| UNIX Kernel routing table |
|
| Zebra |
|
||||||
| |
|
| |
|
||||||
+------------------------------+
|
+------------------------------------------------------+
|
||||||
|
| | |
|
||||||
FRR System Architecture
|
| | |
|
||||||
|
+------v------+ +---------v--------+ +------v------+
|
||||||
|
| | | | | |
|
||||||
|
| *NIX Kernel | | Remote dataplane | | ........... |
|
||||||
|
| | | | | |
|
||||||
|
+-------------+ +------------------+ +-------------+
|
||||||
|
|
||||||
|
|
||||||
Multi-process architecture brings extensibility, modularity and
|
The multi-process architecture brings extensibility, modularity and
|
||||||
maintainability. At the same time it also brings many configuration files
|
maintainability. At the same time it also brings many configuration files and
|
||||||
and terminal interfaces. Each daemon has it's own configuration file and
|
terminal interfaces. Each daemon has its own configuration file and terminal
|
||||||
terminal interface. When you configure a static route, it must be done in
|
interface. When you configure a static route, it must be done in the *Zebra*
|
||||||
*zebra* configuration file. When you configure BGP network it must
|
configuration file. When you configure BGP network it must be done in the
|
||||||
be done in *bgpd* configuration file. This can be a very annoying
|
*bgpd* configuration file. This can become difficult to manage. To resolve the
|
||||||
thing. To resolve the problem, FRR provides integrated user interface
|
problem, FRR provides integrated user interface shell called *vtysh*. *vtysh*
|
||||||
shell called *vtysh*. *vtysh* connects to each daemon with
|
connects to each daemon with UNIX domain socket and then works as a proxy for
|
||||||
UNIX domain socket and then works as a proxy for user input.
|
user input.
|
||||||
|
|
||||||
FRR was planned to use multi-threaded mechanism when it runs with a
|
|
||||||
kernel that supports multi-threads. But at the moment, the thread library
|
|
||||||
which comes with GNU/Linux or FreeBSD has some problems with running
|
|
||||||
reliable services such as routing software, so we don't use threads at all.
|
|
||||||
Instead we use the *select(2)* system call for multiplexing the
|
|
||||||
events.
|
|
||||||
|
|
||||||
|
|
||||||
Supported Platforms
|
Supported Platforms
|
||||||
===================
|
===================
|
||||||
|
|
||||||
.. index:: Supported platforms
|
.. index:: Supported platforms
|
||||||
|
|
||||||
.. index:: FRR on other systems
|
.. index:: FRR on other systems
|
||||||
|
|
||||||
.. index:: Compatibility with other systems
|
.. index:: Compatibility with other systems
|
||||||
|
|
||||||
.. index:: Operating systems that support FRR
|
.. index:: Operating systems that support FRR
|
||||||
|
|
||||||
Currently FRR supports GNU/Linux and BSD. Porting FRR
|
Currently FRR supports GNU/Linux and BSD. Porting FRR to other platforms is not
|
||||||
to other platforms is not too difficult as platform dependent code should
|
too difficult as platform dependent code should be mostly limited to the
|
||||||
most be limited to the *zebra* daemon. Protocol daemons are mostly
|
*Zebra* daemon. Protocol daemons are largely platform independent. Please let
|
||||||
platform independent. Please let us know when you find out FRR runs on a
|
us know if you can get FRR to run on a platform which is not listed below:
|
||||||
platform which is not listed below.
|
|
||||||
|
|
||||||
The list of officially supported platforms are listed below. Note that
|
|
||||||
FRR may run correctly on other platforms, and may run with partial
|
|
||||||
functionality on further platforms.
|
|
||||||
|
|
||||||
- GNU/Linux
|
- GNU/Linux
|
||||||
- FreeBSD
|
- FreeBSD
|
||||||
@ -156,28 +136,51 @@ functionality on further platforms.
|
|||||||
|
|
||||||
Versions of these platforms that are older than around 2 years from the point
|
Versions of these platforms that are older than around 2 years from the point
|
||||||
of their original release (in case of GNU/Linux, this is since the kernel's
|
of their original release (in case of GNU/Linux, this is since the kernel's
|
||||||
release on https://kernel.org/) may need some work. Similarly, the following platforms
|
release on https://kernel.org/) may need some work. Similarly, the following
|
||||||
may work with some effort:
|
platforms may work with some effort:
|
||||||
|
|
||||||
- Solaris
|
- Solaris
|
||||||
- MacOS
|
- MacOS
|
||||||
|
|
||||||
Also note that, in particular regarding proprietary platforms, compiler
|
Recent versions of the following compilers are well tested:
|
||||||
and C library choice will affect FRR. Only recent versions of the
|
|
||||||
following C compilers are well-tested:
|
|
||||||
|
|
||||||
- GNU's GCC
|
- GNU's GCC
|
||||||
- LLVM's clang
|
- LLVM's Clang
|
||||||
- Intel's ICC
|
- Intel's ICC
|
||||||
|
|
||||||
|
.. _supported-protocols:
|
||||||
|
|
||||||
|
Supported Protocols & RFCs
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The following well-known protocols are supported:
|
||||||
|
|
||||||
|
- BGP
|
||||||
|
- Babel
|
||||||
|
- EIGRP
|
||||||
|
- IS-IS
|
||||||
|
- LDP
|
||||||
|
- NHRP
|
||||||
|
- OSPFv2
|
||||||
|
- OSPFv3
|
||||||
|
- PIM
|
||||||
|
- RIP
|
||||||
|
- RIPNG
|
||||||
|
|
||||||
|
The following technologies are supported as well:
|
||||||
|
|
||||||
|
- PBR (Policy Based Routing)
|
||||||
|
- VNC (Virtual Network Control)
|
||||||
|
|
||||||
.. _supported-rfcs:
|
.. _supported-rfcs:
|
||||||
|
|
||||||
Supported RFCs
|
Supported RFCs
|
||||||
==============
|
--------------
|
||||||
|
|
||||||
FRR implements the following RFCs:
|
FRR implements the following RFCs:
|
||||||
|
|
||||||
|
.. note:: This list is incomplete.
|
||||||
|
|
||||||
- :rfc:`1058`
|
- :rfc:`1058`
|
||||||
:t:`Routing Information Protocol. C.L. Hedrick. Jun-01-1988.`
|
:t:`Routing Information Protocol. C.L. Hedrick. Jun-01-1988.`
|
||||||
- :rfc:`2082`
|
- :rfc:`2082`
|
||||||
@ -300,32 +303,10 @@ results of such discussions are reflected in updates, as appropriate, to code
|
|||||||
changes, updates to the Development list and either this file or information
|
changes, updates to the Development list and either this file or information
|
||||||
posted at `FRR`_.
|
posted at `FRR`_.
|
||||||
|
|
||||||
.. index:: Bug Reports
|
|
||||||
.. index:: Bug hunting
|
|
||||||
.. index:: Found a bug?
|
|
||||||
.. index:: Reporting bugs
|
|
||||||
.. index:: Reporting software errors
|
|
||||||
.. index:: Errors in the software
|
|
||||||
|
|
||||||
.. _bug-reports:
|
|
||||||
|
|
||||||
Bug Reports
|
Bug Reports
|
||||||
===========
|
===========
|
||||||
|
|
||||||
If you think you have found a bug, please file a bug report on our
|
For information on reporting bugs, please see :ref:`bug-reports`.
|
||||||
`GitHub issues`_ page.
|
|
||||||
|
|
||||||
When you send a bug report, please be careful about the points below.
|
|
||||||
|
|
||||||
- Please note what kind of OS you are using. If you use the IPv6 stack
|
|
||||||
please note that as well.
|
|
||||||
- Please show us the results of `netstat -rn` and `ifconfig -a`.
|
|
||||||
Information from zebra's VTY command `show ip route` will also be
|
|
||||||
helpful.
|
|
||||||
- Please send your configuration file with the report. If you specify
|
|
||||||
arguments to the configure script please note that too.
|
|
||||||
|
|
||||||
Bug reports help us improve FRR and are very much appreciated.
|
|
||||||
|
|
||||||
.. _frr: |package-url|
|
.. _frr: |package-url|
|
||||||
.. _github: https://github.com/frrouting/frr/
|
.. _github: https://github.com/frrouting/frr/
|
||||||
|
Loading…
Reference in New Issue
Block a user