@@ -670,8 +670,11 @@ def _fixed_header_size(self, name):
670
670
fixed_header_members = self .consts [name ].members
671
671
size = 0
672
672
for m in fixed_header_members :
673
- format = NlAttr .get_format (m .type , m .byte_order )
674
- size += format .size
673
+ if m .type in ['pad' , 'binary' ]:
674
+ size += m .len
675
+ else :
676
+ format = NlAttr .get_format (m .type , m .byte_order )
677
+ size += format .size
675
678
return size
676
679
else :
677
680
return 0
@@ -681,12 +684,20 @@ def _decode_fixed_header(self, msg, name):
681
684
fixed_header_attrs = dict ()
682
685
offset = 0
683
686
for m in fixed_header_members :
684
- format = NlAttr .get_format (m .type , m .byte_order )
685
- [ value ] = format .unpack_from (msg .raw , offset )
686
- offset += format .size
687
- if m .enum :
688
- value = self ._decode_enum (value , m )
689
- fixed_header_attrs [m .name ] = value
687
+ value = None
688
+ if m .type == 'pad' :
689
+ offset += m .len
690
+ elif m .type == 'binary' :
691
+ value = msg .raw [offset : offset + m .len ]
692
+ offset += m .len
693
+ else :
694
+ format = NlAttr .get_format (m .type , m .byte_order )
695
+ [ value ] = format .unpack_from (msg .raw , offset )
696
+ offset += format .size
697
+ if value is not None :
698
+ if m .enum :
699
+ value = self ._decode_enum (value , m )
700
+ fixed_header_attrs [m .name ] = value
690
701
return fixed_header_attrs
691
702
692
703
def handle_ntf (self , decoded ):
@@ -753,8 +764,13 @@ def _op(self, method, vals, flags=None, dump=False):
753
764
fixed_header_members = self .consts [op .fixed_header ].members
754
765
for m in fixed_header_members :
755
766
value = vals .pop (m .name ) if m .name in vals else 0
756
- format = NlAttr .get_format (m .type , m .byte_order )
757
- msg += format .pack (value )
767
+ if m .type == 'pad' :
768
+ msg += bytearray (m .len )
769
+ elif m .type == 'binary' :
770
+ msg += bytes .fromhex (value )
771
+ else :
772
+ format = NlAttr .get_format (m .type , m .byte_order )
773
+ msg += format .pack (value )
758
774
for name , value in vals .items ():
759
775
msg += self ._add_attr (op .attr_set .name , name , value )
760
776
msg = _genl_msg_finalize (msg )
0 commit comments