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