- 27 Jun, 2022 7 commits
-
-
Add literal for empty set [], which works both for tree-based sets and prefix sets by using existing constant promotion mechanism. Minor changes by committer.
-
Use struct f_val as a common argument for as_path_filter(), as suggested by Alexander Zubkov. That allows to use NULL sets as valid arguments.
-
All instructions with a return value (i.e. expressions, ones with non-zero outval, third argument in INST()) should declare their return type. Check that automatically by M4 macros. Set outval of FI_RETURN to 0. The instruction adds one value to stack, but syntactically it is a statement, not an expression. Add fake return type declaration to FI_CALL, otherwise the automatic check would fail builds.
-
-
Keep list of function parameters in f_line and use it to verify types of arguments for function calls. Only static type checks are implemented.
-
Pass instructions of function call arguments as vararg arguments to FI_CALL instruction constructor and move necessary magic from parser code to interpreter / instruction code.
-
Maria Matejka authored
Passing protocol to preexport was in fact a historical relic from the old times when channels weren't a thing. Refactoring that to match current extensibility needs.
-
- 16 Jun, 2022 1 commit
-
-
Ondřej Zajíček authored
-
- 07 Jun, 2022 1 commit
-
-
Maria Matejka authored
When writing flow4 { dst 2001:db8::dead:beef/128; }, BIRD crashed on an not-well-debuggable segfault as it tried to copy the whole 128-bit prefix into an IPv4-sized memory.
-
- 05 Jun, 2022 1 commit
-
-
Ondřej Zajíček authored
The Babel seqno request code keeps track of which seqno requests are outstanding for a neighbour by putting them onto a per-neighbour list. When reusing a seqno request, it will try to remove this node, but if the seqno request in question was a multicast request with no neighbour attached this will result in a crash because it tries to remove a list node that wasn't added to any list. Fix this by making the list remove conditional. Also fix neighbor removal which were changing seqno requests to multicast ones instead of removing them. Fixes: ebd5751c ("Babel: Seqno requests are properly decoupled from neighbors when the underlying interface disappears"). Based on the patch from Toke Høiland-Jørgensen <toke@toke.dk>, bug reported by Stefan Haller <stefan.haller@stha.de>, thanks.
-
- 04 Jun, 2022 2 commits
-
-
Ondřej Zajíček authored
-
Ondřej Zajíček authored
Use timer (configurable as 'gc period') to schedule routing table GC/pruning to ensure that prune is done on time but not too often. Randomize GC timers to avoid concentration of GC events from different tables in one loop cycle. Fix a bug that caused minimum inter-GC interval be 5 us instead of 5 s. Make default 'gc period' adaptive based on number of routing tables, from 10 s for small setups to 600 s for large ones. In marge multi-table RS setup, the patch improved time of flushing a downed peer from 20-30 min to <2 min and removed 40s latencies.
-
- 27 May, 2022 1 commit
-
-
Ondřej Zajíček authored
We currently do not have FreeBSD CI workers.
-
- 21 May, 2022 2 commits
-
-
Ondřej Zajíček authored
-
Ondřej Zajíček authored
Thanks to Luiz Amaral for the idea.
-
- 19 May, 2022 1 commit
-
-
- 15 May, 2022 1 commit
-
-
Ondřej Zajíček authored
The prefix hash table in BGP used the same hash function as the rtable. When a batch of routes are exported during feed/flush to the BGP, they all have similar hash values, so they are all crowded in a few slots in the BGP prefix table (which is much smaller - around the size of the batch - and uses higher bits from hash values), making it much slower due to excessive collisions. Use a different hash function to avoid this. Also, increase the batch size to fill 4k BGP packets and increase minimum BGP bucket and prefix hash sizes to avoid back and forth resizing during flushes. This leads to order of magnitude faster flushes (on my test data).
-
- 22 Apr, 2022 3 commits
-
-
-
The debug output was not updated with the rest of the code, so packets.c fails to compile if LOCAL_DEBUG is set.
-
When shutting down a Babel instance we send a wildcard retraction to make sure all peers can quickly switch to other route origins. Add another small optimisation borrowed from babeld: sending a Hello message (along with the retraction) with a very low interval. This will cause neighbours to modify their expiry timers for the node's state to quickly time it out, thus conserving resources in the network.
-
- 13 Apr, 2022 1 commit
-
-
Maria Matejka authored
When BIRD was munmapping too many pages, it sometimes aborted, saying that munmap failed with "Not enough memory" as the address space was getting more and more fragmented. There is a workaround in place, simply keeping that page for future use, yet it has never been compiled in because I somehow forgot to include errno.h. And because I also thought that somebody may have ENOMEM not defined (why?!), there was a check which quietly omitted that workaround. Anyway, ENOMEM is POSIX. It's an utter nonsense to check for its existence. If it doesn't exist, something is broken.
-
- 07 Apr, 2022 1 commit
-
-
Ondřej Zajíček authored
Add BFD protocol option 'strict bind' to use separate listening socket for each BFD interface bound to its address instead of using shared listening sockets.
-
- 16 Mar, 2022 2 commits
-
-
Ondřej Zajíček authored
Thanks to Vincent Bernat for notice.
-
Ondřej Zajíček authored
There were several requests to allow use of 240.0.0.0/4 as a private range, and Linux kernel already allows such routes, so perhaps we can allow that too. Thanks to Vincent Bernat and others for suggestion and patches.
-
- 11 Mar, 2022 2 commits
-
-
Update the RPM package unit file to check configuration before start and to use "birdc configure" instead of "kill -HUP".
-
Ondřej Zajíček authored
When birdc is called with a command as an argument, it should set exit status to non-zero when BIRD replied with an error reply code. Thanks to Vincent Bernat and others for suggestion.
-
- 02 Mar, 2022 1 commit
-
-
Ondřej Filip authored
-
- 27 Feb, 2022 1 commit
-
-
Ondřej Zajíček authored
A recent change in Babel causes ifaces to disappear after reconfiguration. The patch fixes that. Thanks to Johannes Kimmel for an insightful bugreport.
-
- 20 Feb, 2022 2 commits
-
-
Ondřej Filip authored
-
Ondřej Filip authored
-
- 13 Feb, 2022 1 commit
-
-
Ondřej Zajíček authored
-
- 09 Feb, 2022 1 commit
-
-
Ondřej Zajíček authored
-
- 08 Feb, 2022 2 commits
-
-
Ondřej Zajíček authored
For compatibility with older systems use posix_memalign(). We can switch to aligned_alloc() when we commit to C11 for multithreading.
-
Ondřej Zajíček authored
-
- 07 Feb, 2022 1 commit
-
-
Ondřej Zajíček authored
Alignment of slabs should be at least sizeof(ptr) to avoid unaligned pointers in slab structures. Fixme: Use proper way to choose alignment for internal allocators.
-
- 06 Feb, 2022 5 commits
-
-
Ondřej Zajíček authored
-
Ondřej Zajíček authored
After switching to 16-way tries, trie format ignored unaligned / internal prefixes and only reported the primary prefix of a trie node. Fix trie format by showing internal prefixes based on the 'local' bitmask of a node. Also do basic (intra-node) reconstruction of prefix patterns by finding common subtrees in 'local' bitmask. In future, we could improve that by doing inter-node reconstruction, so prefixes entered as one pattern for a subtree (e.g. 192.168.0.0/18+) would be reported as such, like with aligned prefixes.
-
Ondřej Zajíček authored
The prune loop may may rebuild the prefix trie and therefore invalidate walk state for asynchronous walks (used in 'show route in' cmd). Fix it by adding locking that keeps the old trie in memory until current walks are done. In future this could be improved by rebuilding trie walk states (by lookup for last found prefix) after the prefix trie rebuild.
-
Ondřej Zajíček authored
When rtable is pruned and network fib nodes are removed, we also need to prune prefix trie. Unfortunately, rebuilding prefix trie takes long time (got about 400 ms for 1M networks), so must not be atomic, we have to rebuild a new trie while current one is still active. That may require some considerable amount of temporary memory, so we do that only if we expect significant trie size reduction.
-
Ondřej Zajíček authored
Add counter of prefixes stored in trie. Works only for 'restricted' tries composed of explicit prefixes (pxlen == l == h), like ones used in rtables.
-