Weekly update

Week of 2026-01-05

This week rounded out route-refresh, ADD-PATH and VPN/labeled-unicast support in the plugin API, alongside a batch of BGP correctness fixes.

← All weekly updates

πŸ”„ Route refresh

Enhanced Route Refresh (RFC 7313) is now handled end to end: a refresh request gets a Begin-of-RR, the matching routes, then an End-of-RR, and the capability negotiation bug that stopped BoRR/EoRR from ever being sent when route-refresh was configured is fixed. New msg-id retain / release / expire / list commands let an API program control how long UPDATE messages stay cached, which graceful-restart tooling can use to replay routes.

🧩 Plugin API: routes and families

  • ADD-PATH (RFC 7911) path-ids are now preserved through the plugin event stream, so plugins can tell multiple paths to the same prefix apart
  • A FlowSpec text-mode parser (RFC 8955) covering all twelve match-component types and both numeric and bitmask operators
  • Route distinguisher and label support for VPN and labeled-unicast routes in the text API, including multi-label stacks (RFC 8277)
  • AnnounceL3VPN / WithdrawL3VPN commands for RFC 4364 MPLS VPN routes
  • Raw wire-format input: routes and attributes can now be passed as hex or base64 BGP bytes directly, and a passthrough command sends fully unvalidated bytes for protocol testing
  • Per-session control over which wire encoding (hex, base64, CBOR or text) an API program uses, independently for each direction
  • Plugins now go through a defined startup handshake with the core: declare capabilities and commands, receive matching config, register their OPEN-message capabilities, then signal ready before sessions start

πŸ› Protocol correctness

  • UPDATE messages built via the text API always include ORIGIN and AS_PATH, the two RFC 4271 mandatory attributes that could previously be missing
  • Fixed attribute ordering in batched UPDATE messages (AS_PATH and NEXT_HOP were landing in the wrong position, and iBGP sessions were missing LOCAL_PREF)
  • MUP routes announced via the API were silently dropping their extended-community attribute
  • Label-only routes are now correctly classified as labeled-unicast (SAFI 4) instead of MPLS VPN