Notes for transition from BIRD 1.6 to BIRD 2.0
Tables
Instead of default table named master, there are two default tables named master4 and master6, for IPv4 and IPv6.
Table definitions now specify network type. Instead of table xyz;
it is now ipv4 table xyz;
or ipv6 table xyz;
. There are more network / table types than just ipv4 or ipv6, see documentation for more details.
ROA tables are no longer a special structure, but just a variant of routing table of network type roa4 or roa6. Therefore, they can be defined by roa4 table xyz;
or roa6 table xyz;
. The definition cannot preinitialize the table with ROA records, but it is possible to use static protocol for that purpose. It is no longer possible to use commands show/add/delete/flush roa, but can be examined by regular show route command.
Channels
Protocols and tables are now connected by explicit channels, most related protocol options (table, import, export, ...) are now channel options. Most protocols need (implicit or explicit) channel definition. IPv4 and IPv6 channels are defined by ipv4 and ipv6 keywords in protocol sections. For simple protocol with default edit parameters, it is just:
protocol static {
ipv4;
route 10.10.0.0/16 via 10.1.1.1;
...
}
In most cases some channel options are used. For example instead of:
table xyz;
protocol ospf {
table xyz;
import all;
export where source = RTS_STATIC;
interface "eth*" { ... };
}
It is now:
ipv4 table xyz;
protocol ospf {
ipv4 {
table xyz;
import all;
export where source = RTS_STATIC;
};
interface "eth*" { ... };
}
Some protocols can use multiple channels, For example:
protocol direct {
ipv4;
ipv6;
}
protocol babel {
ipv4 { export all; };
ipv6 { export all; };
interface "*" { ... };
}
Important: There must be at most one channel of each type in a protocol, independent channel definitions are not merged. Therefore, this is invalid:
protocol bgp {
ipv4 { import all; };
ipv4 { export all; };
}
Since 2.0.1, channels inherited from template may be 'redefined' in protocol definition.
BGP Export filter processing
In old BIRD, a route exported to a BGP protocol was first modified by the BGP code and then by the export filter. Now the order was reversed, so it is first processed by the export filter and then by integral BGP processing. Therefore, export filters see route attributes as they are in routing tables and expressions like export where bgp_path.len < 5;
work as expected, but with nontrivial filters it may cause some subtle changes in behavior.
Miscellaneous
Global option listen bgp was removed. Use strict bind BGP option instead.
For BGP, many protocol options are now channel options, as they are limited to each AFI/SAFI represented by that channel. See documentation for details.
External BGP now requires explicit configuration of import and export policies (import and export filters in channels).
OSPF and RIP use ECMP and link detection by default. Also direct BGP uses link detection by default.
Babel protocol interface options hello interval and update interval now require time units (s, ms) and have sub-second precision.
Pipe protocol now by default propagates routes in both direction (like with import all; export all;
).
On Linux, default value for kernel option metric was changed to 32.
Kernel option device routes was removed. Device routes are handled as regular router.
Device protocol option primary was replaced by section interface with option preferred.
Long obsolete syntax for bgp masks (e.g. /1 2 3/) was removed.