]> git.ipfire.org Git - thirdparty/bird.git/log
thirdparty/bird.git
44 hours agoMinor improvements in Flowspec parsing master
Ondrej Zajicek [Wed, 10 Jun 2026 14:21:38 +0000 (16:21 +0200)] 
Minor improvements in Flowspec parsing

46 hours agoLib: Add VPN route target datatype oz-test2
Igor Putovny [Wed, 17 Jun 2026 13:39:51 +0000 (15:39 +0200)] 
Lib: Add VPN route target datatype

46 hours agoLib: Add TYPE_CAST and other macros
Igor Putovny [Wed, 20 May 2026 15:04:27 +0000 (17:04 +0200)] 
Lib: Add TYPE_CAST and other macros

46 hours agoLib: Add u64_mkmask() and CLZ and CTZ for u64
Igor Putovny [Tue, 19 May 2026 15:22:18 +0000 (17:22 +0200)] 
Lib: Add u64_mkmask() and CLZ and CTZ for u64

46 hours agoNest: Add functions to disable export to active channel
Ondrej Zajicek [Tue, 16 Dec 2025 14:06:33 +0000 (15:06 +0100)] 
Nest: Add functions to disable export to active channel

A protocol may want its channels to go up, but not let nest to export
routes to them until later.

7 days agoTools: Stable branch manager configuration
Maria Matejka [Fri, 12 Jun 2026 08:48:58 +0000 (10:48 +0200)] 
Tools: Stable branch manager configuration

For managing such a tree of stable branches, one needs to keep track of
what is in which branch. This configuration file stores the needed
context for the stable-branch GUI to display things properly.

Target: minor

9 days agoFix null byte handling in authentication keys
Igor Putovny [Mon, 1 Jun 2026 15:16:07 +0000 (17:16 +0200)] 
Fix null byte handling in authentication keys

Password / key can be either null-terminated string or bytestring, which
is not null-terminated. This could cause strncpy() to read beyond the
allocated memory.

Moreover, if the password was a bytestring which contained null byte, strncpy()
would not copy data that follows after this byte. This had two effects:

1. When using cryptographic authentication using other algorithms than HMAC,
verification of passwords that differ after null byte would succeed.

2. When using simple password authentication, verification of passwords
that differ after null byte would also succeed.

Add memcpy0() to copy data and pad them with zeroes and use it instead
of strncpy() for key manipulation during authentication.

Edited-By: Ondrej Zajicek <santiago@crfreenet.org>
11 days agoPackaging: Allow re-packaging if needed
Maria Matejka [Tue, 7 Apr 2026 08:35:07 +0000 (10:35 +0200)] 
Packaging: Allow re-packaging if needed

11 days agoFilters: Fix path matching when AS path is too long.
Maria Matejka [Tue, 2 Jun 2026 14:46:14 +0000 (16:46 +0200)] 
Filters: Fix path matching when AS path is too long.

When the supplied AS path was way too long (over 2048 items) and the
match operator was applied, the temporary structure growed out of stack.
Fixed by dynamically allocating from tmp linpool.

If somebody had extended messages on with eBGP and also happened to do
path matching without dropping too long paths beforehand, this may have
caused remote code execution. CVE allegedly pending.

Found by various LLMs.

Target: patch
Issue: #432

11 days agoOSPF: Fix handling of LLS data length field
Ondrej Zajicek [Sun, 7 Jun 2026 20:00:22 +0000 (22:00 +0200)] 
OSPF: Fix handling of LLS data length field

The LLS data length is in 32-bit words, not bytes. Also, minimal valid
length should be checked. BIRD does not process LLS data field, but it
must be skipped properly when OSPFv3 authentication is verified.

Also, the old code could lead to crash due to unaligned access when
processing OSPFv3 packets with LLS headers.

11 days agoOSPF: Fix OOB read in authentication check
Ondrej Zajicek [Sun, 7 Jun 2026 19:42:07 +0000 (21:42 +0200)] 
OSPF: Fix OOB read in authentication check

The missing check in ospf_pkt_checkauth3() may lead to OOB read (from rx
buffer) in OSPFv3 authentication check for malformed incoming packets.
The type-specific option field is accessed before per-type length checks
have been executed.

12 days agoOSPF: Fix OOB read in Router-LSA validation
Ondrej Zajicek [Sat, 6 Jun 2026 16:04:03 +0000 (18:04 +0200)] 
OSPF: Fix OOB read in Router-LSA validation

The missing check in lsa_validate_rt2() may lead to OOB read in OSPFv2
Router-LSA validation for malformed Router-LSAs. The OSPFv3 case is in
fact safe, but the patch improves these checks in uniform way.

Reported-By: TristanInSec@gmail.com
13 days agoFix several issues in Flowspec handling
Ondrej Zajicek [Fri, 5 Jun 2026 13:48:46 +0000 (15:48 +0200)] 
Fix several issues in Flowspec handling

The patch fixes several issues in Flowspec handling, namely:

 - Out-of-bounds read during flowspec validation
 - Rejection of NLRI for anomalies that MUST be ignored
 - Incorrect check of operand lengths
 - Broken label component construction
 - Broken formatting of IPv6 prefixes with specific offsets

The first issue was reported by multiple people in recent time.

The second issue found by Bronson Yen of Calif.io in collaboration
with Claude and Anthropic Research.

3 weeks agoNetlink: Skip stats in interface dumps
Asbjørn Sloth Tønnesen [Wed, 27 May 2026 04:20:33 +0000 (06:20 +0200)] 
Netlink: Skip stats in interface dumps

Gathering interface statistics can be a relatively expensive operation
on certain systems as it requires iterating over all the cpus.

This patch instructs the kernel to omit device statistics,
when scanning devices, as the statistics aren't used by BIRD.

Kernel-side support for this was added in Linux v4.4 in commit
d5566fd72ec1 ("rtnetlink: RTEXT_FILTER_SKIP_STATS support to avoid
dumping inet/inet6 stats"), this saves 368 bytes of statistics.

In the Linux v6.19 commit 105bae321862 ("rtnetlink: honor
RTEXT_FILTER_SKIP_STATS in IFLA_STATS"), it is expanded to skip more
statistics bringing the savings to 800 bytes per device.

Edited-By: Ondrej Zajicek <santiago@crfreenet.org>
3 weeks agoNetlink: Enable and decode extended acknowledgements
Ondrej Zajicek [Wed, 27 May 2026 04:07:04 +0000 (06:07 +0200)] 
Netlink: Enable and decode extended acknowledgements

This patch adds support for extended acknowledgements. While
there are more attributes, this patch only adds support for the
extended error message, and uses it to augment the return code.

We don't check the return value of setsockopt(), as any message with
extended acknowledgements will have NLM_F_ACK_TLVS set in nlmsg_flags.

NETLINK_EXT_ACK / NLM_F_ACK_TLVS / NLMSGERR_ATTR_MSG was all added in
Linux v4.12 commit 2d4bc93368f5 ("netlink: extended ACK reporting"), so
AFAICT theres no need to add them to netlink-sys.h

Based on the patch from Asbjørn Sloth Tønnesen <ast@2e8.dk>, thanks!

3 weeks agoNetlink: Skip request payload in acknowledgements
Asbjørn Sloth Tønnesen [Thu, 21 May 2026 12:43:35 +0000 (14:43 +0200)] 
Netlink: Skip request payload in acknowledgements

Set NETLINK_CAP_ACK, as we don't need a full copy of the request
payload, so it's "rather wasteful"[1] to not set NETLINK_CAP_ACK.

We don't check the return value of setsockopt(), as any capped
message will have NLM_F_CAPPED set in nlmsg_flags.

NETLINK_CAP_ACK was introduced in Linux v4.3 commit 0a6a3a23ea6e
("netlink: add NETLINK_CAP_ACK socket option"), and so AFAICT it
doesn't need to be added to netlink-sys.h.

[1] https://docs.kernel.org/userspace-api/netlink/intro.html

3 weeks agoNetlink: Enable strict checking on nl_req
Asbjørn Sloth Tønnesen [Thu, 21 May 2026 12:38:26 +0000 (14:38 +0200)] 
Netlink: Enable strict checking on nl_req

Enable strict checking of netlink messages on the nl_req connection,
so it is enabled on both connections.

Also rename the function to remove "_dump" suffix, as it's a generic
option.

Strict checking was originally called NETLINK_DUMP_STRICT_CHK,
but was renamed to NETLINK_GET_STRICT_CHK, as it should apply to
all calls, not only dumps (Linux commmit d3e8869ec826).

When set on nl_req, we don't need to check the return code, as it will
fail on nl_scan as well, and so one log message should be enough and
unlike nl_scan, we don't need to alter the mode of operation.

3 weeks agoNEWS and version update v2.19.0
Maria Matejka [Mon, 25 May 2026 09:23:20 +0000 (11:23 +0200)] 
NEWS and version update

4 weeks agoDocs: Fix BMP note
Ondrej Zajicek [Sat, 16 May 2026 05:30:43 +0000 (07:30 +0200)] 
Docs: Fix BMP note

We already compile it by default.

4 weeks agoDoc: Basic documentation for Bridge protocol
Ondrej Zajicek [Sat, 16 May 2026 05:22:12 +0000 (07:22 +0200)] 
Doc: Basic documentation for Bridge protocol

4 weeks agoDoc: Basic documentation for EVPN protocol
Ondrej Zajicek [Sat, 16 May 2026 03:51:25 +0000 (05:51 +0200)] 
Doc: Basic documentation for EVPN protocol

4 weeks agoDoc: Ethernet and EVPN support
Ondrej Zajicek [Fri, 15 May 2026 16:06:37 +0000 (18:06 +0200)] 
Doc: Ethernet and EVPN support

Document ethernet and EVPN nettypes and associated BGP channels and
attributes.

4 weeks agoDoc: Add ASPA nettype
David Petera [Tue, 3 Mar 2026 15:14:33 +0000 (16:14 +0100)] 
Doc: Add ASPA nettype

Edited-By: Ondrej Zajicek <santiago@crfreenet.org>
4 weeks agoFilter: Add access function for ASN for NET_ASPA
Igor Putovny [Tue, 24 Mar 2026 17:29:08 +0000 (18:29 +0100)] 
Filter: Add access function for ASN for NET_ASPA

Fixes: #369
4 weeks agoCI: Add basic EVPN tests
Maria Matejka [Sat, 16 May 2026 15:11:16 +0000 (17:11 +0200)] 
CI: Add basic EVPN tests

4 weeks agoEVPN: BGP/MPLS Ethernet VPNs using VXLAN tunnels - preliminary support
Ondrej Zajicek [Mon, 6 Nov 2023 02:38:40 +0000 (03:38 +0100)] 
EVPN: BGP/MPLS Ethernet VPNs using VXLAN tunnels - preliminary support

The EVPN protocol implements RFC 7432 BGP Etherent VPNs using VXLAN overlays.
It works similarly to L3VPN. It connects ethernet table (one per VRF) with
(global) EVPN table. Routes passed from EVPN table to ethernet table are
stripped of RD and filtered by import targets, routes passed in the other
direction are extended with RD, MPLS/VNI labels, and export targets in
extended communities.

When VLANs are configured in EVPN protocol, vlan requests are sent to
Bridge protocol, who configures these VLANs on VXLAN interface in kernel.

Minor contributions by Igor Putovny

Thanks to Pim van Pelt and Tomáš Matuš for comments and patches!

4 weeks agoBridge: Linux bridge interface - preliminary support
Ondrej Zajicek [Mon, 30 Oct 2023 00:50:14 +0000 (01:50 +0100)] 
Bridge: Linux bridge interface - preliminary support

The Bridge protocol synchronizes BIRD eth table with Linux kernel bridge
forwarding table. It works analogously to the Kernel protocol, but for
ethernet FDB entries instead of IP routes. The instance of Bridge
protocol is associated with the specific Linux bridge device.

The Bridge protocol handles not only bridge forwarding entries, but also
VXLAN forwarding entries, as Linux kernel VXLAN tunnel device manages its
own forwarding table, with IPs of remote endpoints.

Note that we use ethernet route next_hop to store VXLAN forwarding
address, instead of dedicated route attribute. That is preliminary and
will change in the future.

The Bridge protocol uses netlink to scan VLANs on associated interfaces,
listens to vlan requests from other protocols (EVPN), keeps state of
both desired and actual state of VLANs, and configure VLANs on managed
interfaces according to received requests.

5 weeks agoRefactoring: use designated initializers in resclass initialization
Igor Putovny [Thu, 5 Mar 2026 18:24:16 +0000 (19:24 +0100)] 
Refactoring: use designated initializers in resclass initialization

This is a preparatory update to have easier development later,
as we expect to rework resource freeing significantly.

Issue: #373

5 weeks agoNest: Pub/sub queue for VLAN requests
Ondrej Zajicek [Tue, 16 Sep 2025 14:08:36 +0000 (16:08 +0200)] 
Nest: Pub/sub queue for VLAN requests

Publishers (EVPN protos) can send requests for VLANs, subscribers
(Bridge protos) will process them.

5 weeks agoLib: Publish/subscribe queues
Ondrej Zajicek [Tue, 16 Sep 2025 13:34:44 +0000 (15:34 +0200)] 
Lib: Publish/subscribe queues

Implement a publish/subscribe messaging system with dynamic topic
management and resource tracking. The system allows multiple publishers
to send messages to named topics, which are then distributed to all
subscribers of those topics. Publishers and subscribers are managed as
resources and and automatically cleaned up when destroyed.

5 weeks agoNetlink: Add parsing of bridge and VXLAN interface attributes
Igor Putovny [Tue, 5 Aug 2025 16:20:12 +0000 (18:20 +0200)] 
Netlink: Add parsing of bridge and VXLAN interface attributes

Thanks to Tomáš Matuš for bugfix!

5 weeks agoNest: Add attributes to interface structures
Igor Putovny [Tue, 29 Jul 2025 13:28:17 +0000 (15:28 +0200)] 
Nest: Add attributes to interface structures

5 weeks agoBGP: PMSI tunnel attribute support
Ondrej Zajicek [Tue, 12 May 2026 16:31:11 +0000 (18:31 +0200)] 
BGP: PMSI tunnel attribute support

Add support for BGP PMSI tunnel attribute (RFC 6514), specifically
ingress replication type. This is required for EVPN IMET routes.

5 weeks agoBGP: EVPN NLRI - preliminary support
Ondrej Zajicek [Mon, 29 May 2023 03:37:26 +0000 (05:37 +0200)] 
BGP: EVPN NLRI - preliminary support

Add basic support for EVPN NLRI in BGP (RFC 7432). Route types 1-4
(E-AD, MAC, IMET, ES) are supported as well as routes of unknown type.

MPLS labels are decoded as VNIs in style of RFC 8365, but stored using
existing BIRD MPLS attributes.

Note that ethernet segment ID on MAC route type is currently ignored.

Thanks to Pim van Pelt and Tomáš Matuš for comments and patches!

5 weeks agoFilter: Ethernet and EVPN support
Ondrej Zajicek [Thu, 25 Jan 2024 17:39:40 +0000 (18:39 +0100)] 
Filter: Ethernet and EVPN support

Add mac filter type (for mac_addr) and various accessors for ethernet
and EVPN net types (mac, vlan_id, evpn_type, evpn_tag, evpn_esi mac, rd,
ip, router_ip).

5 weeks agoNest: Ethernet net type
Ondrej Zajicek [Wed, 25 Oct 2023 17:16:40 +0000 (19:16 +0200)] 
Nest: Ethernet net type

Add ethernet net type and operations, config grammar and static protocol
support. Ethernet net type may include VLAN ID.

5 weeks agoNest: EVPN net type
Ondrej Zajicek [Mon, 29 May 2023 03:36:40 +0000 (05:36 +0200)] 
Nest: EVPN net type

Add EVPN network type and its operations, config grammar and basic
support for mac_addr type representing MAC address.

5 weeks agoCI: Enabling build for Fedora 44, disabling 32
Maria Matejka [Tue, 12 May 2026 21:32:42 +0000 (23:32 +0200)] 
CI: Enabling build for Fedora 44, disabling 32

... to keep latest 12 versions

5 weeks agoCI: Enabling build for Ubuntu 26.04
Maria Matejka [Tue, 12 May 2026 21:31:06 +0000 (23:31 +0200)] 
CI: Enabling build for Ubuntu 26.04

5 weeks agoCI: Disable Ubuntu 22.04 crossbuild for riscv64
Maria Matejka [Tue, 12 May 2026 21:28:32 +0000 (23:28 +0200)] 
CI: Disable Ubuntu 22.04 crossbuild for riscv64

It needs to link libatomic.so.1 which isn't present for unknown
reasons and we don't have time to diagnose that.

5 weeks agoCI: Automatically retry failed unit test with verbose option
Maria Matejka [Tue, 12 May 2026 21:02:04 +0000 (23:02 +0200)] 
CI: Automatically retry failed unit test with verbose option

To spare time, we want to get more data immediately from failed tests.

5 weeks agoNest: Add EC_SET_WALK()
Igor Putovny [Mon, 7 Jul 2025 14:07:52 +0000 (16:07 +0200)] 
Nest: Add EC_SET_WALK()

5 weeks agoLib: Add common macros for undefined integer values in config
Ondrej Zajicek [Thu, 25 Sep 2025 15:06:50 +0000 (17:06 +0200)] 
Lib: Add common macros for undefined integer values in config

5 weeks agoLib: Extend bsnprintf() for byte strings
Ondrej Zajicek [Mon, 29 May 2023 03:25:40 +0000 (05:25 +0200)] 
Lib: Extend bsnprintf() for byte strings

Add support for %Xb directive to print fixed-length byte strings,
formatted as hexadecimal sequences separated by colon.

5 weeks agoFix brandom() to return u32 312-brandom
Maria Matejka [Tue, 12 May 2026 12:54:06 +0000 (14:54 +0200)] 
Fix brandom() to return u32

I missed that random() returns only positive results (31 bits), while
jrand() returns 32 bits but half negative. Rectifying that to return
always unsigned 32 bits.

Reported-By: Ondrej Zajicek <santiago@crfreenet.org>
Issue: #312

5 weeks agoReplace random() with jrand48()
Igor Putovny [Tue, 3 Mar 2026 19:49:21 +0000 (20:49 +0100)] 
Replace random() with jrand48()

In BIRD 3, every random() call locks. Converting these to jrand48()
with thread-local context buffers. The change starts in BIRD 2
though, to keep the code aligned better.

Edited-By: Maria Matejka <mq@jmq.cz>
Issue: #312

6 weeks agoOSPF: Fix infinite loop in OSPF Graceful Restart
Ondrej Zajicek [Mon, 4 May 2026 23:15:32 +0000 (01:15 +0200)] 
OSPF: Fix infinite loop in OSPF Graceful Restart

The loop tests 'j' but increments 'i', so 'j' never changes
and the loop never terminates.

6 weeks agoBMP: Fix off-by-one buffer overflow
Ondrej Zajicek [Mon, 4 May 2026 23:03:11 +0000 (01:03 +0200)] 
BMP: Fix off-by-one buffer overflow

Config validation checks string length, buffers for system
name/description should have one more byte for null termination.

Thanks to lzx0xf1 for the bugreport.

8 weeks agoNest: Add message when attempting to reload protocol that is not UP
Igor Putovny [Tue, 24 Mar 2026 17:42:56 +0000 (18:42 +0100)] 
Nest: Add message when attempting to reload protocol that is not UP

Fixes: #36
8 weeks agoFilter: Fix typos
Igor Putovny [Wed, 22 Apr 2026 15:24:12 +0000 (17:24 +0200)] 
Filter: Fix typos

8 weeks agoFilter: Add tests for clists of ints and quads
Igor Putovny [Wed, 22 Apr 2026 15:16:12 +0000 (17:16 +0200)] 
Filter: Add tests for clists of ints and quads

8 weeks agoFilter: Add missing operations for clists of ints
Igor Putovny [Wed, 22 Apr 2026 14:49:05 +0000 (16:49 +0200)] 
Filter: Add missing operations for clists of ints

Despite that clist can be used with ints as its values, some operations
(specifically matching and ones with set arguments) were not properly
implemented.

2 months agoBMP: Build by default, it is no longer experimental.
Maria Matejka [Fri, 2 Jan 2026 19:22:29 +0000 (20:22 +0100)] 
BMP: Build by default, it is no longer experimental.

2 months agoRelease: Tag script with all checks
Maria Matejka [Thu, 11 Dec 2025 10:07:52 +0000 (11:07 +0100)] 
Release: Tag script with all checks

This commit also allows running from a different repository, so that we
can test the release process without mingling with the public one.

2 months agoCI: Build packages on release commits always
Maria Matejka [Wed, 1 Apr 2026 20:46:45 +0000 (22:46 +0200)] 
CI: Build packages on release commits always

We need to check whether everything works correctly before actually
pushing to stable branches.

2 months agoCI: Disable unstable OpenBSD 7.5 build
Maria Matejka [Wed, 1 Apr 2026 20:28:40 +0000 (22:28 +0200)] 
CI: Disable unstable OpenBSD 7.5 build

For whatever reason, the builder is unstable. We'll investigate this later.

Issue: #388

2 months agoLog: Set a reasonable lower bound for the log file size limit
Maria Matejka [Thu, 19 Mar 2026 11:01:15 +0000 (12:01 +0100)] 
Log: Set a reasonable lower bound for the log file size limit

The log rotation needs a minimal file size. The 16 kB limit imposed
by this commit effectively allows about 150 lines to fit into one file,
and by that all the accompanying log messages (e.g. with debug latency)
fit into there and don't cause another rotation.

Issue: #370

2 months agoCI: Fix corefile download from Netlab
Maria Matejka [Fri, 27 Mar 2026 11:01:48 +0000 (12:01 +0100)] 
CI: Fix corefile download from Netlab

2 months agoCI: Ignore THP disable warning for crossbuilds
Maria Matejka [Fri, 27 Mar 2026 10:40:08 +0000 (11:40 +0100)] 
CI: Ignore THP disable warning for crossbuilds

Crossbuilds are run in qemu-user which doesn't support
disabling transparent huge pages.

2 months agoCI: Build both userdoc and progdoc in the release
Maria Matejka [Wed, 25 Mar 2026 14:08:22 +0000 (15:08 +0100)] 
CI: Build both userdoc and progdoc in the release

2 months agoDoc: Programmer documentation formatting for new website
Maria Matejka [Tue, 27 Jan 2026 10:28:25 +0000 (11:28 +0100)] 
Doc: Programmer documentation formatting for new website

2 months agoDoc: Ignore date and documentid
Maria Matejka [Sat, 3 Jan 2026 21:19:36 +0000 (22:19 +0100)] 
Doc: Ignore date and documentid

Introduced by reproducible builds.

2 months agoCI: Crossbuilds for Debian and Ubuntu inside our docker machinery
Maria Matejka [Tue, 24 Mar 2026 11:38:32 +0000 (12:38 +0100)] 
CI: Crossbuilds for Debian and Ubuntu inside our docker machinery

Several architecture variants are failing for obscure reasons.
Disabled for now, will check later.

2 months agoCI: Templated gitlab dockerfiles
Maria Matejka [Mon, 23 Mar 2026 22:08:12 +0000 (23:08 +0100)] 
CI: Templated gitlab dockerfiles

This allows to add new distributions and mass-modify build environments
at a single place if any such need occurs. Also there is less risk that
some file is omitted if modifying multiple places in the same way.

There is also a check re-generating the templates in the CI and failing
immediately if they are not up-to-date.

2 months agoCI: Refactored gitlab files to one directory
Maria Matejka [Mon, 23 Mar 2026 21:30:22 +0000 (22:30 +0100)] 
CI: Refactored gitlab files to one directory

Now the gitlab dockerfiles are inside the gitlab directory and it's
outside misc/ as it never actually belonged to misc.

2 months agoCI: Pipeline consistency checker
Maria Matejka [Mon, 23 Mar 2026 14:43:40 +0000 (15:43 +0100)] 
CI: Pipeline consistency checker

Tries to re-generate the pipeline specification and fails if it would
have done any changes.

2 months agoCI: Display pipeline name based on its source
Maria Matejka [Mon, 23 Mar 2026 14:43:02 +0000 (15:43 +0100)] 
CI: Display pipeline name based on its source

2 months agoCI: Refactoring of pipeline job rules
Maria Matejka [Sun, 22 Mar 2026 01:54:36 +0000 (02:54 +0100)] 
CI: Refactoring of pipeline job rules

Implemented:

- manual and scheduled pipeline run support
- inputs to explicitly choose which job categories to run
- docker rebuild only manually
- no packaging for development branches

2 months agoCI: Split the makefile out, add documentation
Maria Matejka [Sat, 21 Mar 2026 19:53:12 +0000 (20:53 +0100)] 
CI: Split the makefile out, add documentation

2 months agoDEB: Enable local crossbuild
Maria Matejka [Sat, 27 Dec 2025 17:53:44 +0000 (18:53 +0100)] 
DEB: Enable local crossbuild

Running everything inside the pbuilder is slower than needed
and the packages build well even without the fully contained
environment.

3 months agoASPA: Document our aspa_check() implementation.
Maria Matejka [Sun, 15 Mar 2026 17:39:28 +0000 (18:39 +0100)] 
ASPA: Document our aspa_check() implementation.

There are certain design choices behind the implementation,
and as the ASPA algorithm is quite complex even in the specification,
we should add some explanation here.

Our approach is not directly following the specification, as checking
the authorized() function specified in the draft is performance-heavy.

Also, there are some more future plans with this, and they deserve
documenting as well.

3 months agoCI: Disabling simple ASPA tests in Netlab
Maria Matejka [Sun, 15 Mar 2026 14:47:35 +0000 (15:47 +0100)] 
CI: Disabling simple ASPA tests in Netlab

These tests are better done in filter/test.conf as a unit test.

3 months agoASPA: Fix downstream check for two-point apex
Maria Matejka [Sat, 14 Mar 2026 20:57:46 +0000 (21:57 +0100)] 
ASPA: Fix downstream check for two-point apex

The ASPA algorithm is quite complex if one wants to execute it fast.
Most notably, the performance-critical part is looking up the ASPA
records, and we are trying to reduce that to minimum.

Yet, in that effort, we missed the fact that in the downstream
algorithm, the down-ramp and up-ramp may touch, i.e. their top ends
have a lateral peering.

The original idea was to find the point where the down-ramp is
impossible to be extended, and from there on, the algorithm is basically
just the upstream algorithm. But it isn't, most notably with the lateral
peering scenario it is much more complex than this.

This issue was discovered by several people, and got a fix submitted by
Evann DREUMONT. That fix was correct but replaced the algorithm too
deeply. We don't want to do such large changes (including semantics)
inside the stable versions, and we have some more plans with all of this
considering performance, as soon as more ASPA records emerge.

This patch therefore simply removes the force_upstream shortcut from
where the down ramp is terminated, fixes the downstream code so that
it works without that shortcut, and explicitly allows the two-apex
downstream scenario.

Original-By: Evann DREUMONT <evann@grifon.fr>
3 months agoASPA: Finish official test case coverage
Evann DREUMONT [Sat, 7 Feb 2026 22:59:12 +0000 (23:59 +0100)] 
ASPA: Finish official test case coverage

This commit implements missing test cases based on the official ASPA
path verification examples to expand coverage.

Also, one of the custom test was incorrect, because while there is no valid
ASPA this could be seen, from a downstream perspective, as peering.

This commit was originally a complete fix of the ASPA verification.
Reduced significantly by committer.

3 months agoFilter: Document and extend ASPA verification tests
Maria Matejka [Sat, 14 Mar 2026 17:42:03 +0000 (18:42 +0100)] 
Filter: Document and extend ASPA verification tests

These extensions minimalistically replicate the downstream bug reported
by Evann DREUMONT. (See next commit.)

Issue: #355

3 months agoCI: Always checkout master of bird-tools for netlab mq-fix-bird-tools-netlab
Maria Matejka [Sat, 14 Mar 2026 21:18:10 +0000 (22:18 +0100)] 
CI: Always checkout master of bird-tools for netlab

3 months agoBGP: Automatic peering based on discovered neighbors dynamic-nbrs-2
Ondrej Zajicek [Tue, 24 Feb 2026 22:15:06 +0000 (23:15 +0100)] 
BGP: Automatic peering based on discovered neighbors

Extend existing dynamic BGP code to support spawning of active BGP
instances for discovered neighbors.

The existence of such dynamic BGP instances is controlled by exporting
information from a table containing neighbor entries through a newly
introduced neighbor channel. This means that the feature will only work
if there is another protocol responsible for discovering and announcing
neighbor entries (e.g. RAdv with 'router discovery' enabled).

Based on the patch from Matteo Perin <matteo.perin@canonical.com>, thanks!

3 months agoRAdv: Router discovery based on incoming Router Advertisments
Matteo Perin [Tue, 24 Feb 2026 22:15:06 +0000 (23:15 +0100)] 
RAdv: Router discovery based on incoming Router Advertisments

Up until this point no much use has been make of incoming RAs, this commit
tries to amend that by announcing peer-based routes to a new peer channel.
This will allow to use the information discovered about remote routers
by other protocols.

RA staleness has also been taken into consideration and the routes are
withdrawn whenever the advertised router lifetime expires.

The feature is meant to be enabled via a new configuration option in
the RAdv protocol called router discovery [yes/no].

Minor changes by committer.

3 months agoNest: Add net_addr_nbr route type to track discovered neighbors
Matteo Perin [Tue, 24 Feb 2026 22:15:06 +0000 (23:15 +0100)] 
Nest: Add net_addr_nbr route type to track discovered neighbors

The definition and helper functions for a new route-like object to track
peer discovery data has been added. It only contains the (v4 or v6)
neighbor address and the ingress iface index, for now.

The main intent of this is, currently, to enable BGP unnumbered auto
peer discovery via RAdv incoming advertisments, but in the future the
same data structure could be used to allow discovery coming from
different protocols.

Minor changes by committer.

3 months agoNest: Improve reconfiguration of dynamic BGP
Ondrej Zajicek [Thu, 26 Feb 2026 14:29:40 +0000 (15:29 +0100)] 
Nest: Improve reconfiguration of dynamic BGP

During reconfiguration, first add all existing dynamic protocols to the
new BGP config to ensure that there is already full set of protocols
when reconfiguration hooks for individual protocols are called.

Also, bgp_spawn() should not be called when parent BGP is not yet
configured, otherwise we would end with an old proto_config linked
from the new configuration.

3 months agoBGP: Refactor bgp_spawn()
Ondrej Zajicek [Tue, 24 Feb 2026 22:15:06 +0000 (23:15 +0100)] 
BGP: Refactor bgp_spawn()

4 months agoFilter: Fix definition after label
Ondrej Zajicek [Tue, 10 Feb 2026 03:12:22 +0000 (04:12 +0100)] 
Filter: Fix definition after label

4 months agoFilter: Fix string ordering
Ondrej Zajicek [Tue, 10 Feb 2026 02:41:59 +0000 (03:41 +0100)] 
Filter: Fix string ordering

Function strcmp() returns negative / 0 / positive, but val_compare()
is expected to return -1 / 0 / 1.

4 months agoLib: Fix mem_hash_mix_str() infinite loop/OOB read
Joshua Rogers [Tue, 10 Feb 2026 00:16:51 +0000 (01:16 +0100)] 
Lib: Fix mem_hash_mix_str() infinite loop/OOB read

4 months agoNetlink: Fix handling of RTAX_CC_ALGO netlink attribute
Joshua Rogers [Tue, 10 Feb 2026 00:10:28 +0000 (01:10 +0100)] 
Netlink: Fix handling of RTAX_CC_ALGO netlink attribute

The kernel-provided congestion control algorithm (RTAX_CC_ALGO) is stored in
an EAF_TYPE_STRING adata blob without the terminating NULL. When exporting
metrics back to netlink, the value is treated as a C string and passed to
nl_add_attr_str(), which uses strlen(str)+1. This may read past the allocated
adata and leak adjacent memory or crash.

Minor change by committer.

5 months agoNEWS and version update v2.18
Maria Matejka [Fri, 26 Dec 2025 13:41:15 +0000 (14:41 +0100)] 
NEWS and version update

5 months agoCI: Packaging cleanup
Maria Matejka [Thu, 25 Dec 2025 17:19:48 +0000 (18:19 +0100)] 
CI: Packaging cleanup

With the removal of APKG, we don't need to split out "-legacy" DEB with
old python, and "-wa" RPM with an obscure sed applied to specfile which
never actually did anything since added in 2021.

5 months agoCI: No more APKG in packaging
Maria Matejka [Sat, 6 Dec 2025 21:43:54 +0000 (22:43 +0100)] 
CI: No more APKG in packaging

We have had minor and subtle but repeating problems with the APKG
dependency chain and its overall usability. It has become apparent
that we actually don't need that kind of abstraction layer because
all our problems are actually solvable by just a bunch of short scripts.

With that, we are now using the (standard) dpkg-buildpackage and
rpmbuild tools directly from bash script.

From now on, with just several exceptions, all our distribution builds
should be fully reproducible.

5 months agoSource package and documentation builds are now reproducible
Maria Matejka [Mon, 22 Dec 2025 21:55:22 +0000 (22:55 +0100)] 
Source package and documentation builds are now reproducible

We now explicitly set the PDF build datetime to commit datetime, and we
also clean all the file metadata in the TGZ archives, so that the
generated archives are now bit-identical.

5 months agoLib: Fix comments so that progdoc is deterministic
Maria Matejka [Mon, 22 Dec 2025 22:27:27 +0000 (23:27 +0100)] 
Lib: Fix comments so that progdoc is deterministic

For some weird reason, the old Perl code behaves non-deterministically on
@foo() and there is no clear explanation why. The snails should not be there
anyway so removing them.

5 months agoCI: Update supported distributions
Maria Matejka [Mon, 1 Dec 2025 18:33:23 +0000 (19:33 +0100)] 
CI: Update supported distributions

+ OpenSUSE 16.0 (by David Petera)
+ Oracle Linux 8, 9 and 10 (fork of RHEL)
+ Fedora 43
+ Ubuntu 25.04 and 25.10.

- Debian 10 is too oldstable.
- Ubuntu 24.10 is EOL.

5 months agoDoc: Unfix the stable release version in singlepage doc build
Maria Matejka [Wed, 24 Dec 2025 18:24:11 +0000 (19:24 +0100)] 
Doc: Unfix the stable release version in singlepage doc build

5 months agoDoc: Readme update, website is bird.nic.cz
Maria Matejka [Mon, 22 Dec 2025 12:46:53 +0000 (13:46 +0100)] 
Doc: Readme update, website is bird.nic.cz

Updating links to the old website to point to the new website, where
relevant.

Also updated other links in README and some clearly outdated texts.

5 months agoDoc: Building singlepage version with the appropriate template
Maria Matejka [Sat, 25 Jan 2025 22:01:11 +0000 (23:01 +0100)] 
Doc: Building singlepage version with the appropriate template

6 months agoMinor typos in error messages
Maria Matejka [Wed, 17 Dec 2025 13:21:55 +0000 (14:21 +0100)] 
Minor typos in error messages

Reported-By: Marco d'Itri <md@linux.it>
6 months agoConf: Check for enabled pthreads when using BFD
David Petera [Mon, 24 Nov 2025 13:39:38 +0000 (14:39 +0100)] 
Conf: Check for enabled pthreads when using BFD

BFD protocol strictly depends on pthreads being enabled,
but the compilation configuration checks do not reflect it now.

Add a check for pthreads when BFD is included in the
configured protocols.

Thank you Alexander Zubkov <green@qrator.net> for the report and patch!

Closes: #306
6 months agoRAdv: Fix flags for deprecated prefixes
Ondrej Zajicek [Thu, 27 Nov 2025 16:59:44 +0000 (17:59 +0100)] 
RAdv: Fix flags for deprecated prefixes

When a prefix is deprecated (valid_lifetime == 0), it should be
announced with the same flags as before. The old code announced it
without any flags, which leads to being ignored by recipients.

Note that a prefix could be depreacted for two reason - it is removed
from the interface, or it is deconfigured in BIRD configuration.

Thanks to Michael Saxl for the bugreport.

6 months agoTools: Release initialization script
Maria Matejka [Sat, 22 Nov 2025 22:23:28 +0000 (23:23 +0100)] 
Tools: Release initialization script

There is a bunch of things one needs to do in gitlab when releasing and
this script simply checks whether there is everything needed and fixes
what is missing,

6 months agoBMP: Fix crash when exporting a route with non-bgp attributes
Maria Matejka [Thu, 20 Nov 2025 13:35:02 +0000 (14:35 +0100)] 
BMP: Fix crash when exporting a route with non-bgp attributes

Reported-By: Annika Hannig
7 months agoCI: fix broken debian-11-i386 packaging dp-pipeline-fix
David Petera [Fri, 14 Nov 2025 13:07:38 +0000 (14:07 +0100)] 
CI: fix broken debian-11-i386 packaging

The error occured when trying to install 'markupsafe' v3.0.3 python package (dependency of 'apkg') on debian-11-i386 arch.
Fixed by preinstalling older version of 'markupsafe' package before the installation of 'apkg'.

Since the behavior is added to 'pkg-deb-legacy' it also effects packaging of ubuntu-18.04-amd64.
Also debian-11-amd64 is moved to 'pkg-deb-legacy' together with effected debian-11-i386 just for code clarity.