From: Donald Hunter <donald.hunter@gmail.com>
To: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Cc: kuba@kernel.org, netdev@vger.kernel.org, davem@davemloft.net,
pabeni@redhat.com, edumazet@google.com,
simon.horman@corigine.com
Subject: Re: [PATCH net-next v5 2/2] tools: ynl-gen: fix parse multi-attr enum attribute
Date: Tue, 25 Jul 2023 13:56:41 +0100 [thread overview]
Message-ID: <m2zg3kxi7q.fsf@gmail.com> (raw)
In-Reply-To: <20230725101642.267248-3-arkadiusz.kubalewski@intel.com> (Arkadiusz Kubalewski's message of "Tue, 25 Jul 2023 12:16:42 +0200")
Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com> writes:
> When attribute is enum type and marked as multi-attr, the netlink
> respond is not parsed, fails with stack trace:
> Traceback (most recent call last):
> File "/net-next/tools/net/ynl/./test.py", line 520, in <module>
> main()
> File "/net-next/tools/net/ynl/./test.py", line 488, in main
> dplls=dplls_get(282574471561216)
> File "/net-next/tools/net/ynl/./test.py", line 48, in dplls_get
> reply=act(args)
> File "/net-next/tools/net/ynl/./test.py", line 41, in act
> reply = ynl.dump(args.dump, attrs)
> File "/net-next/tools/net/ynl/lib/ynl.py", line 598, in dump
> return self._op(method, vals, dump=True)
> File "/net-next/tools/net/ynl/lib/ynl.py", line 584, in _op
> rsp_msg = self._decode(gm.raw_attrs, op.attr_set.name)
> File "/net-next/tools/net/ynl/lib/ynl.py", line 451, in _decode
> self._decode_enum(rsp, attr_spec)
> File "/net-next/tools/net/ynl/lib/ynl.py", line 408, in _decode_enum
> value = enum.entries_by_val[raw].name
> TypeError: unhashable type: 'list'
> error: 1
>
> Redesign _decode_enum(..) to take a enum int value and translate
> it to either a bitmask or enum name as expected.
>
> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
> ---
> tools/net/ynl/lib/ynl.py | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
> index 027b1c0aecb4..3ca28d4bcb18 100644
> --- a/tools/net/ynl/lib/ynl.py
> +++ b/tools/net/ynl/lib/ynl.py
> @@ -417,8 +417,7 @@ class YnlFamily(SpecFamily):
> pad = b'\x00' * ((4 - len(attr_payload) % 4) % 4)
> return struct.pack('HH', len(attr_payload) + 4, nl_type) + attr_payload + pad
>
> - def _decode_enum(self, rsp, attr_spec):
> - raw = rsp[attr_spec['name']]
> + def _decode_enum(self, raw, attr_spec):
> enum = self.consts[attr_spec['enum']]
> if 'enum-as-flags' in attr_spec and attr_spec['enum-as-flags']:
> i = 0
> @@ -430,7 +429,7 @@ class YnlFamily(SpecFamily):
> i += 1
> else:
> value = enum.entries_by_val[raw].name
> - rsp[attr_spec['name']] = value
> + return value
>
> def _decode_binary(self, attr, attr_spec):
> if attr_spec.struct_name:
> @@ -438,7 +437,7 @@ class YnlFamily(SpecFamily):
> decoded = attr.as_struct(members)
> for m in members:
> if m.enum:
> - self._decode_enum(decoded, m)
> + decoded[m.name] = self._decode_enum(decoded[m.name], m)
> elif attr_spec.sub_type:
> decoded = attr.as_c_array(attr_spec.sub_type)
> else:
> @@ -466,6 +465,9 @@ class YnlFamily(SpecFamily):
> else:
> raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}')
>
> + if 'enum' in attr_spec:
> + decoded = self._decode_enum(decoded, attr_spec)
> +
> if not attr_spec.is_multi:
> rsp[attr_spec['name']] = decoded
> elif attr_spec.name in rsp:
> @@ -473,8 +475,6 @@ class YnlFamily(SpecFamily):
> else:
> rsp[attr_spec.name] = [decoded]
>
> - if 'enum' in attr_spec:
> - self._decode_enum(rsp, attr_spec)
> return rsp
>
> def _decode_extack_path(self, attrs, attr_set, offset, target):
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
next prev parent reply other threads:[~2023-07-25 12:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-25 10:16 [PATCH net-next v4 0/2] tools: ynl-gen: fix parse multi-attr enum attribute Arkadiusz Kubalewski
2023-07-25 10:16 ` [PATCH net-next v5 1/2] tools: ynl-gen: fix enum index in _decode_enum(..) Arkadiusz Kubalewski
2023-07-25 12:53 ` Donald Hunter
2023-07-25 10:16 ` [PATCH net-next v5 2/2] tools: ynl-gen: fix parse multi-attr enum attribute Arkadiusz Kubalewski
2023-07-25 12:56 ` Donald Hunter [this message]
2023-07-26 3:13 ` [PATCH net-next v4 0/2] " Jakub Kicinski
2023-07-26 21:00 ` patchwork-bot+netdevbpf
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=m2zg3kxi7q.fsf@gmail.com \
--to=donald.hunter@gmail.com \
--cc=arkadiusz.kubalewski@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=simon.horman@corigine.com \
/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.