af76ecb34522b53424a756bce737fea689d50d6f
Against a production BIRD router, restarting ferrix was followed by several refused connection attempts before the session came back. - The daemon had no signal handling: Ctrl-C killed the process and the peer only ever saw a dead TCP connection. On SIGINT or SIGTERM it now sends Cease / Administrative Shutdown (RFC 4486) to every established peer, waits up to two seconds for the sessions to close, and stops the dialers from reconnecting meanwhile. A NOTIFICATION queued for a session ends that session once sent. - ROUTE-REFRESH was parsed and ignored. A peer sends it when its import policy changes (e.g. after `birdc configure`), expecting our routes again so the new policy can be applied. The session now reports the request and the advertiser re-sends every local route to that peer. The request also appears in the event stream and the status page log. Tests: a refresh request in real wire format re-sends all routes and keeps the session up; shutdown delivers the Cease to every peer and closes the sessions. Verified with the real binary: SIGINT, peer logs the Cease. 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%