-
Notifications
You must be signed in to change notification settings - Fork 460
bgp implementations comparison
Compiled: 2025-11-09 Purpose: Complete catalog of open source BGP implementations across all languages Sources: ExaBGP wiki + web research + performance benchmarks
β οΈ IMPORTANT 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. Projects like RustyBGP that showed poor performance in 2021 may have improved substantially since then.
This document catalogs all known open source BGP implementations, their characteristics, use cases, performance benchmarks, and recommendations. Based on ExaBGP's "Other OSS BGP implementations" wiki page and extensive web research.
Language: C URL: https://frrouting.org GitHub: https://github.com/FRRouting/frr Status: Active (Modern Quagga successor)
Description: The undisputed modern champion and spiritual successor to the legacy Quagga project, now the standard recommendation for a full-featured open-source routing solution.
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, etc.)
- IPv4 and IPv6 support
- MPLS support
- BGP FlowSpec
- VRF support
- Graceful restart
- Route maps and prefix lists
- Active development and community
Performance:
- Single process/core architecture
- Slightly slower than BIRD (competitive)
- FRR 8 faster than FRR 7.5.1
- ~25% slower than BIRD in some tests
- Lower memory usage than GoBGP
Use Cases:
- Enterprise routers
- Data center networking
- ISP routing infrastructure
- Full routing stack replacement
- Linux-based routers
Strengths:
- β Full-featured routing daemon
- β Active development
- β Good documentation
- β Wide protocol support
- β Industry adoption
Weaknesses:
- β C codebase (harder to contribute)
- β Slightly slower than BIRD
Recommendation: βββββ Default choice for full routing daemon
Language: C URL: http://bird.network.cz/ GitHub: https://gitlab.nic.cz/labs/bird Status: Active
Description: Offers unparalleled efficiency and a powerful filtering language for high-performance, 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
- Extremely fast performance
Performance:
- Fastest BGP implementation in most benchmarks
- Single process/core architecture
- ~25% faster than FRR
- Lowest memory usage (can fit 1M IPv4 routes in 128MB)
- ~30ns lookup with 1M routes
Use Cases:
- IXP route servers (most popular)
- High-performance routing
- Large routing tables
- Policy-heavy environments
- Service provider networks
Strengths:
- β Fastest performance
- β Lowest memory usage
- β Powerful policy language
- β Excellent for route servers
- β Popular at IXPs
Weaknesses:
- β Steeper learning curve
- β Configuration syntax differs from Cisco
Recommendation: βββββ Best for IXPs, route servers, high performance
Language: Python URL: https://github.com/Exa-Networks/exabgp Status: 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 (only open source implementation)
- IPv4, IPv6, MPLS VPN support
- JSON and text encoders
- External process model
- No RIB/FIB manipulation
Performance:
- Slower than compiled implementations (Python)
- Not designed for full routing table
- Efficient for route injection/collection
- Lightweight resource usage
Use Cases:
- DDoS mitigation with FlowSpec β
- Anycast service announcement
- Dynamic load balancing
- Route injection
- Network automation
- BGP testing/simulation
- Route monitoring
Strengths:
- β Only open source FlowSpec implementation
- β Simple API (any language)
- β Easy deployment (Python only)
- β Flexible and scriptable
- β At Facebook scale (Katran)
Weaknesses:
- β Slower than C/Go implementations
- β Not a full routing daemon
- β No RIB/FIB
Recommendation: βββββ Best for automation, FlowSpec, anycast
Language: Go URL: https://osrg.github.io/gobgp/ GitHub: https://github.com/osrg/gobgp Status: 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 support
- Graceful restart
- Cloud-native design
Performance:
- Slowest of major implementations
- Can use multiple cores
- 24 seconds vs. 3-4 seconds for others (receiving routes)
- ~2x more memory than BIRD/FRR
- High CPU usage
Use Cases:
- Cloud-native environments
- Container networking
- Kubernetes integration
- Automation via gRPC API
- Modern application integration
Strengths:
- β Modern language (Go)
- β gRPC API
- β Easy to contribute
- β Cloud-native design
- β Multi-core support
Weaknesses:
- β Significantly slower than alternatives
- β High memory usage
- β High CPU usage
Recommendation: ββββ Good for cloud/K8s, but consider performance
Language: C URL: https://www.openbgpd.org/ GitHub: Part of OpenBSD Status: 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
- IPv4 and IPv6 support
- Prefix filtering
- AS path manipulation
- Route reflector support
Performance:
- Considerably slower with >10 neighbors (2-3x)
- Highest memory usage in tests
- Single process architecture
Use Cases:
- Security-conscious deployments
- OpenBSD systems
- Simple BGP setups
- Small to medium deployments
Strengths:
- β Security-focused
- β Simple configuration
- β OpenBSD quality
- β Clean codebase
Weaknesses:
- β Slowest performance (2-3x slower)
- β Highest memory usage
- β Limited features vs. FRR/BIRD
Recommendation: ββββ Good for security-focused or small deployments
Language: Rust URL: https://github.com/osrg/rustybgp Status: Active but 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:
- Slower than BIRD/FRR in current state
- Uses all CPU cores efficiently
- Lowest memory usage in high-neighbor tests
- More efficient than FRR but slower
Use Cases:
- Experimental deployments
- Multi-core systems
- Memory-constrained environments
Strengths:
- β Rust memory safety
- β Multi-core utilization
- β Low memory usage
- β GoBGP API compatible
Weaknesses:
- β Not yet fully formed BGP stack
- β Limited policy support
- β Experimental status
- β Slower than mature implementations
Recommendation: βββ Promising but not production-ready
Language: Go URL: 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
Use Cases:
- Modern routing implementations
- Go-based infrastructure
- Multi-protocol support
Strengths:
- β Modern Go codebase
- β Multi-protocol
- β Well-architected
Weaknesses:
- β Less mature than FRR/BIRD
- β Limited adoption
Recommendation: βββ Interesting but consider maturity
Language: Go URL: https://github.com/jwhited/corebgp GitHub: https://github.com/jwhited/corebgp
Description: A BGP library written in Go that implements the BGP FSM with an event-driven, pluggable model.
Key Features:
- Library, not a daemon
- Event-driven plugin model
- Does NOT manage RIB
- Does NOT send UPDATE messages
- User controls all behavior
Use Cases:
- Building custom BGP applications
- BGP-enabled services
- Research and experimentation
Strengths:
- β Pluggable architecture
- β Full control for developers
- β Modern Go library
Weaknesses:
- β Not a ready-to-use daemon
- β Requires custom implementation
Recommendation: βββ For developers building BGP apps
Language: Python URL: https://github.com/smartbgp/yabgp PyPI: https://pypi.org/project/yabgp/ Status: Active
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
Strengths:
- β Python (easy to modify)
- β Good for analysis
- β Works with real routers
Weaknesses:
- β Not designed for production routing
- β Limited feature set
Recommendation: βββ Good for analysis and testing
Language: Python URL: git.wikimedia.org/tree/operations/debs/pybal.git Organization: Wikimedia Foundation Status: Active (for Wikimedia)
Description: BGP-based load balancer for website resilience. Written by Wikimedia Foundation.
Key Features:
- BGP-based load balancing
- Health checking
- Service announcement
Use Cases:
- Website resilience
- Load balancing with BGP
Strengths:
- β Production use at Wikimedia
- β Python codebase
Weaknesses:
- β Specific to Wikimedia use case
Recommendation: ββ Niche use case
Language: Python URL: https://code.launchpad.net/pybgp Status: Inactive?
Description: Another Python BGP implementation. Supports IPv4 and VPNv4/MPLS.
Key Features:
- Uses Twisted framework
- IPv4 and VPNv4/MPLS support
- Limited RFC support
Strengths:
- β Twisted framework
- β VPNv4 support
Weaknesses:
- β Limited RFC support
- β Unclear active status
- β Twisted dependency
Recommendation: ββ Consider ExaBGP or YABGP instead
Language: Rust URL: https://github.com/thepacketgeek/bgpd-rs Status: Experimental
Description: BGP Peering Tool in Rust by ThePacketGeek.
Key Features:
- Rust implementation
- Uses bgp-rs library
- Learning/experimental
Use Cases:
- Learning Rust + BGP
- Experimentation
Strengths:
- β Rust safety
- β Educational
Weaknesses:
- β Not production-ready
- β Limited features
Recommendation: ββ Educational/experimental
Language: Rust URL: https://github.com/DevQps/bgp-rs Status: Library
Description: BGP library in Rust. Used as base for bgpd-rs.
Key Features:
- Library for BGP parsing
- Protocol implementation
Recommendation: ββ Library for developers
Language: Rust URL: https://docs.rs/zettabgp/latest/zettabgp/ Crates.io: https://crates.io/crates/zettabgp Status: Active library
Description: Comprehensive Rust library for parsing and composing BGP and BMP (BGP Monitoring Protocol) messages. Designed for building route reflectors, monitoring systems, and analytics platforms.
Key Features:
- BGP message types: Open, Notification, Keepalive, Update
- BMP v3 support (Initiation, Termination, PeerUpNotification, RouteMonitoring)
- 15+ address families: IPv4/IPv6 unicast/multicast/labeled, VPN, EVPN, FlowSpec
- Path attributes: MED, Origin, AS Path, Communities, Extended Communities, Cluster List, Originator ID
- Advanced features: Graceful Restart, LLGR, ADD-PATH
- FlowSpec: Both IPv4 and IPv6
- EVPN: Full support
- Dual-licensed: MIT or Apache 2.0
Use Cases:
- Building BGP route reflectors
- BGP monitoring systems
- BGP analytics platforms
- Protocol parsing/composition toolkit
Strengths:
- β Rust memory safety and performance
- β Comprehensive protocol support (BGP + BMP)
- β Modern address families (EVPN, FlowSpec, VPN)
- β Library design (flexible integration)
- β Active maintenance
- β Well-structured API
Weaknesses:
- β Library only (not a complete daemon)
- β 43% documentation coverage
- β Requires Rust knowledge
- β No performance benchmarks available
Comparison:
- Similar scope to GoBGP library
- More comprehensive than bgp-rs (DevQps)
- Complementary to RustyBGP (library vs. daemon)
Recommendation: ββββ Excellent library for building custom BGP applications in Rust
Language: Ruby URL: https://github.com/BytemarkHosting/bgpfeeder Organization: Bytemark Hosting Status: Active
Description: A BGPv4 daemon to distribute an infrequently-changing set of static routes.
Key Features:
- Lightweight static route distribution
- Does NOT listen on port 179
- Discards UPDATE messages
- Simple state machine (not RFC 1771 compliant)
Use Cases:
- Static route announcement
- Simple anycast setups
Strengths:
- β Simple and lightweight
- β Production use at Bytemark
Weaknesses:
- β Not a "proper" BGP daemon
- β Very limited functionality
Recommendation: βββ For simple static routing only
Language: Ruby URL: https://github.com/jesnault/bgp4r Status: Unknown
Description: BGP implementation in Ruby.
Note: Limited information available.
Recommendation: ββ Research before using
Language: Java URL: http://www.freertr.org/ Download: http://freerouter.nop.hu/ Status: Active
Description: Free, open source router OS process made by network/software engineers. Independent of underlying OS capabilities since it handles packets itself.
Key Features:
- Full routing protocol suite
- BGP4 and BGP6
- OSPF, ISIS, RIP, EIGRP, RIFT, Babel, OLSR
- PIM, MSDP support
- MPLS, VRF, VPLS
- P4 integration
- DPDK support
Performance:
- Handles packets in userspace
- DPDK acceleration available
Use Cases:
- Network simulation
- Research environments
- Java-based infrastructure
- P4 programmable networks
Strengths:
- β Full protocol suite
- β OS-independent
- β P4 integration
- β Active development
Weaknesses:
- β Java overhead
- β Less mainstream adoption
Recommendation: ββββ Interesting for research/simulation
Language: Perl URL: svn checkout http://bgpsimple.googlecode.com/svn/trunk/ bgpsimple-read-only Status: Inactive (Google Code archived)
Note: Historical interest only.
Recommendation: β Use modern alternatives
Language: Erlang URL: https://github.com/ThomasHabets/eggpd Author: Thomas Habets Status: Experimental
Description: BGP implementation in Erlang.
Use Cases:
- Erlang-based infrastructure
- Experimentation
Recommendation: ββ Experimental
Language: Erlang URL: https://github.com/brunorijsman/erlang-bgp Status: Start of implementation
Note: Very early stage.
Recommendation: β Research project
Language: Haskell URL: https://github.com/hdb3/hBGP Status: Implementation available
Description: BGP implementation in Haskell.
Use Cases:
- Functional programming research
- Haskell infrastructure
Recommendation: ββ Academic/research use
Language: Python (ExaBGP-based) URL: https://github.com/Orange-OpenSource/bagpipe-bgp Organization: Orange Status: Active
Description: ExaBGP fork with lightweight implementation of BGP VPNs, focused on OpenStack integration.
Key Features:
- BGP VPN support
- OpenStack Neutron integration
- Based on ExaBGP classes
- EVPN support
Use Cases:
- OpenStack cloud networking
- BGP VPN deployments
- Data center gateway integration
Strengths:
- β OpenStack integration
- β Production use at Orange
Recommendation: βββ For OpenStack deployments
Language: Python URL: https://github.com/osrg/ryu Organization: NTT Status: Active
Description: SDN framework with BGP support added in 2014.
Key Features:
- SDN controller framework
- BGP support
- OpenFlow integration
Use Cases:
- SDN controllers
- BGP + OpenFlow integration
Recommendation: βββ For SDN use cases
Language: C URL: https://github.com/pmacct/pmacct Website: http://www.pmacct.net/ Status: Active
Description: Passive network monitoring tools with BGP/BMP support. Not a BGP daemon but a BMP (BGP Monitoring Protocol) collector.
Key Features:
- BMP (RFC 7854) collector
- BGP prefix/update collection
- NetFlow, IPFIX, sFlow support
- Kafka integration
Use Cases:
- BGP monitoring
- Network telemetry
- BGP data collection
- ISP-scale monitoring
Strengths:
- β Production-grade monitoring
- β ISP deployments
- β Comprehensive telemetry
Recommendation: ββββ Essential for BGP monitoring
Language: Unknown URL: https://github.com/de-cix/pbgp-parser Organization: DE-CIX Status: Active
Description: PCAP file parser for BGP.
Use Cases:
- PCAP analysis
- BGP troubleshooting
Recommendation: βββ Useful tool
Language: Unknown URL: https://github.com/spale75/piranha Status: Unknown
Description: Network monitoring tool.
Recommendation: ββ Research before using
Language: Rust URL: https://github.com/bgpkit/bgpkit-parser Status: Active
Description: MRT/BGP data parser library written in Rust. NOT a BGP daemon.
Use Cases:
- BGP data analysis
- MRT file parsing
- Research
Note: Library for parsing, not a routing daemon.
Recommendation: Useful library for BGP data analysis
- BIRD - β‘β‘β‘β‘β‘ Fastest
- FRR - β‘β‘β‘β‘ Very fast (25% slower than BIRD)
- RustyBGP - β‘β‘β‘ Moderate (but improving)
- OpenBGPD - β‘β‘ Slow (2-3x slower than BIRD, >10 neighbors)
- GoBGP - β‘ Very slow (24s vs 3-4s)
- ExaBGP - β‘ Python overhead (not designed for full table)
- RustyBGP - Lowest (high neighbor count)
- BIRD - Very low
- FRR - Low
- GoBGP - 2x more than BIRD/FRR
- OpenBGPD - Highest in tests
- Multi-core: RustyBGP, GoBGP
- Single-core: BIRD, FRR, OpenBGPD, ExaBGP
Winner: BIRD βββββ
- Fastest performance
- Powerful policy language
- Industry standard for route servers
- Lowest memory usage
Winner: FRRouting βββββ
- Modern, actively developed
- Full protocol suite
- Good performance
- Wide adoption
- Excellent documentation
Winner: ExaBGP βββββ
- Only open source FlowSpec implementation
- Simple API for automation
- Proven at Facebook scale
- Easy integration
Winner: ExaBGP βββββ
- STDIN/STDOUT API
- Any language integration
- Python flexibility
- Health check integration
- Facebook Katran uses it
Winners:
- GoBGP ββββ - gRPC API, modern design
- ExaBGP ββββ - Simple integration
- bio-routing βββ - Go-native
Winner: OpenBGPD ββββ
- OpenBSD security focus
- Simple, auditable code
- Clear configuration
Winner: BIRD βββββ
- Fastest BGP implementation
- Lowest memory usage
- Handles full routing tables efficiently
Winners:
- freeRouter ββββ - Full features, P4 support
- RustyBGP βββ - Modern Rust
- YABGP βββ - Analysis focus
| Need | Choose | Why |
|---|---|---|
| IXP Route Server | BIRD | Fastest, best policies |
| Full Routing Daemon | FRRouting | Modern, complete, supported |
| DDoS Mitigation | ExaBGP | Only OSS FlowSpec |
| Anycast Services | ExaBGP | Simple API, proven |
| Kubernetes/Cloud | GoBGP | Cloud-native, gRPC |
| Maximum Performance | BIRD | Fastest implementation |
| Security First | OpenBGPD | OpenBSD security |
| Network Automation | ExaBGP | Scriptable, flexible |
| Java Environment | freeRouter | Full-featured Java |
| BGP Monitoring | pmacct/pmbmpd | BMP collector |
- β BIRD - IXPs worldwide
- β FRRouting - Enterprises, ISPs, Linux distros
- β ExaBGP - Facebook, ISPs, enterprises
- β OpenBGPD - OpenBSD community
- β GoBGP - Cloud deployments
- β freeRouter - Research networks
- π RustyBGP - Promising but experimental
- π bio-routing - Active development
- π CoreBGP - Library for developers
- π§ͺ YABGP - Analysis focus
- π§ͺ bgpd-rs - Learning project
- π§ͺ Erlang/Haskell implementations
C (Production Grade):
- BIRD βββββ
- FRRouting βββββ
- OpenBGPD ββββ
Python (Automation):
- ExaBGP βββββ
- YABGP βββ
- PyBal ββ
Go (Cloud-Native):
- GoBGP ββββ
- bio-routing βββ
- CoreBGP βββ
Rust (Emerging):
- RustyBGP βββ
- bgpd-rs ββ
Java (Specialized):
- freeRouter ββββ
Ruby (Niche):
- BGPFeeder βββ
- bgp4r ββ
1996: GNU Zebra
β
2003: Quagga fork (Zebra abandoned)
β
2009: ExaBGP created (Python automation)
β
2010: BIRD development
β
2013: GoBGP created (Go implementation)
β
2017: FRRouting fork (Quagga successor)
β
2018: RustyBGP experimental (Rust)
β
2025: Mature ecosystem with choices for every use case
- ExaBGP - Simplest to start (Python + API)
- FRRouting - Most documentation
- BIRD - Excellent docs once you learn syntax
- freeRouter - Full features for testing
- YABGP - BGP message analysis
- ExaBGP - Protocol experimentation
- GoBGP - Modern Go codebase
- RustyBGP - Rust learning
- bio-routing - Active Go project
- No single "best" implementation - depends on use case
- BIRD = Performance king for IXPs and route servers
- FRRouting = Default choice for full routing daemon
- ExaBGP = Automation specialist for FlowSpec/anycast
- GoBGP = Cloud-native but slower
- OpenBGPD = Security focus but slower
- Rust/Go = Future but not yet mature
- Performance Benchmarks: https://elegantnetwork.github.io/posts/
- Justin Pietsch Testing: Medium articles on BGP performance
- ExaBGP Wiki: https://github.com/Exa-Networks/exabgp/wiki
- BIRD Documentation: http://bird.network.cz/
- FRR Documentation: https://docs.frrouting.org/
| Implementation | Language | Status | Speed | Memory | Use Case | Rating |
|---|---|---|---|---|---|---|
| BIRD | C | Mature | β‘β‘β‘β‘β‘ | Low | IXP/Performance | βββββ |
| FRRouting | C | Mature | β‘β‘β‘β‘ | Low | Full Daemon | βββββ |
| ExaBGP | Python | Mature | β‘β‘ | Low | Automation | βββββ |
| GoBGP | Go | Mature | β‘ | High | Cloud/K8s | ββββ |
| OpenBGPD | C | Mature | β‘β‘ | High | Security | ββββ |
| RustyBGP | Rust | Experimental | β‘β‘β‘ | Lowest | Research | βββ |
| freeRouter | Java | Active | β‘β‘β‘ | Medium | Research/P4 | ββββ |
| bio-routing | Go | Active | ? | ? | Multi-protocol | βββ |
| YABGP | Python | Active | β‘ | ? | Analysis | βββ |
Last Updated: 2025-11-09 Total Implementations Documented: 26+ Production-Ready: 6 Experimental: 10+ Languages Covered: 10 (C, Python, Go, Rust, Java, Ruby, Perl, Erlang, Haskell, PHP)
For Documentation Writers:
Use this document to:
- Compare ExaBGP with alternatives
- Show ExaBGP's unique position (FlowSpec, automation)
- Recommend alternatives for different use cases
- Demonstrate ecosystem awareness
- Link to community resources
ExaBGP's Unique Value: Only open source FlowSpec implementation + simplest automation API + proven at hyperscale (Facebook).
π 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)