# RFCs Tracks which RFCs are implemented, partially implemented, or only represented in the wire format layer. **Legend** - โœ… Implemented โ€” functional end-to-end - ๐ŸŸก Wire format only โ€” parsed and serialised correctly, but not yet acted on - โŒ Not implemented --- ## Core BGP ### RFC 4271 โ€” A Border Gateway Protocol 4 (BGP-4) https://datatracker.ietf.org/doc/html/rfc4271 The base protocol specification. | Section | Description | Status | |---------|-------------|--------| | ยง4.1 | Message framing (marker, length, type) | โœ… | | ยง4.2 | OPEN message | โœ… | | ยง4.3 | UPDATE message (path attributes, NLRI, withdrawn routes) | โœ… | | ยง4.4 | KEEPALIVE message | โœ… | | ยง4.5 | NOTIFICATION message (all error codes and subcodes) | โœ… | | ยง8 | FSM โ€” passive (inbound) side: OpenSent โ†’ OpenConfirm โ†’ Established | โœ… | | ยง8 | FSM โ€” active (outbound) side: dial configured peers, exponential retry | โœ… | | ยง6.2 | Bad Peer AS check against configured ASN | โœ… | | ยง6.7 / RFC 4486 | Cease / Administrative Shutdown sent to every peer on SIGINT or SIGTERM | โœ… | | ยง6.8 | Connection collision detection (BGP Identifier comparison, Cease / Connection Collision Resolution) | โœ… | | ยง8.1.1 | Optional `CollisionDetectEstablishedState` (`collision_detect_established_state`) | โœ… | | ยง6.2 | Bad BGP Identifier check (peer using our identifier, or 0.0.0.0) | โœ… | | ยง9 | Decision process / best-path selection | โœ… | | ยง9.1.2 | Best routes installed for forwarding (Linux kernel, over netlink), where the next hop is directly connected | โœ… | | ยง9.1.2.1 | Routes with an unresolvable next hop excluded from selection; next hops resolved through other routes | โŒ (such a route can be chosen, and is then not installed) | | ยง9 | Adj-RIB-In (per-peer table of received routes) | โœ… | | ยง9 | Locally originated routes, advertised to all established peers | โœ… | | ยง9 | Loc-RIB / Adj-RIB-Out for routes learned from peers (re-advertisement) | โŒ | | ยง9.2 | Hold timer reset on any received message (not only KEEPALIVE) | โœ… | --- ## Capability and Session Extensions ### RFC 6793 โ€” BGP Support for Four-Octet Autonomous System (AS) Number Space https://datatracker.ietf.org/doc/html/rfc6793 | Feature | Status | |---------|--------| | `AS_TRANS` (23456) sentinel | โœ… | | `FourByteAsn` capability advertisement and parsing | โœ… | | 4-byte AS_PATH segment encoding/decoding via `ParserContext` | โœ… | | 4-byte ASN negotiation in FSM | โœ… | ### RFC 9072 โ€” Extended Optional Parameters Length for BGP OPEN Message https://datatracker.ietf.org/doc/html/rfc9072 | Feature | Status | |---------|--------| | Parsing extended-length OPEN (0xFF sentinel) | โœ… | | Serialising extended-length OPEN when options exceed 255 bytes | โœ… | ### RFC 2918 โ€” Route Refresh Capability for BGP-4 https://datatracker.ietf.org/doc/html/rfc2918 | Feature | Status | |---------|--------| | `RouteRefresh` capability advertisement | โœ… | | `ROUTE-REFRESH` message type (5) framing | โœ… | | AFI/SAFI payload parsing | โŒ | | Acting on received ROUTE-REFRESH (re-advertising all local routes, regardless of the AFI/SAFI asked for) | โœ… | ### RFC 7313 โ€” Enhanced Route Refresh Capability for BGP-4 https://datatracker.ietf.org/doc/html/rfc7313 | Feature | Status | |---------|--------| | `EnhancedRouteRefresh` capability wire format | ๐ŸŸก | ### RFC 4724 โ€” Graceful Restart Mechanism for BGP https://datatracker.ietf.org/doc/html/rfc4724 | Feature | Status | |---------|--------| | `GracefulRestart` capability wire format | ๐ŸŸก | | Restart state and forwarding preserved across sessions | โŒ | ### RFC 9494 โ€” Long-Lived Graceful Restart for BGP https://datatracker.ietf.org/doc/html/rfc9494 | Feature | Status | |---------|--------| | `LongLivedGracefulRestart` capability wire format | ๐ŸŸก | ### RFC 8654 โ€” Extended Message Support for BGP https://datatracker.ietf.org/doc/html/rfc8654 | Feature | Status | |---------|--------| | `ExtendedMessage` capability wire format | ๐ŸŸก | | Raising `BGP_MAX_MSG_LEN` to 65535 when negotiated | โŒ | --- ## Multiprotocol and NLRI ### RFC 2858 โ€” Multiprotocol Extensions for BGP-4 https://datatracker.ietf.org/doc/html/rfc2858 | Feature | Status | |---------|--------| | `MultiProtocol` capability advertisement (IPv4 and IPv6 unicast) | โœ… | | `MP_REACH_NLRI` path attribute (parse, serialise) | โœ… | | `MP_UNREACH_NLRI` path attribute (parse, serialise) | โœ… | | IPv4 and IPv6 next-hop encoding | โœ… | ### RFC 8950 โ€” Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop https://datatracker.ietf.org/doc/html/rfc8950 | Feature | Status | |---------|--------| | `ExtendedNextHop` capability offered on sessions over IPv6 that carry IPv4 unicast, and used if the peer offers it | โœ… | | IPv4 unicast routes sent and withdrawn in MP_REACH_NLRI / MP_UNREACH_NLRI with our IPv6 address as next hop | โœ… | | IPv4 unicast routes received with an IPv6 next hop (global, or global and link-local) | โœ… | | Such routes installed in the kernel (IPv4 route by way of an IPv6 neighbor) | โœ… | | Other families than IPv4 unicast (VPN-IPv4, labelled) | โŒ | | Sessions between link-local addresses (`fe80::1%eth0`), with link-local next hops | โœ… | --- ## Path Attributes and Communities ### RFC 1997 โ€” BGP Communities Attribute https://datatracker.ietf.org/doc/html/rfc1997 | Feature | Status | |---------|--------| | `COMMUNITIES` path attribute (parse, serialise) | โœ… | | Attach to locally originated routes | โœ… | ### RFC 4360 โ€” BGP Extended Communities Attribute https://datatracker.ietf.org/doc/html/rfc4360 | Feature | Status | |---------|--------| | `EXTENDED_COMMUNITIES` path attribute (parse, serialise) | โœ… | | AS-specific, IPv4-address-specific, opaque, route-target, route-origin subtypes | โœ… | ### RFC 8092 โ€” BGP Large Communities Attribute https://datatracker.ietf.org/doc/html/rfc8092 | Feature | Status | |---------|--------| | `LARGE_COMMUNITIES` path attribute (parse, serialise) | โœ… | | Attach to locally originated routes | โœ… | --- ## Other Capabilities (Wire Format Only) The following capabilities are parsed and serialised correctly but have no functional behaviour implemented beyond that. | RFC | Capability | Status | |-----|-----------|--------| | RFC 5291 | Outbound Route Filtering (ORF) | ๐ŸŸก | | RFC 8205 | BGPsec | ๐ŸŸก | --- ## Error Handling ### RFC 9687 โ€” BGP Send Hold Timer https://datatracker.ietf.org/doc/html/rfc9687 | Feature | Status | |---------|--------| | `SendHoldTimer` error code (8) defined | โœ… | | Send hold timer enforcement (a write that makes no progress ends the session) | โœ… | --- ## Route Security ### RFC 6811 โ€” BGP Prefix Origin Validation https://datatracker.ietf.org/doc/html/rfc6811 | Feature | Status | |---------|--------| | Validation states (valid, invalid, not found) for routes from external peers | โœ… | | Invalid routes refused, per peer (`accept_rpki_invalid` to take them) | โœ… | | Routes revalidated when the VRPs change, in both directions | โœ… | | Validation of routes from internal peers and of originated routes | โŒ | | Validity as a step of route selection (RFC 8097 communities) | โŒ | ### draft-ietf-sidrops-aspa-verification โ€” BGP AS_PATH Verification Based on ASPA https://datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-verification/ Implemented from version 24 of the draft. | Feature | Status | |---------|--------| | Upstream verification (routes from customers, peers, route servers and route server clients) | โœ… | | Downstream verification (routes from providers) | โœ… | | Per-peer role (`role`); paths of peers without one are not verified | โœ… | | Invalid paths refused, per peer (`accept_aspa_invalid` to take them) | โœ… | | Routes revalidated when the ASPAs change, in both directions | โœ… | | Paths with an AS_SET invalid | โœ… | | Verification on export | โŒ (learned routes are not exported yet) | ### RFC 9234 โ€” Route Leak Prevention and Detection Using Roles in UPDATE and OPEN Messages https://datatracker.ietf.org/doc/html/rfc9234 | Feature | Status | |---------|--------| | BGP Role capability sent for peers with a configured `role` | โœ… | | Role Mismatch (OPEN Message Error, subcode 11) when the peer's role does not pair with ours, or it sends differing roles | โœ… | | Strict mode (`require_role`) | โœ… | | Only to Customer attribute: parse, serialise, treat-as-withdraw when malformed | โœ… | | Ingress: marked routes from customers, route server clients and (unless marked by the peer itself) peers refused | โœ… | | Ingress: routes from providers, peers and route servers marked | โœ… | | Egress: originated routes to customers, peers and route server clients marked | โœ… | | Egress: marked routes not sent to providers, peers or route servers | โŒ (learned routes are not exported yet) | ### RFC 8210 โ€” The RPKI to Router Protocol, Version 1 (RFC 6810, version 0; draft-ietf-sidrops-8210bis, version 2) https://datatracker.ietf.org/doc/html/rfc8210 Version 2 is implemented from version 23 of the draft. | Feature | Status | |---------|--------| | Reset and serial queries, notifies, cache reset, incremental updates | โœ… | | Refresh, retry and expire intervals; data dropped when it expires | โœ… | | Version 2, with fallback to 1 and 0; several caches with failover | โœ… | | ASPA PDU (version 2) | โœ… | | Error Reports sent to the cache | โœ… | | Version 2's ordering of PDUs enforced on what a cache sends | โŒ (any order is taken) | | Transport over plain TCP | โœ… | | Transport over SSH, TLS, TCP-MD5 or TCP-AO | โŒ | | Router keys (BGPsec) | ๐ŸŸก read and ignored | ### RFC 7911 โ€” Advertisement of Multiple Paths in BGP (ADD-PATH) https://datatracker.ietf.org/doc/html/rfc7911 | Feature | Status | |---------|--------| | Capability negotiation per family and direction | โœ… | | Receiving several routes for a prefix | โœ… | | Sending several routes for a prefix | โŒ (path identifiers are sent; one route each) | ### RFC 4271 ยง9.1.2 / RFC 4486 / operational practice โ€” import policy | Feature | Status | |---------|--------| | Own AS in path refused (loop detection) | โœ… | | Bogon prefixes and AS numbers, prefix length bounds, first-AS check | โœ… | | Per-peer prefix and origin AS allow-lists | โœ… | | Maximum prefixes with Cease / Maximum Number of Prefixes Reached and hold-down | โœ… |