Use separate decoders for link and addr route attribtes

Julien LepillerSun Oct 11 22:42:19+0200 2020

2436b58

Use separate decoders for link and addr route attribtes

netlink/deserialize.scm

4545
    (link-attr ,(route:deserialize-route-attr 'link-attr)
4646
               ,@route:%default-route-link-attr-decoder)
4747
    (ipv4-attr ,(route:deserialize-route-attr 'ipv4-attr)
48-
               ,@route:%default-route-ipv4-attr-decoder)
48+
               ,@route:%default-route-addr-ipv4-attr-decoder)
4949
    (ipv6-attr ,(route:deserialize-route-attr 'ipv6-attr)
50-
               ,@route:%default-route-ipv6-attr-decoder)))
50+
               ,@route:%default-route-addr-ipv6-attr-decoder)))

netlink/route/attrs.scm

4444
           deserialize-route-attr-data-ipv4
4545
           deserialize-route-attr-data-ipv6
4646
           deserialize-route-attr-data-bv
47-
           default-route-attr-decoder
4847
           %default-route-link-attr-decoder
49-
           %default-route-ipv4-attr-decoder
50-
           %default-route-ipv6-attr-decoder))
48+
           %default-route-addr-ipv4-attr-decoder
49+
           %default-route-addr-ipv6-attr-decoder))
5150
5251
(define-data-type route-attr
5352
  attr-type-size

194193
  (make-ipv6-route-attr
195194
    (inet-ntop AF_INET6 (ipv6->number bv))))
196195
197-
(define (default-route-attr-decoder deserialize-addr)
198-
  `((,IFLA_IFNAME . ,deserialize-route-attr-data-string)
199-
    (,IFLA_QDISC . ,deserialize-route-attr-data-string)
200-
    (,IFLA_IFALIAS . ,deserialize-route-attr-data-string)
201-
    (,IFLA_PHYS_PORT_NAME . ,deserialize-route-attr-data-string)
196+
(define %default-route-link-attr-decoder
197+
  `((,IFLA_ADDRESS . ,deserialize-route-attr-data-ethernet)
198+
    (,IFLA_BROADCAST . ,deserialize-route-attr-data-ethernet)
199+
    (,IFLA_IFNAME . ,deserialize-route-attr-data-string)
202200
    (,IFLA_MTU . ,deserialize-route-attr-data-u32)
203-
    (,IFLA_TXQLEN . ,deserialize-route-attr-data-u32)
204201
    (,IFLA_LINK . ,deserialize-route-attr-data-u32)
205-
    (,IFLA_WEIGHT . ,deserialize-route-attr-data-u32)
206-
    (,IFLA_MASTER . ,deserialize-route-attr-data-u32)
207-
    (,IFLA_NUM_VF . ,deserialize-route-attr-data-u32)
208-
    (,IFLA_PROMISCUITY . ,deserialize-route-attr-data-u32)
209-
    (,IFLA_NUM_TX_QUEUES . ,deserialize-route-attr-data-u32)
210-
    (,IFLA_NUM_RX_QUEUES . ,deserialize-route-attr-data-u32)
211-
    (,IFLA_GSO_MAX_SEGS . ,deserialize-route-attr-data-u32)
212-
    (,IFLA_GSO_MAX_SIZE . ,deserialize-route-attr-data-u32)
213-
    (,IFLA_GROUP . ,deserialize-route-attr-data-u32)
214-
    (,IFLA_CARRIER_CHANGES . ,deserialize-route-attr-data-u32)
215-
    (,IFLA_NET_NS_PID . ,deserialize-route-attr-data-u32)
216-
    (,IFLA_NET_NS_FD . ,deserialize-route-attr-data-u32)
217-
    (,IFLA_NEW_IFINDEX . ,deserialize-route-attr-data-u32)
218-
    (,IFLA_MIN_MTU . ,deserialize-route-attr-data-u32)
219-
    (,IFLA_MAX_MTU . ,deserialize-route-attr-data-u32)
220-
    (,IFLA_CARRIER_UP_COUNT . ,deserialize-route-attr-data-u32)
221-
    (,IFLA_CARRIER_DOWN_COUNT . ,deserialize-route-attr-data-u32)
222-
    (,IFLA_OPERSTATE . ,deserialize-route-attr-data-u8)
223-
    (,IFLA_LINKMODE . ,deserialize-route-attr-data-u8)
224-
    (,IFLA_CARRIER . ,deserialize-route-attr-data-u8)
225-
    (,IFLA_PROTO_DOWN . ,deserialize-route-attr-data-u8)
226-
    (,IFLA_ADDRESS . ,deserialize-addr)
227-
    (,IFLA_BROADCAST . ,deserialize-addr)
228-
    (,IFLA_PERM_ADDRESS . ,deserialize-addr)
202+
    (,IFLA_QDISC . ,deserialize-route-attr-data-string)
203+
    ;; TODO: struct rtnl_link_stats
204+
    ;(,IFLA_STATS . ,deserialize-route-attr-data-stats)
229205
    (default . ,deserialize-route-attr-data-bv)))
230206
231-
(define %default-route-link-attr-decoder
232-
  (default-route-attr-decoder deserialize-route-attr-data-ethernet))
207+
(define (default-route-addr-attr-decoder address-decoder)
208+
  `((,IFA_ADDRESS . ,address-decoder)
209+
    (,IFA_LOCAL . ,address-decoder)
210+
    (,IFA_LABEL . ,deserialize-route-attr-data-string)
211+
    (,IFA_BROADCAST . ,address-decoder)
212+
    (,IFA_ANYCAST . ,address-decoder)
213+
    ;; TODO: struct ifa_cacheinfo
214+
    ;(,IFA_CACHEINFO . ,deserialize-route-attr-data-cache-info)
215+
    (default . ,deserialize-route-attr-data-bv)))
233216
234-
(define %default-route-ipv4-attr-decoder
235-
  (default-route-attr-decoder deserialize-route-attr-data-ipv4))
217+
(define %default-route-addr-ipv4-attr-decoder
218+
  (default-route-addr-attr-decoder deserialize-route-attr-data-ipv4))
236219
237-
(define %default-route-ipv6-attr-decoder
238-
  (default-route-attr-decoder deserialize-route-attr-data-ipv6))
220+
(define %default-route-addr-ipv6-attr-decoder
221+
  (default-route-addr-attr-decoder deserialize-route-attr-data-ipv6))