-
Notifications
You must be signed in to change notification settings - Fork 460
BGP Ecosystem
Note: This page compares OTHER BGP implementations in the open source ecosystem. For ExaBGP documentation, see the Home page.
β οΈ Disclaimer: This ecosystem overview and implementation analysis was written by Claude (AI assistant), not by the ExaBGP maintainer. The information is based on publicly available documentation and should be independently verified for your specific use case. Implementation choices and recommendations reflect the AI's analysis, not official endorsements.
- Overview
- When to Use What - Quick Decision Guide
- Production-Ready Implementations
- Emerging Implementations
- Language-Specific Options
- Python Ecosystem
- Specialized Tools
- Performance Comparison
- Decision Matrix
- Ecosystem Summary
- See Also
The BGP ecosystem offers a rich variety of open source implementations, each designed for different use cases and preferences. This guide helps you choose the right BGP implementation for your needs.
Key Distinction: Understand the difference between:
- Full routing daemons (BIRD, FRR, OpenBGPD) - Manage routing tables, install routes
- Programmatic BGP tools (ExaBGP, GoBGP library, CoreBGP) - Automation, API-driven
- Monitoring tools (pmacct, YABGP) - Collection and analysis
β οΈ Performance Benchmark Caveat: Performance benchmarks referenced in this document are from 2021-2022 and may not reflect current performance. Software performance can change significantly over 3-4 years, especially for actively developed projects. Treat benchmark data as historical reference only.
| Your Need | Options | Characteristics |
|---|---|---|
| IXP Route Server | BIRD | Powerful policy language, widely used in IXPs |
| Full Routing Daemon | FRRouting, BIRD, OpenBGPD | Complete protocol suites with different focuses |
| DDoS Mitigation | ExaBGP, FRRouting, BIRD, GoBGP | FlowSpec support available in multiple implementations |
| Anycast Services | ExaBGP, GoBGP | Simple API integration, health check support |
| Kubernetes/Cloud | GoBGP | Cloud-native design with gRPC API |
| Security Focus | OpenBGPD | OpenBSD security focus, auditable codebase |
| Network Automation | ExaBGP, GoBGP, CoreBGP | Programmable interfaces, scriptable |
| BGP Monitoring | pmacct/pmbmpd, YABGP | BMP collection and BGP message analysis |
| Java Environment | freeRouter | Full-featured router application with CLI |
Language: C Website: http://bird.network.cz/ Status: Mature, Active
Description: A routing daemon offering powerful filtering capabilities and designed for policy-heavy environments like IXPs and route servers.
Key Features:
- Multiple routing tables
- Powerful filtering/policy language
- IPv4 and IPv6 support
- BGP, OSPF, RIP, Babel, BFD, RPKI
- Route server capabilities
- FlowSpec support (modern versions)
Use Cases:
- IXP route servers
- Large routing tables
- Policy-heavy environments
Language: C Website: https://frrouting.org Status: Mature, Active
Description: A full-featured open-source routing solution, successor to the Quagga project.
History:
- GNU Zebra (abandoned 2005) β Quagga β FRRouting (April 2017 fork)
- Created to enable more open and faster development
- Cumulus Linux 3.4+ replaced Quagga with FRR
Key Features:
- Full routing protocol suite (BGP, OSPF, ISIS, RIP, EIGRP, PIM, BFD)
- IPv4 and IPv6 support
- MPLS support
- BGP FlowSpec support (modern versions)
- VRF support
- Graceful restart
- Route maps and prefix lists
Use Cases:
- Enterprise routers
- Data center networking
- ISP routing infrastructure
- Linux-based routers
Language: Python Website: https://github.com/Exa-Networks/exabgp Status: Mature, Active
Description: A unique, Python-based tool focused on programmatic BGP peering and network automation, rather than being a full routing daemon. "The BGP swiss army knife of networking."
Key Features:
- Simple API (STDIN/STDOUT)
- BGP FlowSpec (pioneered open source implementation, now also in GoBGP/FRR/BIRD)
- IPv4, IPv6, MPLS VPN, EVPN, BGP-LS support
- JSON and text encoders
- External process model
- No RIB/FIB manipulation - pure protocol implementation
Philosophy:
- ExaBGP does NOT install routes in kernel routing table
- External processes handle route installation via API
- Focus on BGP protocol and programmability
- Language-agnostic integration (Python, Bash, Go, Ruby, any language)
Performance Characteristics:
- Python implementation
- Not designed for full routing table
- Designed for route injection/collection
- Scales to Facebook/Meta level (Katran L4LB)
Use Cases:
- DDoS mitigation with FlowSpec
- Anycast service announcement and management
- Dynamic load balancing
- Route injection and advertisement
- Network automation
- BGP testing and simulation
- Route monitoring and collection
- Automation and orchestration
- BGP as an API
- Integration with existing infrastructure
For complete ExaBGP documentation, see:
Language: Go Website: https://osrg.github.io/gobgp/ Status: Mature, Active
Description: An open source BGP implementation designed from scratch for modern environments and implemented in Go. Supports modern BGP features and cloud-native deployments.
Key Features:
- Modern Go codebase
- gRPC API
- BGP FlowSpec support
- MRT support
- BMP (BGP Monitoring Protocol) support
- Graceful restart
- Cloud-native design
- Can be used as library or daemon
Performance Characteristics:
- Multi-core support
- Cloud-native design
Use Cases:
- Cloud-native environments
- Container networking
- Kubernetes integration
- Automation via gRPC API
- Modern application integration
Language: C Website: https://www.openbgpd.org/ Status: Mature, Active (OpenBSD project)
Description: The routing daemon developed and supported by the OpenBSD project, known for its focus on security, simplicity, and clear configuration.
Key Features:
- Security-focused design
- Simple configuration syntax
- IPv4 and IPv6 support
- Prefix filtering
- AS path manipulation
- Route reflector support
- Portable to other BSDs and Linux
Performance Characteristics:
- Single process architecture
- Focus on correctness and security
Use Cases:
- Security-conscious deployments
- OpenBSD systems
- Simple BGP setups
Language: Rust Website: https://github.com/osrg/rustybgp Status: Experimental
Description: Mission to develop a high-performance and safe BGP implementation. An experiment to implement aged and rusty BGP protocol in a modern language.
Key Features:
- Rust memory safety
- Multi-core design
- gRPC APIs (GoBGP compatible)
- High performance potential
Performance Characteristics:
- Uses all CPU cores
- Multi-core utilization
Key Characteristics:
- Rust memory safety
- GoBGP API compatible
- Experimental status
- Limited policy support
Language: Go Website: https://github.com/bio-routing/bio-rd Status: Active
Description: A project to create a versatile, fast and reliable routing daemon in Go. bio = BGP + IS-IS + OSPF.
Key Features:
- Multi-protocol (BGP, IS-IS, OSPF)
- Modern Go implementation
- Designed for performance
- Modular architecture
Key Characteristics:
- Modern Go codebase
- Multi-protocol support
- Well-architected design
- Active development
Language: Go Website: https://github.com/jwhited/corebgp Status: Active
Description: A BGP library written in Go that implements the BGP FSM with an event-driven, pluggable model.
Important: This is a library, not a daemon. It:
- Does NOT manage RIB
- Does NOT send UPDATE messages
- User controls all behavior via plugins
Use Cases:
- Building custom BGP applications
- BGP-enabled services
- Research and experimentation
Key Characteristics:
- Pluggable architecture
- Full control for developers
- Modern Go library
- Requires custom implementation
Go implementations available:
-
GoBGP - https://github.com/osrg/gobgp
- Daemon with gRPC API
- Full BGP feature set
- Cloud-native design
-
bio-routing - https://github.com/bio-routing/bio-rd
- Multi-protocol (BGP, IS-IS, OSPF)
- Well-architected
- Active development
-
CoreBGP - https://github.com/jwhited/corebgp
- Library for building custom BGP apps
- Event-driven plugin model
C implementations available:
-
BIRD - http://bird.network.cz/
- IXPs and route servers
- Powerful policy language
-
FRRouting - https://frrouting.org
- Full routing protocol suite
- Modern development
- Enterprise/ISP use
-
OpenBGPD - https://www.openbgpd.org/
- Security-focused
- OpenBSD quality
- Simple configuration
Rust implementations available:
-
RustyBGP - https://github.com/osrg/rustybgp
- Multi-core support
- Experimental
-
bgpd-rs - https://github.com/thepacketgeek/bgpd-rs
- Educational/experimental
- Based on bgp-rs library
-
bgp-rs - https://github.com/DevQps/bgp-rs
- Library for BGP parsing
- Used by bgpd-rs
-
ZettaBGP - https://docs.rs/zettabgp/latest/zettabgp/
- Comprehensive library for parsing/composing BGP and BMP
- 15+ address families (IPv4/IPv6, VPN, EVPN, FlowSpec)
- For building route reflectors, monitoring systems
- Library only (not a complete daemon)
freeRouter - http://www.freertr.org/
- Full-featured router application with CLI
- Complete routing protocol suite (BGP4, BGP6, OSPF, ISIS, and more)
- P4 integration
- DPDK support
- OS-independent packet handling
- Functions as a complete router, not just a BGP library
-
BGPFeeder - https://github.com/BytemarkHosting/bgpfeeder
- Lightweight static route distribution
- Production use at Bytemark Hosting
- Simple anycast setups
-
bgp4r - https://github.com/jesnault/bgp4r
- BGP implementation in Ruby
- Research before using
bgpsimple - Historical interest only
svn checkout http://bgpsimple.googlecode.com/svn/trunk/ bgpsimple-read-only
Note: Google Code is archived. Use modern alternatives.
There are implementations here:
-
eggpd - https://github.com/ThomasHabets/eggpd
- BGP implementation in Erlang
- Experimental
-
erlang-bgp - https://github.com/brunorijsman/erlang-bgp
- Start of an implementation
- Very early stage
hBGP - https://github.com/hdb3/hBGP
- BGP implementation in Haskell
- Academic/research use
- Functional programming approach
Website: https://github.com/Exa-Networks/exabgp
The most popular Python BGP implementation, focused on automation and programmability.
Use Cases:
- Network automation
- DDoS mitigation (FlowSpec)
- Anycast management
- Load balancing
- Route injection
See ExaBGP documentation for complete details.
Website: https://github.com/smartbgp/yabgp
You could have a look at YABGP (which came after ExaBGP):
Description: Yet Another BGP Python Implementation. Can establish BGP connections with routers and receive/parse BGP messages for analysis.
Key Features:
- BGP message parsing
- Works with Cisco/Huawei/Juniper routers
- GNS3 simulator support
- Analysis-focused
Code Heritage:
- Borrowed from PyBal (Wikimedia) for FSM/protocol
- References ExaBGP for message parsing
Use Cases:
- BGP message analysis
- Network testing
- Research and learning
Note: Analysis and testing focused.
Website: https://github.com/Orange-OpenSource/bagpipe-bgp Organization: Orange
If you want something which works with OpenStack:
In 2014, multiple projects started experimenting with BGP for OpenStack. Orange released BaGPipe which uses ExaBGP's classes to write their own BGP route injector with a clear focus on OpenStack. Some of their code has been ported back into ExaBGP - Thank you for the help!
Key Features:
- BGP VPN support
- OpenStack Neutron integration
- Based on ExaBGP classes
- EVPN support
Note: Designed for OpenStack deployments.
Website: https://github.com/osrg/ryu Organization: NTT
If you want something which works with OpenStack but NOT ExaBGP based:
Ok... we got it... no point in getting agitated :-) NTT supports the development of Ryu, which you should have a look at too as it added BGP support in 2014.
Key Features:
- SDN controller framework
- BGP support
- OpenFlow integration
Note: For SDN use cases.
Website: git.wikimedia.org/tree/operations/debs/pybal.git Organization: Wikimedia Foundation
If you want something for your website resilience:
You should look at healthcheck in ExaBGP but as you insist on not using it, the Wikimedia Foundation wrote something cool named PyBal.
Key Features:
- BGP-based load balancing
- Health checking
- Service announcement
- Production use at Wikimedia
Note: Specific to Wikimedia patterns.
Website: https://code.launchpad.net/pybgp
ExaBGP is not what I am looking for?
You could check pybgp:
bzr branch lp:pybgp
I am not sure if this project existed when I started ExaBGP or not but I clearly missed it! It does not support many RFCs, but has IPv4 and VPNv4/MPLS. I really like Twisted and use it a lot but did not want a dependency on it for a BGP daemon.
Key Features:
- Uses Twisted framework
- IPv4 and VPNv4/MPLS support
- Limited RFC support
Note: Limited RFC support.
Website: https://github.com/pmacct/pmacct
I am looking for a BMP daemon in another language than Python:
We used to have one but... not anymore. The pmbmpd daemon of pmacct can be used to collect BMP messages, which can then be shipped to Kafka.
Key Features:
- BMP (RFC 7854) collector
- BGP prefix/update collection
- NetFlow, IPFIX, sFlow support
- Kafka integration
- Production-grade monitoring
Use Cases:
- BGP monitoring
- Network telemetry
- BGP data collection
- ISP-scale monitoring
Note: Widely used for BGP monitoring.
Website: https://github.com/de-cix/pbgp-parser Organization: DE-CIX
I have some PCAP files I need parsing:
You could surely do something with ExaBGP but otherwise pbgp-parser will help you.
Use Cases:
- PCAP file analysis
- BGP troubleshooting
- Traffic analysis
Website: https://github.com/spale75/piranha
I want to know what is happening on my network:
You could surely do something with ExaBGP and otherwise Piranha can help you.
Use Cases:
- Network monitoring
- BGP visibility
Website: https://github.com/bgpkit/bgpkit-parser Language: Rust
MRT/BGP data parser library written in Rust. NOT a BGP daemon - this is a library for parsing BGP data.
Use Cases:
- BGP data analysis
- MRT file parsing
- Research
Note: Useful library for analysis, not a routing daemon.
β οΈ Important: Performance benchmarks referenced in this document are from 2021-2022 and may not reflect current performance. Software performance can change significantly over 3-4 years. Use as historical reference only.
Different implementations have different performance characteristics:
Multi-Core Support:
- RustyBGP, GoBGP: Multi-core utilization
- BIRD, FRRouting, OpenBGPD, ExaBGP: Single-core architecture
Memory and CPU Considerations:
- Each implementation has different memory and CPU requirements
- Performance varies based on use case (full table, route injection, monitoring)
- Benchmark your specific use case before choosing
| Language | Production-Ready | Experimental | Libraries |
|---|---|---|---|
| C | BIRD, FRR, OpenBGPD | - | - |
| Python | ExaBGP | YABGP, PyBal, pybgp | BaGPipe, Ryu |
| Go | GoBGP | bio-routing | CoreBGP |
| Rust | - | RustyBGP | ZettaBGP, bgp-rs |
| Java | freeRouter | - | - |
| Ruby | - | BGPFeeder, bgp4r | - |
| Erlang | - | eggpd, erlang-bgp | - |
| Haskell | - | hBGP | - |
ExaBGP Characteristics:
- Pure BGP protocol implementation (no RIB/FIB manipulation)
- API-driven architecture (STDIN/STDOUT)
- Focus on automation and programmability
- Python ecosystem
- FlowSpec support (pioneered open source implementation)
- Health check integration
- Language-agnostic (any language can use the API)
Full Routing Daemons (BIRD/FRR/OpenBGPD):
- Complete routing stack with RIB/FIB management
- Kernel integration and route installation
- Traditional router replacement
- Multi-protocol support (OSPF, ISIS, etc.)
- Optimized for full routing tables
- System-level integration
Production-Grade (Battle-Tested):
- β BIRD - IXPs worldwide
- β FRRouting - Enterprises, ISPs, Linux distros
- β ExaBGP - Facebook/Meta, ISPs, enterprises
- β OpenBGPD - OpenBSD community
Production-Ready (Proven):
- β GoBGP - Cloud deployments
- β freeRouter - Research networks
Emerging (Active Development):
- π RustyBGP - Promising but experimental
- π bio-routing - Active development
- π CoreBGP - Library for developers
Experimental / Niche:
- π§ͺ YABGP - Analysis focus
- π§ͺ bgpd-rs - Learning project
- π§ͺ Erlang/Haskell implementations
1996: GNU Zebra
β
2003: Quagga fork (Zebra abandoned)
β
2009: ExaBGP created (Python automation)
β
2010: BIRD development accelerates
β
2013: GoBGP created (Go implementation)
β
2017: FRRouting fork (Quagga successor)
β
2018: RustyBGP experimental (Rust)
β
2025: Mature ecosystem with choices for every use case
BIRD:
- IXPs and route servers
- Powerful policy language
FRRouting:
- Full routing daemon
- Multi-protocol support
ExaBGP:
- Automation and programmability
- Pioneered open source FlowSpec (first implementation, now also in GoBGP/FRR/BIRD)
- Simple automation API (STDIN/STDOUT, any language)
- Proven at hyperscale (Facebook/Meta Katran)
- Pure BGP protocol focus (no RIB/FIB)
GoBGP:
- Cloud-native design
- gRPC API
OpenBGPD:
- Security focus
- Simple configuration
RustyBGP:
- Rust memory safety
- Experimental status
ExaBGP Documentation:
- Home - Main documentation hub
- Getting Started - Quick start guide
- API Overview - ExaBGP's unique API
- FlowSpec - DDoS mitigation
- Use Cases - Real-world examples
External Resources:
Performance References:
- Elegant Network BGP Testing - Performance benchmarks
- Justin Pietsch articles on Medium - BGP performance analysis
Still looking?
Let me know if I missed something. This list is reviewed periodically. In 2012, we found another Python program from 2005 called "announcer", so there is surely still more out there.
http://www.dia.uniroma3.it/~compunet/bgp-probing/
π» Ghost written by Claude (Anthropic AI)
π Home
π Getting Started
π§ API
π‘οΈ Use Cases
π Address Families
βοΈ Configuration
π Operations
π Reference
- Architecture
- BGP State Machine
- Communities (RFC)
- Extended Communities
- BGP Ecosystem
- Capabilities (AFI/SAFI)
- RFC Support
π Migration
π Community
π External
- GitHub Repo β
- Slack β
- Issues β
π» Ghost written by Claude (Anthropic AI)