Only deserialize header in error message

Julien LepillerSun Oct 11 00:37:17+0200 2020

cc903c2

Only deserialize header in error message

netlink/deserialize.scm

4141
      (,RTM_NEWADDR . ,route:deserialize-addr-message)
4242
      (,RTM_DELADDR . ,route:deserialize-addr-message)
4343
      (,RTM_GETADDR . ,route:deserialize-addr-message))
44+
    (message-hdr ,deserialize-message-header '())
4445
    (link-attr ,(route:deserialize-route-attr 'link-attr)
4546
               ,@route:%default-route-link-attr-decoder)
4647
    (ipv4-attr ,(route:deserialize-route-attr 'ipv4-attr)

netlink/message.scm

1818
(define-module (netlink message)
1919
  #:use-module (ice-9 match)
2020
  #:use-module (netlink data)
21+
  #:use-module (netlink standard)
2122
  #:use-module (rnrs bytevectors)
2223
  #:use-module (srfi srfi-9)
2324
  #:export (make-message

2728
            message-seq
2829
            message-pid
2930
            message-data
30-
            deserialize-message))
31+
            deserialize-message
32+
            deserialize-message-header))
3133
3234
(define-data-type message
3335
  message-type-len

6466
        (if (< (data-size data) (- len 16))
6567
            (make-nl-data #f (const (- len 16)) (const (make-bytevector 0)))
6668
            data)))))
69+
70+
(define (deserialize-message-header decoder bv pos)
71+
  (make-message
72+
    (bytevector-u16-ref bv (+ pos 4) (native-endianness))
73+
    (bytevector-u16-ref bv (+ pos 6) (native-endianness))
74+
    (bytevector-u32-ref bv (+ pos 8) (native-endianness))
75+
    (bytevector-u32-ref bv (+ pos 12) (native-endianness))
76+
    no-data))

netlink/standard.scm

4343
(define (deserialize-error-message decoder bv pos)
4444
  (make-error-message
4545
    (bytevector-s32-ref bv pos (native-endianness))
46-
    (deserialize 'message decoder bv (+ pos 4))))
46+
    (deserialize 'message-hdr decoder (pk 'error-mrg bv) (+ pos 4))))
4747
4848
(define no-data
4949
  (make-nl-data