From: Donald Hunter <donald.hunter@gmail.com>
To: Gal Pressman <gal@nvidia.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Andrew Lunn <andrew+netdev@lunn.ch>, <netdev@vger.kernel.org>,
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 15:56:17 +0000 [thread overview]
Message-ID: <m2seecmz4u.fsf@gmail.com> (raw)
In-Reply-To: <20251116192845.1693119-2-gal@nvidia.com>
Gal Pressman <gal@nvidia.com> writes:
> 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.
Thanks for the contribution, it's been on my wishlist for a while.
[...]
> + def print_attr_list(attr_names, attr_set):
> + """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}')
Does this line execute? I think this scenario indicates a malformed
spec that would fail codegen.
> + def print_mode_attrs(mode, mode_spec, attr_set, print_request=True):
> + """Print a given mode (do/dump/event/notify)."""
> + mode_title = mode.capitalize()
> +
> + if print_request and 'request' in mode_spec and 'attributes' in mode_spec['request']:
> + print(f'\n{mode_title} request attributes:')
> + print_attr_list(mode_spec['request']['attributes'], attr_set)
> +
> + if 'reply' in mode_spec and 'attributes' in mode_spec['reply']:
> + print(f'\n{mode_title} reply attributes:')
> + print_attr_list(mode_spec['reply']['attributes'], attr_set)
> +
> + if 'attributes' in mode_spec:
> + print(f'\n{mode_title} attributes:')
> + print_attr_list(mode_spec['attributes'], attr_set)
> +
> + if 'mcgrp' in mode_spec:
> + print(f"Multicast group: {op.yaml['mcgrp']}")
> +
> if args.list_ops:
> for op_name, op in ynl.ops.items():
> print(op_name, " [", ", ".join(op.modes), "]")
> @@ -135,6 +172,24 @@ def main():
> for op_name, op in ynl.msgs.items():
> print(op_name, " [", ", ".join(op.modes), "]")
>
> + if args.list_attrs:
> + op = ynl.msgs.get(args.list_attrs)
> + if not op:
> + print(f'Operation {args.list_attrs} not found')
> + exit(1)
> +
> + print(f'Operation: {op.name}')
> +
> + for mode in ['do', 'dump', 'event']:
> + if mode in op.yaml:
> + print_mode_attrs(mode, op.yaml[mode], op.attr_set, True)
> +
> + if 'notify' in op.yaml:
> + mode_spec = op.yaml['notify']
> + ref_spec = ynl.msgs.get(mode_spec).yaml.get('do')
> + if ref_spec:
> + print_mode_attrs(mode, ref_spec, op.attr_set, False)
I guess mode is set to 'event' after the for loop. I'd prefer to not
see it used outside the loop, and just use literal 'event' here.
> +
> try:
> if args.do:
> reply = ynl.do(args.do, attrs, args.flags)
next prev parent reply other threads:[~2025-11-17 16:05 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 [this message]
2025-11-18 9:38 ` Gal Pressman
2025-11-18 1:35 ` Jakub Kicinski
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=m2seecmz4u.fsf@gmail.com \
--to=donald.hunter@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gal@nvidia.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--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.