[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/21: syscalls: Adjust 'sockaddr-in', 'sockaddr-in6' structs for the Hu
From: |
guix-commits |
Subject: |
01/21: syscalls: Adjust 'sockaddr-in', 'sockaddr-in6' structs for the Hurd. |
Date: |
Sun, 10 May 2020 10:07:36 -0400 (EDT) |
janneke pushed a commit to branch wip-hurd-vm
in repository guix.
commit 46e3701e3a1b8d7b240a795e9946d2e451cdeb6c
Author: Jan (janneke) Nieuwenhuizen <address@hidden>
AuthorDate: Sat May 9 08:43:39 2020 +0200
syscalls: Adjust 'sockaddr-in', 'sockaddr-in6' structs for the Hurd.
* guix/build/syscalls.scm (sockaddr-in,sockaddr-in6): Rename to ...
(sockaddr-in/linux, sockaddr-in6/linux): ... this. Rename introduced
bindings
as well.
(write-socket-address!/linux,read-socket-address/linux): Rename from
(write-socket-address!, read-socket-address): ... new switches between those
and ...
(write-socket-address!/hurd, read-socket-address/hurd): ... these new
function.
---
guix/build/syscalls.scm | 113 ++++++++++++++++++++++++++++++++++++++----------
1 file changed, 91 insertions(+), 22 deletions(-)
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 4ee2b97..0b703b0 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1270,62 +1270,131 @@ bytes."
40
32))
-(define-c-struct sockaddr-in ;<linux/in.h>
- sizeof-sockaddrin
+(define-c-struct sockaddr-in/linux ;<linux/in.h>
+ sizeof-sockaddr-in/linux
(lambda (family port address)
(make-socket-address family address port))
- read-sockaddr-in
- write-sockaddr-in!
+ read-sockaddr-in/linux
+ write-sockaddr-in!/linux
(family unsigned-short)
(port (int16 ~ big))
(address (int32 ~ big)))
-(define-c-struct sockaddr-in6 ;<linux/in6.h>
- sizeof-sockaddr-in6
+(define-c-struct sockaddr-in/hurd ;<netinet/in.h>
+ sizeof-sockaddr-in/hurd
+ (lambda (len family port address zero)
+ (make-socket-address family address port))
+ read-sockaddr-in/hurd
+ write-sockaddr-in!/hurd
+ (len uint8)
+ (family uint8)
+ (port (int16 ~ big))
+ (address (int32 ~ big))
+ (zero (array uint8 8)))
+
+(define-c-struct sockaddr-in6/linux ;<linux/in6.h>
+ sizeof-sockaddr-in6/linux
(lambda (family port flowinfo address scopeid)
(make-socket-address family address port flowinfo scopeid))
- read-sockaddr-in6
- write-sockaddr-in6!
+ read-sockaddr-in6/linux
+ write-sockaddr-in6!/linux
(family unsigned-short)
(port (int16 ~ big))
(flowinfo (int32 ~ big))
(address (int128 ~ big))
(scopeid int32))
-(define (write-socket-address! sockaddr bv index)
+(define-c-struct sockaddr-in6/hurd ;<netinet/in.h>
+ sizeof-sockaddr-in6/hurd
+ (lambda (len family port flowinfo address scopeid)
+ (make-socket-address family address port flowinfo scopeid))
+ read-sockaddr-in6/hurd
+ write-sockaddr-in6!/hurd
+ (len uint8)
+ (family uint8)
+ (port (int16 ~ big))
+ (flowinfo (int32 ~ big))
+ (address (int128 ~ big))
+ (scopeid int32))
+
+(define (write-socket-address!/linux sockaddr bv index)
+ "Write SOCKADDR, a socket address as returned by 'make-socket-address', to
+bytevector BV at INDEX."
+ (let ((family (sockaddr:fam sockaddr)))
+ (cond ((= family AF_INET)
+ (write-sockaddr-in!/linux bv index
+ family
+ (sockaddr:port sockaddr)
+ (sockaddr:addr sockaddr)))
+ ((= family AF_INET6)
+ (write-sockaddr-in6!/linux bv index
+ family
+ (sockaddr:port sockaddr)
+ (sockaddr:flowinfo sockaddr)
+ (sockaddr:addr sockaddr)
+ (sockaddr:scopeid sockaddr)))
+ (else
+ (error "unsupported socket address" sockaddr)))))
+
+(define (write-socket-address!/hurd sockaddr bv index)
"Write SOCKADDR, a socket address as returned by 'make-socket-address', to
bytevector BV at INDEX."
(let ((family (sockaddr:fam sockaddr)))
(cond ((= family AF_INET)
- (write-sockaddr-in! bv index
- family
- (sockaddr:port sockaddr)
- (sockaddr:addr sockaddr)))
+ (write-sockaddr-in!/hurd bv index
+ sizeof-sockaddr-in/hurd
+ family
+ (sockaddr:port sockaddr)
+ (sockaddr:addr sockaddr)
+ '(0 0 0 0 0 0 0 0)))
((= family AF_INET6)
- (write-sockaddr-in6! bv index
- family
- (sockaddr:port sockaddr)
- (sockaddr:flowinfo sockaddr)
- (sockaddr:addr sockaddr)
- (sockaddr:scopeid sockaddr)))
+ (write-sockaddr-in6!/hurd bv index
+ sizeof-sockaddr-in6/hurd
+ family
+ (sockaddr:port sockaddr)
+ (sockaddr:flowinfo sockaddr)
+ (sockaddr:addr sockaddr)
+ (sockaddr:scopeid sockaddr)))
(else
(error "unsupported socket address" sockaddr)))))
+(define write-socket-address!
+ (if (string-suffix? "linux-gnu" %host-type)
+ write-socket-address!/linux
+ write-socket-address!/hurd))
+
(define PF_PACKET 17) ;<bits/socket.h>
(define AF_PACKET PF_PACKET)
-(define* (read-socket-address bv #:optional (index 0))
+(define* (read-socket-address/linux bv #:optional (index 0))
+ "Read a socket address from bytevector BV at INDEX."
+ (let ((family (bytevector-u16-native-ref bv index)))
+ (cond ((= family AF_INET)
+ (read-sockaddr-in/linux bv index))
+ ((= family AF_INET6)
+ (read-sockaddr-in6/linux bv index))
+ (else
+ ;; XXX: Unsupported address family, such as AF_PACKET. Return a
+ ;; vector such that the vector can at least call 'sockaddr:fam'.
+ (vector family)))))
+
+(define* (read-socket-address/hurd bv #:optional (index 0))
"Read a socket address from bytevector BV at INDEX."
(let ((family (bytevector-u16-native-ref bv index)))
(cond ((= family AF_INET)
- (read-sockaddr-in bv index))
+ (read-sockaddr-in/hurd bv index))
((= family AF_INET6)
- (read-sockaddr-in6 bv index))
+ (read-sockaddr-in6/hurd bv index))
(else
;; XXX: Unsupported address family, such as AF_PACKET. Return a
;; vector such that the vector can at least call 'sockaddr:fam'.
(vector family)))))
+(define read-socket-address
+ (if (string-suffix? "linux-gnu" %host-type)
+ read-socket-address/linux
+ read-socket-address/hurd))
+
(define %ioctl
;; The most terrible interface, live from Scheme.
(syscall->procedure int "ioctl" (list int unsigned-long '*)))
- branch wip-hurd-vm created (now aacc07d), guix-commits, 2020/05/10
- 02/21: system: vm: Fix for cross-build to the Hurd., guix-commits, 2020/05/10
- 03/21: system: vm: Add defaults for the Hurd., guix-commits, 2020/05/10
- 06/21: bootleader: Add `<hurd-menu-entry>'., guix-commits, 2020/05/10
- 01/21: syscalls: Adjust 'sockaddr-in', 'sockaddr-in6' structs for the Hurd.,
guix-commits <=
- 04/21: system: hurd: Add hurd-default-essential-services., guix-commits, 2020/05/10
- 05/21: system: Add 'hurd' field to <operating-system>., guix-commits, 2020/05/10
- 07/21: system: Add 'hurd' field to <boot-parameters>., guix-commits, 2020/05/10
- 12/21: services: hurd: Add `hurd-etc-service'., guix-commits, 2020/05/10
- 14/21: services: hurd: Use activation-service, hurd-etc-service., guix-commits, 2020/05/10
- 08/21: bootloader: grub: Add support for '<hurd-menu-entry>'., guix-commits, 2020/05/10
- 10/21: system: Use 'hurd' package in label., guix-commits, 2020/05/10
- 13/21: system: Add `hurd-activation'., guix-commits, 2020/05/10
- 09/21: system: vm: Initial vm-image support for the Hurd., guix-commits, 2020/05/10
- 15/21: gnu: hurd: Create minimal "runsystem" script to invoke "rc"., guix-commits, 2020/05/10