Skip to content

Commit

Permalink
tools: ynl: Handle byte-order in struct members
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Donald Hunter authored and David S. Miller committed May 24, 2023
1 parent 7c2435e commit bddd2e5
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 4 deletions.
2 changes: 2 additions & 0 deletions Documentation/netlink/genetlink-legacy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ properties:
enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string ]
len:
$ref: '#/$defs/len-or-define'
byte-order:
enum: [ little-endian, big-endian ]
# End genetlink-legacy

attribute-sets:
Expand Down
4 changes: 3 additions & 1 deletion tools/net/ynl/lib/nlspec.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
6 changes: 3 additions & 3 deletions tools/net/ynl/lib/ynl.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ def as_struct(self, members):
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]
Expand Down Expand Up @@ -305,7 +305,7 @@ def __init__(self, nl_msg, fixed_header_members=[]):

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]
Expand Down Expand Up @@ -542,7 +542,7 @@ def _op(self, method, vals, dump=False):
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)
Expand Down

0 comments on commit bddd2e5

Please sign in to comment.