[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240226212021.1247379-1-kuba@kernel.org>
Date: Mon, 26 Feb 2024 13:20:06 -0800
From: Jakub Kicinski <kuba@...nel.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
edumazet@...gle.com,
pabeni@...hat.com,
nicolas.dichtel@...nd.com,
donald.hunter@...il.com,
jiri@...nulli.us,
sdf@...gle.com,
Jakub Kicinski <kuba@...nel.org>
Subject: [PATCH net-next v2 00/15] tools: ynl: stop using libmnl
There is no strong reason to stop using libmnl in ynl but there
are a few small ones which add up.
First (as I remembered immediately after hitting send on v1),
C++ compilers do not like the libmnl for_each macros.
I haven't tried it myself, but having all the code directly
in YNL makes it easier for folks porting to C++ to modify them
and/or make YNL more C++ friendly.
Second, we do much more advanced netlink level parsing in ynl
than libmnl so it's hard to say that libmnl abstracts much from us.
The fact that this series, removing the libmnl dependency, only
adds <300 LoC shows that code savings aren't huge.
OTOH when new types are added (e.g. auto-int) we need to add
compatibility to deal with older version of libmnl (in fact,
even tho patches have been sent months ago, auto-ints are still
not supported in libmnl.git).
Thrid, the dependency makes ynl less self contained, and harder
to vendor in. Whether vendoring libraries into projects is a good
idea is a separate discussion, nonetheless, people want to do it.
Fourth, there are small annoyances with the libmnl APIs which
are hard to fix in backward-compatible ways. See the last patch
for example.
All in all, libmnl is a great library, but with all the code
generation and structured parsing, ynl is better served by going
its own way.
v2:
patch 2:
- NLA_ALIGN(sizeof(struct nlattr)) -> NLA_HDRLEN;
- ...put_strz() -> ...put_str()
- use ynl_attr_data() in ynl_attr_get_{str,s8,u8}()
- use signed helpers in signed auto-ints
- use ynl_attr_get_str() instead of ynl_attr_data() in ynl.c
patch 8:
- extend commit message
patch 10:
- fold NLMSG_NEXT(nlh, rem) into the for () statement
v1: https://lore.kernel.org/all/20240222235614.180876-1-kuba@kernel.org/
Jakub Kicinski (15):
tools: ynl: give up on libmnl for auto-ints
tools: ynl: create local attribute helpers
tools: ynl: create local for_each helpers
tools: ynl: create local nlmsg access helpers
tools: ynl: create local ARRAY_SIZE() helper
tools: ynl: make yarg the first member of struct ynl_dump_state
tools: ynl-gen: remove unused parse code
tools: ynl: wrap recv() + mnl_cb_run2() into a single helper
tools: ynl: use ynl_sock_read_msgs() for ACK handling
tools: ynl: stop using mnl_cb_run2()
tools: ynl: switch away from mnl_cb_t
tools: ynl: switch away from MNL_CB_*
tools: ynl: stop using mnl socket helpers
tools: ynl: remove the libmnl dependency
tools: ynl: use MSG_DONTWAIT for getting notifications
tools/net/ynl/lib/ynl-priv.h | 345 ++++++++++++++++++++++++++++---
tools/net/ynl/lib/ynl.c | 365 +++++++++++++++++----------------
tools/net/ynl/lib/ynl.h | 3 +-
tools/net/ynl/samples/Makefile | 2 +-
tools/net/ynl/ynl-gen-c.py | 110 ++++------
5 files changed, 556 insertions(+), 269 deletions(-)
--
2.43.2
Powered by blists - more mailing lists