rustbgpd
- Withdraw p50
- 0.28–0.48 s
- Re-announce p50
- 0.46–0.49 s
A BGP route server and route reflector in Rust.
cargo install rustbgpd
Animated topology of a BGP flapstorm. A steel withdrawal wave, then a Ferris-orange re-announce flood. Withdraw p50 0.48 seconds. Re-announce 0.49 seconds. Press R or use Replay to run it again.
700 clients × 400,400 routes, same host, same harness. 50 members hard-close simultaneously; 650 survivors observe 28,600 withdrawn prefixes. The 50 reconnect and re-announce.
| Daemon | Withdraw p50 | Re-announce p50 |
|---|---|---|
| rustbgpd | 0.28–0.48 s | 0.46–0.49 s |
| BIRD 3.3.1 | 0.45–0.61 s | 2.84–4.22 s |
| OpenBGPD 9.1 | 10.8–12.4 s | 21.2–21.7 s |
The re-announce clock starts only after all 50 sessions re-reach Established, so it measures re-delivery fan-out (~18.6M NLRI), not reconnect pacing. [rustbgpd source receipt] · [BIRD 3.3.1 source receipt] · [OpenBGPD 9.1 source receipt]
700 clients × 400,400 routes, same host, same harness. SIGHUP policy reload stall and completion times.
| Daemon | Stall p50 | Stall worst | Completion p50 | Completion worst |
|---|---|---|---|---|
| rustbgpd | 0.43–0.84 s | 1.85 s | 1.5–2.2 s | 2.9 s |
| BIRD 3.3.1 | 1.61–2.29 s | 7.73 s | 77–86 s | 93.8 s |
| OpenBGPD 9.1 | 0.25–0.29 s | 0.36 s | 249–253 s | 252.9 s |
Stall = time during which no prefix is reachable (withdrawn but not yet re-announced). Completion = full table restored. [rustbgpd source receipt] · [BIRD 3.3.1 source receipt] · [OpenBGPD 9.1 source receipt]
Both green, both archived in-repo. No control daemon ran alongside them.
1,000 eBGP clients × 400,000 routes, 24 h
1,000 iBGP clients × 100,000 routes, 24 h
The receipts also include the losses.
OpenBGPD's stall p50 is 0.25–0.29 s vs rustbgpd's 0.43–0.84 s at 700 × 400,400. [source receipt]
BIRD wins settled memory outright (~400 MiB vs ~760 MiB). S2 settled memory against BIRD is a dead heat; BIRD wins S3 settled outright. [source receipt]