The work of the speaker-cleanup branch as one commit; the branch keeps the step-by-step history. Sessions - The state machine is a pure function from events to actions, driven by one task per connection. Idle, Connect and Active belong to a dialer that keeps configured peers up with backoff. - Capabilities are negotiated: address families, four-octet AS numbers with AS_TRANS and AS4_PATH, route refresh, ADD-PATH per family and direction. - Collision detection per RFC 4271 section 6.8, by address and identifier. - Connections are taken only from configured peers, a few per address. - A panic in a session is contained and answered with a Cease; a core task that stops shuts the server down with a Cease to every peer. - Writes that make no progress are given up (RFC 9687). Codec - Malformed UPDATEs are handled as RFC 7606 says: treat-as-withdraw, attribute discard, or session reset, with the NOTIFICATION to send. - Address families are open types; any can be named and ignored. - Prefixes are fixed-size values, normalised, with path identifiers. - Lengths are filled in after writing; one definition of each type code. - Property tests and fuzz targets for every decoder. Routing table - Adj-RIBs-In and Loc-RIB in one sharded table that sessions write to directly. Routes are sixteen bytes; attribute sets are interned in wire form. Best-path selection per RFC 4271 section 9.1.2.2 with deterministic MED. - A journal per shard lets followers read changes at their own pace; one that falls behind is resynchronised. - On a RIPE RIS dump of 148 peers and 39.3M routes: loaded in 2.0 s on 12 cores, about 52 bytes a route. Announcing - Originated routes come from the configuration. Each session has its own exporter with an Adj-RIB-Out, so a slow peer delays only itself. - Routes to a peer in our own AS have an empty path and a LOCAL_PREF. Operations - HTTP status page, JSON API, event stream and Prometheus metrics. - Benchmarks on synthetic and real tables. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
19 lines
712 B
Markdown
19 lines
712 B
Markdown
# Table dumps for the benchmarks
|
|
|
|
`cargo bench -p bgp-bench --bench real_table` runs on a real routing table:
|
|
a dump of every route that the peers of a route collector had announced to
|
|
it. The dumps are large and are not checked in. Fetch one into this
|
|
directory:
|
|
|
|
```bash
|
|
curl -O https://data.ris.ripe.net/rrc03/2026.09/bview.20260915.0000.gz
|
|
```
|
|
|
|
That is RIPE RIS collector `rrc03`, which peers at AMS-IX: about 340 MB,
|
|
3.4 GB uncompressed. Any `bview` file from <https://data.ris.ripe.net/> or
|
|
a RouteViews RIB works; the most recent `.gz` here is used, or the one named
|
|
by `BENCH_MRT`.
|
|
|
|
The benchmark needs memory in proportion to the dump. `BENCH_PEERS=8`
|
|
limits it to the eight peers with the most routes.
|