aboutsummaryrefslogtreecommitdiff
path: root/sys/netlink/netlink_generic.c
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2024-12-03 20:04:18 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2024-12-03 20:04:18 +0000
commita034c0aeccd899a5872333625771df278e0a8ba7 (patch)
tree2aebd441a771430f95e127f1f2fc2586927f7e42 /sys/netlink/netlink_generic.c
parentedf5608bfef3840718bf31b453efb714ef290f31 (diff)
netlink: refactor writer initialization KPI
o Allow callers to initialize a writer that will malloc(9) with M_WAITOK. o Use size_t for expected malloc size. o Use correct types to initialize a group writer. o Rename functions into nl_writer_ namespace instead of nlmsg_, cause they are working on nl_writer, not on nlmsg. o Make the KPI responsible to sparsely initialize the writer structure. o Garbage collect chain writer. Fixes 17083b94a915. All current consumers are left as is, however some may benefit from M_WAITOK allocation as well as supplying a correct expected size. Reviewed by: melifaro Differential Revision: https://reviews.freebsd.org/D47549
Diffstat (limited to 'sys/netlink/netlink_generic.c')
-rw-r--r--sys/netlink/netlink_generic.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/netlink/netlink_generic.c b/sys/netlink/netlink_generic.c
index 28f9fe108ef4..4a3c83da57e1 100644
--- a/sys/netlink/netlink_generic.c
+++ b/sys/netlink/netlink_generic.c
@@ -256,14 +256,16 @@ nlctrl_notify(void *arg __unused, const struct genl_family *gf, int cmd)
{
struct nlmsghdr hdr = {.nlmsg_type = NETLINK_GENERIC };
struct genlmsghdr ghdr = { .cmd = cmd };
- struct nl_writer nw = {};
+ struct nl_writer nw;
- if (nlmsg_get_group_writer(&nw, NLMSG_SMALL, NETLINK_GENERIC, ctrl_group_id)) {
- dump_family(&hdr, &ghdr, gf, &nw);
- nlmsg_flush(&nw);
+ if (!nl_writer_group(&nw, NLMSG_SMALL, NETLINK_GENERIC, ctrl_group_id,
+ false)) {
+ NL_LOG(LOG_DEBUG, "error allocating group writer");
return;
}
- NL_LOG(LOG_DEBUG, "error allocating group writer");
+
+ dump_family(&hdr, &ghdr, gf, &nw);
+ nlmsg_flush(&nw);
}
static const struct genl_cmd nlctrl_cmds[] = {