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 |