From nobody Mon Dec 1 23:06:56 2025 Received: from mail1.fiberby.net (mail1.fiberby.net [193.104.135.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76F87311C37; Wed, 26 Nov 2025 17:36:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.104.135.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764178600; cv=none; b=dYBPP7nm+fPtEZ48l1y3irEvH85Zs4HMMYFNrgfSwMulw3OgONT9H7ND42SSqMUSd+pKFx/zz34HQGgUlq5RWzMx13KA5a2Ry3FoGj1bS/gZhYCNfbTMUeaFgcnTyO3oMGtWRRXGuS51aD1pg4ML7yrg8BNxuVgMxlTWlAIj6sI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764178600; c=relaxed/simple; bh=6za08evM4/3iaYHy0vKK/WiWcDhIqI4gEH19T3HckHY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EFrMjly2PcQ9vcPvZ0lhgznjs7YsXpxIhe2PMKUS7KmXp5r2KJKw9smBMuNVqkB6HEDBSpV2ZsDvCXRAYaP++PqsttFvvuayv+p2BcHbVBN1c01aq2d/hS8jSdztAUbSWe5qvwAaSlDlBWmFlYKgZ8z1srOrl09GhWYrMCozE9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fiberby.net; spf=pass smtp.mailfrom=fiberby.net; dkim=pass (2048-bit key) header.d=fiberby.net header.i=@fiberby.net header.b=vgCSQK0f; arc=none smtp.client-ip=193.104.135.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fiberby.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fiberby.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fiberby.net header.i=@fiberby.net header.b="vgCSQK0f" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1764178585; bh=6za08evM4/3iaYHy0vKK/WiWcDhIqI4gEH19T3HckHY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vgCSQK0f2u+8HNOs9XHRFoCxwd9eR7SbzRGb+0VcZec/7kLtrSQ70D/ug72Yn4957 1flU/psoPx3wPm+BV1zjUNxmPQ5H8BvaGFjLM45jgOHdkHjwOdF14M81LfMpnNLyGp oVnBlqj+hhgnp0zT0oXT8ReWxIyn1pThHRAZDGOuPk+5no1N2BKiiwb2LPlYgXd3x3 JNpxvIBwTQPNt8U2SzjFRu/JzFtRwpbJXS1/xPDxvRY+w3sz/8CknW0vGYq9yb3Juw 3JbY1HnslZEkjc30ZjCnvyOTqf5jK22PvKZF8CD6qPSm56cL7CM+HlXHbrOgD2IUwg dwX/94osRMQBw== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id A1EFC6010F; Wed, 26 Nov 2025 17:36:25 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id ECDB8204309; Wed, 26 Nov 2025 17:35:52 +0000 (UTC) From: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= To: "Jason A. Donenfeld" Cc: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Donald Hunter , Simon Horman , Jacob Keller , Andrew Lunn , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jordan Rife Subject: [PATCH wireguard v4 10/10] wireguard: netlink: generate netlink code Date: Wed, 26 Nov 2025 17:35:42 +0000 Message-ID: <20251126173546.57681-11-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251126173546.57681-1-ast@fiberby.net> References: <20251126173546.57681-1-ast@fiberby.net> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This patch adopts netlink policies and command definitions generated by ynl-gen, thus completing the conversion to YNL. Given that the old and new policies are functionally identical and have just been moved to a new file, it serves to verify that the policies generated from the spec are identical to the previous policy code. The following functions are renamed: wg_get_device_dump() -> wg_get_device_dumpit() wg_set_device() -> wg_set_device_doit() The new files are covered by the existing drivers/net/wireguard/ pattern in MAINTAINERS. No behavioural changes intended. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- drivers/net/wireguard/Makefile | 2 +- drivers/net/wireguard/generated/netlink.c | 73 +++++++++++++++++++++++ drivers/net/wireguard/generated/netlink.h | 30 ++++++++++ drivers/net/wireguard/netlink.c | 60 ++----------------- 4 files changed, 109 insertions(+), 56 deletions(-) create mode 100644 drivers/net/wireguard/generated/netlink.c create mode 100644 drivers/net/wireguard/generated/netlink.h diff --git a/drivers/net/wireguard/Makefile b/drivers/net/wireguard/Makefile index dbe1f8514efc3..00cbcc9ab69da 100644 --- a/drivers/net/wireguard/Makefile +++ b/drivers/net/wireguard/Makefile @@ -13,5 +13,5 @@ wireguard-y +=3D peerlookup.o wireguard-y +=3D allowedips.o wireguard-y +=3D ratelimiter.o wireguard-y +=3D cookie.o -wireguard-y +=3D netlink.o +wireguard-y +=3D netlink.o generated/netlink.o obj-$(CONFIG_WIREGUARD) :=3D wireguard.o diff --git a/drivers/net/wireguard/generated/netlink.c b/drivers/net/wiregu= ard/generated/netlink.c new file mode 100644 index 0000000000000..3ef8c29908c28 --- /dev/null +++ b/drivers/net/wireguard/generated/netlink.c @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cl= ause) +/* Do not edit directly, auto-generated from: */ +/* Documentation/netlink/specs/wireguard.yaml */ +/* YNL-GEN kernel source */ +/* YNL-ARG --function-prefix wg */ +/* To regenerate run: tools/net/ynl/ynl-regen.sh */ + +#include +#include + +#include "netlink.h" + +#include +#include + +/* Common nested types */ +const struct nla_policy wireguard_wgallowedip_nl_policy[WGALLOWEDIP_A_FLAG= S + 1] =3D { + [WGALLOWEDIP_A_FAMILY] =3D { .type =3D NLA_U16, }, + [WGALLOWEDIP_A_IPADDR] =3D NLA_POLICY_MIN_LEN(4), + [WGALLOWEDIP_A_CIDR_MASK] =3D { .type =3D NLA_U8, }, + [WGALLOWEDIP_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x1), +}; + +const struct nla_policy wireguard_wgpeer_nl_policy[WGPEER_A_PROTOCOL_VERSI= ON + 1] =3D { + [WGPEER_A_PUBLIC_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), + [WGPEER_A_PRESHARED_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), + [WGPEER_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x7), + [WGPEER_A_ENDPOINT] =3D NLA_POLICY_MIN_LEN(16), + [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] =3D { .type =3D NLA_U16, }, + [WGPEER_A_LAST_HANDSHAKE_TIME] =3D NLA_POLICY_EXACT_LEN(16), + [WGPEER_A_RX_BYTES] =3D { .type =3D NLA_U64, }, + [WGPEER_A_TX_BYTES] =3D { .type =3D NLA_U64, }, + [WGPEER_A_ALLOWEDIPS] =3D NLA_POLICY_NESTED_ARRAY(wireguard_wgallowedip_n= l_policy), + [WGPEER_A_PROTOCOL_VERSION] =3D { .type =3D NLA_U32, }, +}; + +/* WG_CMD_GET_DEVICE - dump */ +static const struct nla_policy wireguard_get_device_nl_policy[WGDEVICE_A_I= FNAME + 1] =3D { + [WGDEVICE_A_IFINDEX] =3D { .type =3D NLA_U32, }, + [WGDEVICE_A_IFNAME] =3D { .type =3D NLA_NUL_STRING, .len =3D 15, }, +}; + +/* WG_CMD_SET_DEVICE - do */ +static const struct nla_policy wireguard_set_device_nl_policy[WGDEVICE_A_P= EERS + 1] =3D { + [WGDEVICE_A_IFINDEX] =3D { .type =3D NLA_U32, }, + [WGDEVICE_A_IFNAME] =3D { .type =3D NLA_NUL_STRING, .len =3D 15, }, + [WGDEVICE_A_PRIVATE_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), + [WGDEVICE_A_PUBLIC_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), + [WGDEVICE_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x1), + [WGDEVICE_A_LISTEN_PORT] =3D { .type =3D NLA_U16, }, + [WGDEVICE_A_FWMARK] =3D { .type =3D NLA_U32, }, + [WGDEVICE_A_PEERS] =3D NLA_POLICY_NESTED_ARRAY(wireguard_wgpeer_nl_policy= ), +}; + +/* Ops table for wireguard */ +const struct genl_split_ops wireguard_nl_ops[2] =3D { + { + .cmd =3D WG_CMD_GET_DEVICE, + .start =3D wg_get_device_start, + .dumpit =3D wg_get_device_dumpit, + .done =3D wg_get_device_done, + .policy =3D wireguard_get_device_nl_policy, + .maxattr =3D WGDEVICE_A_IFNAME, + .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DUMP, + }, + { + .cmd =3D WG_CMD_SET_DEVICE, + .doit =3D wg_set_device_doit, + .policy =3D wireguard_set_device_nl_policy, + .maxattr =3D WGDEVICE_A_PEERS, + .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DO, + }, +}; diff --git a/drivers/net/wireguard/generated/netlink.h b/drivers/net/wiregu= ard/generated/netlink.h new file mode 100644 index 0000000000000..5dc977ee9e7c9 --- /dev/null +++ b/drivers/net/wireguard/generated/netlink.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cl= ause) */ +/* Do not edit directly, auto-generated from: */ +/* Documentation/netlink/specs/wireguard.yaml */ +/* YNL-GEN kernel header */ +/* YNL-ARG --function-prefix wg */ +/* To regenerate run: tools/net/ynl/ynl-regen.sh */ + +#ifndef _LINUX_WIREGUARD_GEN_H +#define _LINUX_WIREGUARD_GEN_H + +#include +#include + +#include +#include + +/* Common nested types */ +extern const struct nla_policy wireguard_wgallowedip_nl_policy[WGALLOWEDIP= _A_FLAGS + 1]; +extern const struct nla_policy wireguard_wgpeer_nl_policy[WGPEER_A_PROTOCO= L_VERSION + 1]; + +/* Ops table for wireguard */ +extern const struct genl_split_ops wireguard_nl_ops[2]; + +int wg_get_device_start(struct netlink_callback *cb); +int wg_get_device_done(struct netlink_callback *cb); + +int wg_get_device_dumpit(struct sk_buff *skb, struct netlink_callback *cb); +int wg_set_device_doit(struct sk_buff *skb, struct genl_info *info); + +#endif /* _LINUX_WIREGUARD_GEN_H */ diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlin= k.c index 0ce0bda8c1ce8..1da7e98d0d509 100644 --- a/drivers/net/wireguard/netlink.c +++ b/drivers/net/wireguard/netlink.c @@ -9,6 +9,7 @@ #include "socket.h" #include "queueing.h" #include "messages.h" +#include "generated/netlink.h" =20 #include =20 @@ -18,39 +19,6 @@ #include =20 static struct genl_family genl_family; -static const struct nla_policy peer_policy[WGPEER_A_MAX + 1]; -static const struct nla_policy allowedip_policy[WGALLOWEDIP_A_MAX + 1]; - -static const struct nla_policy device_policy[WGDEVICE_A_MAX + 1] =3D { - [WGDEVICE_A_IFINDEX] =3D { .type =3D NLA_U32 }, - [WGDEVICE_A_IFNAME] =3D { .type =3D NLA_NUL_STRING, .len =3D IFNAMSIZ - = 1 }, - [WGDEVICE_A_PRIVATE_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), - [WGDEVICE_A_PUBLIC_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), - [WGDEVICE_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x1), - [WGDEVICE_A_LISTEN_PORT] =3D { .type =3D NLA_U16 }, - [WGDEVICE_A_FWMARK] =3D { .type =3D NLA_U32 }, - [WGDEVICE_A_PEERS] =3D NLA_POLICY_NESTED_ARRAY(peer_policy), -}; - -static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] =3D { - [WGPEER_A_PUBLIC_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), - [WGPEER_A_PRESHARED_KEY] =3D NLA_POLICY_EXACT_LEN(WG_KEY_LEN), - [WGPEER_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x7), - [WGPEER_A_ENDPOINT] =3D NLA_POLICY_MIN_LEN(sizeof(struct sockaddr)), - [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] =3D { .type =3D NLA_U16 }, - [WGPEER_A_LAST_HANDSHAKE_TIME] =3D NLA_POLICY_EXACT_LEN(sizeof(struct _= _kernel_timespec)), - [WGPEER_A_RX_BYTES] =3D { .type =3D NLA_U64 }, - [WGPEER_A_TX_BYTES] =3D { .type =3D NLA_U64 }, - [WGPEER_A_ALLOWEDIPS] =3D NLA_POLICY_NESTED_ARRAY(allowedip_policy), - [WGPEER_A_PROTOCOL_VERSION] =3D { .type =3D NLA_U32 } -}; - -static const struct nla_policy allowedip_policy[WGALLOWEDIP_A_MAX + 1] =3D= { - [WGALLOWEDIP_A_FAMILY] =3D { .type =3D NLA_U16 }, - [WGALLOWEDIP_A_IPADDR] =3D NLA_POLICY_MIN_LEN(sizeof(struct in_addr)), - [WGALLOWEDIP_A_CIDR_MASK] =3D { .type =3D NLA_U8 }, - [WGALLOWEDIP_A_FLAGS] =3D NLA_POLICY_MASK(NLA_U32, 0x1), -}; =20 static struct wg_device *lookup_interface(struct nlattr **attrs, struct sk_buff *skb) @@ -199,7 +167,7 @@ get_peer(struct wg_peer *peer, struct sk_buff *skb, str= uct dump_ctx *ctx) return -EMSGSIZE; } =20 -static int wg_get_device_start(struct netlink_callback *cb) +int wg_get_device_start(struct netlink_callback *cb) { struct wg_device *wg; =20 @@ -210,7 +178,7 @@ static int wg_get_device_start(struct netlink_callback = *cb) return 0; } =20 -static int wg_get_device_dump(struct sk_buff *skb, struct netlink_callback= *cb) +int wg_get_device_dumpit(struct sk_buff *skb, struct netlink_callback *cb) { struct wg_peer *peer, *next_peer_cursor; struct dump_ctx *ctx =3D DUMP_CTX(cb); @@ -304,7 +272,7 @@ static int wg_get_device_dump(struct sk_buff *skb, stru= ct netlink_callback *cb) */ } =20 -static int wg_get_device_done(struct netlink_callback *cb) +int wg_get_device_done(struct netlink_callback *cb) { struct dump_ctx *ctx =3D DUMP_CTX(cb); =20 @@ -502,7 +470,7 @@ static int set_peer(struct wg_device *wg, struct nlattr= **attrs) return ret; } =20 -static int wg_set_device(struct sk_buff *skb, struct genl_info *info) +int wg_set_device_doit(struct sk_buff *skb, struct genl_info *info) { struct wg_device *wg =3D lookup_interface(info->attrs, skb); u32 flags =3D 0; @@ -616,24 +584,6 @@ static int wg_set_device(struct sk_buff *skb, struct g= enl_info *info) return ret; } =20 -static const struct genl_split_ops wireguard_nl_ops[] =3D { - { - .cmd =3D WG_CMD_GET_DEVICE, - .start =3D wg_get_device_start, - .dumpit =3D wg_get_device_dump, - .done =3D wg_get_device_done, - .policy =3D device_policy, - .maxattr =3D WGDEVICE_A_IFNAME, - .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DUMP, - }, { - .cmd =3D WG_CMD_SET_DEVICE, - .doit =3D wg_set_device, - .policy =3D device_policy, - .maxattr =3D WGDEVICE_A_PEERS, - .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DO, - } -}; - static struct genl_family genl_family __ro_after_init =3D { .split_ops =3D wireguard_nl_ops, .n_split_ops =3D ARRAY_SIZE(wireguard_nl_ops), --=20 2.51.0