link: Extract 'new-link-message->link'. * ip/link.scm (new-link-message->link): New procedure. (get-links): Use it, and use 'filter-map' instead of 'filter' followed by 'map'. Signed-off-by: Julien Lepiller <julien@lepiller.eu>
ip/link.scm
| 59 | 59 | (addr link-addr) | |
| 60 | 60 | (brd link-brd)) | |
| 61 | 61 | ||
| 62 | + | (define (new-link-message->link msg) | |
| 63 | + | "If MSG has type 'RTM_NEWLINK', return the corresponding <link> object. | |
| 64 | + | Otherwise return #f." | |
| 65 | + | (and (eqv? (message-kind msg) RTM_NEWLINK) | |
| 66 | + | (let* ((data (message-data msg)) | |
| 67 | + | (attrs (link-message-attrs data))) | |
| 68 | + | (make-link (get-attr attrs IFLA_IFNAME) | |
| 69 | + | (link-message-index data) | |
| 70 | + | (link-message-kind data) | |
| 71 | + | (map int->device-flags (split-flags (link-message-flags data))) | |
| 72 | + | (get-attr attrs IFLA_MTU) | |
| 73 | + | (get-attr attrs IFLA_QDISC) | |
| 74 | + | (get-attr attrs IFLA_OPERSTATE) | |
| 75 | + | (get-attr attrs IFLA_LINKMODE) | |
| 76 | + | (get-attr attrs IFLA_GROUP) | |
| 77 | + | (get-attr attrs IFLA_TXQLEN) | |
| 78 | + | (get-attr attrs IFLA_ADDRESS) | |
| 79 | + | (get-attr attrs IFLA_BROADCAST))))) | |
| 80 | + | ||
| 62 | 81 | (define (get-links) | |
| 63 | 82 | (define request-num (random 65535)) | |
| 64 | 83 | (define message | |
… | |||
| 72 | 91 | (let ((sock (connect-route))) | |
| 73 | 92 | (send-msg message sock) | |
| 74 | 93 | (let* ((answer (receive-and-decode-msg sock %default-route-decoder)) | |
| 75 | - | (links (filter | |
| 76 | - | (lambda (msg) (equal? (message-kind msg) RTM_NEWLINK)) | |
| 77 | - | answer)) | |
| 78 | - | (links | |
| 79 | - | (map | |
| 80 | - | (lambda (msg) | |
| 81 | - | (let* ((data (message-data msg)) | |
| 82 | - | (attrs (link-message-attrs data))) | |
| 83 | - | (make-link | |
| 84 | - | (get-attr attrs IFLA_IFNAME) | |
| 85 | - | (link-message-index data) | |
| 86 | - | (link-message-kind data) | |
| 87 | - | (map int->device-flags (split-flags (link-message-flags data))) | |
| 88 | - | (get-attr attrs IFLA_MTU) | |
| 89 | - | (get-attr attrs IFLA_QDISC) | |
| 90 | - | (get-attr attrs IFLA_OPERSTATE) | |
| 91 | - | (get-attr attrs IFLA_LINKMODE) | |
| 92 | - | (get-attr attrs IFLA_GROUP) | |
| 93 | - | (get-attr attrs IFLA_TXQLEN) | |
| 94 | - | (get-attr attrs IFLA_ADDRESS) | |
| 95 | - | (get-attr attrs IFLA_BROADCAST)))) | |
| 96 | - | links))) | |
| 94 | + | (links (filter-map new-link-message->link answer))) | |
| 97 | 95 | (close-port sock) | |
| 98 | 96 | links))) | |
| 99 | 97 | ||