# ExaBGP RFC Implementation This document lists all RFC (Request for Comments) specifications implemented in ExaBGP, organized by functional area. **Last Updated**: 2025-11-09 ## Table of Contents - [Core BGP Protocol](#core-bgp-protocol) - [BGP Capabilities](#bgp-capabilities) - [Multiprotocol Extensions](#multiprotocol-extensions) - [Communities](#communities) - [VPN and MPLS](#vpn-and-mpls) - [EVPN (Ethernet VPN)](#evpn-ethernet-vpn) - [FlowSpec](#flowspec) - [BGP-LS (Link State)](#bgp-ls-link-state) - [Segment Routing](#segment-routing) - [Error Handling and Administrative](#error-handling-and-administrative) - [Operational Features](#operational-features) - [Internet Drafts](#internet-drafts) --- ## Core BGP Protocol ### RFC 4271 - A Border Gateway Protocol 4 (BGP-4) **Status**: Fully Implemented The foundational BGP-4 specification defining: - BGP finite state machine (FSM) - Message types (OPEN, UPDATE, NOTIFICATION, KEEPALIVE) - Path attributes - Route selection process - Hold time and keepalive mechanisms **Implementation**: Core protocol implementation across all modules. --- ## BGP Capabilities ### RFC 2918 - Route Refresh Capability for BGP-4 **Status**: Fully Implemented Allows BGP speakers to request re-advertisement of routes without tearing down the session. **Implementation**: `src/exabgp/bgp/message/refresh.py` ### RFC 4724 - Graceful Restart Mechanism for BGP **Status**: Fully Implemented Enables BGP sessions to maintain forwarding state during control plane restarts. **Implementation**: `src/exabgp/bgp/message/open/capability/graceful.py` ### RFC 4893 - BGP Support for Four-octet AS Number Space **Status**: Fully Implemented Support for 4-byte Autonomous System Numbers (ASNs), extending the 2-byte ASN space. **Implementation**: - `src/exabgp/bgp/message/open/capability/capability.py` - AS4_PATH attribute support ### RFC 5492 - Capabilities Advertisement with BGP-4 **Status**: Fully Implemented Framework for advertising optional capabilities during BGP session establishment. **Implementation**: `src/exabgp/bgp/message/open/capability/` ### RFC 6286 - Autonomous-System-Wide Unique BGP Identifier for BGP-4 **Status**: Fully Implemented Relaxes BGP identifier requirements for AS-wide uniqueness. **Implementation**: `src/exabgp/bgp/message/open/capability/negotiated.py` ### RFC 7313 - Enhanced Route Refresh Capability for BGP-4 **Status**: Fully Implemented Adds Beginning-of-Route-Refresh (BoRR) and End-of-Route-Refresh (EoRR) markers. **Implementation**: `src/exabgp/bgp/message/refresh.py` ### RFC 7911 - Advertisement of Multiple Paths in BGP (ADD-PATH) **Status**: Fully Implemented Allows BGP to advertise multiple paths for the same address prefix without new sessions. **Supported Address Families**: - IPv4 Unicast/Multicast - IPv6 Unicast/Multicast - VPNv4/VPNv6 - FlowSpec (IPv4/IPv6) - VPLS **Not Yet Supported**: - EVPN - MVPN - Route Target Constraint (RTC) - BGP-LS **Implementation**: - `src/exabgp/bgp/message/open/capability/addpath.py` - Path information encoding/decoding in NLRI modules - `src/exabgp/bgp/neighbor.py` (addpath configuration) ### RFC 9072 - Extended Optional Parameters Length for BGP OPEN Message **Status**: Fully Implemented Extends BGP OPEN message to support longer optional parameters (>255 bytes). **Implementation**: `src/exabgp/bgp/message/open/capability/capabilities.py` --- ## Multiprotocol Extensions ### RFC 2545 - Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing **Status**: Fully Implemented Enables BGP to carry IPv6 routing information. **Implementation**: IPv6 address family support ### RFC 4760 - Multiprotocol Extensions for BGP-4 **Status**: Fully Implemented Core multiprotocol BGP (MP-BGP) specification enabling BGP to carry multiple address families: - IPv4/IPv6 Unicast and Multicast - VPNv4/VPNv6 - EVPN - BGP-LS - FlowSpec **Implementation**: - `src/exabgp/bgp/message/update/attribute/mprnlri.py` (MP_REACH_NLRI) - `src/exabgp/bgp/message/update/attribute/mpurnlri.py` (MP_UNREACH_NLRI) - `src/exabgp/protocol/family.py` (AFI/SAFI definitions) ### RFC 5549 - Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop **Status**: Fully Implemented Allows IPv4 prefixes to be advertised with IPv6 next hops (extended next-hop capability). **Implementation**: `src/exabgp/bgp/message/open/capability/capability.py` --- ## Communities ### RFC 1997 - BGP Communities Attribute **Status**: Fully Implemented Standard 32-bit BGP communities for route tagging and policy application. **Format**: AS:Value (16-bit:16-bit) **Implementation**: `src/exabgp/bgp/message/update/attribute/community/` ### RFC 3765 - NOPEER Community for Border Gateway Protocol (BGP) Route Scope Control **Status**: Fully Implemented Well-known community (0xFFFFFF04) indicating routes should not be advertised to peers. **Implementation**: Community attribute support ### RFC 4360 - BGP Extended Communities Attribute **Status**: Fully Implemented 64-bit extended communities providing additional route tagging capabilities: - Route Target (RT) - Route Origin (RO) - Traffic engineering - Layer 2 attributes - Encapsulation **Implementation**: `src/exabgp/bgp/message/update/attribute/community/extended/` ### RFC 5668 - 4-Octet AS Specific BGP Extended Community **Status**: Fully Implemented Extended communities supporting 4-byte ASNs. **Implementation**: Extended community modules ### RFC 5701 - IPv6 Address Specific BGP Extended Community Attribute **Status**: Fully Implemented Extended communities using IPv6 addresses instead of IPv4. **Implementation**: `src/exabgp/bgp/message/update/attribute/community/extended/` ### RFC 7153 - IANA Registries for BGP Extended Communities **Status**: Fully Implemented Registry management for extended community types. **Implementation**: Extended community type definitions ### RFC 7999 - BLACKHOLE Community **Status**: Fully Implemented Well-known community (0xFFFF029A) for blackhole filtering, commonly used in DDoS mitigation. **Implementation**: Community attribute support ### RFC 8092 - BGP Large Communities Attribute **Status**: Fully Implemented 96-bit (12-byte) communities supporting large ASN values and flexible policy application. **Format**: ASN:Value1:Value2 (32-bit:32-bit:32-bit) **Implementation**: `src/exabgp/bgp/message/update/attribute/community/large/` --- ## VPN and MPLS ### RFC 2385 - Protection of BGP Sessions via the TCP MD5 Signature Option **Status**: Fully Implemented TCP MD5 authentication for BGP sessions (80-byte password limit). **Implementation**: `src/exabgp/data/check.py`, `src/exabgp/configuration/neighbor/` ### RFC 3107 - Carrying Label Information in BGP-4 **Status**: Fully Implemented Enables BGP to carry MPLS label information for labeled unicast routes. **Implementation**: NLRI MPLS label support ### RFC 4364 - BGP/MPLS IP Virtual Private Networks (VPNs) **Status**: Fully Implemented Core L3VPN specification including: - VPNv4/VPNv6 address families - Route Distinguisher (RD) types: Type 0, Type 1, Type 2 - Route Target extended communities **Implementation**: - `src/exabgp/bgp/message/update/nlri/ipvpn.py` - `src/exabgp/protocol/family.py` (MPLS_VPN SAFI) ### RFC 4659 - BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN **Status**: Fully Implemented Extends L3VPN to support IPv6 (VPNv6). **Implementation**: IPv6 VPN NLRI support ### RFC 4761 - Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling **Status**: Fully Implemented BGP-based VPLS for Layer 2 VPN services. **Implementation**: - `src/exabgp/protocol/family.py` (VPLS SAFI) - `src/exabgp/bgp/message/update/attribute/community/extended/l2info.py` ### RFC 4762 - Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling **Status**: Documented LDP-based VPLS (related to BGP VPLS implementation). ### RFC 5512 - The BGP Encapsulation Subsequent Address Family Identifier (SAFI) and the BGP Tunnel Encapsulation Attribute **Status**: Fully Implemented Tunnel encapsulation for BGP routes (GRE, IPsec, etc.). **Implementation**: `src/exabgp/bgp/message/update/attribute/community/extended/encapsulation.py` ### RFC 6514 - BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs **Status**: Fully Implemented Multicast VPN (MVPN) support including: - MVPN NLRI types - PMSI (Provider Multicast Service Interface) tunnel attribute **Implementation**: - `src/exabgp/protocol/family.py` (MCAST_VPN SAFI) - `src/exabgp/bgp/message/update/attribute/pmsi.py` --- ## EVPN (Ethernet VPN) ### RFC 7432 - BGP MPLS-Based Ethernet VPN **Status**: Fully Implemented Complete EVPN implementation for Layer 2 VPN services: - EVPN route types (1-5) - Ethernet Segment Identifier (ESI) - MAC/IP advertisement - Inclusive multicast - Ethernet auto-discovery **Implementation**: - `src/exabgp/bgp/message/update/nlri/evpn/` - `src/exabgp/bgp/message/update/attribute/community/extended/mac_mobility.py` --- ## FlowSpec ### RFC 5575 - Dissemination of Flow Specification Rules **Status**: Fully Implemented BGP FlowSpec for distributing traffic filtering rules: - IPv4/IPv6 FlowSpec - Flow component matching (destination, source, protocol, port, etc.) - Traffic filtering actions (rate-limit, redirect, mark, discard) **Implementation**: - `src/exabgp/bgp/message/update/nlri/flow.py` - `src/exabgp/protocol/family.py` (FLOW_IP, FLOW_VPN SAFIs) - `src/exabgp/bgp/message/update/attribute/community/extended/traffic.py` ### RFC 7674 - Clarification of the Flowspec Redirect Extended Community **Status**: Fully Implemented Redirect to VRF using 4-octet AS numbers for FlowSpec. **Implementation**: `src/exabgp/bgp/message/update/attribute/community/extended/traffic.py` --- ## BGP-LS (Link State) ### RFC 7752 - North-Bound Distribution of Link-State and Traffic Engineering Information Using BGP **Status**: Fully Implemented BGP-LS for distributing IGP topology and TE information: - Node descriptors and attributes - Link descriptors and attributes - Prefix descriptors and attributes - OSPF and IS-IS topology information **Implementation**: - `src/exabgp/bgp/message/update/nlri/bgpls/` - `src/exabgp/bgp/message/update/attribute/bgpls/` - `src/exabgp/protocol/family.py` (BGPLS, BGPLS_VPN SAFIs) **Note**: Current implementation supports receive-only mode for BGP-LS advertisements. **Related Support RFCs** (via BGP-LS): - **RFC 2328** - OSPF Version 2 - **RFC 4915** - Multi-Topology Routing in OSPF - **RFC 5120** - M-ISIS: Multi Topology (MT) Routing in Intermediate System to Intermediate Systems (IS-IS) - **RFC 5130** - A Policy Control Mechanism in IS-IS Using Administrative Tags - **RFC 5305** - IS-IS Extensions for Traffic Engineering - **RFC 5307** - IS-IS Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS) - **RFC 5340** - OSPF for IPv6 - **RFC 6119** - IPv6 Traffic Engineering in IS-IS - **RFC 7794** - IS-IS Prefix Attributes for Extended IPv4 and IPv6 Reachability --- ## Segment Routing ### RFC 9514 - Border Gateway Protocol - Link State (BGP-LS) Extensions for Segment Routing over IPv6 (SRv6) **Status**: Fully Implemented Comprehensive SRv6 support via BGP-LS including: - SRv6 SID Information TLV - SRv6 Capabilities TLV - SRv6 End.X SID TLV - SRv6 LAN End.X SID TLV - SRv6 Locator TLV - SRv6 Endpoint Behavior - SRv6 SID Structure **Implementation**: `src/exabgp/bgp/message/update/attribute/bgpls/link/srv6*.py` and related SRv6 modules **Related Support** (via Segment Routing): - **RFC 3209** - RSVP-TE: Extensions to RSVP for LSP Tunnels (MPLS protocol mask) - **RFC 5036** - LDP Specification (MPLS protocol mask) --- ## Error Handling and Administrative ### RFC 4456 - BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP) **Status**: Fully Implemented Route reflection for scalable iBGP deployments. **Implementation**: `src/exabgp/bgp/message/update/attribute/` (ORIGINATOR_ID, CLUSTER_LIST) ### RFC 4486 - Subcodes for BGP Cease Notification Message **Status**: Fully Implemented Detailed subcodes for BGP Cease notifications. **Implementation**: `src/exabgp/bgp/message/notification.py` ### RFC 6608 - Subcodes for BGP Finite State Machine Error **Status**: Fully Implemented Specific error subcodes for BGP FSM errors. **Implementation**: `src/exabgp/bgp/message/notification.py` ### RFC 7606 - Revised Error Handling for BGP UPDATE Messages **Status**: Fully Implemented Improved error handling using "treat-as-withdraw" approach instead of session reset. **Implementation**: UPDATE message processing ### RFC 8203 - BGP Administrative Shutdown Communication **Status**: Fully Implemented Allows graceful shutdown with human-readable reason (128-byte limit for legacy). **Implementation**: - `src/exabgp/reactor/api/transcoder.py` - `src/exabgp/bgp/message/notification.py` ### RFC 9003 - Extended BGP Administrative Shutdown Communication **Status**: Fully Implemented Extended shutdown communication supporting 255-byte messages (UTF-8 multibyte characters). **Implementation**: `src/exabgp/bgp/message/notification.py` --- ## Operational Features ### RFC 5396 - Textual Representation of Autonomous System (AS) Numbers **Status**: Fully Implemented Standard textual format for AS numbers (asplain and asdot formats). **Implementation**: AS number parsing and display ### RFC 7311 - The Accumulated IGP Metric Attribute for BGP **Status**: Fully Implemented AIGP (Accumulated IGP) metric attribute for maintaining IGP metrics across AS boundaries. **Implementation**: `src/exabgp/bgp/message/update/attribute/aigp.py` --- ## Internet Drafts ### draft-ietf-idr-operational-message-00 - BGP OPERATIONAL Message **Status**: Partially Implemented Experimental operational messages for BGP state and statistics exchange. **Implementation**: `src/exabgp/bgp/message/open/capability/operational.py` ### draft-walton-bgp-hostname-capability - BGP Hostname Capability **Status**: Implemented Allows BGP speakers to exchange hostname information (capability code 0x49). **Implementation**: `src/exabgp/bgp/message/open/capability/hostname.py` ### draft-abraitis-bgp-version-capability - BGP Software Version Capability **Status**: Implemented Allows BGP speakers to exchange software version information (capability code 0x4B). **Implementation**: `src/exabgp/bgp/message/open/capability/software.py` ### draft-ietf-idr-bgp-extended-messages - Extended Message Support for BGP **Status**: Implemented Support for BGP messages larger than 4096 bytes (capability code 0x06). **Implementation**: `src/exabgp/bgp/message/open/capability/capability.py` ### draft-mpmz-bess-mup-safi - BGP Extensions for MUP **Status**: Implemented Mobile User Plane (MUP) SAFI support for 5G networks (SAFI 85). **Implementation**: `src/exabgp/protocol/family.py` --- ## Implementation Statistics - **Total RFCs Implemented**: 55+ - **Core BGP RFCs**: 8 - **Capability RFCs**: 8 - **Community RFCs**: 7 - **VPN/MPLS RFCs**: 9 - **Advanced Features**: EVPN, FlowSpec, BGP-LS, SRv6, MVPN - **Internet Drafts**: 5+ --- ## Implementation Notes ### Key Design Features 1. **No FIB Manipulation**: ExaBGP implements the BGP protocol and provides APIs for external process communication, but does not manipulate the Forwarding Information Base. 2. **Comprehensive Address Family Support**: - IPv4/IPv6 Unicast and Multicast - VPNv4/VPNv6 (L3VPN) - EVPN (Layer 2 VPN) - FlowSpec (IPv4/IPv6/VPN variants) - BGP-LS (topology distribution) - VPLS - MVPN - MUP 3. **Modern BGP Extensions**: - 4-byte ASN support - ADD-PATH capability - Graceful restart - Enhanced route refresh - Extended message support - SRv6 for segment routing 4. **Production-Ready Error Handling**: - RFC 7606 treat-as-withdraw - Detailed notification subcodes - Graceful shutdown with communication ### Testing and Validation ExaBGP's RFC compliance is validated through: - Functional tests for BGP message encoding/decoding (`qa/bin/functional`) - Configuration parsing tests (`qa/bin/parsing`) - Unit tests with coverage (`pytest`) - Real-world deployments in production networks ### Future Enhancements The ExaBGP team continues to track and implement new BGP specifications as they are standardized by the IETF. For the latest developments, see the [CHANGELOG](https://github.com/Exa-Networks/exabgp/blob/main/CHANGELOG). --- ## Contributing Found an RFC that should be listed or noticed incorrect information? Please open an issue or pull request on the [ExaBGP GitHub repository](https://github.com/Exa-Networks/exabgp). ## References - [IETF BGP Working Group](https://datatracker.ietf.org/wg/idr/) - [BGP Parameters - IANA Registry](https://www.iana.org/assignments/bgp-parameters/) - [ExaBGP Documentation](https://github.com/Exa-Networks/exabgp/wiki) ---