2023-07-13 09:21:19

by Kubalewski, Arkadiusz

[permalink] [raw]
Subject: [PATCH net-next 1/2 v2] tools: ynl-gen: fix enum index in _decode_enum(..)

Remove wrong index adjustment, which is a leftover from adding
support for sparse enums.
enum.entries_by_val() function shall not subtract the start-value, as
it is indexed with real enum value.

Fixes: c311aaa74ca1 ("tools: ynl: fix enum-as-flags in the generic CLI")
Signed-off-by: Arkadiusz Kubalewski <[email protected]>
---
tools/net/ynl/lib/ynl.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 1b3a36fbb1c3..3908438d3716 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -420,16 +420,14 @@ class YnlFamily(SpecFamily):
def _decode_enum(self, rsp, attr_spec):
raw = rsp[attr_spec['name']]
enum = self.consts[attr_spec['enum']]
- i = attr_spec.get('value-start', 0)
if 'enum-as-flags' in attr_spec and attr_spec['enum-as-flags']:
value = set()
while raw:
if raw & 1:
- value.add(enum.entries_by_val[i].name)
+ value.add(enum.entries_by_val[raw & 1].name)
raw >>= 1
- i += 1
else:
- value = enum.entries_by_val[raw - i].name
+ value = enum.entries_by_val[raw].name
rsp[attr_spec['name']] = value

def _decode_binary(self, attr, attr_spec):
--
2.37.3



2023-07-13 16:24:22

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH net-next 1/2 v2] tools: ynl-gen: fix enum index in _decode_enum(..)

On Thu, 13 Jul 2023 11:05:49 +0200 Arkadiusz Kubalewski wrote:
> - i = attr_spec.get('value-start', 0)
> if 'enum-as-flags' in attr_spec and attr_spec['enum-as-flags']:
> value = set()
> while raw:
> if raw & 1:
> - value.add(enum.entries_by_val[i].name)
> + value.add(enum.entries_by_val[raw & 1].name)
> raw >>= 1
> - i += 1

This doesn't make sense, as I suggested you need to keep i for this
loop. Move it to the inside of the if 'enum-as-fla... and init to 0.

i is tracking which bit number we are at as we consume / shift out
bits from raw.

Have you ever used ChatGPT? No shame, just curious.
--
pw-bot: cr

2023-07-18 16:46:02

by Kubalewski, Arkadiusz

[permalink] [raw]
Subject: RE: [PATCH net-next 1/2 v2] tools: ynl-gen: fix enum index in _decode_enum(..)

>From: Jakub Kicinski <[email protected]>
>Sent: Thursday, July 13, 2023 6:03 PM
>
>On Thu, 13 Jul 2023 11:05:49 +0200 Arkadiusz Kubalewski wrote:
>> - i = attr_spec.get('value-start', 0)
>> if 'enum-as-flags' in attr_spec and attr_spec['enum-as-flags']:
>> value = set()
>> while raw:
>> if raw & 1:
>> - value.add(enum.entries_by_val[i].name)
>> + value.add(enum.entries_by_val[raw & 1].name)
>> raw >>= 1
>> - i += 1
>
>This doesn't make sense, as I suggested you need to keep i for this
>loop. Move it to the inside of the if 'enum-as-fla... and init to 0.
>
>i is tracking which bit number we are at as we consume / shift out
>bits from raw.
>

Yeah, you are right, I don't think I had clear mind when created those..

>Have you ever used ChatGPT? No shame, just curious.

I have used it, but I am not using it to prepare code, this was my fault,
chat would probably do better..

Anyway just sent v3 with this part fixed.

Thank you!
Arkadiusz

>--
>pw-bot: cr