summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-02-06BGP: Implement flowspec validation procedureOndrej Zajicek (work)
Implement flowspec validation procedure as described in RFC 8955 sec. 6 and RFC 9117. The Validation procedure enforces that only routers in the forwarding path for a network can originate flowspec rules for that network. The patch adds new mechanism for tracking inter-table dependencies, which is necessary as the flowspec validation depends on IP routes, and flowspec rules must be revalidated when best IP routes change. The validation procedure is disabled by default and requires that relevant IP table uses trie, as it uses interval queries for subnets.
2022-02-06Nest: Add routing table configuration blocksOndrej Zajicek (work)
Allow to specify sorted flag, trie fla, and min/max settle time. Also do not enable trie by default, it must be explicitly enabled.
2022-02-06Nest: Add convenience functions to check rtable net typeOndrej Zajicek (work)
2022-02-06Nest: Avoid unnecessary net_format() in 'show route' commandOndrej Zajicek (work)
When output of 'show route' command was generated, the net_format() was called for each network prematurely, even if the result was not needed. Fix the code to call net_format() only when needed. This makes queries that process many networks but show only few (e.g. 'show route where ..', or 'show route count') much faster (like 5x - 10x faster).
2022-02-06Nest: Add trie iteration code to 'show route'Ondrej Zajicek (work)
Add trie iteration code to rt_show_cont() CLI hook and use it to accelerate 'show route in <addr>' commands using interval queries.
2022-02-06Nest: Implement 'show route in <addr>' commandOndrej Zajicek (work)
Implement 'show route in <addr>' command, which shows all routes in networks that are subnets of given network. Currently limited to IP network types.
2022-02-06Nest: Attach prefix trie to rtable for faster LPM and interval queriesOndrej Zajicek (work)
Attach a prefix trie to IP/VPN/ROA tables. Use it for net_route() and net_roa_check(). This leads to 3-5x speedups for IPv4 and 5-10x speedup for IPv6 of these calls. TODO: - Rebuild the trie during rt_prune_table() - Better way to avoid trie_add_prefix() in net_get() for existing tables - Make it configurable (?)
2022-02-04Dropping (end-of-life) Debian 8 automated testsMaria Matejka
2022-02-04Build test default timeout raised to allow for tests on slow virtual machinesMaria Matejka
2022-02-04Tamed harmless i368 warningsMaria Matejka
2022-02-04Compilation fixes for CLangMaria Matejka
2022-02-04Merge commit 'a9646efd40569f3a1d749bc1bd13219876b33a00' into sark-bgp-rebasedMaria Matejka
2022-02-04Merge commit 'bcb25084d31fdb90fcf1666f10e73fe0f863afc0' into sark-bgp-rebasedMaria Matejka
2022-02-04Merge commit '75aceadaf746f8ed0acce0424f89903283dacf16' into sark-bgp-rebasedMaria Matejka
2022-02-04Merge commit '00410fd6c17697a5919cb32a44f7117dd3a0834a' into sark-bgp-rebasedMaria Matejka
2022-02-04Thread performance: Moved graph key to left top corner where it fits betterMaria Matejka
2022-02-04Thread documentation: Final version of chapter 3Maria Matejka
2022-02-03Thread documentation: Rewritten chapter 3 on loops and locks once againMaria Matejka
2022-02-03Protocol limit restart/down must be callable from protocol contextMaria Matejka
2022-02-03BFD: direct notifications to protocol loopsMaria Matejka
2022-02-03Neighbor prune fixupMaria Matejka
2022-02-03IO loop duration fixupMaria Matejka
2022-02-03BGP now runs in its own threadMaria Matejka
2022-02-03BGP: Static global linpools replaced by private linpoolsMaria Matejka
2022-02-03Socket cork fixesMaria Matejka
2022-02-03Asynchronous neighbor notifications fixesMaria Matejka
2022-02-03Explicitly storing and checking loop information in socketsMaria Matejka
2022-02-03Neighbors: Locking and asynchronous notificationsMaria Matejka
2022-02-03Global interface list renamed to not clash with local listsMaria Matejka
2022-02-03Interfaces and neighbor notifications do properly enter protocol loopsMaria Matejka
2022-02-03Page cleanup routines updated to allow nested birdloopsMaria Matejka
2022-02-03Route table fast prune fixupMaria Matejka
2022-02-03Babel: fixed interface pool removalMaria Matejka
2022-02-03Dropping a nonsensical assert which broke BabelMaria Matejka
2022-02-03Removing periodic wakeup of mainloop in debug version to search for ↵Maria Matejka
notification issues
2022-02-03Performance data of sark vs. v2.0.8 with a chart generatorMaria Matejka
2022-01-28BGP: Make routing loops silentOndrej Zajicek (work)
One of previous commits added error logging of invalid routes. This also inadvertently caused error logging of route loops, which should be ignored silently. Fix that.
2022-01-28BGP: Use proper class in attribute error messagesOndrej Zajicek (work)
Most error messages in attribute processing are in rx/decode step and these use L_REMOTE log class. But there are few that are in tx/export step and these should use L_ERR log class. Use tx-specific macro (REJECT()) in tx/export code and rename field err_withdraw to err_reject in struct bgp_export_state to ensure that appropriate error reporting macros are called in proper contexts.
2022-01-28BGP: Improve 'invalid next hop' error reportingOndrej Zajicek (work)
Distinguish multiple causes of 'invalid next hop' message and report the relevant next hop address. Thanks to Simon Ruderich for the original patch.
2022-01-24BGP: Log route updates that were changed to withdrawsOndrej Zajicek (work)
Typical BGP error handling is treat-as-withdraw, where an invalid route is replaced with a withdraw. Log route network when it happens.
2022-01-17.gitlab-ci.yml: minor changes inside the .yml file.Matous Holinka
+ 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.
2022-01-17Netlink: Add option to specify netlink socket receive buffer sizeOndrej Zajicek (work)
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.
2022-01-15Netlink: Add another workaround for older kernel headersOndrej Zajicek (work)
Unfortunately, SOL_NETLINK is both recently added and arch-dependent, so we cannot just define it.
2022-01-14Netlink: Add workaround for older kernel headersOndrej Zajicek (work)
2022-01-14Netlink: Enable strict checking for KRT dumpsOndrej Zajicek (work)
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.
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.