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