From nobody Fri Oct 3 06:37:13 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 850392EAD0C; Thu, 4 Sep 2025 22:03:33 +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=1757023418; cv=none; b=Gg+LmOBhauHOoXxdx81o6rJYGY5b4WvMsaREDNthFQq1pDtwv/j82G8taaWmjlfvktiXXq97Bvyt8o1evsYzZuE/HNwMwVjGTOvXYsiyxKWGGVkKepZL7MYl5lUutPCUDmNQiHwwusV2gEWki7PhrSyss96SVNNM3qI5McwJ94U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757023418; c=relaxed/simple; bh=CZfJGhxx2Urse7IIvrAANP7Ykko7twy1ZvK+VyL/1yw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DCnK5E0j9QQ+u8t96SadxbrhXm9xvlk9WTKKPEH5KCTrJpqG4C7LLFXsjhU15pCyBWM/u5uVJ7Ng8orelRpc+lKZQpyvyB5PdGotj5dI4u9DM5w6h2sv663bcWHRDwQ1Iv1EC0cfv5zJEpo88eNaDNU7qXafnFXdOBL6zkNeVOI= 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=fsI1f4GP; 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="fsI1f4GP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757023399; bh=CZfJGhxx2Urse7IIvrAANP7Ykko7twy1ZvK+VyL/1yw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fsI1f4GP+qh01LFPFcuYYYU0ATSPPw83yELFdjpu3sTVHN6yqQsnG2j14TZHkdaKe f3PUU32Z8lVjurWzQz9R8Cn6WCTbvp/RqoDsrN7pqzfK+0cCeIi9AV8C+urTdktmcf Mv8j/TZGZcZRkl2Kn1A2LkSCidzM+OXnFV0kHvGlFfUQJVIdEA6YYIeSnNlUCmt+QO 3BVa/jWLHje40St4wLludvexACF2gGrq/yTDeNTZ8z0hBQg24B7JbB+4y2zSnL9ZN0 EZ5IoAWNuhYUU072L2nvOYAXnKTCrzZJu7Jz6oeK0H+zDF4oJN5j60CbHNmifC0RBo ud/pE7S6JVGvg== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 1C8E460587; Thu, 4 Sep 2025 22:03:19 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id A3DB0202AE3; Thu, 04 Sep 2025 22:02:58 +0000 (UTC) From: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= To: "Jason A. Donenfeld" , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= , Donald Hunter , Simon Horman , Jacob Keller , Andrew Lunn , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC net-next 11/14] wireguard: netlink: generate netlink code Date: Thu, 4 Sep 2025 22:02:45 +0000 Message-ID: <20250904220255.1006675-11-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250904-wg-ynl-rfc@fiberby.net> References: <20250904-wg-ynl-rfc@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 policy and command definitions as generated by ynl-gen. No behavioural changes intended. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- drivers/net/wireguard/Makefile | 1 + drivers/net/wireguard/netlink.c | 69 +++++-------------------- drivers/net/wireguard/netlink_gen.c | 78 +++++++++++++++++++++++++++++ drivers/net/wireguard/netlink_gen.h | 30 +++++++++++ 4 files changed, 121 insertions(+), 57 deletions(-) create mode 100644 drivers/net/wireguard/netlink_gen.c create mode 100644 drivers/net/wireguard/netlink_gen.h diff --git a/drivers/net/wireguard/Makefile b/drivers/net/wireguard/Makefile index dbe1f8514efc..ae4b479cddbd 100644 --- a/drivers/net/wireguard/Makefile +++ b/drivers/net/wireguard/Makefile @@ -14,4 +14,5 @@ wireguard-y +=3D allowedips.o wireguard-y +=3D ratelimiter.o wireguard-y +=3D cookie.o wireguard-y +=3D netlink.o +wireguard-y +=3D netlink_gen.o obj-$(CONFIG_WIREGUARD) :=3D wireguard.o diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlin= k.c index a61e1c5c7850..0e34817126b9 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 "netlink_gen.h" =20 #include =20 @@ -19,37 +20,6 @@ =20 static struct genl_family genl_family; =20 -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, 1), - [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, 7), - [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, 1), -}; - static struct wg_device *lookup_interface(struct nlattr **attrs, struct sk_buff *skb) { @@ -197,7 +167,7 @@ get_peer(struct wg_peer *peer, struct sk_buff *skb, str= uct dump_ctx *ctx) return -EMSGSIZE; } =20 -static int wireguard_nl_get_device_start(struct netlink_callback *cb) +int wireguard_nl_get_device_start(struct netlink_callback *cb) { struct wg_device *wg; =20 @@ -208,8 +178,8 @@ static int wireguard_nl_get_device_start(struct netlink= _callback *cb) return 0; } =20 -static int wireguard_nl_get_device_dumpit(struct sk_buff *skb, - struct netlink_callback *cb) +int wireguard_nl_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); @@ -303,7 +273,7 @@ static int wireguard_nl_get_device_dumpit(struct sk_buf= f *skb, */ } =20 -static int wireguard_nl_get_device_done(struct netlink_callback *cb) +int wireguard_nl_get_device_done(struct netlink_callback *cb) { struct dump_ctx *ctx =3D DUMP_CTX(cb); =20 @@ -468,7 +438,9 @@ static int set_peer(struct wg_device *wg, struct nlattr= **attrs) =20 nla_for_each_nested(attr, attrs[WGPEER_A_ALLOWEDIPS], rem) { ret =3D nla_parse_nested(allowedip, WGALLOWEDIP_A_MAX, - attr, allowedip_policy, NULL); + attr, + wireguard_wgallowedip_nl_policy, + NULL); if (ret < 0) goto out; ret =3D set_allowedip(peer, allowedip); @@ -501,8 +473,8 @@ static int set_peer(struct wg_device *wg, struct nlattr= **attrs) return ret; } =20 -static int wireguard_nl_set_device_doit(struct sk_buff *skb, - struct genl_info *info) +int wireguard_nl_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; @@ -595,7 +567,8 @@ static int wireguard_nl_set_device_doit(struct sk_buff = *skb, =20 nla_for_each_nested(attr, info->attrs[WGDEVICE_A_PEERS], rem) { ret =3D nla_parse_nested(peer, WGPEER_A_MAX, attr, - peer_policy, NULL); + wireguard_wgpeer_nl_policy, + NULL); if (ret < 0) goto out; ret =3D set_peer(wg, peer); @@ -616,24 +589,6 @@ static int wireguard_nl_set_device_doit(struct sk_buff= *skb, return ret; } =20 -static const struct genl_split_ops wireguard_nl_ops[] =3D { - { - .cmd =3D WG_CMD_GET_DEVICE, - .start =3D wireguard_nl_get_device_start, - .dumpit =3D wireguard_nl_get_device_dumpit, - .done =3D wireguard_nl_get_device_done, - .policy =3D device_policy, - .maxattr =3D WGDEVICE_A_PEERS, - .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DUMP, - }, { - .cmd =3D WG_CMD_SET_DEVICE, - .doit =3D wireguard_nl_set_device_doit, - .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), diff --git a/drivers/net/wireguard/netlink_gen.c b/drivers/net/wireguard/ne= tlink_gen.c new file mode 100644 index 000000000000..75f5b4b297a9 --- /dev/null +++ b/drivers/net/wireguard/netlink_gen.c @@ -0,0 +1,78 @@ +// 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 */ + +#include +#include + +#include "netlink_gen.h" + +#include +#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(__WG_INADDR_SZ), + [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(__WG_SOCKADDR_SZ), + [WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] =3D { .type =3D NLA_U16, }, + [WGPEER_A_LAST_HANDSHAKE_TIME] =3D NLA_POLICY_EXACT_LEN(__WG_TIMESPEC_SZ), + [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_P= EERS + 1] =3D { + [WGDEVICE_A_IFINDEX] =3D { .type =3D NLA_U32, }, + [WGDEVICE_A_IFNAME] =3D { .type =3D NLA_NUL_STRING, .len =3D __WG_IFNAMLE= N, }, + [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= ), +}; + +/* 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 __WG_IFNAMLE= N, }, + [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 wireguard_nl_get_device_start, + .dumpit =3D wireguard_nl_get_device_dumpit, + .done =3D wireguard_nl_get_device_done, + .policy =3D wireguard_get_device_nl_policy, + .maxattr =3D WGDEVICE_A_PEERS, + .flags =3D GENL_UNS_ADMIN_PERM | GENL_CMD_CAP_DUMP, + }, + { + .cmd =3D WG_CMD_SET_DEVICE, + .doit =3D wireguard_nl_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/netlink_gen.h b/drivers/net/wireguard/ne= tlink_gen.h new file mode 100644 index 000000000000..a067ab0d61b6 --- /dev/null +++ b/drivers/net/wireguard/netlink_gen.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 */ + +#ifndef _LINUX_WIREGUARD_GEN_H +#define _LINUX_WIREGUARD_GEN_H + +#include +#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 wireguard_nl_get_device_start(struct netlink_callback *cb); +int wireguard_nl_get_device_done(struct netlink_callback *cb); + +int wireguard_nl_get_device_dumpit(struct sk_buff *skb, + struct netlink_callback *cb); +int wireguard_nl_set_device_doit(struct sk_buff *skb, struct genl_info *in= fo); + +#endif /* _LINUX_WIREGUARD_GEN_H */ --=20 2.51.0