summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-11-23Unix: debugMikael Magnusson
2023-11-23Wireguard: Initial commitMikael Magnusson
Use 51820 (default wireguard port) as default tunnel type.
2023-11-23BGP: Tunnel Encapsulation attributeMikael Magnusson
Refer to RFC 9012, The BGP Tunnel Encapsulation Attribute.
2023-11-23TunnelEncaps: Initial commitMikael Magnusson
2023-11-23Wg-user: Work-around listen_port mutex dead lockMikael Magnusson
Problem with listen_port dead lock in wireguard-go.
2023-11-23Wg-user: Add wireguard unix socket implementationMikael Magnusson
Unix socket implementation for wireguard-go. Use abstract unix sockets on Android
2023-11-23Wireguard-lib: Import wireguard libraryMikael Magnusson
Add to makefile.
2023-11-23Filter: Add literal for generic empty listMikael Magnusson
Add literal for empty set "empty", which works for clist, eclist and lclist, by using existing constant promotion mechanism.
2023-11-23Bytestring: implement bytestring literals and constantsMikael Magnusson
Implement byte string literals on the format b"xxx" and b64"xxx" which can be used as literals and in constants. The format b"xxx" supports character data and octal and hexadecimal data using C escapes (\n, \nn, \nnn, \xn and \xnn). The format b64"xxx" supports base64 encoded strings (RFC1341).
2023-11-23Unix: Implement sk_connect_unixMikael Magnusson
Support abstract socket in sk_unix_connect Implement SK_UNIX_ACTIVE
2023-11-09OSPF: On physical PtP links, skip next-hop resolvingSoha Jin
Signed-off-by: Soha Jin <soha@jin.sh> Co-developed-by: Wende Tan <twd2.me@gmail.com>
2023-10-25Nest: Minor fixes in MPLSOndrej Zajicek
2023-10-24Doc: prefix match prefix pattern definition typo (in sets of prefixes ↵Michal Rada
definition)
2023-10-24Use RTA_MAX_SIZE in rta_do_cow()Ondrej Zajicek
This allows to modify MPLS label stack in filters. Fixes a bug in handling of 'gw_mpls' attribute.
2023-10-24Autoconf: minor reduction of redundancyMaria Matejka
Joined BIRD_CHECK_GCC_OPTION and BIRD_ADD_GCC_OPTION.
2023-10-18CI: Update for new netlab workerOndrej Zajicek
- Change tag from 'birdlab' to 'netlab' - Change path of gitlab-runner home dir - Use stayrtr from Debian
2023-10-16CI: Add MPLS testsOndrej Zajicek
2023-10-16MPLS: Fix issue with recursive MPLS routesOndrej Zajicek
Recursive MPLS routes used hostentry from the original route, which triggered different table than MPLS table, and therefore were not updated.
2023-10-06NEWS and version updateOndrej Zajicek
2023-10-06Doc: Minor fixesOndrej Zajicek
2023-10-06Conf: Bytestrings with hex: should use the same general format as ones without.Ondrej Zajicek
Either hex:01234567, or hex:01:23:45:67. No confusing formats like hex:0123:4567:ab:cdef, which looks like there is an implicit zero byte.
2023-10-06KRT: Allow to learn routes with RTPROT_KERNELPavel Šorejs
The Kernel protocol, even with the option 'learn' enabled, ignores direct routes created by the OS kernel (on Linux these are routes with rtm_protocol == RTPROT_KERNEL). Implement optional behavior where both OS kernel and third-party routes are learned, it can be enabled by 'learn all' option. Minor changes by committer.
2023-10-05BGP: Improve custom BGP attributesOndrej Zajicek
- Implement EA_GET for custom BGP attributes - Forbid EA_SET on existing opaque attributes - Forbid redefining existing attributes - Document possible compatibility problems
2023-10-05MPLS: Handle compatibility with old configsOndrej Zajicek
Old configs do not define MPLS domains and may use a static protocol to define static MPLS routes. When MPLS channel is the only channel of static protocol, handle it as a main channel. Also, define implicit MPLS domain if needed and none is defined.
2023-10-05Filter: Fix scope handling in for loopsOndrej Zajicek
Changes in scope implementation broke scope handling in for loops. The term in for loops is supposed to be parsed in the parent scope.
2023-10-04Conf: Fix 'show symbols'Ondrej Zajicek
Seems like the root scope was not marked as active.
2023-10-04BGP: Custom attribute definitions should use cfg_alloc(), not malloc()Ondrej Zajicek
Otherwise we would get memory leaks.
2023-10-04Filter: explicitly forbidden for-loop with pre-defined variableMaria Matejka
2023-10-04IO: Fix race condition in event processingOndrej Zajicek
When regular event was added from work event, we did remember that regular event list was empty and therefore we did not use zero time in poll(). This leads to ~3 s latency in route reload during reconfiguration.
2023-10-04Doc: Fix syntax errors in SGMLOndrej Zajicek
2023-10-04MPLS: Update to support and use 64bit source idOndrej Zajicek
2023-10-04Doc: L3VPN documentationOndrej Zajicek
2023-10-04Doc: MPLS documentationOndrej Zajicek
2023-10-04L3VPN: Import/export target reconfigurationOndrej Zajicek
2023-10-04BGP, L3VPN: Fix MPLS channel reloadOndrej Zajicek
When a MPLS channel is reloaded, it should reload all regular MPLS-aware channels. This causes re-evaluation of routes in FEC map and possibly reannouncement of MPLS routes.
2023-10-04MPLS: Implement FEC map reconfigurationOndrej Zajicek
This allows changing label policy or label range without restart.
2023-10-04MPLS: Handle label allocation failuresOndrej Zajicek
2023-10-04L3VPN: Fix bug in reconfigurationOndrej Zajicek
Fields import_target / export_target link to config structures, must be updated during reconfiguration.
2023-10-04MPLS: Improve handling of static label allocationsOndrej Zajicek
Use mpls_new_label() / mpls_free_label() also for static labels, to keep track of allocated labels and to enforce label ranges. Static label allocations always use static label range, regardless of configured label range.
2023-10-04Static: Add syntax for static MPLS labelsOndrej Zajicek
Instead of just using route attributes, static routes with static MPLS labels can be defined just by e.g.: route 10.1.1.0/24 mpls 100 via 10.1.2.1 mpls 200;
2023-10-04MPLS: Label range non-intersection checkOndrej Zajicek
2023-10-04MPLS: Improve label range reconfigurationOndrej Zajicek
Allow to shorten label range over unused area.
2023-10-04MPLS: Add command 'show mpls ranges'Ondrej Zajicek
Add command to show MPLS label ranges and their stats.
2023-10-04Nest: Fix missing RTS_* values in filtersOndrej Zajicek
2023-10-04Lib: Extend MPLS label allocator bitmapOndrej Zajicek
Add function lmap_last_one_in_range() for finding the last active label in a label range.
2023-10-04L3VPN: BGP/MPLS VPNs using MPLS backboneOndrej Zajicek
The L3VPN protocol implements RFC 4364 BGP/MPLS VPNs using MPLS backbone. It works similarly to pipe. It connects IP table (one per VRF) with (global) VPN table. Routes passed from VPN table to IP table are stripped of RD and filtered by import targets, routes passed in the other direction are extended with RD, MPLS labels and export targets in extended communities. A separate MPLS channel is used to announce MPLS routes for the labels.
2023-10-04MPLS: Add support for per-VRF labeling policyOndrej Zajicek
The new labeling policy MPLS_POLICY_VRF assigns one label to all routes (from the same FEC map associated with one VRF), while replaces their next hops with a lookup to a VRF table. This is useful for L3VPN protocol.
2023-10-04BGP: Add MPLS supportOndrej Zajicek
When MPLS is active, received routes on MPLS-aware SAFIs (ipvX-mpls, vpnX-mpls) are automatically labeled according to active label policy and corresponding MPLS routes are automatically generated. Also routes sent on MPLS-aware SAFIs announce local labels when it should be done.
2023-10-04Static: Add MPLS supportOndrej Zajicek
When MPLS is active, static IP/VPN routes are automatically labeled according to active label policy and corresponding MPLS routes are automatically generated.
2023-10-04MPLS subsystemOndrej Zajicek
The MPLS subsystem manages MPLS labels and handles their allocation to MPLS-aware routing protocols. These labels are then attached to IP or VPN routes representing label switched paths -- LSPs. There was already a preliminary MPLS support consisting of MPLS label net_addr, MPLS routing tables with static MPLS routes, remote labels in next hops, and kernel protocol support. This patch adds the MPLS domain as a basic structure representing local label space with dynamic label allocator and configurable label ranges. To represent LSPs, allocated local labels can be attached as route attributes to IP or VPN routes with local labels as attributes. There are several steps for handling LSP routes in routing protocols -- deciding to which forwarding equivalence class (FEC) the LSP route belongs, allocating labels for new FECs, announcing MPLS routes for new FECs, attaching labels to LSP routes. The FEC map structure implements basic code for managing FECs in routing protocols, therefore existing protocols can be made MPLS-aware by adding FEC map and delegating most work related to local label management to it.