svn commit: r285812 - head/sys/compat/cloudabi

Ed Schouten ed at FreeBSD.org
Thu Jul 23 13:52:55 UTC 2015


Author: ed
Date: Thu Jul 23 13:52:53 2015
New Revision: 285812
URL: https://svnweb.freebsd.org/changeset/base/285812

Log:
  Allow us to create UNIX sockets and socketpairs in CloudABI processes.

Modified:
  head/sys/compat/cloudabi/cloudabi_fd.c

Modified: head/sys/compat/cloudabi/cloudabi_fd.c
==============================================================================
--- head/sys/compat/cloudabi/cloudabi_fd.c	Thu Jul 23 13:22:13 2015	(r285811)
+++ head/sys/compat/cloudabi/cloudabi_fd.c	Thu Jul 23 13:52:53 2015	(r285812)
@@ -46,18 +46,51 @@ int
 cloudabi_sys_fd_create1(struct thread *td,
     struct cloudabi_sys_fd_create1_args *uap)
 {
+	struct socket_args socket_args = {
+		.domain = AF_UNIX,
+	};
 
-	/* Not implemented. */
-	return (ENOSYS);
+	switch (uap->type) {
+	case CLOUDABI_FILETYPE_SOCKET_DGRAM:
+		socket_args.type = SOCK_DGRAM;
+		return (sys_socket(td, &socket_args));
+	case CLOUDABI_FILETYPE_SOCKET_SEQPACKET:
+		socket_args.type = SOCK_SEQPACKET;
+		return (sys_socket(td, &socket_args));
+	case CLOUDABI_FILETYPE_SOCKET_STREAM:
+		socket_args.type = SOCK_STREAM;
+		return (sys_socket(td, &socket_args));
+	default:
+		return (EINVAL);
+	}
 }
 
 int
 cloudabi_sys_fd_create2(struct thread *td,
     struct cloudabi_sys_fd_create2_args *uap)
 {
+	int fds[2];
+	int error;
 
-	/* Not implemented. */
-	return (ENOSYS);
+	switch (uap->type) {
+	case CLOUDABI_FILETYPE_SOCKET_DGRAM:
+		error = kern_socketpair(td, AF_UNIX, SOCK_DGRAM, 0, fds);
+		break;
+	case CLOUDABI_FILETYPE_SOCKET_SEQPACKET:
+		error = kern_socketpair(td, AF_UNIX, SOCK_SEQPACKET, 0, fds);
+		break;
+	case CLOUDABI_FILETYPE_SOCKET_STREAM:
+		error = kern_socketpair(td, AF_UNIX, SOCK_STREAM, 0, fds);
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	if (error == 0) {
+		td->td_retval[0] = fds[0];
+		td->td_retval[1] = fds[1];
+	}
+	return (0);
 }
 
 int


More information about the svn-src-head mailing list