summaryrefslogtreecommitdiff
path: root/tests/syscalls.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-07-25 13:06:01 +0200
committerLudovic Courtès <ludo@gnu.org>2015-07-25 14:43:45 +0200
commite7f5691d4540e2cbcbc9f22f8b593f15890057b3 (patch)
tree8428f0d6c6d255c684cc99ca8f26d7876f6f98f8 /tests/syscalls.scm
parent573b4c1ff3409fb4417ec676091f6bbc09219f19 (diff)
syscalls: Add 'network-interfaces', which wraps libc's 'getifaddrs'.
Based on discussions with Rohan Prinja <rohan.prinja@gmail.com>. * guix/build/syscalls.scm (<interface>): New record type. (write-interface, values->interface, unfold-interface-list, network-interfaces, free-ifaddrs): New procedures. (ifaddrs): New C struct. (%struct-ifaddrs-type, %sizeof-ifaddrs): New macros. * tests/syscalls.scm ("network-interfaces returns one or more interfaces", "network-interfaces returns \"lo\""): New tests.
Diffstat (limited to 'tests/syscalls.scm')
-rw-r--r--tests/syscalls.scm23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/syscalls.scm b/tests/syscalls.scm
index 3b71cd7b1c0..090e1e7858b 100644
--- a/tests/syscalls.scm
+++ b/tests/syscalls.scm
@@ -211,6 +211,29 @@
211 ;; We get EPERM with Linux 3.18ish and EACCES with 2.6.32. 211 ;; We get EPERM with Linux 3.18ish and EACCES with 2.6.32.
212 (memv (system-error-errno args) (list EPERM EACCES)))))) 212 (memv (system-error-errno args) (list EPERM EACCES))))))
213 213
214(test-equal "network-interfaces returns one or more interfaces"
215 '(#t #t #t)
216 (match (network-interfaces)
217 ((interfaces ..1)
218 (list (every interface? interfaces)
219 (every string? (map interface-name interfaces))
220 (every vector? (map interface-address interfaces))))))
221
222(test-equal "network-interfaces returns \"lo\""
223 (list #t (make-socket-address AF_INET (inet-pton AF_INET "127.0.0.1") 0))
224 (match (filter (lambda (interface)
225 (string=? "lo" (interface-name interface)))
226 (network-interfaces))
227 ((loopbacks ..1)
228 (list (every (lambda (lo)
229 (not (zero? (logand IFF_LOOPBACK (interface-flags lo)))))
230 loopbacks)
231 (match (find (lambda (lo)
232 (= AF_INET (sockaddr:fam (interface-address lo))))
233 loopbacks)
234 (#f #f)
235 (lo (interface-address lo)))))))
236
214(test-end) 237(test-end)
215 238
216 239