160e28690af73423a3c9383988be88c62ad0d975
Preparing to peer with a production BIRD router turned up two problems. - packet: most Capability::from_wire arms returned the per-capability buffer (always empty by then) instead of the bytes following the capability. The list parser then saw an empty remainder and silently dropped every later capability. Any OPEN listing extended message, role, graceful restart, add-path, enhanced route refresh, LLGR, extended next hop or an unknown capability before the 4-octet ASN capability lost the ASN, so the peer appeared as AS_TRANS (23456) and a configured remote_asn was refused with Bad Peer AS. BIRD and FRR both do this. Single-capability round-trip tests could not catch it; new tests parse every capability with another following it, and a full BIRD capability list. - server: advertise MultiProtocol IPv6 unicast alongside IPv4. Without it a peer will not accept the IPv6 routes we originate via MP_REACH_NLRI. - Interop test: byte-for-byte BIRD 2 OPEN is accepted with the right ASN, and an IPv6 End-of-RIB neither drops the session nor creates a route. - docs/lab/prod: BIRD config for an announce-only ferrix neighbour (strict /48 import filter, community scrubbing, unreachable next hop, import limit, export none, passive) and the matching ferrix config. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
BGP
The bgp crate is an implementation of the Border Gateway Protocol, which is used to exchange routing and control plane information between Autonomous Systms.
The aim of this project is to provide a modern, high performance, secure and programatic and customizable software package that can be useful to network operators, researchers, and people interested in Internet.
Current status.
The project is currently being rewritten from scratch to be more modular and maintainable, as well as to fix deeper issues with the previous implementation.
⚠️ Warning: This is currently a work in progress and not ready for use.
🛣️ Roadmap to v1.0
We aim for the 1.0 release to be functional and stable to operate peering sessions, and to install routes in the Linux Kernel.
- ☐ Implement basic parsers for the fundamental types required
- ✅ Path Attributes from RFC4271
- ✅ Open message
- ✅ Capabilities from RFC4271
- ✅ Update message
- ☐ Notification message
- ✅ Implement scaffolding required to start and configure a server
- ✅ Implement connection logic to establish sessions with peers (passive and active)
- ✅ Locally originated routes with communities, announced to all peers
- ✅ HTTP API, live status page and Prometheus metrics
- ☐ Implement an efficient data structure for storing prefixes (e.g. Poptrie)
- ☐ Filtering for peer RIB in / out
- ☐ Main / auxillary RIBs for exchanging routes between peers
Languages
Rust
92.3%
Shell
4.2%
HTML
3.5%