Message ID | 20240321020214.1250202-1-kuba@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | f6c8f5e8694c7a78c94e408b628afa6255cc428a |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] tools: ynl: fix setting presence bits in simple nests | expand |
On Wed, Mar 20, 2024 at 07:02:14PM -0700, Jakub Kicinski wrote: > When we set members of simple nested structures in requests > we need to set "presence" bits for all the nesting layers > below. This has nothing to do with the presence type of > the last layer. > > Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink") > Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Breno Leitao <leitao@debian.org>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Wed, 20 Mar 2024 19:02:14 -0700 you wrote: > When we set members of simple nested structures in requests > we need to set "presence" bits for all the nesting layers > below. This has nothing to do with the presence type of > the last layer. > > Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink") > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > > [...] Here is the summary with links: - [net] tools: ynl: fix setting presence bits in simple nests https://git.kernel.org/netdev/net/c/f6c8f5e8694c You are awesome, thank you!
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py index 6b7eb2d2aaf1..a451cbfbd781 100755 --- a/tools/net/ynl/ynl-gen-c.py +++ b/tools/net/ynl/ynl-gen-c.py @@ -228,8 +228,11 @@ from lib import SpecFamily, SpecAttrSet, SpecAttr, SpecOperation, SpecEnumSet, S presence = '' for i in range(0, len(ref)): presence = f"{var}->{'.'.join(ref[:i] + [''])}_present.{ref[i]}" - if self.presence_type() == 'bit': - code.append(presence + ' = 1;') + # Every layer below last is a nest, so we know it uses bit presence + # last layer is "self" and may be a complex type + if i == len(ref) - 1 and self.presence_type() != 'bit': + continue + code.append(presence + ' = 1;') code += self._setter_lines(ri, member, presence) func_name = f"{op_prefix(ri, direction, deref=deref)}_set_{'_'.join(ref)}"
When we set members of simple nested structures in requests we need to set "presence" bits for all the nesting layers below. This has nothing to do with the presence type of the last layer. Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink") Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- CC: sdf@google.com --- tools/net/ynl/ynl-gen-c.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)