]> git.ipfire.org Git - thirdparty/bird.git/blame - doc/bird.sgml
Main: Add local option
[thirdparty/bird.git] / doc / bird.sgml
CommitLineData
04a22949 1<!doctype birddoc system>
d37f899b
PM
2
3<!--
d150c637 4 BIRD documentation
d37f899b 5
dad92c30
OZ
6This documentation can have 4 forms: sgml (this is master copy), html, ASCII
7text and dvi/postscript (generated from sgml using sgmltools). You should always
8edit master copy.
02357f96 9
dad92c30
OZ
10This is a slightly modified linuxdoc dtd. Anything in <descrip> tags is
11considered definition of configuration primitives, <cf> is fragment of
12configuration within normal text, <m> is "meta" information within fragment of
13configuration - something in config which is not keyword.
d37f899b 14
dad92c30 15 (set-fill-column 80)
d37f899b
PM
16
17 Copyright 1999,2000 Pavel Machek <pavel@ucw.cz>, distribute under GPL version 2 or later.
18
19 -->
20
371adba6 21<book>
d37f899b 22
aa185265 23<title>BIRD User's Guide
d37f899b 24<author>
aa185265
MM
25Ondrej Filip <it/&lt;feela@network.cz&gt;/,
26Pavel Machek <it/&lt;pavel@ucw.cz&gt;/,
5516a66d
OF
27Martin Mares <it/&lt;mj@ucw.cz&gt;/,
28Ondrej Zajicek <it/&lt;santiago@crfreenet.org&gt;/
aa185265 29</author>
d37f899b 30
d37f899b 31<abstract>
aa185265 32This document contains user documentation for the BIRD Internet Routing Daemon project.
d37f899b
PM
33</abstract>
34
35<!-- Table of contents -->
36<toc>
37
38<!-- Begin the document -->
39
dad92c30 40
371adba6 41<chapt>Introduction
d37f899b 42
371adba6 43<sect>What is BIRD
d37f899b 44
897cd7aa 45<p><label id="intro">
dad92c30
OZ
46The name `BIRD' is actually an acronym standing for `BIRD Internet Routing
47Daemon'. Let's take a closer look at the meaning of the name:
48
49<p><em/BIRD/: Well, we think we have already explained that. It's an acronym
50standing for `BIRD Internet Routing Daemon', you remember, don't you? :-)
51
52<p><em/Internet Routing/: It's a program (well, a daemon, as you are going to
53discover in a moment) which works as a dynamic router in an Internet type
54network (that is, in a network running either the IPv4 or the IPv6 protocol).
55Routers are devices which forward packets between interconnected networks in
56order to allow hosts not connected directly to the same local area network to
57communicate with each other. They also communicate with the other routers in the
58Internet to discover the topology of the network which allows them to find
59optimal (in terms of some metric) rules for forwarding of packets (which are
60called routing tables) and to adapt themselves to the changing conditions such
61as outages of network links, building of new connections and so on. Most of
62these routers are costly dedicated devices running obscure firmware which is
63hard to configure and not open to any changes (on the other hand, their special
64hardware design allows them to keep up with lots of high-speed network
65interfaces, better than general-purpose computer does). Fortunately, most
66operating systems of the UNIX family allow an ordinary computer to act as a
67router and forward packets belonging to the other hosts, but only according to a
68statically configured table.
69
70<p>A <em/Routing Daemon/ is in UNIX terminology a non-interactive program
71running on background which does the dynamic part of Internet routing, that is
72it communicates with the other routers, calculates routing tables and sends them
73to the OS kernel which does the actual packet forwarding. There already exist
74other such routing daemons: routed (RIP only), GateD (non-free),
75Zebra <HTMLURL URL="http://www.zebra.org"> and
76MRTD <HTMLURL URL="http://sourceforge.net/projects/mrt">,
77but their capabilities are limited and they are relatively hard to configure
78and maintain.
897cd7aa
MM
79
80<p>BIRD is an Internet Routing Daemon designed to avoid all of these shortcomings,
dad92c30
OZ
81to support all the routing technology used in the today's Internet or planned to
82be used in near future and to have a clean extensible architecture allowing new
83routing protocols to be incorporated easily. Among other features, BIRD
84supports:
897cd7aa
MM
85
86<itemize>
87 <item>both IPv4 and IPv6 protocols
88 <item>multiple routing tables
89 <item>the Border Gateway Protocol (BGPv4)
96264d4d 90 <item>the Routing Information Protocol (RIPv2)
0c75411b 91 <item>the Open Shortest Path First protocol (OSPFv2, OSPFv3)
6bcef225 92 <item>the Router Advertisements for IPv6 hosts
dad92c30
OZ
93 <item>a virtual protocol for exchange of routes between different
94 routing tables on a single host
897cd7aa
MM
95 <item>a command-line interface allowing on-line control and inspection
96 of status of the daemon
dad92c30
OZ
97 <item>soft reconfiguration (no need to use complex online commands to
98 change the configuration, just edit the configuration file and
99 notify BIRD to re-read it and it will smoothly switch itself to
100 the new configuration, not disturbing routing protocols unless
101 they are affected by the configuration changes)
02357f96 102 <item>a powerful language for route filtering
897cd7aa
MM
103</itemize>
104
dad92c30
OZ
105<p>BIRD has been developed at the Faculty of Math and Physics, Charles
106University, Prague, Czech Republic as a student project. It can be freely
107distributed under the terms of the GNU General Public License.
108
109<p>BIRD has been designed to work on all UNIX-like systems. It has been
110developed and tested under Linux 2.0 to 2.6, and then ported to FreeBSD, NetBSD
111and OpenBSD, porting to other systems (even non-UNIX ones) should be relatively
112easy due to its highly modular architecture.
897cd7aa 113
dad92c30
OZ
114<p>BIRD supports either IPv4 or IPv6 protocol, but have to be compiled separately
115for each one. Therefore, a dualstack router would run two instances of BIRD (one
116for IPv4 and one for IPv6), with completely separate setups (configuration
117files, tools ...).
5adc02a6 118
d37f899b 119
371adba6 120<sect>Installing BIRD
440439e3 121
dad92c30
OZ
122<p>On a recent UNIX system with GNU development tools (GCC, binutils, m4, make)
123and Perl, installing BIRD should be as easy as:
440439e3
PM
124
125<code>
dad92c30
OZ
126 ./configure
127 make
128 make install
129 vi /usr/local/etc/bird.conf
c184d9d0 130 bird
440439e3
PM
131</code>
132
02357f96 133<p>You can use <tt>./configure --help</tt> to get a list of configure
dad92c30
OZ
134options. The most important ones are: <tt/--enable-ipv6/ which enables building
135of an IPv6 version of BIRD, <tt/--with-protocols=/ to produce a slightly smaller
136BIRD executable by configuring out routing protocols you don't use, and
137<tt/--prefix=/ to install BIRD to a place different from <file>/usr/local</file>.
138
b093c328 139
02357f96 140<sect>Running BIRD
36032ded 141
c184d9d0 142<p>You can pass several command-line options to bird:
d26524fa 143
c184d9d0
PM
144<descrip>
145 <tag>-c <m/config name/</tag>
66701947 146 use given configuration file instead of <it/prefix/<file>/etc/bird.conf</file>.
c184d9d0
PM
147
148 <tag>-d</tag>
02357f96 149 enable debug messages and run bird in foreground.
c184d9d0 150
02357f96 151 <tag>-D <m/filename of debug log/</tag>
a4644ed6
OZ
152 log debugging information to given file instead of stderr.
153
154 <tag>-p</tag>
dad92c30
OZ
155 just parse the config file and exit. Return value is zero if the config
156 file is valid, nonzero if there are some errors.
c184d9d0
PM
157
158 <tag>-s <m/name of communication socket/</tag>
dad92c30
OZ
159 use given filename for a socket for communications with the client,
160 default is <it/prefix/<file>/var/run/bird.ctl</file>.
0aeac9cb
OZ
161
162 <tag>-P <m/name of PID file/</tag>
9637c7c0 163 create a PID file with given filename.
e8b89a61
OZ
164
165 <tag>-u <m/user/</tag>
166 drop privileges and use that user ID, see the next section for details.
167
168 <tag>-g <m/group/</tag>
169 use that group ID, see the next section for details.
1cd198cf
OF
170
171 <tag>-f</tag>
172 run bird in foreground.
6eda3f13 173
f2ae2bad
OZ
174 <tag>-l</tag>
175 look for a configuration file and a communication socket in the current
176 working directory instead of in default system paths. However, paths
177 specified by options <cf/-c/, <cf/-s/ have higher priority.
178
6eda3f13
OZ
179 <tag>-R</tag>
180 apply graceful restart recovery after start.
c184d9d0 181</descrip>
d26524fa 182
02357f96
PM
183<p>BIRD writes messages about its work to log files or syslog (according to config).
184
dad92c30 185
e8b89a61
OZ
186<sect>Privileges
187
dad92c30
OZ
188<p>BIRD, as a routing daemon, uses several privileged operations (like setting
189routing table and using raw sockets). Traditionally, BIRD is executed and runs
190with root privileges, which may be prone to security problems. The recommended
191way is to use a privilege restriction (options <cf/-u/, <cf/-g/). In that case
192BIRD is executed with root privileges, but it changes its user and group ID to
193an unprivileged ones, while using Linux capabilities to retain just required
194privileges (capabilities CAP_NET_*). Note that the control socket is created
195before the privileges are dropped, but the config file is read after that. The
196privilege restriction is not implemented in BSD port of BIRD.
197
198<p>A nonprivileged user (as an argument to <cf/-u/ options) may be the user
199<cf/nobody/, but it is suggested to use a new dedicated user account (like
200<cf/bird/). The similar considerations apply for the group option, but there is
201one more condition -- the users in the same group can use <file/birdc/ to
202control BIRD.
203
204<p>Finally, there is a possibility to use external tools to run BIRD in an
205environment with restricted privileges. This may need some configuration, but it
206is generally easy -- BIRD needs just the standard library, privileges to read
207the config file and create the control socket and the CAP_NET_* capabilities.
e8b89a61 208
6eda3f13 209
a852c139
PM
210<chapt>About routing tables
211
dad92c30
OZ
212<p>BIRD has one or more routing tables which may or may not be synchronized with
213OS kernel and which may or may not be synchronized with each other (see the Pipe
214protocol). Each routing table contains a list of known routes. Each route
215consists of:
a852c139
PM
216
217<itemize>
dad92c30
OZ
218 <item>network prefix this route is for (network address and prefix
219 length -- the number of bits forming the network part of the
220 address; also known as a netmask)
96264d4d
PM
221 <item>preference of this route
222 <item>IP address of router which told us about this route
dad92c30
OZ
223 <item>IP address of router we should forward the packets to using this
224 route
a852c139 225 <item>other attributes common to all routes
dad92c30
OZ
226 <item>dynamic attributes defined by protocols which may or may not be
227 present (typically protocol metrics)
a852c139
PM
228</itemize>
229
dad92c30
OZ
230Routing table maintains multiple entries for a network, but at most one entry
231for one network and one protocol. The entry with the highest preference is used
232for routing (we will call such an entry the <it/selected route/). If there are
233more entries with the same preference and they are from the same protocol, the
234protocol decides (typically according to metrics). If they aren't, an internal
235ordering is used to break the tie. You can get the list of route attributes in
236the Route attributes section.
237
238<p>Each protocol is connected to a routing table through two filters which can
239accept, reject and modify the routes. An <it/export/ filter checks routes passed
240from the routing table to the protocol, an <it/import/ filter checks routes in
241the opposite direction. When the routing table gets a route from a protocol, it
242recalculates the selected route and broadcasts it to all protocols connected to
243the table. The protocols typically send the update to other routers in the
244network. Note that although most protocols are interested in receiving just
245selected routes, some protocols (e.g. the <cf/Pipe/ protocol) receive and
246process all entries in routing tables (accepted by filters).
247
248<p><label id="dsc-sorted">Usually, a routing table just chooses a selected route
249from a list of entries for one network. But if the <cf/sorted/ option is
250activated, these lists of entries are kept completely sorted (according to
251preference or some protocol-dependent metric). This is needed for some features
252of some protocols (e.g. <cf/secondary/ option of BGP protocol, which allows to
253accept not just a selected route, but the first route (in the sorted list) that
254is accepted by filters), but it is incompatible with some other features (e.g.
255<cf/deterministic med/ option of BGP protocol, which activates a way of choosing
256selected route that cannot be described using comparison and ordering). Minor
257advantage is that routes are shown sorted in <cf/show route/, minor disadvantage
258is that it is slightly more computationally expensive.
259
48cf5e84 260
6eda3f13
OZ
261<sect>Graceful restart
262
263<p>When BIRD is started after restart or crash, it repopulates routing tables in
264an uncoordinated manner, like after clean start. This may be impractical in some
265cases, because if the forwarding plane (i.e. kernel routing tables) remains
266intact, then its synchronization with BIRD would temporarily disrupt packet
267forwarding until protocols converge. Graceful restart is a mechanism that could
268help with this issue. Generally, it works by starting protocols and letting them
269repopulate routing tables while deferring route propagation until protocols
270acknowledge their convergence. Note that graceful restart behavior have to be
271configured for all relevant protocols and requires protocol-specific support
272(currently implemented for Kernel and BGP protocols), it is activated for
273particular boot by option <cf/-R/.
274
a852c139 275
371adba6 276<chapt>Configuration
af0b25d2 277
371adba6 278<sect>Introduction
d37f899b 279
dad92c30
OZ
280<p>BIRD is configured using a text configuration file. Upon startup, BIRD reads
281<it/prefix/<file>/etc/bird.conf</file> (unless the <tt/-c/ command line option
282is given). Configuration may be changed at user's request: if you modify the
283config file and then signal BIRD with <tt/SIGHUP/, it will adjust to the new
284config. Then there's the client which allows you to talk with BIRD in an
285extensive way.
286
287<p>In the config, everything on a line after <cf/#/ or inside <cf>/* */</cf> is
288a comment, whitespace characters are treated as a single space. If there's a
289variable number of options, they are grouped using the <cf/{ }/ brackets. Each
290option is terminated by a <cf/;/. Configuration is case sensitive. There are two
291ways how to name symbols (like protocol names, filter names, constats etc.). You
292can either use a simple string starting with a letter followed by any
293combination of letters and numbers (e.g. "R123", "myfilter", "bgp5") or you can
294enclose the name into apostrophes (<cf/'/) and than you can use any combination
295of numbers, letters. hyphens, dots and colons (e.g. "'1:strange-name'",
296"'-NAME-'", "'cool::name'").
297
298<p>Here is an example of a simple config file. It enables synchronization of
299routing tables with OS kernel, scans for new network interfaces every 10 seconds
300and runs RIP on all network interfaces found.
d37f899b 301
a0dd1c74 302<code>
d37f899b 303protocol kernel {
d150c637 304 persist; # Don't remove routes on BIRD shutdown
d37f899b
PM
305 scan time 20; # Scan kernel routing table every 20 seconds
306 export all; # Default is export none
307}
308
309protocol device {
310 scan time 10; # Scan interfaces every 10 seconds
311}
312
313protocol rip {
314 export all;
315 import all;
f434d191 316 interface "*";
d37f899b 317}
a0dd1c74 318</code>
d37f899b 319
326e33f5 320
371adba6 321<sect>Global options
af0b25d2 322
a0dd1c74 323<p><descrip>
523f020b 324 <tag>include "<m/filename/"</tag>
4a5eb284 325 This statement causes inclusion of a new file. <m/Filename/ could also
0a505706
OZ
326 be a wildcard, in that case matching files are included in alphabetic
327 order. The maximal depth is 8. Note that this statement could be used
328 anywhere in the config file, not just as a top-level option.
48ec367a 329
523f020b 330 <tag><label id="dsc-log">log "<m/filename/"|syslog [name <m/name/]|stderr all|{ <m/list of classes/ }</tag>
dad92c30
OZ
331 Set logging of messages having the given class (either <cf/all/ or
332 <cf/{ error, trace }/ etc.) into selected destination (a file specified
333 as a filename string, syslog with optional name argument, or the stderr
334 output). Classes are:
1632f1fe 335 <cf/info/, <cf/warning/, <cf/error/ and <cf/fatal/ for messages about local problems,
523f020b
OZ
336 <cf/debug/ for debugging messages,
337 <cf/trace/ when you want to know what happens in the network,
338 <cf/remote/ for messages about misbehavior of remote machines,
02357f96 339 <cf/auth/ about authentication failures,
dad92c30
OZ
340 <cf/bug/ for internal BIRD bugs.
341 You may specify more than one <cf/log/ line to establish logging to
342 multiple destinations. Default: log everything to the system log.
02357f96 343
7581b81b 344 <tag>debug protocols all|off|{ states, routes, filters, interfaces, events, packets }</tag>
dad92c30
OZ
345 Set global defaults of protocol debugging options. See <cf/debug/ in the
346 following section. Default: off.
5a203dac
PM
347
348 <tag>debug commands <m/number/</tag>
dad92c30
OZ
349 Control logging of client connections (0 for no logging, 1 for logging
350 of connects and disconnects, 2 and higher for logging of all client
351 commands). Default: 0.
249d238c 352
8bcb5fb1
OZ
353 <tag>debug latency <m/switch/</tag>
354 Activate tracking of elapsed time for internal events. Recent events
355 could be examined using <cf/dump events/ command. Default: off.
356
357 <tag>debug latency limit <m/time/</tag>
358 If <cf/debug latency/ is enabled, this option allows to specify a limit
359 for elapsed time. Events exceeding the limit are logged. Default: 1 s.
360
361 <tag>watchdog warning <m/time/</tag>
362 Set time limit for I/O loop cycle. If one iteration took more time to
363 complete, a warning is logged. Default: 5 s.
364
365 <tag>watchdog timeout <m/time/</tag>
366 Set time limit for I/O loop cycle. If the limit is breached, BIRD is
367 killed by abort signal. The timeout has effective granularity of
368 seconds, zero means disabled. Default: disabled (0).
369
cf31112f 370 <tag>mrtdump "<m/filename/"</tag>
dad92c30
OZ
371 Set MRTdump file name. This option must be specified to allow MRTdump
372 feature. Default: no dump file.
cf31112f
OZ
373
374 <tag>mrtdump protocols all|off|{ states, messages }</tag>
dad92c30
OZ
375 Set global defaults of MRTdump options. See <cf/mrtdump/ in the
376 following section. Default: off.
cf31112f 377
dad92c30
OZ
378 <tag>filter <m/name local variables/{ <m/commands/ }</tag>
379 Define a filter. You can learn more about filters in the following
380 chapter.
326e33f5 381
dad92c30
OZ
382 <tag>function <m/name/ (<m/parameters/) <m/local variables/ { <m/commands/ }</tag>
383 Define a function. You can learn more about functions in the following chapter.
523f020b 384
a7f23f58 385 <tag>protocol rip|ospf|bgp|... [<m/name/ [from <m/name2/]] { <m>protocol options</m> }</tag>
dad92c30
OZ
386 Define a protocol instance called <cf><m/name/</cf> (or with a name like
387 "rip5" generated automatically if you don't specify any
388 <cf><m/name/</cf>). You can learn more about configuring protocols in
389 their own chapters. When <cf>from <m/name2/</cf> expression is used,
390 initial protocol options are taken from protocol or template
391 <cf><m/name2/</cf> You can run more than one instance of most protocols
392 (like RIP or BGP). By default, no instances are configured.
a7f23f58
OZ
393
394 <tag>template rip|bgp|... [<m/name/ [from <m/name2/]] { <m>protocol options</m> }</tag>
dad92c30
OZ
395 Define a protocol template instance called <m/name/ (or with a name like
396 "bgp1" generated automatically if you don't specify any <m/name/).
397 Protocol templates can be used to group common options when many
398 similarly configured protocol instances are to be defined. Protocol
399 instances (and other templates) can use templates by using <cf/from/
400 expression and the name of the template. At the moment templates (and
401 <cf/from/ expression) are not implemented for OSPF protocol.
249d238c 402
f4830d8c 403 <tag>define <m/constant/ = <m/expression/</tag>
dad92c30
OZ
404 Define a constant. You can use it later in every place you could use a
405 value of the same type. Besides, there are some predefined numeric
406 constants based on /etc/iproute2/rt_* files. A list of defined constants
407 can be seen (together with other symbols) using 'show symbols' command.
249d238c 408
79b4e12e 409 <tag>router id <m/IPv4 address/</tag>
dad92c30
OZ
410 Set BIRD's router ID. It's a world-wide unique identification of your
411 router, usually one of router's IPv4 addresses. Default: in IPv4
412 version, the lowest IP address of a non-loopback interface. In IPv6
413 version, this option is mandatory.
79b4e12e
OZ
414
415 <tag>router id from [-] [ "<m/mask/" ] [ <m/prefix/ ] [, ...]</tag>
dad92c30
OZ
416 Set BIRD's router ID based on an IP address of an interface specified by
417 an interface pattern. The option is applicable for IPv4 version only.
418 See <ref id="dsc-iface" name="interface"> section for detailed
d7c06285 419 description of interface patterns with extended clauses.
249d238c 420
fcf5a4f4 421 <tag>listen bgp [address <m/address/] [port <m/port/] [dual]</tag>
dad92c30
OZ
422 This option allows to specify address and port where BGP protocol should
423 listen. It is global option as listening socket is common to all BGP
424 instances. Default is to listen on all addresses (0.0.0.0) and port 179.
425 In IPv6 mode, option <cf/dual/ can be used to specify that BGP socket
426 should accept both IPv4 and IPv6 connections (but even in that case,
427 BIRD would accept IPv6 routes only). Such behavior was default in older
428 versions of BIRD.
27579857 429
6eda3f13
OZ
430 <tag>graceful restart wait <m/number/</tag>
431 During graceful restart recovery, BIRD waits for convergence of routing
432 protocols. This option allows to specify a timeout for the recovery to
433 prevent waiting indefinitely if some protocols cannot converge. Default:
434 240 seconds.
435
9be9a264 436 <tag>timeformat route|protocol|base|log "<m/format1/" [<m/limit/ "<m/format2/"]</tag>
dad92c30
OZ
437 This option allows to specify a format of date/time used by BIRD. The
438 first argument specifies for which purpose such format is used.
439 <cf/route/ is a format used in 'show route' command output,
440 <cf/protocol/ is used in 'show protocols' command output, <cf/base/ is
441 used for other commands and <cf/log/ is used in a log file.
442
443 "<m/format1/" is a format string using <it/strftime(3)/ notation (see
444 <it/man strftime/ for details). <m/limit> and "<m/format2/" allow to
445 specify the second format string for times in past deeper than <m/limit/
446 seconds. There are few shorthands: <cf/iso long/ is a ISO 8601 date/time
447 format (YYYY-MM-DD hh:mm:ss) that can be also specified using <cf/"%F %T"/.
448 <cf/iso short/ is a variant of ISO 8601 that uses just the time format
449 (hh:mm:ss) for near times (up to 20 hours in the past) and the date
450 format (YYYY-MM-DD) for far times. This is a shorthand for
451 <cf/"%T" 72000 "%F"/.
c37e7851 452
90eb5e7a
OZ
453 By default, BIRD uses the <cf/iso short/ format for <cf/route/ and
454 <cf/protocol/ times, and the <cf/iso long/ format for <cf/base/ and
455 <cf/log/ times.
456
dad92c30
OZ
457 In pre-1.4.0 versions, BIRD used an short, ad-hoc format for <cf/route/
458 and <cf/protocol/ times, and a <cf/iso long/ similar format (DD-MM-YYYY
459 hh:mm:ss) for <cf/base/ and <cf/log/. These timeformats could be set by
460 <cf/old short/ and <cf/old long/ compatibility shorthands.
c37e7851 461
48cf5e84 462 <tag>table <m/name/ [sorted]</tag>
dad92c30
OZ
463 Create a new routing table. The default routing table is created
464 implicitly, other routing tables have to be added by this command.
465 Option <cf/sorted/ can be used to enable sorting of routes, see
466 <ref id="dsc-sorted" name="sorted table"> description for details.
af0b25d2 467
48cf5e84 468 <tag>roa table <m/name/ [ { roa table options ... } ]</tag>
dad92c30
OZ
469 Create a new ROA (Route Origin Authorization) table. ROA tables can be
470 used to validate route origination of BGP routes. A ROA table contains
471 ROA entries, each consist of a network prefix, a max prefix length and
472 an AS number. A ROA entry specifies prefixes which could be originated
473 by that AS number. ROA tables could be filled with data from RPKI (RFC
474 6480) or from public databases like Whois. ROA tables are examined by
475 <cf/roa_check()/ operator in filters.
476
477 Currently, there is just one option, <cf>roa <m/prefix/ max <m/num/ as
478 <m/num/</cf>, which can be used to populate the ROA table with static
479 ROA entries. The option may be used multiple times. Other entries can be
480 added dynamically by <cf/add roa/ command.
af582c48 481
f8e8fcfa
OZ
482 <tag>eval <m/expr/</tag>
483 Evaluates given filter expression. It is used by us for testing of filters.
249d238c
PM
484</descrip>
485
dad92c30 486
371adba6 487<sect>Protocol options
bfd71178 488
dad92c30
OZ
489<p>For each protocol instance, you can configure a bunch of options. Some of
490them (those described in this section) are generic, some are specific to the
491protocol (see sections talking about the protocols).
7581b81b 492
dad92c30
OZ
493<p>Several options use a <m/switch/ argument. It can be either <cf/on/,
494<cf/yes/ or a numeric expression with a non-zero value for the option to be
495enabled or <cf/off/, <cf/no/ or a numeric expression evaluating to zero to
496disable it. An empty <m/switch/ is equivalent to <cf/on/ ("silence means
497agreement").
7581b81b 498
5a203dac 499<descrip>
dad92c30
OZ
500 <tag>preference <m/expr/</tag>
501 Sets the preference of routes generated by this protocol. Default:
502 protocol dependent.
5a203dac 503
dad92c30
OZ
504 <tag>disabled <m/switch/</tag>
505 Disables the protocol. You can change the disable/enable status from the
506 command line interface without needing to touch the configuration.
507 Disabled protocols are not activated. Default: protocol is enabled.
5a203dac
PM
508
509 <tag>debug all|off|{ states, routes, filters, interfaces, events, packets }</tag>
510 Set protocol debugging options. If asked, each protocol is capable of
511 writing trace messages about its work to the log (with category
512 <cf/trace/). You can either request printing of <cf/all/ trace messages
513 or only of the types selected: <cf/states/ for protocol state changes
dad92c30
OZ
514 (protocol going up, down, starting, stopping etc.), <cf/routes/ for
515 routes exchanged with the routing table, <cf/filters/ for details on
516 route filtering, <cf/interfaces/ for interface change events sent to the
517 protocol, <cf/events/ for events internal to the protocol and <cf/packets/
518 for packets sent and received by the protocol. Default: off.
5a203dac 519
cf31112f 520 <tag>mrtdump all|off|{ states, messages }</tag>
dad92c30
OZ
521 Set protocol MRTdump flags. MRTdump is a standard binary format for
522 logging information from routing protocols and daemons. These flags
523 control what kind of information is logged from the protocol to the
524 MRTdump file (which must be specified by global <cf/mrtdump/ option, see
525 the previous section). Although these flags are similar to flags of
526 <cf/debug/ option, their meaning is different and protocol-specific. For
527 BGP protocol, <cf/states/ logs BGP state changes and <cf/messages/ logs
528 received BGP messages. Other protocols does not support MRTdump yet.
cf31112f 529
cff430f3 530 <tag>router id <m/IPv4 address/</tag>
dad92c30
OZ
531 This option can be used to override global router id for a given
532 protocol. Default: uses global router id.
4cdd0784 533
523f020b 534 <tag>import all | none | filter <m/name/ | filter { <m/filter commands/ } | where <m/filter expression/</tag>
dad92c30
OZ
535 Specify a filter to be used for filtering routes coming from the
536 protocol to the routing table. <cf/all/ is shorthand for <cf/where true/
537 and <cf/none/ is shorthand for <cf/where false/. Default: <cf/all/.
bfd71178 538
bf422073 539 <tag>export <m/filter/</tag>
dad92c30
OZ
540 This is similar to the <cf>import</cf> keyword, except that it works in
541 the direction from the routing table to the protocol. Default: <cf/none/.
af0b25d2 542
6ac4f87a 543 <tag>import keep filtered <m/switch/</tag>
dad92c30
OZ
544 Usually, if an import filter rejects a route, the route is forgotten.
545 When this option is active, these routes are kept in the routing table,
546 but they are hidden and not propagated to other protocols. But it is
547 possible to show them using <cf/show route filtered/. Note that this
548 option does not work for the pipe protocol. Default: off.
cf98be7b 549
b0a8c7fc 550 <tag><label id="import-limit">import limit [<m/number/ | off ] [action warn | block | restart | disable]</tag>
dad92c30
OZ
551 Specify an import route limit (a maximum number of routes imported from
552 the protocol) and optionally the action to be taken when the limit is
553 hit. Warn action just prints warning log message. Block action discards
554 new routes coming from the protocol. Restart and disable actions shut
555 the protocol down like appropriate commands. Disable is the default
556 action if an action is not explicitly specified. Note that limits are
557 reset during protocol reconfigure, reload or restart. Default: <cf/off/.
b662290f 558
0bc3542a 559 <tag>receive limit [<m/number/ | off ] [action warn | block | restart | disable]</tag>
dad92c30
OZ
560 Specify an receive route limit (a maximum number of routes received from
561 the protocol and remembered). It works almost identically to <cf>import
562 limit</cf> option, the only difference is that if <cf/import keep
563 filtered/ option is active, filtered routes are counted towards the
564 limit and blocked routes are forgotten, as the main purpose of the
565 receive limit is to protect routing tables from overflow. Import limit,
566 on the contrary, counts accepted routes only and routes blocked by the
567 limit are handled like filtered routes. Default: <cf/off/.
d9b77cc2 568
0bc3542a 569 <tag>export limit [ <m/number/ | off ] [action warn | block | restart | disable]</tag>
dad92c30
OZ
570 Specify an export route limit, works similarly to the <cf>import
571 limit</cf> option, but for the routes exported to the protocol. This
572 option is experimental, there are some problems in details of its
573 behavior -- the number of exported routes can temporarily exceed the
574 limit without triggering it during protocol reload, exported routes
575 counter ignores route blocking and block action also blocks route
576 updates of already accepted routes -- and these details will probably
577 change in the future. Default: <cf/off/.
ebecb6f6 578
fd6cbe90 579 <tag>description "<m/text/"</tag>
dad92c30
OZ
580 This is an optional description of the protocol. It is displayed as a
581 part of the output of 'show route all' command.
62aa96ca 582
fd6cbe90
OZ
583 <tag>table <m/name/</tag>
584 Connect this protocol to a non-default routing table.
7581b81b
PM
585</descrip>
586
a7c9f7c0 587<p>There are several options that give sense only with certain protocols:
7581b81b
PM
588
589<descrip>
f434d191 590 <tag><label id="dsc-iface">interface [-] [ "<m/mask/" ] [ <m/prefix/ ] [, ...] [ { <m/option/ ; [...] } ]</tag>
f434d191
OZ
591 Specifies a set of interfaces on which the protocol is activated with
592 given interface-specific options. A set of interfaces specified by one
dad92c30
OZ
593 interface option is described using an interface pattern. The interface
594 pattern consists of a sequence of clauses (separated by commas), each
d7c06285
OZ
595 clause is a mask specified as a shell-like pattern. Interfaces are
596 matched by their name.
dad92c30
OZ
597
598 An interface matches the pattern if it matches any of its clauses. If
599 the clause begins with <cf/-/, matching interfaces are excluded. Patterns
d7c06285 600 are processed left-to-right, thus <cf/interface "eth0", -"eth*", "*";/
dad92c30
OZ
601 means eth0 and all non-ethernets.
602
d7c06285
OZ
603 Some protocols (namely OSPFv2 and Direct) support extended clauses that
604 may contain a mask, a prefix, or both of them. An interface matches such
605 clause if its name matches the mask (if specified) and its address
606 matches the prefix (if specified). Extended clauses are used when the
607 protocol handles multiple addresses on an interface independently.
608
dad92c30
OZ
609 An interface option can be used more times with different interface-specific
610 options, in that case for given interface the first matching interface
611 option is used.
523f020b 612
d7c06285
OZ
613 This option is allowed in BFD, Direct, OSPF, RAdv and RIP protocols, but
614 in OSPF protocol it is used in the <cf/area/ subsection.
f434d191
OZ
615
616 Default: none.
617
618 Examples:
619
dad92c30
OZ
620 <cf>interface "*" { type broadcast; };</cf> - start the protocol on all
621 interfaces with <cf>type broadcast</cf> option.
f434d191 622
dad92c30
OZ
623 <cf>interface "eth1", "eth4", "eth5" { type ptp; };</cf> - start the
624 protocol on enumerated interfaces with <cf>type ptp</cf> option.
523f020b 625
dad92c30
OZ
626 <cf>interface -192.168.1.0/24, 192.168.0.0/16;</cf> - start the protocol
627 on all interfaces that have address from 192.168.0.0/16, but not from
628 192.168.1.0/24.
f434d191 629
dad92c30
OZ
630 <cf>interface -192.168.1.0/24, 192.168.0.0/16;</cf> - start the protocol
631 on all interfaces that have address from 192.168.0.0/16, but not from
632 192.168.1.0/24.
f434d191
OZ
633
634 <cf>interface "eth*" 192.168.1.0/24;</cf> - start the protocol on all
635 ethernet interfaces that have address from 192.168.1.0/24.
636
ef4a50be 637 <tag><label id="dsc-prio">tx class|dscp <m/num/</tag>
dad92c30
OZ
638 This option specifies the value of ToS/DS/Class field in IP headers of
639 the outgoing protocol packets. This may affect how the protocol packets
640 are processed by the network relative to the other network traffic. With
641 <cf/class/ keyword, the value (0-255) is used for the whole ToS/Class
642 octet (but two bits reserved for ECN are ignored). With <cf/dscp/
643 keyword, the value (0-63) is used just for the DS field in the octet.
644 Default value is 0xc0 (DSCP 0x30 - CS6).
ef4a50be
OZ
645
646 <tag>tx priority <m/num/</tag>
dad92c30
OZ
647 This option specifies the local packet priority. This may affect how the
648 protocol packets are processed in the local TX queues. This option is
649 Linux specific. Default value is 7 (highest priority, privileged traffic).
ef4a50be 650
f434d191 651 <tag><label id="dsc-pass">password "<m/password/" [ { id <m/num/; generate from <m/time/; generate to <m/time/; accept from <m/time/; accept to <m/time/; } ]</tag>
dad92c30
OZ
652 Specifies a password that can be used by the protocol. Password option
653 can be used more times to specify more passwords. If more passwords are
f434d191 654 specified, it is a protocol-dependent decision which one is really
dad92c30
OZ
655 used. Specifying passwords does not mean that authentication is enabled,
656 authentication can be enabled by separate, protocol-dependent
f434d191 657 <cf/authentication/ option.
523f020b 658
f434d191
OZ
659 This option is allowed in OSPF and RIP protocols. BGP has also
660 <cf/password/ option, but it is slightly different and described
661 separately.
662
663 Default: none.
664</descrip>
665
666<p>Password option can contain section with some (not necessary all) password sub-options:
667
668<descrip>
669 <tag>id <M>num</M></tag>
dad92c30
OZ
670 ID of the password, (0-255). If it's not used, BIRD will choose ID based
671 on an order of the password item in the interface. For example, second
672 password item in one interface will have default ID 2. ID is used by
673 some routing protocols to identify which password was used to
674 authenticate protocol packets.
f434d191
OZ
675
676 <tag>generate from "<m/time/"</tag>
dad92c30
OZ
677 The start time of the usage of the password for packet signing.
678 The format of <cf><m/time/</cf> is <tt>dd-mm-yyyy HH:MM:SS</tt>.
f434d191
OZ
679
680 <tag>generate to "<m/time/"</tag>
dad92c30 681 The last time of the usage of the password for packet signing.
f434d191
OZ
682
683 <tag>accept from "<m/time/"</tag>
dad92c30 684 The start time of the usage of the password for packet verification.
5a203dac 685
f434d191 686 <tag>accept to "<m/time/"</tag>
dad92c30 687 The last time of the usage of the password for packet verification.
7581b81b 688</descrip>
d37f899b 689
5a203dac 690<chapt>Remote control
36032ded 691
dad92c30
OZ
692<p>You can use the command-line client <file>birdc</file> to talk with a running
693BIRD. Communication is done using a <file/bird.ctl/ UNIX domain socket (unless
694changed with the <tt/-s/ option given to both the server and the client). The
695commands can perform simple actions such as enabling/disabling of protocols,
696telling BIRD to show various information, telling it to show routing table
697filtered by filter, or asking BIRD to reconfigure. Press <tt/?/ at any time to
698get online help. Option <tt/-r/ can be used to enable a restricted mode of BIRD
699client, which allows just read-only commands (<cf/show .../). Option <tt/-v/ can
700be passed to the client, to make it dump numeric return codes along with the
701messages. You do not necessarily need to use <file/birdc/ to talk to BIRD, your
702own applications could do that, too -- the format of communication between BIRD
703and <file/birdc/ is stable (see the programmer's documentation).
704
705<p>There is also lightweight variant of BIRD client called <file/birdcl/, which
706does not support command line editing and history and has minimal dependencies.
707This is useful for running BIRD in resource constrained environments, where
708Readline library (required for regular BIRD client) is not available.
a5e9f3d2
OZ
709
710<p>Many commands have the <m/name/ of the protocol instance as an argument.
f434d191
OZ
711This argument can be omitted if there exists only a single instance.
712
5a203dac 713<p>Here is a brief list of supported functions:
64722c98
PM
714
715<descrip>
5a203dac 716 <tag>show status</tag>
dad92c30
OZ
717 Show router status, that is BIRD version, uptime and time from last
718 reconfiguration.
5a203dac
PM
719
720 <tag>show protocols [all]</tag>
dad92c30
OZ
721 Show list of protocol instances along with tables they are connected to
722 and protocol status, possibly giving verbose information, if <cf/all/ is
723 specified.
64722c98 724
f434d191
OZ
725 <tag>show ospf interface [<m/name/] ["<m/interface/"]</tag>
726 Show detailed information about OSPF interfaces.
727
728 <tag>show ospf neighbors [<m/name/] ["<m/interface/"]</tag>
729 Show a list of OSPF neighbors and a state of adjacency to them.
730
0ea8fb4a 731 <tag>show ospf state [all] [<m/name/]</tag>
dad92c30
OZ
732 Show detailed information about OSPF areas based on a content of the
733 link-state database. It shows network topology, stub networks,
734 aggregated networks and routers from other areas and external routes.
735 The command shows information about reachable network nodes, use option
736 <cf/all/ to show information about all network nodes in the link-state
737 database.
0ea8fb4a
OZ
738
739 <tag>show ospf topology [all] [<m/name/]</tag>
dad92c30
OZ
740 Show a topology of OSPF areas based on a content of the link-state
741 database. It is just a stripped-down version of 'show ospf state'.
64722c98 742
20ab192b 743 <tag>show ospf lsadb [global | area <m/id/ | link] [type <m/num/] [lsid <m/id/] [self | router <m/id/] [<m/name/] </tag>
dad92c30
OZ
744 Show contents of an OSPF LSA database. Options could be used to filter
745 entries.
20ab192b 746
5a203dac 747 <tag>show static [<m/name/]</tag>
f434d191
OZ
748 Show detailed information about static routes.
749
12201fd8
OZ
750 <tag>show bfd sessions [<m/name/]</tag>
751 Show information about BFD sessions.
752
5a203dac 753 <tag>show interfaces [summary]</tag>
dad92c30
OZ
754 Show the list of interfaces. For each interface, print its type, state,
755 MTU and addresses assigned.
5a203dac 756
89647357 757 <tag>show symbols [table|filter|function|protocol|template|roa|<m/symbol/]</tag>
dad92c30
OZ
758 Show the list of symbols defined in the configuration (names of
759 protocols, routing tables etc.).
5a203dac 760
7aa80901 761 <tag>show route [[for] <m/prefix/|<m/IP/] [table <m/sym/] [filter <m/f/|where <m/c/] [(export|preexport|noexport) <m/p/] [protocol <m/p/] [<m/options/]</tag>
dad92c30
OZ
762 Show contents of a routing table (by default of the main one or the
763 table attached to a respective protocol), that is routes, their metrics
764 and (in case the <cf/all/ switch is given) all their attributes.
5a203dac
PM
765
766 <p>You can specify a <m/prefix/ if you want to print routes for a
767 specific network. If you use <cf>for <m/prefix or IP/</cf>, you'll get
768 the entry which will be used for forwarding of packets to the given
769 destination. By default, all routes for each network are printed with
770 the selected one at the top, unless <cf/primary/ is given in which case
771 only the selected route is shown.
772
773 <p>You can also ask for printing only routes processed and accepted by
774 a given filter (<cf>filter <m/name/</cf> or <cf>filter { <m/filter/ }
775 </cf> or matching a given condition (<cf>where <m/condition/</cf>).
7aa80901
OZ
776
777 The <cf/export/, <cf/preexport/ and <cf/noexport/ switches ask for
778 printing of routes that are exported to the specified protocol.
779 With <cf/preexport/, the export filter of the protocol is skipped.
780 With <cf/noexport/, routes rejected by the export filter are printed
781 instead. Note that routes not exported to the protocol for other reasons
782 (e.g. secondary routes or routes imported from that protocol) are not
783 printed even with <cf/noexport/.
5a203dac 784
4d176e14
OF
785 <p>You can also select just routes added by a specific protocol.
786 <cf>protocol <m/p/</cf>.
787
dad92c30
OZ
788 <p>If BIRD is configured to keep filtered routes (see <cf/import keep
789 filtered/ option), you can show them instead of routes by using
790 <cf/filtered/ switch.
cf98be7b 791
5a203dac
PM
792 <p>The <cf/stats/ switch requests showing of route statistics (the
793 number of networks, number of routes before and after filtering). If
794 you use <cf/count/ instead, only the statistics will be printed.
795
c47d037e 796 <tag>show roa [<m/prefix/ | in <m/prefix/ | for <m/prefix/] [as <m/num/] [table <m/t/>]</tag>
dad92c30
OZ
797 Show contents of a ROA table (by default of the first one). You can
798 specify a <m/prefix/ to print ROA entries for a specific network. If you
799 use <cf>for <m/prefix/</cf>, you'll get all entries relevant for route
800 validation of the network prefix; i.e., ROA entries whose prefixes cover
801 the network prefix. Or you can use <cf>in <m/prefix/</cf> to get ROA
802 entries covered by the network prefix. You could also use <cf/as/ option
af582c48
OZ
803 to show just entries for given AS.
804
805 <tag>add roa <m/prefix/ max <m/num/] as <m/num/ [table <m/t/>]</tag>
dad92c30
OZ
806 Add a new ROA entry to a ROA table. Such entry is called <it/dynamic/
807 compared to <it/static/ entries specified in the config file. These
808 dynamic entries survive reconfiguration.
af582c48
OZ
809
810 <tag>delete roa <m/prefix/ max <m/num/] as <m/num/ [table <m/t/>]</tag>
dad92c30
OZ
811 Delete the specified ROA entry from a ROA table. Only dynamic ROA
812 entries (i.e., the ones added by <cf/add roa/ command) can be deleted.
af582c48
OZ
813
814 <tag>flush roa [table <m/t/>]</tag>
815 Remove all dynamic ROA entries from a ROA table.
816
a92cf57d 817 <tag>configure [soft] ["<m/config file/"] [timeout [<m/num/]]</tag>
dad92c30
OZ
818 Reload configuration from a given file. BIRD will smoothly switch itself
819 to the new configuration, protocols are reconfigured if possible,
820 restarted otherwise. Changes in filters usually lead to restart of
821 affected protocols.
822
823 If <cf/soft/ option is used, changes in filters does not cause BIRD to
824 restart affected protocols, therefore already accepted routes (according
825 to old filters) would be still propagated, but new routes would be
826 processed according to the new filters.
827
828 If <cf/timeout/ option is used, config timer is activated. The new
829 configuration could be either confirmed using <cf/configure confirm/
830 command, or it will be reverted to the old one when the config timer
831 expires. This is useful for cases when reconfiguration breaks current
832 routing and a router becames inaccessible for an administrator. The
833 config timeout expiration is equivalent to <cf/configure undo/
834 command. The timeout duration could be specified, default is 300 s.
a92cf57d
OZ
835
836 <tag>configure confirm</tag>
837 Deactivate the config undo timer and therefore confirm the current
838 configuration.
839
840 <tag>configure undo</tag>
dad92c30
OZ
841 Undo the last configuration change and smoothly switch back to the
842 previous (stored) configuration. If the last configuration change was
843 soft, the undo change is also soft. There is only one level of undo, but
844 in some specific cases when several reconfiguration requests are given
845 immediately in a row and the intermediate ones are skipped then the undo
846 also skips them back.
a92cf57d
OZ
847
848 <tag>configure check ["<m/config file/"]</tag>
dad92c30
OZ
849 Read and parse given config file, but do not use it. useful for checking
850 syntactic and some semantic validity of an config file.
a92cf57d 851
bf47fe4b 852 <tag>enable|disable|restart <m/name/|"<m/pattern/"|all</tag>
dad92c30
OZ
853 Enable, disable or restart a given protocol instance, instances matching
854 the <cf><m/pattern/</cf> or <cf/all/ instances.
bf47fe4b 855
8a7fb885 856 <tag>reload [in|out] <m/name/|"<m/pattern/"|all</tag>
dad92c30
OZ
857 Reload a given protocol instance, that means re-import routes from the
858 protocol instance and re-export preferred routes to the instance. If
859 <cf/in/ or <cf/out/ options are used, the command is restricted to one
860 direction (re-import or re-export).
861
862 This command is useful if appropriate filters have changed but the
863 protocol instance was not restarted (or reloaded), therefore it still
864 propagates the old set of routes. For example when <cf/configure soft/
865 command was used to change filters.
866
867 Re-export always succeeds, but re-import is protocol-dependent and might
868 fail (for example, if BGP neighbor does not support route-refresh
869 extension). In that case, re-export is also skipped. Note that for the
870 pipe protocol, both directions are always reloaded together (<cf/in/ or
871 <cf/out/ options are ignored in that case).
8a7fb885 872
5a203dac
PM
873 <tag/down/
874 Shut BIRD down.
64722c98 875
a4601845 876 <tag>debug <m/protocol/|<m/pattern/|all all|off|{ states | routes | filters | events | packets }</tag>
64722c98 877 Control protocol debugging.
508d9360
OZ
878
879 <tag>dump resources|sockets|interfaces|neighbors|attributes|routes|protocols</tag>
880 Dump contents of internal data structures to the debugging output.
881
882 <tag>echo all|off|{ <m/list of log classes/ } [ <m/buffer-size/ ]</tag>
883 Control echoing of log messages to the command-line output.
884 See <ref id="dsc-log" name="log option"> for a list of log classes.
885
886 <tag>eval <m/expr/</tag>
887 Evaluate given expression.
64722c98 888</descrip>
36032ded 889
dad92c30 890
371adba6 891<chapt>Filters
d37f899b 892
371adba6 893<sect>Introduction
d37f899b 894
dad92c30
OZ
895<p>BIRD contains a simple programming language. (No, it can't yet read mail :-).
896There are two objects in this language: filters and functions. Filters are
897interpreted by BIRD core when a route is being passed between protocols and
898routing tables. The filter language contains control structures such as if's and
899switches, but it allows no loops. An example of a filter using many features can
900be found in <file>filter/test.conf</file>.
d37f899b 901
dad92c30
OZ
902<p>Filter gets the route, looks at its attributes and modifies some of them if
903it wishes. At the end, it decides whether to pass the changed route through
904(using <cf/accept/) or whether to <cf/reject/ it. A simple filter looks like
905this:
d37f899b 906
a0dd1c74 907<code>
d37f899b
PM
908filter not_too_far
909int var;
910{
911 if defined( rip_metric ) then
912 var = rip_metric;
913 else {
914 var = 1;
915 rip_metric = 1;
916 }
917 if rip_metric &gt; 10 then
918 reject "RIP metric is too big";
919 else
920 accept "ok";
921}
a0dd1c74 922</code>
d37f899b 923
dad92c30
OZ
924<p>As you can see, a filter has a header, a list of local variables, and a body.
925The header consists of the <cf/filter/ keyword followed by a (unique) name of
926filter. The list of local variables consists of <cf><M>type name</M>;</cf>
927pairs where each pair defines one local variable. The body consists of <cf>
928{ <M>statements</M> }</cf>. Each <m/statement/ is terminated by a <cf/;/. You
929can group several statements to a single compound statement by using braces
930(<cf>{ <M>statements</M> }</cf>) which is useful if you want to make a bigger
931block of code conditional.
1632f1fe 932
dad92c30
OZ
933<p>BIRD supports functions, so that you don't have to repeat the same blocks of
934code over and over. Functions can have zero or more parameters and they can have
935local variables. Recursion is not allowed. Function definitions look like this:
0e5373fd
PM
936
937<code>
938function name ()
939int local_variable;
940{
941 local_variable = 5;
942}
943
944function with_parameters (int parameter)
945{
946 print parameter;
947}
948</code>
949
dad92c30
OZ
950<p>Unlike in C, variables are declared after the <cf/function/ line, but before
951the first <cf/{/. You can't declare variables in nested blocks. Functions are
952called like in C: <cf>name(); with_parameters(5);</cf>. Function may return
953values using the <cf>return <m/[expr]/</cf> command. Returning a value exits
954from current function (this is similar to C).
0e5373fd 955
dad92c30
OZ
956<p>Filters are declared in a way similar to functions except they can't have
957explicit parameters. They get a route table entry as an implicit parameter, it
958is also passed automatically to any functions called. The filter must terminate
959with either <cf/accept/ or <cf/reject/ statement. If there's a runtime error in
960filter, the route is rejected.
0e5373fd 961
dad92c30
OZ
962<p>A nice trick to debug filters is to use <cf>show route filter <m/name/</cf>
963from the command line client. An example session might look like:
c184d9d0
PM
964
965<code>
966pavel@bug:~/bird$ ./birdc -s bird.ctl
967BIRD 0.0.0 ready.
c184d9d0
PM
968bird> show route
96910.0.0.0/8 dev eth0 [direct1 23:21] (240)
970195.113.30.2/32 dev tunl1 [direct1 23:21] (240)
971127.0.0.0/8 dev lo [direct1 23:21] (240)
972bird> show route ?
1632f1fe 973show route [<prefix>] [table <t>] [filter <f>] [all] [primary]...
66701947 974bird> show route filter { if 127.0.0.5 &tilde; net then accept; }
c184d9d0
PM
975127.0.0.0/8 dev lo [direct1 23:21] (240)
976bird>
977</code>
978
dad92c30 979
371adba6 980<sect>Data types
d37f899b 981
dad92c30
OZ
982<p>Each variable and each value has certain type. Booleans, integers and enums
983are incompatible with each other (that is to prevent you from shooting in the
984foot).
d37f899b
PM
985
986<descrip>
dad92c30
OZ
987 <tag/bool/
988 This is a boolean type, it can have only two values, <cf/true/ and
989 <cf/false/. Boolean is the only type you can use in <cf/if/ statements.
990
991 <tag/int/
992 This is a general integer type. It is an unsigned 32bit type; i.e., you
993 can expect it to store values from 0 to 4294967295. Overflows are not
994 checked. You can use <cf/0x1234/ syntax to write hexadecimal values.
995
996 <tag/pair/
997 This is a pair of two short integers. Each component can have values
998 from 0 to 65535. Literals of this type are written as <cf/(1234,5678)/.
999 The same syntax can also be used to construct a pair from two arbitrary
1000 integer expressions (for example <cf/(1+2,a)/).
1001
1002 <tag/quad/
1003 This is a dotted quad of numbers used to represent router IDs (and
1004 others). Each component can have a value from 0 to 255. Literals of
1005 this type are written like IPv4 addresses.
1006
1007 <tag/string/
1008 This is a string of characters. There are no ways to modify strings in
1009 filters. You can pass them between functions, assign them to variables
1010 of type <cf/string/, print such variables, use standard string
1011 comparison operations (e.g. <cf/=, !=, &lt;, &gt;, &lt;=, &gt;=/), but
1012 you can't concatenate two strings. String literals are written as
1013 <cf/"This is a string constant"/. Additionaly matching <cf/&tilde;/
1014 operator could be used to match a string value against a shell pattern
1015 (represented also as a string).
1016
1017 <tag/ip/
1018 This type can hold a single IP address. Depending on the compile-time
1019 configuration of BIRD you are using, it is either an IPv4 or IPv6
1020 address. IP addresses are written in the standard notation
1021 (<cf/10.20.30.40/ or <cf/fec0:3:4::1/). You can apply special operator
1022 <cf>.mask(<M>num</M>)</cf> on values of type ip. It masks out all but
1023 first <cf><M>num</M></cf> bits from the IP address. So
1024 <cf/1.2.3.4.mask(8) = 1.0.0.0/ is true.
1025
1026 <tag/prefix/
1027 This type can hold a network prefix consisting of IP address and prefix
1028 length. Prefix literals are written as <cf><m/ipaddress//<m/pxlen/</cf>,
1029 or <cf><m>ipaddress</m>/<m>netmask</m></cf>. There are two special
1030 operators on prefixes: <cf/.ip/ which extracts the IP address from the
1031 pair, and <cf/.len/, which separates prefix length from the pair.
1032 So <cf>1.2.0.0/16.pxlen = 16</cf> is true.
1033
1034 <tag/ec/
dad92c30
OZ
1035 This is a specialized type used to represent BGP extended community
1036 values. It is essentially a 64bit value, literals of this type are
1037 usually written as <cf>(<m/kind/, <m/key/, <m/value/)</cf>, where
1038 <cf/kind/ is a kind of extended community (e.g. <cf/rt/ / <cf/ro/ for a
1039 route target / route origin communities), the format and possible values
1040 of <cf/key/ and <cf/value/ are usually integers, but it depends on the
1041 used kind. Similarly to pairs, ECs can be constructed using expressions
1042 for <cf/key/ and <cf/value/ parts, (e.g. <cf/(ro, myas, 3*10)/, where
1043 <cf/myas/ is an integer variable).
dcde7ae5 1044
dad92c30
OZ
1045 <tag/int|pair|quad|ip|prefix|ec|enum set/
1046 Filters recognize four types of sets. Sets are similar to strings: you
1047 can pass them around but you can't modify them. Literals of type <cf>int
1048 set</cf> look like <cf> [ 1, 2, 5..7 ]</cf>. As you can see, both simple
1049 values and ranges are permitted in sets.
1050
1051 For pair sets, expressions like <cf/(123,*)/ can be used to denote
1052 ranges (in that case <cf/(123,0)..(123,65535)/). You can also use
1053 <cf/(123,5..100)/ for range <cf/(123,5)..(123,100)/. You can also use
1054 <cf/*/ and <cf/a..b/ expressions in the first part of a pair, note that
1055 such expressions are translated to a set of intervals, which may be
1056 memory intensive. E.g. <cf/(*,4..20)/ is translated to <cf/(0,4..20),
1057 (1,4..20), (2,4..20), ... (65535, 4..20)/.
1058
1059 EC sets use similar expressions like pair sets, e.g. <cf/(rt, 123,
1060 10..20)/ or <cf/(ro, 123, *)/. Expressions requiring the translation
1061 (like <cf/(rt, *, 3)/) are not allowed (as they usually have 4B range
1062 for ASNs).
1063
1064 You can also use expressions for int, pair and EC set values. However it
1065 must be possible to evaluate these expressions before daemon boots. So
1066 you can use only constants inside them. E.g.
1067
946dc15c
OF
1068 <code>
1069 define one=1;
8815d846 1070 define myas=64500;
946dc15c
OF
1071 int set odds;
1072 pair set ps;
8815d846 1073 ec set es;
946dc15c 1074
8815d846 1075 odds = [ one, 2+1, 6-one, 2*2*2-1, 9, 11 ];
b54ad333 1076 ps = [ (1,one+one), (3,4)..(4,8), (5,*), (6,3..6), (7..9,*) ];
8815d846 1077 es = [ (rt, myas, 3*10), (rt, myas+one, 0..16*16*16-1), (ro, myas+2, *) ];
946dc15c 1078 </code>
b1a597e0 1079
dad92c30
OZ
1080 Sets of prefixes are special: their literals does not allow ranges, but
1081 allows prefix patterns that are written
1082 as <cf><M>ipaddress</M>/<M>pxlen</M>{<M>low</M>,<M>high</M>}</cf>.
1083 Prefix <cf><m>ip1</m>/<m>len1</m></cf> matches prefix
1084 pattern <cf><m>ip2</m>/<m>len2</m>{<m>l</m>,<m>h</m>}</cf> if the
1085 first <cf>min(len1, len2)</cf> bits of <cf/ip1/ and <cf/ip2/ are
1086 identical and <cf>len1 &lt;= ip1 &lt;= len2</cf>. A valid prefix pattern
1087 has to satisfy <cf>low &lt;= high</cf>, but <cf/pxlen/ is not
1088 constrained by <cf/low/ or <cf/high/. Obviously, a prefix matches a
1089 prefix set literal if it matches any prefix pattern in the prefix set
1090 literal.
1091
1092 There are also two shorthands for prefix patterns: <cf><m/address//<m/len/+</cf>
1093 is a shorthand for <cf><m/address//<m/len/{<m/len/,<m/maxlen/}</cf>
1094 (where <cf><m/maxlen/</cf> is 32 for IPv4 and 128 for IPv6), that means
1095 network prefix <cf><m/address//<m/len/</cf> and all its subnets.
1096 <cf><m/address//<m/len/-</cf> is a shorthand for
1097 <cf><m/address//<m/len/{0,<m/len/}</cf>, that means network prefix
1098 <cf><m/address//<m/len/</cf> and all its supernets (network prefixes
1099 that contain it).
1100
1101 For example, <cf>[ 1.0.0.0/8, 2.0.0.0/8+, 3.0.0.0/8-, 4.0.0.0/8{16,24}
1102 ]</cf> matches prefix <cf>1.0.0.0/8</cf>, all subprefixes of
1103 <cf>2.0.0.0/8</cf>, all superprefixes of <cf>3.0.0.0/8</cf> and prefixes
1104 <cf/4.X.X.X/ whose prefix length is 16 to 24. <cf>[ 0.0.0.0/0{20,24} ]</cf>
1105 matches all prefixes (regardless of IP address) whose prefix length is
1106 20 to 24, <cf>[ 1.2.3.4/32- ]</cf> matches any prefix that contains IP
1107 address <cf>1.2.3.4</cf>. <cf>1.2.0.0/16 &tilde; [ 1.0.0.0/8{15,17} ]</cf>
1108 is true, but <cf>1.0.0.0/16 &tilde; [ 1.0.0.0/8- ]</cf> is false.
1109
1110 Cisco-style patterns like <cf>10.0.0.0/8 ge 16 le 24</cf> can be expressed
523f020b 1111 in BIRD as <cf>10.0.0.0/8{16,24}</cf>, <cf>192.168.0.0/16 le 24</cf> as
dad92c30
OZ
1112 <cf>192.168.0.0/16{16,24}</cf> and <cf>192.168.0.0/16 ge 24</cf> as
1113 <cf>192.168.0.0/16{24,32}</cf>.
d37f899b
PM
1114
1115 <tag/enum/
dad92c30
OZ
1116 Enumeration types are fixed sets of possibilities. You can't define your
1117 own variables of such type, but some route attributes are of enumeration
1118 type. Enumeration types are incompatible with each other.
0e5373fd
PM
1119
1120 <tag/bgppath/
dad92c30
OZ
1121 BGP path is a list of autonomous system numbers. You can't write
1122 literals of this type. There are several special operators on bgppaths:
4cdd0784 1123
dad92c30 1124 <cf><m/P/.first</cf> returns the first ASN (the neighbor ASN) in path <m/P/.
4cdd0784 1125
dad92c30 1126 <cf><m/P/.last</cf> returns the last ASN (the source ASN) in path <m/P/.
4cdd0784 1127
9c9cc35c
OZ
1128 <cf><m/P/.last_nonaggregated</cf> returns the last ASN in the non-aggregated part of the path <m/P/.
1129
dad92c30
OZ
1130 Both <cf/first/ and <cf/last/ return zero if there is no appropriate
1131 ASN, for example if the path contains an AS set element as the first (or
9c9cc35c
OZ
1132 the last) part. If the path ends with an AS set, <cf/last_nonaggregated/
1133 may be used to get last ASN before any AS set.
4cdd0784 1134
dad92c30 1135 <cf><m/P/.len</cf> returns the length of path <m/P/.
4cdd0784 1136
dad92c30
OZ
1137 <cf>prepend(<m/P/,<m/A/)</cf> prepends ASN <m/A/ to path <m/P/ and
1138 returns the result.
bff9ce51 1139
dad92c30
OZ
1140 <cf>delete(<m/P/,<m/A/)</cf> deletes all instances of ASN <m/A/ from
1141 from path <m/P/ and returns the result. <m/A/ may also be an integer
1142 set, in that case the operator deletes all ASNs from path <m/P/ that are
1143 also members of set <m/A/.
bff9ce51 1144
dad92c30
OZ
1145 <cf>filter(<m/P/,<m/A/)</cf> deletes all ASNs from path <m/P/ that are
1146 not members of integer set <m/A/. I.e., <cf/filter/ do the same as
1147 <cf/delete/ with inverted set <m/A/.
bff9ce51 1148
dad92c30
OZ
1149 Statement <cf><m/P/ = prepend(<m/P/, <m/A/);</cf> can be shortened to
1150 <cf><m/P/.prepend(<m/A/);</cf> if <m/P/ is appropriate route attribute
1151 (for example <cf/bgp_path/). Similarly for <cf/delete/ and <cf/filter/.
4a5bb2bf 1152
5a203dac 1153 <tag/bgpmask/
dad92c30
OZ
1154 BGP masks are patterns used for BGP path matching (using <cf>path
1155 &tilde; [= 2 3 5 * =]</cf> syntax). The masks resemble wildcard patterns
1156 as used by UNIX shells. Autonomous system numbers match themselves,
1157 <cf/*/ matches any (even empty) sequence of arbitrary AS numbers and
523f020b 1158 <cf/?/ matches one arbitrary AS number. For example, if <cf>bgp_path</cf>
dad92c30
OZ
1159 is 4 3 2 1, then: <tt>bgp_path &tilde; [= * 4 3 * =]</tt> is true,
1160 but <tt>bgp_path &tilde; [= * 4 5 * =]</tt> is false. BGP mask
1161 expressions can also contain integer expressions enclosed in parenthesis
1162 and integer variables, for example <tt>[= * 4 (1+2) a =]</tt>. There is
1163 also old syntax that uses / .. / instead of [= .. =] and ? instead of *.
4cdd0784 1164
126683fe 1165 <tag/clist/
dad92c30
OZ
1166 Clist is similar to a set, except that unlike other sets, it can be
1167 modified. The type is used for community list (a set of pairs) and for
1168 cluster list (a set of quads). There exist no literals of this type.
1169 There are three special operators on clists:
1170
1171 <cf><m/C/.len</cf> returns the length of clist <m/C/.
1172
1173 <cf>add(<m/C/,<m/P/)</cf> adds pair (or quad) <m/P/ to clist <m/C/ and
1174 returns the result. If item <m/P/ is already in clist <m/C/, it does
1175 nothing. <m/P/ may also be a clist, in that case all its members are
1176 added; i.e., it works as clist union.
1177
1178 <cf>delete(<m/C/,<m/P/)</cf> deletes pair (or quad) <m/P/ from clist
1179 <m/C/ and returns the result. If clist <m/C/ does not contain item
1180 <m/P/, it does nothing. <m/P/ may also be a pair (or quad) set, in that
1181 case the operator deletes all items from clist <m/C/ that are also
1182 members of set <m/P/. Moreover, <m/P/ may also be a clist, which works
1183 analogously; i.e., it works as clist difference.
1184
1185 <cf>filter(<m/C/,<m/P/)</cf> deletes all items from clist <m/C/ that are
1186 not members of pair (or quad) set <m/P/. I.e., <cf/filter/ do the same
1187 as <cf/delete/ with inverted set <m/P/. <m/P/ may also be a clist, which
1188 works analogously; i.e., it works as clist intersection.
1189
1190 Statement <cf><m/C/ = add(<m/C/, <m/P/);</cf> can be shortened to
1191 <cf><m/C/.add(<m/P/);</cf> if <m/C/ is appropriate route attribute (for
1192 example <cf/bgp_community/). Similarly for <cf/delete/ and <cf/filter/.
8815d846
OZ
1193
1194 <tag/eclist/
dad92c30
OZ
1195 Eclist is a data type used for BGP extended community lists. Eclists
1196 are very similar to clists, but they are sets of ECs instead of pairs.
1197 The same operations (like <cf/add/, <cf/delete/, or <cf/&tilde;/
1198 membership operator) can be used to modify or test eclists, with ECs
1199 instead of pairs as arguments.
d37f899b
PM
1200</descrip>
1201
dad92c30 1202
a7c9f7c0 1203<sect>Operators
d37f899b 1204
dad92c30
OZ
1205<p>The filter language supports common integer operators <cf>(+,-,*,/)</cf>,
1206parentheses <cf/(a*(b+c))/, comparison <cf/(a=b, a!=b, a&lt;b, a&gt;=b)/.
1207Logical operations include unary not (<cf/!/), and (<cf/&amp;&amp;/) and or
1208(<cf/&verbar;&verbar;/). Special operators include <cf/&tilde;/ for "is element
1209of a set" operation - it can be used on element and set of elements of the same
1210type (returning true if element is contained in the given set), or on two
1211strings (returning true if first string matches a shell-like pattern stored in
1212second string) or on IP and prefix (returning true if IP is within the range
1213defined by that prefix), or on prefix and prefix (returning true if first prefix
1214is more specific than second one) or on bgppath and bgpmask (returning true if
1215the path matches the mask) or on number and bgppath (returning true if the
1216number is in the path) or on bgppath and int (number) set (returning true if any
1217ASN from the path is in the set) or on pair/quad and clist (returning true if
1218the pair/quad is element of the clist) or on clist and pair/quad set (returning
1219true if there is an element of the clist that is also a member of the pair/quad
1220set).
1221
1222<p>There is one operator related to ROA infrastructure - <cf/roa_check()/. It
1223examines a ROA table and does RFC 6483 route origin validation for a given
1224network prefix. The basic usage is <cf>roa_check(<m/table/)</cf>, which checks
1225current route (which should be from BGP to have AS_PATH argument) in the
1226specified ROA table and returns ROA_UNKNOWN if there is no relevant ROA,
1227ROA_VALID if there is a matching ROA, or ROA_INVALID if there are some relevant
af582c48 1228ROAs but none of them match. There is also an extended variant
dad92c30
OZ
1229<cf>roa_check(<m/table/, <m/prefix/, <m/asn/)</cf>, which allows to specify a
1230prefix and an ASN as arguments.
af582c48 1231
d37f899b 1232
371adba6 1233<sect>Control structures
d37f899b 1234
523f020b 1235<p>Filters support two control structures: conditions and case switches.
a7c9f7c0 1236
dad92c30
OZ
1237<p>Syntax of a condition is: <cf>if <M>boolean expression</M> then <m/command1/;
1238else <m/command2/;</cf> and you can use <cf>{ <m/command_1/; <m/command_2/;
1239<M>...</M> }</cf> instead of either command. The <cf>else</cf> clause may be
1240omitted. If the <cf><m>boolean expression</m></cf> is true, <m/command1/ is
1241executed, otherwise <m/command2/ is executed.
1242
1243<p>The <cf>case</cf> is similar to case from Pascal. Syntax is <cf>case
1244<m/expr/ { else: | <m/num_or_prefix [ .. num_or_prefix]/: <m/statement/ ; [
1245... ] }</cf>. The expression after <cf>case</cf> can be of any type which can be
1246on the left side of the &tilde; operator and anything that could be a member of
1247a set is allowed before <cf/:/. Multiple commands are allowed without <cf/{}/
1248grouping. If <cf><m/expr/</cf> matches one of the <cf/:/ clauses, statements
1249between it and next <cf/:/ statement are executed. If <cf><m/expr/</cf> matches
1250neither of the <cf/:/ clauses, the statements after <cf/else:/ are executed.
d37f899b 1251
a7c9f7c0 1252<p>Here is example that uses <cf/if/ and <cf/case/ structures:
af0b25d2
PM
1253
1254<code>
1255case arg1 {
1256 2: print "two"; print "I can do more commands without {}";
1257 3 .. 5: print "three to five";
1258 else: print "something else";
a7c9f7c0 1259}
af0b25d2 1260
523f020b
OZ
1261if 1234 = i then printn "."; else {
1262 print "not 1234";
1263 print "You need {} around multiple commands";
8798c811 1264}
af0b25d2
PM
1265</code>
1266
dad92c30 1267
371adba6 1268<sect>Route attributes
0e5373fd 1269
dad92c30
OZ
1270<p>A filter is implicitly passed a route, and it can access its attributes just
1271like it accesses variables. Attempts to access undefined attribute result in a
1272runtime error; you can check if an attribute is defined by using the
1273<cf>defined( <m>attribute</m> )</cf> operator. One notable exception to this
1274rule are attributes of clist type, where undefined value is regarded as empty
1275clist for most purposes.
a7c9f7c0 1276
36032ded 1277<descrip>
cd4fecb6 1278 <tag><m/prefix/ net</tag>
dad92c30
OZ
1279 Network the route is talking about. Read-only. (See the chapter about
1280 routing tables.)
a7c9f7c0
PM
1281
1282 <tag><m/enum/ scope</tag>
dad92c30
OZ
1283 The scope of the route. Possible values: <cf/SCOPE_HOST/ for routes
1284 local to this host, <cf/SCOPE_LINK/ for those specific for a physical
1285 link, <cf/SCOPE_SITE/ and <cf/SCOPE_ORGANIZATION/ for private routes and
1286 <cf/SCOPE_UNIVERSE/ for globally visible routes. This attribute is not
1287 interpreted by BIRD and can be used to mark routes in filters. The
1288 default value for new routes is <cf/SCOPE_UNIVERSE/.
0e5373fd 1289
cd4fecb6 1290 <tag><m/int/ preference</tag>
dad92c30
OZ
1291 Preference of the route. Valid values are 0-65535. (See the chapter
1292 about routing tables.)
c184d9d0 1293
cd4fecb6 1294 <tag><m/ip/ from</tag>
00192d5a 1295 The router which the route has originated from.
523f020b 1296
cd4fecb6 1297 <tag><m/ip/ gw</tag>
a7c9f7c0 1298 Next hop packets routed using this route should be forwarded to.
0e5373fd 1299
e29fa06e 1300 <tag><m/string/ proto</tag>
dad92c30
OZ
1301 The name of the protocol which the route has been imported from.
1302 Read-only.
e29fa06e 1303
cd4fecb6 1304 <tag><m/enum/ source</tag>
dad92c30
OZ
1305 what protocol has told me about this route. Possible values:
1306 <cf/RTS_DUMMY/, <cf/RTS_STATIC/, <cf/RTS_INHERIT/, <cf/RTS_DEVICE/,
1307 <cf/RTS_STATIC_DEVICE/, <cf/RTS_REDIRECT/, <cf/RTS_RIP/, <cf/RTS_OSPF/,
1308 <cf/RTS_OSPF_IA/, <cf/RTS_OSPF_EXT1/, <cf/RTS_OSPF_EXT2/, <cf/RTS_BGP/,
1309 <cf/RTS_PIPE/.
c184d9d0 1310
cd4fecb6 1311 <tag><m/enum/ cast</tag>
ff2857b0 1312 Route type (Currently <cf/RTC_UNICAST/ for normal routes,
dad92c30
OZ
1313 <cf/RTC_BROADCAST/, <cf/RTC_MULTICAST/, <cf/RTC_ANYCAST/ will be used in
1314 the future for broadcast, multicast and anycast routes). Read-only.
c184d9d0 1315
cd4fecb6 1316 <tag><m/enum/ dest</tag>
182a7895
OZ
1317 Type of destination the packets should be sent to
1318 (<cf/RTD_ROUTER/ for forwarding to a neighboring router,
1319 <cf/RTD_DEVICE/ for routing to a directly-connected network,
1320 <cf/RTD_MULTIPATH/ for multipath destinations,
1321 <cf/RTD_BLACKHOLE/ for packets to be silently discarded,
dad92c30
OZ
1322 <cf/RTD_UNREACHABLE/, <cf/RTD_PROHIBIT/ for packets that should be
1323 returned with ICMP host unreachable / ICMP administratively prohibited
1324 messages). Can be changed, but only to <cf/RTD_BLACKHOLE/,
1325 <cf/RTD_UNREACHABLE/ or <cf/RTD_PROHIBIT/.
b74f45f8 1326
a5fc5958 1327 <tag><m/string/ ifname</tag>
dad92c30
OZ
1328 Name of the outgoing interface. Sink routes (like blackhole, unreachable
1329 or prohibit) and multipath routes have no interface associated with
1330 them, so <cf/ifname/ returns an empty string for such routes. Read-only.
a5fc5958
OZ
1331
1332 <tag><m/int/ ifindex</tag>
dad92c30
OZ
1333 Index of the outgoing interface. System wide index of the interface. May
1334 be used for interface matching, however indexes might change on interface
1335 creation/removal. Zero is returned for routes with undefined outgoing
a5fc5958
OZ
1336 interfaces. Read-only.
1337
b74f45f8 1338 <tag><m/int/ igp_metric</tag>
dad92c30
OZ
1339 The optional attribute that can be used to specify a distance to the
1340 network for routes that do not have a native protocol metric attribute
1341 (like <cf/ospf_metric1/ for OSPF routes). It is used mainly by BGP to
1342 compare internal distances to boundary routers (see below). It is also
1343 used when the route is exported to OSPF as a default value for OSPF type
1344 1 metric.
ba1dda49 1345</descrip>
0e5373fd 1346
dad92c30
OZ
1347<p>There also exist some protocol-specific attributes which are described in the
1348corresponding protocol sections.
1349
0e5373fd 1350
1632f1fe 1351<sect>Other statements
69477cad 1352
a7c9f7c0 1353<p>The following statements are available:
69477cad
PM
1354
1355<descrip>
dad92c30
OZ
1356 <tag><m/variable/ = <m/expr/</tag>
1357 Set variable to a given value.
326e33f5 1358
dad92c30
OZ
1359 <tag>accept|reject [ <m/expr/ ]</tag>
1360 Accept or reject the route, possibly printing <cf><m>expr</m></cf>.
326e33f5 1361
dad92c30
OZ
1362 <tag>return <m/expr/</tag>
1363 Return <cf><m>expr</m></cf> from the current function, the function ends
1364 at this point.
326e33f5 1365
a7c9f7c0 1366 <tag>print|printn <m/expr/ [<m/, expr.../]</tag>
dad92c30
OZ
1367 Prints given expressions; useful mainly while debugging filters. The
1368 <cf/printn/ variant does not terminate the line.
69477cad
PM
1369
1370 <tag>quitbird</tag>
1632f1fe 1371 Terminates BIRD. Useful when debugging the filter interpreter.
69477cad
PM
1372</descrip>
1373
dad92c30 1374
371adba6 1375<chapt>Protocols
d37f899b 1376
1ec52253
OZ
1377<sect><label id="sect-bfd">BFD
1378
1379<sect1>Introduction
1380
1381<p>Bidirectional Forwarding Detection (BFD) is not a routing protocol itself, it
1382is an independent tool providing liveness and failure detection. Routing
1383protocols like OSPF and BGP use integrated periodic "hello" messages to monitor
1384liveness of neighbors, but detection times of these mechanisms are high (e.g. 40
1385seconds by default in OSPF, could be set down to several seconds). BFD offers
1386universal, fast and low-overhead mechanism for failure detection, which could be
1387attached to any routing protocol in an advisory role.
1388
1389<p>BFD consists of mostly independent BFD sessions. Each session monitors an
1390unicast bidirectional path between two BFD-enabled routers. This is done by
1391periodically sending control packets in both directions. BFD does not handle
1392neighbor discovery, BFD sessions are created on demand by request of other
1393protocols (like OSPF or BGP), which supply appropriate information like IP
1394addresses and associated interfaces. When a session changes its state, these
1395protocols are notified and act accordingly (e.g. break an OSPF adjacency when
1396the BFD session went down).
1397
1398<p>BIRD implements basic BFD behavior as defined in
1399RFC 5880<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5880.txt">
1400(some advanced features like the echo mode or authentication are not implemented),
1401IP transport for BFD as defined in
1402RFC 5881<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5881.txt"> and
1403RFC 5883<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5883.txt">
1404and interaction with client protocols as defined in
1405RFC 5882<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5882.txt">.
1406
1407<p>Note that BFD implementation in BIRD is currently a new feature in
1408development, expect some rough edges and possible UI and configuration changes
1409in the future. Also note that we currently support at most one protocol instance.
1410
d96ec7f6
OZ
1411<p>BFD packets are sent with a dynamic source port number. Linux systems use by
1412default a bit different dynamic port range than the IANA approved one
1413(49152-65535). If you experience problems with compatibility, please adjust
1414<cf>/proc/sys/net/ipv4/ip_local_port_range</cf>
1415
1ec52253
OZ
1416<sect1>Configuration
1417
1418<p>BFD configuration consists mainly of multiple definitions of interfaces.
1419Most BFD config options are session specific. When a new session is requested
1420and dynamically created, it is configured from one of these definitions. For
1421sessions to directly connected neighbors, <cf/interface/ definitions are chosen
1422based on the interface associated with the session, while <cf/multihop/
1423definition is used for multihop sessions. If no definition is relevant, the
1424session is just created with the default configuration. Therefore, an empty BFD
1425configuration is often sufficient.
1426
1427<p>Note that to use BFD for other protocols like OSPF or BGP, these protocols
1428also have to be configured to request BFD sessions, usually by <cf/bfd/ option.
1429
1430<p>Some of BFD session options require <m/time/ value, which has to be specified
1431with the appropriate unit: <m/num/ <cf/s/|<cf/ms/|<cf/us/. Although microseconds
1432are allowed as units, practical minimum values are usually in order of tens of
1433milliseconds.
1434
1435<code>
1436protocol bfd [&lt;name&gt;] {
1437 interface &lt;interface pattern&gt; {
1438 interval &lt;time&gt;;
1439 min rx interval &lt;time&gt;;
1440 min tx interval &lt;time&gt;;
1441 idle tx interval &lt;time&gt;;
1442 multiplier &lt;num&gt;;
1443 passive &lt;switch&gt;;
1444 };
1445 multihop {
1446 interval &lt;time&gt;;
1447 min rx interval &lt;time&gt;;
1448 min tx interval &lt;time&gt;;
1449 idle tx interval &lt;time&gt;;
1450 multiplier &lt;num&gt;;
1451 passive &lt;switch&gt;;
1452 };
1453 neighbor &lt;ip&gt; [dev "&lt;interface&gt;"] [local &lt;ip&gt;] [multihop &lt;switch&gt;];
1454}
1455</code>
1456
1457<descrip>
dad92c30 1458 <tag>interface <m/pattern [, ...]/ { <m/options/ }</tag>
1ec52253
OZ
1459 Interface definitions allow to specify options for sessions associated
1460 with such interfaces and also may contain interface specific options.
1461 See <ref id="dsc-iface" name="interface"> common option for a detailed
1462 description of interface patterns. Note that contrary to the behavior of
1463 <cf/interface/ definitions of other protocols, BFD protocol would accept
1464 sessions (in default configuration) even on interfaces not covered by
1465 such definitions.
1466
1467 <tag>multihop { <m/options/ }</tag>
1468 Multihop definitions allow to specify options for multihop BFD sessions,
1469 in the same manner as <cf/interface/ definitions are used for directly
1470 connected sessions. Currently only one such definition (for all multihop
1471 sessions) could be used.
1472
1473 <tag>neighbor <m/ip/ [dev "<m/interface/"] [local <m/ip/] [multihop <m/switch/]</tag>
1474 BFD sessions are usually created on demand as requested by other
1475 protocols (like OSPF or BGP). This option allows to explicitly add
1476 a BFD session to the specified neighbor regardless of such requests.
523f020b 1477
1ec52253 1478 The session is identified by the IP address of the neighbor, with
dad92c30 1479 optional specification of used interface and local IP. By default
1ec52253
OZ
1480 the neighbor must be directly connected, unless the the session is
1481 configured as multihop. Note that local IP must be specified for
1482 multihop sessions.
1483</descrip>
1484
1485<p>Session specific options (part of <cf/interface/ and <cf/multihop/ definitions):
1486
1487<descrip>
1488 <tag>interval <m/time/</tag>
1489 BFD ensures availability of the forwarding path associated with the
1490 session by periodically sending BFD control packets in both
1491 directions. The rate of such packets is controlled by two options,
1492 <cf/min rx interval/ and <cf/min tx interval/ (see below). This option
1493 is just a shorthand to set both of these options together.
1494
1495 <tag>min rx interval <m/time/</tag>
1496 This option specifies the minimum RX interval, which is announced to the
1497 neighbor and used there to limit the neighbor's rate of generated BFD
1498 control packets. Default: 10 ms.
1499
1500 <tag>min tx interval <m/time/</tag>
1501 This option specifies the desired TX interval, which controls the rate
1502 of generated BFD control packets (together with <cf/min rx interval/
1503 announced by the neighbor). Note that this value is used only if the BFD
1504 session is up, otherwise the value of <cf/idle tx interval/ is used
1505 instead. Default: 100 ms.
1506
1507 <tag>idle tx interval <m/time/</tag>
1508 In order to limit unnecessary traffic in cases where a neighbor is not
1509 available or not running BFD, the rate of generated BFD control packets
1510 is lower when the BFD session is not up. This option specifies the
1511 desired TX interval in such cases instead of <cf/min tx interval/.
1512 Default: 1 s.
1513
1514 <tag>multiplier <m/num/</tag>
1515 Failure detection time for BFD sessions is based on established rate of
1516 BFD control packets (<cf>min rx/tx interval</cf>) multiplied by this
1517 multiplier, which is essentially (ignoring jitter) a number of missed
1518 packets after which the session is declared down. Note that rates and
1519 multipliers could be different in each direction of a BFD session.
1520 Default: 5.
1521
1522 <tag>passive <m/switch/</tag>
1523 Generally, both BFD session endpoinds try to establish the session by
1524 sending control packets to the other side. This option allows to enable
1525 passive mode, which means that the router does not send BFD packets
1526 until it has received one from the other side. Default: disabled.
1527</descrip>
1528
1529<sect1>Example
1530
1531<p><code>
1532protocol bfd {
1533 interface "eth*" {
1534 min rx interval 20 ms;
1535 min tx interval 50 ms;
1536 idle tx interval 300 ms;
1537 };
1538 interface "gre*" {
1539 interval 200 ms;
1540 multiplier 10;
1541 passive;
1542 };
1543 multihop {
1544 interval 200 ms;
1545 multiplier 10;
1546 };
1547
1548 neighbor 192.168.1.10;
1549 neighbor 192.168.2.2 dev "eth2";
1550 neighbor 192.168.10.1 local 192.168.1.1 multihop;
1551}
1552</code>
1553
dad92c30 1554
371adba6 1555<sect>BGP
1b55b1a3 1556
dad92c30
OZ
1557<p>The Border Gateway Protocol is the routing protocol used for backbone level
1558routing in the today's Internet. Contrary to other protocols, its convergence
1559does not rely on all routers following the same rules for route selection,
1560making it possible to implement any routing policy at any router in the network,
1561the only restriction being that if a router advertises a route, it must accept
1562and forward packets according to it.
1563
1564<p>BGP works in terms of autonomous systems (often abbreviated as AS). Each AS
1565is a part of the network with common management and common routing policy. It is
1566identified by a unique 16-bit number (ASN). Routers within each AS usually
1567exchange AS-internal routing information with each other using an interior
1568gateway protocol (IGP, such as OSPF or RIP). Boundary routers at the border of
1569the AS communicate global (inter-AS) network reachability information with their
1570neighbors in the neighboring AS'es via exterior BGP (eBGP) and redistribute
1571received information to other routers in the AS via interior BGP (iBGP).
1572
1573<p>Each BGP router sends to its neighbors updates of the parts of its routing
1574table it wishes to export along with complete path information (a list of AS'es
1575the packet will travel through if it uses the particular route) in order to
1576avoid routing loops.
56ab03c7 1577
5459fac6 1578<p>BIRD supports all requirements of the BGP4 standard as defined in
1adc17b4
OZ
1579RFC 4271<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4271.txt">
1580It also supports the community attributes
1581(RFC 1997<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc1997.txt">),
1582capability negotiation
06e0d1b6 1583(RFC 5492<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5492.txt">),
1adc17b4
OZ
1584MD5 password authentication
1585(RFC 2385<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc2385.txt">),
8815d846
OZ
1586extended communities
1587(RFC 4360<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4360.txt">),
523f020b 1588route reflectors
1adc17b4 1589(RFC 4456<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4456.txt">),
6eda3f13
OZ
1590graceful restart
1591(RFC 4724<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4724.txt">),
e8ba557c
OZ
1592multiprotocol extensions
1593(RFC 4760<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4760.txt">),
523f020b 15944B AS numbers
8815d846
OZ
1595(RFC 4893<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4893.txt">),
1596and 4B AS numbers in extended communities
1597(RFC 5668<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5668.txt">).
1adc17b4
OZ
1598
1599
5459fac6 1600For IPv6, it uses the standard multiprotocol extensions defined in
6eda3f13 1601RFC 4760<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4760.txt">
5459fac6
MM
1602and applied to IPv6 according to
1603RFC 2545<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc2545.txt">.
1604
371adba6 1605<sect1>Route selection rules
5459fac6
MM
1606
1607<p>BGP doesn't have any simple metric, so the rules for selection of an optimal
1608route among multiple BGP routes with the same preference are a bit more complex
dad92c30
OZ
1609and they are implemented according to the following algorithm. It starts the
1610first rule, if there are more "best" routes, then it uses the second rule to
1611choose among them and so on.
5459fac6
MM
1612
1613<itemize>
5a203dac 1614 <item>Prefer route with the highest Local Preference attribute.
5459fac6 1615 <item>Prefer route with the shortest AS path.
b74f45f8 1616 <item>Prefer IGP origin over EGP and EGP origin over incomplete.
5459fac6 1617 <item>Prefer the lowest value of the Multiple Exit Discriminator.
b74f45f8
OZ
1618 <item>Prefer routes received via eBGP over ones received via iBGP.
1619 <item>Prefer routes with lower internal distance to a boundary router.
5a203dac 1620 <item>Prefer the route with the lowest value of router ID of the
5459fac6
MM
1621 advertising router.
1622</itemize>
56ab03c7 1623
b74f45f8
OZ
1624<sect1>IGP routing table
1625
dad92c30
OZ
1626<p>BGP is mainly concerned with global network reachability and with routes to
1627other autonomous systems. When such routes are redistributed to routers in the
1628AS via BGP, they contain IP addresses of a boundary routers (in route attribute
1629NEXT_HOP). BGP depends on existing IGP routing table with AS-internal routes to
1630determine immediate next hops for routes and to know their internal distances to
1631boundary routers for the purpose of BGP route selection. In BIRD, there is
1632usually one routing table used for both IGP routes and BGP routes.
b74f45f8 1633
371adba6 1634<sect1>Configuration
56ab03c7 1635
dad92c30
OZ
1636<p>Each instance of the BGP corresponds to one neighboring router. This allows
1637to set routing policy and all the other parameters differently for each neighbor
1638using the following configuration parameters:
5459fac6
MM
1639
1640<descrip>
dad92c30
OZ
1641 <tag>local [<m/ip/] as <m/number/</tag>
1642 Define which AS we are part of. (Note that contrary to other IP routers,
1643 BIRD is able to act as a router located in multiple AS'es simultaneously,
1644 but in such cases you need to tweak the BGP paths manually in the filters
1645 to get consistent behavior.) Optional <cf/ip/ argument specifies a source
1646 address, equivalent to the <cf/source address/ option (see below). This
f3e59178
OZ
1647 parameter is mandatory.
1648
a1beb8f3 1649 <tag>neighbor [<m/ip/] [port <m/number/] [as <m/number/]</tag>
dad92c30 1650 Define neighboring router this instance will be talking to and what AS
a1beb8f3
OZ
1651 it is located in. In case the neighbor is in the same AS as we are, we
1652 automatically switch to iBGP. Optionally, the remote port may also be
1653 specified. The parameter may be used multiple times with different
1654 sub-options (e.g., both <cf/neighbor 10.0.0.1 as 65000;/ and
1655 <cf/neighbor 10.0.0.1; neighbor as 65000;/ are valid). This parameter is
1656 mandatory.
1657
1658 <tag>interface <m/string/</tag>
1659 Define interface we should use for link-local BGP IPv6 sessions.
1660 Interface can also be specified as a part of <cf/neighbor address/
1661 (e.g., <cf/neighbor fe80::1234%eth0 as 65000;/). It is an error to use
1662 this parameter for non link-local sessions.
dad92c30
OZ
1663
1664 <tag>direct</tag>
1665 Specify that the neighbor is directly connected. The IP address of the
1666 neighbor must be from a directly reachable IP range (i.e. associated
1667 with one of your router's interfaces), otherwise the BGP session
1668 wouldn't start but it would wait for such interface to appear. The
1669 alternative is the <cf/multihop/ option. Default: enabled for eBGP.
1670
1671 <tag>multihop [<m/number/]</tag>
1672 Configure multihop BGP session to a neighbor that isn't directly
1673 connected. Accurately, this option should be used if the configured
1674 neighbor IP address does not match with any local network subnets. Such
1675 IP address have to be reachable through system routing table. The
1676 alternative is the <cf/direct/ option. For multihop BGP it is
1677 recommended to explicitly configure the source address to have it
1678 stable. Optional <cf/number/ argument can be used to specify the number
1679 of hops (used for TTL). Note that the number of networks (edges) in a
1680 path is counted; i.e., if two BGP speakers are separated by one router,
1681 the number of hops is 2. Default: enabled for iBGP.
1682
1683 <tag>source address <m/ip/</tag>
1684 Define local address we should use for next hop calculation and as a
1685 source address for the BGP session. Default: the address of the local
9be9a264
OZ
1686 end of the interface our neighbor is connected to.
1687
dad92c30
OZ
1688 <tag>next hop self</tag>
1689 Avoid calculation of the Next Hop attribute and always advertise our own
1690 source address as a next hop. This needs to be used only occasionally to
1691 circumvent misconfigurations of other routers. Default: disabled.
1692
1693 <tag>next hop keep</tag>
1694 Forward the received Next Hop attribute even in situations where the
1695 local address should be used instead, like when the route is sent to an
1696 interface with a different subnet. Default: disabled.
1697
1698 <tag>missing lladdr self|drop|ignore</tag>
1699 Next Hop attribute in BGP-IPv6 sometimes contains just the global IPv6
1700 address, but sometimes it has to contain both global and link-local IPv6
1701 addresses. This option specifies what to do if BIRD have to send both
1702 addresses but does not know link-local address. This situation might
1703 happen when routes from other protocols are exported to BGP, or when
1704 improper updates are received from BGP peers. <cf/self/ means that BIRD
1705 advertises its own local address instead. <cf/drop/ means that BIRD
1706 skips that prefixes and logs error. <cf/ignore/ means that BIRD ignores
1707 the problem and sends just the global address (and therefore forms
1708 improper BGP update). Default: <cf/self/, unless BIRD is configured as a
1709 route server (option <cf/rs client/), in that case default is <cf/ignore/,
1710 because route servers usually do not forward packets themselves.
1711
1712 <tag>gateway direct|recursive</tag>
1713 For received routes, their <cf/gw/ (immediate next hop) attribute is
1714 computed from received <cf/bgp_next_hop/ attribute. This option
1715 specifies how it is computed. Direct mode means that the IP address from
1716 <cf/bgp_next_hop/ is used if it is directly reachable, otherwise the
1717 neighbor IP address is used. Recursive mode means that the gateway is
1718 computed by an IGP routing table lookup for the IP address from
6683d42d
OZ
1719 <cf/bgp_next_hop/. Note that there is just one level of indirection in
1720 recursive mode - the route obtained by the lookup must not be recursive
1721 itself, to prevent mutually recursive routes.
1722
1723 Recursive mode is the behavior specified by the BGP
dad92c30
OZ
1724 standard. Direct mode is simpler, does not require any routes in a
1725 routing table, and was used in older versions of BIRD, but does not
1726 handle well nontrivial iBGP setups and multihop. Recursive mode is
1727 incompatible with <ref id="dsc-sorted" name="sorted tables">. Default:
1728 <cf/direct/ for direct sessions, <cf/recursive/ for multihop sessions.
1729
1730 <tag>igp table <m/name/</tag>
1731 Specifies a table that is used as an IGP routing table. Default: the
1732 same as the table BGP is connected to.
1ec52253 1733
523f020b
OZ
1734 <tag>check link <M>switch</M></tag>
1735 BGP could use hardware link state into consideration. If enabled,
1736 BIRD tracks the link state of the associated interface and when link
1737 disappears (e.g. an ethernet cable is unplugged), the BGP session is
1738 immediately shut down. Note that this option cannot be used with
1739 multihop BGP. Default: disabled.
1740
1ec52253
OZ
1741 <tag>bfd <M>switch</M></tag>
1742 BGP could use BFD protocol as an advisory mechanism for neighbor
1743 liveness and failure detection. If enabled, BIRD setups a BFD session
1744 for the BGP neighbor and tracks its liveness by it. This has an
1745 advantage of an order of magnitude lower detection times in case of
1746 failure. Note that BFD protocol also has to be configured, see
1747 <ref id="sect-bfd" name="BFD"> section for details. Default: disabled.
1748
dad92c30
OZ
1749 <tag>ttl security <m/switch/</tag>
1750 Use GTSM (RFC 5082 - the generalized TTL security mechanism). GTSM
1751 protects against spoofed packets by ignoring received packets with a
1752 smaller than expected TTL. To work properly, GTSM have to be enabled on
1753 both sides of a BGP session. If both <cf/ttl security/ and <cf/multihop/
1754 options are enabled, <cf/multihop/ option should specify proper hop
1755 value to compute expected TTL. Kernel support required: Linux: 2.6.34+
1756 (IPv4), 2.6.35+ (IPv6), BSD: since long ago, IPv4 only. Note that full
1757 (ICMP protection, for example) RFC 5082 support is provided by Linux
b1b19433 1758 only. Default: disabled.
523f020b 1759
dad92c30
OZ
1760 <tag>password <m/string/</tag>
1761 Use this password for MD5 authentication of BGP sessions. Default: no
1762 authentication. Password has to be set by external utility
1763 (e.g. setkey(8)) on BSD systems.
1764
1765 <tag>passive <m/switch/</tag>
1766 Standard BGP behavior is both initiating outgoing connections and
1767 accepting incoming connections. In passive mode, outgoing connections
1768 are not initiated. Default: off.
1769
1770 <tag>rr client</tag>
1771 Be a route reflector and treat the neighbor as a route reflection
1772 client. Default: disabled.
1773
1774 <tag>rr cluster id <m/IPv4 address/</tag>
1775 Route reflectors use cluster id to avoid route reflection loops. When
1776 there is one route reflector in a cluster it usually uses its router id
1777 as a cluster id, but when there are more route reflectors in a cluster,
1778 these need to be configured (using this option) to use a common cluster
1779 id. Clients in a cluster need not know their cluster id and this option
1780 is not allowed for them. Default: the same as router id.
1781
523f020b 1782 <tag>rs client</tag>
dad92c30
OZ
1783 Be a route server and treat the neighbor as a route server client.
1784 A route server is used as a replacement for full mesh EBGP routing in
1785 Internet exchange points in a similar way to route reflectors used in
1786 IBGP routing. BIRD does not implement obsoleted RFC 1863, but uses
1787 ad-hoc implementation, which behaves like plain EBGP but reduces
1788 modifications to advertised route attributes to be transparent (for
1789 example does not prepend its AS number to AS PATH attribute and keeps
1790 MED attribute). Default: disabled.
1791
1792 <tag>secondary <m/switch/</tag>
1793 Usually, if an export filter rejects a selected route, no other route is
1794 propagated for that network. This option allows to try the next route in
1795 order until one that is accepted is found or all routes for that network
1796 are rejected. This can be used for route servers that need to propagate
1797 different tables to each client but do not want to have these tables
1798 explicitly (to conserve memory). This option requires that the connected
1799 routing table is <ref id="dsc-sorted" name="sorted">. Default: off.
48cf5e84 1800
10115b1d
OZ
1801 <tag>add paths <m/switch/|rx|tx</tag>
1802 Standard BGP can propagate only one path (route) per destination network
1803 (usually the selected one). This option controls the add-path protocol
1804 extension, which allows to advertise any number of paths to a
1805 destination. Note that to be active, add-path has to be enabled on both
1806 sides of the BGP session, but it could be enabled separately for RX and
1807 TX direction. When active, all available routes accepted by the export
1808 filter are advertised to the neighbor. Default: off.
1809
523f020b 1810 <tag>allow local as [<m/number/]</tag>
dad92c30
OZ
1811 BGP prevents routing loops by rejecting received routes with the local
1812 AS number in the AS path. This option allows to loose or disable the
1813 check. Optional <cf/number/ argument can be used to specify the maximum
1814 number of local ASNs in the AS path that is allowed for received
1815 routes. When the option is used without the argument, the check is
1816 completely disabled and you should ensure loop-free behavior by some
1817 other means. Default: 0 (no local AS number allowed).
1818
1819 <tag>enable route refresh <m/switch/</tag>
9aed29e6
OZ
1820 After the initial route exchange, BGP protocol uses incremental updates
1821 to keep BGP speakers synchronized. Sometimes (e.g., if BGP speaker
1822 changes its import filter, or if there is suspicion of inconsistency) it
1823 is necessary to do a new complete route exchange. BGP protocol extension
1824 Route Refresh (RFC 2918) allows BGP speaker to request re-advertisement
1825 of all routes from its neighbor. BGP protocol extension Enhanced Route
1826 Refresh (RFC 7313) specifies explicit begin and end for such exchanges,
1827 therefore the receiver can remove stale routes that were not advertised
1828 during the exchange. This option specifies whether BIRD advertises these
1829 capabilities and supports related procedures. Note that even when
1830 disabled, BIRD can send route refresh requests. Default: on.
bf47fe4b 1831
6eda3f13
OZ
1832 <tag>graceful restart <m/switch/|aware</tag>
1833 When a BGP speaker restarts or crashes, neighbors will discard all
1834 received paths from the speaker, which disrupts packet forwarding even
1835 when the forwarding plane of the speaker remains intact. RFC 4724
1836 specifies an optional graceful restart mechanism to alleviate this
1837 issue. This option controls the mechanism. It has three states:
1838 Disabled, when no support is provided. Aware, when the graceful restart
1839 support is announced and the support for restarting neighbors is
1840 provided, but no local graceful restart is allowed (i.e. receiving-only
1841 role). Enabled, when the full graceful restart support is provided
1842 (i.e. both restarting and receiving role). Note that proper support for
1843 local graceful restart requires also configuration of other protocols.
1844 Default: aware.
1845
1846 <tag>graceful restart time <m/number/</tag>
1847 The restart time is announced in the BGP graceful restart capability
1848 and specifies how long the neighbor would wait for the BGP session to
1849 re-establish after a restart before deleting stale routes. Default:
1850 120 seconds.
1851
dad92c30
OZ
1852 <tag>interpret communities <m/switch/</tag>
1853 RFC 1997 demands that BGP speaker should process well-known communities
1854 like no-export (65535, 65281) or no-advertise (65535, 65282). For
1855 example, received route carrying a no-adverise community should not be
1856 advertised to any of its neighbors. If this option is enabled (which is
1857 by default), BIRD has such behavior automatically (it is evaluated when
1858 a route is exported to the BGP protocol just before the export filter).
1859 Otherwise, this integrated processing of well-known communities is
1860 disabled. In that case, similar behavior can be implemented in the
1861 export filter. Default: on.
1862
1863 <tag>enable as4 <m/switch/</tag>
1864 BGP protocol was designed to use 2B AS numbers and was extended later to
1865 allow 4B AS number. BIRD supports 4B AS extension, but by disabling this
1866 option it can be persuaded not to advertise it and to maintain old-style
1867 sessions with its neighbors. This might be useful for circumventing bugs
1868 in neighbor's implementation of 4B AS extension. Even when disabled
1869 (off), BIRD behaves internally as AS4-aware BGP router. Default: on.
1870
79a4f74a
PT
1871 <tag>enable extended messages <m/switch/</tag>
1872 The BGP protocol uses maximum message length of 4096 bytes. This option
1873 provides an extension to allow extended messages with length up
1874 to 65535 bytes. Default: off.
1875
dad92c30
OZ
1876 <tag>capabilities <m/switch/</tag>
1877 Use capability advertisement to advertise optional capabilities. This is
1878 standard behavior for newer BGP implementations, but there might be some
1879 older BGP implementations that reject such connection attempts. When
1880 disabled (off), features that request it (4B AS support) are also
1881 disabled. Default: on, with automatic fallback to off when received
1882 capability-related error.
1883
1884 <tag>advertise ipv4 <m/switch/</tag>
1885 Advertise IPv4 multiprotocol capability. This is not a correct behavior
1886 according to the strict interpretation of RFC 4760, but it is widespread
1887 and required by some BGP implementations (Cisco and Quagga). This option
1888 is relevant to IPv4 mode with enabled capability advertisement
1889 only. Default: on.
1890
1891 <tag>route limit <m/number/</tag>
1892 The maximal number of routes that may be imported from the protocol. If
1893 the route limit is exceeded, the connection is closed with an error.
1894 Limit is currently implemented as <cf>import limit <m/number/ action
1895 restart</cf>. This option is obsolete and it is replaced by
1896 <ref id="import-limit" name="import limit option">. Default: no limit.
1897
1898 <tag>disable after error <m/switch/</tag>
1899 When an error is encountered (either locally or by the other side),
1900 disable the instance automatically and wait for an administrator to fix
1901 the problem manually. Default: off.
1902
1903 <tag>hold time <m/number/</tag>
1904 Time in seconds to wait for a Keepalive message from the other side
1905 before considering the connection stale. Default: depends on agreement
1906 with the neighboring router, we prefer 240 seconds if the other side is
1907 willing to accept it.
1908
1909 <tag>startup hold time <m/number/</tag>
1910 Value of the hold timer used before the routers have a chance to exchange
1911 open messages and agree on the real value. Default: 240 seconds.
1912
1913 <tag>keepalive time <m/number/</tag>
1914 Delay in seconds between sending of two consecutive Keepalive messages.
1915 Default: One third of the hold time.
1916
6cf72d7a
OZ
1917 <tag>connect delay time <m/number/</tag>
1918 Delay in seconds between protocol startup and the first attempt to
1919 connect. Default: 5 seconds.
1920
dad92c30
OZ
1921 <tag>connect retry time <m/number/</tag>
1922 Time in seconds to wait before retrying a failed attempt to connect.
1923 Default: 120 seconds.
1924
dad92c30
OZ
1925 <tag>error wait time <m/number/,<m/number/</tag>
1926 Minimum and maximum delay in seconds between a protocol failure (either
1927 local or reported by the peer) and automatic restart. Doesn't apply
1928 when <cf/disable after error/ is configured. If consecutive errors
1929 happen, the delay is increased exponentially until it reaches the
1930 maximum. Default: 60, 300.
1931
1932 <tag>error forget time <m/number/</tag>
1933 Maximum time in seconds between two protocol failures to treat them as a
1934 error sequence which makes <cf/error wait time/ increase exponentially.
1935 Default: 300 seconds.
1936
1937 <tag>path metric <m/switch/</tag>
1938 Enable comparison of path lengths when deciding which BGP route is the
1939 best one. Default: on.
1940
1941 <tag>med metric <m/switch/</tag>
1942 Enable comparison of MED attributes (during best route selection) even
1943 between routes received from different ASes. This may be useful if all
1944 MED attributes contain some consistent metric, perhaps enforced in
1945 import filters of AS boundary routers. If this option is disabled, MED
1946 attributes are compared only if routes are received from the same AS
1947 (which is the standard behavior). Default: off.
1948
1949 <tag>deterministic med <m/switch/</tag>
1950 BGP route selection algorithm is often viewed as a comparison between
1951 individual routes (e.g. if a new route appears and is better than the
1952 current best one, it is chosen as the new best one). But the proper
1953 route selection, as specified by RFC 4271, cannot be fully implemented
1954 in that way. The problem is mainly in handling the MED attribute. BIRD,
1955 by default, uses an simplification based on individual route comparison,
1956 which in some cases may lead to temporally dependent behavior (i.e. the
1957 selection is dependent on the order in which routes appeared). This
1958 option enables a different (and slower) algorithm implementing proper
1959 RFC 4271 route selection, which is deterministic. Alternative way how to
1960 get deterministic behavior is to use <cf/med metric/ option. This option
1961 is incompatible with <ref id="dsc-sorted" name="sorted tables">.
48cf5e84 1962 Default: off.
be4cd99a 1963
dad92c30
OZ
1964 <tag>igp metric <m/switch/</tag>
1965 Enable comparison of internal distances to boundary routers during best
1966 route selection. Default: on.
1967
1968 <tag>prefer older <m/switch/</tag>
1969 Standard route selection algorithm breaks ties by comparing router IDs.
1970 This changes the behavior to prefer older routes (when both are external
1971 and from different peer). For details, see RFC 5004. Default: off.
1972
1973 <tag>default bgp_med <m/number/</tag>
1974 Value of the Multiple Exit Discriminator to be used during route
1975 selection when the MED attribute is missing. Default: 0.
1976
1977 <tag>default bgp_local_pref <m/number/</tag>
1978 A default value for the Local Preference attribute. It is used when
1979 a new Local Preference attribute is attached to a route by the BGP
1980 protocol itself (for example, if a route is received through eBGP and
1981 therefore does not have such attribute). Default: 100 (0 in pre-1.2.0
1982 versions of BIRD).
5459fac6
MM
1983</descrip>
1984
371adba6 1985<sect1>Attributes
56ab03c7 1986
dad92c30
OZ
1987<p>BGP defines several route attributes. Some of them (those marked with
1988`<tt/I/' in the table below) are available on internal BGP connections only,
1989some of them (marked with `<tt/O/') are optional.
5459fac6
MM
1990
1991<descrip>
dad92c30
OZ
1992 <tag>bgppath <cf/bgp_path/</tag>
1993 Sequence of AS numbers describing the AS path the packet will travel
1994 through when forwarded according to the particular route. In case of
1995 internal BGP it doesn't contain the number of the local AS.
1996
1997 <tag>int <cf/bgp_local_pref/ [I]</tag>
1998 Local preference value used for selection among multiple BGP routes (see
1999 the selection rules above). It's used as an additional metric which is
2000 propagated through the whole local AS.
2001
2002 <tag>int <cf/bgp_med/ [O]</tag>
2003 The Multiple Exit Discriminator of the route is an optional attribute
2004 which is used on external (inter-AS) links to convey to an adjacent AS
2005 the optimal entry point into the local AS. The received attribute is
2006 also propagated over internal BGP links. The attribute value is zeroed
2007 when a route is exported to an external BGP instance to ensure that the
2008 attribute received from a neighboring AS is not propagated to other
2009 neighboring ASes. A new value might be set in the export filter of an
2010 external BGP instance. See RFC 4451<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4451.txt">
b6bf284a 2011 for further discussion of BGP MED attribute.
5a203dac 2012
dad92c30
OZ
2013 <tag>enum <cf/bgp_origin/</tag>
2014 Origin of the route: either <cf/ORIGIN_IGP/ if the route has originated
2015 in an interior routing protocol or <cf/ORIGIN_EGP/ if it's been imported
2016 from the <tt>EGP</tt> protocol (nowadays it seems to be obsolete) or
2017 <cf/ORIGIN_INCOMPLETE/ if the origin is unknown.
5a203dac 2018
dad92c30
OZ
2019 <tag>ip <cf/bgp_next_hop/</tag>
2020 Next hop to be used for forwarding of packets to this destination. On
2021 internal BGP connections, it's an address of the originating router if
2022 it's inside the local AS or a boundary router the packet will leave the
2023 AS through if it's an exterior route, so each BGP speaker within the AS
2024 has a chance to use the shortest interior path possible to this point.
5a203dac 2025
dad92c30
OZ
2026 <tag>void <cf/bgp_atomic_aggr/ [O]</tag>
2027 This is an optional attribute which carries no value, but the sole
2028 presence of which indicates that the route has been aggregated from
2029 multiple routes by some router on the path from the originator.
5a203dac 2030
5459fac6
MM
2031<!-- we don't handle aggregators right since they are of a very obscure type
2032 <tag>bgp_aggregator</tag>
2033-->
dad92c30
OZ
2034 <tag>clist <cf/bgp_community/ [O]</tag>
2035 List of community values associated with the route. Each such value is a
2036 pair (represented as a <cf/pair/ data type inside the filters) of 16-bit
2037 integers, the first of them containing the number of the AS which
2038 defines the community and the second one being a per-AS identifier.
2039 There are lots of uses of the community mechanism, but generally they
2040 are used to carry policy information like "don't export to USA peers".
2041 As each AS can define its own routing policy, it also has a complete
2042 freedom about which community attributes it defines and what will their
2043 semantics be.
2044
2045 <tag>eclist <cf/bgp_ext_community/ [O]</tag>
2046 List of extended community values associated with the route. Extended
2047 communities have similar usage as plain communities, but they have an
2048 extended range (to allow 4B ASNs) and a nontrivial structure with a type
2049 field. Individual community values are represented using an <cf/ec/ data
2050 type inside the filters.
2051
2052 <tag>quad <cf/bgp_originator_id/ [I, O]</tag>
2053 This attribute is created by the route reflector when reflecting the
2054 route and contains the router ID of the originator of the route in the
2055 local AS.
2056
2057 <tag>clist <cf/bgp_cluster_list/ [I, O]</tag>
2058 This attribute contains a list of cluster IDs of route reflectors. Each
2059 route reflector prepends its cluster ID when reflecting the route.
5459fac6
MM
2060</descrip>
2061
371adba6 2062<sect1>Example
56ab03c7 2063
5459fac6
MM
2064<p><code>
2065protocol bgp {
96264d4d 2066 local as 65000; # Use a private AS number
9491f9f5 2067 neighbor 198.51.100.130 as 64496; # Our neighbor ...
6bcef225 2068 multihop; # ... which is connected indirectly
96264d4d
PM
2069 export filter { # We use non-trivial export rules
2070 if source = RTS_STATIC then { # Export only static routes
79a4f74a 2071 # Assign our community
9491f9f5 2072 bgp_community.add((65000,64501));
a852c139 2073 # Artificially increase path length
5a203dac 2074 # by advertising local AS number twice
9491f9f5
OZ
2075 if bgp_path ~ [= 65000 =] then
2076 bgp_path.prepend(65000);
5459fac6
MM
2077 accept;
2078 }
2079 reject;
2080 };
2081 import all;
9491f9f5 2082 source address 198.51.100.14; # Use a non-standard source address
5459fac6
MM
2083}
2084</code>
2085
dad92c30 2086
371adba6 2087<sect>Device
1b55b1a3 2088
dad92c30
OZ
2089<p>The Device protocol is not a real routing protocol. It doesn't generate any
2090routes and it only serves as a module for getting information about network
79a2b697
MM
2091interfaces from the kernel.
2092
dad92c30
OZ
2093<p>Except for very unusual circumstances, you probably should include this
2094protocol in the configuration since almost all other protocols require network
2095interfaces to be defined for them to work with.
79a2b697 2096
6f5603ba 2097<sect1>Configuration
79a2b697
MM
2098
2099<p><descrip>
dad92c30
OZ
2100
2101 <tag>scan time <m/number/</tag>
dad92c30
OZ
2102 Time in seconds between two scans of the network interface list. On
2103 systems where we are notified about interface status changes
2104 asynchronously (such as newer versions of Linux), we need to scan the
2105 list only in order to avoid confusion by lost notification messages,
2106 so the default time is set to a large value.
2107
2108 <tag>primary [ "<m/mask/" ] <m/prefix/</tag>
2109 If a network interface has more than one network address, BIRD has to
2110 choose one of them as a primary one. By default, BIRD chooses the
2111 lexicographically smallest address as the primary one.
2112
2113 This option allows to specify which network address should be chosen as
2114 a primary one. Network addresses that match <m/prefix/ are preferred to
2115 non-matching addresses. If more <cf/primary/ options are used, the first
2116 one has the highest preference. If "<m/mask/" is specified, then such
2117 <cf/primary/ option is relevant only to matching network interfaces.
2118
2119 In all cases, an address marked by operating system as secondary cannot
2120 be chosen as the primary one.
79a2b697
MM
2121</descrip>
2122
79a2b697 2123<p>As the Device protocol doesn't generate any routes, it cannot have
6f5603ba 2124any attributes. Example configuration looks like this:
79a2b697
MM
2125
2126<p><code>
2127protocol device {
2128 scan time 10; # Scan the interfaces often
6f5603ba
OZ
2129 primary "eth0" 192.168.1.1;
2130 primary 192.168.0.0/16;
79a2b697
MM
2131}
2132</code>
2133
dad92c30 2134
371adba6 2135<sect>Direct
1b55b1a3 2136
79a2b697 2137<p>The Direct protocol is a simple generator of device routes for all the
dad92c30
OZ
2138directly connected networks according to the list of interfaces provided by the
2139kernel via the Device protocol.
2140
2141<p>The question is whether it is a good idea to have such device routes in BIRD
2142routing table. OS kernel usually handles device routes for directly connected
2143networks by itself so we don't need (and don't want) to export these routes to
2144the kernel protocol. OSPF protocol creates device routes for its interfaces
2145itself and BGP protocol is usually used for exporting aggregate routes. Although
2146there are some use cases that use the direct protocol (like abusing eBGP as an
2147IGP routing protocol), in most cases it is not needed to have these device
c429d4a4 2148routes in BIRD routing table and to use the direct protocol.
79a2b697 2149
dad92c30
OZ
2150<p>There is one notable case when you definitely want to use the direct protocol
2151-- running BIRD on BSD systems. Having high priority device routes for directly
2152connected networks from the direct protocol protects kernel device routes from
2153being overwritten or removed by IGP routes during some transient network
2154conditions, because a lower priority IGP route for the same network is not
2155exported to the kernel routing table. This is an issue on BSD systems only, as
2156on Linux systems BIRD cannot change non-BIRD route in the kernel routing table.
cf3a704b 2157
5a203dac 2158<p>The only configurable thing about direct is what interfaces it watches:
79a2b697
MM
2159
2160<p><descrip>
dad92c30
OZ
2161 <tag>interface <m/pattern [, ...]/</tag>
2162 By default, the Direct protocol will generate device routes for all the
2163 interfaces available. If you want to restrict it to some subset of
d7c06285
OZ
2164 interfaces or addresses (e.g. if you're using multiple routing tables
2165 for policy routing and some of the policy domains don't contain all
2166 interfaces), just use this clause. See <ref id="dsc-iface" name="interface">
2167 common option for detailed description. The Direct protocol uses
2168 extended interface clauses.
79a2b697
MM
2169</descrip>
2170
79a2b697
MM
2171<p>Direct device routes don't contain any specific attributes.
2172
4f88ac47 2173<p>Example config might look like this:
79a2b697
MM
2174
2175<p><code>
2176protocol direct {
2177 interface "-arc*", "*"; # Exclude the ARCnets
2178}
2179</code>
2180
dad92c30 2181
371adba6 2182<sect>Kernel
1b55b1a3 2183
0e4789c2 2184<p>The Kernel protocol is not a real routing protocol. Instead of communicating
c429d4a4 2185with other routers in the network, it performs synchronization of BIRD's routing
dad92c30
OZ
2186tables with the OS kernel. Basically, it sends all routing table updates to the
2187kernel and from time to time it scans the kernel tables to see whether some
2188routes have disappeared (for example due to unnoticed up/down transition of an
2189interface) or whether an `alien' route has been added by someone else (depending
2190on the <cf/learn/ switch, such routes are either ignored or accepted to our
f8e2d916 2191table).
0e4789c2 2192
dad92c30
OZ
2193<p>Unfortunately, there is one thing that makes the routing table synchronization
2194a bit more complicated. In the kernel routing table there are also device routes
2195for directly connected networks. These routes are usually managed by OS itself
2196(as a part of IP address configuration) and we don't want to touch that. They
2197are completely ignored during the scan of the kernel tables and also the export
2198of device routes from BIRD tables to kernel routing tables is restricted to
2199prevent accidental interference. This restriction can be disabled using
c429d4a4
OZ
2200<cf/device routes/ switch.
2201
dad92c30
OZ
2202<p>If your OS supports only a single routing table, you can configure only one
2203instance of the Kernel protocol. If it supports multiple tables (in order to
2204allow policy routing; such an OS is for example Linux), you can run as many
2205instances as you want, but each of them must be connected to a different BIRD
2206routing table and to a different kernel table.
0e4789c2 2207
dad92c30
OZ
2208<p>Because the kernel protocol is partially integrated with the connected
2209routing table, there are two limitations - it is not possible to connect more
2210kernel protocols to the same routing table and changing route destination
2211(gateway) in an export filter of a kernel protocol does not work. Both
2212limitations can be overcome using another routing table and the pipe protocol.
71ca7716 2213
371adba6 2214<sect1>Configuration
0e4789c2
MM
2215
2216<p><descrip>
6eda3f13
OZ
2217 <tag>persist <m/switch/</tag>
2218 Tell BIRD to leave all its routes in the routing tables when it exits
2219 (instead of cleaning them up).
2220
2221 <tag>scan time <m/number/</tag>
2222 Time in seconds between two consecutive scans of the kernel routing
2223 table.
2224
2225 <tag>learn <m/switch/</tag>
2226 Enable learning of routes added to the kernel routing tables by other
2227 routing daemons or by the system administrator. This is possible only on
2228 systems which support identification of route authorship.
2229
2230 <tag>device routes <m/switch/</tag>
2231 Enable export of device routes to the kernel routing table. By default,
2232 such routes are rejected (with the exception of explicitly configured
2233 device routes from the static protocol) regardless of the export filter
2234 to protect device routes in kernel routing table (managed by OS itself)
2235 from accidental overwriting or erasing.
2236
2237 <tag>kernel table <m/number/</tag>
2238 Select which kernel table should this particular instance of the Kernel
2239 protocol work with. Available only on systems supporting multiple
2240 routing tables.
2241
2242 <tag>graceful restart <m/switch/</tag>
2243 Participate in graceful restart recovery. If this option is enabled and
2244 a graceful restart recovery is active, the Kernel protocol will defer
2245 synchronization of routing tables until the end of the recovery. Note
2246 that import of kernel routes to BIRD is not affected.
8d9eef17
OZ
2247
2248 <tag>merge paths <M>switch</M> [limit <M>number</M>]</tag>
2249 Usually, only best routes are exported to the kernel protocol. With path
2250 merging enabled, both best routes and equivalent non-best routes are
2251 merged during export to generate one ECMP (equal-cost multipath) route
2252 for each network. This is useful e.g. for BGP multipath. Note that best
2253 routes are still pivotal for route export (responsible for most
2254 properties of resulting ECMP routes), while exported non-best routes are
2255 responsible just for additional multipath next hops. This option also
2256 allows to specify a limit on maximal number of nexthops in one route. By
2257 default, multipath merging is disabled. If enabled, default value of the
2258 limit is 16.
0e4789c2
MM
2259</descrip>
2260
71ca7716
OZ
2261<sect1>Attributes
2262
dad92c30
OZ
2263<p>The Kernel protocol defines several attributes. These attributes are
2264translated to appropriate system (and OS-specific) route attributes. We support
2265these attributes:
71ca7716
OZ
2266
2267<descrip>
dad92c30
OZ
2268 <tag>int <cf/krt_source/</tag>
2269 The original source of the imported kernel route. The value is
2270 system-dependent. On Linux, it is a value of the protocol field of the
2271 route. See /etc/iproute2/rt_protos for common values. On BSD, it is
72aed1a0
OZ
2272 based on STATIC and PROTOx flags. The attribute is read-only.
2273
dad92c30
OZ
2274 <tag>int <cf/krt_metric/</tag>
2275 The kernel metric of the route. When multiple same routes are in a
2276 kernel routing table, the Linux kernel chooses one with lower metric.
9ba2798c 2277
dad92c30
OZ
2278 <tag>ip <cf/krt_prefsrc/</tag> (Linux)
2279 The preferred source address. Used in source address selection for
79a4f74a 2280 outgoing packets. Has to be one of the IP addresses of the router.
71ca7716 2281
dad92c30
OZ
2282 <tag>int <cf/krt_realm/</tag> (Linux)
2283 The realm of the route. Can be used for traffic classification.
71ca7716
OZ
2284</descrip>
2285
6683d42d
OZ
2286<p>In Linux, there is also a plenty of obscure route attributes mostly focused
2287on tuning TCP performance of local connections. BIRD supports most of these
2288attributes, see Linux or iproute2 documentation for their meaning. Attributes
2289<cf/krt_lock_*/ and <cf/krt_feature_*/ have type bool, others have type int.
2290Supported attributes are:
2291
2292<cf/krt_mtu/, <cf/krt_lock_mtu/, <cf/krt_window/, <cf/krt_lock_window/,
2293<cf/krt_rtt/, <cf/krt_lock_rtt/, <cf/krt_rttvar/, <cf/krt_lock_rttvar/,
2294<cf/krt_sstresh/, <cf/krt_lock_sstresh/, <cf/krt_cwnd/, <cf/krt_lock_cwnd/,
2295<cf/krt_advmss/, <cf/krt_lock_advmss/, <cf/krt_reordering/, <cf/krt_lock_reordering/,
2296<cf/krt_hoplimit/, <cf/krt_lock_hoplimit/, <cf/krt_rto_min/, <cf/krt_lock_rto_min/,
2297<cf/krt_initcwnd/, <cf/krt_initrwnd/, <cf/krt_quickack/,
2298<cf/krt_feature_ecn/, <cf/krt_feature_allfrag/
2299
71ca7716
OZ
2300<sect1>Example
2301
326e33f5 2302<p>A simple configuration can look this way:
0e4789c2
MM
2303
2304<p><code>
2305protocol kernel {
0e4789c2
MM
2306 export all;
2307}
2308</code>
2309
2310<p>Or for a system with two routing tables:
2311
2312<p><code>
2313protocol kernel { # Primary routing table
2314 learn; # Learn alien routes from the kernel
2315 persist; # Don't remove routes on bird shutdown
2316 scan time 10; # Scan kernel routing table every 10 seconds
2317 import all;
2318 export all;
2319}
2320
2321protocol kernel { # Secondary routing table
2322 table auxtable;
2323 kernel table 100;
2324 export all;
a2a3ced8 2325}
0e4789c2
MM
2326</code>
2327
dad92c30 2328
371adba6 2329<sect>OSPF
1b55b1a3 2330
8fd12e6b
OF
2331<sect1>Introduction
2332
3ca3e999 2333<p>Open Shortest Path First (OSPF) is a quite complex interior gateway
dad92c30
OZ
2334protocol. The current IPv4 version (OSPFv2) is defined in RFC 2328
2335<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc2328.txt">
2336and the current IPv6 version (OSPFv3) is defined in RFC 5340
2337<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5340.txt">
2338It's a link state (a.k.a. shortest path first) protocol -- each router maintains
2339a database describing the autonomous system's topology. Each participating
2340router has an identical copy of the database and all routers run the same
2341algorithm calculating a shortest path tree with themselves as a root. OSPF
2342chooses the least cost path as the best path.
2343
2344<p>In OSPF, the autonomous system can be split to several areas in order to
2345reduce the amount of resources consumed for exchanging the routing information
2346and to protect the other areas from incorrect routing data. Topology of the area
2347is hidden to the rest of the autonomous system.
2348
2349<p>Another very important feature of OSPF is that it can keep routing information
2350from other protocols (like Static or BGP) in its link state database as external
2351routes. Each external route can be tagged by the advertising router, making it
2352possible to pass additional information between routers on the boundary of the
2353autonomous system.
2354
2355<p>OSPF quickly detects topological changes in the autonomous system (such as
2356router interface failures) and calculates new loop-free routes after a short
2357period of convergence. Only a minimal amount of routing traffic is involved.
8fd12e6b 2358
3ca3e999 2359<p>Each router participating in OSPF routing periodically sends Hello messages
dad92c30
OZ
2360to all its interfaces. This allows neighbors to be discovered dynamically. Then
2361the neighbors exchange theirs parts of the link state database and keep it
2362identical by flooding updates. The flooding process is reliable and ensures that
2363each router detects all changes.
8fd12e6b
OF
2364
2365<sect1>Configuration
2366
dad92c30
OZ
2367<p>In the main part of configuration, there can be multiple definitions of OSPF
2368areas, each with a different id. These definitions includes many other switches
2369and multiple definitions of interfaces. Definition of interface may contain many
2370switches and constant definitions and list of neighbors on nonbroadcast
2371networks.
8fd12e6b
OF
2372
2373<code>
088bc8ad 2374protocol ospf &lt;name&gt; {
1632f1fe 2375 rfc1583compat &lt;switch&gt;;
178a197a 2376 instance id &lt;num&gt;;
f623ab98 2377 stub router &lt;switch&gt;;
62eee823 2378 tick &lt;num&gt;;
e91f6960 2379 ecmp &lt;switch&gt; [limit &lt;num&gt;];
145368f5 2380 merge external &lt;switch&gt;;
088bc8ad 2381 area &lt;id&gt; {
2918e610
OZ
2382 stub;
2383 nssa;
bde872bb 2384 summary &lt;switch&gt;;
2918e610
OZ
2385 default nssa &lt;switch&gt;;
2386 default cost &lt;num&gt;;
2387 default cost2 &lt;num&gt;;
bde872bb
OZ
2388 translator &lt;switch&gt;;
2389 translator stability &lt;num&gt;;
2390
16319aeb
OF
2391 networks {
2392 &lt;prefix&gt;;
2393 &lt;prefix&gt; hidden;
2394 }
bde872bb
OZ
2395 external {
2396 &lt;prefix&gt;;
2397 &lt;prefix&gt; hidden;
2398 &lt;prefix&gt; tag &lt;num&gt;;
2399 }
38675202
OZ
2400 stubnet &lt;prefix&gt;;
2401 stubnet &lt;prefix&gt; {
2402 hidden &lt;switch&gt;;
2403 summary &lt;switch&gt;;
2404 cost &lt;num&gt;;
2405 }
0ec031f7 2406 interface &lt;interface pattern&gt; [instance &lt;num&gt;] {
088bc8ad 2407 cost &lt;num&gt;;
e3bc10fd 2408 stub &lt;switch&gt;;
088bc8ad 2409 hello &lt;num&gt;;
a190e720 2410 poll &lt;num&gt;;
088bc8ad
OF
2411 retransmit &lt;num&gt;;
2412 priority &lt;num&gt;;
2413 wait &lt;num&gt;;
2414 dead count &lt;num&gt;;
d8c7d9e8 2415 dead &lt;num&gt;;
48e5f32d 2416 secondary &lt;switch&gt;;
94c42054 2417 rx buffer [normal|large|&lt;num&gt;];
48e5f32d 2418 tx length &lt;num&gt;;
919f5411
OZ
2419 type [broadcast|bcast|pointopoint|ptp|
2420 nonbroadcast|nbma|pointomultipoint|ptmp];
70945cb6 2421 link lsa suppression &lt;switch&gt;;
a190e720 2422 strict nonbroadcast &lt;switch&gt;;
95127cbb 2423 real broadcast &lt;switch&gt;;
8df02847 2424 ptp netmask &lt;switch&gt;;
e91f6960 2425 check link &lt;switch&gt;;
1ec52253 2426 bfd &lt;switch&gt;;
e91f6960 2427 ecmp weight &lt;num&gt;;
6ac4f87a
OZ
2428 ttl security [&lt;switch&gt;; | tx only]
2429 tx class|dscp &lt;num&gt;;
2430 tx priority &lt;num&gt;;
3242ab43 2431 authentication [none|simple|cryptographic];
088bc8ad 2432 password "&lt;text&gt;";
b21f68b4
OZ
2433 password "&lt;text&gt;" {
2434 id &lt;num&gt;;
2435 generate from "&lt;date&gt;";
2436 generate to "&lt;date&gt;";
2437 accept from "&lt;date&gt;";
2438 accept to "&lt;date&gt;";
ea357b8b 2439 };
8fd12e6b 2440 neighbors {
088bc8ad 2441 &lt;ip&gt;;
a190e720 2442 &lt;ip&gt; eligible;
8fd12e6b
OF
2443 };
2444 };
0ec031f7 2445 virtual link &lt;id&gt; [instance &lt;num&gt;] {
98ac6176 2446 hello &lt;num&gt;;
98ac6176
OF
2447 retransmit &lt;num&gt;;
2448 wait &lt;num&gt;;
2449 dead count &lt;num&gt;;
d8c7d9e8 2450 dead &lt;num&gt;;
3242ab43 2451 authentication [none|simple|cryptographic];
98ac6176
OF
2452 password "&lt;text&gt;";
2453 };
8fd12e6b
OF
2454 };
2455}
2456</code>
2457
2458<descrip>
1632f1fe 2459 <tag>rfc1583compat <M>switch</M></tag>
dad92c30
OZ
2460 This option controls compatibility of routing table calculation with
2461 RFC 1583 <htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc1583.txt">.
2462 Default value is no.
e91f6960 2463
178a197a
OZ
2464 <tag>instance id <m/num/</tag>
2465 When multiple OSPF protocol instances are active on the same links, they
2466 should use different instance IDs to distinguish their packets. Although
2467 it could be done on per-interface basis, it is often preferred to set
2468 one instance ID to whole OSPF domain/topology (e.g., when multiple
2469 instances are used to represent separate logical topologies on the same
2470 physical network). This option specifies the default instance ID for all
2471 interfaces of the OSPF instance. Note that this option, if used, must
2472 precede interface definitions. Default value is 0.
2473
f623ab98 2474 <tag>stub router <M>switch</M></tag>
dad92c30
OZ
2475 This option configures the router to be a stub router, i.e., a router
2476 that participates in the OSPF topology but does not allow transit
2477 traffic. In OSPFv2, this is implemented by advertising maximum metric
178a197a
OZ
2478 for outgoing links. In OSPFv3, the stub router behavior is announced by
2479 clearing the R-bit in the router LSA. See RFC 6987
2480 <htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc6987.txt"> for
2481 details. Default value is no.
f623ab98 2482
e91f6960 2483 <tag>tick <M>num</M></tag>
dad92c30
OZ
2484 The routing table calculation and clean-up of areas' databases is not
2485 performed when a single link state change arrives. To lower the CPU
2486 utilization, it's processed later at periodical intervals of <m/num/
2487 seconds. The default value is 1.
e91f6960
OZ
2488
2489 <tag>ecmp <M>switch</M> [limit <M>number</M>]</tag>
dad92c30
OZ
2490 This option specifies whether OSPF is allowed to generate ECMP
2491 (equal-cost multipath) routes. Such routes are used when there are
2492 several directions to the destination, each with the same (computed)
8465dccb 2493 cost. This option also allows to specify a limit on maximum number of
dad92c30
OZ
2494 nexthops in one route. By default, ECMP is disabled. If enabled,
2495 default value of the limit is 16.
e91f6960 2496
145368f5
OZ
2497 <tag>merge external <M>switch</M></tag>
2498 This option specifies whether OSPF should merge external routes from
2499 different routers/LSAs for the same destination. When enabled together
2500 with <cf/ecmp/, equal-cost external routes will be combined to multipath
2501 routes in the same way as regular routes. When disabled, external routes
2502 from different LSAs are treated as separate even if they represents the
2503 same destination. Default value is no.
2504
8fd12e6b 2505 <tag>area <M>id</M></tag>
dad92c30
OZ
2506 This defines an OSPF area with given area ID (an integer or an IPv4
2507 address, similarly to a router ID). The most important area is the
2508 backbone (ID 0) to which every other area must be connected.
8fd12e6b 2509
2918e610 2510 <tag>stub</tag>
dad92c30
OZ
2511 This option configures the area to be a stub area. External routes are
2512 not flooded into stub areas. Also summary LSAs can be limited in stub
2513 areas (see option <cf/summary/). By default, the area is not a stub
2514 area.
bde872bb 2515
2918e610 2516 <tag>nssa</tag>
dad92c30
OZ
2517 This option configures the area to be a NSSA (Not-So-Stubby Area). NSSA
2518 is a variant of a stub area which allows a limited way of external route
2519 propagation. Global external routes are not propagated into a NSSA, but
2520 an external route can be imported into NSSA as a (area-wide) NSSA-LSA
2521 (and possibly translated and/or aggregated on area boundary). By
2522 default, the area is not NSSA.
bde872bb
OZ
2523
2524 <tag>summary <M>switch</M></tag>
dad92c30
OZ
2525 This option controls propagation of summary LSAs into stub or NSSA
2526 areas. If enabled, summary LSAs are propagated as usual, otherwise just
2527 the default summary route (0.0.0.0/0) is propagated (this is sometimes
2528 called totally stubby area). If a stub area has more area boundary
2529 routers, propagating summary LSAs could lead to more efficient routing
2530 at the cost of larger link state database. Default value is no.
bde872bb 2531
2918e610 2532 <tag>default nssa <M>switch</M></tag>
dad92c30
OZ
2533 When <cf/summary/ option is enabled, default summary route is no longer
2534 propagated to the NSSA. In that case, this option allows to originate
2535 default route as NSSA-LSA to the NSSA. Default value is no.
2918e610
OZ
2536
2537 <tag>default cost <M>num</M></tag>
dad92c30
OZ
2538 This option controls the cost of a default route propagated to stub and
2539 NSSA areas. Default value is 1000.
bde872bb 2540
2918e610 2541 <tag>default cost2 <M>num</M></tag>
dad92c30
OZ
2542 When a default route is originated as NSSA-LSA, its cost can use either
2543 type 1 or type 2 metric. This option allows to specify the cost of a
2544 default route in type 2 metric. By default, type 1 metric (option
2545 <cf/default cost/) is used.
2918e610 2546
bde872bb 2547 <tag>translator <M>switch</M></tag>
dad92c30
OZ
2548 This option controls translation of NSSA-LSAs into external LSAs. By
2549 default, one translator per NSSA is automatically elected from area
2550 boundary routers. If enabled, this area boundary router would
2551 unconditionally translate all NSSA-LSAs regardless of translator
2552 election. Default value is no.
bde872bb
OZ
2553
2554 <tag>translator stability <M>num</M></tag>
dad92c30
OZ
2555 This option controls the translator stability interval (in seconds).
2556 When the new translator is elected, the old one keeps translating until
2557 the interval is over. Default value is 40.
8fd12e6b 2558
16319aeb 2559 <tag>networks { <m/set/ }</tag>
dad92c30
OZ
2560 Definition of area IP ranges. This is used in summary LSA origination.
2561 Hidden networks are not propagated into other areas.
16319aeb 2562
bde872bb 2563 <tag>external { <m/set/ }</tag>
dad92c30
OZ
2564 Definition of external area IP ranges for NSSAs. This is used for
2565 NSSA-LSA translation. Hidden networks are not translated into external
2566 LSAs. Networks can have configured route tag.
bde872bb 2567
38675202 2568 <tag>stubnet <m/prefix/ { <m/options/ }</tag>
dad92c30
OZ
2569 Stub networks are networks that are not transit networks between OSPF
2570 routers. They are also propagated through an OSPF area as a part of a
2571 link state database. By default, BIRD generates a stub network record
2572 for each primary network address on each OSPF interface that does not
2573 have any OSPF neighbors, and also for each non-primary network address
2574 on each OSPF interface. This option allows to alter a set of stub
2575 networks propagated by this router.
2576
2577 Each instance of this option adds a stub network with given network
2578 prefix to the set of propagated stub network, unless option <cf/hidden/
2579 is used. It also suppresses default stub networks for given network
2580 prefix. When option <cf/summary/ is used, also default stub networks
2581 that are subnetworks of given stub network are suppressed. This might be
2582 used, for example, to aggregate generated stub networks.
178a197a 2583
0ec031f7 2584 <tag>interface <M>pattern</M> [instance <m/num/]</tag>
dad92c30
OZ
2585 Defines that the specified interfaces belong to the area being defined.
2586 See <ref id="dsc-iface" name="interface"> common option for detailed
d7c06285 2587 description. In OSPFv2, extended interface clauses are used, because
178a197a
OZ
2588 each network prefix is handled as a separate virtual interface.
2589
2590 You can specify alternative instance ID for the interface definition,
2591 therefore it is possible to have several instances of that interface
2592 with different options or even in different areas. For OSPFv2,
2593 instance ID support is an extension (RFC 6549
2594 <htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc6549.txt">) and is
2595 supposed to be set per-protocol. For OSPFv3, it is an integral feature.
0ec031f7
OZ
2596
2597 <tag>virtual link <M>id</M> [instance <m/num/]</tag>
dad92c30
OZ
2598 Virtual link to router with the router id. Virtual link acts as a
2599 point-to-point interface belonging to backbone. The actual area is used
178a197a
OZ
2600 as a transport area. This item cannot be in the backbone. Like with
2601 <cf/interface/ option, you could also use several virtual links to one
2602 destination with different instance IDs.
98ac6176 2603
8fd12e6b 2604 <tag>cost <M>num</M></tag>
dad92c30 2605 Specifies output cost (metric) of an interface. Default value is 10.
8fd12e6b 2606
e3bc10fd 2607 <tag>stub <M>switch</M></tag>
dad92c30
OZ
2608 If set to interface it does not listen to any packet and does not send
2609 any hello. Default value is no.
e3bc10fd 2610
8fd12e6b 2611 <tag>hello <M>num</M></tag>
dad92c30
OZ
2612 Specifies interval in seconds between sending of Hello messages. Beware,
2613 all routers on the same network need to have the same hello interval.
2614 Default value is 10.
8fd12e6b 2615
a190e720 2616 <tag>poll <M>num</M></tag>
dad92c30
OZ
2617 Specifies interval in seconds between sending of Hello messages for some
2618 neighbors on NBMA network. Default value is 20.
a190e720 2619
8fd12e6b 2620 <tag>retransmit <M>num</M></tag>
dad92c30
OZ
2621 Specifies interval in seconds between retransmissions of unacknowledged
2622 updates. Default value is 5.
8fd12e6b 2623
dad92c30 2624 <tag>priority <M>num</M></tag>
0a505706
OZ
2625 On every multiple access network (e.g., the Ethernet) Designated Router
2626 and Backup Designated router are elected. These routers have some special
dad92c30
OZ
2627 functions in the flooding process. Higher priority increases preferences
2628 in this election. Routers with priority 0 are not eligible. Default
2629 value is 1.
8fd12e6b
OF
2630
2631 <tag>wait <M>num</M></tag>
dad92c30 2632 After start, router waits for the specified number of seconds between
178a197a
OZ
2633 starting election and building adjacency. Default value is 4*<m/hello/.
2634
8fd12e6b 2635 <tag>dead count <M>num</M></tag>
dad92c30
OZ
2636 When the router does not receive any messages from a neighbor in
2637 <m/dead count/*<m/hello/ seconds, it will consider the neighbor down.
8fd12e6b 2638
d8c7d9e8 2639 <tag>dead <M>num</M></tag>
dad92c30
OZ
2640 When the router does not receive any messages from a neighbor in
2641 <m/dead/ seconds, it will consider the neighbor down. If both directives
2642 <cf/dead count/ and <cf/dead/ are used, <cf/dead/ has precendence.
48e5f32d
OZ
2643
2644 <tag>secondary <M>switch</M></tag>
2645 On BSD systems, older versions of BIRD supported OSPFv2 only for the
2646 primary IP address of an interface, other IP ranges on the interface
2647 were handled as stub networks. Since v1.4.1, regular operation on
2648 secondary IP addresses is supported, but disabled by default for
2649 compatibility. This option allows to enable it. The option is a
2650 transitional measure, will be removed in the next major release as the
2651 behavior will be changed. On Linux systems, the option is irrelevant, as
2652 operation on non-primary addresses is already the regular behavior.
d8c7d9e8 2653
94c42054 2654 <tag>rx buffer <M>num</M></tag>
48e5f32d
OZ
2655 This option allows to specify the size of buffers used for packet
2656 processing. The buffer size should be bigger than maximal size of any
2657 packets. By default, buffers are dynamically resized as needed, but a
2658 fixed value could be specified. Value <cf/large/ means maximal allowed
2659 packet size - 65535.
2660
2661 <tag>tx length <M>num</M></tag>
2662 Transmitted OSPF messages that contain large amount of information are
2663 segmented to separate OSPF packets to avoid IP fragmentation. This
2664 option specifies the soft ceiling for the length of generated OSPF
2665 packets. Default value is the MTU of the network interface. Note that
2666 larger OSPF packets may still be generated if underlying OSPF messages
2667 cannot be splitted (e.g. when one large LSA is propagated).
94c42054 2668
919f5411 2669 <tag>type broadcast|bcast</tag>
dad92c30
OZ
2670 BIRD detects a type of a connected network automatically, but sometimes
2671 it's convenient to force use of a different type manually. On broadcast
2672 networks (like ethernet), flooding and Hello messages are sent using
2673 multicasts (a single packet for all the neighbors). A designated router
2674 is elected and it is responsible for synchronizing the link-state
2675 databases and originating network LSAs. This network type cannot be used
2676 on physically NBMA networks and on unnumbered networks (networks without
2677 proper IP prefix).
919f5411
OZ
2678
2679 <tag>type pointopoint|ptp</tag>
dad92c30
OZ
2680 Point-to-point networks connect just 2 routers together. No election is
2681 performed and no network LSA is originated, which makes it simpler and
2682 faster to establish. This network type is useful not only for physically
2683 PtP ifaces (like PPP or tunnels), but also for broadcast networks used
2684 as PtP links. This network type cannot be used on physically NBMA
2685 networks.
919f5411
OZ
2686
2687 <tag>type nonbroadcast|nbma</tag>
dad92c30
OZ
2688 On NBMA networks, the packets are sent to each neighbor separately
2689 because of lack of multicast capabilities. Like on broadcast networks,
2690 a designated router is elected, which plays a central role in propagation
2691 of LSAs. This network type cannot be used on unnumbered networks.
919f5411
OZ
2692
2693 <tag>type pointomultipoint|ptmp</tag>
dad92c30
OZ
2694 This is another network type designed to handle NBMA networks. In this
2695 case the NBMA network is treated as a collection of PtP links. This is
2696 useful if not every pair of routers on the NBMA network has direct
2697 communication, or if the NBMA network is used as an (possibly
2698 unnumbered) PtP link.
8fd12e6b 2699
70945cb6
OZ
2700 <tag>link lsa suppression <m/switch/</tag>
2701 In OSPFv3, link LSAs are generated for each link, announcing link-local
2702 IPv6 address of the router to its local neighbors. These are useless on
2703 PtP or PtMP networks and this option allows to suppress the link LSA
2704 origination for such interfaces. The option is ignored on other than PtP
2705 or PtMP interfaces. Default value is no.
2706
2707 <tag>strict nonbroadcast <m/switch/</tag>
dad92c30 2708 If set, don't send hello to any undefined neighbor. This switch is
70945cb6 2709 ignored on other than NBMA or PtMP interfaces. Default value is no.
8fd12e6b 2710
95127cbb 2711 <tag>real broadcast <m/switch/</tag>
dad92c30
OZ
2712 In <cf/type broadcast/ or <cf/type ptp/ network configuration, OSPF
2713 packets are sent as IP multicast packets. This option changes the
2714 behavior to using old-fashioned IP broadcast packets. This may be useful
2715 as a workaround if IP multicast for some reason does not work or does
2716 not work reliably. This is a non-standard option and probably is not
2717 interoperable with other OSPF implementations. Default value is no.
95127cbb 2718
8df02847 2719 <tag>ptp netmask <m/switch/</tag>
dad92c30
OZ
2720 In <cf/type ptp/ network configurations, OSPFv2 implementations should
2721 ignore received netmask field in hello packets and should send hello
2722 packets with zero netmask field on unnumbered PtP links. But some OSPFv2
2723 implementations perform netmask checking even for PtP links. This option
2724 specifies whether real netmask will be used in hello packets on <cf/type
2725 ptp/ interfaces. You should ignore this option unless you meet some
2726 compatibility problems related to this issue. Default value is no for
2727 unnumbered PtP links, yes otherwise.
8df02847 2728
391931d4 2729 <tag>check link <M>switch</M></tag>
dad92c30
OZ
2730 If set, a hardware link state (reported by OS) is taken into consideration.
2731 When a link disappears (e.g. an ethernet cable is unplugged), neighbors
2732 are immediately considered unreachable and only the address of the iface
2733 (instead of whole network prefix) is propagated. It is possible that
2734 some hardware drivers or platforms do not implement this feature.
2735 Default value is no.
e91f6960 2736
1ec52253
OZ
2737 <tag>bfd <M>switch</M></tag>
2738 OSPF could use BFD protocol as an advisory mechanism for neighbor
2739 liveness and failure detection. If enabled, BIRD setups a BFD session
2740 for each OSPF neighbor and tracks its liveness by it. This has an
2741 advantage of an order of magnitude lower detection times in case of
2742 failure. Note that BFD protocol also has to be configured, see
2743 <ref id="sect-bfd" name="BFD"> section for details. Default value is no.
2744
6ac4f87a 2745 <tag>ttl security [<m/switch/ | tx only]</tag>
dad92c30
OZ
2746 TTL security is a feature that protects routing protocols from remote
2747 spoofed packets by using TTL 255 instead of TTL 1 for protocol packets
2748 destined to neighbors. Because TTL is decremented when packets are
2749 forwarded, it is non-trivial to spoof packets with TTL 255 from remote
2750 locations. Note that this option would interfere with OSPF virtual
2751 links.
2752
2753 If this option is enabled, the router will send OSPF packets with TTL
2754 255 and drop received packets with TTL less than 255. If this option si
2755 set to <cf/tx only/, TTL 255 is used for sent packets, but is not
2756 checked for received packets. Default value is no.
6ac4f87a 2757
ef4a50be 2758 <tag>tx class|dscp|priority <m/num/</tag>
dad92c30
OZ
2759 These options specify the ToS/DiffServ/Traffic class/Priority of the
2760 outgoing OSPF packets. See <ref id="dsc-prio" name="tx class"> common
2761 option for detailed description.
ef4a50be 2762
e91f6960 2763 <tag>ecmp weight <M>num</M></tag>
dad92c30
OZ
2764 When ECMP (multipath) routes are allowed, this value specifies a
2765 relative weight used for nexthops going through the iface. Allowed
2766 values are 1-256. Default value is 1.
391931d4 2767
4e8ec666 2768 <tag>authentication none</tag>
dad92c30 2769 No passwords are sent in OSPF packets. This is the default value.
8fd12e6b 2770
4e8ec666 2771 <tag>authentication simple</tag>
dad92c30
OZ
2772 Every packet carries 8 bytes of password. Received packets lacking this
2773 password are ignored. This authentication mechanism is very weak.
8fd12e6b 2774
ea357b8b 2775 <tag>authentication cryptographic</tag>
dad92c30
OZ
2776 16-byte long MD5 digest is appended to every packet. For the digest
2777 generation 16-byte long passwords are used. Those passwords are not sent
2778 via network, so this mechanism is quite secure. Packets can still be
2779 read by an attacker.
ea357b8b 2780
5a203dac 2781 <tag>password "<M>text</M>"</tag>
dad92c30
OZ
2782 An 8-byte or 16-byte password used for authentication. See
2783 <ref id="dsc-pass" name="password"> common option for detailed
2784 description.
8fd12e6b 2785
5a203dac 2786 <tag>neighbors { <m/set/ } </tag>
dad92c30
OZ
2787 A set of neighbors to which Hello messages on NBMA or PtMP networks are
2788 to be sent. For NBMA networks, some of them could be marked as eligible.
2789 In OSPFv3, link-local addresses should be used, using global ones is
2790 possible, but it is nonstandard and might be problematic. And definitely,
2791 link-local and global addresses should not be mixed.
8fd12e6b
OF
2792</descrip>
2793
2794<sect1>Attributes
2795
c27b2449 2796<p>OSPF defines four route attributes. Each internal route has a <cf/metric/.
8fd12e6b 2797
dad92c30
OZ
2798<p>Metric is ranging from 1 to infinity (65535). External routes use
2799<cf/metric type 1/ or <cf/metric type 2/. A <cf/metric of type 1/ is comparable
2800with internal <cf/metric/, a <cf/metric of type 2/ is always longer than any
2801<cf/metric of type 1/ or any <cf/internal metric/. <cf/Internal metric/ or
2802<cf/metric of type 1/ is stored in attribute <cf/ospf_metric1/, <cf/metric type
28032/ is stored in attribute <cf/ospf_metric2/. If you specify both metrics only
2804metric1 is used.
2805
2806<p>Each external route can also carry attribute <cf/ospf_tag/ which is a 32-bit
2807integer which is used when exporting routes to other protocols; otherwise, it
2808doesn't affect routing inside the OSPF domain at all. The fourth attribute
2809<cf/ospf_router_id/ is a router ID of the router advertising that route /
2810network. This attribute is read-only. Default is <cf/ospf_metric2 = 10000/ and
2811<cf/ospf_tag = 0/.
8fd12e6b 2812
dad92c30 2813<sect1>Example
8fd12e6b 2814
9637c7c0 2815<p><code>
8fd12e6b 2816protocol ospf MyOSPF {
dad92c30
OZ
2817 rfc1583compat yes;
2818 tick 2;
76c7efec
OF
2819 export filter {
2820 if source = RTS_BGP then {
2821 ospf_metric1 = 100;
2822 accept;
2823 }
98ac6176 2824 reject;
f434d191 2825 };
8fd12e6b 2826 area 0.0.0.0 {
8fd12e6b
OF
2827 interface "eth*" {
2828 cost 11;
2829 hello 15;
2830 priority 100;
2831 retransmit 7;
2832 authentication simple;
2833 password "aaa";
2834 };
2835 interface "ppp*" {
2836 cost 100;
3b16080c 2837 authentication cryptographic;
f434d191
OZ
2838 password "abc" {
2839 id 1;
2840 generate to "22-04-2003 11:00:06";
2841 accept from "17-01-2001 12:01:05";
2842 };
2843 password "def" {
2844 id 2;
2845 generate to "22-07-2005 17:03:21";
2846 accept from "22-02-2001 11:34:06";
3b16080c 2847 };
8fd12e6b 2848 };
e3bc10fd
OF
2849 interface "arc0" {
2850 cost 10;
2851 stub yes;
2852 };
3b16080c 2853 interface "arc1";
8fd12e6b
OF
2854 };
2855 area 120 {
2856 stub yes;
98ac6176
OF
2857 networks {
2858 172.16.1.0/24;
2859 172.16.2.0/24 hidden;
2860 }
8fd12e6b
OF
2861 interface "-arc0" , "arc*" {
2862 type nonbroadcast;
2863 authentication none;
e3bc10fd 2864 strict nonbroadcast yes;
a190e720
OF
2865 wait 120;
2866 poll 40;
2867 dead count 8;
8fd12e6b 2868 neighbors {
a190e720 2869 192.168.120.1 eligible;
8fd12e6b
OF
2870 192.168.120.2;
2871 192.168.120.10;
2872 };
2873 };
2874 };
2875}
2876</code>
2877
dad92c30 2878
371adba6 2879<sect>Pipe
1b55b1a3 2880
371adba6 2881<sect1>Introduction
a2a3ced8 2882
dad92c30
OZ
2883<p>The Pipe protocol serves as a link between two routing tables, allowing
2884routes to be passed from a table declared as primary (i.e., the one the pipe is
2885connected to using the <cf/table/ configuration keyword) to the secondary one
2886(declared using <cf/peer table/) and vice versa, depending on what's allowed by
2887the filters. Export filters control export of routes from the primary table to
2888the secondary one, import filters control the opposite direction.
2889
2890<p>The Pipe protocol may work in the transparent mode mode or in the opaque
2891mode. In the transparent mode, the Pipe protocol retransmits all routes from
2892one table to the other table, retaining their original source and attributes.
2893If import and export filters are set to accept, then both tables would have
2894the same content. The transparent mode is the default mode.
2895
2896<p>In the opaque mode, the Pipe protocol retransmits optimal route from one
2897table to the other table in a similar way like other protocols send and receive
2898routes. Retransmitted route will have the source set to the Pipe protocol, which
2899may limit access to protocol specific route attributes. This mode is mainly for
2900compatibility, it is not suggested for new configs. The mode can be changed by
f98e2915
OZ
2901<tt/mode/ option.
2902
dad92c30
OZ
2903<p>The primary use of multiple routing tables and the Pipe protocol is for
2904policy routing, where handling of a single packet doesn't depend only on its
2905destination address, but also on its source address, source interface, protocol
2906type and other similar parameters. In many systems (Linux being a good example),
2907the kernel allows to enforce routing policies by defining routing rules which
2908choose one of several routing tables to be used for a packet according to its
2909parameters. Setting of these rules is outside the scope of BIRD's work (on
2910Linux, you can use the <tt/ip/ command), but you can create several routing
2911tables in BIRD, connect them to the kernel ones, use filters to control which
2912routes appear in which tables and also you can employ the Pipe protocol for
2913exporting a selected subset of one table to another one.
a2a3ced8 2914
371adba6 2915<sect1>Configuration
a2a3ced8
MM
2916
2917<p><descrip>
dad92c30
OZ
2918 <tag>peer table <m/table/</tag>
2919 Defines secondary routing table to connect to. The primary one is
2920 selected by the <cf/table/ keyword.
f98e2915 2921
dad92c30
OZ
2922 <tag>mode opaque|transparent</tag>
2923 Specifies the mode for the pipe to work in. Default is transparent.
a2a3ced8
MM
2924</descrip>
2925
371adba6 2926<sect1>Attributes
a2a3ced8
MM
2927
2928<p>The Pipe protocol doesn't define any route attributes.
2929
371adba6 2930<sect1>Example
a2a3ced8 2931
dad92c30
OZ
2932<p>Let's consider a router which serves as a boundary router of two different
2933autonomous systems, each of them connected to a subset of interfaces of the
2934router, having its own exterior connectivity and wishing to use the other AS as
2935a backup connectivity in case of outage of its own exterior line.
2936
2937<p>Probably the simplest solution to this situation is to use two routing tables
2938(we'll call them <cf/as1/ and <cf/as2/) and set up kernel routing rules, so that
2939packets having arrived from interfaces belonging to the first AS will be routed
2940according to <cf/as1/ and similarly for the second AS. Thus we have split our
2941router to two logical routers, each one acting on its own routing table, having
2942its own routing protocols on its own interfaces. In order to use the other AS's
2943routes for backup purposes, we can pass the routes between the tables through a
2944Pipe protocol while decreasing their preferences and correcting their BGP paths
2945to reflect the AS boundary crossing.
a2a3ced8
MM
2946
2947<code>
2948table as1; # Define the tables
2949table as2;
2950
2951protocol kernel kern1 { # Synchronize them with the kernel
2952 table as1;
2953 kernel table 1;
2954}
2955
2956protocol kernel kern2 {
2957 table as2;
2958 kernel table 2;
2959}
2960
2961protocol bgp bgp1 { # The outside connections
2962 table as1;
2963 local as 1;
2964 neighbor 192.168.0.1 as 1001;
2965 export all;
2966 import all;
2967}
2968
2969protocol bgp bgp2 {
2970 table as2;
2971 local as 2;
2972 neighbor 10.0.0.1 as 1002;
2973 export all;
2974 import all;
2975}
2976
2977protocol pipe { # The Pipe
2978 table as1;
2979 peer table as2;
2980 export filter {
2981 if net ~ [ 1.0.0.0/8+] then { # Only AS1 networks
2982 if preference>10 then preference = preference-10;
2983 if source=RTS_BGP then bgp_path.prepend(1);
2984 accept;
2985 }
2986 reject;
2987 };
2988 import filter {
2989 if net ~ [ 2.0.0.0/8+] then { # Only AS2 networks
2990 if preference>10 then preference = preference-10;
2991 if source=RTS_BGP then bgp_path.prepend(2);
2992 accept;
2993 }
2994 reject;
2995 };
2996}
2997</code>
2998
dad92c30 2999
6bcef225
OZ
3000<sect>RAdv
3001
3002<sect1>Introduction
3003
dad92c30
OZ
3004<p>The RAdv protocol is an implementation of Router Advertisements, which are
3005used in the IPv6 stateless autoconfiguration. IPv6 routers send (in irregular
3006time intervals or as an answer to a request) advertisement packets to connected
3007networks. These packets contain basic information about a local network (e.g. a
3008list of network prefixes), which allows network hosts to autoconfigure network
3009addresses and choose a default route. BIRD implements router behavior as defined
3010in RFC 4861<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4861.txt">
0e224d59
OZ
3011and also the DNS extensions from
3012RFC 6106<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc6106.txt">.
6bcef225
OZ
3013
3014<sect1>Configuration
3015
dad92c30
OZ
3016<p>There are several classes of definitions in RAdv configuration -- interface
3017definitions, prefix definitions and DNS definitions:
6bcef225
OZ
3018
3019<descrip>
dad92c30 3020 <tag>interface <m/pattern [, ...]/ { <m/options/ }</tag>
6bcef225
OZ
3021 Interface definitions specify a set of interfaces on which the
3022 protocol is activated and contain interface specific options.
3023 See <ref id="dsc-iface" name="interface"> common options for
3024 detailed description.
3025
0e224d59 3026 <tag>prefix <m/prefix/ { <m/options/ }</tag>
dad92c30
OZ
3027 Prefix definitions allow to modify a list of advertised prefixes. By
3028 default, the advertised prefixes are the same as the network prefixes
3029 assigned to the interface. For each network prefix, the matching prefix
3030 definition is found and its options are used. If no matching prefix
3031 definition is found, the prefix is used with default options.
3032
3033 Prefix definitions can be either global or interface-specific. The
3034 second ones are part of interface options. The prefix definition
3035 matching is done in the first-match style, when interface-specific
3036 definitions are processed before global definitions. As expected, the
3037 prefix definition is matching if the network prefix is a subnet of the
3038 prefix in prefix definition.
0e224d59
OZ
3039
3040 <tag>rdnss { <m/options/ }</tag>
dad92c30
OZ
3041 RDNSS definitions allow to specify a list of advertised recursive DNS
3042 servers together with their options. As options are seldom necessary,
3043 there is also a short variant <cf>rdnss <m/address/</cf> that just
3044 specifies one DNS server. Multiple definitions are cumulative. RDNSS
3045 definitions may also be interface-specific when used inside interface
3046 options. By default, interface uses both global and interface-specific
0e224d59
OZ
3047 options, but that can be changed by <cf/rdnss local/ option.
3048
3049 <tag>dnssl { <m/options/ }</tag>
dad92c30
OZ
3050 DNSSL definitions allow to specify a list of advertised DNS search
3051 domains together with their options. Like <cf/rdnss/ above, multiple
3052 definitions are cumulative, they can be used also as interface-specific
3053 options and there is a short variant <cf>dnssl <m/domain/</cf> that just
3054 specifies one DNS search domain.
36da2857
OZ
3055
3056 <label id="dsc-trigger"> <tag>trigger <m/prefix/</tag>
dad92c30
OZ
3057 RAdv protocol could be configured to change its behavior based on
3058 availability of routes. When this option is used, the protocol waits in
3059 suppressed state until a <it/trigger route/ (for the specified network)
3060 is exported to the protocol, the protocol also returnsd to suppressed
3061 state if the <it/trigger route/ disappears. Note that route export
3062 depends on specified export filter, as usual. This option could be used,
3063 e.g., for handling failover in multihoming scenarios.
3064
3065 During suppressed state, router advertisements are generated, but with
3066 some fields zeroed. Exact behavior depends on which fields are zeroed,
3067 this can be configured by <cf/sensitive/ option for appropriate
3068 fields. By default, just <cf/default lifetime/ (also called <cf/router
3069 lifetime/) is zeroed, which means hosts cannot use the router as a
3070 default router. <cf/preferred lifetime/ and <cf/valid lifetime/ could
3071 also be configured as <cf/sensitive/ for a prefix, which would cause
3072 autoconfigured IPs to be deprecated or even removed.
6bcef225
OZ
3073</descrip>
3074
3075<p>Interface specific options:
3076
3077<descrip>
3078 <tag>max ra interval <m/expr/</tag>
dad92c30
OZ
3079 Unsolicited router advertisements are sent in irregular time intervals.
3080 This option specifies the maximum length of these intervals, in seconds.
3081 Valid values are 4-1800. Default: 600
6bcef225
OZ
3082
3083 <tag>min ra interval <m/expr/</tag>
dad92c30
OZ
3084 This option specifies the minimum length of that intervals, in seconds.
3085 Must be at least 3 and at most 3/4 * <cf/max ra interval/. Default:
3086 about 1/3 * <cf/max ra interval/.
6bcef225
OZ
3087
3088 <tag>min delay <m/expr/</tag>
dad92c30
OZ
3089 The minimum delay between two consecutive router advertisements, in
3090 seconds. Default: 3
6bcef225
OZ
3091
3092 <tag>managed <m/switch/</tag>
dad92c30
OZ
3093 This option specifies whether hosts should use DHCPv6 for IP address
3094 configuration. Default: no
6bcef225
OZ
3095
3096 <tag>other config <m/switch/</tag>
dad92c30
OZ
3097 This option specifies whether hosts should use DHCPv6 to receive other
3098 configuration information. Default: no
6bcef225
OZ
3099
3100 <tag>link mtu <m/expr/</tag>
dad92c30
OZ
3101 This option specifies which value of MTU should be used by hosts. 0
3102 means unspecified. Default: 0
6bcef225
OZ
3103
3104 <tag>reachable time <m/expr/</tag>
dad92c30
OZ
3105 This option specifies the time (in milliseconds) how long hosts should
3106 assume a neighbor is reachable (from the last confirmation). Maximum is
3107 3600000, 0 means unspecified. Default 0.
6bcef225
OZ
3108
3109 <tag>retrans timer <m/expr/</tag>
dad92c30
OZ
3110 This option specifies the time (in milliseconds) how long hosts should
3111 wait before retransmitting Neighbor Solicitation messages. 0 means
3112 unspecified. Default 0.
6bcef225
OZ
3113
3114 <tag>current hop limit <m/expr/</tag>
dad92c30
OZ
3115 This option specifies which value of Hop Limit should be used by
3116 hosts. Valid values are 0-255, 0 means unspecified. Default: 64
6bcef225 3117
36da2857 3118 <tag>default lifetime <m/expr/ [sensitive <m/switch/]</tag>
dad92c30
OZ
3119 This option specifies the time (in seconds) how long (after the receipt
3120 of RA) hosts may use the router as a default router. 0 means do not use
3121 as a default router. For <cf/sensitive/ option, see <ref id="dsc-trigger" name="trigger">.
3122 Default: 3 * <cf/max ra interval/, <cf/sensitive/ yes.
0e224d59 3123
75148289
OZ
3124 <tag>default preference low|medium|high</tag>
3125 This option specifies the Default Router Preference value to advertise
3126 to hosts. Default: medium.
3127
cf98be7b 3128 <tag>rdnss local <m/switch/</tag>
0e224d59 3129 Use only local (interface-specific) RDNSS definitions for this
dad92c30
OZ
3130 interface. Otherwise, both global and local definitions are used. Could
3131 also be used to disable RDNSS for given interface if no local definitons
3132 are specified. Default: no.
0e224d59 3133
cf98be7b 3134 <tag>dnssl local <m/switch/</tag>
dad92c30
OZ
3135 Use only local DNSSL definitions for this interface. See <cf/rdnss local/
3136 option above. Default: no.
6bcef225
OZ
3137</descrip>
3138
3139
3140<p>Prefix specific options:
3141
3142<descrip>
d214ae4f
OZ
3143 <tag>skip <m/switch/</tag>
3144 This option allows to specify that given prefix should not be
dad92c30
OZ
3145 advertised. This is useful for making exceptions from a default policy
3146 of advertising all prefixes. Note that for withdrawing an already
3147 advertised prefix it is more useful to advertise it with zero valid
3148 lifetime. Default: no
d214ae4f 3149
6bcef225 3150 <tag>onlink <m/switch/</tag>
dad92c30
OZ
3151 This option specifies whether hosts may use the advertised prefix for
3152 onlink determination. Default: yes
6bcef225
OZ
3153
3154 <tag>autonomous <m/switch/</tag>
dad92c30
OZ
3155 This option specifies whether hosts may use the advertised prefix for
3156 stateless autoconfiguration. Default: yes
6bcef225 3157
36da2857 3158 <tag>valid lifetime <m/expr/ [sensitive <m/switch/]</tag>
dad92c30
OZ
3159 This option specifies the time (in seconds) how long (after the
3160 receipt of RA) the prefix information is valid, i.e., autoconfigured
3161 IP addresses can be assigned and hosts with that IP addresses are
3162 considered directly reachable. 0 means the prefix is no longer
3163 valid. For <cf/sensitive/ option, see <ref id="dsc-trigger" name="trigger">.
3164 Default: 86400 (1 day), <cf/sensitive/ no.
6bcef225 3165
36da2857 3166 <tag>preferred lifetime <m/expr/ [sensitive <m/switch/]</tag>
dad92c30
OZ
3167 This option specifies the time (in seconds) how long (after the
3168 receipt of RA) IP addresses generated from the prefix using stateless
3169 autoconfiguration remain preferred. For <cf/sensitive/ option,
3170 see <ref id="dsc-trigger" name="trigger">. Default: 14400 (4 hours),
3171 <cf/sensitive/ no.
6bcef225
OZ
3172</descrip>
3173
0e224d59
OZ
3174
3175<p>RDNSS specific options:
3176
3177<descrip>
3178 <tag>ns <m/address/</tag>
dad92c30
OZ
3179 This option specifies one recursive DNS server. Can be used multiple
3180 times for multiple servers. It is mandatory to have at least one
3181 <cf/ns/ option in <cf/rdnss/ definition.
0e224d59
OZ
3182
3183 <tag>lifetime [mult] <m/expr/</tag>
dad92c30
OZ
3184 This option specifies the time how long the RDNSS information may be
3185 used by clients after the receipt of RA. It is expressed either in
3186 seconds or (when <cf/mult/ is used) in multiples of <cf/max ra
3187 interval/. Note that RDNSS information is also invalidated when
3188 <cf/default lifetime/ expires. 0 means these addresses are no longer
3189 valid DNS servers. Default: 3 * <cf/max ra interval/.
0e224d59
OZ
3190</descrip>
3191
3192
3193<p>DNSSL specific options:
3194
3195<descrip>
3196 <tag>domain <m/address/</tag>
dad92c30
OZ
3197 This option specifies one DNS search domain. Can be used multiple times
3198 for multiple domains. It is mandatory to have at least one <cf/domain/
3199 option in <cf/dnssl/ definition.
0e224d59
OZ
3200
3201 <tag>lifetime [mult] <m/expr/</tag>
dad92c30
OZ
3202 This option specifies the time how long the DNSSL information may be
3203 used by clients after the receipt of RA. Details are the same as for
3204 RDNSS <cf/lifetime/ option above. Default: 3 * <cf/max ra interval/.
0e224d59
OZ
3205</descrip>
3206
3207
6bcef225
OZ
3208<sect1>Example
3209
3210<p><code>
3211protocol radv {
3212 interface "eth2" {
3213 max ra interval 5; # Fast failover with more routers
3214 managed yes; # Using DHCPv6 on eth2
3215 prefix ::/0 {
3216 autonomous off; # So do not autoconfigure any IP
3217 };
3218 };
3219
3220 interface "eth*"; # No need for any other options
3221
3222 prefix 2001:0DB8:1234::/48 {
3223 preferred lifetime 0; # Deprecated address range
3224 };
3225
3226 prefix 2001:0DB8:2000::/48 {
3227 autonomous off; # Do not autoconfigure
3228 };
fc06fb62
OZ
3229
3230 rdnss 2001:0DB8:1234::10; # Short form of RDNSS
3231
3232 rdnss {
3233 lifetime mult 10;
3234 ns 2001:0DB8:1234::11;
3235 ns 2001:0DB8:1234::12;
3236 };
3237
3238 dnssl {
3239 lifetime 3600;
3240 domain "abc.com";
3241 domain "xyz.com";
3242 };
6bcef225
OZ
3243}
3244</code>
3245
dad92c30 3246
1532a244 3247<sect>RIP
d37f899b 3248
371adba6 3249<sect1>Introduction
d37f899b 3250
dad92c30
OZ
3251<p>The RIP protocol (also sometimes called Rest In Pieces) is a simple protocol,
3252where each router broadcasts (to all its neighbors) distances to all networks it
3253can reach. When a router hears distance to another network, it increments it and
3254broadcasts it back. Broadcasts are done in regular intervals. Therefore, if some
3255network goes unreachable, routers keep telling each other that its distance is
3256the original distance plus 1 (actually, plus interface metric, which is usually
3257one). After some time, the distance reaches infinity (that's 15 in RIP) and all
3258routers know that network is unreachable. RIP tries to minimize situations where
3259counting to infinity is necessary, because it is slow. Due to infinity being 16,
3260you can't use RIP on networks where maximal distance is higher than 15
8465dccb
OZ
3261hosts.
3262
3263<p>BIRD supports RIPv1
3264(RFC 1058<htmlurl url="http://www.rfc-editor.org/rfc/rfc1058.txt">),
3265RIPv2 (RFC 2453<htmlurl url="http://www.rfc-editor.org/rfc/rfc2453.txt">),
3266RIPng (RFC 2080<htmlurl url="http://www.rfc-editor.org/rfc/rfc2080.txt">),
3267and RIP cryptographic authentication (SHA-1 not implemented)
3268(RFC 4822<htmlurl url="http://www.rfc-editor.org/rfc/rfc4822.txt">).
440439e3 3269
1532a244 3270<p>RIP is a very simple protocol, and it has a lot of shortcomings. Slow
dad92c30
OZ
3271convergence, big network load and inability to handle larger networks makes it
3272pretty much obsolete. It is still usable on very small networks.
d37f899b 3273
371adba6 3274<sect1>Configuration
d37f899b 3275
8465dccb
OZ
3276<p>RIP configuration consists mainly of common protocol options and interface
3277definitions, most RIP options are interface specific.
3278
3279<code>
3280protocol rip [&lt;name&gt;] {
3281 infinity &lt;number&gt;;
3282 ecmp &lt;switch&gt; [limit &lt;number&gt;];
3283 interface &lt;interface pattern&gt; {
3284 metric &lt;number&gt;;
3285 mode multicast|broadcast;
3286 passive &lt;switch&gt;;
3287 address &lt;ip&gt;;
3288 port &lt;number&gt;;
3289 version 1|2;
3290 split horizon &lt;switch&gt;;
3291 poison reverse &lt;switch&gt;;
3292 check zero &lt;switch&gt;;
3293 update time &lt;number&gt;;
3294 timeout time &lt;number&gt;;
3295 garbage time &lt;number&gt;;
3296 ecmp weight &lt;number&gt;;
3297 ttl security &lt;switch&gt;; | tx only;
3298 tx class|dscp &lt;number&gt;;
3299 tx priority &lt;number&gt;;
3300 rx buffer &lt;number&gt;;
3301 tx length &lt;number&gt;;
3302 check link &lt;switch&gt;;
3303 authentication none|plaintext|cryptographic;
3304 password "&lt;text&gt;";
3305 password "&lt;text&gt;" {
3306 id &lt;num&gt;;
3307 generate from "&lt;date&gt;";
3308 generate to "&lt;date&gt;";
3309 accept from "&lt;date&gt;";
3310 accept to "&lt;date&gt;";
3311 };
3312 };
3313}
3314</code>
d37f899b
PM
3315
3316<descrip>
8465dccb
OZ
3317 <tag>infinity <M>number</M></tag>
3318 Selects the distance of infinity. Bigger values will make
3319 protocol convergence even slower. The default value is 16.
dad92c30 3320
8465dccb
OZ
3321 <tag>ecmp <M>switch</M> [limit <M>number</M>]</tag>
3322 This option specifies whether RIP is allowed to generate ECMP
3323 (equal-cost multipath) routes. Such routes are used when there are
3324 several directions to the destination, each with the same (computed)
3325 cost. This option also allows to specify a limit on maximum number of
3326 nexthops in one route. By default, ECMP is disabled. If enabled,
3327 default value of the limit is 16.
3328
3329 <tag>interface <m/pattern [, ...]/ { <m/options/ }</tag>
3330 Interface definitions specify a set of interfaces on which the
3331 protocol is activated and contain interface specific options.
3332 See <ref id="dsc-iface" name="interface"> common options for
3333 detailed description.
d37f899b
PM
3334</descrip>
3335
8465dccb 3336<p>Interface specific options:
ef4a50be
OZ
3337
3338<descrip>
3339 <tag>metric <m/num/</tag>
8465dccb
OZ
3340 This option specifies the metric of the interface. When a route is
3341 received from the interface, its metric is increased by this value
3342 before further processing. Valid values are 1-255, but values higher
3343 than infinity has no further meaning. Default: 1.
3344
3345 <tag>mode multicast|broadcast</tag>
3346 This option selects the mode for RIP to use on the interface. The
3347 default is multicast mode for RIPv2 and broadcast mode for RIPv1.
3348 RIPng always uses the multicast mode.
3349
3350 <tag>passive <m/switch/</tag>
3351 Passive interfaces receive routing updates but do not transmit any
3352 messages. Default: no.
3353
3354 <tag>address <m/ip/</tag>
3355 This option specifies a destination address used for multicast or
3356 broadcast messages, the default is the official RIP (224.0.0.9) or RIPng
3357 (ff02::9) multicast address, or an appropriate broadcast address in the
3358 broadcast mode.
3359
3360 <tag>port <m/number/</tag>
3361 This option selects an UDP port to operate on, the default is the
3362 official RIP (520) or RIPng (521) port.
3363
3364 <tag>version 1|2</tag>
3365 This option selects the version of RIP used on the interface. For RIPv1,
3366 automatic subnet aggregation is not implemented, only classful network
3367 routes and host routes are propagated. Note that BIRD allows RIPv1 to be
3368 configured with features that are defined for RIPv2 only, like
3369 authentication or using multicast sockets. The default is RIPv2 for IPv4
3370 RIP, the option is not supported for RIPng, as no further versions are
3371 defined.
3372
3373 <tag>split horizon <m/switch/</tag>
3374 Split horizon is a scheme for preventing routing loops. When split
3375 horizon is active, routes are not regularly propagated back to the
3376 interface from which they were received. They are either not propagated
3377 back at all (plain split horizon) or propagated back with an infinity
3378 metric (split horizon with poisoned reverse). Therefore, other routers
3379 on the interface will not consider the router as a part of an
3380 independent path to the destination of the route. Default: yes.
3381
3382 <tag>poison reverse <m/switch/</tag>
3383 When split horizon is active, this option specifies whether the poisoned
3384 reverse variant (propagating routes back with an infinity metric) is
3385 used. The poisoned reverse has some advantages in faster convergence,
3386 but uses more network traffic. Default: yes.
3387
3388 <tag>check zero <m/switch/</tag>
3389 Received RIPv1 packets with non-zero values in reserved fields should
3390 be discarded. This option specifies whether the check is performed or
3391 such packets are just processed as usual. Default: yes.
3392
3393 <tag>update time <m/number/</tag>
3394 Specifies the number of seconds between periodic updates. A lower number
3395 will mean faster convergence but bigger network load. Default: 30.
3396
3397 <tag>timeout time <m/number/</tag>
3398 Specifies the time interval (in seconds) between the last received route
3399 announcement and the route expiration. After that, the network is
3400 considered unreachable, but still is propagated with infinity distance.
3401 Default: 180.
3402
3403 <tag>garbage time <m/number/</tag>
3404 Specifies the time interval (in seconds) between the route expiration
3405 and the removal of the unreachable network entry. The garbage interval,
3406 when a route with infinity metric is propagated, is used for both
3407 internal (after expiration) and external (after withdrawal) routes.
3408 Default: 120.
3409
3410 <tag>ecmp weight <m/number/</tag>
3411 When ECMP (multipath) routes are allowed, this value specifies a
3412 relative weight used for nexthops going through the iface. Valid
3413 values are 1-256. Default value is 1.
ef4a50be 3414
8465dccb
OZ
3415 <tag>authentication none|plaintext|cryptographic</tag>
3416 Selects authentication method to be used. <cf/none/ means that packets
3417 are not authenticated at all, <cf/plaintext/ means that a plaintext
3418 password is embedded into each packet, and <cf/cryptographic/ means that
3419 packets are authenticated using a MD5 cryptographic hash. If you set
3420 authentication to not-none, it is a good idea to add <cf>password</cf>
3421 section. Default: none.
3422
3423 <tag>password "<m/text/"</tag>
3424 Specifies a password used for authentication. See <ref id="dsc-pass"
3425 name="password"> common option for detailed description.
ef4a50be 3426
6ac4f87a 3427 <tag>ttl security [<m/switch/ | tx only]</tag>
dad92c30
OZ
3428 TTL security is a feature that protects routing protocols from remote
3429 spoofed packets by using TTL 255 instead of TTL 1 for protocol packets
3430 destined to neighbors. Because TTL is decremented when packets are
3431 forwarded, it is non-trivial to spoof packets with TTL 255 from remote
3432 locations.
3433
3434 If this option is enabled, the router will send RIP packets with TTL 255
3435 and drop received packets with TTL less than 255. If this option si set
3436 to <cf/tx only/, TTL 255 is used for sent packets, but is not checked
3437 for received packets. Such setting does not offer protection, but offers
3438 compatibility with neighbors regardless of whether they use ttl
3439 security.
3440
8465dccb
OZ
3441 For RIPng, TTL security is a standard behavior (required by RFC 2080)
3442 and therefore default value is yes. For IPv4 RIP, default value is no.
6ac4f87a 3443
8465dccb 3444 <tag>tx class|dscp|priority <m/number/</tag>
dad92c30
OZ
3445 These options specify the ToS/DiffServ/Traffic class/Priority of the
3446 outgoing RIP packets. See <ref id="dsc-prio" name="tx class"> common
3447 option for detailed description.
d37f899b 3448
8465dccb
OZ
3449 <tag>rx buffer <m/number/</tag>
3450 This option specifies the size of buffers used for packet processing.
3451 The buffer size should be bigger than maximal size of received packets.
3452 The default value is 532 for IPv4 RIP and interface MTU value for RIPng.
3453
3454 <tag>tx length <m/number/</tag>
3455 This option specifies the maximum length of generated RIP packets. To
3456 avoid IP fragmentation, it should not exceed the interface MTU value.
3457 The default value is 532 for IPv4 RIP and interface MTU value for RIPng.
3458
3459 <tag>check link <m/switch/</tag>
3460 If set, the hardware link state (as reported by OS) is taken into
3461 consideration. When the link disappears (e.g. an ethernet cable is
3462 unplugged), neighbors are immediately considered unreachable and all
3463 routes received from them are withdrawn. It is possible that some
3464 hardware drivers or platforms do not implement this feature. Default:
3465 no.
d37f899b
PM
3466</descrip>
3467
371adba6 3468<sect1>Attributes
d37f899b 3469
1b55b1a3
MM
3470<p>RIP defines two route attributes:
3471
3472<descrip>
dad92c30
OZ
3473 <tag>int <cf/rip_metric/</tag>
3474 RIP metric of the route (ranging from 0 to <cf/infinity/). When routes
3475 from different RIP instances are available and all of them have the same
8465dccb
OZ
3476 preference, BIRD prefers the route with lowest <cf/rip_metric/. When a
3477 non-RIP route is exported to RIP, the default metric is 1.
dad92c30
OZ
3478
3479 <tag>int <cf/rip_tag/</tag>
3480 RIP route tag: a 16-bit number which can be used to carry additional
3481 information with the route (for example, an originating AS number in
8465dccb
OZ
3482 case of external routes). When a non-RIP route is exported to RIP, the
3483 default tag is 0.
1b55b1a3
MM
3484</descrip>
3485
371adba6 3486<sect1>Example
1b55b1a3
MM
3487
3488<p><code>
8465dccb 3489protocol rip {
d37f899b
PM
3490 debug all;
3491 port 1520;
2bf59bf4 3492 period 12;
326e33f5 3493 garbage time 60;
f434d191
OZ
3494 interface "eth0" { metric 3; mode multicast; };
3495 interface "eth*" { metric 2; mode broadcast; };
d37f899b
PM
3496 authentication none;
3497 import filter { print "importing"; accept; };
3498 export filter { print "exporting"; accept; };
3499}
a0dd1c74 3500</code>
d37f899b 3501
dad92c30 3502
371adba6 3503<sect>Static
1b55b1a3 3504
0e4789c2 3505<p>The Static protocol doesn't communicate with other routers in the network,
f8e2d916 3506but instead it allows you to define routes manually. This is often used for
79a2b697 3507specifying how to forward packets to parts of the network which don't use
dad92c30
OZ
3508dynamic routing at all and also for defining sink routes (i.e., those telling to
3509return packets as undeliverable if they are in your IP block, you don't have any
3510specific destination for them and you don't want to send them out through the
3511default route to prevent routing loops).
3512
3513<p>There are five types of static routes: `classical' routes telling to forward
3514packets to a neighboring router, multipath routes specifying several (possibly
3515weighted) neighboring routers, device routes specifying forwarding to hosts on a
3516directly connected network, recursive routes computing their nexthops by doing
3517route table lookups for a given IP and special routes (sink, blackhole etc.)
3518which specify a special action to be done instead of forwarding the packet.
79a2b697
MM
3519
3520<p>When the particular destination is not available (the interface is down or
3521the next hop of the route is not a neighbor at the moment), Static just
326e33f5 3522uninstalls the route from the table it is connected to and adds it again as soon
a00c7a18 3523as the destination becomes adjacent again.
79a2b697 3524
dad92c30
OZ
3525<p>The Static protocol does not have many configuration options. The definition
3526of the protocol contains mainly a list of static routes:
79a2b697
MM
3527
3528<descrip>
dad92c30 3529 <tag>route <m/prefix/ via <m/ip/</tag>
6683d42d
OZ
3530 Static route through a neighboring router. For link-local next hops,
3531 interface can be specified as a part of the address (e.g.,
3532 <cf/via fe80::1234%eth0/).
dad92c30 3533
e91f6960
OZ
3534 <tag>route <m/prefix/ multipath via <m/ip/ [weight <m/num/] [via ...]</tag>
3535 Static multipath route. Contains several nexthops (gateways), possibly
3536 with their weights.
dad92c30
OZ
3537
3538 <tag>route <m/prefix/ via <m/"interface"/</tag>
3539 Static device route through an interface to hosts on a directly
3540 connected network.
3541
3542 <tag>route <m/prefix/ recursive <m/ip/</tag>
3543 Static recursive route, its nexthop depends on a route table lookup for
3544 given IP address.
3545
3546 <tag>route <m/prefix/ blackhole|unreachable|prohibit</tag>
3547 Special routes specifying to silently drop the packet, return it as
3548 unreachable or return it as administratively prohibited. First two
3549 targets are also known as <cf/drop/ and <cf/reject/.
391931d4 3550
4116db18 3551 <tag>check link <m/switch/</tag>
dad92c30
OZ
3552 If set, hardware link states of network interfaces are taken into
3553 consideration. When link disappears (e.g. ethernet cable is unplugged),
3554 static routes directing to that interface are removed. It is possible
3555 that some hardware drivers or platforms do not implement this feature.
3556 Default: off.
3557
3558 <tag>igp table <m/name/</tag>
3559 Specifies a table that is used for route table lookups of recursive
3560 routes. Default: the same table as the protocol is connected to.
79a2b697
MM
3561</descrip>
3562
79a2b697
MM
3563<p>Static routes have no specific attributes.
3564
4f88ac47 3565<p>Example static config might look like this:
79a2b697
MM
3566
3567<p><code>
3568protocol static {
96264d4d 3569 table testable; # Connect to a non-default routing table
9491f9f5 3570 route 0.0.0.0/0 via 198.51.100.130; # Default route
e91f6960 3571 route 10.0.0.0/8 multipath # Multipath route
9491f9f5
OZ
3572 via 198.51.100.10 weight 2
3573 via 198.51.100.20
3574 via 192.0.2.1;
80a9cadc 3575 route 203.0.113.0/24 unreachable; # Sink route
96264d4d 3576 route 10.2.0.0/24 via "arc0"; # Secondary network
79a2b697
MM
3577}
3578</code>
3579
dad92c30 3580
96264d4d
PM
3581<chapt>Conclusions
3582
3583<sect>Future work
3584
dad92c30
OZ
3585<p>Although BIRD supports all the commonly used routing protocols, there are
3586still some features which would surely deserve to be implemented in future
3587versions of BIRD:
96264d4d
PM
3588
3589<itemize>
55b58d8c 3590<item>Opaque LSA's
96264d4d 3591<item>Route aggregation and flap dampening
96264d4d
PM
3592<item>Multipath routes
3593<item>Multicast routing protocols
3594<item>Ports to other systems
3595</itemize>
3596
dad92c30 3597
96264d4d
PM
3598<sect>Getting more help
3599
3600<p>If you use BIRD, you're welcome to join the bird-users mailing list
d148d0af 3601(<HTMLURL URL="mailto:bird-users@network.cz" name="bird-users@network.cz">)
96264d4d 3602where you can share your experiences with the other users and consult
d148d0af
OF
3603your problems with the authors. To subscribe to the list, visit
3604<HTMLURL URL="http://bird.network.cz/?m_list" name="http://bird.network.cz/?m_list">.
96264d4d
PM
3605The home page of BIRD can be found at <HTMLURL URL="http://bird.network.cz/" name="http://bird.network.cz/">.
3606
dad92c30
OZ
3607<p>BIRD is a relatively young system and it probably contains some bugs. You can
3608report any problems to the bird-users list and the authors will be glad to solve
3609them, but before you do so, please make sure you have read the available
3610documentation and that you are running the latest version (available at
3611<HTMLURL URL="ftp://bird.network.cz/pub/bird" name="bird.network.cz:/pub/bird">).
3612(Of course, a patch which fixes the bug is always welcome as an attachment.)
3613
3614<p>If you want to understand what is going inside, Internet standards are a good
3615and interesting reading. You can get them from
3616<HTMLURL URL="ftp://ftp.rfc-editor.org/" name="ftp.rfc-editor.org"> (or a
3617nicely sorted version from <HTMLURL URL="ftp://atrey.karlin.mff.cuni.cz/pub/rfc"
3618name="atrey.karlin.mff.cuni.cz:/pub/rfc">).
69477cad 3619
c184d9d0 3620<p><it/Good luck!/
69477cad 3621
371adba6 3622</book>
7581b81b 3623
a0dd1c74 3624<!--
75317ab8
MM
3625LocalWords: GPL IPv GateD BGPv RIPv OSPFv Linux sgml html dvi sgmltools Pavel
3626LocalWords: linuxdoc dtd descrip config conf syslog stderr auth ospf bgp Mbps
5a203dac 3627LocalWords: router's eval expr num birdc ctl UNIX if's enums bool int ip GCC
75317ab8
MM
3628LocalWords: len ipaddress pxlen netmask enum bgppath bgpmask clist gw md eth
3629LocalWords: RTS printn quitbird iBGP AS'es eBGP RFC multiprotocol IGP Machek
4e8ec666 3630LocalWords: EGP misconfigurations keepalive pref aggr aggregator BIRD's RTC
5a203dac 3631LocalWords: OS'es AS's multicast nolisten misconfigured UID blackhole MRTD MTU
4e8ec666 3632LocalWords: uninstalls ethernets IP binutils ANYCAST anycast dest RTD ICMP rfc
5a203dac 3633LocalWords: compat multicasts nonbroadcast pointopoint loopback sym stats
64722c98 3634LocalWords: Perl SIGHUP dd mm yy HH MM SS EXT IA UNICAST multihop Discriminator txt
5adc02a6 3635LocalWords: proto wildcard Ondrej Filip
5a64ac70 3636-->