]> git.ipfire.org Git - thirdparty/bird.git/log
thirdparty/bird.git
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 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 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 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 agoConf: Fix crash during shutdown
Ondrej Zajicek (work) [Tue, 19 Oct 2021 23:51:28 +0000 (01:51 +0200)] 
Conf: Fix crash during shutdown

BIRD implements shutdown by reconfiguring to fake empty configuration.
Such fake config structure is created from the last running config and
shares some data, including symbol table. This allows access to (removed)
routing tables and causes crash when 'show route' command is used during
shutdown.

Clean up symbol table, table list and links to default tables, so removed
routing tables cannot be accessed during shutdown.

4 years agoNest: Clean up main channel handling 1/merge 23/merge
Ondrej Zajicek (work) [Thu, 17 Jun 2021 14:56:51 +0000 (16:56 +0200)] 
Nest: Clean up main channel handling

Remove assumption that main channel is the only channel.

4 years agoNest: Fix export of tmpattrs through pipes
Ondrej Zajicek (work) [Mon, 14 Jun 2021 18:02:50 +0000 (20:02 +0200)] 
Nest: Fix export of tmpattrs through pipes

Pipes copy the original rte with old values, so they require rte to be
exported with stored tmpattrs. Other protocols access stored attributes
using eattr list, so they require rte to be exported with expanded
tmpattrs. This is temporary hack, we plan to remove whoe tmpattr mechanism.

Thanks to Paul Donohue for the bugreport.

4 years agoRevert "Nest: Fix export of tmpattrs through pipes"
Ondrej Zajicek (work) [Mon, 14 Jun 2021 15:58:37 +0000 (17:58 +0200)] 
Revert "Nest: Fix export of tmpattrs through pipes"

This reverts commit f8e273b5e7a3c721f4a30cf27a0b4fe54602e83f.

4 years agoNest: Fix export of tmpattrs through pipes
Ondrej Zajicek (work) [Mon, 14 Jun 2021 14:30:59 +0000 (16:30 +0200)] 
Nest: Fix export of tmpattrs through pipes

In most cases of export there is no need to store back temporary
attributes to rte, as receivers (protocols) access eattr list anyway.
But pipe copies the original rte with old values, so we should store
tmpattrs also during export.

Thanks to Paul Donohue for the bugreport.

4 years agoCI: Allow Babel tests
Ondrej Zajicek (work) [Thu, 10 Jun 2021 23:31:10 +0000 (01:31 +0200)] 
CI: Allow Babel tests

4 years agoNest: Allow both 'password' and 'key' keywords for authentication keys
Ondrej Zajicek (work) [Wed, 9 Jun 2021 17:54:01 +0000 (19:54 +0200)] 
Nest: Allow both 'password' and 'key' keywords for authentication keys

4 years agoBabel: Simplify auth expiration
Ondrej Zajicek (work) [Wed, 9 Jun 2021 17:31:55 +0000 (19:31 +0200)] 
Babel: Simplify auth expiration

Just use hello_expiry for that, keep init_expiry for initial
unauthentized neighbors.

4 years agoNest: Fix password list parsing code
Ondrej Zajicek (work) [Sun, 6 Jun 2021 17:10:33 +0000 (19:10 +0200)] 
Nest: Fix password list parsing code

One of previous patches broke password list parsing code, fix that.

4 years agoLib: Fix static assert macro
Ondrej Zajicek (work) [Sun, 6 Jun 2021 15:23:45 +0000 (17:23 +0200)] 
Lib: Fix static assert macro

4 years agoBabel: Add MAC authentication support - update
Ondrej Zajicek (work) [Sun, 6 Jun 2021 13:22:59 +0000 (15:22 +0200)] 
Babel: Add MAC authentication support - update

Some cleanups and bugfixes to the previous patch, including:

 - Fix rate limiting in index mismatch check

 - Fix missing BABEL_AUTH_INDEX_LEN in auth_tx_overhead computation

 - Fix missing auth_tx_overhead recalculation during reconfiguration

 - Fix pseudoheader construction in babel_auth_sign() (sport vs fport)

 - Fix typecasts for ptrdiffs in log messages

 - Make auth log messages similar to corresponding RIP/OSPF ones

 - Change auth log messages for events that happen during regular
   operation to debug messages

 - Switch meaning of babel_auth_check*() functions for consistency
   with corresponding RIP/OSPF ones

 - Remove requirement for min/max key length, only those required by
   given MAC code are enforced

4 years agoBabel: Add MAC authentication support
Toke Høiland-Jørgensen [Sat, 17 Apr 2021 13:04:16 +0000 (15:04 +0200)] 
Babel: Add MAC authentication support

This implements support for MAC authentication in the Babel protocol, as
specified by RFC 8967. The implementation seeks to follow the RFC as close
as possible, with the only deliberate deviation being the addition of
support for all the HMAC algorithms already supported by Bird, as well as
the Blake2b variant of the Blake algorithm.

For description of applicability, assumptions and security properties,
see RFC 8967 sections 1.1 and 1.2.

4 years agoBabel: Refactor TLV parsing code for easier reuse
Toke Høiland-Jørgensen [Thu, 15 Apr 2021 18:15:53 +0000 (20:15 +0200)] 
Babel: Refactor TLV parsing code for easier reuse

In preparation for adding authentication checks, refactor the TLV
walking code so it can be reused for a separate pass of the packet
for authentication checks.

4 years agoNest: Allow MAC algorithms to specify min/max key length
Toke Høiland-Jørgensen [Thu, 15 Apr 2021 02:38:49 +0000 (04:38 +0200)] 
Nest: Allow MAC algorithms to specify min/max key length

Add min/max key length fields to the MAC algorithm description and
validate configured keys before they are used.

4 years agoNest: Allow specifying security keys as hex bytes as well as strings
Toke Høiland-Jørgensen [Wed, 14 Apr 2021 19:39:43 +0000 (21:39 +0200)] 
Nest: Allow specifying security keys as hex bytes as well as strings

Add support for specifying a password in hexadecimal format, The result
is the same whether a password is specified as a quoted string or a
hex-encoded byte string, this just makes it more convenient to input
high-entropy byte strings as MAC keys.

4 years agoLib: Add tests for blake2s and blake2b
Toke Høiland-Jørgensen [Wed, 14 Apr 2021 18:00:03 +0000 (20:00 +0200)] 
Lib: Add tests for blake2s and blake2b

Import the blake2-kat.h header with test vector output from the blake
reference implementation, and add tests to mac_test.c to compare the
output of the Bird MAC algorithm implementations with that reference
output.

Since the reference implementation only has test vectors for the full
output size, there are no tests for the smaller-sized output variants.

4 years agoLib: Add Blake2s and Blake2b hash functions
Toke Høiland-Jørgensen [Sat, 10 Apr 2021 15:33:28 +0000 (17:33 +0200)] 
Lib: Add Blake2s and Blake2b hash functions

The Babel MAC authentication RFC recommends implementing Blake2s as one of
the supported algorithms. In order to achieve do this, add the blake2b and
blake2s hash functions for MAC authentication. The hashing function
implementations are the reference implementations from blake2.net.

The Blake2 algorithms allow specifying an arbitrary output size, and the
Babel MAC spec says to implement Blake2s with 128-bit output. To satisfy
this, we add two different variants of each of the algorithms, one using
the default size (256 bits for Blake2s, 512 bits for Blake2b), and one
using half the default output size.

Update to BIRD coding style done by committer.

4 years agosysdep: Add wrapper to get random bytes - update
Ondrej Zajicek (work) [Wed, 7 Apr 2021 23:15:17 +0000 (01:15 +0200)] 
sysdep: Add wrapper to get random bytes - update

Simplify the code and fix an issue with getentropy() return value.

4 years agosysdep: Add wrapper to get random bytes
Toke Høiland-Jørgensen [Thu, 1 Apr 2021 17:20:13 +0000 (19:20 +0200)] 
sysdep: Add wrapper to get random bytes

Add a wrapper function in sysdep to get random bytes, and required checks
in configure.ac to select how to do it. The configure script tries, in
order, getrandom(), getentropy() and reading from /dev/urandom.

4 years agoBGP: Ensure that freed neighbor entry is not accessed
Ondrej Zajicek (work) [Mon, 31 May 2021 23:59:20 +0000 (01:59 +0200)] 
BGP: Ensure that freed neighbor entry is not accessed

Routes from downed protocols stay in rtable (until next rtable prune
cycle ends) and may be even exported to another protocol. In BGP case,
source BGP protocol is examined, although dynamic parts (including
neighbor entries) are already freed. That may lead to crash under some
race conditions. Ensure that freed neighbor entry is not accessed to
avoid this issue.

4 years agoBabel: Seqno requests are properly decoupled from neighbors when the underlying inter... mh-bird-apkg
Maria Matejka [Sun, 30 May 2021 11:07:16 +0000 (13:07 +0200)] 
Babel: Seqno requests are properly decoupled from neighbors when the underlying interface disappears

When an interface disappears, all the neighbors are freed as well. Seqno
requests were anyway not decoupled from them, leading to strange
segfaults. This fix adds a proper seqno request list inside neighbors to
make sure that no pointer to neighbor is kept after free.

4 years agoOSPF: Fix OSPFv3 in IPv4 mode with multiple areas
Ondrej Zajicek (work) [Wed, 26 May 2021 16:57:32 +0000 (18:57 +0200)] 
OSPF: Fix OSPFv3 in IPv4 mode with multiple areas

Some area handling code got confused by IPv4 setup in OSPFv3 mode.

4 years agoCI: Try different locale for Centos 7 bird-apkg
Ondrej Zajicek (work) [Thu, 20 May 2021 13:02:48 +0000 (15:02 +0200)] 
CI: Try different locale for Centos 7

4 years agoCI: Package build for more platforms
Matous Holinka [Wed, 19 May 2021 17:10:09 +0000 (19:10 +0200)] 
CI: Package build for more platforms

.gitlab-ci.yml:
+ pkg targets for some distros added
+ artifacts added
- some distros were commented out (due to errors).

misc/docker/*:
+ Dockerfiles updated with the necessary packages.

4 years agoCI: Try utf-8 locale to workaround apkg issue
Ondrej Zajicek (work) [Sun, 25 Apr 2021 17:52:19 +0000 (19:52 +0200)] 
CI: Try utf-8 locale to workaround apkg issue

4 years agoCI: Build documentation where tools are available
Ondrej Zajicek (work) [Sun, 25 Apr 2021 09:24:46 +0000 (11:24 +0200)] 
CI: Build documentation where tools are available

4 years agoCI: Update docker images for building of documentation
Ondrej Zajicek (work) [Sun, 25 Apr 2021 01:37:54 +0000 (03:37 +0200)] 
CI: Update docker images for building of documentation

4 years agoPkg: Enable docs subpackage for Debian
Ondrej Zajicek (work) [Sun, 25 Apr 2021 01:07:25 +0000 (03:07 +0200)] 
Pkg: Enable docs subpackage for Debian

4 years agoCI: Test of apkg build
Ondrej Zajicek (work) [Thu, 22 Apr 2021 22:20:36 +0000 (00:20 +0200)] 
CI: Test of apkg build

Also temporarily disable cf-ospf-auth, as there is some problem with it.

4 years agoTools: Improve make-dev-archive
Ondrej Zajicek (work) [Thu, 22 Apr 2021 17:23:18 +0000 (19:23 +0200)] 
Tools: Improve make-dev-archive

Use git-archive to avoid unrelated and temporary files and fix some
minor issues (e.g. dependency on bash as system shell).

4 years agoubuntu: use any init-system-helpers
Jakub Ružička [Tue, 13 Apr 2021 18:29:11 +0000 (20:29 +0200)] 
ubuntu: use any init-system-helpers

init-system-helpers (>= 1.56~) can't be satisfied on:

* Ubuntu 18.04 (1.51)
* Ubuntu 16.04 (1.29)
* Debian 9 (1.48)

Remove the specific version requirement in order to enable build on
older platforms.

4 years agosuse: fix bird.spec to work on SUSE
Jakub Ružička [Fri, 9 Apr 2021 16:36:25 +0000 (18:36 +0200)] 
suse: fix bird.spec to work on SUSE

SUSE is more strict about .spec.

* use SPDX license id
* add missing %ghost file directive

4 years agodocs: disable docs subpackage to fix FTBFS
Jakub Ružička [Fri, 9 Apr 2021 14:35:10 +0000 (16:35 +0200)] 
docs: disable docs subpackage to fix FTBFS

Adressing following FTBFS on all older debian/ubuntu distros:

    Can't locate LinuxDocTools/Data/Latin1ToSgml.pm in @INC (you may need to install the LinuxDocTools::Data::Latin1ToSgml module)

4 years agoadd apkg-powered upstream packaging for deb, rpm
Jakub Ružička [Tue, 6 Apr 2021 16:13:16 +0000 (18:13 +0200)] 
add apkg-powered upstream packaging for deb, rpm

Files in a single new distro/ dir allow apkg to build BIRD packages for
various distros directly from upstream sources as well as from upstream
archives.

Please see distro/README.md for more detail as well as apkg docs:

https://apkg.rtfd.io

I've used these files to build bird-2.0.8 on all currently supported
releases of following distros:

* Debian
* Ubuntu
* Fedora
* CentOS
* openSUSE

Please note that latest apkg with accumulated fixes for bird is needed:
https://gitlab.nic.cz/packaging/apkg/-/merge_requests/35

4 years agoFlowspec: Documentation update
Ondrej Zajicek (work) [Tue, 18 May 2021 18:41:01 +0000 (20:41 +0200)] 
Flowspec: Documentation update

4 years agoFlowspec: Label field should use numeric operator and not bitmask operator
Ondrej Zajicek (work) [Tue, 18 May 2021 18:18:06 +0000 (20:18 +0200)] 
Flowspec: Label field should use numeric operator and not bitmask operator

4 years agoFlowspec: Do not use comma for bitmask operators
Ondrej Zajicek (work) [Tue, 18 May 2021 17:54:18 +0000 (19:54 +0200)] 
Flowspec: Do not use comma for bitmask operators

For numeric operators, comma is used for disjunction in expressions like
"10, 20, 30..40". But for bitmask operators, comma is used for
conjunction in a way that does not really make much sense. Use always
explicit logical operators (&& and ||) to connect bitmask operators.

Thanks to Matt Corallo for the bugreport.

4 years agoFilter: Add MPLS label route attribute
Trisha Biswas [Mon, 17 May 2021 15:50:04 +0000 (17:50 +0200)] 
Filter: Add MPLS label route attribute

Add support to set or read outgoing MPLS labels using filters. Currently
this supports the addition of one label per route for the first next hop.

Minor changes by committer.

4 years agoFlowspec: Fix values for true/false operators
Ondrej Zajicek (work) [Fri, 14 May 2021 16:44:52 +0000 (18:44 +0200)] 
Flowspec: Fix values for true/false operators

RFC 8955 is pretty clear that 000 is false and 111 is true.

4 years agoFlowspec: Add code for conversion of flowspec parts to interval lists
Ondrej Zajicek (work) [Fri, 14 May 2021 16:33:15 +0000 (18:33 +0200)] 
Flowspec: Add code for conversion of flowspec parts to interval lists

Implement function flow_explicate_part() to convert flowspec numeric
expressions to a simple list of (disjoint, sorted) intervals. That could
be used in filters to build f_tree-based int-sets from them.

4 years agoBabel: Log the reason when refusing to run on an interface
Ondrej Zajicek (work) [Mon, 10 May 2021 18:09:31 +0000 (20:09 +0200)] 
Babel: Log the reason when refusing to run on an interface

The babel protocol code checks whether iface supports multicast, and
whether it has a link-local address assigned. However, it doesn not give
any feedback if any of those checks fail, it just silently ignores the
interface. Fix this by explicitly logging when multicast check fails.

Based on patch from Toke Høiland-Jørgensen, thanks!

4 years agoBSD: Propagate OS-level IFF_MULTICAST to internal IF_MULTICAST flag
Toke Høiland-Jørgensen [Mon, 10 May 2021 17:49:43 +0000 (19:49 +0200)] 
BSD: Propagate OS-level IFF_MULTICAST to internal IF_MULTICAST flag

The BSD code did not propagate the OS-level IFF_MULTICAST flag to the
Bird-internal IF_MULTICAST flag, which causes problems with Wireguard
interfaces on FreeBSD. The Linux sysdep code does propagate the flag
already, so just copy over the same check and flag update.

4 years agoOSPF: Allow ifaces with host address as unnumbered PtP or PtMP ifaces
Ondrej Zajicek (work) [Mon, 10 May 2021 11:39:55 +0000 (13:39 +0200)] 
OSPF: Allow ifaces with host address as unnumbered PtP or PtMP ifaces

Ifaces with host address (/32) were forced to be stubby, but now they
can be used as PtP or PtMP. For these ifaces we need to:

 - Do not force stub mode
 - Accept packets from any IP as local
 - Accept any configured neighbor as local
 - Detect ifaces properly as unnumbered
 - Use ONLINK flag for nexthops

4 years agoOSPF: Packets on PtP networks should be always sent to AllSPFRouters
Ondrej Zajicek (work) [Sun, 9 May 2021 13:16:13 +0000 (15:16 +0200)] 
OSPF: Packets on PtP networks should be always sent to AllSPFRouters

As specified in RFC 2328 8.1: "On physical point-to-point networks,
the IP destination is always set to the address AllSPFRouters."

Note that this likely break setups with multiple neighbors on a network
configured as PtP, which worked before. These should be configured as
PtMP.

Thanks to Senthil Kumar Nagappan for the original patch and to Joakim
Tjernlund for suggestions.

4 years agoOSPF: Minor refactoring of packet sending code
Ondrej Zajicek (work) [Sun, 9 May 2021 12:51:39 +0000 (14:51 +0200)] 
OSPF: Minor refactoring of packet sending code

Common behavior for LSupd and delayed LSack moved to ospf_send_to_iface()
and other minor changes.

4 years agoCI: Fix debian-10-i386 docker file
Ondrej Zajicek (work) [Sun, 25 Apr 2021 00:34:46 +0000 (02:34 +0200)] 
CI: Fix debian-10-i386 docker file

4 years agoDoc: Include full LinuxDocTools code
Ondrej Zajicek (work) [Sat, 24 Apr 2021 23:07:14 +0000 (01:07 +0200)] 
Doc: Include full LinuxDocTools code

BIRD uses hacked LinuxDocTools for building documentation, keeping some
parts locally and using remaining parts from system-installed one. This
setup breaks when LinuxDocTools makes some internal changes and is hard
to keep consistent.

Just include full LinuxDocTools code (both hacked and unmodified parts)
to avoid consistency issues. Note that we still need some binaries from
LinuxDocTools, so it still needs to be installed to build documentation.

4 years agoCI/CD: some latest releases added. mh-newer-distros
Matous [Wed, 21 Apr 2021 11:22:23 +0000 (13:22 +0200)] 
CI/CD: some latest releases added.

/misc/docker/:
+ debian 11 (i386+amd64) added,
+ fedora 32 added,
+ fedora 33 added,
+ fedora 34 added,
+ opensuse 15.2 added,
+ opensuse 15.3 added,
+ ubuntu 20.04 added,
+ ubuntu 20.10 added,
+ ubuntu 21.04 added,
- ubuntu 19.10 removed.

/.gitlab-ci.yml:
+ stages 'image' and 'build' updated.

4 years agoInternal route tables have a reduced cleanup routine
Maria Matejka [Mon, 19 Apr 2021 13:13:20 +0000 (15:13 +0200)] 
Internal route tables have a reduced cleanup routine

This fixes an internal table cleanup bug introduced
in ff397df7edcbe7a8abca5b419729b9c64c063847.

4 years agoBSD: Fix invalid pointer derefence in logging code
Stefan Haller [Mon, 19 Apr 2021 13:06:42 +0000 (15:06 +0200)] 
BSD: Fix invalid pointer derefence in logging code

For logging purposes a stack allocated net_addr struct was passed by
value as vararg (instead of the expected pointer). This resulted in
a segfault when the specific error condition got logged.

4 years agoLib: Fix handling of buffers in timestamp formatting
Ondrej Zajicek (work) [Mon, 12 Apr 2021 15:01:31 +0000 (17:01 +0200)] 
Lib: Fix handling of buffers in timestamp formatting

The code in tm_format_real_time() mixed up two buffers and their
sizes, which may cause crash in MRT dumping code.

Thanks to Piotr Wydrych for the bugreport.

4 years agoUnix: Expand accepted ranges of iproute2 constants
Ondrej Zajicek (work) [Wed, 7 Apr 2021 14:14:20 +0000 (16:14 +0200)] 
Unix: Expand accepted ranges of iproute2 constants

We support 32bit table and realm/flow ids, we should also accept them as
constants.

Thanks to Patrick Hemmer for the bugreport.

4 years agoDoc: Fix flowspec example
Ondrej Zajicek (work) [Sat, 3 Apr 2021 18:09:32 +0000 (20:09 +0200)] 
Doc: Fix flowspec example

Thanks to Matt Corallo for the bugreport.

4 years agoAllocation of ea_list in one contiguous memory block
Maria Matejka [Tue, 30 Mar 2021 19:44:35 +0000 (21:44 +0200)] 
Allocation of ea_list in one contiguous memory block

This saves some bytes of memory for complex ea's.

4 years agoRouting table is now a resource allocated from its own pool
Maria Matejka [Tue, 30 Mar 2021 16:51:31 +0000 (18:51 +0200)] 
Routing table is now a resource allocated from its own pool

This also fixes memory leaks from import/export tables being never
cleaned up and freed.

4 years agoResources: added mb_move() to complement rmove() for memory blocks
Maria Matejka [Tue, 30 Mar 2021 14:03:33 +0000 (16:03 +0200)] 
Resources: added mb_move() to complement rmove() for memory blocks

4 years agoRouting tables list iteration should use explicit node struct position
Maria Matejka [Tue, 30 Mar 2021 13:09:53 +0000 (15:09 +0200)] 
Routing tables list iteration should use explicit node struct position

4 years agoBGP: Do not keep BAF_EXT_LEN flag internally
Ondrej Zajicek (work) [Tue, 30 Mar 2021 14:59:11 +0000 (16:59 +0200)] 
BGP: Do not keep BAF_EXT_LEN flag internally

The flag makes sense just in external representation. It is reset during
BGP export, but keeping it internally broke MRT dumps for short attributes
that used it anyways.

Thanks to Simon Marsh for the bugreport and the patch.

4 years agoDropping automatic tests for Debian 7 Wheezy.
Maria Matejka [Thu, 25 Mar 2021 19:51:23 +0000 (20:51 +0100)] 
Dropping automatic tests for Debian 7 Wheezy.

Debian 7 Wheezy has been superseded by Debian 8 Jessie on Apr 25, 2015,
with LTS support ending on May 31, 2018.

Debian 7 Wheezy's default GCC doesn't fully support C11. It should
anyway still be possible to build BIRD for Debian 7 if you backport
a C11-capable compiler there.

4 years agoSlab: head now uses bitmask for used/free nodes info instead of lists
Maria Matejka [Tue, 21 Jul 2020 22:09:15 +0000 (00:09 +0200)] 
Slab: head now uses bitmask for used/free nodes info instead of lists

From now, there are no auxiliary pointers stored in the free slab nodes.
This led to strange debugging problems if use-after-free happened in
slab-allocated structures, especially if the structure's first member is
a next pointer.

This also reduces the memory needed by 1 pointer per allocated object.
OTOH, we now rely on pages being aligned to their size's multiple, which
is quite common anyway.

4 years agoNEWS and version update v2.0.8
Ondrej Zajicek (work) [Thu, 18 Mar 2021 19:18:38 +0000 (20:18 +0100)] 
NEWS and version update

4 years agoAdd new BGP tests
Ondrej Zajicek (work) [Thu, 18 Mar 2021 14:54:44 +0000 (15:54 +0100)] 
Add new BGP tests

4 years agoBGP: Do not show statistics
Ondrej Zajicek (work) [Thu, 18 Mar 2021 14:44:04 +0000 (15:44 +0100)] 
BGP: Do not show statistics

BGP statistics code was preliminary and i wanted to replace it by
separate 'show X stats' command. The patch hides the preliminary
output in 'show protocols all' so it is not part of the released
version.

4 years agoRPKI: Improve error handling of DNS resolver
Ondrej Zajicek (work) [Wed, 17 Mar 2021 16:24:00 +0000 (17:24 +0100)] 
RPKI: Improve error handling of DNS resolver

4 years agoMinor fixes for restricted builds
Ondrej Zajicek (work) [Wed, 17 Mar 2021 14:56:12 +0000 (15:56 +0100)] 
Minor fixes for restricted builds

4 years agoPipe: Propagate debug flags from protocol to channels
Ondrej Zajicek (work) [Tue, 16 Mar 2021 19:10:00 +0000 (20:10 +0100)] 
Pipe: Propagate debug flags from protocol to channels

Pipe channels are kind-of implicit, so setting protocol debug flags
should also set pipe debug flags.

4 years agoOSPFv3: Update neighbor authentication state from Hello packets
Ondrej Zajicek (work) [Tue, 16 Mar 2021 15:34:42 +0000 (16:34 +0100)] 
OSPFv3: Update neighbor authentication state from Hello packets

In OSPFv3, only Hello and DBDes packets contain flags specifying whether
RFC 7166 authentication trailer is used. Other packets are processed
based on stored authentication state in neighbor structure. Update this
state with each received Hello to handle authentication change from
reconfigurations.

Thanks to Joakim Tjernlund and Kenth Eriksson for the bugreport.

4 years agoFilter: Update 'gw' to handle IPv6 link-local addresses
Ondrej Zajicek (work) [Mon, 15 Mar 2021 17:35:23 +0000 (18:35 +0100)] 
Filter: Update 'gw' to handle IPv6 link-local addresses

When a link-local address is set, use the existing iface for scope.

Thanks to Marcel Krüger for the bugreport.

4 years agoDoc: Document automatic RPKI reload
Ondrej Zajicek (work) [Mon, 15 Mar 2021 16:51:33 +0000 (17:51 +0100)] 
Doc: Document automatic RPKI reload

4 years agoDoc: Document channel debug options
Ondrej Zajicek (work) [Mon, 15 Mar 2021 15:16:32 +0000 (16:16 +0100)] 
Doc: Document channel debug options

4 years agoRate-limit scheduling of work-events
Ondrej Zajicek (work) [Fri, 12 Mar 2021 14:35:56 +0000 (15:35 +0100)] 
Rate-limit scheduling of work-events

In general, events are code handling some some condition, which is
scheduled when such condition happened and executed independently from
I/O loop. Work-events are a subgroup of events that are scheduled
repeatedly until some (often significant) work is done (e.g. feeding
routes to protocol). All scheduled events are executed during each
I/O loop iteration.

Separate work-events from regular events to a separate queue and
rate limit their execution to a fixed number per I/O loop iteration.
That should prevent excess latency when many work-events are
scheduled at one time (e.g. simultaneous reload of many BGP sessions).

4 years agoStatic: Implement reload hook
Ondrej Zajicek (work) [Wed, 10 Mar 2021 14:07:19 +0000 (15:07 +0100)] 
Static: Implement reload hook

4 years agoNest: No automatic ROA reload on non-reloadable channels
Ondrej Zajicek (work) [Mon, 8 Mar 2021 19:45:22 +0000 (20:45 +0100)] 
Nest: No automatic ROA reload on non-reloadable channels

4 years agoNest: Add option to control automatic RPKI reload
Ondrej Zajicek (work) [Fri, 12 Feb 2021 04:05:18 +0000 (05:05 +0100)] 
Nest: Add option to control automatic RPKI reload

Also, no automatic reload for BGP channels without import/export table.

4 years agoTests: Add missing mockup function to tests
Ondrej Zajicek (work) [Wed, 10 Feb 2021 16:29:14 +0000 (17:29 +0100)] 
Tests: Add missing mockup function to tests

4 years agoBGP: Add support for BGP hostname capability
Vincent Bernat [Wed, 10 Feb 2021 15:53:57 +0000 (16:53 +0100)] 
BGP: Add support for BGP hostname capability

This is an implementation of draft-walton-bgp-hostname-capability-02.
It is implemented since quite some time for FRR and in datacenter, this
gives a nice output to avoid using IP addresses.

It is disabled by default. The hostname is retrieved from uname(2) and
can be overriden with "hostname" option. The domain name is never set
nor displayed.

Minor changes by committer.

4 years agoNest: Automatic channel reloads based on RPKI changes
Ondrej Zajicek (work) [Wed, 10 Feb 2021 02:09:57 +0000 (03:09 +0100)] 
Nest: Automatic channel reloads based on RPKI changes

If there are roa_check() calls in channel filters, then the channel
subscribes to ROA table notifications, which are sent when ROA tables
are updated (subject to settle time) and trigger channel reload or
refeed.

4 years agoFilter: Recursive filter iteration code
Ondrej Zajicek (work) [Sun, 7 Feb 2021 18:21:42 +0000 (19:21 +0100)] 
Filter: Recursive filter iteration code

Add macros for recursive filter iteration that allows to examine
all instructions reachable from a filter.

4 years agoMRT: Fix MP-BGP next hops
Ondrej Zajicek (work) [Fri, 22 Jan 2021 03:34:15 +0000 (04:34 +0100)] 
MRT: Fix MP-BGP next hops

Flag signalling that MP-BGP mode should be used got reset after first
batch of routes, so remaining routes were processed without that, leading
to missing MP_REACH_NLRI attribute.

Thanks to Piotr Wydrych for the bugreport.

4 years agoNetlink: Ignore dead routes
Ondrej Zajicek (work) [Thu, 14 Jan 2021 00:51:09 +0000 (01:51 +0100)] 
Netlink: Ignore dead routes

With net.ipv4.conf.XXX.ignore_routes_with_linkdown sysctl, a user can
ensure the kernel does not use a route whose target interface is down.
Such route is marked with a 'dead' / RTNH_F_DEAD flag.

Ignore these routes or multipath nexthops during scan.

Thanks to Vincent Bernat for the original patch.

4 years agoBuild: Fix tags generation
Ondrej Zajicek (work) [Tue, 12 Jan 2021 14:43:54 +0000 (15:43 +0100)] 
Build: Fix tags generation

4 years agoMRT: Fix IPv6 table dumps
Ondrej Zajicek (work) [Tue, 12 Jan 2021 14:37:01 +0000 (15:37 +0100)] 
MRT: Fix IPv6 table dumps

Add fake MP_REACH_NLRI attribute with BGP next hop when encoding MRT
table dumps for IPv6 routes. That is necessary to encode next hop as
NEXT_HOP attribute is not used for MP-BGP.

Thanks to Santiago Aggio for the bugreport.

4 years agoBFD: Dispatch sessions also by interface index
Ondrej Zajicek (work) [Sun, 10 Jan 2021 14:29:02 +0000 (15:29 +0100)] 
BFD: Dispatch sessions also by interface index

Direct BFD sessions needs to be dispatched not only by IP addresses, but
also by interfaces, in order to avoid collisions between neighbors with
the same IPv6 link-local addresses.

Extend BFD session hash_ip key by interface index to handle that. Use 0
for multihop sessions.

Thanks to Sebastian Hahn for the original patch.

4 years agoRPKI: Remove port (and SSH username) from 'Cache server' output line
Ondrej Zajicek (work) [Thu, 7 Jan 2021 04:56:34 +0000 (05:56 +0100)] 
RPKI: Remove port (and SSH username) from 'Cache server' output line

It was mixed-up if hostname is IPv6 address, and reporting separate
values (like port) on separate lines fits better into key-value style
of 'show protocols all' output. Also, the patch simplifies transport
identification formatting (although it is unused now).

Thanks to Alarig Le Lay for the suggestion.

4 years agoKernel: Do not check templates
Ondrej Zajicek (work) [Thu, 7 Jan 2021 00:56:00 +0000 (01:56 +0100)] 
Kernel: Do not check templates

So one can define kernel protocol template without channels.
For other protocols, it is either irrelevant or already done.

Thanks to Clemens Schrimpe for the bugreport.

4 years agoDoc: Describe per-nexthop static route options
Ondrej Zajicek (work) [Thu, 7 Jan 2021 00:20:56 +0000 (01:20 +0100)] 
Doc: Describe per-nexthop static route options

Also remove description of (no longer supported) per-route 'bfd' option,
and add examples of IPv6 routes with link-local nexthops.

4 years agoNest: remove last_tx_filter_change
Ondrej Zajicek (work) [Wed, 6 Jan 2021 13:51:49 +0000 (14:51 +0100)] 
Nest: remove last_tx_filter_change

No longer needed after redesign of export handling.

4 years agoBGP: Deprecate 'missing lladdr' option
Ondrej Zajicek (work) [Wed, 6 Jan 2021 13:44:23 +0000 (14:44 +0100)] 
BGP: Deprecate 'missing lladdr' option

The option is not implemented since transition to 2.0 and no plan to add it.
Also remove some deprecated RTS_* valus from documentation.

Thanks to Sébastien Parisot for notification.

4 years agoKernel: Fix handling of krt_realm with ECMP routes
Ondrej Zajicek (work) [Wed, 6 Jan 2021 04:25:59 +0000 (05:25 +0100)] 
Kernel: Fix handling of krt_realm with ECMP routes

For ECMP routes, RTA_FLOW attribute must be set per-nexthop, not
per-route. Our corresponding krt_realm attribute is per-route.

Thanks to Mikhail Petrov for the bugreport.

4 years agoNest: Read Babel metric as IGP metric
James Lu [Tue, 29 Dec 2020 01:23:54 +0000 (02:23 +0100)] 
Nest: Read Babel metric as IGP metric

(Minor syntactic changes by committer)

4 years agoStatic: Fix handling of 'net' attribute in per-route filters
Ondrej Zajicek (work) [Mon, 28 Dec 2020 20:19:27 +0000 (21:19 +0100)] 
Static: Fix handling of 'net' attribute in per-route filters

We need to define 'net' field temporarily as it may be accessed by
per-route filters.

Thanks to Damian Zaremba for the bugreport.