]> git.ipfire.org Git - thirdparty/bird.git/log
thirdparty/bird.git
3 years agoNEWS and version update
Maria Matejka [Mon, 7 Feb 2022 21:35:05 +0000 (22:35 +0100)] 
NEWS and version update

3 years agoBlogpost about performance + data.
Maria Matejka [Mon, 7 Feb 2022 21:27:42 +0000 (22:27 +0100)] 
Blogpost about performance + data.

3 years agoDropping (end-of-life) Debian 8 automated tests
Maria Matejka [Fri, 4 Feb 2022 16:04:18 +0000 (17:04 +0100)] 
Dropping (end-of-life) Debian 8 automated tests

3 years agoBuild test default timeout raised to allow for tests on slow virtual machines
Maria Matejka [Fri, 4 Feb 2022 15:47:39 +0000 (16:47 +0100)] 
Build test default timeout raised to allow for tests on slow virtual machines

3 years agoTamed harmless i368 warnings
Maria Matejka [Fri, 4 Feb 2022 14:50:21 +0000 (15:50 +0100)] 
Tamed harmless i368 warnings

3 years agoCompilation fixes for CLang
Maria Matejka [Fri, 4 Feb 2022 14:42:04 +0000 (15:42 +0100)] 
Compilation fixes for CLang

3 years agoMerge commit 'a9646efd40569f3a1d749bc1bd13219876b33a00' into sark-bgp-rebased
Maria Matejka [Fri, 4 Feb 2022 14:26:36 +0000 (15:26 +0100)] 
Merge commit 'a9646efd40569f3a1d749bc1bd13219876b33a00' into sark-bgp-rebased

3 years agoMerge commit 'bcb25084d31fdb90fcf1666f10e73fe0f863afc0' into sark-bgp-rebased
Maria Matejka [Fri, 4 Feb 2022 14:24:28 +0000 (15:24 +0100)] 
Merge commit 'bcb25084d31fdb90fcf1666f10e73fe0f863afc0' into sark-bgp-rebased

3 years agoMerge commit '75aceadaf746f8ed0acce0424f89903283dacf16' into sark-bgp-rebased
Maria Matejka [Fri, 4 Feb 2022 14:21:16 +0000 (15:21 +0100)] 
Merge commit '75aceadaf746f8ed0acce0424f89903283dacf16' into sark-bgp-rebased

3 years agoMerge commit '00410fd6c17697a5919cb32a44f7117dd3a0834a' into sark-bgp-rebased
Maria Matejka [Fri, 4 Feb 2022 14:18:48 +0000 (15:18 +0100)] 
Merge commit '00410fd6c17697a5919cb32a44f7117dd3a0834a' into sark-bgp-rebased

3 years agoThread performance: Moved graph key to left top corner where it fits better
Maria Matejka [Fri, 4 Feb 2022 14:18:44 +0000 (15:18 +0100)] 
Thread performance: Moved graph key to left top corner where it fits better

3 years agoThread documentation: Final version of chapter 3
Maria Matejka [Fri, 4 Feb 2022 14:18:06 +0000 (15:18 +0100)] 
Thread documentation: Final version of chapter 3

3 years agoThread documentation: Rewritten chapter 3 on loops and locks once again
Maria Matejka [Thu, 3 Feb 2022 21:42:26 +0000 (22:42 +0100)] 
Thread documentation: Rewritten chapter 3 on loops and locks once again

3 years agoProtocol limit restart/down must be callable from protocol context
Maria Matejka [Wed, 2 Feb 2022 14:36:22 +0000 (15:36 +0100)] 
Protocol limit restart/down must be callable from protocol context

3 years agoBFD: direct notifications to protocol loops
Maria Matejka [Wed, 2 Feb 2022 10:20:53 +0000 (11:20 +0100)] 
BFD: direct notifications to protocol loops

3 years agoNeighbor prune fixup
Maria Matejka [Tue, 1 Feb 2022 13:54:03 +0000 (14:54 +0100)] 
Neighbor prune fixup

3 years agoIO loop duration fixup
Maria Matejka [Tue, 1 Feb 2022 13:53:38 +0000 (14:53 +0100)] 
IO loop duration fixup

3 years agoBGP now runs in its own thread
Maria Matejka [Mon, 10 Jan 2022 10:43:21 +0000 (11:43 +0100)] 
BGP now runs in its own thread

3 years agoBGP: Static global linpools replaced by private linpools
Maria Matejka [Mon, 10 Jan 2022 08:31:27 +0000 (09:31 +0100)] 
BGP: Static global linpools replaced by private linpools

3 years agoSocket cork fixes
Maria Matejka [Tue, 1 Feb 2022 08:45:50 +0000 (09:45 +0100)] 
Socket cork fixes

3 years agoAsynchronous neighbor notifications fixes
Maria Matejka [Wed, 26 Jan 2022 20:16:19 +0000 (21:16 +0100)] 
Asynchronous neighbor notifications fixes

3 years agoExplicitly storing and checking loop information in sockets
Maria Matejka [Mon, 10 Jan 2022 12:03:15 +0000 (13:03 +0100)] 
Explicitly storing and checking loop information in sockets

3 years agoNeighbors: Locking and asynchronous notifications
Maria Matejka [Mon, 24 Jan 2022 14:48:18 +0000 (15:48 +0100)] 
Neighbors: Locking and asynchronous notifications

3 years agoGlobal interface list renamed to not clash with local lists
Maria Matejka [Mon, 24 Jan 2022 09:01:10 +0000 (10:01 +0100)] 
Global interface list renamed to not clash with local lists

3 years agoInterfaces and neighbor notifications do properly enter protocol loops
Maria Matejka [Wed, 12 Jan 2022 13:06:49 +0000 (14:06 +0100)] 
Interfaces and neighbor notifications do properly enter protocol loops

3 years agoPage cleanup routines updated to allow nested birdloops
Maria Matejka [Mon, 10 Jan 2022 13:49:58 +0000 (14:49 +0100)] 
Page cleanup routines updated to allow nested birdloops

3 years agoRoute table fast prune fixup
Maria Matejka [Tue, 11 Jan 2022 12:10:01 +0000 (13:10 +0100)] 
Route table fast prune fixup

3 years agoBabel: fixed interface pool removal
Maria Matejka [Mon, 10 Jan 2022 09:30:55 +0000 (10:30 +0100)] 
Babel: fixed interface pool removal

3 years agoDropping a nonsensical assert which broke Babel
Maria Matejka [Mon, 10 Jan 2022 08:30:46 +0000 (09:30 +0100)] 
Dropping a nonsensical assert which broke Babel

3 years agoRemoving periodic wakeup of mainloop in debug version to search for notification...
Maria Matejka [Mon, 24 Jan 2022 15:04:03 +0000 (16:04 +0100)] 
Removing periodic wakeup of mainloop in debug version to search for notification issues

3 years agoPerformance data of sark vs. v2.0.8 with a chart generator
Maria Matejka [Thu, 9 Dec 2021 20:53:00 +0000 (21:53 +0100)] 
Performance data of sark vs. v2.0.8 with a chart generator

3 years ago.gitlab-ci.yml: minor changes inside the .yml file.
Matous Holinka [Thu, 6 Jan 2022 08:53:23 +0000 (09:53 +0100)] 
.gitlab-ci.yml: minor changes inside the .yml file.

+ ubuntu:21.10 added into the pipeline,
- ubuntu:20.10 removed from the pipeline,

+ misc/docker/ubuntu-21.10-amd64/Dockerfile added,
- misc/docker/ubuntu-20.10-amd64/Dockerfile removed.

3 years agoNetlink: Add option to specify netlink socket receive buffer size
Ondrej Zajicek (work) [Mon, 17 Jan 2022 04:11:29 +0000 (05:11 +0100)] 
Netlink: Add option to specify netlink socket receive buffer size

Add option 'netlink rx buffer' to specify netlink socket receive buffer
size. Uses SO_RCVBUFFORCE, so it can override rmem_max limit.

Thanks to Trisha Biswas and Michal for the original patches.

3 years agoNetlink: Add another workaround for older kernel headers
Ondrej Zajicek (work) [Sat, 15 Jan 2022 21:39:40 +0000 (22:39 +0100)] 
Netlink: Add another workaround for older kernel headers

Unfortunately, SOL_NETLINK is both recently added and arch-dependent,
so we cannot just define it.

3 years agoNetlink: Add workaround for older kernel headers
Ondrej Zajicek (work) [Fri, 14 Jan 2022 22:15:05 +0000 (23:15 +0100)] 
Netlink: Add workaround for older kernel headers

3 years agoNetlink: Enable strict checking for KRT dumps
Ondrej Zajicek (work) [Fri, 14 Jan 2022 20:53:40 +0000 (21:53 +0100)] 
Netlink: Enable strict checking for KRT dumps

Add strict checking for netlink KRT dumps to avoid PMTU cache records
from FNHE table dump along with KRT.

Linux Kernel added FNHE table dump to the netlink API in patch:

https://patchwork.ozlabs.org/project/netdev/patch/8d3b68cd37fb5fddc470904cdd6793fcf480c6c1.1561131177.git.sbrivio@redhat.com/

Therefore, since Linux 5.3 these route cache entries are dumped together
with regular routes during periodic KRT scans, which in some cases may be
huge amount of useless data. This can be avoided by using strict checking
for netlink dumps:

https://lore.kernel.org/netdev/20181008031644.15989-1-dsahern@kernel.org/

The patch mitigates the risk of receiving unknown and potentially large
number of FNHE records that would block BIRD I/O in each sync. There is a
known issue caused by the GRE tunnels on Linux that seems to be creating
one FNHE record for each destination IP address that is routed through
the tunnel, even when the PMTU equals to GRE interface MTU.

Thanks to Tomas Hlavacek for the original patch.

3 years agoNetlink: Explicitly skip received cloned routes
Ondrej Zajicek (work) [Fri, 14 Jan 2022 18:07:57 +0000 (19:07 +0100)] 
Netlink: Explicitly skip received cloned routes

Kernel uses cloned routes to keep route cache entries, but reports them
together with regular routes. They were skipped implicitly as they
do not have rtm_protocol filled. Add explicit check for cloned flag
and skip such routes explicitly.

Also, improve debug logs of skipped routes.

3 years agoBGP: Add option 'free bind'
Ondrej Zajicek (work) [Sun, 9 Jan 2022 01:40:58 +0000 (02:40 +0100)] 
BGP: Add option 'free bind'

The BGP 'free bind' option applies the IP_FREEBIND/IPV6_FREEBIND
socket option for the BGP listening socket.

Thanks to Alexander Zubkov for the idea.

3 years agoIO: Support nonlocal bind in socket interface
Alexander Zubkov [Sat, 8 Jan 2022 17:31:56 +0000 (18:31 +0100)] 
IO: Support nonlocal bind in socket interface

Add option to socket interface for nonlocal binding, i.e. binding to an
IP address that is not present on interfaces. This behaviour is enabled
when SKF_FREEBIND socket flag is set. For Linux systems, it is
implemented by IP_FREEBIND socket flag.

Minor changes done by commiter.

3 years agoTest: Activate some remaining build tests
Ondrej Zajicek (work) [Wed, 5 Jan 2022 19:07:27 +0000 (20:07 +0100)] 
Test: Activate some remaining build tests

3 years agoNetlink: Do not ignore dead routes from BIRD
Ondrej Zajicek (work) [Wed, 5 Jan 2022 18:25:42 +0000 (19:25 +0100)] 
Netlink: Do not ignore dead routes from BIRD

Currently, BIRD ignores dead routes to consider them absent. But it also
ignores its own routes and thus it can not correctly manage such routes
in some cases. This patch makes an exception for routes with proto bird
when ignoring dead routes, so they can be properly updated or removed.

Thanks to Alexander Zubkov for the original patch.

3 years agoNetlink: Improve multipath parsing errors
Ondrej Zajicek (work) [Wed, 5 Jan 2022 17:46:41 +0000 (18:46 +0100)] 
Netlink: Improve multipath parsing errors

Function nl_parse_multipath() should handle errors internally.

3 years agoConf: Fix parsing full-length IPv6 addresses
Ondrej Zajicek (work) [Wed, 5 Jan 2022 15:38:49 +0000 (16:38 +0100)] 
Conf: Fix parsing full-length IPv6 addresses

Lexer expression for bytestring was too loose, accepting also
full-length IPv6 addresses. It should be restricted such that
colon is used between every byte or never.

Fix the regex and also add some test cases for it.

Thanks to Alexander Zubkov for the bugreport

3 years agogitlab-ci.yml: failing gitlab runner fixed.
Matous [Thu, 14 Oct 2021 10:16:46 +0000 (12:16 +0200)] 
gitlab-ci.yml: failing gitlab runner fixed.

'registry.labs.nic.cz' -> 'registry.nic.cz' changed

3 years agoDoc: Document min/max operators for lists
Alexander Zubkov [Tue, 28 Dec 2021 03:09:36 +0000 (04:09 +0100)] 
Doc: Document min/max operators for lists

3 years agoFilter: Add operators to find minimum and maximum element of sets
Alexander Zubkov [Tue, 28 Dec 2021 03:05:05 +0000 (04:05 +0100)] 
Filter: Add operators to find minimum and maximum element of sets

Add operators .min and .max to find minumum or maximum element in sets
of types: clist, eclist, lclist. Example usage:

bgp_community.min
bgp_ext_community.max
filter(bgp_large_community, [(as1, as2, *)]).min

Signed-off-by: Alexander Zubkov <green@qrator.net>
3 years agoDoc: Document community components access operators
Alexander Zubkov [Tue, 28 Dec 2021 02:48:42 +0000 (03:48 +0100)] 
Doc: Document community components access operators

3 years agoFilter: Add operators to pick community components
Alexander Zubkov [Tue, 28 Dec 2021 02:46:13 +0000 (03:46 +0100)] 
Filter: Add operators to pick community components

Add operators that can be used to pick components from
pair (standard community) or lc (large community) types.
For example:

(10, 20).asn --> 10
(10, 20).data --> 20

(10, 20, 30).asn --> 10
(10, 20, 30).data1 --> 20
(10, 20, 30).data2 --> 30

Signed-off-by: Alexander Zubkov <green@qrator.net>
3 years agoBSD: Assume onlink flag on ifaces with only host addresses
Ondrej Zajicek (work) [Mon, 27 Dec 2021 18:10:35 +0000 (19:10 +0100)] 
BSD: Assume onlink flag on ifaces with only host addresses

The BSD kernel does not support the onlink flag and BIRD does not use
direct routes for next hop validation, instead depends on interface
address ranges. We would like to handle PtMP cases with only host
addresses configured, like:

  ifconfig wg0 192.168.0.10/32
  route add 192.168.0.4 -iface wg0
  route add 192.168.0.8 -iface wg0

To accept BIRD routes with onlink next-hop, like:

  route 192.168.42.0/24 via 192.168.0.4%wg0 onlink

BIRD would dismiss the route when receiving from the kernel, as the
next-hop 192.168.0.4 is not part of any interface subnet and onlink
flag is not kept by the BSD kernel.

The commit fixes this by assuming that for routes received from the
kernel, any next-hop is onlink on ifaces with only host addresses.

Thanks to Stefan Haller for the original patch.

3 years agoThread documentation: Chapter 4 on memory management
Maria Matejka [Wed, 22 Dec 2021 14:35:29 +0000 (15:35 +0100)] 
Thread documentation: Chapter 4 on memory management

3 years agoRPKI: Add contextual out-of-bound checks in RTR Prefix PDU handler
Job Snijders [Sat, 18 Dec 2021 15:35:28 +0000 (16:35 +0100)] 
RPKI: Add contextual out-of-bound checks in RTR Prefix PDU handler

RFC 6810 and RFC 8210 specify that the "Max Length" value MUST NOT be
less than the Prefix Length element (underflow). On the other side,
overflow of the Max Length element also is possible, it being an 8-bit
unsigned integer allows for values larger than 32 or 128. This also
implicitly ensures there is no overflow of "Length" value.

When a PDU is received where the Max Length field is corrputed, the RTR
client (BIRD) should immediately terminate the session, flush all data
learned from that cache, and log an error for the operator.

Minor changes done by commiter.

3 years agoDoc: bgp: remove "advertise ipv4"
Simon Ruderich [Sat, 18 Dec 2021 02:17:48 +0000 (03:17 +0100)] 
Doc: bgp: remove "advertise ipv4"

The option was removed in d15b0b0a ("BGP redesign", 2016-12-07)
but the documentation wasn't updated.

3 years agoNest: Do not ignore secondary flag changes in ifa updates
Ondrej Zajicek (work) [Fri, 17 Dec 2021 23:58:47 +0000 (00:58 +0100)] 
Nest: Do not ignore secondary flag changes in ifa updates

Compare all IA_* flags that are set by sysdep iface code.

The old code ignores IA_SECONDARY flag when comparing whether iface
address updates from kernel changed anything. This is usually not an
issue as kernel removes all secondary addresses due to removal of the
primary one, but it breaks when sysctl 'promote_secondaries' is enabled
and kernel promotes secondary addresses to primary ones.

Thanks to 'Alexander' for the bugreport.

3 years agoThread documentation: Completely rewritten chapter 3 on loops and locks
Maria Matejka [Wed, 8 Dec 2021 19:31:12 +0000 (20:31 +0100)] 
Thread documentation: Completely rewritten chapter 3 on loops and locks

3 years agoFinal version of asynchronous export documentation
Maria Matejka [Wed, 9 Jun 2021 05:10:13 +0000 (07:10 +0200)] 
Final version of asynchronous export documentation

3 years agoThread documentation: chapter 3, coroutines and locking
Maria Matejka [Fri, 4 Jun 2021 16:14:10 +0000 (18:14 +0200)] 
Thread documentation: chapter 3, coroutines and locking

3 years agoThread documentation: chapters 0, 1 and 2
Maria Matejka [Thu, 4 Mar 2021 19:11:26 +0000 (20:11 +0100)] 
Thread documentation: chapters 0, 1 and 2

3 years agoFixed build errors for OpenBSD
Maria Jan Matejka [Tue, 7 Dec 2021 16:59:44 +0000 (16:59 +0000)] 
Fixed build errors for OpenBSD

3 years agoFixed standby memory page counters on shutdown
Maria Matejka [Tue, 7 Dec 2021 13:55:27 +0000 (14:55 +0100)] 
Fixed standby memory page counters on shutdown

Bug introduced by commit 38278d94ba0a179d5eeb061a59850a4e1c150e5b.

3 years agoGDB: io loop printing support in resource dumps, better iterating over linpool chunks
Maria Matejka [Tue, 7 Dec 2021 11:49:35 +0000 (11:49 +0000)] 
GDB: io loop printing support in resource dumps, better iterating over linpool chunks

3 years agoFixed a race condition in channel aux table cleanup
Maria Matejka [Tue, 7 Dec 2021 11:47:42 +0000 (12:47 +0100)] 
Fixed a race condition in channel aux table cleanup

3 years agoEvent list asserts to prevent running into rotten data
Maria Matejka [Mon, 6 Dec 2021 18:03:00 +0000 (19:03 +0100)] 
Event list asserts to prevent running into rotten data

3 years agoUsing more Python-ish constructions in BIRD linked-list accessors
Maria Matejka [Tue, 7 Dec 2021 12:04:00 +0000 (13:04 +0100)] 
Using more Python-ish constructions in BIRD linked-list accessors

3 years agoMain IO loop shouldn't skip sockets when ping is received
Maria Matejka [Thu, 2 Dec 2021 11:41:53 +0000 (11:41 +0000)] 
Main IO loop shouldn't skip sockets when ping is received

3 years agoStandby memory pages are accounted for as overhead in show memory command
Maria Matejka [Thu, 2 Dec 2021 11:29:59 +0000 (11:29 +0000)] 
Standby memory pages are accounted for as overhead in show memory command

3 years agoNo memory unmapping when shutting down
Maria Matejka [Wed, 1 Dec 2021 22:02:42 +0000 (22:02 +0000)] 
No memory unmapping when shutting down

All the memory is just freed implicitly on exit, no need for
page-by-page unmapping.

3 years agoFaster shutdown and cleanups by freeing route attributes strictly from main loop
Maria Matejka [Wed, 1 Dec 2021 21:52:55 +0000 (21:52 +0000)] 
Faster shutdown and cleanups by freeing route attributes strictly from main loop

3 years agoFaster prune on table deletion
Maria Matejka [Wed, 1 Dec 2021 21:33:38 +0000 (21:33 +0000)] 
Faster prune on table deletion

3 years agoTable prune routines request export announcements directly
Maria Matejka [Wed, 1 Dec 2021 16:21:35 +0000 (16:21 +0000)] 
Table prune routines request export announcements directly

3 years agofixed duplicate routes propagation
Maria Matejka [Thu, 25 Nov 2021 20:21:58 +0000 (20:21 +0000)] 
fixed duplicate routes propagation

3 years agoMerge branch 'master' into HEAD
Maria Matejka [Wed, 1 Dec 2021 12:02:44 +0000 (13:02 +0100)] 
Merge branch 'master' into HEAD

3 years agoFix of shutdown: premature log cleanup led to use-after-free
Maria Matejka [Wed, 1 Dec 2021 09:46:49 +0000 (10:46 +0100)] 
Fix of shutdown: premature log cleanup led to use-after-free

3 years agoPage allocator moved from pools to IO loops.
Maria Matejka [Tue, 30 Nov 2021 22:57:14 +0000 (23:57 +0100)] 
Page allocator moved from pools to IO loops.

The resource pool system is highly hierarchical and keeping spare pages
in pools leads to unnecessarily complex memory management.

Loops have a flat hiearchy, at least for now, and it is therefore much
easier to keep care of pages, especially in cases of excessive virtual memory
fragmentation.

3 years agoFor safer memory allocations, resources are bound to loops.
Maria Matejka [Tue, 30 Nov 2021 17:16:49 +0000 (18:16 +0100)] 
For safer memory allocations, resources are bound to loops.

Also all loops have their basic resource pool for allocations which are
auto-freed when the loop is stopping.

3 years agoMemory statistics split into Effective and Overhead
Maria Matejka [Fri, 26 Nov 2021 23:21:12 +0000 (00:21 +0100)] 
Memory statistics split into Effective and Overhead

This feature is intended mostly for checking that BIRD's allocation
strategies don't consume much memory space. There are some cases where
withdrawing routes in a specific order lead to memory fragmentation and
this output should give the user at least a notion of how much memory is
actually used for data storage and how much memory is "just allocated"
or used for overhead.

Also raising the "system allocator overhead estimation" from 8 to 16
bytes; it is probably even more. I've found 16 as a local minimum in
best scenarios among reachable machines. I couldn't find any reasonable
method to estimate this value when BIRD starts up.

This commit also fixes the inaccurate computation of memory overhead for
slabs where the "system allocater overhead estimation" was improperly
added to the size of mmap-ed memory.

3 years agofixup of table reload bug thread-last-merged
Maria Matejka [Wed, 24 Nov 2021 22:20:26 +0000 (23:20 +0100)] 
fixup of table reload bug

3 years agoDirectly mapped pages are kept for future use if temporarily not needed
Maria Matejka [Wed, 24 Nov 2021 16:30:13 +0000 (17:30 +0100)] 
Directly mapped pages are kept for future use if temporarily not needed

3 years agoGDB pretty printer for resource pools
Maria Matejka [Tue, 23 Nov 2021 18:04:16 +0000 (18:04 +0000)] 
GDB pretty printer for resource pools

3 years agoFixed pipe reload/refeed
Maria Matejka [Tue, 23 Nov 2021 12:06:27 +0000 (12:06 +0000)] 
Fixed pipe reload/refeed

3 years agoStored pages release routine
Maria Matejka [Tue, 23 Nov 2021 11:13:11 +0000 (11:13 +0000)] 
Stored pages release routine

3 years agoFixed channel export map confusion
Maria Matejka [Tue, 23 Nov 2021 11:12:32 +0000 (11:12 +0000)] 
Fixed channel export map confusion

3 years agoBGP: End route refresh before another starts
Maria Matejka [Sun, 21 Nov 2021 11:06:19 +0000 (12:06 +0100)] 
BGP: End route refresh before another starts

3 years agoRPKI has its own loop
Maria Matejka [Wed, 17 Nov 2021 20:34:54 +0000 (21:34 +0100)] 
RPKI has its own loop

3 years agoRPKI: Use the route refresh mechanism also for the first load
Maria Matejka [Tue, 16 Nov 2021 21:14:24 +0000 (21:14 +0000)] 
RPKI: Use the route refresh mechanism also for the first load

3 years agoMore information on RPKI errors
Maria Matejka [Tue, 16 Nov 2021 21:13:32 +0000 (21:13 +0000)] 
More information on RPKI errors

3 years agoHigher settle times when route refresh in the source table is running
Maria Matejka [Tue, 16 Nov 2021 11:23:24 +0000 (12:23 +0100)] 
Higher settle times when route refresh in the source table is running

3 years agoCorking also feed start to keep BIRD running when refeeds would easily cause congestion
Maria Matejka [Mon, 15 Nov 2021 21:48:24 +0000 (22:48 +0100)] 
Corking also feed start to keep BIRD running when refeeds would easily cause congestion

3 years agoRoute attribute cache is now lockless on read / clone.
Maria Matejka [Sat, 13 Nov 2021 21:13:51 +0000 (22:13 +0100)] 
Route attribute cache is now lockless on read / clone.

Lots of time was spent locking when accessing route attribute cache.
This overhead should be now reduced to a minimum.

3 years agoRoute sources have their separate global lock
Maria Matejka [Sat, 13 Nov 2021 16:52:34 +0000 (17:52 +0100)] 
Route sources have their separate global lock

3 years agoIntroducing basic RCU primitives for lock-less shared data structures
Maria Matejka [Fri, 12 Nov 2021 21:58:40 +0000 (22:58 +0100)] 
Introducing basic RCU primitives for lock-less shared data structures

3 years agoVRF setting reduced to one argument, using default dummy iface for default vrf
Maria Matejka [Mon, 15 Nov 2021 09:53:58 +0000 (10:53 +0100)] 
VRF setting reduced to one argument, using default dummy iface for default vrf

3 years agoRoute table import-to-export announcement indirection to reduce pipe traffic
Maria Matejka [Fri, 12 Nov 2021 15:53:33 +0000 (15:53 +0000)] 
Route table import-to-export announcement indirection to reduce pipe traffic

3 years agoKeeping un-unmmappable pages until they can be reused
Maria Matejka [Thu, 11 Nov 2021 15:25:59 +0000 (16:25 +0100)] 
Keeping un-unmmappable pages until they can be reused

On Linux, munmap() may fail with ENOMEM when virtual memory is too
fragmented. Working this around by just keeping such blocks for future
use.

3 years agoPipe runs in parallel.
Maria Matejka [Mon, 18 Oct 2021 19:22:58 +0000 (21:22 +0200)] 
Pipe runs in parallel.

3 years agoRouting tables now have their own loops.
Maria Matejka [Wed, 29 Sep 2021 14:15:13 +0000 (16:15 +0200)] 
Routing tables now have their own loops.

This basically means that:
* there are some more levels of indirection and asynchronicity, mostly
  in cleanup procedures, requiring correct lock ordering
* all the internal table operations (prune, next hop update) are done
  without blocking the other parts of BIRD
* the protocols may get their own loops very soon

3 years agoRoute subscription uses events
Maria Matejka [Wed, 27 Oct 2021 12:42:05 +0000 (12:42 +0000)] 
Route subscription uses events

3 years agoGlobal table update pool removed
Maria Matejka [Wed, 29 Sep 2021 15:59:50 +0000 (17:59 +0200)] 
Global table update pool removed

3 years agoLocking route attributes cache
Maria Matejka [Mon, 27 Sep 2021 15:44:19 +0000 (17:44 +0200)] 
Locking route attributes cache

To access route attribute cache from multiple threads at once, we have
to lock the cache on writing. The route attributes data structures are
safe to read unless somebody tries to tamper with the cache itself.

3 years agoRoute sources have an explicit owner
Maria Matejka [Mon, 27 Sep 2021 14:40:28 +0000 (16:40 +0200)] 
Route sources have an explicit owner

This commit prevents use-after-free of routes belonging to protocols
which have been already destroyed, delaying also all the protocols'
shutdown until all of their routes have been finally propagated through
all the pipes down to the appropriate exports.

The use-after-free was somehow hypothetic yet theoretically possible in
rare conditions, when one BGP protocol authors a lot of routes and the
user deletes that protocol by reconfiguring in the same time as next hop
update is requested, causing rte_better() to be called on a
not-yet-pruned network prefix while the owner protocol has been already
freed.

In parallel execution environments, this would happen an inter-thread
use-after-free, causing possible heisenbugs or other nasty problems.

3 years agoTable cork: Stop creating updates when there are too many pending.
Maria Matejka [Mon, 27 Sep 2021 12:08:03 +0000 (14:08 +0200)] 
Table cork: Stop creating updates when there are too many pending.

The corked procedure gets a callback when uncorked. Supported by table
maintenance routines and also BGP.