summaryrefslogtreecommitdiff
path: root/proto/bgp
AgeCommit message (Collapse)Author
2023-11-25Merge commit '57aa0772' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit 'ab47c2ae' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit 'd8130da8' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit '9d456d53' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit '21213be5' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit '8ad9c4bb' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit 'a0fb0eaa' into wireguard-next-tmp7-1Mikael Magnusson
2023-11-25Merge commit '6f798683a34aa87f5e4f590be4c90253a1135e08' into ↵Mikael Magnusson
wireguard-next-tmp7-1
2023-11-25Merge commit '51f2e7afaf069508685281e8c1b8bb1ceda79d8f' into ↵Mikael Magnusson
wireguard-next-tmp7-1
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-04BGP: Custom attribute definitions should use cfg_alloc(), not malloc()Ondrej Zajicek
Otherwise we would get memory leaks.
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-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-02Nest: Expand rte_src.private_id to u64Ondrej Zajicek
In general, private_id is sparse and protocols may want to map some internal values directly into it. For example, L3VPN needs to map VPN route discriminators to private_id. OTOH, u32 is enough for global_id, as these identifiers are dense.
2023-09-27BGP config: Splitting Route Refresh and Enhanced Route RefreshMaria Matejka
Both toggles are on by default but if some implementation needs one or another to be switched off separately, then it's possible now.
2023-09-20BGP: Setting and unsetting unknown attributeskaterina.kubecova
All these must be declared as bytestring. Allows operators to delete unwanted attributes breaking the Internet: https://blog.benjojo.co.uk/post/bgp-path-attributes-grave-error-handling
2023-09-12Conf: config warnings show the file positionMaria Matejka
2023-09-12Conf: Symbol manipulation gets its context explicitlyMaria Matejka
2023-08-28BGP: Tunnel Encapsulation attributeMikael Magnusson
Refer to RFC 9012, The BGP Tunnel Encapsulation Attribute.
2023-08-25Conf: Allow keywords to be redefined by user symbolsOndrej Zajicek
Most syntactic constructs in BIRD configuration (e.g. protocol options) are defined as keywords, which are distinct from symbols (user-defined names for protocols, variables, ...). That may cause backwards compatibility issue when a new feature is added, as it may collide with existing user names. We can allow keywords to be shadowed by symbols in almost all cases to avoid this issue. This replaces the previous mechanism, where shadowable symbols have to be explictly added to kw_syms.
2023-08-23Nest: Treat VRF interfaces as inside respective VRFsOndrej Zajicek
Despite not having defined 'master interface', VRF interfaces should be treated as being inside respective VRFs. They behave as a loopback for respective VRFs. Treating the VRF interface as inside the VRF allows e.g. OSPF to pick up IP addresses defined on the VRF interface. For this, we also need to tell apart VRF interfaces and regular interfaces. Extend Netlink code to parse interface type and mark VRF interfaces with IF_VRF flag. Based on the patch from Erin Shepherd, thanks!
2023-08-22Merge branch 'bmp'Ondrej Zajicek
2023-08-22BGP: Update RFC referenceOndrej Zajicek
RFC 5549 was obsoleted by RFC 8950.
2023-08-22BMP: Improve peer_down handlingOndrej Zajicek
Move all bmp_peer_down() calls to one place and make it synchronous with BGP session down, ensuring that BMP receives peer_down before route withdraws from flushing. Also refactor bmp_peer_down_() message generating code.
2023-08-18BMP: Refactor route monitoringOndrej Zajicek
- Manage BMP state through bmp_peer, bmp_stream, bmp_table structures - Use channels and rt_notify() hook for route announcements - Add support for post-policy monitoring - Send End-of-RIB even when there is no routes - Remove rte_update_in_notify() hook from import tables - Update import tables to support channels - Add bmp_hack (no feed / no flush) flag to channels
2023-08-01BMP: Simplify route monitoring hooksOndrej Zajicek
No need for *_begin(), *_commit(), and *_end() hooks. The hook *_notify() is sufficient for everything.
2023-06-08BMP: Support multiple instances of BMP protocolOndrej Zajicek
Add internal BMP functions with plicit bmp_proto *p as first argument, which allows using TRACE() macro. Keep list of BMP instances and call internal functions. Old BMP functions are wrappers that call internal functions for all enabled BMP instances. Extract End-of-RIB mark into separate function. Based on patch from Michal Zagorski <mzagorsk@akamai.com>. Thanks!
2023-05-30BGP: Improve bgp_create_update_bmp()Ondrej Zajicek
Fix issue with missing AF cap (e.g. IPv4 unicast when no capabilities are announced). Add Linpool save/restore action similar to bgp_create_update(). Based on patch from Michal Zagorski <mzagorsk@akamai.com> co-authored with Pawel Maslanka <pmaslank@akamai.com>. Thanks!
2023-05-19BGP: Fix role check when no capability option is presentOndrej Zajicek
When an OPEN message without capability options was parsed, the remote role field was not initialized with the proper (non-zero) default value, so it was interpreted as if 'provider' was announced. Thanks to Mikhail Grishin for the bugreport.
2023-05-01BMP: Use OPEN messages stored in BGPOndrej Zajicek
The BMP protocol needs OPEN messages of established BGP sessions to construct appropriate Peer Up messages. Instead of saving them internally we use OPEN messages stored in BGP instances. This allows BMP instances to be restarted or enabled later. Because of this change, we can simplify BMP data structures. No need to keep track of BGP sessions when we are not started. We have to iterate over all (established) BGP sessions when the BMP session is established. This is just a scaffolding now, but some kind of iteration would be necessary anyway. Also, the commit cleans up handling of msg/msg_length arguments to be body/body_length consistently in both rx/tx and peer_up/peer_down calls.
2023-05-01BGP: Save sent and received OPEN messagesOndrej Zajicek
These are necessary for BMP Peer UP message and it is better to keep them in BGP than in BMP (so BMP could be restarted or added later).
2023-04-27Conf: Improve handling of keywordsOndrej Zajicek
For whatever reason, parser allocated a symbol for every parsed keyword in each scope. That wasted time and memory. The effect is worsened with recent changes allowing local scopes, so keywords often promote soft scopes (with no symbols) to real scopes. Do not allocate a symbol for a keyword. Take care of keywords that could be promoted to symbols (kw_sym) and do it explicitly.
2023-04-18BMP: Allow build without BMP and disable BMP build by defaultOndrej Zajicek
It has still several important issues to be enabled by default.
2023-04-16BMP: Remove duplicate functions for update encodingOndrej Zajicek (work)
Use existing BGP functions also for BMP update encoding.
2023-04-16BMP: Minor cleanupsOndrej Zajicek (work)
Remove redundant 'disable' option, simplify IP address serialization, and remove useless macros.
2023-04-16BMP protocol supportPawel Maslanka
Initial implementation of a basic subset of the BMP (BGP Monitoring Protocol, RFC 7854) from Akamai team. Submitted for further review and improvement.
2023-04-14BGP: Add 'allow bgp_med' option for EBGP sessionsTrisha Biswas
This option allows to treat bgp_med as regular transitive attribute on EBGP sessions (without hacks in filters). Minor changes from committer.
2023-04-04BGP: Fix bgp_med handlingOndrej Zajicek
Missing translation from BGP attribute ID to eattr ID in bgp_unset_attr() broke automatic removal of bgp_med during export to EBGP peers. Thanks to Edward Sun for the bugreport.
2023-03-16BGP: Free bind applies also to outbound connectionsMaria Matejka
Even though the free bind option is primarily meant to alleviate problems with addresses assigned too late, it's also possible to use BIRD with AnyIP configuration, assigning whole ranges to the machine. Therefore free bind allows also to create an outbound connection from specific address even though such address is not assigned.
2023-02-19BGP: Update RFC referencesOndrej Zajicek
2023-01-20BGP: Add received role value to role mismatch log messageOndrej Zajicek
2023-01-03BGP: Allow role specific keywords to be used as symbolsOndrej Zajicek
Some of these new BGP role keywords use generic names that collides with user-defined symbols. Allow them to be redefined. Also remove duplicit keyword definition for 'prefer'.
2023-01-01Nest: Fix several issues with pflagsOndrej Zajicek
There were some confusion about validity and usage of pflags, which caused incorrect usage after some flags from (now removed) protocol- specific area were moved to pflags. We state that pflags: - Are secondary data used by protocol-specific hooks - Can be changed on an existing route (in contrast to copy-on-write for primary data) - Are irrelevant for propagation (not propagated when changed) - Are specific to a routing table (not propagated by pipe) The patch did these fixes: - Do not compare pflags in rte_same(), as they may keep cached values like BGP_REF_STALE, causing spurious propagation. - Initialize pflags to zero in rte_get_temp(), avoid initialization in protocol code, fixing at least two forgotten initializations (krt and one case in babel). - Improve documentation about pflags
2022-12-10BGP: Log unacceptable hold time as decimal numberOndrej Zajicek
Thanks Johannes Moos for the suggestion.
2022-12-09BGP: Improve handling of hold and keepalive timersOndrej Zajicek
The effective keepalive time now scales relative to the negotiated hold time, to maintain proportion between the keepalive time and the hold time. This avoids issues when both keepalive and hold times were configured, the hold time was negotiated to a smaller value, but the keepalive time stayed the same. Add new options 'min hold time' and 'min keepalive time', which reject session attempts with too small hold time. Improve validation of config options an their documentation. Thanks to Alexander Zubkov and Sergei Goriunov for suggestions.
2022-10-10BGP: Add option 'next hop prefer global'Ondrej Zajicek
Add BGP channel option 'next hop prefer global' that modifies BGP recursive next hop resolution to use global next hop IPv6 address instead of link-local next hop IPv6 address for immediate next hop of received routes.
2022-10-03BGP: Some fixes related to VRF and MPLS interactionsOndrej Zajicek
- When next hop is reset to local IP, we should remove BGP label stack, as it is related to original next hop - BGP next hop or immediate next hop from one VRF should not be passed to another VRF, as they are different IP namespaces
2022-10-03BGP: Do not assume that all channels are struct bgp_channelOndrej Zajicek
In principle, the channel list is a list of parent struct proto and can contain general structures of type struct channel, That is useful e.g. for adding MPLS channels to BGP.
2022-08-18Simplified the protocol hookup code in MakefilesMaria Matejka
2022-07-24Merge branch 'master' into backportOndrej Zajicek