From nobody Thu Nov 27 14:02:43 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 4B82C2F691B; Thu, 20 Nov 2025 17:47:56 +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=1763660881; cv=none; b=C0uvHJ8rIXiJXFhPA3+l8av3wA0PyqVYuJsyss7kOrG8O41c3a2SPlTBsWJmUB/+LBbHFVKSyWrI64evow45MMIoKFyXxfjddlurkrdBWW8NdeJ7caAVBU1TRLGevV3uJmgY6xYOLuEwIwnMh9EN8TI9n1rXP1b/8R8DG3gMzQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763660881; c=relaxed/simple; bh=7Hii1fepSYb2R2xAPHJoYXk4k8Ps7RQqJ8Ba8lBX0ks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iE2KzNxMMu15w6dOeveyO5fgHkWNpdgUenZjm2fDCN6aWQ9tiOSxFHfIv5fmV5VvHkFcKFAWMKEudCsrMNu3mb7P7LXZgwAFai8kWHErMjGlBrDICVj67X5Rb53tvXuvniqvMY9vErtEtvEWtrfIjATWDPdvDFVciIKKMUc3OR4= 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=mgQAyN0J; 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="mgQAyN0J" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiberby.net; s=202008; t=1763660872; bh=7Hii1fepSYb2R2xAPHJoYXk4k8Ps7RQqJ8Ba8lBX0ks=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mgQAyN0JxSO6T6Wp5PMGr0h69W2XRKcuK8ZRopawNJa1H7NO/c34ySjzfjfkW9CZ2 yzqWf7WugthCmQ7v/3QeQa/1WXV4b8yKU6mZmsZDyRDLPHwPhTLyaMaokFm9oC9ghj uL5WMJgNzAUTbCw9x/0P4m9fJu/b9poMf5twrXMU679J/v0Q6hikFJGRc0lFk63Rer PAHjWP+xfX9ABUmGPJEG+gYG0Qc5DpDbELZyCamW4oXLxsjBwbIcqinQfHmmIswSGo tLmgI/2KlmksbDBV12YsvWUe60rihOmF9CJV73fwrCNGFRjSK7QUMD0hQ0E2czoUZG 2UqVIKQaguBZQ== Received: from x201s (193-104-135-243.ip4.fiberby.net [193.104.135.243]) by mail1.fiberby.net (Postfix) with ESMTPSA id 6A0AC60103; Thu, 20 Nov 2025 17:46:25 +0000 (UTC) Received: by x201s (Postfix, from userid 1000) id D1CB8203EA5; Thu, 20 Nov 2025 17:45:07 +0000 (UTC) From: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= To: Donald Hunter , Jakub Kicinski , "Jason A. Donenfeld" Cc: =?UTF-8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= , Andrew Lunn , Anna Schumaker , Antonio Quartulli , Arkadiusz Kubalewski , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Carlos Llamas , Christian Brauner , Chuck Lever , Dai Ngo , Daniel Zahka , David Ahern , "David S. Miller" , David Wei , Eric Dumazet , Geliang Tang , Greg Kroah-Hartman , Hannes Reinecke , Jacob Keller , Jeff Layton , Jiri Pirko , Joe Damato , Joel Fernandes , kernel-tls-handshake@lists.linux.dev, Li Li , linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org, Martijn Coenen , Mat Martineau , Matthieu Baerts , Mina Almasry , mptcp@lists.linux.dev, NeilBrown , netdev@vger.kernel.org, Olga Kornievskaia , Paolo Abeni , Sabrina Dubroca , Samiullah Khawaja , Simon Horman , Stanislav Fomichev , Suren Baghdasaryan , Todd Kjos , Tom Talpey , Trond Myklebust , Vadim Fedorenko , Willem de Bruijn Subject: [PATCH net-next 1/2] tools: ynl-gen: add function prefix argument Date: Thu, 20 Nov 2025 17:44:26 +0000 Message-ID: <20251120174429.390574-2-ast@fiberby.net> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251120174429.390574-1-ast@fiberby.net> References: <20251120174429.390574-1-ast@fiberby.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev 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 a new CLI argument for overriding the default function prefix, as used for naming the doit/dumpit functions in the generated kernel code. When not specified the default "$(FAMILY)-nl" is used. This can also be specified persistently in generated files: /* YNL-ARG --function-prefix wg */ In the above example it causes the following changes: wireguard_nl_get_device_dumpit() -> wg_get_device_dumpit() wireguard_nl_get_device_doit() -> wg_get_device_doit() The variable name fn_prefix, was chosen as it relates to op_prefix which is used to prefix the UAPI commands enum entries. Link: https://lore.kernel.org/r/aRvWzC8qz3iXDAb3@zx2c4.com/ Suggested-by: Jason A. Donenfeld Signed-off-by: Asbj=C3=B8rn Sloth T=C3=B8nnesen --- tools/net/ynl/pyynl/ynl_gen_c.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen= _c.py index aadeb3abcad8..0dd589e502cb 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -1205,7 +1205,7 @@ class SubMessage(SpecSubMessage): =20 =20 class Family(SpecFamily): - def __init__(self, file_name, exclude_ops): + def __init__(self, file_name, exclude_ops, fn_prefix): # Added by resolve: self.c_name =3D None delattr(self, "c_name") @@ -1237,6 +1237,8 @@ class Family(SpecFamily): else: self.uapi_header_name =3D self.ident_name =20 + self.fn_prefix =3D fn_prefix if fn_prefix else f'{self.ident_name}= -nl' + def resolve(self): self.resolve_up(super()) =20 @@ -2911,12 +2913,12 @@ def print_kernel_op_table_fwd(family, cw, terminate= ): continue =20 if 'do' in op: - name =3D c_lower(f"{family.ident_name}-nl-{op_name}-doit") + name =3D c_lower(f"{family.fn_prefix}-{op_name}-doit") cw.write_func_prot('int', name, ['struct sk_buff *skb', 'struct genl_info *= info'], suffix=3D';') =20 if 'dump' in op: - name =3D c_lower(f"{family.ident_name}-nl-{op_name}-dumpit") + name =3D c_lower(f"{family.fn_prefix}-{op_name}-dumpit") cw.write_func_prot('int', name, ['struct sk_buff *skb', 'struct netlink_cal= lback *cb'], suffix=3D';') cw.nl() @@ -2942,7 +2944,7 @@ def print_kernel_op_table(family, cw): for x in op['dont-validate']])= ), ) for op_mode in ['do', 'dump']: if op_mode in op: - name =3D c_lower(f"{family.ident_name}-nl-{op_name}-{o= p_mode}it") + name =3D c_lower(f"{family.fn_prefix}-{op_name}-{op_mo= de}it") members.append((op_mode + 'it', name)) if family.kernel_policy =3D=3D 'per-op': struct =3D Struct(family, op['attribute-set'], @@ -2980,7 +2982,7 @@ def print_kernel_op_table(family, cw): members.append(('validate', ' | '.join([c_upper('genl-dont-val= idate-' + x) for x in dont_validate= ])), ) - name =3D c_lower(f"{family.ident_name}-nl-{op_name}-{op_mo= de}it") + name =3D c_lower(f"{family.fn_prefix}-{op_name}-{op_mode}i= t") if 'pre' in op[op_mode]: members.append((cb_names[op_mode]['pre'], c_lower(op[o= p_mode]['pre']))) members.append((op_mode + 'it', name)) @@ -3402,6 +3404,7 @@ def main(): help=3D'Do not overwrite the output file if the ne= w output is identical to the old') parser.add_argument('--exclude-op', action=3D'append', default=3D[]) parser.add_argument('-o', dest=3D'out_file', type=3Dstr, default=3DNon= e) + parser.add_argument('--function-prefix', dest=3D'fn_prefix', type=3Dst= r) args =3D parser.parse_args() =20 if args.header is None: @@ -3410,7 +3413,7 @@ def main(): exclude_ops =3D [re.compile(expr) for expr in args.exclude_op] =20 try: - parsed =3D Family(args.spec, exclude_ops) + parsed =3D Family(args.spec, exclude_ops, args.fn_prefix) if parsed.license !=3D '((GPL-2.0 WITH Linux-syscall-note) OR BSD-= 3-Clause)': print('Spec license:', parsed.license) print('License must be: ((GPL-2.0 WITH Linux-syscall-note) OR = BSD-3-Clause)') @@ -3430,10 +3433,14 @@ def main(): cw.p("/* Do not edit directly, auto-generated from: */") cw.p(f"/*\t{spec_kernel} */") cw.p(f"/* YNL-GEN {args.mode} {'header' if args.header else 'source'} = */") - if args.exclude_op or args.user_header: + if args.exclude_op or args.user_header or args.fn_prefix: line =3D '' - line +=3D ' --user-header '.join([''] + args.user_header) - line +=3D ' --exclude-op '.join([''] + args.exclude_op) + if args.user_header: + line +=3D ' --user-header '.join([''] + args.user_header) + if args.exclude_op: + line +=3D ' --exclude-op '.join([''] + args.exclude_op) + if args.fn_prefix: + line +=3D f' --function-prefix {args.fn_prefix}' cw.p(f'/* YNL-ARG{line} */') cw.nl() =20 --=20 2.51.0