]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/babeld.rst
Merge pull request #10424 from patrasar/master_pimv6_nht
[mirror_frr.git] / doc / user / babeld.rst
1 .. _babel:
2
3 *****
4 Babel
5 *****
6
7 Babel is an interior gateway protocol that is suitable both for wired networks
8 and for wireless mesh networks. Babel has been described as 'RIP on speed' --
9 it is based on the same principles as RIP, but includes a number of refinements
10 that make it react much faster to topology changes without ever counting to
11 infinity, and allow it to perform reliable link quality estimation on wireless
12 links. Babel is a double-stack routing protocol, meaning that a single Babel
13 instance is able to perform routing for both IPv4 and IPv6.
14
15 FRR implements Babel as described in :rfc:`6126`.
16
17 .. _configuring-babeld:
18
19 Configuring babeld
20 ==================
21
22 The *babeld* daemon can be invoked with any of the common
23 options (:ref:`common-invocation-options`).
24
25 The *zebra* daemon must be running before *babeld* is
26 invoked. Also, if *zebra* is restarted then *babeld*
27 must be too.
28
29 Configuration of *babeld* is done in its configuration file
30 :file:`babeld.conf`.
31
32 .. _babel-configuration:
33
34 Babel configuration
35 ===================
36
37 .. clicmd:: router babel
38
39 Enable or disable Babel routing.
40
41 .. clicmd:: babel diversity
42
43 Enable or disable routing using radio frequency diversity. This is
44 highly recommended in networks with many wireless nodes.
45 If you enable this, you will probably want to set `babel
46 diversity-factor` and `babel channel` below.
47
48
49 .. clicmd:: babel diversity-factor (1-256)
50
51 Sets the multiplicative factor used for diversity routing, in units of
52 1/256; lower values cause diversity to play a more important role in
53 route selection. The default it 256, which means that diversity plays
54 no role in route selection; you will probably want to set that to 128
55 or less on nodes with multiple independent radios.
56
57 .. clicmd:: network IFNAME
58
59 Enable or disable Babel on the given interface.
60
61
62 .. clicmd:: babel <wired|wireless>
63
64 Specifies whether this interface is wireless, which disables a number
65 of optimisations that are only correct on wired interfaces.
66 Specifying `wireless` (the default) is always correct, but may
67 cause slower convergence and extra routing traffic.
68
69 .. clicmd:: babel split-horizon
70
71 Specifies whether to perform split-horizon on the interface. Specifying
72 ``no babel split-horizon`` is always correct, while ``babel
73 split-horizon`` is an optimisation that should only be used on symmetric
74 and transitive (wired) networks. The default is ``babel split-horizon``
75 on wired interfaces, and ``no babel split-horizon`` on wireless
76 interfaces. This flag is reset when the wired/wireless status of an
77 interface is changed.
78
79
80 .. clicmd:: babel hello-interval (20-655340)
81
82 Specifies the time in milliseconds between two scheduled hellos. On
83 wired links, Babel notices a link failure within two hello intervals;
84 on wireless links, the link quality value is reestimated at every
85 hello interval. The default is 4000 ms.
86
87
88 .. clicmd:: babel update-interval (20-655340)
89
90 Specifies the time in milliseconds between two scheduled updates. Since
91 Babel makes extensive use of triggered updates, this can be set to fairly
92 high values on links with little packet loss. The default is 20000 ms.
93
94
95 .. clicmd:: babel channel (1-254)
96 .. clicmd:: babel channel interfering
97 .. clicmd:: babel channel noninterfering
98
99 Set the channel number that diversity routing uses for this interface (see
100 `babel diversity` above). Noninterfering interfaces are assumed to only
101 interfere with themselves, interfering interfaces are assumed to interfere
102 with all other channels except noninterfering channels, and interfaces with
103 a channel number interfere with interfering interfaces and interfaces with
104 the same channel number. The default is ``babel channel interfering`` for
105 wireless interfaces, and ``babel channel noninterfering`` for wired
106 interfaces. This is reset when the wired/wireless status of an interface is
107 changed.
108
109
110 .. clicmd:: babel rxcost (1-65534)
111
112 Specifies the base receive cost for this interface. For wireless
113 interfaces, it specifies the multiplier used for computing the ETX
114 reception cost (default 256); for wired interfaces, it specifies the
115 cost that will be advertised to neighbours. This value is reset when
116 the wired/wireless attribute of the interface is changed.
117
118 .. note::
119 Do not use this command unless you know what you are doing; in most
120 networks, acting directly on the cost using route maps is a better
121 technique.
122
123
124 .. clicmd:: babel rtt-decay (1-256)
125
126 This specifies the decay factor for the exponential moving average of
127 RTT samples, in units of 1/256. Higher values discard old samples
128 faster. The default is 42.
129
130
131 .. clicmd:: babel rtt-min (1-65535)
132
133 This specifies the minimum RTT, in milliseconds, starting from which we
134 increase the cost to a neighbour. The additional cost is linear in
135 (rtt - rtt-min). The default is 10 ms.
136
137
138 .. clicmd:: babel rtt-max (1-65535)
139
140 This specifies the maximum RTT, in milliseconds, above which we don't
141 increase the cost to a neighbour. The default is 120 ms.
142
143
144 .. clicmd:: babel max-rtt-penalty (0-65535)
145
146 This specifies the maximum cost added to a neighbour because of RTT, i.e.
147 when the RTT is higher or equal than rtt-max. The default is 150. Setting it
148 to 0 effectively disables the use of a RTT-based cost.
149
150
151 .. clicmd:: babel enable-timestamps
152
153 Enable or disable sending timestamps with each Hello and IHU message in
154 order to compute RTT values. The default is `no babel enable-timestamps`.
155
156
157 .. clicmd:: babel resend-delay (20-655340)
158
159 Specifies the time in milliseconds after which an 'important' request or
160 update will be resent. The default is 2000 ms. You probably don't want to
161 tweak this value.
162
163
164 .. clicmd:: babel smoothing-half-life (0-65534)
165
166 Specifies the time constant, in seconds, of the smoothing algorithm used for
167 implementing hysteresis. Larger values reduce route oscillation at the cost
168 of very slightly increasing convergence time. The value 0 disables
169 hysteresis, and is suitable for wired networks. The default is 4 s.
170
171 .. _babel-redistribution:
172
173 Babel redistribution
174 ====================
175
176
177 .. clicmd:: redistribute <ipv4|ipv6> KIND
178
179 Specify which kind of routes should be redistributed into Babel.
180
181 .. _show-babel-information:
182
183 Show Babel information
184 ======================
185
186 These commands dump various parts of *babeld*'s internal state.
187
188
189 .. clicmd:: show babel route
190
191
192 .. clicmd:: show babel route A.B.C.D
193
194
195 .. clicmd:: show babel route X:X::X:X
196
197
198 .. clicmd:: show babel route A.B.C.D/M
199
200
201 .. clicmd:: show babel route X:X::X:X/M
202
203
204 .. clicmd:: show babel interface
205
206
207 .. clicmd:: show babel interface IFNAME
208
209
210 .. clicmd:: show babel neighbor
211
212
213 .. clicmd:: show babel parameters
214
215 Babel debugging commands
216 ========================
217
218 simple: debug babel KIND
219 simple: no debug babel KIND
220
221 .. clicmd:: debug babel KIND
222
223 Enable or disable debugging messages of a given kind. ``KIND`` can
224 be one of:
225
226 - ``common``
227 - ``filter``
228 - ``timeout``
229 - ``interface``
230 - ``route``
231 - ``all``
232
233 .. note::
234 If you have compiled with the ``NO_DEBUG`` flag, then these commands aren't
235 available.
236
237
238 Babel sample configuration file
239 ===============================
240
241 .. code-block:: frr
242
243 debug babel common
244 !debug babel kernel
245 !debug babel filter
246 !debug babel timeout
247 !debug babel interface
248 !debug babel route
249 !debug babel all
250
251 router babel
252 ! network wlan0
253 ! network eth0
254 ! redistribute ipv4 kernel
255 ! no redistribute ipv6 static
256
257 ! The defaults are fine for a wireless interface
258
259 !interface wlan0
260
261 ! A few optimisation tweaks are optional but recommended on a wired interface
262 ! Disable link quality estimation, enable split horizon processing, and
263 ! increase the hello and update intervals.
264
265 !interface eth0
266 ! babel wired
267 ! babel split-horizon
268 ! babel hello-interval 12000
269 ! babel update-interval 36000
270
271 ! log file /var/log/frr/babeld.log
272 log stdout
273