diff options
author | Yuxiang Zhu <vfreex@gmail.com> | 2023-02-06 19:00:44 +0800 |
---|---|---|
committer | Yuxiang Zhu <vfreex@gmail.com> | 2023-02-06 19:00:44 +0800 |
commit | b8056e27beffa7486af84ee40d9bdde0ef0d10c6 (patch) | |
tree | 1c39de62f9ca0db1ed5193ec96692afd003ed1bb /docs/configuration/protocols/babel.rst | |
parent | d39ce49e2f54b99433c5c661fc1cb6efbbe6c930 (diff) | |
download | vyos-documentation-b8056e27beffa7486af84ee40d9bdde0ef0d10c6.tar.gz vyos-documentation-b8056e27beffa7486af84ee40d9bdde0ef0d10c6.zip |
T4977: Add Babel routing protocol
Documentation for https://github.com/vyos/vyos-1x/pull/1800.
Diffstat (limited to 'docs/configuration/protocols/babel.rst')
-rw-r--r-- | docs/configuration/protocols/babel.rst | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/docs/configuration/protocols/babel.rst b/docs/configuration/protocols/babel.rst new file mode 100644 index 00000000..58436178 --- /dev/null +++ b/docs/configuration/protocols/babel.rst @@ -0,0 +1,210 @@ +.. _babel: + +#### +Babel +#### + +Babel is a modern routing protocol designed to be robust and efficient +both in ordinary wired networks and in wireless mesh networks. +By default, it uses hop-count on wired networks and a variant of ETX +on wireless links, It can be configured to take radio diversity into account +and to automatically compute a link's latency and include it in the metric. +It is defined in :rfc:`8966`. + +Babel a dual stack protocol. +A single Babel instance is able to perform routing for both IPv4 and IPv6. + +General Configuration +--------------------- + +VyOS does not have a special command to start the Babel process. +The Babel process starts when the first Babel enabled interface is configured. + +.. cfgcmd:: set protocols babel interface <interface> + + This command specifies a Babel enabled interface by interface name. Both + the sending and receiving of Babel packets will be enabled on the interface + specified in this command. + +Optional Configuration +---------------------- + +.. cfgcmd:: set protocols babel parameters diversity + + This command enables routing using radio frequency diversity. + This is highly recommended in networks with many wireless nodes. + + .. note:: If you enable this, you will probably want to + set diversity-factor and channel below. + +.. cfgcmd:: set protocols babel parameters diversity-factor <1-256> + + This command sets the multiplicative factor used for diversity routing, + in units of 1/256; lower values cause diversity to play a more important role + in route selection. + The default it 256, which means that diversity plays no role in route + selection; you will probably want to set that to 128 or less on nodes + with multiple independent radios. + +.. cfgcmd:: set protocols babel parameters resend-delay <milliseconds> + + This command specifies the time in milliseconds after which an 'important' + request or update will be resent. The default is 2000 ms. + +.. cfgcmd:: set protocols babel parameters smoothing-half-life <seconds> + + This command specifies the time constant, in seconds, of the smoothing + algorithm used for implementing hysteresis. + Larger values reduce route oscillation at the cost of very slightly increasing + convergence time. The value 0 disables hysteresis, and is suitable for wired + networks. The default is 4 s. + +Interfaces Configuration +------------------------ + +.. cfgcmd:: set protocols babel interface <interface> type <auto|wired|wireless> + + This command sets the interface type: + + **auto** – automatically determines the interface type. + **wired** – enables optimisations for wired interfaces. + **wireless** – disables a number of optimisations that are only correct + on wired interfaces. Specifying wireless is always correct, + but may cause slower convergence and extra routing traffic. + +.. cfgcmd:: set protocols babel interface <interface> split-horizon <default|disable|enable> + + This command specifies whether to perform split-horizon on the interface. + Specifying no babel split-horizon is always correct, while babel split-horizon + is an optimisation that should only be used on symmetric + and transitive (wired) networks. + + **default** – enable split-horizon on wired interfaces, and disable + split-horizon on wireless interfaces. + **enable** – enable split-horizon on this interfaces. + **disable** – disable split-horizon on this interfaces. + +.. cfgcmd:: set protocols babel interface <interface> hello-interval <milliseconds> + + This command specifies the time in milliseconds between two scheduled hellos. + On wired links, Babel notices a link failure within two hello intervals; + on wireless links, the link quality value is reestimated at every hello + interval. + The default is 4000 ms. + +.. cfgcmd:: set protocols babel interface <interface> update-interval <milliseconds> + + This command specifies the time in milliseconds between two scheduled updates. + Since Babel makes extensive use of triggered updates, + this can be set to fairly high values on links with little packet loss. + The default is 20000 ms. + +.. cfgcmd:: set protocols babel interface <interface> rxcost <1-65534> + + This command specifies the base receive cost for this interface. + For wireless interfaces, it specifies the multiplier used for computing + the ETX reception cost (default 256); + for wired interfaces, it specifies the cost that will be advertised to + neighbours. + +.. cfgcmd:: set protocols babel interface <interface> rtt-decay <1-256> + + This command specifies the decay factor for the exponential moving average + of RTT samples, in units of 1/256. + Higher values discard old samples faster. The default is 42. + +.. cfgcmd:: set protocols babel interface <interface> rtt-min <milliseconds> + + This command specifies the minimum RTT, in milliseconds, + starting from which we increase the cost to a neighbour. + The additional cost is linear in (rtt - rtt-min). The default is 10 ms. + +.. cfgcmd:: set protocols babel interface <interface> rtt-max <milliseconds> + + This command specifies the maximum RTT, in milliseconds, above which + we don't increase the cost to a neighbour. The default is 120 ms. + + +.. cfgcmd:: set protocols babel interface <interface> max-rtt-penalty <milliseconds> + + This command specifies the maximum cost added to a neighbour because of RTT, + i.e. when the RTT is higher or equal than rtt-max. + The default is 150. + Setting it to 0 effectively disables the use of a RTT-based cost. + +.. cfgcmd:: set protocols babel interface <interface> enable-timestamps + + This command enables sending timestamps with each Hello and IHU message + in order to compute RTT values. + It is recommended to enable timestamps on tunnel interfaces. + +.. cfgcmd:: set protocols babel interface <interface> channel <1-254|interfering|noninterfering> + + This command set the channel number that diversity routing uses for this + interface (see diversity option above). + + **1-254** – interfaces with a channel number interfere with + interfering interfaces and interfaces with the same channel number. + **interfering** – interfering interfaces are assumed to interfere with all other channels except + noninterfering channels. + **noninterfering** – noninterfering interfaces are assumed to only interfere + with themselves. + +Redistribution Configuration +---------------------------- + +.. cfgcmd:: set protocols babel redistribute <ipv4|ipv6> <route source> + + This command redistributes routing information from the given route source + to the Babel process. + + IPv4 route source: bgp, connected, eigrp, isis, kernel, nhrp, ospf, rip, static. + + IPv6 route source: bgp, connected, eigrp, isis, kernel, nhrp, ospfv3, ripng, static. + +.. cfgcmd:: set protocols babel distribute-list <ipv4|ipv6> access-list <in|out> <number> + + This command can be used to filter the Babel routes using access lists. + :cfgcmd:`in` and :cfgcmd:`out` this is the direction in which the access + lists are applied. + +.. cfgcmd:: set protocols babel distribute-list <ipv4|ipv6> interface <interface> access-list <in|out> <number> + + This command allows you apply access lists to a chosen interface to + filter the Babel routes. + +.. cfgcmd:: set protocols babel distribute-list <ipv4|ipv6> prefix-list <in|out> <name> + + This command can be used to filter the Babel routes using prefix lists. + :cfgcmd:`in` and :cfgcmd:`out` this is the direction in which the prefix + lists are applied. + +.. cfgcmd:: set protocols babel distribute-list <ipv4|ipv6> interface <interface> prefix-list <in|out> <name> + + This command allows you apply prefix lists to a chosen interface to + filter the Babel routes. + +Configuration Example +--------------------- + +Simple Babel configuration using 2 nodes and redistributing connected interfaces. + +**Node 1:** + +.. code-block:: none + + set interfaces loopback lo address 10.1.1.1/32 + set interfaces loopback lo address fd12:3456:dead:beef::1/128 + set protocols babel interface eth0 type wired + set protocols babel redistribute ipv4 connected + set protocols babel redistribute ipv6 connected + +**Node 2:** + +.. code-block:: none + + set interfaces loopback lo address 10.2.2.2/32 + set interfaces loopback lo address fd12:3456:beef:dead::2/128 + set protocols babel interface eth0 type wired + set protocols babel redistribute ipv4 connected + set protocols babel redistribute ipv6 connected |