mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 20:28:43 +00:00
84 lines
3.4 KiB
Markdown
84 lines
3.4 KiB
Markdown
# Migrating from BIRD 2 to BIRD 3
|
|
|
|
With proper multithreading, we had to change not only the internal architecture,
|
|
but also some user-visible behavior, mostly because these changes were needed
|
|
either for development, or the original features stopped making sense at all
|
|
with the new internal architecture.
|
|
|
|
We tried to keep these changes as small as possible but as this major upgrade is
|
|
a good opportunity to do backwards-incompatible changes, we obviously had to do
|
|
that to fix some historically inaccurate concepts.
|
|
|
|
## Threads
|
|
|
|
Number of working threads is now configured by `threads <num>;` on toplevel.
|
|
By default, this is 1, which actually means 2 running threads. The main one and
|
|
the worker one. When BFD is configured, you get another one for BFD.
|
|
|
|
Every instance of BGP, BFD, Pipe and RPKI gets its own *loop* which is a packed
|
|
unit transferrable between the working threads.
|
|
|
|
## Logging
|
|
|
|
Log files have a slightly different format, indicating by `[abcd]` the actual
|
|
thread logging the message. This enables the user to better comprehend what's
|
|
actually going on between interleaved messages from different threads,
|
|
especially when detailed route tracing is on.
|
|
|
|
There is also a new logging option, a fixed-size circular logfile. This is handy
|
|
if you need to switch on detailed tracing but you don't want to overfill your disk.
|
|
Also this option is by far the fastest one.
|
|
|
|
## Tables
|
|
|
|
It's now possible to set the `debug` option to trace events happening directly
|
|
inside the table.
|
|
|
|
Also settle timers were changed; there is a configurable idle-state timeout
|
|
before any route export is announced after import is done. This helps to
|
|
coalesce the routes on export and improves BIRD's overall performance.
|
|
|
|
There is also an explicit back-pressure feature, called cork, to avoid memory
|
|
bloating with route flaps. This feature basically forces the readers to flush
|
|
the table journal before more imports are added. Parameters of the cork are
|
|
configurable.
|
|
|
|
ROA settle timers were moved into channels.
|
|
|
|
## Channels
|
|
|
|
ROA settle timers are set separately per-channel now. Also by default, only
|
|
the possibly affected routes get autoreloaded, contrary to BIRD 2.
|
|
|
|
Export is now done by blocks which are by default quite large. This may hamper
|
|
responsiveness of single protocols and therefore cause other issues. With
|
|
complex export filters, you may want to drop this value from 16K down. But you
|
|
shouldn't have complex export filters anyway.
|
|
|
|
Export supports also `export in` form, allowing to export only subprefixes of
|
|
the given prefix. Experimental.
|
|
|
|
## Route attributes
|
|
|
|
All protocol attributes have been renamed in CLI to align with the filter language tokens.
|
|
|
|
Output of `show route all` also shows more information, including some internal
|
|
data for easier debugging and route tracing.
|
|
|
|
The `onlink` route attribute has been temporarily disabled until we find out
|
|
how to implement it properly.
|
|
|
|
The `scope` route attribute has been removed. Use custom route attributes instead.
|
|
|
|
## Pipe
|
|
|
|
It's now impossible to check immediately whether the route has entered a pipe
|
|
loop. Instead of that, every Pipe pass increases the route's `generation`
|
|
internal attribute, and when it is too high, the route is discarded.
|
|
|
|
## BGP
|
|
|
|
The export table now shows the state immediately before sending on the wire,
|
|
thus without custom attributes and after all updates done by BGP. This should
|
|
help with performance a little, while also being more accurate.
|