Skip to content

Commit

Permalink
tools: ynl: fix setting presence bits in simple nests
Browse files Browse the repository at this point in the history
[ Upstream commit f6c8f5e ]

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: be5bea1 ("net: add basic C code generators for Netlink")
Reviewed-by: Breno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/20240321020214.1250202-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
kuba-moo authored and gregkh committed Apr 10, 2024
1 parent 331e125 commit 832d876
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions tools/net/ynl/ynl-gen-c.py
Expand Up @@ -243,8 +243,11 @@ def setter(self, ri, space, direction, deref=False, ref=None):
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)}"
Expand Down

0 comments on commit 832d876

Please sign in to comment.