On 2 Dec 2022, at 03:19, Ondrej Zajicek via Bird-users <bird-users@trubka.network.cz> wrote:
On Thu, Dec 01, 2022 at 01:48:16PM +0000, Alexander V. Chernikov via Bird-users wrote:
Dear bird developers,
Netlink support was added to FreeBSD recently [1]. It’s not as “full-featured” as its Linux counterpart yet, however the added subset is enough to make a routing daemon work. Specifically, it supports multiple tables, multipath, nexthops and nexthops groups. No MPLS support yet. It aims to be compatible (whenever possible) to minimise the netlink users adoption efforts. The first FreeBSD releases to have netlink support will be 14.0 and 13.2. Both are planned to be released in ~Q1 2023.
The attached change adds 'bsd-netlink’ sysconf target, allowing to build both netlink & rtsock versions on FreeBSD.
Hi
That looks interesting. It does not interefere with working code for Linux or BSD, so we can merge it immediately without much issues. Are there any significant differenences between Netlink model and BSD kernel? It depends on what’s deemed significant. Core concepts maps nicely. There are some implementation nuances, of course. The biggest I can name is the routing table IDs mismatch. In FreeBSD, the default routing table is #0 and there are no special 25X tables. Some attributes (like RTA_PREFSRC) are not supported. Interface address flags are not fully mapped yet & there might be some unsupported stuff w.r.t IPv6 prefixes lifetime. “Prohibit” nexthops are not supported yet (as the kernel only provides blackhole / reject ATM). Resilient nexthop groups are not supported yet as well.
I may be missing something, but I’m pretty sure that the implementation is close to supporting all of the current bird features (except mpls).
Like Linux keep (and Netlink API assumes) multiple routes with different metric, and keeps source protocol. Yes, metrics & source protocol works.
Also, speaking of features - FreeBSD netlink implementation is optimised for batching & there is significant performance difference between batched-and non-batched. Specifically, current bird code does ~80k routes/sec w/o netlink batching, ~180k routes/sec w/ rtsock and ~240k routes/sec w/ netlink batching (sz=16) on the same system. Would you be open to adopting a not-too-invasive netlink batching patch enabled conditionally under CONFIG_NETLINK_BATCHING ?
-- 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."