remove unneeded FFI code from dhcp/interfaces.scm

This commit is contained in:
Rohan Prinja 2015-06-16 00:30:11 +05:30
parent 3bec0fd4b4
commit 2145316f89
1 changed files with 0 additions and 81 deletions

View File

@ -70,63 +70,6 @@
;;; Taken/modified from (guix build syscalls) end
(define *libinterfaces* (dynamic-link "lib/libinterfaces.so"))
(define-syntax-rule (link-fn c-fn-name lib ret-type c-fn-args arg ...)
"FFI wrapper for a function defined in a .so library"
(let ((f (pointer->procedure ret-type
(dynamic-func c-fn-name lib)
c-fn-args)))
(f arg ...)))
;; Obtain a list of interfaces from getifaddrs (3).
(define-syntax-rule (get-first-interface-ptr)
(link-fn "get_first_interface_ptr" *libinterfaces* '* '()))
;; Free the memory allocated by (find-interfaces).
(define-syntax-rule (free-interfaces ifaddrs)
(link-fn "free_interfaces" *libinterfaces* void '(*) ifaddrs))
;; Struct type for struct ifaddrs. See also: getifaddrs (3).
(define *ifaddrs-struct-type* (list '* '* unsigned-int '* '* '* '*))
;; Struct type for struct sockaddr. See also: bind (2).
(define *sockaddr-struct-type* (list unsigned-short '*))
;; Given a pointer to a struct ifaddrs, parse it using
;; parse-c-struct.
(define-syntax-rule (parse-ifaddr ifaddrs)
(parse-c-struct ifaddrs *ifaddrs-struct-type*))
;; Given a pointer to a struct sockaddr, parse it using
;; parse-c-struct.
(define-syntax-rule (parse-sockaddr sockaddr)
(parse-c-struct sockaddr *sockaddr-struct-type*))
;; Note: In the <ifaddrs.h> library, struct ifaddrs is
;; an intrusive linked list of interface addresses.
;; Given a struct ifaddrs pointer which has been parsed
;; using parse-c-struct, obtain and parse the next ifaddrs
;; struct in the intrusive linked list. If we are already
;; at the end of the list, do not do anything.
(define-syntax-rule (next-parsed-ifaddr parsed)
(let ((next-ptr (car parsed)))
(if (null-pointer? next-ptr)
'()
(parse-ifaddr (car parsed)))))
(define-syntax-rule (af-inet? family)
"Is the family AF_INET or AF_INET6?"
(or (= family AF_INET) (= family AF_INET6)))
(define (get-sockaddr-data sockaddr)
"Retrieve the data field from struct sockaddr. It might be NULL."
(let ((data-ptr (cadr sockaddr)))
(if (null-pointer? data-ptr)
""
(pointer->string data-ptr))))
(define-syntax-rule (make-dgram-sock)
"Create a UDP datagram socket."
(let ((sock (socket PF_INET SOCK_DGRAM IPPROTO_UDP)))
@ -134,30 +77,6 @@
(throw 'system-error "make-dgram-sock")
sock)))
(define (find-interfaces ifaddrs)
"Find all AF_INET/AF_INET6 family network interfaces."
(define (helper parsed result)
(if (null? parsed)
result
(let* ((name (pointer->string (cadr parsed)))
(flags (caddr parsed))
(sockaddr-ptr (list-ref parsed 3))
(sockaddr (parse-sockaddr sockaddr-ptr))
(data (get-sockaddr-data sockaddr))
;(_ (display (format #f "~a\n" sockaddr)))
(family (car sockaddr))
)
(if (af-inet? family)
(display (format #f "Name ~a, Family ~a\n" name family)))
(helper (next-parsed-ifaddr parsed)
(cons (make-net-iface
name
flags
#vu8(0 0 0 0) #vu8(0 0 0 0) #vu8(0 0 0 0)
(cons #f #f))
result)))))
(helper (parse-ifaddr ifaddrs) '()))
(define (read-hardware-address bv idx)
"Read a socket address from bytevector BV at index
IDX. BV is expected to correspond to a struct sockaddr"