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

Reply via email to