diff options
Diffstat (limited to 'doc/user')
| -rw-r--r-- | doc/user/basic.rst | 61 | ||||
| -rw-r--r-- | doc/user/bfd.rst | 302 | ||||
| -rw-r--r-- | doc/user/bgp.rst | 15 | ||||
| -rw-r--r-- | doc/user/index.rst | 1 | ||||
| -rw-r--r-- | doc/user/installation.rst | 4 | ||||
| -rw-r--r-- | doc/user/overview.rst | 8 | ||||
| -rw-r--r-- | doc/user/setup.rst | 3 |
7 files changed, 394 insertions, 0 deletions
diff --git a/doc/user/basic.rst b/doc/user/basic.rst index cb46080055..da22bb2f86 100644 --- a/doc/user/basic.rst +++ b/doc/user/basic.rst @@ -320,6 +320,67 @@ Terminal Mode Commands Shows the current configuration of the logging system. This includes the status of all logging destinations. +.. index:: show memory +.. clicmd:: show memory + + Show information on how much memory is used for which specific things in + |PACKAGE_NAME|. Output may vary depending on system capabilities but will + generally look something like this: + + :: + + frr# show memory + System allocator statistics: + Total heap allocated: 1584 KiB + Holding block headers: 0 bytes + Used small blocks: 0 bytes + Used ordinary blocks: 1484 KiB + Free small blocks: 2096 bytes + Free ordinary blocks: 100 KiB + Ordinary blocks: 2 + Small blocks: 60 + Holding blocks: 0 + (see system documentation for 'mallinfo' for meaning) + --- qmem libfrr --- + Buffer : 3 24 72 + Buffer data : 1 4120 4120 + Host config : 3 (variably sized) 72 + Command Tokens : 3427 72 247160 + Command Token Text : 2555 (variably sized) 83720 + Command Token Help : 2555 (variably sized) 61720 + Command Argument : 2 (variably sized) 48 + Command Argument Name : 641 (variably sized) 15672 + [...] + --- qmem Label Manager --- + --- qmem zebra --- + ZEBRA VRF : 1 912 920 + Route Entry : 11 80 968 + Static route : 1 192 200 + RIB destination : 8 48 448 + RIB table info : 4 16 96 + Nexthop tracking object : 1 200 200 + Zebra Name Space : 1 312 312 + --- qmem Table Manager --- + + To understand system allocator statistics, refer to your system's + :manpage:`mallinfo(3)` man page. + + Below these statistics, statistics on individual memory allocation types + in |PACKAGE_NAME| (so-called `MTYPEs`) is printed: + + * the first column of numbers is the current count of allocations made for + the type (the number decreases when items are freed.) + * the second column is the size of each item. This is only available if + allocations on a type are always made with the same size. + * the third column is the total amount of memory allocated for the + particular type, including padding applied by malloc. This means that + the number may be larger than the first column multiplied by the second. + Overhead incurred by malloc's bookkeeping is not included in this, and + the column may be missing if system support is not available. + + When executing this command from ``vtysh``, each of the daemons' memory + usage is printed sequentially. + .. index:: logmsg LEVEL MESSAGE .. clicmd:: logmsg LEVEL MESSAGE diff --git a/doc/user/bfd.rst b/doc/user/bfd.rst new file mode 100644 index 0000000000..0e0fd23ece --- /dev/null +++ b/doc/user/bfd.rst @@ -0,0 +1,302 @@ +.. _bfd: + +********************************** +Bidirectional Forwarding Detection +********************************** + +:abbr:`BFD (Bidirectional Forwarding Detection)` stands for +Bidirectional Forwarding Detection and it is described and extended by +the following RFCs: + +* :rfc:`5880` +* :rfc:`5881` +* :rfc:`5883` + +Currently, there are two implementations of the BFD commands in FRR: + +* :abbr:`PTM (Prescriptive Topology Manager)`: an external daemon which + implements BFD; +* ``bfdd``: a BFD implementation that is able to talk with remote peers; + +This document will focus on the later implementation: *bfdd*. + + +.. _bfd-starting: + +Starting BFD +============ + +*bfdd* default configuration file is :file:`bfdd.conf`. *bfdd* searches +the current directory first then |INSTALL_PREFIX_ETC|/bfdd.conf. All of +*bfdd*'s command must be configured in :file:`bfdd.conf`. + +*bfdd* specific invocation options are described below. Common options +may also be specified (:ref:`common-invocation-options`). + +.. program:: bfdd + +.. option:: --bfdctl <unix-socket> + + Set the BFD daemon control socket location. If using a non-default + socket location. + + /usr/lib/frr/bfdd --bfdctl /tmp/bfdd.sock + + + The default UNIX socket location is: + + #define BFDD_CONTROL_SOCKET "|INSTALL_PREFIX_STATE|/bfdd.sock" + + +.. _bfd-commands: + +BFDd Commands +============= + +.. index:: bfd +.. clicmd:: bfd + + Opens the BFD daemon configuration node. + +.. index:: peer <A.B.C.D|X:X::X:X> [{multihop|local-address <A.B.C.D|X:X::X:X>|interface IFNAME|vrf NAME}] +.. clicmd:: peer <A.B.C.D|X:X::X:X> [{multihop|local-address <A.B.C.D|X:X::X:X>|interface IFNAME|vrf NAME}] + + Creates and configures a new BFD peer to listen and talk to. + + `multihop` tells the BFD daemon that we should expect packets with + TTL less than 254 (because it will take more than one hop) and to + listen on the multihop port (4784). When using multi-hop mode + `echo-mode` will not work (see :rfc:`5883` section 3). + + `local-address` provides a local address that we should bind our + peer listener to and the address we should use to send the packets. + This option is mandatory for IPv6. + + `interface` selects which interface we should use. This option + conflicts with `vrf`. + + `vrf` selects which domain we want to use. + +.. index:: no peer <A.B.C.D|X:X::X:X>$peer [{multihop|local-address <A.B.C.D|X:X::X:X>$local|interface IFNAME$ifname|vrf NAME$vrfname}] +.. clicmd:: no peer <A.B.C.D|X:X::X:X>$peer [{multihop|local-address <A.B.C.D|X:X::X:X>$local|interface IFNAME$ifname|vrf NAME$vrfname}] + + Stops and removes the selected peer. + +.. index:: show bfd peers [json] +.. clicmd:: show bfd peers [json] + + Show all configured BFD peers information and current status. + +.. index:: show bfd peer <WORD$label|<A.B.C.D|X:X::X:X>$peer [{multihop|local-address <A.B.C.D|X:X::X:X>$local|interface IFNAME$ifname|vrf NAME$vrfname}]> [json] +.. clicmd:: show bfd peer <WORD$label|<A.B.C.D|X:X::X:X>$peer [{multihop|local-address <A.B.C.D|X:X::X:X>$local|interface IFNAME$ifname|vrf NAME$vrfname}]> [json] + + Show status for a specific BFD peer. + + +.. _bfd-peer-config: + +Peer Configurations +------------------- + +.. index:: detect-multiplier (2-255) +.. clicmd:: detect-multiplier (2-255) + + Configures the detection multiplier to determine packet loss. The + remote transmission interval will be multiplied by this value to + determine the connection loss detection timer. The default value is + 3. + + Example: when the local system has `detect-multiplier 3` and the + remote system has `transmission interval 300`, the local system will + detect failures only after 900 milliseconds without receiving + packets. + +.. index:: receive-interval (10-60000) +.. clicmd:: receive-interval (10-60000) + + Configures the minimum interval that this system is capable of + receiving control packets. The default value is 300 milliseconds. + +.. index:: transmit-interval (10-60000) +.. clicmd:: transmit-interval (10-60000) + + The minimum transmission interval (less jitter) that this system + wants to use to send BFD control packets. + +.. index:: echo-interval (10-60000) +.. clicmd:: echo-interval (10-60000) + + Configures the minimal echo receive transmission interval that this + system is capable of handling. + +.. index:: [no] echo-mode +.. clicmd:: [no] echo-mode + + Enables or disables the echo transmission mode. This mode is disabled + by default. + + It is recommended that the transmission interval of control packets + to be increased after enabling echo-mode to reduce bandwidth usage. + For example: `transmission-interval 2000`. + + Echo mode is not supported on multi-hop setups (see :rfc:`5883` + section 3). + +.. index:: [no] shutdown +.. clicmd:: [no] shutdown + + Enables or disables the peer. When the peer is disabled an + 'administrative down' message is sent to the remote peer. + +.. index:: label WORD +.. clicmd:: label WORD + + Labels a peer with the provided word. This word can be referenced + later on other daemons to refer to a specific peer. + + +.. _bfd-bgp-peer-config: + +BGP BFD Configuration +--------------------- + +.. index:: neighbor <A.B.C.D|X:X::X:X|WORD> bfd +.. clicmd:: neighbor <A.B.C.D|X:X::X:X|WORD> bfd + + Listen for BFD events registered on the same target as this BGP + neighbor. When BFD peer goes down it immediately asks BGP to shutdown + the connection with its neighbor and, when it goes back up, notify + BGP to try to connect to it. + +.. index:: no neighbor <A.B.C.D|X:X::X:X|WORD> bfd +.. clicmd:: no neighbor <A.B.C.D|X:X::X:X|WORD> bfd + + Removes any notification registration for this neighbor. + + +.. _bfd-configuration: + +Configuration +============= + +Before applying ``bfdd`` rules to integrated daemons (like BGPd), we must +create the corresponding peers inside the ``bfd`` configuration node. + +Here is an example of BFD configuration: + +:: + + bfd + peer 192.168.0.1 + label home-peer + no shutdown + ! + ! + router bgp 65530 + neighbor 192.168.0.1 remote-as 65531 + neighbor 192.168.0.1 bfd + neighbor 192.168.0.2 remote-as 65530 + neighbor 192.168.0.2 bfd + neighbor 192.168.0.3 remote-as 65532 + neighbor 192.168.0.3 bfd + ! + +Peers can be identified by its address (use ``multihop`` when you need +to specify a multi hop peer) or can be specified manually by a label. + +Here are the available peer configurations: + +:: + + bfd + + ! configure a peer on an specific interface + peer 192.168.0.1 interface eth0 + no shutdown + ! + + ! configure a multihop peer + peer 192.168.0.2 multihop local-address 192.168.0.3 + shutdown + ! + + ! configure a peer in a different vrf + peer 192.168.0.3 vrf foo + shutdown + ! + + ! configure a peer with every option possible + peer 192.168.0.4 + label peer-label + detect-multiplier 50 + receive-interval 60000 + transmit-interval 3000 + shutdown + ! + + ! remove a peer + no peer 192.168.0.3 vrf foo + + +.. _bfd-status: + +Status +====== + +You can inspect the current BFD peer status with the following commands: + +:: + + frr# show bfd peers + BFD Peers: + peer 192.168.0.1 + ID: 1 + Remote ID: 1 + Status: up + Uptime: 1 minute(s), 51 second(s) + Diagnostics: ok + Remote diagnostics: ok + Local timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: disabled + Remote timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: 50ms + + peer 192.168.1.1 + label: router3-peer + ID: 2 + Remote ID: 2 + Status: up + Uptime: 1 minute(s), 53 second(s) + Diagnostics: ok + Remote diagnostics: ok + Local timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: disabled + Remote timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: 50ms + + frr# show bfd peer 192.168.1.1 + BFD Peer: + peer 192.168.1.1 + label: router3-peer + ID: 2 + Remote ID: 2 + Status: up + Uptime: 3 minute(s), 4 second(s) + Diagnostics: ok + Remote diagnostics: ok + Local timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: disabled + Remote timers: + Receive interval: 300ms + Transmission interval: 300ms + Echo transmission interval: 50ms diff --git a/doc/user/bgp.rst b/doc/user/bgp.rst index 734c9cabd0..f1209c2172 100644 --- a/doc/user/bgp.rst +++ b/doc/user/bgp.rst @@ -879,6 +879,14 @@ Peer Filtering Peer Groups ^^^^^^^^^^^ +Peer groups are used to help improve scaling by generating the same +update information to all members of a peer group. Note that this means +that the routes generated by a member of a peer group will be sent back +to that originating peer with the originator identifier attribute set to +indicated the originating peer. All peers not associated with a +specific peer group are treated as belonging to a default peer group, +and will share updates. + .. index:: neighbor WORD peer-group .. clicmd:: neighbor WORD peer-group @@ -889,6 +897,13 @@ Peer Groups This command bind specific peer to peer group WORD. +.. index:: neighbor PEER solo +.. clicmd:: neighbor PEER solo + + This command is used to indicate that routes advertised by the peer + should not be reflected back to the peer. This command only is only + meaningful when there is a single peer defined in the peer-group. + Capability Negotiation ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/user/index.rst b/doc/user/index.rst index 14688e05d8..5818551343 100644 --- a/doc/user/index.rst +++ b/doc/user/index.rst @@ -39,6 +39,7 @@ Protocols :maxdepth: 2 zebra + bfd bgp babeld ldpd diff --git a/doc/user/installation.rst b/doc/user/installation.rst index 158e2c8595..3da5a6cd30 100644 --- a/doc/user/installation.rst +++ b/doc/user/installation.rst @@ -103,6 +103,10 @@ options from the list below. Do not build bgpd. +.. option:: --disable-bfdd + + Do not build bfdd. + .. option:: --disable-bgp-announce Make *bgpd* which does not make bgp announcements at all. This diff --git a/doc/user/overview.rst b/doc/user/overview.rst index 4886b57594..369f17dcba 100644 --- a/doc/user/overview.rst +++ b/doc/user/overview.rst @@ -245,6 +245,14 @@ FRR implements the following RFCs: - :rfc:`7552` :t:`Updates to LDP for IPv6, R. Asati, C. Pignataro, K. Raza, V. Manral, and R. Papneja. June 2015.` +- :rfc:`5880` + :t:`Bidirectional Forwarding Detection (BFD), D. Katz, D. Ward. June 2010` +- :rfc:`5881` + :t:`Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop), + D. Katz, D. Ward. June 2010` +- :rfc:`5883` + :t:`Bidirectional Forwarding Detection (BFD) for Multihop Paths, D. Katz, + D. Ward. June 2010` **When SNMP support is enabled, the following RFCs are also supported:** diff --git a/doc/user/setup.rst b/doc/user/setup.rst index e9fd44a347..68ce14982b 100644 --- a/doc/user/setup.rst +++ b/doc/user/setup.rst @@ -31,6 +31,7 @@ systemd. The file initially looks like this: sharpd=no staticd=no pbrd=no + bfdd=no To enable a particular daemon, simply change the corresponding 'no' to 'yes'. Subsequent service restarts should start the daemon. @@ -66,6 +67,7 @@ This file has several parts. Here is an example: sharpd_options=" --daemon -A 127.0.0.1" staticd_options=" --daemon -A 127.0.0.1" pbrd_options=" --daemon -A 127.0.0.1" + bfdd_options=" --daemon -A 127.0.0.1" # The list of daemons to watch is automatically generated by the init script. watchfrr_enable=yes @@ -136,6 +138,7 @@ add the following entries to :file:`/etc/services`. pimd 2611/tcp # PIMd vty ldpd 2612/tcp # LDPd vty eigprd 2613/tcp # EIGRPd vty + bfdd 2617/tcp # bfdd vty If you use a FreeBSD newer than 2.2.8, the above entries are already added to |
