From nobody Thu Oct 2 17:02:10 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 98EB92C375E; Sat, 13 Sep 2025 23:59:19 +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=1757807961; cv=none; b=X8khC7tzUbWTB26poxUaID267HW8dEu3Fuj1LUXBg9REoGfg1Qm1i770IurNfwGdzRtDcOJ1trbo+sddHaOPyB2WO/3seDls2ImGymapOu67ldWQCe2vhLv6kEg/kw0jEpRA3m48jLujY0XXA98Ptk48ZdPvb1rCXfyCu6CkfQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807961; c=relaxed/simple; bh=pnz1Z9RsFEA/w79qMxEPA9j3gcVp4d2qUkVblwMqsWk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NOCbzDzeytFAo83Ws7VeqGdAC2cr+oaVn9jOej7zEB5AHjV0VTC3Cx9TmPtUCx0ZpoMEIIerHYTITZKDX6taY9VYt/QvdOC3wqMQHb4Z6tAQ5wEW3l0LzR64tWP5XtxiyLSsIpOxy+EW6TNIF/FokGMahSy1GznX8XMfCGuXhdM= 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=L/RsZVTf; 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="L/RsZVTf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=pnz1Z9RsFEA/w79qMxEPA9j3gcVp4d2qUkVblwMqsWk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L/RsZVTfXxK53xZh9BYw91H4z1fUKTKXs+zwXuivg3L874idQG4oILRW0JVnf+IPY xlvt9r7xZSMp8FVdA1sUmwyB3KXsGhyuHSdw0ViofxPzbpAgNSXCg3AePedT/ELTg4 to2R8tYwbjqZUtUXmDLAZFd62Fn5mGRDJ3eRaeLenRLmdWMw+uGBojDkwl4hTtysZ5 fTPLHc1btgDQsuqvLaHy+TegH1YPJjtGyhHdSSOmDBsH1Ugzx0tqeAUBNp4VvKY7N9 j3GY938J2cK7qkrGpiQrkJHTocpktmXxTq1v1bJ5ELx25lGqGTZd72CvBNfaujXxhv FhLTX8vMQbC7w== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 9D3356013E; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 315412022B0; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 01/11] tools: ynl-gen: allow overriding name-prefix for constants Date: Sat, 13 Sep 2025 23:58:22 +0000 Message-ID: <20250913235847.358851-2-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 Allow using custom name-prefix with constants, just like it is for enum and flags declarations. This is needed for generating WG_KEY_LEN in include/uapi/linux/wireguard.h from a spec. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter Reviewed-by: Jakub Kicinski Reviewed-by: Jacob Keller --- tools/net/ynl/pyynl/ynl_gen_c.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 101d8ba9626f..c8b15569ecc1 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -3208,8 +3208,9 @@ def render_uapi(family, cw): cw.block_end(line=3D';') cw.nl() elif const['type'] =3D=3D 'const': + name_pfx =3D const.get('name-prefix', f"{family.ident_name}-") defines.append([c_upper(family.get('c-define-name', - f"{family.ident_name}-{cons= t['name']}")), + f"{name_pfx}{const['name']}= ")), const['value']]) =20 if defines: --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 72F742D0C7D; Sat, 13 Sep 2025 23:59:20 +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=1757807963; cv=none; b=oE7/KDTGZ5F2Ak4YJwp1efepZfDvyEFIMMLlyZ6QNEJ7bI1I7jpO03AxWwFLzMRhHc3ZkdIhfYbflcvL63IfCeKYyxvKt6W05y59/IOsVAq/CjGOgqReRuLcYJOVcB0w0KXs74/UazSBuhxwl88TzJw1Egtw2qh/CgpdaynRTFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807963; c=relaxed/simple; bh=B0xFRM28DmWIgrG1Q+a6XZkJNRKEo5x4SQ82oQgZwfQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NaZ+DismM2Xofae2kdPvANeDdkcjBgK6k2jNhlt4U9TBEfayCgvSOJht1k+DQY73sALFZeIXgJMtfCiLuFiEAP7ya0cD57l+UVCGA7vkU8JxUhD/m2biNnnLD15nWY75WZ+yxMbEUjncj1ThHESw/Uiasxtoq2VYzQdvKakbSdo= 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=QSKhL9yk; 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="QSKhL9yk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=B0xFRM28DmWIgrG1Q+a6XZkJNRKEo5x4SQ82oQgZwfQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QSKhL9ykTFRBFfF5mgNjxtEiVKKeVGK9HZsKbk9t5Dr0vWXlfplegAyeEd5zORrm3 GvEBUJ3hLDDmQQNKtqSUfcfmgIk8BDV5Iz8+ckrj3MApj1/3BaWrhqPyepKoQsaTV5 fdwf/5xLgomrEIM7+P093dmJo1e6kLRgu21t5sFKJ+ym18TRyCV0s7+9MYFG0+G2aY TWkmAENO4+6vk1gW/GQKASBjS9jYMPp42TWQXzwhmk+tutgEbNlSPRHP2jXFoCKEPv 9BBJ/WaPp9Msi2dWiomlYjycqpi/Sj7/KA6ShWvSMME5+1sC8NwhLJLw3mqf1fCnpW r6dbnYM1EtJtA== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 97E7D6013A; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 3BED6202DF2; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 02/11] tools: ynl-gen: generate nested array policies Date: Sat, 13 Sep 2025 23:58:23 +0000 Message-ID: <20250913235847.358851-3-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 adds support for NLA_POLICY_NESTED_ARRAY() policies. Example spec (from future wireguard.yaml): - name: wgpeer attributes: - name: allowedips type: indexed-array sub-type: nest nested-attributes: wgallowedip yields NLA_POLICY_NESTED_ARRAY(wireguard_wgallowedip_nl_policy). This doesn't change any currently generated code, as it isn't used in any specs currently used for generating code. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter Reviewed-by: Jakub Kicinski --- tools/net/ynl/pyynl/ynl_gen_c.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index c8b15569ecc1..95a60fdaf14e 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -815,6 +815,11 @@ class TypeArrayNest(Type): f'unsigned int n_{self.c_name}'] return super().arg_member(ri) =20 + def _attr_policy(self, policy): + if self.attr['sub-type'] =3D=3D 'nest': + return f'NLA_POLICY_NESTED_ARRAY({self.nested_render_name}_nl_= policy)' + return super()._attr_policy(policy) + def _attr_typol(self): if self.attr['sub-type'] in scalars: return f'.type =3D YNL_PT_U{c_upper(self.sub_type[1:])}, ' --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 0C07B2C11CA; Sat, 13 Sep 2025 23:59:14 +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=1757807958; cv=none; b=PIDguIDm4vPIoB2jpmjUiHrkFtQgHvdmQabx4Ya2p3edlDGISh4UxqtDT3gvZHFeFfTHeh6H2t47D2XitEi2Abia9xgjIxqNZ4jO5fWM1xWuxKq+m7WC3kaacLcZcpRkBK2SY+0ipgWeSaWEOp41trC3k7QBSKdTJ1Cz96KhsgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807958; c=relaxed/simple; bh=EZJrSC8HKLIZeYkZ/ou7/O3NW58W1W8t+y2LSY8Uu94=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VWK9TFs6+dPaMnPN+n/Nr/7ho7PIm5Bz/c6QBrtOcMoQl3X2j0eOhyNj7ZnUR32iOwHqK2EkQhYm3IY00wlVJOdwmupqH+HxU47i6Zh7Hl3LzwafQigGctojNKGy+AXB9OR+Rj1zJMlFckCZJz0ll7Ef1HQ7z8M1AoeLx2CJLn4= 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=Xm3vjlFN; 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="Xm3vjlFN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807952; bh=EZJrSC8HKLIZeYkZ/ou7/O3NW58W1W8t+y2LSY8Uu94=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xm3vjlFNGg+PC2MuFwo/YHxsjBdtYgSTmDGb05RcKqwbGjVrOmUEn3KSDXp3hmrLC CNfzPS9uYrrgg7hU9Z9Qy62o6KvWNilvebhCLMvbOF/9gPa7na9bia4r4zw/XSa6ze MJY5JJ4TlvQNqqHUuTA2Sz1P4QAB1sgaSr7nHmejovxGUv8m+Qd8SiuVecftGHfxn2 r2Xd4PCdr9pX/bqdMVJURnwMsfM1WKTcGR9S9dnEEYKxjO2d2F32ks1r9SulpPCIlC N4tzs4LGq8Wfgzv7q7gKkJ4T2U+xyV+0wzvYnm58ryGPYiqXBdXR8RpB6qCEsklunm R3mbguZdl3O3A== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 502BC6000C; Sat, 13 Sep 2025 23:59:12 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 45C6D2038ED; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 03/11] tools: ynl-gen: add sub-type check Date: Sat, 13 Sep 2025 23:58:24 +0000 Message-ID: <20250913235847.358851-4-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 Add a check to verify that the sub-type is "nest", and throw an exception if no policy could be generated, as a guard to prevent against generating a bad policy. This is a trivial patch with no behavioural changes intended. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter Reviewed-by: Jakub Kicinski Reviewed-by: Jacob Keller --- tools/net/ynl/pyynl/ynl_gen_c.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 95a60fdaf14e..3266af19edcd 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -825,8 +825,10 @@ class TypeArrayNest(Type): return f'.type =3D YNL_PT_U{c_upper(self.sub_type[1:])}, ' elif self.attr['sub-type'] =3D=3D 'binary' and 'exact-len' in self= .checks: return f'.type =3D YNL_PT_BINARY, .len =3D {self.checks["exact= -len"]}, ' - else: + elif self.attr['sub-type'] =3D=3D 'nest': return f'.type =3D YNL_PT_NEST, .nest =3D &{self.nested_render= _name}_nest, ' + else: + raise Exception(f"Typol for ArrayNest sub-type {self.attr['sub= -type']} not supported, yet") =20 def _attr_get(self, ri, var): local_vars =3D ['const struct nlattr *attr2;'] --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 043B42C11D6; Sat, 13 Sep 2025 23:59:15 +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=1757807959; cv=none; b=W0zYVqXF+epW+hGsnotyAuWPiUMEh8nGTCMxJCXxw1gcO9T6eioEZIJm/9YxUx+hPdMTsYGNl1YFWgKfMngp0VrAlU18jRjncxdNSTReMxhQwT5zw/fj0GhyTBHR/Kr/DvkRraNpryDCJgzsJW4Bkm/4dwsUBtIdlku8tVQmf8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807959; c=relaxed/simple; bh=NCxd5MRWulhhiQGexBU/b6H+S/dHIidGMKcSy5JY6Lo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CTvY7mNc/qkYlHXJ313XAU2JOfnmHCGG3ro3YiC7EPAMOeOy3FKIkPCWWq50Z9AEdiB7UXNw7mWqCnzQUa72u5EQlZK0/D4XDz0tIPnD0zrs1wak/Wa2kLRC/T3wovZNvE0MEBQkQn2HX33PVJRmdrVkvO50qGP8ATQ1BPPCEDA= 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=S6SpsJhO; 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="S6SpsJhO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807952; bh=NCxd5MRWulhhiQGexBU/b6H+S/dHIidGMKcSy5JY6Lo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=S6SpsJhOOKjC2w5l1+EX+OcNvD9Ge6paj7F6JlTfAA/TX5zbP0J5TacS7nMKOC4Uv LPb67ik+J/yIVC9T93JaQKVZMIWsYPfk6aLaM/xi4Gza2EfuMqUR9hYxr4VOLaBYax kNDyJi7ZtyjXj2PmePNkWXEyZbVpmuBdCTZK/D60HkNdkz1C5vgZrJZLRrVGLni1fk cY751tl7X2ToujXIZIQJbnS3WYHfHHaHSSaP8jv181bJw2GOl4BdiSmMNTBmYCwGBb 7NMjxojLnqVHQOhQgccRKNJALmMxfv8cEbSuaIKUMBt3SPTkyUg57kGM6MrIISue54 mgQK8SHYKxNGw== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 6C0AB60128; Sat, 13 Sep 2025 23:59:12 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 4F10E203A9B; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 04/11] tools: ynl-gen: refactor local vars for .attr_put() callers Date: Sat, 13 Sep 2025 23:58:25 +0000 Message-ID: <20250913235847.358851-5-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 Refactor the generation of local variables needed when building requests, by moving the logic into the Type classes, and use the same helper in all places where .attr_put() is called. If any attributes requests identical local_vars, then they will be deduplicated, attributes are assumed to only use their local variables transiently. This patch fixes the build errors below: $ make -C tools/net/ynl/generated/ [...] -e GEN wireguard-user.c -e GEN wireguard-user.h -e CC wireguard-user.o wireguard-user.c: In function =E2=80=98wireguard_get_device_dump=E2=80=99: wireguard-user.c:480:9: error: =E2=80=98array=E2=80=99 undeclared (first us= e in func) 480 | array =3D ynl_attr_nest_start(nlh, WGDEVICE_A_PEERS); | ^~~~~ wireguard-user.c:480:9: note: each undeclared identifier is reported only once for each function it appears in wireguard-user.c:481:14: error: =E2=80=98i=E2=80=99 undeclared (first use i= n func) 481 | for (i =3D 0; i < req->_count.peers; i++) | ^ wireguard-user.c: In function =E2=80=98wireguard_set_device=E2=80=99: wireguard-user.c:533:9: error: =E2=80=98array=E2=80=99 undeclared (first us= e in func) 533 | array =3D ynl_attr_nest_start(nlh, WGDEVICE_A_PEERS); | ^~~~~ make: *** [Makefile:52: wireguard-user.o] Error 1 make: Leaving directory '/usr/src/linux/tools/net/ynl/generated' Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- tools/net/ynl/pyynl/ynl_gen_c.py | 33 +++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 3266af19edcd..85b1de6a7fef 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -840,6 +840,9 @@ class TypeArrayNest(Type): '}'] return get_lines, None, local_vars =20 + def attr_put_local_vars(self): + return ['struct nlattr *array;'] + def attr_put(self, ri, var): ri.cw.p(f'array =3D ynl_attr_nest_start(nlh, {self.enum_name});') if self.sub_type in scalars: @@ -2040,6 +2043,18 @@ def put_enum_to_str(family, cw, enum): _put_enum_to_str_helper(cw, enum.render_name, map_name, 'value', enum= =3Denum) =20 =20 +def put_local_vars(struct): + local_vars =3D set() + for _, attr in struct.member_list(): + if attr.presence_type() =3D=3D 'count': + local_vars.add('unsigned int i;') + try: + local_vars |=3D set(attr.attr_put_local_vars()) + except AttributeError: + pass + return list(local_vars) + + def put_req_nested_prototype(ri, struct, suffix=3D';'): func_args =3D ['struct nlmsghdr *nlh', 'unsigned int attr_type', @@ -2062,15 +2077,7 @@ def put_req_nested(ri, struct): init_lines.append(f"hdr =3D ynl_nlmsg_put_extra_header(nlh, {struc= t_sz});") init_lines.append(f"memcpy(hdr, &obj->_hdr, {struct_sz});") =20 - has_anest =3D False - has_count =3D False - for _, arg in struct.member_list(): - has_anest |=3D arg.type =3D=3D 'indexed-array' - has_count |=3D arg.presence_type() =3D=3D 'count' - if has_anest: - local_vars.append('struct nlattr *array;') - if has_count: - local_vars.append('unsigned int i;') + local_vars +=3D put_local_vars(struct) =20 put_req_nested_prototype(ri, struct, suffix=3D'') ri.cw.block_start() @@ -2354,10 +2361,7 @@ def print_req(ri): local_vars +=3D ['size_t hdr_len;', 'void *hdr;'] =20 - for _, attr in ri.struct["request"].member_list(): - if attr.presence_type() =3D=3D 'count': - local_vars +=3D ['unsigned int i;'] - break + local_vars +=3D put_local_vars(ri.struct['request']) =20 print_prototype(ri, direction, terminate=3DFalse) ri.cw.block_start() @@ -2424,6 +2428,9 @@ def print_dump(ri): local_vars +=3D ['size_t hdr_len;', 'void *hdr;'] =20 + if 'request' in ri.op[ri.op_mode]: + local_vars +=3D put_local_vars(ri.struct['request']) + ri.cw.write_func_lvar(local_vars) =20 ri.cw.p('yds.yarg.ys =3D ys;') --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 731C72D0C83; Sat, 13 Sep 2025 23:59:20 +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=1757807962; cv=none; b=ShoZ32IYn+Gbak1+IWzXoFPELdmrSCBbRb8QAmb6I9nuGrfgfg1zTOiSb5cQ/r50m07Dxpjq9O7f5OgTcPTcEHux4pvdUzqkGt7MYyeGlILInIVAjH7gVtoMIoMUR1vTK4VfORed3B7zMMF4X+MAkdDPToJCJlJehMVPY71KfAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807962; c=relaxed/simple; bh=5SUOgwk/jPqKcDI0HRaiiVgiVNPIaVAf/71OCe9IMeA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Wx8QorVNMo3ptkMv08I26QW5HuVxOz5rH0T1qBIUrUZ8yccLJ8Zi80AWz2Hp0FlF1YbsYMJnw1W3r5pTSgX/p++KYdYXqnSuiMdywx6cLbFFEdoZRJmXIaVH/NohX8S3QmuNZdkguxhyYKn0AvEvlfbdmC4fQ6XbZDXqxz3Hpcs= 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=LhvQlJ53; 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="LhvQlJ53" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=5SUOgwk/jPqKcDI0HRaiiVgiVNPIaVAf/71OCe9IMeA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LhvQlJ53L0IvOnqHWC23n7Sal5nWI4fwzbhRWiW1uOxuMJH0m7Dfs5Jms81nbtkX4 5xWnRri984Ve2HmQGTF1T2jsY1CtcuB9NrpUJCCJhjFy24kJnxAcV59h34hB1GJTxA eXu/XjaSNk0Q+nlIMK57LOf6WudJqAXp/hFfmEQPn+mxIMNd/n1ErHj5/jZ9V7TPn0 /wOzC3kzwNl+HlCedrV9hwRjKODtJ9mfKQ/J4ct4yFVNwxAcu7Uoxhklo861j1/BEs 0lEZafsPDO2nAAFaYpT/AydPInBSGO7z4H/QCr41/osIPui7Ha+lZH4xbbbhVkRYA/ 45mLM7EUrmQMw== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 9B9996013C; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 5963E2044FF; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 05/11] tools: ynl-gen: avoid repetitive variables definitions Date: Sat, 13 Sep 2025 23:58:26 +0000 Message-ID: <20250913235847.358851-6-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 In the generated attribute parsing code, avoid repetitively defining the same variables over and over again, local to the conditional block for each attribute. This patch consolidates the definitions of local variables for attribute parsing, so that they are defined at the function level, and re-used across attributes, thus making the generated code read more natural. If attributes defines identical local_vars, then they will be deduplicated, attributes are assumed to only use their local variables transiently. The example below shows how `len` was defined repeatedly in tools/net/ynl/generated/nl80211-user.c: nl80211_iftype_data_attrs_parse(..) { [..] ynl_attr_for_each_nested(attr, nested) { unsigned int type =3D ynl_attr_type(attr); if (type =3D=3D NL80211_BAND_IFTYPE_ATTR_IFTYPES) { unsigned int len; [..] } else if (type =3D=3D NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC) { unsigned int len; [..] [same pattern 8 times, so 11 times in total] } else if (type =3D=3D NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE) { unsigned int len; [..] } } return 0; } This patch results in this diffstat for the generated code: $ diff -Naur pre/ post/ | diffstat devlink-user.c | 187 +++---------------- dpll-user.c | 10 - ethtool-user.c | 49 +---- fou-user.c | 5 handshake-user.c | 3 mptcp_pm-user.c | 3 nfsd-user.c | 16 - nl80211-user.c | 159 +--------------- nlctrl-user.c | 21 -- ovpn-user.c | 7 ovs_datapath-user.c | 9 ovs_flow-user.c | 89 --------- ovs_vport-user.c | 7 rt-addr-user.c | 14 - rt-link-user.c | 183 ++---------------- rt-neigh-user.c | 14 - rt-route-user.c | 26 -- rt-rule-user.c | 11 - tc-user.c | 380 +++++---------------------------------- tcp_metrics-user.c | 7 team-user.c | 5 21 files changed, 175 insertions(+), 1030 deletions(-) The changed lines are mostly `unsigned int len;` definitions: $ diff -Naur pre/ post/ | grep ^[-+] | grep -v '^[-+]\{3\}' | grep -v '^.$' | sed -e 's/\t\+/ /g' | sort | uniq -c | sort -nr 488 - unsigned int len; 153 + unsigned int len; 24 - const struct nlattr *attr2; 18 + const struct nlattr *attr2; 1 - __u32 policy_id, attr_id; 1 + __u32 policy_id, attr_id; 1 - __u32 op_id; 1 + __u32 op_id; 1 - const struct nlattr *attr_policy_id, *attr_attr_id; 1 + const struct nlattr *attr_policy_id, *attr_attr_id; 1 - const struct nlattr *attr_op_id; 1 + const struct nlattr *attr_op_id; Suggested-by: Jakub Kicinski Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- tools/net/ynl/pyynl/ynl_gen_c.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 85b1de6a7fef..9555c9a2fea5 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -242,7 +242,7 @@ class Type(SpecAttr): raise Exception(f"Attr get not implemented for class type {self.ty= pe}") =20 def attr_get(self, ri, var, first): - lines, init_lines, local_vars =3D self._attr_get(ri, var) + lines, init_lines, _ =3D self._attr_get(ri, var) if type(lines) is str: lines =3D [lines] if type(init_lines) is str: @@ -250,10 +250,6 @@ class Type(SpecAttr): =20 kw =3D 'if' if first else 'else if' ri.cw.block_start(line=3Df"{kw} (type =3D=3D {self.enum_name})") - if local_vars: - for local in local_vars: - ri.cw.p(local) - ri.cw.nl() =20 if not self.is_multi_val(): ri.cw.p("if (ynl_attr_validate(yarg, attr))") @@ -2114,6 +2110,7 @@ def _multi_parse(ri, struct, init_lines, local_vars): else: raise Exception("Per-op fixed header not supported, yet") =20 + var_set =3D set() array_nests =3D set() multi_attrs =3D set() needs_parg =3D False @@ -2131,6 +2128,13 @@ def _multi_parse(ri, struct, init_lines, local_vars): multi_attrs.add(arg) needs_parg |=3D 'nested-attributes' in aspec needs_parg |=3D 'sub-message' in aspec + + try: + _, _, l_vars =3D aspec._attr_get(ri, '') + var_set |=3D set(l_vars) if l_vars else set() + except Exception: + pass # _attr_get() not implemented by simple types, ignore + local_vars +=3D list(var_set) if array_nests or multi_attrs: local_vars.append('int i;') if needs_parg: --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 E9DA62D0606; Sat, 13 Sep 2025 23:59:19 +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=1757807962; cv=none; b=Ov7Fau72jNzV3RPBu2N8ffYNrGCTYP1rKyjfh4ILmsg+++OJWm7FqfTnQZmwqFdPFyQpXWsSTGVZjaQbpfVc4suVlX77h+9ADEz9yUj7RljfRJQSHemIUUnzvLJsKlCSvN+E8S9HYPxGW0zGd+PKWydPozrvZ/bD8fg8g/uGu+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807962; c=relaxed/simple; bh=isN9nfZe/xsnXb7EvebVXPVfEeOjs2MBmF1UCAMY/qk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VktMaFtIkItdZzNoeUQfToSnkokD7Ohxbq1PoZa/ujFuijhxVgV2P5M+kCx1LyVePT+v1EWbJdmeqDCYJCUkW3NHOWZJ4HO1A3joDXfUXp3ro5DHm99Q2lfSUPEtTsmu+6X2chgpN7lPdlxGZyNCGKFXnNaPGDsktUvnEkrYE80= 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=Zq5DYmkV; 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="Zq5DYmkV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=isN9nfZe/xsnXb7EvebVXPVfEeOjs2MBmF1UCAMY/qk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zq5DYmkVsf0nokW5rVwmeFLd5WdW9eQydGs4RPOYNxiDAbQC/xja11MuqZWQn2xF4 Pj16ocpATtRjgJMDBhvzlNULxawllsL4sULPW32xzsYz/4fxGyggbxDto2WqoY5b66 AbdlX2Qk7izyE6IuY+xzHFUoXvhnVMacCdYUkh1x8M8T7vYcEFlvBJR06hnGZhw4FU ORpaIy5qhijaeWTtQ1a5iwAT94JIZ6+mY77J3W9a6wCq/xsuZ0m6wqGD5RttLaePJL 65N6bMnSFI11udUQm9ELAzO7iYQrlDjzGjcwTRGux+HOrU7ILZupz0a0BI4qDzQAjD 6MDr7+JyqB/HQ== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id B50E460140; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 61FE8204B0E; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 06/11] tools: ynl-gen: validate nested arrays Date: Sat, 13 Sep 2025 23:58:27 +0000 Message-ID: <20250913235847.358851-7-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 In nested arrays don't require that the intermediate attribute type should be a valid attribute type, it might just be zero or an incrementing index, it is often not even used. See include/net/netlink.h about NLA_NESTED_ARRAY: > The difference to NLA_NESTED is the structure: > NLA_NESTED has the nested attributes directly inside > while an array has the nested attributes at another > level down and the attribute types directly in the > nesting don't matter. Example based on include/uapi/linux/wireguard.h: > WGDEVICE_A_PEERS: NLA_NESTED > 0: NLA_NESTED > WGPEER_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN > [..] > 0: NLA_NESTED > ... > ... Previous the check required that the nested type was valid in the parent attribute set, which in this case resolves to WGDEVICE_A_UNSPEC, which is YNL_PT_REJECT, and it took the early exit and returned YNL_PARSE_CB_ERROR. This patch renames the old nl_attr_validate() to __nl_attr_validate(), and creates a new inline function nl_attr_validate() to mimic the old one. The new __nl_attr_validate() takes the attribute type as an argument, so we can use it to validate attributes of a nested attribute, in the context of the parents attribute type, which in the above case is generated as: [WGDEVICE_A_PEERS] =3D { .name =3D "peers", .type =3D YNL_PT_NEST, .nest =3D &wireguard_wgpeer_nest, }, __nl_attr_validate() only checks if the attribute length is plausible for a given attribute type, so the .nest in the above example is not used. As the new inline function needs to be defined after ynl_attr_type(), then the definitions are moved down, so we avoid a forward declaration of ynl_attr_type(). Some other examples are NL80211_BAND_ATTR_FREQS (nest) and NL80211_ATTR_SUPPORTED_COMMANDS (u32) both in nl80211-user.c $ make -C tools/net/ynl/generated nl80211-user.c Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- tools/net/ynl/lib/ynl-priv.h | 10 +++++++++- tools/net/ynl/lib/ynl.c | 6 +++--- tools/net/ynl/pyynl/ynl_gen_c.py | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/net/ynl/lib/ynl-priv.h b/tools/net/ynl/lib/ynl-priv.h index 824777d7e05e..29481989ea76 100644 --- a/tools/net/ynl/lib/ynl-priv.h +++ b/tools/net/ynl/lib/ynl-priv.h @@ -106,7 +106,6 @@ ynl_gemsg_start_req(struct ynl_sock *ys, __u32 id, __u8= cmd, __u8 version); struct nlmsghdr * ynl_gemsg_start_dump(struct ynl_sock *ys, __u32 id, __u8 cmd, __u8 version= ); =20 -int ynl_attr_validate(struct ynl_parse_arg *yarg, const struct nlattr *att= r); int ynl_submsg_failed(struct ynl_parse_arg *yarg, const char *field_name, const char *sel_name); =20 @@ -467,4 +466,13 @@ ynl_attr_put_sint(struct nlmsghdr *nlh, __u16 type, __= s64 data) else ynl_attr_put_s64(nlh, type, data); } + +int __ynl_attr_validate(struct ynl_parse_arg *yarg, const struct nlattr *a= ttr, + unsigned int type); + +static inline int ynl_attr_validate(struct ynl_parse_arg *yarg, + const struct nlattr *attr) +{ + return __ynl_attr_validate(yarg, attr, ynl_attr_type(attr)); +} #endif diff --git a/tools/net/ynl/lib/ynl.c b/tools/net/ynl/lib/ynl.c index 2a169c3c0797..2bcd781111d7 100644 --- a/tools/net/ynl/lib/ynl.c +++ b/tools/net/ynl/lib/ynl.c @@ -360,15 +360,15 @@ static int ynl_cb_done(const struct nlmsghdr *nlh, st= ruct ynl_parse_arg *yarg) =20 /* Attribute validation */ =20 -int ynl_attr_validate(struct ynl_parse_arg *yarg, const struct nlattr *att= r) +int __ynl_attr_validate(struct ynl_parse_arg *yarg, const struct nlattr *a= ttr, + unsigned int type) { const struct ynl_policy_attr *policy; - unsigned int type, len; unsigned char *data; + unsigned int len; =20 data =3D ynl_attr_data(attr); len =3D ynl_attr_data_len(attr); - type =3D ynl_attr_type(attr); if (type > yarg->rsp_policy->max_attr) { yerr(yarg->ys, YNL_ERROR_INTERNAL, "Internal error, validating unknown attribute"); diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 9555c9a2fea5..8f8d33593326 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -830,7 +830,7 @@ class TypeArrayNest(Type): local_vars =3D ['const struct nlattr *attr2;'] get_lines =3D [f'attr_{self.c_name} =3D attr;', 'ynl_attr_for_each_nested(attr2, attr) {', - '\tif (ynl_attr_validate(yarg, attr2))', + '\tif (__ynl_attr_validate(yarg, attr2, type))', '\t\treturn YNL_PARSE_CB_ERROR;', f'\tn_{self.c_name}++;', '}'] --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 783082D0C90; Sat, 13 Sep 2025 23:59:20 +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=1757807962; cv=none; b=Rhb1Pz7+H44+DFDhIUml17th806cvXvuPvJDfoZWZr9qKBCW85lS8Z8mZDjAVlDARZ0MKKzktTrTtnvdXmfX6n6Eutga5Mn7U1Z/eYZesq1sDe8ehGZU2aEWeaLWv0+tuB9cY1b3SfBOZDCjrSFn5ozq4CAGHjpr1AjV1ZGi5cU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807962; c=relaxed/simple; bh=3huony5rWRNwdMe+oTt9EYg/5g9KIV+lUBK8vAs7drw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lA3IEnNPD0vkg8Lo3TeAQGQUgLDG4d7blSO6ilAZVMC0dzQpQqJkU3nK6d8Wt+zrMEqS8sFph3w78LvC4nBP9sYRoxipzbs+QWO4KD6bs/b5k28XGxDWHCqdFUN1SQbFFCTrPvnvCSbfN26QQbCyIOM8UJJVMz+b43RJtMv4DTQ= 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=OoXRNCSW; 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="OoXRNCSW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=3huony5rWRNwdMe+oTt9EYg/5g9KIV+lUBK8vAs7drw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OoXRNCSW7bGw/6R9bV0mRqSfONGbCG82uTVIaFxxZVzt0D2qm/KnlnK0aDB7lNPq0 gLRxd3S6AmwikoXSDMb4QdrHJAbY0eNsowl71JzcBMmGzJfxHaXSKLwadMFDC4ohOC 6w63ineRtQTOFjv7483fHRuNHIF2Lity7k+tk1NUgcV5ro2DiBkJ9ynWlbNFjTFELm ldJgelJbcyj2v/JAwaQTFHo0+26r5NQuO70Yv9ifHy0NUDCw2kX0mqJ7QDOTNnXW6b xMVVUWubHAspJD7XRXN5khif0QFhj6rcoZ4EkdbF0fpRGYBb3qly0Tj58Hr/zdz4lu W0TK/p6KTPsFg== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id AB3BD6013F; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 6BA5C204C9F; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 07/11] tools: ynl-gen: rename TypeArrayNest to TypeIndexedArray Date: Sat, 13 Sep 2025 23:58:28 +0000 Message-ID: <20250913235847.358851-8-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 Since TypeArrayNest can now be used with many other sub-types than nest, then rename it to TypeIndexedArray, to reduce confusion. This patch continues the rename, that was started in commit aa6485d813ad ("ynl: rename array-nest to indexed-array"), when the YNL type was renamed. In order to get rid of all references to the old naming, within ynl, then renaming some variables in _multi_parse(). This is a trivial patch with no behavioural changes intended. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter --- tools/net/ynl/pyynl/ynl_gen_c.py | 36 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index 8f8d33593326..55b52fc9cf43 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -787,7 +787,7 @@ class TypeMultiAttr(Type): f"{presence} =3D n_{self.c_name};"] =20 =20 -class TypeArrayNest(Type): +class TypeIndexedArray(Type): def is_multi_val(self): return True =20 @@ -824,7 +824,7 @@ class TypeArrayNest(Type): elif self.attr['sub-type'] =3D=3D 'nest': return f'.type =3D YNL_PT_NEST, .nest =3D &{self.nested_render= _name}_nest, ' else: - raise Exception(f"Typol for ArrayNest sub-type {self.attr['sub= -type']} not supported, yet") + raise Exception(f"Typol for IndexedArray sub-type {self.attr['= sub-type']} not supported, yet") =20 def _attr_get(self, ri, var): local_vars =3D ['const struct nlattr *attr2;'] @@ -853,7 +853,7 @@ class TypeArrayNest(Type): ri.cw.p(f'for (i =3D 0; i < {var}->_count.{self.c_name}; i++)') ri.cw.p(f"{self.nested_render_name}_put(nlh, i, &{var}->{self.= c_name}[i]);") else: - raise Exception(f"Put for ArrayNest sub-type {self.attr['sub-t= ype']} not supported, yet") + raise Exception(f"Put for IndexedArray sub-type {self.attr['su= b-type']} not supported, yet") ri.cw.p('ynl_attr_nest_end(nlh, array);') =20 def _setter_lines(self, ri, member, presence): @@ -1130,7 +1130,7 @@ class AttrSet(SpecAttrSet): t =3D TypeNest(self.family, self, elem, value) elif elem['type'] =3D=3D 'indexed-array' and 'sub-type' in elem: if elem["sub-type"] in ['binary', 'nest', 'u32']: - t =3D TypeArrayNest(self.family, self, elem, value) + t =3D TypeIndexedArray(self.family, self, elem, value) else: raise Exception(f'new_attr: unsupported sub-type {elem["su= b-type"]}') elif elem['type'] =3D=3D 'nest-type-value': @@ -2110,18 +2110,18 @@ def _multi_parse(ri, struct, init_lines, local_vars= ): else: raise Exception("Per-op fixed header not supported, yet") =20 - var_set =3D set() - array_nests =3D set() + indexed_arrays =3D set() multi_attrs =3D set() needs_parg =3D False + var_set =3D set() for arg, aspec in struct.member_list(): if aspec['type'] =3D=3D 'indexed-array' and 'sub-type' in aspec: if aspec["sub-type"] in {'binary', 'nest'}: local_vars.append(f'const struct nlattr *attr_{aspec.c_nam= e};') - array_nests.add(arg) + indexed_arrays.add(arg) elif aspec['sub-type'] in scalars: local_vars.append(f'const struct nlattr *attr_{aspec.c_nam= e};') - array_nests.add(arg) + indexed_arrays.add(arg) else: raise Exception(f'Not supported sub-type {aspec["sub-type"= ]}') if 'multi-attr' in aspec: @@ -2135,16 +2135,16 @@ def _multi_parse(ri, struct, init_lines, local_vars= ): except Exception: pass # _attr_get() not implemented by simple types, ignore local_vars +=3D list(var_set) - if array_nests or multi_attrs: + if indexed_arrays or multi_attrs: local_vars.append('int i;') if needs_parg: local_vars.append('struct ynl_parse_arg parg;') init_lines.append('parg.ys =3D yarg->ys;') =20 - all_multi =3D array_nests | multi_attrs + all_multi =3D indexed_arrays | multi_attrs =20 - for anest in sorted(all_multi): - local_vars.append(f"unsigned int n_{struct[anest].c_name} =3D 0;") + for arg in sorted(all_multi): + local_vars.append(f"unsigned int n_{struct[arg].c_name} =3D 0;") =20 ri.cw.block_start() ri.cw.write_func_lvar(local_vars) @@ -2164,8 +2164,8 @@ def _multi_parse(ri, struct, init_lines, local_vars): else: ri.cw.p('hdr =3D ynl_nlmsg_data_offset(nlh, sizeof(struct genl= msghdr));') ri.cw.p(f"memcpy(&dst->_hdr, hdr, sizeof({struct.fixed_header}));") - for anest in sorted(all_multi): - aspec =3D struct[anest] + for arg in sorted(all_multi): + aspec =3D struct[arg] ri.cw.p(f"if (dst->{aspec.c_name})") ri.cw.p(f'return ynl_error_parse(yarg, "attribute already present = ({struct.attr_set.name}.{aspec.name})");') =20 @@ -2183,8 +2183,8 @@ def _multi_parse(ri, struct, init_lines, local_vars): ri.cw.block_end() ri.cw.nl() =20 - for anest in sorted(array_nests): - aspec =3D struct[anest] + for arg in sorted(indexed_arrays): + aspec =3D struct[arg] =20 ri.cw.block_start(line=3Df"if (n_{aspec.c_name})") ri.cw.p(f"dst->{aspec.c_name} =3D calloc(n_{aspec.c_name}, sizeof(= *dst->{aspec.c_name}));") @@ -2209,8 +2209,8 @@ def _multi_parse(ri, struct, init_lines, local_vars): ri.cw.block_end() ri.cw.nl() =20 - for anest in sorted(multi_attrs): - aspec =3D struct[anest] + for arg in sorted(multi_attrs): + aspec =3D struct[arg] ri.cw.block_start(line=3Df"if (n_{aspec.c_name})") ri.cw.p(f"dst->{aspec.c_name} =3D calloc(n_{aspec.c_name}, sizeof(= *dst->{aspec.c_name}));") ri.cw.p(f"dst->_count.{aspec.c_name} =3D n_{aspec.c_name};") --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 688DB2C11CC; Sat, 13 Sep 2025 23:59:15 +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=1757807958; cv=none; b=etPZK/wbO0xEB+MFbN3CbAFSauJYZN1nao/IkjuiLaYZFEDS0i9cd8LWjdKCpquaBMXeOwHJU72wjDP5a2d1oTH5YhJBcA21FUXzMFZHCAaSja31039HnIBmeYJSnEHbJ5RdEdYalz33GsOwE8PK61F6iHG5b2rRcYdzW8zwOdE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807958; c=relaxed/simple; bh=HqyIhwC1Ng9W9Rs+TyJnvWCNwSRIXH4apSsRMl21lQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FO4easMbd057oqpn1Km4wLoiDryxSMD+Kl5ehOLY5HTG1j/CZrnwm7vCIEFYPtN2MGWvPXRQzT9ei7vaSymbIKwUA1f/l7G7kK9ytzMEfHrfrQ6lRELSA7NlXC8iGO3jde/w0bYkfvZy2uwlZNwcUO+XeLzh7iSiJqSv+hHjr1s= 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=le4JH8fI; 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="le4JH8fI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807952; bh=HqyIhwC1Ng9W9Rs+TyJnvWCNwSRIXH4apSsRMl21lQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=le4JH8fI75erN98H+o4YToCsQY9N/LYcIKUefNNJf85hoyeGBl4urZHbdkoQvJN7D nIDk0FzfygsPBlrMH0toZpnFxJnBsP2nS4lXsh1TSKHalHXC7BjAHJ4nPENP6rfafq isDbhCLIspbDwifBF0NbPADXdrEb3ZORL8iZ0B7r5u1mSME7keRU0cgCACfn8RXY/E PzqgugldhzK42isqyrxuvg3fkDm0GCoflVS1ue60SyVZNjirz9fHjC+WqU9bb/GZib pWypIMyXCqDuxC6jPyrQpGnedCZwwlAaYTIV5QhcFsh8aNNO5ZyNU08K29bgEIPqpz 7IT2XDlhiDqiA== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 5585A600C4; Sat, 13 Sep 2025 23:59:12 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 75069204E9E; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 08/11] tools: ynl: move nest packing to a helper function Date: Sat, 13 Sep 2025 23:58:29 +0000 Message-ID: <20250913235847.358851-9-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 moves nest packing into a helper function, that can also be used for packing indexed arrays. No behavioural changes intended. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter --- tools/net/ynl/pyynl/lib/ynl.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py index 50805e05020a..92ff26f34f4d 100644 --- a/tools/net/ynl/pyynl/lib/ynl.py +++ b/tools/net/ynl/pyynl/lib/ynl.py @@ -561,11 +561,8 @@ class YnlFamily(SpecFamily): =20 if attr["type"] =3D=3D 'nest': nl_type |=3D Netlink.NLA_F_NESTED - attr_payload =3D b'' sub_space =3D attr['nested-attributes'] - sub_attrs =3D SpaceAttrs(self.attr_sets[sub_space], value, sea= rch_attrs) - for subname, subvalue in value.items(): - attr_payload +=3D self._add_attr(sub_space, subname, subva= lue, sub_attrs) + attr_payload =3D self._add_nest_attrs(value, sub_space, search= _attrs) elif attr["type"] =3D=3D 'flag': if not value: # If value is absent or false then skip attribute creation. @@ -622,6 +619,14 @@ class YnlFamily(SpecFamily): pad =3D b'\x00' * ((4 - len(attr_payload) % 4) % 4) return struct.pack('HH', len(attr_payload) + 4, nl_type) + attr_pa= yload + pad =20 + def _add_nest_attrs(self, value, sub_space, search_attrs): + sub_attrs =3D SpaceAttrs(self.attr_sets[sub_space], value, search_= attrs) + attr_payload =3D b'' + for subname, subvalue in value.items(): + attr_payload +=3D self._add_attr(sub_space, subname, subvalue, + sub_attrs) + return attr_payload + def _get_enum_or_unknown(self, enum, raw): try: name =3D enum.entries_by_val[raw].name --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 EA1092D060E; Sat, 13 Sep 2025 23:59:19 +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=1757807962; cv=none; b=Iu61iHC35NR5YH43Fv1O+iFy+P5l1eskImqHW2UObqfAlx+KeWcDiJiy/gCbDcSkRqnrM2Y6KYyqpAmRM6+Z+QXAUcQIhcHx+sgAccRg88oVLU05+hLmHZ8xX1Uq1GxEfiLjEFxqHC4X3J6d8Vs0Rhy8XkFUXDeYxND8sAoTSm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807962; c=relaxed/simple; bh=+xB7OdBH5/hOoPqTnhZSd84UXQV32QC9Igc+BZIJ9TQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WGhr1+JQmtHK5H0n9bSnG52zSWX8Ick54hrkMSIHel4ftcJ6wzZb9LbhU2pHFHTh730eW/rTi2dP3MymcF19vLyrYzVP6Nh0YqAJe/kiWICHwpExl9ODX/fQ6xkhHMPJZ0ZaZ9dAy0/5eevju+nOoeHAGJzAj28PWtsbXLEG0RA= 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=NrZQX0B6; 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="NrZQX0B6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807953; bh=+xB7OdBH5/hOoPqTnhZSd84UXQV32QC9Igc+BZIJ9TQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NrZQX0B6c0VYXfc1W00IuMRAyT6sTusNLKz0qI/f5ImeJ7fPVHXoy3ak5EVb4vh7q 0S2olyQRNCz2A8EzsHc1Tn2+JmwYG6aOd8Edzd2wd8MQJdHei68rRnZK+oDCrBHPf4 FI0Wt8gSTuCE41u8idQDSSHdwhoDCtj4cWdp6vpRShRZ8TzAj4Rpdu3nHSK8S8Ojfa EFyF7+iEjaFafzs7QJUF57VN5r5TMv1td5k3HcX9rofv8W6KjaGlPzSRn5RXBdRUbg WNnVfGd99JQ21uoCzjBs6RBd4xmlYw0P7s0r759v3lzBIZ7+BzYmY98AfS2wlAkuz8 zY5EddjHEE39g== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 9B8866013B; Sat, 13 Sep 2025 23:59:13 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 7E196204EED; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 09/11] tools: ynl: encode indexed-arrays Date: Sat, 13 Sep 2025 23:58:30 +0000 Message-ID: <20250913235847.358851-10-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 adds support for encoding indexed-array attributes with sub-type nest in pyynl. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter --- tools/net/ynl/pyynl/lib/ynl.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py index 92ff26f34f4d..9fd83f8b091f 100644 --- a/tools/net/ynl/pyynl/lib/ynl.py +++ b/tools/net/ynl/pyynl/lib/ynl.py @@ -563,6 +563,11 @@ class YnlFamily(SpecFamily): nl_type |=3D Netlink.NLA_F_NESTED sub_space =3D attr['nested-attributes'] attr_payload =3D self._add_nest_attrs(value, sub_space, search= _attrs) + elif attr['type'] =3D=3D 'indexed-array' and attr['sub-type'] =3D= =3D 'nest': + nl_type |=3D Netlink.NLA_F_NESTED + sub_space =3D attr['nested-attributes'] + attr_payload =3D self._encode_indexed_array(value, sub_space, + search_attrs) elif attr["type"] =3D=3D 'flag': if not value: # If value is absent or false then skip attribute creation. @@ -616,6 +621,9 @@ class YnlFamily(SpecFamily): else: raise Exception(f'Unknown type at {space} {name} {value} {attr= ["type"]}') =20 + return self._add_attr_raw(nl_type, attr_payload) + + def _add_attr_raw(self, nl_type, attr_payload): pad =3D b'\x00' * ((4 - len(attr_payload) % 4) % 4) return struct.pack('HH', len(attr_payload) + 4, nl_type) + attr_pa= yload + pad =20 @@ -627,6 +635,14 @@ class YnlFamily(SpecFamily): sub_attrs) return attr_payload =20 + def _encode_indexed_array(self, vals, sub_space, search_attrs): + attr_payload =3D b'' + for i, val in enumerate(vals): + idx =3D i | Netlink.NLA_F_NESTED + val_payload =3D self._add_nest_attrs(val, sub_space, search_at= trs) + attr_payload +=3D self._add_attr_raw(idx, val_payload) + return attr_payload + def _get_enum_or_unknown(self, enum, raw): try: name =3D enum.entries_by_val[raw].name --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 688692BEFFB; Sat, 13 Sep 2025 23:59:15 +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=1757807958; cv=none; b=nRnxUnvQrAWOVtfQbLt2ntvmmgq0K6dHqwrm7j0pVDEK1CKAxDs+cqSRMc/+A2YiN1rcjzfX2uWpaR2cdtNgxTv0CBR/XFFHhqsGiOVoJ1Z2PFIYlkeWKwztuABYJjIv+rSza3qMD4RMc7x5EBW67EBpX8HOZrqovFJ2F1+bXDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807958; c=relaxed/simple; bh=CklzBOgUQddwzBO3UlL2pkEPjFixeUSxqIJvFTCFOhk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WdF7zfRjvnwJUqVvCxVAaT2R2X2WcSCCjGPNaAWoVAYyx+kMxFg2O/eXSPmd8CGOA494qqsL/Ap/Ixi2zdvUj5Vw9wwMMX1aQbyp0N2FqyeR2BGeWSbAhKJh3HVDAsjTbTz3RJzmJvQbvbBIzbxnIOLkApOtiNfc8EdyU1fDcwo= 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=ZFbeA0ob; 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="ZFbeA0ob" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807952; bh=CklzBOgUQddwzBO3UlL2pkEPjFixeUSxqIJvFTCFOhk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZFbeA0obsZ/LV8zfxCNfnZr8P4fn3Izl0iP8loTpz26QA5GLRLQbhr07vsyiqvzu2 HXSxDiAFT6+ebF4L/cfkX7RVaboS2r+GNrWugJeHtc5TyVEGAkm40/rQ89dLvRKMe0 TerYLVBMzIM5GzwQZrUMT5WnQfkLUKVoPvha0FnJ7AO97JTeZD3QwVgvgFaW15gnIw J4UemLGvg9KLghk8Yb/D2yjU1ElPyIas0QzJprWMAId83fchbSpS+LfywCle/tJ9hz g5bDx5aKUZvdqTmrYsPtWe62Z8qmHJ+mg7o3JsGUDtxH+loDxFOHg46SKnD7bC4kS1 PvtYvCI9CaeMQ== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 5310960078; Sat, 13 Sep 2025 23:59:12 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 878D420519B; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 10/11] tools: ynl: decode hex input Date: Sat, 13 Sep 2025 23:58:31 +0000 Message-ID: <20250913235847.358851-11-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 adds support for decoding hex input, so that binary attributes can be read through --json. Example (using future wireguard.yaml): $ sudo ./tools/net/ynl/pyynl/cli.py --family wireguard \ --do set-device --json '{"ifindex":3, "private-key":"2a ae 6c 35 c9 4f cf <... to 32 bytes>"}' In order to somewhat mirror what is done in _formatted_string(), then for non-binary attributes attempt to convert it to an int. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter --- tools/net/ynl/pyynl/lib/ynl.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py index 9fd83f8b091f..707753e371e2 100644 --- a/tools/net/ynl/pyynl/lib/ynl.py +++ b/tools/net/ynl/pyynl/lib/ynl.py @@ -971,6 +971,11 @@ class YnlFamily(SpecFamily): raw =3D ip.packed else: raw =3D int(ip) + elif attr_spec.display_hint =3D=3D 'hex': + if attr_spec['type'] =3D=3D 'binary': + raw =3D bytes.fromhex(string) + else: + raw =3D int(string, 16) else: raise Exception(f"Display hint '{attr_spec.display_hint}' not = implemented" f" when parsing '{attr_spec['name']}'") --=20 2.51.0 From nobody Thu Oct 2 17:02:10 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 043412C11CE; Sat, 13 Sep 2025 23:59:15 +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=1757807958; cv=none; b=OqQvoQUTjL7ROT19FPMgL5dzRbegGYVs6fAaKME+qG3ivpIivk/q2oLAeiKfji4vvW8mRCp0Wx/y0vkWhWob4wAos7BEXFNgYYQR4rCBFBY2qXZUgnsCVBuiR++bRE+lDC2eyOFb9IZf8IOv94iEqLU536DhPEvjHViEy/v2Fjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757807958; c=relaxed/simple; bh=M8RZw0PcAr23td7B4SWZsTm8GfTk/HQcBuK2/+z1TOk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dp3bfDVHibrDc+zZonweAvLXAondxUrs8sQpKPsmkfkba2Ba46vOqfg6+8TkXNH8+mDuig2vNZyDwLgt4LtD7WEav3bmUOk7T6pWA69xuvsrkW/24rnPdZ2qtvoFdRdkue7/oRb1OjEEfKYL+P2vk+qP9Tf1Pj4rAQNLaXdm540= 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=is9uAdaN; 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="is9uAdaN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1757807952; bh=M8RZw0PcAr23td7B4SWZsTm8GfTk/HQcBuK2/+z1TOk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=is9uAdaN3UZ0mzHCMX0szSPW7peuoWfu+HJ9BcWLE0npk2Je3H+rNphAB1f7b6n9b U3wa9DTDS+ktV/g9CrKQUXMQhZvIq8pjnqf0pGWsX+lFU2hkA0eBqBOY41ZDeFFa2P ubNrF9EHP8wa8AiyMkaQD0+JxDwxm0+znMtQ0Xa8Y2w5IBCrZRMnewdlGd42x1mKJr eb4je4zeyQ2RecQMSQPZxRoW8h5jlNor+7/HkxsIQAtj0EWJ3KqxS5LVpf58jYjWNB zmwT1iDInze2uP5Z88JsigSQRVuxSuiARFr4eyrQlpXvAp4X6cJg3NEHqB/j8IIAZV XnWFyaDesxDwQ== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id BF3BF6012E; Sat, 13 Sep 2025 23:59:12 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id 912D32051E5; Sat, 13 Sep 2025 23:58:57 +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 , Sabrina Dubroca , wireguard@lists.zx2c4.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 11/11] tools: ynl: add ipv4-or-v6 display hint Date: Sat, 13 Sep 2025 23:58:32 +0000 Message-ID: <20250913235847.358851-12-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250913235847.358851-1-ast@fiberby.net> References: <20250913235847.358851-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 The attribute WGALLOWEDIP_A_IPADDR can contain either an IPv4 or an IPv6 address depending on WGALLOWEDIP_A_FAMILY, however in practice it is enough to look at the attribute length. This patch implements an ipv4-or-v6 display hint, that can deal with this kind of attribute. It only implements this display hint for genetlink-legacy, it can be added to other protocol variants if needed, but we don't want to encourage it's use. Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen Reviewed-by: Donald Hunter --- Documentation/netlink/genetlink-legacy.yaml | 2 +- tools/net/ynl/pyynl/lib/ynl.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/netlink/genetlink-legacy.yaml b/Documentation/ne= tlink/genetlink-legacy.yaml index b29d62eefa16..66fb8653a344 100644 --- a/Documentation/netlink/genetlink-legacy.yaml +++ b/Documentation/netlink/genetlink-legacy.yaml @@ -154,7 +154,7 @@ properties: Optional format indicator that is intended only for choo= sing the right formatting mechanism when displaying values of= this type. - enum: [ hex, mac, fddi, ipv4, ipv6, uuid ] + enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ] struct: description: Name of the nested struct type. type: string diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py index 707753e371e2..62383c70ebb9 100644 --- a/tools/net/ynl/pyynl/lib/ynl.py +++ b/tools/net/ynl/pyynl/lib/ynl.py @@ -956,7 +956,7 @@ class YnlFamily(SpecFamily): formatted =3D hex(raw) else: formatted =3D bytes.hex(raw, ' ') - elif display_hint in [ 'ipv4', 'ipv6' ]: + elif display_hint in [ 'ipv4', 'ipv6', 'ipv4-or-v6' ]: formatted =3D format(ipaddress.ip_address(raw)) elif display_hint =3D=3D 'uuid': formatted =3D str(uuid.UUID(bytes=3Draw)) @@ -965,7 +965,7 @@ class YnlFamily(SpecFamily): return formatted =20 def _from_string(self, string, attr_spec): - if attr_spec.display_hint in ['ipv4', 'ipv6']: + if attr_spec.display_hint in ['ipv4', 'ipv6', 'ipv4-or-v6']: ip =3D ipaddress.ip_address(string) if attr_spec['type'] =3D=3D 'binary': raw =3D ip.packed --=20 2.51.0