summaryrefslogtreecommitdiff
path: root/tools/net/ynl
diff options
context:
space:
mode:
authorDonald Hunter <donald.hunter@gmail.com>2023-05-23 12:37:48 +0300
committerDavid S. Miller <davem@davemloft.net>2023-05-24 10:46:54 +0300
commitbddd2e561b0ad5ca42e16fb26a20fc806d521912 (patch)
tree3e5fcb43806dad24d3dc483053ca170f6c6d1f07 /tools/net/ynl
parent7c2435ef76e5f2d9fac44b241e4a54113f6eafbf (diff)
downloadlinux-bddd2e561b0ad5ca42e16fb26a20fc806d521912.tar.xz
tools: ynl: Handle byte-order in struct members
Add support for byte-order in struct members in the genetlink-legacy spec. Signed-off-by: Donald Hunter <donald.hunter@gmail.com> Acked-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/net/ynl')
-rw-r--r--tools/net/ynl/lib/nlspec.py4
-rw-r--r--tools/net/ynl/lib/ynl.py6
2 files changed, 6 insertions, 4 deletions
diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/lib/nlspec.py
index a0241add3839..c624cdfde223 100644
--- a/tools/net/ynl/lib/nlspec.py
+++ b/tools/net/ynl/lib/nlspec.py
@@ -226,11 +226,13 @@ class SpecStructMember(SpecElement):
Represents a single struct member attribute.
Attributes:
- type string, type of the member attribute
+ type string, type of the member attribute
+ byte_order string or None for native byte order
"""
def __init__(self, family, yaml):
super().__init__(family, yaml)
self.type = yaml['type']
+ self.byte_order = yaml.get('byte-order')
class SpecStruct(SpecElement):
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 6185ba27f2e7..39a2296c0003 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -124,7 +124,7 @@ class NlAttr:
offset = 0
for m in members:
# TODO: handle non-scalar members
- format = self.get_format(m.type)
+ format = self.get_format(m.type, m.byte_order)
decoded = format.unpack_from(self.raw, offset)
offset += format.size
value[m.name] = decoded[0]
@@ -305,7 +305,7 @@ class GenlMsg:
self.fixed_header_attrs = dict()
for m in fixed_header_members:
- format = NlAttr.get_format(m.type)
+ format = NlAttr.get_format(m.type, m.byte_order)
decoded = format.unpack_from(nl_msg.raw, offset)
offset += format.size
self.fixed_header_attrs[m.name] = decoded[0]
@@ -542,7 +542,7 @@ class YnlFamily(SpecFamily):
fixed_header_members = self.consts[op.fixed_header].members
for m in fixed_header_members:
value = vals.pop(m.name)
- format = NlAttr.get_format(m.type)
+ format = NlAttr.get_format(m.type, m.byte_order)
msg += format.pack(value)
for name, value in vals.items():
msg += self._add_attr(op.attr_set.name, name, value)