2023-06-05 10:16:42

by Kubalewski, Arkadiusz

[permalink] [raw]
Subject: [PATCH 66/69] ynl: fix nested policy attribute type

When nested attribute is used, generated type in the netlink policy
is NLA_NEST, which is wrong as there is no such type. Fix be adding
`ed` sufix for policy generated for 'nest' type attribute.

Signed-off-by: Arkadiusz Kubalewski <[email protected]>
---
tools/net/ynl/ynl-gen-c.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index 28afb0846143..89603866d4a0 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -113,7 +113,10 @@ class Type(SpecAttr):
return '{ .type = ' + policy + ', }'

def attr_policy(self, cw):
- policy = c_upper('nla-' + self.attr['type'])
+ if (self.attr['type'] == 'nest'):
+ policy = c_upper('nla-' + self.attr['type'] + 'ed')
+ else:
+ policy = c_upper('nla-' + self.attr['type'])

spec = self._attr_policy(policy)
cw.p(f"\t[{self.enum_name}] = {spec},")
--
2.31.1



2023-06-05 18:32:41

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH 66/69] ynl: fix nested policy attribute type

On Mon, 5 Jun 2023 11:46:17 +0200 Arkadiusz Kubalewski wrote:
> When nested attribute is used, generated type in the netlink policy
> is NLA_NEST, which is wrong as there is no such type. Fix be adding
> `ed` sufix for policy generated for 'nest' type attribute.
>
> Signed-off-by: Arkadiusz Kubalewski <[email protected]>
> ---
> tools/net/ynl/ynl-gen-c.py | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
> index 28afb0846143..89603866d4a0 100755
> --- a/tools/net/ynl/ynl-gen-c.py
> +++ b/tools/net/ynl/ynl-gen-c.py
> @@ -113,7 +113,10 @@ class Type(SpecAttr):
> return '{ .type = ' + policy + ', }'
>
> def attr_policy(self, cw):
> - policy = c_upper('nla-' + self.attr['type'])
> + if (self.attr['type'] == 'nest'):
> + policy = c_upper('nla-' + self.attr['type'] + 'ed')
> + else:
> + policy = c_upper('nla-' + self.attr['type'])
>
> spec = self._attr_policy(policy)
> cw.p(f"\t[{self.enum_name}] = {spec},")

For nests the policy should come from

class TypeNest -> def _attr_policy()

why do we need to tweak the default implementation in the parent class?
--
pw-bot: cr