- Nov 09, 2022
-
-
Ondřej Zajíček authored
BIRD keeps a previous (old) configuration for the purpose of undo. The existing code frees it after a new configuration is successfully parsed during reconfiguration. That causes memory usage spikes as there are temporarily three configurations (old, current, and new). The patch changes it to free the old one before parsing the new one (as user already requested a new config). The disadvantage is that undo is not available after failed reconfiguration.
-
- Nov 08, 2022
-
-
Maria Matejka authored
This commit uses bird-tools in version f35e8bce829f4bff61ec7eb07ec9c67aa867bc9a
-
- Nov 03, 2022
-
-
Maria Matejka authored
-
- Nov 02, 2022
-
-
Maria Matejka authored
Memory unmapping causes slow address space fragmentation, leading in extreme cases to failing to allocate pages at all. Removing this problem by keeping all the pages allocated to us, yet calling madvise() to let kernel dispose of them. This adds a little complexity and overhead as we have to keep the pointers to the free pages, therefore to hold e.g. 1 GB of 4K pages with 8B pointers, we have to store 2 MB of data.
-
- Nov 01, 2022
-
-
Maria Matejka authored
-
- Oct 18, 2022
-
-
-
Ondřej Zajíček authored
Define scope for anonymous filters, and also explicitly distinguish block scopes and function/filter scopes instead of using anonymous / named distinction. Anonymous filters forgot to push scope, so variables for them were in fact defined in the top scope and therefore they shared a frame. This got broken after rework of variables, which assumed that there is a named scope for every function/filter.
-
- Oct 12, 2022
-
-
Ondřej Zajíček authored
While onlink flag is meaningful only with explicit next hops, it can be defined also on direct routes. Parse it also in this case to avoid periodic updates of the same route. Thanks to Marcin Saklak for the bugreport.
-
- Oct 10, 2022
-
-
Ondřej Zajíček authored
Add BGP channel option 'next hop prefer global' that modifies BGP recursive next hop resolution to use global next hop IPv6 address instead of link-local next hop IPv6 address for immediate next hop of received routes.
-
- Oct 03, 2022
-
-
Ondřej Zajíček authored
It is useful to distinguish whehter channel config returned from channel_config_get() was allocated new, or existing from template. Caller may want to initialize new ones.
-
Ondřej Zajíček authored
Add some supportive functions for f_tree and EC. These functions are used by L3VPN code.
-
Ondřej Zajíček authored
- When next hop is reset to local IP, we should remove BGP label stack, as it is related to original next hop - BGP next hop or immediate next hop from one VRF should not be passed to another VRF, as they are different IP namespaces
-
Ondřej Zajíček authored
In principle, the channel list is a list of parent struct proto and can contain general structures of type struct channel, That is useful e.g. for adding MPLS channels to BGP.
-
Maria Matejka authored
-
- Sep 27, 2022
-
-
Alexander Zubkov authored
Changes in commit eb937358 broke setting of channel preference for alien routes learned during scan. The preference was set only for async routes. Move common attribute processing part of functions krt_learn_async() and krt_learn_async() to a separate function to have only one place for such changes.
-
- Sep 16, 2022
-
-
Maria Matejka authored
This reverts commit 2c137591.
-
- Sep 06, 2022
-
-
Maria Matejka authored
In some specific configurations, it was possible to send BIRD into an infinite loop of recursive next hop resolution. This was caused by route priority inversion. To prevent priority inversions affecting other next hops, we simply refuse to resolve any next hop if the best route for the matching prefix is recursive or any other route with the same preference is recursive. Next hop resolution doesn't change route priority, therefore it is perfectly OK to resolve BGP next hops e.g. by an OSPF route, yet if the same (or covering) prefix is also announced by iBGP, by retraction of the OSPF route we would get a possible priority inversion.
-
- Aug 18, 2022
-
-
Maria Matejka authored
-
Maria Matejka authored
-
Maria Matejka authored
-
- Aug 03, 2022
-
-
Maria Matejka authored
-
Maria Matejka authored
-
- Jul 27, 2022
-
-
Ondřej Zajíček authored
-
- Jul 26, 2022
-
-
Ondřej Zajíček authored
Seems like the previous patch was too optimistic, as route replace is still broken even in Linux 4.19 LTS (but fixed in Linux 5.10 LTS) for: ip route add 2001:db8::/32 via fe80::1 dev eth0 ip route replace 2001:db8::/32 dev eth0 It ends with two routes instead of just the second. The issue is limited to direct and special type (e.g. unreachable) routes, the patch restricts route replace for cases when the new route is a regular route (with a next hop address).
-
- Jul 25, 2022
-
-
Ondřej Zajíček authored
When IPv6 ECMP support first appeared in Linux kernel, it used different API than IPv4 ECMP. Individual next hops were updated and announced separately, instead of using RTA_MULTIPATH as in IPv4. This has several drawbacks and requires complex code to merge received notifications to one multipath route. When Linux came with IPv6 RTA_MULTIPATH support, the initial versions were somewhat buggy, so we kept using the old API for updates (splitting multipath routes to sequences of route updates), while accepting both old-style routes and RTA_MULTIPATH routes in scans / notifications. As IPv6 RTA_MULTIPATH support is here for a long time, this patch fully switches Netlink to the IPv6 RTA_MULTIPATH API and removes old complex code for handling individual next hop announces. The required Linux version is at least 4.11 for reliable operation. Thanks to Daniel Gröber for the original patch.
-
- Jul 24, 2022
-
-
Ondřej Zajíček authored
-
Ondřej Zajíček authored
Remove compile-time sysdep option CONFIG_ALL_TABLES_AT_ONCE, replace it with runtime ability to run either separate table scans or shared scan. On Linux, use separate table scans by default when the netlink socket option NETLINK_GET_STRICT_CHK is available, but retreat to shared scan when it fails. Running separate table scans has advantages where some routing tables are managed independently, e.g. when multiple routing daemons are running on the same machine, as kernel routing table modification performance is significantly reduced when the table is modified while it is being scanned. Thanks Daniel Gröber for the original patch and Toke Høiland-Jørgensen for suggestions.
-
- Jul 22, 2022
-
-
Maria Matejka authored
-
Maria Matejka authored
This reverts commit cee0cd14. This change is not needed in version 2 and the surrounding code has disappeared mostly in version 3.
-
- Jul 12, 2022
-
-
Ondřej Zajíček authored
Add support for bgp_otc in filters and warning for configuration inside confederations.
-
- Jul 11, 2022
-
-
Implement BGP roles as described in RFC 9234. It is a mechanism for route leak prevention and automatic route filtering based on common BGP topology relationships. It defines role capability (controlled by 'local role' option) and OTC route attribute, which is used for automatic route filtering and leak detection. Minor changes done by commiter.
-
Maria Matejka authored
-
Maria Matejka authored
-
Maria Matejka authored
-
- Jul 10, 2022
-
-
Maria Matejka authored
-
- Jun 27, 2022
-
-
For loops allow to iterate over elements in compound data like BGP paths or community lists. The syntax is: for [ <type> ] <variable> in <expr> do <command-body>
-
Allow variable declarations mixed with code, also in nested blocks with proper scoping, and with variable initializers. E.g: function fn(int a) { int b; int c = 10; if a > 20 then { b = 30; int d = c * 2; print a, b, c, d; } string s = "Hello"; }
-
When f_line is done, we have to pop the stack frame. The old code just removed nominal number of args/vars. Change it to use stored ventry value modified by number of returned values. This allows to allocate variables on a stack frame during execution of f_lines instead of just at start. But we need to know the number of returned values for a f_line. It is 1 for term, 0 for cmd. Store that to f_line during linearization.
-
Command sequences in curly braces used a separate nonterminal in grammar. Handle them as a regular command.
-
When a new variable used the same name as an existing symbol in an outer scope, then offset number was defined based on a scope of the existing symbol ($3) instead of a scope of the new symbol (sym_). That can lead to two variables sharing the same memory slot.
-