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