summaryrefslogtreecommitdiff
path: root/nest
AgeCommit message (Collapse)Author
2018-11-08Nest: Improve keeping track of IPv6 link-local addressesOndrej Zajicek (work)
Most protocols in IPv6 mode use link-local source addresses and expect that there is one on each active interface. The old code depended on assumption that if there is some IPv6 address on iface, there is also an IPv6 link-local address on that iface (added by kernel when the iface went up). Unfortunately, that is not generally true, as a configured global address sometimes ceases to be tentative (finishes DOD) before a link-local address on the same iface. In such case a protocol iface (namely RAdv and Babel) is activated, but fails to found link-local address and stays in failed state. The patch fixes that by tracking 'primary' IPv6 link-local address, sending iface restart notifications when it changes and making protocols ignore iface-up notifications when no such address is selected for an iface.
2018-11-05Filter: Make ifname attribute modifiableOndrej Zajicek (work)
Allow to change an interface associated with a route by setting ifname attribute. It will also change the route to a direct one.
2018-09-18The MRT protocolOndrej Zajicek (work)
The new MRT protocol is responsible for periodic RIB table dumps in the MRT format (RFC 6396). Also the existing code for BGP4MP MRT dumps is refactored and splitted between BGP to MRT protocols, will be more integrated into MRT in the future. Example: protocol mrt { table "*"; filename "%N_%F_%T.mrt"; period 60; } It is partially based on the old MRT code from Pavel Tvrdik.
2018-07-17BGP: Long-lived graceful restartOndrej Zajicek (work)
The patch implements long-lived graceful restart for BGP, namely draft-uttaro-idr-bgp-persistence-03.
2018-07-06Nest: Fix race condition during reconfiguration, part 2Ondrej Zajicek (work)
If export filter is changed during reconfiguration and a route disappears between reconfiguration and refeed (e.g., if the route is a static route also removed during the reconfiguration), the route is not withdrawn. The issue was fixed for regular channels by an earlier patch. This patch fixes the issue for channels in RA_ACCEPTED mode (first-pass-the-filter), used by BGP with 'secondary' option.
2018-07-03Nest: Fix race condition during reconfigurationOndrej Zajicek (work)
If export filter is changed during reconfiguration and a route disappears between reconfiguration and refeed (e.g., if the route is a static route also removed during the reconfiguration), the route is not withdrawn. The patch fixes that by adding tx reconfiguration timestamp.
2018-04-23Doc: renamed progdoc files Doc -> progdoc to fix collision with doc/ folder ↵Maria Matejka
on case-insensitive filesystems
2018-03-14Filter: make bgpmask literals real constructorsJan Maria Matejka
The bgpmask literals can include expressions. This is OK but they have to be interpreted as soon as the code is run, not in the time the code is used as value. This led to strange behavior like rewriting bgpmasks when they shan't be rewritten: function mask_generator(int as) { return [= * as * =]; } function another() bgpmask m1; bgpmask m2; { m1 = mask_generator(10); m2 = mask_generator(20); if (m1 == m2) { print("strange"); # this would happen } } Moreover, sending this to CLI would cause stack overflow and knock down the whole BIRD, as soon as there is at least one route to execute the given filter on. show route filter bgpmask mmm; bgppath ppp; { ppp = +empty+; mmm = [= (ppp ~ mmm) =]; print(mmm); accept; } The magic match operator (~) inside the bgpmask literal would try to resolve mmm, which points to the same bgpmask so it would resolve itself, call the magic match operator and vice versa. After this patch, the bgpmask literal will get resolved as soon as it's assigned to mmm and it also will return a type error as bool is not convertible to ASN in BIRD.
2018-01-16Filter: Allow silent filter executionOndrej Zajicek (work)
A filter should log messages only if executed explicitly (e.g., during route export or route import). When a filter is executed for technical reasons (e.g., to establish whether a route was exported before), it should run silently.
2018-01-03ROA: Fix reconfigurationOndrej Zajicek (work)
2017-12-14Minor cleanupsOndrej Zajicek (work)
2017-10-04RAdv: Support for more specific routes (RFC 4191)Michal 'vorner' Vaner
The patch implements Default Router Preferences and More-Specific Routes (RFC 4191) for RAdv protocol, allowing to announce router preference and more specific routes in router advertisements. Routes can be exported to RAdv like to regular routing protocols. Some cleanups, bugfixes and other changes done by Ondrej Zajicek.
2017-09-19BGP: Shutdown communication (RFC 8203)Ondrej Zajicek (work)
The patch implements BGP Administrative Shutdown Communication (RFC 8203) allowing BGP operators to pass messages related to BGP session administrative shutdown/restart. It handles both transmit and receive of shutdown messages. Messages are logged and may be displayed by show protocol all command. Thanks to Job Snijders for the basic patch.
2017-09-19Docs: FIB iteration macrosMichal 'vorner' Vaner
2017-09-12Backport some minor changes from int-newOndrej Zajicek (work)
2017-09-12Nest: VRF support for neighbor cache and olock codeOndrej Zajicek (work)
Actually much simpler than expected.
2017-09-06Basic VRF supportOndrej Zajicek (work)
Add basic VRF (virtual routing and forwarding) support. Protocols can be associated with VRFs, such protocols will be restricted to interfaces assigned to the VRF (as reported by Linux kernel) and will use sockets bound to the VRF. E.g., different multihop BGP instances can use diffent kernel routing tables to handle BGP TCP connections. The VRF support is preliminary, currently there are several limitations: - Recent Linux kernels (4.11) do not handle correctly sockets bound to interaces that are part of VRF, so most protocols other than multihop BGP do not work. This will be fixed by future kernel versions. - Neighbor cache ignores VRFs. Breaks config with the same prefix on local interfaces in different VRFs. Not much problem as single hop protocols do not work anyways. - Olock code ignores VRFs. Breaks config with multiple BGP peers with the same IP address in different VRFs. - Incoming BGP connections are not dispatched according to VRFs. Breaks config with multiple BGP peers with the same IP address in different VRFs. Perhaps we would need some kernel API to read VRF of incoming connection? Or probably use multiple listening sockets in int-new branch. - We should handle master VRF interface up/down events and perhaps disable associated protocols when VRF goes down. Or at least disable associated interfaces. - Also we should check if the master iface is really VRF iface and not some other kind of master iface. - BFD session request dispatch should be aware of VRFs. - Perhaps kernel protocol should read default kernel table ID from VRF iface so it is not necessary to configure it. - Perhaps we should have per-VRF default table.
2017-08-10Nicer log outputMichal 'vorner' Vaner
non-primary is ugly, just omit it (and use primary in the other case).
2017-08-10Less confusing log messageMichal 'vorner' Vaner
A non-primary address isn't necessarily secondary, that's an independent flag.
2017-05-31CLI: Fix bug in symbol handling introduced in previous patchesOndrej Zajicek (work)
2017-05-25Conf: Replace keyword and symbol hash table with generic hash table.Ondrej Zajicek (work)
The old hash table had fixed size, which makes it slow for config files with large number of symbols and symbol lookups. The new one is growing according to needs.
2016-11-15BGP: Cluster list item should be prependedOndrej Zajicek (work)
Commit 3c09af41... changed behavior of int_set_add() from prepend to append, which makes more sense for community list, but prepend must be used for cluster list. Add int_set_prepend() and use it in cluster list handling code.
2016-11-02RIP: Use message authentication interfaceOndrej Zajicek (work)
Based on former commit from Pavel Tvrdik
2016-11-02Nest: Add support for MAC algorithms in grammarPavel Tvrdík
2016-11-02Add generic message authentication interfaceOndrej Zajicek (work)
Add generic interface for generating and verifying MACs (message authentication codes). Replace multiple HMAC implementation with a generic one.
2016-11-01Build: switch on -Wextra, get rid of most of the warningsJan Moskyto Matejka
There are several unresolved -Wmissing-field-initializers on older versions of GCC than 5.1, all of them false positive.
2016-10-13Clist: The add() function will append a new valuePavel Tvrdik
The add() function used to prepend a new community to clist, but after this fix the add() function appends new community.
2016-10-12Fixed memory bloating on kernel merge paths together with export filter.Jan Moskyto Matejka
Some memory was being allocated from bad linpool, not from the given one as they should. Thanks to Madhu and Justin Cattle for reporting this.
2016-10-12Doc: Change debug to { flag1|flag2|flag3 [, ...] } stylePavel Tvrdik
Thanks to Micah Anderson for bug report and Ondrej Zajicek for the idea!
2016-10-12Nest: Remove trailing whitespacesPavel Tvrdik
2016-10-04Nest: Fix signedness of large communitiesOndrej Zajicek (work)
2016-10-03BGP: Support for large communitiesOndrej Zajicek (work)
Add support for large communities (draft-ietf-idr-large-community), 96bit alternative to RFC 1997 communities. Thanks to Matt Griswold for the original patch.
2016-09-15rt-table: Fix kernel protocol export filter memory bugPavel Tvrdik
Kernel protocol calls rt_export_merged(), which used @rte_update_pool for temporary allocations, supposing it is called from other functions from rt-table.c that handles locking and flushing of the linpool. Therefore, linpool was not flushed properly and memory leaked. Add linpool argument to rt_export_merged() and use @krt_filter_lp when called from kernel protocol. Thanks to Justin Cattle and Alexander Frolkin for the bugreport. (Commit squashed and updated by Ondrej Zajicek)
2016-09-14Nest: Keep multipath next hops sortedOndrej Zajicek (work)
2016-08-16Whitespace fixesPavel Tvrdik
2016-07-19Babel: Documentation updatesOndrej Zajicek (work)
This updates the documentation to correctly mention Babel when protocols are listed, and adds examples and route attribute documentation to the Babel section of the docs. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
2016-07-17Prepare for longer interface names - clean up of the code.Ondrej Filip
2016-06-08Add AS# ranges to bgpmask.Ondrej Filip
2016-05-12Prog Doc: Complete several missing parametersPavel Tvrdik
2016-04-28Add the Babel routing protocol (RFC 6126)Ondrej Zajicek (work)
This patch implements the IPv6 subset of the Babel routing protocol. Based on the patch from Toke Hoiland-Jorgensen, with some heavy modifications and bugfixes. Thanks to Toke Hoiland-Jorgensen for the original patch.
2016-04-08Direct: Implement check link for direct protocolOndrej Zajicek (work)
When enabled, direct protocol generates routes only if the underlying link state is up.
2016-04-07Nest: Reset export route counter during graceful restartOndrej Zajicek (work)
Counter exp_routes is increased during initial route feed after GR recovery, so it has to start with zero, otherwise BIRD will end with double value in exp_routes.
2016-04-06KRT: Fix route learn scan when route changedOndrej Zajicek (work)
When a kernel route changed, function krt_learn_scan() noticed that and replaced the route in internal kernel FIB, but after that, function krt_learn_prune() failed to propagate the new route to the nest, because it confused the new route with the (removed) old best route and decided that the best route did not changed. Wow, the original code (and the bug) is almost 17 years old.
2016-03-17BGP: Add documentaion for extended messagesPavel Tvrdík
2016-02-16Filter: Implement last_nonaggregated operator on bgp_pathOndrej Zajicek (work)
2015-11-24Merge branch 'master' into rip-newOndrej Zajicek (work)
2015-11-09Nest: Fixes bug in missing cleanup during table removalOndrej Zajicek (work)
When a table is removed during reconfiguration, a reference was not cleared in the old configuration, which breaks undo.
2015-11-09Conf: Fixes bug in symbol lookup during reconfigurationOndrej Zajicek (work)
Symbol lookup by cf_find_symbol() not only did the lookup but also added new void symbols allocated from cfg_mem linpool, which gets broken when lookups are done outside of config parsing, which may lead to crashes during reconfiguration. The patch separates lookup-only cf_find_symbol() and config-modifying cf_get_symbol(), while the later is called only during parsing. Also new_config and cfg_mem global variables are NULLed outside of parsing.
2015-10-17Merge branch 'master' into rip-newOndrej Zajicek (work)
2015-10-17Minor changesOndrej Zajicek (work)