mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
tools/net/ynl: Implement nlattr array-nest decoding in ynl
Add support for the 'array-nest' attribute type that is used by several netlink-raw families. Signed-off-by: Donald Hunter <donald.hunter@gmail.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://lore.kernel.org/r/20230825122756.7603-9-donald.hunter@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e46dd903ef
commit
0493e56d02
@ -497,6 +497,17 @@ class YnlFamily(SpecFamily):
|
||||
decoded = NlAttr.formatted_string(decoded, attr_spec.display_hint)
|
||||
return decoded
|
||||
|
||||
def _decode_array_nest(self, attr, attr_spec):
|
||||
decoded = []
|
||||
offset = 0
|
||||
while offset < len(attr.raw):
|
||||
item = NlAttr(attr.raw, offset)
|
||||
offset += item.full_len
|
||||
|
||||
subattrs = self._decode(NlAttrs(item.raw), attr_spec['nested-attributes'])
|
||||
decoded.append({ item.type: subattrs })
|
||||
return decoded
|
||||
|
||||
def _decode(self, attrs, space):
|
||||
attr_space = self.attr_sets[space]
|
||||
rsp = dict()
|
||||
@ -516,6 +527,8 @@ class YnlFamily(SpecFamily):
|
||||
decoded = True
|
||||
elif attr_spec["type"] in NlAttr.type_formats:
|
||||
decoded = attr.as_scalar(attr_spec['type'], attr_spec.byte_order)
|
||||
elif attr_spec["type"] == 'array-nest':
|
||||
decoded = self._decode_array_nest(attr, attr_spec)
|
||||
else:
|
||||
raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user