]> git.ipfire.org Git - thirdparty/bird.git/log
thirdparty/bird.git
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.

4 years agoFilter: Fix return on top-level
Ondrej Zajicek (work) [Mon, 28 Dec 2020 14:23:28 +0000 (15:23 +0100)] 
Filter: Fix return on top-level

Broken detection of top-level case caused crash when return was called
from top-of-stack position. It should behave as reject/accept.

Thanks to Damian Zaremba for the bugreport.

4 years agoNest: Per-channel debug flags
Ondrej Zajicek (work) [Mon, 7 Dec 2020 21:19:40 +0000 (22:19 +0100)] 
Nest: Per-channel debug flags

The patch add support for per-channel debug flags, currently just
'states', 'routes', and 'filters'. Flag 'states' is used for channel
state changes, remaining two for routes passed through the channel.
The per-protocol debug flags 'routes'/'filters' still enable reporting
of routes for all channels, to keep existing behavior.

The patch causes minor changes in some log messages.

4 years agoFilter: Add 'weight' route attribute
Ondrej Zajicek (work) [Wed, 2 Dec 2020 04:02:26 +0000 (05:02 +0100)] 
Filter: Add 'weight' route attribute

Add 'weight' route attribute that allows to get and set ECMP weight of
nexthops. Similar to 'gw' attribute, it is limited to the first nexthop,
but it is useful for handling BGP multipath, where an ECMP route is
merged from multiple regular routes.

4 years agoBGP: Zero the newly allocated bucket structure
Ondrej Zajicek (work) [Wed, 25 Nov 2020 14:44:00 +0000 (15:44 +0100)] 
BGP: Zero the newly allocated bucket structure

This fixes an issue with dirty node passed to add_tail().

Thanks to Andreas Rammhold for the initial patch.

4 years agoLog: Fix locking during log reconfiguration
Ondrej Zajicek (work) [Wed, 25 Nov 2020 14:15:13 +0000 (15:15 +0100)] 
Log: Fix locking during log reconfiguration

The log subsystem should be locked earlier, as default_log_list() may
internally manipulate with the current_log_list (if it is also a default
log list).

4 years agoLog: Reinitialize the static logging structures
Ondrej Zajicek (work) [Wed, 25 Nov 2020 14:04:34 +0000 (15:04 +0100)] 
Log: Reinitialize the static logging structures

The static logging structures are reused, we need to reinitialize them
otherwise add_tail() would fail in debug build. Reinitializing these
structures should be fine as the list they belong to is being
reinitialized on entry to the very same function.

Thanks to Andreas Rammhold and Mikael Magnusson for patches.

4 years agoMinor cleanups with cfg_allocz()
Ondrej Zajicek (work) [Tue, 24 Nov 2020 03:09:11 +0000 (04:09 +0100)] 
Minor cleanups with cfg_allocz()

Also fixes some more failed asserts due to add_tail().

4 years agoFix some failed asserts due to add_tail()
Ondrej Zajicek (work) [Tue, 24 Nov 2020 02:42:23 +0000 (03:42 +0100)] 
Fix some failed asserts due to add_tail()

When config structures are copied due to template application,
we need to reset list node structure before calling add_tail().

Thanks to Mikael Magnusson for patches.

4 years agoSome minor sl_allocz() cleanups
Ondrej Zajicek (work) [Tue, 24 Nov 2020 02:21:44 +0000 (03:21 +0100)] 
Some minor sl_allocz() cleanups

4 years agolib/slab: introduce sl_allocz() function and use it in Babel
Toke Høiland-Jørgensen [Tue, 24 Nov 2020 01:32:13 +0000 (02:32 +0100)] 
lib/slab: introduce sl_allocz() function and use it in Babel

The babel protocol code was initialising objects returned from the slab
allocator by assigning to each of the struct members individually, but
wasn't touching the NODE member while doing so. This leads to warnings on
debug builds since commit:

baac7009063d ("List expensive check.")

To fix this, introduce an sl_allocz() variant of the slab allocator which
will zero out the memory before returning it, and switch all the babel call
sites to use this version. The overhead for doing this should be negligible
for small objects, and in the case of babel, the largest object being
allocated was being zeroed anyway, so we can drop the memset in
babel_read_tlv().