From: Jakub Kicinski <kuba@kernel.org>
To: Gal Pressman <gal@nvidia.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
Andrew Lunn <andrew+netdev@lunn.ch>, <netdev@vger.kernel.org>,
Donald Hunter <donald.hunter@gmail.com>,
Simon Horman <horms@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Stanislav Fomichev <sdf@fomichev.me>, <bpf@vger.kernel.org>,
Nimrod Oren <noren@nvidia.com>
Subject: Re: [PATCH net-next 1/3] tools: ynl: cli: Add --list-attrs option to show operation attributes
Date: Mon, 17 Nov 2025 17:35:03 -0800 [thread overview]
Message-ID: <20251117173503.3774c532@kernel.org> (raw)
In-Reply-To: <20251116192845.1693119-2-gal@nvidia.com>
On Sun, 16 Nov 2025 21:28:43 +0200 Gal Pressman wrote:
> Add a --list-attrs option to the YNL CLI that displays information about
> netlink operations, including request and reply attributes.
> This eliminates the need to manually inspect YAML spec files to
> determine the JSON structure required for operations, or understand the
> structure of the reply.
>
> Example usage:
> # ./cli.py --family netdev --list-attrs dev-get
> Operation: dev-get
>
> Do request attributes:
> - ifindex: u32
> netdev ifindex
>
> Do reply attributes:
> - ifindex: u32
> netdev ifindex
> - xdp-features: u64 (enum: xdp-act)
> Bitmask of enabled xdp-features.
> - xdp-zc-max-segs: u32
> max fragment count supported by ZC driver
> - xdp-rx-metadata-features: u64 (enum: xdp-rx-metadata)
> Bitmask of supported XDP receive metadata features. See Documentation/networking/xdp-rx-metadata.rst for more details.
> - xsk-features: u64 (enum: xsk-flags)
> Bitmask of enabled AF_XDP features.
>
> Dump reply attributes:
> - ifindex: u32
> netdev ifindex
> - xdp-features: u64 (enum: xdp-act)
> Bitmask of enabled xdp-features.
> - xdp-zc-max-segs: u32
> max fragment count supported by ZC driver
> - xdp-rx-metadata-features: u64 (enum: xdp-rx-metadata)
> Bitmask of supported XDP receive metadata features. See Documentation/networking/xdp-rx-metadata.rst for more details.
> - xsk-features: u64 (enum: xsk-flags)
> Bitmask of enabled AF_XDP features.
Could you try to detect that do and dump replies are identical
and combine them? They are the same more often than not so
I think it'd be nice to avoid printing the same info twice.
> Reviewed-by: Nimrod Oren <noren@nvidia.com>
> Signed-off-by: Gal Pressman <gal@nvidia.com>
> ---
> tools/net/ynl/pyynl/cli.py | 55 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/tools/net/ynl/pyynl/cli.py b/tools/net/ynl/pyynl/cli.py
> index 8c192e900bd3..7ac3b4627f1b 100755
> --- a/tools/net/ynl/pyynl/cli.py
> +++ b/tools/net/ynl/pyynl/cli.py
> @@ -7,6 +7,7 @@ import os
> import pathlib
> import pprint
> import sys
> +import textwrap
>
> sys.path.append(pathlib.Path(__file__).resolve().parent.as_posix())
> from lib import YnlFamily, Netlink, NlError
> @@ -70,6 +71,8 @@ def main():
> group.add_argument('--dump', dest='dump', metavar='DUMP-OPERATION', type=str)
> group.add_argument('--list-ops', action='store_true')
> group.add_argument('--list-msgs', action='store_true')
> + group.add_argument('--list-attrs', dest='list_attrs', metavar='OPERATION', type=str,
> + help='List attributes for an operation')
>
> parser.add_argument('--duration', dest='duration', type=int,
> help='when subscribed, watch for DURATION seconds')
> @@ -128,6 +131,40 @@ def main():
> if args.ntf:
> ynl.ntf_subscribe(args.ntf)
>
> + def print_attr_list(attr_names, attr_set):
It nesting functions inside main() a common pattern for Python?
Having a function declared in the middle of another function,
does not seem optimal to me, but for some reason Claude loves
to do that.
> + """Print a list of attributes with their types and documentation."""
> + for attr_name in attr_names:
> + if attr_name in attr_set.attrs:
> + attr = attr_set.attrs[attr_name]
> + attr_info = f' - {attr_name}: {attr.type}'
> + if 'enum' in attr.yaml:
> + attr_info += f" (enum: {attr.yaml['enum']})"
> + if attr.yaml.get('doc'):
> + doc_text = textwrap.indent(attr.yaml['doc'], ' ')
> + attr_info += f"\n{doc_text}"
> + print(attr_info)
> + else:
> + print(f' - {attr_name}')
> +
next prev parent reply other threads:[~2025-11-18 1:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-16 19:28 [PATCH net-next 0/3] YNL CLI --list-attrs argument Gal Pressman
2025-11-16 19:28 ` [PATCH net-next 1/3] tools: ynl: cli: Add --list-attrs option to show operation attributes Gal Pressman
2025-11-17 15:56 ` Donald Hunter
2025-11-18 9:38 ` Gal Pressman
2025-11-18 1:35 ` Jakub Kicinski [this message]
2025-11-18 9:20 ` Donald Hunter
2025-11-18 9:38 ` Gal Pressman
2025-11-18 17:13 ` Jakub Kicinski
2025-11-19 11:36 ` Gal Pressman
2025-11-19 14:20 ` Jakub Kicinski
2025-11-18 1:38 ` Jakub Kicinski
2025-11-18 9:36 ` Gal Pressman
2025-11-16 19:28 ` [PATCH net-next 2/3] tools: ynl: cli: Parse nested attributes in --list-attrs output Gal Pressman
2025-11-17 15:57 ` Donald Hunter
2025-11-16 19:28 ` [PATCH net-next 3/3] tools: ynl: cli: Display enum values " Gal Pressman
2025-11-17 16:05 ` Donald Hunter
2025-11-18 9:35 ` Gal Pressman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251117173503.3774c532@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=edumazet@google.com \
--cc=gal@nvidia.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=noren@nvidia.com \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.