Description
When two routers belong to different BGP confederations (R2 in confed 65000, R3 in confed 65001) and peer externally, FRR R2 receives a route from an external origin (AS 65201) but fails to advertise it to R3. Both GoBGP and Batfish propagate the route correctly with AS_PATH 65000 65201 at R3, prepending the confederation identifier as required by RFC 5065 §4.
Topology: ExaBGP (AS 65201) → R2 (Member-AS 101, Confed ID 65000) → R3 (Member-AS 201, Confed ID 65001)
Version
How to reproduce
ExaBGP config (conf.ini):
process announce-routes {
run python exabgp/example.py;
encoder json;
}
neighbor 6.0.0.2 {
router-id 6.0.0.3;
local-address 6.0.0.3;
local-as 65201;
peer-as 65000;
api {
processes [announce-routes];
}
}
ExaBGP route announcement (example.py):
announce route 100.0.0.0/8 next-hop self
R2 config (frr.conf):
router bgp 101
no bgp ebgp-requires-policy
bgp confederation identifier 65000
neighbor 6.0.0.3 remote-as 65201
neighbor 8.0.0.3 remote-as 65001
neighbor 8.0.0.3 route-map SET_LOCAL_PREF out
exit
!
route-map SET_LOCAL_PREF permit 10
set local-preference 100
exit
!
R3 config (frr.conf):
router bgp 201
no bgp ebgp-requires-policy
bgp confederation identifier 65001
neighbor 8.0.0.2 remote-as external
exit
!
Expected behavior
R2 should advertise the route to R3 with the confederation identifier (65000) prepended to the AS_PATH:
- R2 RIB: route present, AS_PATH =
65201
- R3 RIB: route present, AS_PATH =
65000 65201
Cross-validation:
- GoBGP: R2 ✅ (AS_PATH:
65201), R3 ✅ (AS_PATH: 65000 65201)
- Batfish: R2 ✅ (AS_PATH:
65201), R3 ✅ (AS_PATH: 65000 65201)
Actual behavior
FRR:
- R2 RIB: route present ✅ (AS_PATH:
65201)
- R3 RIB: no route ❌
R2 accepts the route from ExaBGP but does not propagate it to R3 across the inter-confederation eBGP session. Both GoBGP and Batfish successfully propagate in the same scenario.
Additional context
No response
Checklist
Description
When two routers belong to different BGP confederations (R2 in confed 65000, R3 in confed 65001) and peer externally, FRR R2 receives a route from an external origin (AS 65201) but fails to advertise it to R3. Both GoBGP and Batfish propagate the route correctly with AS_PATH
65000 65201at R3, prepending the confederation identifier as required by RFC 5065 §4.Topology: ExaBGP (AS 65201) → R2 (Member-AS 101, Confed ID 65000) → R3 (Member-AS 201, Confed ID 65001)
Version
How to reproduce
ExaBGP config (conf.ini):
ExaBGP route announcement (example.py):
R2 config (frr.conf):
R3 config (frr.conf):
Expected behavior
R2 should advertise the route to R3 with the confederation identifier (65000) prepended to the AS_PATH:
6520165000 65201Cross-validation:
65201), R3 ✅ (AS_PATH:65000 65201)65201), R3 ✅ (AS_PATH:65000 65201)Actual behavior
FRR:
65201)R2 accepts the route from ExaBGP but does not propagate it to R3 across the inter-confederation eBGP session. Both GoBGP and Batfish successfully propagate in the same scenario.
Additional context
No response
Checklist