On Fri, 10 Jul 2026 18:31:42 +0200 Maria Matejka <maria.matejka@nic.cz> wrote:
This smells of a runaway hostentry resolution cycle or something like that. Do you have some "minimal reproducer" then, which causes this godzilla to emerge? It is probably not easy to fix but we'd like to try.
Thanks!
Try the attached config. Thankfully it appears to be reproducible with no dependencies. It appears to be Bird2 -> 3 regression I have tested on 3.3.1 and on 3.1.7 vs 2.19.1 (both from Debian) It's a static protocol with few routes with different preferences attached to a separate table and the routes are moved off this table to the master one via pipe protocol. Now, if static is attached directly to table it works fine. But doing it thru pipe starts the loop: bird> show memory BIRD memory usage Effective Overhead Routing tables: 11.8 MB 1145.0 kB Route attributes: 12.8 MB 252.9 kB Protocols: 39.3 kB 3520.0 B Current config: 8351.0 B 504.0 B Standby memory: 0.0 B 188.0 kB Total: 24.8 MB 1628.1 kB Active pages: 25.6 MB Kept free pages: 188.0 kB Cold free pages: 0.0 B Hot page cache depleted while in RCU: 0 bird> show memory BIRD memory usage Effective Overhead Routing tables: 12.5 MB 1213.2 kB Route attributes: 13.5 MB 263.5 kB Protocols: 39.3 kB 3520.0 B Current config: 8351.0 B 504.0 B Standby memory: 0.0 B 200.0 kB Total: 26.3 MB 1718.9 kB Active pages: 27.1 MB Kept free pages: 200.0 kB Cold free pages: 0.0 B Hot page cache depleted while in RCU: 0 bird> show route count 5 of 5 routes for 1 networks in table master4 0 of 0 routes for 0 networks in table master6 Total: 5 of 5 routes for 1 networks in 2 tables and disabling the pipe stops it bird> disable pipe_generated pipe_generated: disabled bird> show memory BIRD memory usage Effective Overhead Routing tables: 295.1 kB 29.3 kB Route attributes: 28.4 kB 59.5 kB Protocols: 7217.0 B 2048.0 B Current config: 8351.0 B 504.0 B Standby memory: 0.0 B 55.7 MB Total: 483.1 kB 55.8 MB Active pages: 204.0 kB Kept free pages: 55.7 MB Cold free pages: 0.0 B Hot page cache depleted while in RCU: 0 kinda feels like putting pipe in-between fucks with some logic but that doesn't explain the memory growth, just the route churn, and it all appears to be in the pipe protocol: bird> show protocols all Name Proto Table State Since Info pipe_generated Pipe --- up 2026-07-13 11:08:28 master4 <=> generated_t Created: 2026-07-13 11:08:28 Channel main Table: master4 Peer table: generated_t Import state: READY Export state: READY Import filter: ACCEPT Export filter: REJECT Routes: 5 imported, 0 exported Route change stats: received rejected filtered ignored accepted Import updates: 409490 0 0 5 204745 Import withdraws: 0 0 --- 0 0 Export updates: 409480 204740 0 0 0 Export withdraws: 0 0 --- 0 0 device1 Device --- up 2026-07-13 11:08:28 Created: 2026-07-13 11:08:28 generated Static generated_t up 2026-07-13 11:08:28 Created: 2026-07-13 11:08:28 Channel ipv4 State: UP Import state: UP Export state: DOWN Table: generated_t Preference: 200 Input filter: ACCEPT Output filter: REJECT Routes: 5 imported, 0 exported, 1 preferred Route change stats: received rejected filtered ignored RX limit limit accepted Import updates: 5 0 0 0 0 0 5 Import withdraws: 0 0 --- 0 --- --- 0 Export updates: 0 0 0 0 --- 0 0 Export withdraws: 0 --- --- 0 --- --- 0 for comparison, bird2 : ☠ birdc BIRD 2.19.1 ready. bird> show protocols all Name Proto Table State Since Info device1 Device --- up 2026-07-13 11:14:05 generated Static generated_t up 2026-07-13 11:14:05 Channel ipv4 State: UP Table: generated_t Preference: 200 Input filter: ACCEPT Output filter: REJECT Routes: 5 imported, 0 exported, 1 preferred Route change stats: received rejected filtered ignored accepted Import updates: 5 0 0 0 5 Import withdraws: 0 0 --- 0 0 Export updates: 0 0 0 --- 0 Export withdraws: 0 --- --- --- 0 pipe_generated Pipe --- up 2026-07-13 11:14:05 master4 <=> generated_t Channel main Table: master4 Peer table: generated_t Import state: up Export state: up Import filter: ACCEPT Export filter: REJECT Routes: 5 imported, 0 exported Route change stats: received rejected filtered ignored accepted Import updates: 10 0 0 0 10 Import withdraws: 0 0 --- 0 0 Export updates: 10 10 0 0 0 Export withdraws: 0 0 --- 0 0
Maria
On Fri, Jul 10, 2026 at 05:58:43PM +0200, Mariusz Gronczewski wrote:
On Fri, 10 Jul 2026 17:23:54 +0200 Mariusz Gronczewski <xani+bird@devrandom.pl> wrote:
Now 0.0.0.0/0 isnt imported from any peer (dropped on filters), and only generated in static and then distributed to OSPF:
That was incorrect. I had kernel import filter set to all so it imported 0.0.0.0/0 route
and kernel export filter also allowed 0.0.0.0/0 route
however fixing that (no 0.0.0.0/0 exported to kernel any more) didn't fix the problem
removing all but one generated route
protocol static generated { ipv4 { table generated_t;
}; check link; igp table master4; route 193.200.227.0/24 blackhole; route 194.50.132.0/22 blackhole; route 0.0.0.0/0 recursive 8.8.8.8 { preference=500;
};
};
seems to fix it however I don't know why... the previous config just showed 0.0.0.0/0 in bird with multiple hops based on preference.
-- Mariusz Gronczewski (XANi) <xani+bird@devrandom.pl> GnuPG: 0xEA8ACE64 https://devrandom.eu
-- Mariusz Gronczewski (XANi) <xani+bird@devrandom.pl> GnuPG: 0xEA8ACE64 https://devrandom.eu