Hi David,
Thank you for your reply.
I am responding on behalf of my colleague Thomas Alfroy, who performed the
debugging.
I tried to reproduce the issue once more to ensure that I had not made any
configuration mistakes. I am now using the following configuration on the BIRD
v3.2.2 router:
log syslog all;
log stderr all;
log "/var/log/bird-bmp.log" all;
timeformat log iso long us;
router id 192.168.222.53;
protocol device {
}
protocol static announced_prefixes {
ipv4;
route 13.1.0.0/24 blackhole;
route 13.2.0.0/24 blackhole;
route 13.3.0.0/24 blackhole;
route 13.4.0.0/24 blackhole;
route 13.5.0.0/24 blackhole;
}
protocol bgp peer_192_168_222_52 {
local as 10;
neighbor 192.168.222.52 as 10;
source address 192.168.222.53;
ipv4 {
import all;
export all;
import table on;
next hop self;
};
}
protocol bgp peer_192_168_222_54 {
local as 10;
neighbor 192.168.222.54 as 10;
source address 192.168.222.53;
ipv4 {
import all;
export all;
import table on;
next hop self;
};
}
protocol bmp bmp1 {
debug all;
station address ip 192.168.222.1 port 4568;
monitoring rib in pre_policy;
tx buffer limit 64;
}
This BIRD instance runs on a VM with the IP address 192.168.222.53. Two
FRRouting instances connect to it.
The first FRRouting instance runs on 192.168.222.52 with the following
configuration:
log syslog informational
!
ip nht resolve-via-default
!
router bgp 10
bgp router-id 192.168.222.52
!
no bgp network import-check
!
neighbor 192.168.222.51 remote-as 1000
neighbor 192.168.222.51 ebgp-multihop 255
neighbor 192.168.222.51 next-hop-self
neighbor 192.168.222.51 route-map ALLOW-ALL in
neighbor 192.168.222.51 route-map ALLOW-ALL out
!
neighbor 192.168.222.53 remote-as 10
neighbor 192.168.222.53 next-hop-self
neighbor 192.168.222.53 route-map ALLOW-ALL in
neighbor 192.168.222.53 route-map ALLOW-ALL out
!
address-family ipv4 unicast
network 12.1.0.0/24
network 12.2.0.0/24
network 12.3.0.0/24
network 12.4.0.0/24
network 12.5.0.0/24
exit-address-family
!
route-map ALLOW-ALL permit 10
!
end
The second FRRouting instance runs on 192.168.222.54 with the following
configuration:
log syslog informational
!
ip nht resolve-via-default
!
router bgp 10
bgp router-id 192.168.222.54
!
no bgp network import-check
!
neighbor 192.168.222.53 remote-as 10
neighbor 192.168.222.53 next-hop-self
neighbor 192.168.222.53 route-map ALLOW-ALL in
neighbor 192.168.222.53 route-map ALLOW-ALL out
!
!
address-family ipv4 unicast
network 14.1.0.0/24
network 14.2.0.0/24
network 14.3.0.0/24
network 14.4.0.0/24
network 14.5.0.0/24
exit-address-family
!
route-map ALLOW-ALL permit 10
!
end
After starting both FRRouting instances and the BIRD instance, everything works
correctly and all routes are installed.
I then start my BMP collector, and BIRD successfully connects to it:
<hostname>:~/bird$ sudo bird -f -d -c /usr/local/etc/bird.conf
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: Initializing
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: Starting
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: initialized rte_src owner
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: State changed to start
bird: 2026-07-29 16:42:55.085659 [0001] <INFO> Started
bird: 2026-07-29 16:42:55.285985 [0002] <TRACE> bmp1: Connecting to
192.168.222.1 port 4568
bird: 2026-07-29 16:42:55.286407 [0002] <TRACE> bmp1: Connection lost
(Connection refused)
bird: 2026-07-29 16:43:05.287940 [0002] <TRACE> bmp1: Connecting to
192.168.222.1 port 4568
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: Connected
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: BMP session established
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: new rte_src ID 0L 5G,
have 1 sources now
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: State changed to up
However, nothing further happens. On the collector side, I receive only the BMP
Initiation message. I do not receive any Peer Up or Route Monitoring messages
for the already-established BGP sessions.
When I manually restart the FRRouting instance running on 192.168.222.54, I
receive the Peer Up message for that BGP session, followed by the corresponding
BMP Route Monitoring messages:
production@publicmirror3:~/bird$ sudo bird -f -d -c /usr/local/etc/bird.conf
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: Initializing
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: Starting
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: initialized rte_src owner
bird: 2026-07-29 16:42:55.085659 [0001] <TRACE> bmp1: State changed to start
bird: 2026-07-29 16:42:55.085659 [0001] <INFO> Started
bird: 2026-07-29 16:42:55.285985 [0002] <TRACE> bmp1: Connecting to
192.168.222.1 port 4568
bird: 2026-07-29 16:42:55.286407 [0002] <TRACE> bmp1: Connection lost
(Connection refused)
bird: 2026-07-29 16:43:05.287940 [0002] <TRACE> bmp1: Connecting to
192.168.222.1 port 4568
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: Connected
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: BMP session established
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: new rte_src ID 0L 5G,
have 1 sources now
bird: 2026-07-29 16:43:05.288558 [0002] <TRACE> bmp1: State changed to up
bird: 2026-07-29 16:43:20.462939 [0002] <RMT> peer_192_168_222_54: Received:
Peer de-configured
bird: 2026-07-29 16:43:21.910098 [0002] <TRACE> bmp1: Peer up for
peer_192_168_222_54
bird: 2026-07-29 16:43:21.910098 [0002] <TRACE> bmp1.export: Export state
changed from DOWN to FEEDING
bird: 2026-07-29 16:43:21.910098 [0002] <TRACE> bmp1.export: Export state
changed from FEEDING to PARTIAL
bird: 2026-07-29 16:43:21.910098 [0002] <TRACE> bmp1: Sending END-OF-RIB for
peer_192_168_222_54.ipv4
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 13.1.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 13.2.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 13.3.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 13.4.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 13.5.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 12.1.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 12.5.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 12.4.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 12.3.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Feeding 12.2.0.0/24
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Export state
changed from PARTIAL to READY
bird: 2026-07-29 16:43:21.910746 [0002] <TRACE> bmp1.export: Fed up
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Updating
14.1.0.0/24, seq 1
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export 1 released
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Updating
14.5.0.0/24, seq 2
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export 2 released
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Updating
14.4.0.0/24, seq 3
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export 3 released
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Updating
14.3.0.0/24, seq 4
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export 4 released
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Updating
14.2.0.0/24, seq 5
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export 5 released
bird: 2026-07-29 16:43:25.912674 [0002] <TRACE> bmp1.export: Export drained
The BIRD logs indicate that all prefixes were fed to the BMP export process,
including the prefixes received from the BGP session that was not restarted.
However, my collector receives only the prefixes learned from the restarted
session on 192.168.222.54. It does not receive the static 13.x prefixes or the
12.x prefixes learned from the session on 192.168.222.52.
I am using a custom BMP receiver. Its logs for the test described above are as
follows:
2026-07-29 18:42:56 [DEBUG] Creating multi BMP peer
2026-07-29 18:42:56 [DEBUG - MASTER - 11_192.168.222.53] BMP master peer
correctly listening on address '192.168.222.1:4568'.
2026-07-29 18:42:56 [DEBUG] Multi BMP peer has been correclty created
2026-07-29 18:43:05 [DEBUG - MASTER - 11_192.168.222.53] Remote BMP feeder is
TCP connected (incoming SYN).
2026-07-29 18:43:05 [DEBUG - MASTER - 11_192.168.222.53] Receiving a message of
size 36
2026-07-29 18:43:05 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:05 [DEBUG - MASTER - 11_192.168.222.53] Receiving an
initiation BMP message with SYS_DESCR: 'Not defined'.
2026-07-29 18:43:21 [DEBUG - MASTER - 11_192.168.222.53] Receiving a message of
size 286
2026-07-29 18:43:21 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:21 [DEBUG - MASTER - 11_192.168.222.53] We received a Peer Up
message. First OPEN is of size 53, second open is of size 94.
2026-07-29 18:43:21 [DEBUG] Extracted ASN is '65535'. Extracted router_id is
'255.255.255.255'.
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] Sub peer structure
correctly created.
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] We received a Peer Up
message for BMP sub-peer.
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] VRF for peer Up message
if ''.
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] Admin label for peer Up
message if ''.
2026-07-29 18:43:21 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343401'.
2026-07-29 18:43:21 [DEBUG - PEER - 10_192.168.222.54] We received an IPv4
End-of-RIB for BMP sub peer.
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] Receiving a message of
size 515
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343405'.
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We processed a update
for prefix '14.1.0.0/24' for feed type bmp_adj_in_pre.
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343405'.
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We processed a update
for prefix '14.5.0.0/24' for feed type bmp_adj_in_pre.
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343405'.
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We processed a update
for prefix '14.4.0.0/24' for feed type bmp_adj_in_pre.
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343405'.
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We processed a update
for prefix '14.3.0.0/24' for feed type bmp_adj_in_pre.
2026-07-29 18:43:25 [DEBUG - MASTER - 11_192.168.222.53] We received a BMP
message with feed type 'bmp_adj_in_pre' (peer_flags=0x00, post_policy=0,
adj_rib_out=0).
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We received a message
with timestamp '1785343405'.
2026-07-29 18:43:25 [DEBUG - PEER - 10_192.168.222.54] We processed a update
for prefix '14.2.0.0/24' for feed type bmp_adj_in_pre.
To summarise, I can reproduce two related behaviours:
When the BMP connection is established after the BGP sessions, BIRD sends only
the Initiation message. No Peer Up or Route Monitoring messages are sent for
the already-established sessions.
After restarting one BGP peer, BIRD reports that it is feeding routes from
multiple sources, but the BMP receiver receives only the routes belonging to
the restarted peer.
Please let me know if you need packet captures, additional logs, or any other
information to help reproduce and debug the issue.
For completeness, I am using the following BIRD build:
<hostname>:~/bird$ bird --version
BIRD version 3.2.2+detached.455677e6d09b
Best regards,
Thomas