-
Notifications
You must be signed in to change notification settings - Fork 460
Breaking Changes
Complete reference of breaking changes across ExaBGP versions
This document lists all breaking changes in ExaBGP's history to help you understand version compatibility and plan upgrades.
- What is a Breaking Change?
- ExaBGP 6.0.0 (main branch)
- ExaBGP 5.0.0 (Current Stable/LTS)
- ExaBGP 4.x Series
- ExaBGP 3.x β 4.x
- Summary Table
- Compatibility Matrix
A breaking change is a modification that requires users to update their:
- API programs (code changes)
- Configuration files (syntax changes)
- Command-line scripts (argument changes)
- Integration workflows (behavioral changes)
Not breaking:
- Bug fixes
- New features (when opt-in)
- Performance improvements
- Internal refactoring
Version: ExaBGP 5.x β 6.0.0 Release: Development (main branch) Severity: π‘ MEDIUM - Breaking changes, but migration tools available
ExaBGP 6.0.0 brings modernization with the async reactor and Python 3.12+ requirement.
ExaBGP 5.x:
- β Python 3.8+ minimum
ExaBGP 6.0.0:
- β Python 3.7-3.11 dropped
- β Python 3.12+ minimum
- β Python 3.13 and 3.14 supported
Who is affected: Everyone running Python < 3.12
Migration required: Upgrade Python before upgrading ExaBGP
ExaBGP 5.x:
- Generator-based reactor (default)
ExaBGP 6.0.0:
- Async/await-based reactor (default and only mode)
- No separate legacy reactor toggle option
- Generators still work inside the async reactor (backward compatible)
Who is affected: All users (most won't notice any difference)
Migration required: Test workloads. Generator-based callbacks continue to work unchanged.
ExaBGP 5.x:
{"bgp-ls": {"ip": "10.134.2.88"}}ExaBGP 6.0.0:
{"bgp-ls": {"prefix": "10.134.2.88/30"}}Changes:
- Key renamed from
iptoprefix - Now includes prefix length in CIDR notation
ExaBGP 5.x:
{"bgp-ls": {"sr-adj": {...}, "sr-adj": {...}}}ExaBGP 6.0.0:
{"bgp-ls": {"sr-adjs": [{...}, {...}]}}Changes:
- Key renamed from
sr-adjtosr-adjs - Now outputs as array of objects (valid JSON)
ExaBGP 5.x:
{"bgp-ls": {"remote-router-id": "192.0.2.1", "remote-router-id": "2001:db8::1"}}ExaBGP 6.0.0:
{"bgp-ls": {"remote-router-ids": ["192.0.2.1", "2001:db8::1"]}}Changes:
- Key renamed from
remote-router-idtoremote-router-ids - IPv4 and IPv6 merged into single array (valid JSON)
Who is affected: Programs using JSON encoder with BGP-LS
Migration required: Update field names in parsers
While not breaking changes, 6.0.0 adds major features:
- β Async Reactor - Modern async/await event loop
- β Shell Completion - Bash, Zsh, Fish support
- β Enhanced CLI - Tab completion, JSON pretty-printing
- β
Health Monitoring -
pingandstatusAPI commands - β
Migration Tool -
exabgp migratefor automatic conversion - β Type Annotations - Better IDE support
See 5.x β 6.0.0 Migration Guide for complete details.
Version: ExaBGP 4.x β 5.0.0 Release: November 2024 Severity: π΄ HIGH - Multiple breaking changes requiring careful migration
ExaBGP 5.0.0 introduces SIGNIFICANT breaking changes compared to 4.x. This is the largest release in ExaBGP history (871 commits, 920 files changed).
ExaBGP 4.x:
- Python 2.7 (deprecated but supported)
- Python 3.6+
ExaBGP 5.0.0:
- β Python 2.x completely removed
- β Python 3.6-3.7 no longer supported
- β Python 3.8+ minimum (3.9+ recommended)
- β Python 3.13 tested and supported
Who is affected: Everyone running Python < 3.8
Migration required: Upgrade Python before upgrading ExaBGP
ExaBGP 4.x:
{"attribute": {"as-path": [65001, 65002, 65003]}}ExaBGP 5.0.0:
{"attribute": {"as-path": "[ 65001 65002 65003 ]"}}Important: The string format encodes AS_PATH segment types with different brackets:
-
( )= AS_SEQUENCE (most common - ordered list of ASNs) -
[ ]= AS_SET (unordered set of ASNs, used in aggregation) -
{( )}= CONFED_SEQUENCE (confederation sequence) -
{[ ]}= CONFED_SET (confederation set)
Example with multiple segment types:
{"attribute": {"as-path": "[ 65001 65002 ] ( 65003 65004 )"}}This represents an AS_SET followed by an AS_SEQUENCE.
Who is affected: Programs using JSON encoder and parsing AS-PATH
Migration required: Update JSON parsers to:
- Handle AS-PATH as string instead of array
- Parse bracket types to identify segment types (if needed for your use case)
ExaBGP 4.x:
-
sr_capability_flags(underscore) -
interface-address(singular) -
neighbor-address(singular)
ExaBGP 5.0.0:
-
sr-capability-flags(hyphen) -
interface-addresses(plural) -
neighbor-addresses(plural)
Who is affected: Programs using JSON encoder with BGP-LS
Migration required: Update field names in parsers
-
4.x:
route refresh(space) -
5.0.0:
route-refresh(hyphenated)
-
4.x:
not-a-fragment -
5.0.0:
!is-fragment
tcp.attempts is an internal/debugging option, not recommended for production use.
-
4.x: Environment variable
exabgp.tcp.once=true -
5.0.0: Environment variable
exabgp.tcp.attempts=1(tcp.once removed)
Who is affected: Users setting the exabgp.tcp.once environment variable
Migration required: Update environment variable from exabgp.tcp.once to exabgp.tcp.attempts
Correct usage: Set as environment variable (export exabgp.tcp.attempts=1) or in INI config [exabgp.tcp] section. NOT as a neighbor-level tcp { } block.
ExaBGP 4.x:
- Type-1 (Label-Index) β
- Type-2 (deprecated)
β οΈ - Type-3 (Originator SRGB) β
- Type-4 (deprecated)
β οΈ
ExaBGP 5.0.0:
- Type-1 (Label-Index) β
- Type-2 REMOVED β
- Type-3 (Originator SRGB) β
- Type-4 REMOVED β
- Type-5 (SRv6 Locator) β NEW
- Type-6 (SRv6 Endpoint) β NEW
Who is affected: Users of Prefix-SID Type-2 or Type-4
Migration required: Migrate to Type-1, Type-3, Type-5, or Type-6
ExaBGP 4.x: Sent by default ExaBGP 5.0.0: NOT sent by default (must explicitly enable)
Who is affected: Users relying on hostname capability
Migration required: Add explicit capability { hostname enable; }
ExaBGP 4.x: Facility syslog
ExaBGP 5.0.0: Facility daemon
Who is affected: Syslog parsers and filters
Migration required: Update syslog configuration
While not breaking changes, 5.0.0 adds major features:
- β SRv6 - Complete Segment Routing over IPv6
- β BGP-MUP - Mobile User Plane SAFI
- β RFC 9072 - Extended Optional Parameters Length
- β ACK Runtime Control - disable-ack, enable-ack, silence-ack commands
- β
Neighbor Wildcards -
neighbor * announce ... - β Security Fixes - TOCTOU vulnerability fixed
- β Official Docker Images - ghcr.io/exa-networks/exabgp:5.0.0
See 4.x β 5.0.0 Migration Guide for complete details.
ExaBGP 4.x has maintained API and configuration compatibility throughout the 4.0 β 4.2.x series.
Stable versions:
- 4.0.x β 4.1.x β 4.2.x (All compatible)
- No breaking changes in API
- No breaking changes in configuration syntax
- Safe to upgrade within 4.x series
Minor changes (non-breaking):
- New features added (opt-in)
- Bug fixes
- Performance improvements
- New address family support (EVPN, BGP-LS, etc.)
Version: ExaBGP 3.4.x β 4.0.0 Release: ~2017 Severity: π‘ MODERATE - Configuration and some API changes
ExaBGP 4.x introduced configuration syntax changes requiring file updates.
Impact: Configuration files need manual updates when upgrading from 3.x
β Affected:
- Configuration files from 3.x
- Some API command syntax
- JSON output format consumers
β Not affected:
- New deployments starting with 4.x
- Programs written for 4.x+
Command-line arguments and behavior changed between 3.x and 4.x.
Impact: Shell scripts invoking ExaBGP may need updates
JSON encoder output format changed between 3.x and 4.x.
Impact: Programs parsing JSON output need updates
β Affected:
- Programs using
encoder json - Scripts parsing ExaBGP JSON output
- Monitoring integrations reading JSON
Upgrade path: 3.x β 4.2.x β 5.x (LTS - recommended)
Resources:
- Version Differences - Detailed version comparison
- Configuration examples in
/etc/exabgp/directory use 4.x/5.x syntax
Note: ExaBGP 3.x is deprecated and no longer maintained. All users should upgrade to 5.x (LTS).
| Version | Change | Type | Severity | Workaround Available? |
|---|---|---|---|---|
| 5.xβ6.0.0 | Python 3.12+ required | Runtime | π΄ Critical | β No (upgrade Python) |
| 5.xβ6.0.0 | Async reactor default | Runtime | π’ Low | β Yes (generators still work) |
| 5.xβ6.0.0 | BGP-LS ip β prefix
|
API Output | π΄ High | β No (parser updates) |
| 5.xβ6.0.0 | BGP-LS sr-adj β sr-adjs
|
API Output | π΄ High | β No (parser updates) |
| 5.xβ6.0.0 | BGP-LS remote-router-id β remote-router-ids
|
API Output | π΄ High | β No (parser updates) |
| 4.xβ5.0.0 | Python 3.8+ required | Runtime | π΄ Critical | β No (upgrade Python) |
| 4.xβ5.0.0 | AS-PATH JSON format | API Output | π΄ High | β No (parser updates) |
| 4.xβ5.0.0 | BGP-LS field names | API Output | π΄ High | β No (parser updates) |
| 4.xβ5.0.0 | Config syntax changes | Config | π‘ Medium | β No (manual updates) |
| 4.xβ5.0.0 | Prefix-SID Type-2/4 removed | Protocol | π‘ Medium | |
| 4.x | (No breaking changes) | - | - | - |
| 3.xβ4.x | Configuration syntax | Config | π‘ Moderate | β No (manual migration) |
| 3.xβ4.x | CLI arguments | CLI | π‘ Moderate | β No (script updates) |
| 3.xβ4.x | JSON format | API Output | π‘ Moderate | β No (parser updates) |
| API Program Written For | Runs on 3.x | Runs on 4.x | Runs on 5.0.0 | Runs on 6.0.0 |
|---|---|---|---|---|
| ExaBGP 3.x | β Yes | |||
| ExaBGP 4.x (Text API) | β No | β Yes | β Yes | β Yes |
| ExaBGP 4.x (JSON API) | β No | β Yes | β No (AS-PATH changed) | β No (AS-PATH changed) |
| ExaBGP 5.x (Text API) | β No | β Yes | β Yes | β Yes |
| ExaBGP 5.x (JSON API) | β No | β No | β Yes | |
| ExaBGP 6.0.0 (Text API) | β No | β Yes | β Yes | β Yes |
| ExaBGP 6.0.0 (JSON API) | β No | β No | β Yes |
Important:
- JSON API programs from 4.x will NOT work on 5.0.0+ without updates (AS-PATH format changed)
- JSON API programs from 5.x using BGP-LS will NOT work on 6.0.0 without updates (field names changed)
- Text API programs are compatible across versions
| Config Written For | Works on 3.x | Works on 4.x | Works on 5.0.0 | Works on 6.0.0 |
|---|---|---|---|---|
| ExaBGP 3.x | β Yes | β No | β No | β No |
| ExaBGP 4.x | β No | β Yes | ||
| ExaBGP 5.x | β No | β Yes | β Yes | |
| ExaBGP 6.0.0 | β No | β Yes | β Yes |
Important:
- 4.x configs work on 5.0.0+ with minor updates:
route refreshβroute-refresh,not-a-fragmentβ!is-fragment - 5.x configs work on 6.0.0 without changes
- Use
exabgp migrate confto automatically convert configurations
Migration recommended for new features. 6.0.0 has some breaking changes.
- Verify Python version (must be 3.12+)
-
Run migration tool (
exabgp migrate conf -f 5 -t main) - Update BGP-LS JSON parsers (if using BGP-LS with JSON)
- Test async reactor (only mode in 6.0.0)
- Test thoroughly in staging environment
- Deploy to production with rollback plan
Estimated effort:
- Text API only: 30 minutes (test async reactor)
- JSON API (no BGP-LS): 30 minutes
- JSON API (with BGP-LS): 2-4 hours (parser updates)
Resources: ExaBGP 5.x β 6.0.0 Migration Guide
- Update configuration files (manual syntax changes required)
- Test in non-production environment
- Update API programs if using JSON parser
- Update shell scripts if using CLI
- Deploy to production
Resources:
- 3.x β 4.x Migration Guide - Complete step-by-step guide
- Version Differences - Detailed comparison
Migration required. 5.0.0 has breaking changes from 4.x.
- Verify Python version (must be 3.8+)
- Update configuration syntax (route-refresh, FlowSpec)
- Update JSON API parsers (AS-PATH, BGP-LS field names)
- Check for deprecated features (Prefix-SID Type-2/4)
- Update environment variables (exabgp.tcp.once β exabgp.tcp.attempts, if used)
- Test thoroughly in staging environment
- Deploy to production with rollback plan
Estimated effort:
- Text API only: 1-2 hours (config updates)
- JSON API: 4-8 hours (config + parser updates)
Resources: ExaBGP 4.x β 5.0.0 Migration Guide
Not recommended. Use multi-step migration:
- 3.x β 4.x: Update config, test thoroughly
- 4.x β 5.x: Update Python to 3.8+, JSON parsers
- 5.x β 6.0.0: Update Python to 3.12+, BGP-LS parsers
Why multi-step?
- Multiple breaking changes across versions
- Better to isolate issues and test separately
- Easier rollback if problems occur
Not recommended. Use two-step migration:
- 3.x β 4.x: Update config, test thoroughly (see 3.x β 4.x guide)
- 4.x β 5.0.0: Update Python, config, JSON parsers (see 4.x β 5.0.0 guide)
Why two steps?
- Both upgrades have breaking changes
- Better to isolate issues and test separately
- Easier rollback if problems occur
Recommended: Upgrade directly to 5.0.0 (new LTS) or via 4.x for staged migration.
- 6.0.0 (main branch): Development branch with latest features
- 5.0.0: LTS (Long-Term Support) - stable, production recommended
- 4.x branch: Maintenance mode - critical fixes only, no new features
- Major versions: Reserved for breaking changes
- GitHub Releases: https://github.com/Exa-Networks/exabgp/releases
- CHANGELOG: Check repository CHANGELOG.rst
- Slack: https://exabgp.slack.com/
- Mailing List: See GitHub repo
Checklist:
- Read release notes for your target version
- Check this document for breaking changes
-
Test in isolated environment:
- Configuration file loads without errors
- BGP sessions establish correctly
- API programs work as expected
- No unexpected behavior changes
- Run parallel (new version alongside old, if possible)
- Monitor logs for errors after upgrade
- Have rollback plan ready
Before upgrading production:
-
Document current version:
exabgp --version - Backup configuration files
- Test downgrade procedure in non-production
- Verify rollback works end-to-end
- Document rollback steps for operations team
| Term | Meaning | Example |
|---|---|---|
| Major version | Breaking changes possible | 3.x β 4.x β 5.0.0 |
| Minor version | New features, backwards-compatible | 4.0 β 4.1 β 4.2 |
| Patch version | Bug fixes only | 4.2.0 β 4.2.1 β 4.2.22 or 5.0.0 β 5.0.1 |
ExaBGP follows semantic versioning principles:
- Major version bump = breaking changes
- Minor version bump = new features (compatible)
- Patch version bump = bug fixes (compatible)
- Migration Guide - Main migration entry page
- Migration from 5.x to 6.0.0 - Complete 6.0.0 migration guide
- Migration from 4.x to 5.0.0 - Complete 5.0.0 migration guide
- Version Differences - Complete version comparison
- API Overview - API architecture and ACK feature
- Common Pitfalls - Common mistakes (including version issues)
- Debugging Guide - Troubleshooting after upgrades
- Production Best Practices - Safe deployment strategies
π» 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)