Commit c3e91403 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

tools: ynl: support packing binary arrays of scalars

We support decoding a binary type with a scalar subtype already,
add support for sending such arrays to the kernel. While at it
also support using "None" to indicate that the binary attribute
should be empty. I couldn't decide whether empty binary should
be [] or None, but there should be no harm in supporting both.

Link: https://patch.msgid.link/20250716000331.1378807-4-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 1560af51
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -575,7 +575,9 @@ class YnlFamily(SpecFamily):
        elif attr["type"] == 'string':
            attr_payload = str(value).encode('ascii') + b'\x00'
        elif attr["type"] == 'binary':
            if isinstance(value, bytes):
            if value is None:
                attr_payload = b''
            elif isinstance(value, bytes):
                attr_payload = value
            elif isinstance(value, str):
                if attr.display_hint:
@@ -584,6 +586,9 @@ class YnlFamily(SpecFamily):
                    attr_payload = bytes.fromhex(value)
            elif isinstance(value, dict) and attr.struct_name:
                attr_payload = self._encode_struct(attr.struct_name, value)
            elif isinstance(value, list) and attr.sub_type in NlAttr.type_formats:
                format = NlAttr.get_format(attr.sub_type)
                attr_payload = b''.join([format.pack(x) for x in value])
            else:
                raise Exception(f'Unknown type for binary attribute, value: {value}')
        elif attr['type'] in NlAttr.type_formats or attr.is_auto_scalar: