summaryrefslogtreecommitdiff
path: root/docs/configuration/protocols/babel.rst
blob: 07d1bc869062868900b6ad28a10a9a32bd6c75b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
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