Your prefixes, announced. Drained and upgraded without a gap.
ansage is a BGP router for Linux, growing into a replacement for BIRD and FRR. Today it announces anycast services and your IPv4 and IPv6 ranges to your routers, drains a site before maintenance and upgrades without dropping routes.
Install ansage v0.4.0
curl -fsSL https://github.com/miggish/ansage/releases/latest/download/install.sh | sudo shYour prefixes, at a glance
ansage show · one eBGP neighbor
$ ansage show summaryansage 0.4.0, AS 64500, router ID 203.0.113.1, up 19.0sRIB: 1 IPv4 and 1 IPv6 prefixes, 1 attribute setsAnnouncing: 192.0.2.0/24 2001:db8:1::/48ID NEIGHBOR AS STATE FOR SENT v4/v61 127.0.0.2:11790 64501 Established 12.8s 1/1
Output of ansage 0.4.0, columns shortened. Every client command also takes --json.
first sessionDrain before maintenance
RFC 8326 · sessions stay up, traffic moves
$ ansage drainDrained: our routes go out with GRACEFUL_SHUTDOWN 65535:0 until `ansage undrain`$ ansage show summaryansage 0.4.0, AS 64500, router ID 203.0.113.1, up 20.0sAnnouncing: 192.0.2.0/24 2001:db8:1::/48Drained for 1.0s: our routes carry GRACEFUL_SHUTDOWN (ansage undrain ends it)$ ansage undrainDrain ended: our routes go out as usual
Routers move traffic to the other sites while this one still answers. drain_time does the same on every stop.
drain guideUpgrade without dropping routes
graceful restart · RFC 4724 + RFC 8538
$ ansage upgrade --binary /usr/local/bin/ansage127.0.0.2:11790 keeps our routes for 30 s (Cease without Hard Reset)New binary: ansage 0.4.0, config OKRestarting; waiting up to 30 s for 1 neighborsansage is back after 0.3 s127.0.0.2:11790 back after 0.3 sUpgrade done
In the end-to-end tests, users behind FRR and BIRD fetched the anycast service every 0.1 s through ansage upgrade: no request failed.
reproduceOne small config file
/etc/ansage/ansage.toml
asn = 64500router_id = "203.0.113.1"announce = ["192.0.2.0/24", "2001:db8:1::/48"][[neighbor]]address = "10.0.0.1"asn = 64501
ansage reload applies only what changed; unchanged neighbors keep their sessions.
config referenceTested against
- FRR
- BIRD
- Linux FIB
- Prometheus
- systemd 252 + 255
One prefix, every site.
Each site runs ansage and announces the same prefix. Routers send users to the nearest one; drain a site and its traffic moves before you touch it.
Drain, RFC 8326
GRACEFUL_SHUTDOWN 65535:0, LOCAL_PREF 0 on iBGP, extra AS prepends on eBGP.
ansage on every site announces 192.0.2.0/24. Each router sends its users to the nearest site.
ansage drain on site A: its routes go out with GRACEFUL_SHUTDOWN, the FRR router moves to site C. Site A keeps answering while the traffic moves.
0 failed requests
Users fetched the service every 0.1 s through ansage upgrade, in the end-to-end tests.
The network of ansage's end-to-end tests, simplified.
Drain before maintenance
RFC 8326: routers move traffic to the other sites while this one still answers. Sessions stay up.
Upgrade in place
ansage upgrade restarts with Graceful Restart and exits 0 only once every neighbor has the full table again.
Change at runtime
ansage announce and withdraw for health checks; ansage reload applies only what changed.
Kernel routes
With [kernel], the best learned routes go into the Linux routing table through nexthop objects.
Observable
ansage show, Prometheus metrics, a read-only JSON API and live events over SSE.
Locked down
TCP-MD5 and GTSM per neighbor, a hardened systemd unit, its own user and group.
For agents
The same docs, as Markdown.
Point your coding agent at ansage: every page has a Markdown twin.
- /llms.txt
- Index of every page with its Markdown URL.
- /docs/….md
- Any page as clean Markdown, or send Accept: text/markdown.
- /llms-full.txt
- All docs in one file.