Newansage v0.4.0 is out
Newansage v0.4.0 released

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 sh
Linux · x86_64, aarch64 · systemdView install script
Then announce your first prefix

Your prefixes, at a glance

ansage show · one eBGP neighbor

$ ansage show summary
ansage 0.4.0, AS 64500, router ID 203.0.113.1, up 19.0s
RIB: 1 IPv4 and 1 IPv6 prefixes, 1 attribute sets
Announcing: 192.0.2.0/24 2001:db8:1::/48
ID NEIGHBOR AS STATE FOR SENT v4/v6
1 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 session

Drain before maintenance

RFC 8326 · sessions stay up, traffic moves

$ ansage drain
Drained: our routes go out with GRACEFUL_SHUTDOWN 65535:0 until `ansage undrain`
$ ansage show summary
ansage 0.4.0, AS 64500, router ID 203.0.113.1, up 20.0s
Announcing: 192.0.2.0/24 2001:db8:1::/48
Drained for 1.0s: our routes carry GRACEFUL_SHUTDOWN (ansage undrain ends it)
$ ansage undrain
Drain 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 guide

Upgrade without dropping routes

graceful restart · RFC 4724 + RFC 8538

$ ansage upgrade --binary /usr/local/bin/ansage
127.0.0.2:11790 keeps our routes for 30 s (Cease without Hard Reset)
New binary: ansage 0.4.0, config OK
Restarting; waiting up to 30 s for 1 neighbors
ansage is back after 0.3 s
127.0.0.2:11790 back after 0.3 s
Upgrade 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.

reproduce

One small config file

/etc/ansage/ansage.toml

asn = 64500
router_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 reference

Tested 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.

users
users
router · FRR
router · BIRD
site C
site B
site A
site A · drained

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.

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.

Announce your first prefix.

Esc to close