On Sat, Apr 16, 2022 at 07:28:59PM +0200, Toke Høiland-Jørgensen wrote:
Daniel Gröber <dxld@darkboxed.org> writes:
When dumping the routing table bird currently doesn't set the rtm_table netlink field to select any particular one but rather wants to get all at once.
This can be problematic when multiple routing daemons are running on a system as the kernel's route modification performance goes down drasticly (by a factor of 20-200ish) when the table is being modified while it's being dumped.
To avoid this situation we make bird do dumps on a per-kernel-table basis. This then allows the administrator to have multiple routing daemons use different kernel tables which sidesteps the problem.
See also this discussion on the babel-users mailing list: https://alioth-lists.debian.net/pipermail/babel-users/2022-April/003902.html
Note that this only works with the strict netlink filter checking is enabled (i.e., if the setsockopt for NETLINK_GET_STRICT_CHK succeeds). Bird currently doesn't check this at runtime at all, so just applying this patch as-is will not work correctly on older kernels (<4.20).
Hi I like the idea of scanning tables independently, but i suspected there would be an issue on older kernels without NETLINK_GET_STRICT_CHK. I will check how hard it would be to switch CONFIG_ALL_TABLES_AT_ONCE in run-time. -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."