Skip to content

RFC Information

Thomas Mangin edited this page Nov 15, 2025 · 30 revisions

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

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.


Contributing

Found an RFC that should be listed or noticed incorrect information? Please open an issue or pull request on the ExaBGP GitHub repository.

References


πŸ‘» Ghost written by Claude (Anthropic AI)

Clone this wiki locally