Weekly update
Week of 2025-12-29
Route-family coverage rounded out (labeled-unicast, MPLS VPN, MUP, route reflection), a batch of protocol-correctness fixes, and a security-relevant change to how Ze listens for BGP sessions.
π Session hardening
Ze no longer binds one global BGP listener. Listeners are now derived automatically from each peer's configured local address, so BGP is only exposed on interfaces that actually have a peer configured. This is a breaking change: the old TCP.Bind environment variable is gone, and every peer needs a local address set.
π°οΈ Route families
- Labeled-unicast (SAFI 4) routes, including BGP Prefix-SID, now round-trip through the API with full Adj-RIB-Out support.
- MPLS VPN (L3VPN) routes can be announced directly from config announce blocks, and the split /N syntax already used for plain routes now works for VPN routes too.
- MUP (SAFI 85) routes can be announced and withdrawn via the API.
- Route reflector attributes (ORIGINATOR_ID, CLUSTER_LIST) are now attached consistently across MVPN, FlowSpec, and MUP routes, not just plain unicast.
- A standalone route reflector API server (
zebgp api rr) exposes peer and RIB state over its own endpoint.
π§ Protocol correctness
- AS_PATH and AGGREGATOR now encode correctly under 4-octet ASN negotiation (RFC 6793).
- Path attributes are emitted in RFC 4271 Appendix F.3 order.
- FlowSpec VPN routes now carry their Route Distinguisher in the NLRI, as RFC 8955 requires.
- IPv6 unicast routes can carry an IPv4-mapped next-hop (RFC 8950).
- Routes redistributed through the RIB keep their original path attributes and LOCAL_PREF instead of losing them in transit.
π§° CLI & config
- New
zebgp decodecommand turns raw hex BGP messages into JSON. - New
zebgp encodecommand does the reverse: turns a route command into wire-format hex, with round-trip verification across every supported family. - Config gained an
environmentblock. - Community values in config now accept bare integers and hex, not just the named forms.
- API attribute and NLRI filters let external processes subscribe to a narrower slice of updates instead of the full stream.
- The config editor moved from
zebgp edittozebgp config edit.
π οΈ Reliability
- Session teardown and reconnect handling is more robust.
- A data race in process shutdown is fixed, and processes now receive a shutdown signal before termination instead of being killed outright.
- Peer up/down transitions are now pushed to attached API processes as state notifications.