mirror of git://git.savannah.gnu.org/guix/dhcp.git
remove unneeded FFI code from dhcp/interfaces.scm
This commit is contained in:
parent
3bec0fd4b4
commit
2145316f89
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue