summaryrefslogtreecommitdiff
path: root/sysdep
AgeCommit message (Collapse)Author
2023-01-20Fixed various build problems on FreeBSD and/or CLangMaria Matejka
2023-01-19Merge commit '140c534fb81d0e165b7d674e869c646455ed19d1' into thread-nextMaria Matejka
2023-01-19Decoupling loops from threads to allow fixed thread countMaria Matejka
On large configurations, too many threads would spawn with one thread per loop. Therefore, threads may now run multiple loops at once. The thread count is configurable and may be changed during run. All threads are spawned on startup. This change helps with memory bloating. BIRD filters need large temporary memory blocks to store their stack and also memory management keeps its hot page storage per-thread. Known bugs: * Thread autobalancing is not yet implemented. * Low latency loops are executed together with standard loops.
2023-01-19CLI closing fix when its action is run asynchronously.Maria Matejka
Some CLI actions, notably "show route", are run by queuing an event somewhere else. If the user closes the socket, in case such an action is being executed, the CLI must free the socket immediately from the error hook but the pool must remain until the asynchronous event finishes and cleans everything up.
2022-11-09Conf: Make 'configure check' command restrictedOndrej Zajicek
While it does not directly change BIRD state, it can trigger reading arbitrary files and eating significant memory.
2022-11-09Conf: Free stored old config before parsing new oneOndrej Zajicek
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.
2022-11-07Merge remote-tracking branch 'origin/master' into thread-nextMaria Matejka
2022-11-07Merge commit '32425297' into thread-nextMaria Matejka
2022-11-07Merge commit '0f2be469' into thread-nextMaria Matejka
2022-11-03Page allocator: Fixed minor bugs and added commentaryMaria Matejka
2022-11-02Memory pages are not munmapped, instead we just madvise()Maria Matejka
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.
2022-10-12Netlink: Parse onlink flag even on direct routesOndrej Zajicek
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.
2022-10-12Fixed SSH known hosts checking with older versions of libsshMaria Matejka
2022-10-05Poll errors must also drop a corefile. And we shouldn't run sockets when ↵Maria Matejka
sockets have changed
2022-10-05Fixed previously untested paths in RPKIMaria Matejka
2022-10-04Merge commit '67256d50' into HEADMaria Matejka
2022-10-04Merge commit 'fb7fb674' into HEADMaria Matejka
2022-10-04Merge commit 'e9e6baae' into HEADMaria Matejka
2022-10-04Merge commit 'a32cee78' into HEADMaria Matejka
2022-10-04Merge commit '71b434a9' into HEADMaria Matejka
2022-10-04Merge commit '0072d11f' into tmp-learnMaria Matejka
2022-09-29Merge branch 'tmp-bad-learn' into thread-nextMaria Matejka
2022-09-29Merge commit '9efaf6ba' into tmp-bad-learnMaria Matejka
Also fixed forgotten best route selection among alien routes.
2022-09-27Merge commit '4364ee' into tmp-bad-learnMaria Matejka
2022-09-27Merge commit 'cae5979871ee7aa341334f8b1af6bafc60ee9692' into tmp-bad-learnMaria Matejka
2022-09-27KRT: Fix route learningMaria Matejka
This is a reimplementation of commit 0f2be469f897b6d9f925563bbf522438c83522ea by Alexander Zubkov. In the master branch, changes in commit eb937358 broke setting of channel preference for alien routes learned during scan. The preference was set only for async routes. The original solution is extended here to accomodate for v3 specifics.
2022-09-27KRT: Fix setting default preferenceAlexander Zubkov
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.
2022-09-21Local page allocationMaria Matejka
2022-09-20Pipe kick-and-drain packed into a neat structure and functions.Maria Matejka
2022-09-20Fixed display of standby memoryMaria Matejka
2022-09-18Loop flags: a simple idempotent event announcement mechanismMaria Matejka
2022-09-18Cancelling all timers when loop stopsMaria Matejka
2022-09-18Memory pages allocator is now a global simple lockless structureMaria Matejka
2022-09-09Merge commit 'd2c1036a42881d413ec97203ede92a69f8cd218f' into thread-nextMaria Matejka
2022-09-08Table access is now locked.Maria Matejka
2022-08-18Merge branch 'mq-fix-eattr-setting' into backportMaria Matejka
2022-08-18Simplified the protocol hookup code in MakefilesMaria Matejka
2022-08-18Fixed initialization of Linux kernel route attributesMaria Matejka
2022-08-05Merge commit '082905a8' into thread-nextMaria Matejka
2022-08-05Merge commit '534d0a4b' into thread-nextMaria Matejka
2022-08-02Merge commit 'f0507f05ce57398e135651896dace4cb68eeed54' into thread-nextMaria Matejka
2022-08-02Introducing basic RCU primitives for lock-less shared data structuresMaria Matejka
2022-07-28Moved the thread starting code to IO loop codeMaria Matejka
2022-07-27Merge branch 'master' into backportOndrej Zajicek
2022-07-26Netlink: Restrict route replace for IPv6Ondrej Zajicek
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).
2022-07-25Netlink: Simplify handling of IPv6 ECMP routesOndrej Zajicek
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.
2022-07-24KRT: Scan routing tables separetely on linux to avoid congestionOndrej Zajicek
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.
2022-07-18Merge commit '94eb0858' into thread-nextMaria Matejka
2022-07-18Merge commit 'a4451535' into thread-nextMaria Matejka
2022-07-13Merge commit '2e5bfeb73ac25e236a24b6c1a88d0f2221ca303f' into thread-nextMaria Matejka