summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-14Netlink: Explicitly skip received cloned routesOndrej Zajicek (work)
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.
2022-01-09BGP: Add option 'free bind'Ondrej Zajicek (work)
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.
2022-01-08IO: Support nonlocal bind in socket interfaceAlexander Zubkov
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.
2022-01-05Test: Activate some remaining build testsOndrej Zajicek (work)
2022-01-05Netlink: Do not ignore dead routes from BIRDOndrej Zajicek (work)
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.
2022-01-05Netlink: Improve multipath parsing errorsOndrej Zajicek (work)
Function nl_parse_multipath() should handle errors internally.
2022-01-05Conf: Fix parsing full-length IPv6 addressesOndrej Zajicek (work)
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
2022-01-05gitlab-ci.yml: failing gitlab runner fixed.Matous
'registry.labs.nic.cz' -> 'registry.nic.cz' changed
2021-12-28Doc: Document min/max operators for listsAlexander Zubkov
2021-12-28Filter: Add operators to find minimum and maximum element of setsAlexander Zubkov
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>
2021-12-28Doc: Document community components access operatorsAlexander Zubkov
2021-12-28Filter: Add operators to pick community componentsAlexander Zubkov
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>
2021-12-27BSD: Assume onlink flag on ifaces with only host addressesOndrej Zajicek (work)
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.
2021-12-22Thread documentation: Chapter 4 on memory managementMaria Matejka
2021-12-18RPKI: Add contextual out-of-bound checks in RTR Prefix PDU handlerJob Snijders
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.
2021-12-18Doc: bgp: remove "advertise ipv4"Simon Ruderich
The option was removed in d15b0b0a ("BGP redesign", 2016-12-07) but the documentation wasn't updated.
2021-12-18Nest: Do not ignore secondary flag changes in ifa updatesOndrej Zajicek (work)
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.
2021-12-08Thread documentation: Completely rewritten chapter 3 on loops and locksMaria Matejka
2021-12-08Final version of asynchronous export documentationMaria Matejka
2021-12-08Thread documentation: chapter 3, coroutines and lockingMaria Matejka
2021-12-08Thread documentation: chapters 0, 1 and 2Maria Matejka
2021-12-07Fixed build errors for OpenBSDMaria Jan Matejka
2021-12-07Fixed standby memory page counters on shutdownMaria Matejka
Bug introduced by commit 38278d94ba0a179d5eeb061a59850a4e1c150e5b.
2021-12-07GDB: io loop printing support in resource dumps, better iterating over ↵Maria Matejka
linpool chunks
2021-12-07Fixed a race condition in channel aux table cleanupMaria Matejka
2021-12-07Event list asserts to prevent running into rotten dataMaria Matejka
2021-12-07Using more Python-ish constructions in BIRD linked-list accessorsMaria Matejka
2021-12-07Main IO loop shouldn't skip sockets when ping is receivedMaria Matejka
2021-12-02Standby memory pages are accounted for as overhead in show memory commandMaria Matejka
2021-12-02Trie: Clarify handling of less-common net typesOndrej Zajicek (work)
For convenience, Trie functions generally accept as input values not only NET_IPx types of nets, but also NET_VPNx and NET_ROAx types. But returned values are always NET_IPx types.
2021-12-01No memory unmapping when shutting downMaria Matejka
All the memory is just freed implicitly on exit, no need for page-by-page unmapping.
2021-12-01Faster shutdown and cleanups by freeing route attributes strictly from main loopMaria Matejka
2021-12-01Faster prune on table deletionMaria Matejka
2021-12-01Table prune routines request export announcements directlyMaria Matejka
2021-12-01fixed duplicate routes propagationMaria Matejka
2021-12-01Merge branch 'master' into HEADMaria Matejka
2021-12-01Fix of shutdown: premature log cleanup led to use-after-freeMaria Matejka
2021-12-01Page allocator moved from pools to IO loops.Maria Matejka
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.
2021-11-30For safer memory allocations, resources are bound to loops.Maria Matejka
Also all loops have their basic resource pool for allocations which are auto-freed when the loop is stopping.
2021-11-27Memory statistics split into Effective and OverheadMaria Matejka
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.
2021-11-26Trie: Implement longest-prefix-match queries and walksOndrej Zajicek (work)
The prefix trie now supports longest-prefix-match query by function trie_match_longest_ipX() and it can be extended to iteration over all covering prefixes for a given prefix (from longest to shortest) using TRIE_WALK_TO_ROOT_IPx() macro.
2021-11-24fixup of table reload bugMaria Matejka
2021-11-24Directly mapped pages are kept for future use if temporarily not neededMaria Matejka
2021-11-24GDB pretty printer for resource poolsMaria Matejka
2021-11-23Fixed pipe reload/refeedMaria Matejka
2021-11-23Stored pages release routineMaria Matejka
2021-11-23Fixed channel export map confusionMaria Matejka
2021-11-22BGP: End route refresh before another startsMaria Matejka
2021-11-22RPKI has its own loopMaria Matejka
2021-11-22Higher settle times when route refresh in the source table is runningMaria Matejka