Print error when they occur and return boolean in link-set

Julien LepillerMon Feb 01 16:14:37+0100 2021

ed55cd0

Print error when they occur and return boolean in link-set

ip/link.scm

2424
  #:use-module (netlink data)
2525
  #:use-module (netlink deserialize)
2626
  #:use-module (netlink message)
27+
  #:use-module (netlink standard)
28+
  #:use-module (srfi srfi-1)
2729
  #:use-module (srfi srfi-9)
2830
  #:export (link-set
2931
            link-show))

161163
           (link-id link)
162164
           (loop links))))))
163165
166+
(define (answer-ok? answer)
167+
  (cond
168+
    ((equal? (message-kind answer) NLMSG_DONE)
169+
     #t)
170+
    ((equal? (message-kind answer) NLMSG_ERROR)
171+
     (let ((data (message-data answer)))
172+
       (if (nl-data-data data)
173+
           (let ((err (error-message-err data)))
174+
             (if (equal? err 0)
175+
                 #t
176+
                 (begin
177+
                   (format #t "RTNETLINK answers: ~a~%" (strerror (- err)))
178+
                   #f)))
179+
           #f)))))
180+
164181
(define* (link-set device #:key (up #f) (down #f) (type #f)
165182
                   (arp-on #f) (arp-off #f)
166183
                   (dynamic-on #f) (dynamic-off #f)

247264
      (when netnsfd
248265
        (close netnsfd))
249266
      (close-socket sock)
250-
      answer)))
267+
      (answer-ok? (last answer)))))