[PATCH] Netlink on FreeBSD support

Alexander V. Chernikov melifaro at ipfw.ru
Fri Dec 2 22:21:17 CET 2022



> On 2 Dec 2022, at 03:19, Ondrej Zajicek via Bird-users <bird-users at 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 at 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."
> 




More information about the Bird-users mailing list