summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/sys_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/kern/sys_socket.c')
-rw-r--r--freebsd/sys/kern/sys_socket.c274
1 files changed, 6 insertions, 268 deletions
diff --git a/freebsd/sys/kern/sys_socket.c b/freebsd/sys/kern/sys_socket.c
index 4f4ce99e..2fde0dd1 100644
--- a/freebsd/sys/kern/sys_socket.c
+++ b/freebsd/sys/kern/sys_socket.c
@@ -79,6 +79,7 @@ __FBSDID("$FreeBSD$");
#include <vm/pmap.h>
#include <vm/vm_extern.h>
#include <vm/vm_map.h>
+#endif /* __rtems__ */
static SYSCTL_NODE(_kern_ipc, OID_AUTO, aio, CTLFLAG_RD, NULL,
"socket AIO stats");
@@ -119,13 +120,8 @@ struct fileops socketops = {
.fo_aio_queue = soo_aio_queue,
.fo_flags = DFLAG_PASSABLE
};
-#endif /* __rtems__ */
-#ifdef __rtems__
-int
-#else /* __rtems__ */
static int
-#endif /* __rtems__ */
soo_read(struct file *fp, struct uio *uio, struct ucred *active_cred,
int flags, struct thread *td)
{
@@ -140,76 +136,8 @@ soo_read(struct file *fp, struct uio *uio, struct ucred *active_cred,
error = soreceive(so, 0, uio, 0, 0, 0);
return (error);
}
-#ifdef __rtems__
-static ssize_t
-rtems_bsd_soo_read(rtems_libio_t *iop, void *buffer, size_t count)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- struct iovec iov = {
- .iov_base = buffer,
- .iov_len = count
- };
- struct uio auio = {
- .uio_iov = &iov,
- .uio_iovcnt = 1,
- .uio_offset = 0,
- .uio_resid = count,
- .uio_segflg = UIO_USERSPACE,
- .uio_rw = UIO_READ,
- .uio_td = td
- };
- int error;
-
- if (td != NULL) {
- error = soo_read(fp, &auio, NULL, 0, NULL);
- } else {
- error = ENOMEM;
- }
-
- if (error == 0) {
- return (count - auio.uio_resid);
- } else {
- rtems_set_errno_and_return_minus_one(error);
- }
-}
-
-static ssize_t
-rtems_bsd_soo_readv(rtems_libio_t *iop, const struct iovec *iov,
- int iovcnt, ssize_t total)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- struct uio auio = {
- .uio_iov = __DECONST(struct iovec *, iov),
- .uio_iovcnt = iovcnt,
- .uio_offset = 0,
- .uio_resid = total,
- .uio_segflg = UIO_USERSPACE,
- .uio_rw = UIO_READ,
- .uio_td = td
- };
- int error;
-
- if (td != NULL) {
- error = soo_read(fp, &auio, NULL, 0, NULL);
- } else {
- error = ENOMEM;
- }
-
- if (error == 0) {
- return (total - auio.uio_resid);
- } else {
- rtems_set_errno_and_return_minus_one(error);
- }
-}
-#endif /* __rtems__ */
-#ifdef __rtems__
-int
-#else /* __rtems__ */
static int
-#endif /* __rtems__ */
soo_write(struct file *fp, struct uio *uio, struct ucred *active_cred,
int flags, struct thread *td)
{
@@ -233,76 +161,8 @@ soo_write(struct file *fp, struct uio *uio, struct ucred *active_cred,
}
return (error);
}
-#ifdef __rtems__
-static ssize_t
-rtems_bsd_soo_write(rtems_libio_t *iop, const void *buffer, size_t count)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- struct iovec iov = {
- .iov_base = __DECONST(void *, buffer),
- .iov_len = count
- };
- struct uio auio = {
- .uio_iov = &iov,
- .uio_iovcnt = 1,
- .uio_offset = 0,
- .uio_resid = count,
- .uio_segflg = UIO_USERSPACE,
- .uio_rw = UIO_WRITE,
- .uio_td = td
- };
- int error;
-
- if (td != NULL) {
- error = soo_write(fp, &auio, NULL, 0, NULL);
- } else {
- error = ENOMEM;
- }
-
- if (error == 0) {
- return (count - auio.uio_resid);
- } else {
- rtems_set_errno_and_return_minus_one(error);
- }
-}
-
-static ssize_t
-rtems_bsd_soo_writev(rtems_libio_t *iop, const struct iovec *iov,
- int iovcnt, ssize_t total)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- struct uio auio = {
- .uio_iov = __DECONST(struct iovec *, iov),
- .uio_iovcnt = iovcnt,
- .uio_offset = 0,
- .uio_resid = total,
- .uio_segflg = UIO_USERSPACE,
- .uio_rw = UIO_WRITE,
- .uio_td = td
- };
- int error;
-
- if (td != NULL) {
- error = soo_write(fp, &auio, NULL, 0, NULL);
- } else {
- error = ENOMEM;
- }
-
- if (error == 0) {
- return (total - auio.uio_resid);
- } else {
- rtems_set_errno_and_return_minus_one(error);
- }
-}
-#endif /* __rtems__ */
-#ifdef __rtems__
-int
-#else /* __rtems__ */
static int
-#endif /* __rtems__ */
soo_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *active_cred,
struct thread *td)
{
@@ -414,29 +274,8 @@ soo_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *active_cred,
}
return (error);
}
-#ifdef __rtems__
-static int
-rtems_bsd_soo_ioctl(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- int error;
-
- if (td != NULL) {
- error = soo_ioctl(fp, request, buffer, NULL, td);
- } else {
- error = ENOMEM;
- }
-
- return rtems_bsd_error_to_status_and_errno(error);
-}
-#endif /* __rtems__ */
-#ifdef __rtems__
-int
-#else /* __rtems__ */
static int
-#endif /* __rtems__ */
soo_poll(struct file *fp, int events, struct ucred *active_cred,
struct thread *td)
{
@@ -448,48 +287,19 @@ soo_poll(struct file *fp, int events, struct ucred *active_cred,
if (error)
return (error);
#endif
-#ifndef __rtems__
return (sopoll(so, events, fp->f_cred, td));
-#else /* __rtems__ */
- return (sopoll(so, events, NULL, td));
-#endif /* __rtems__ */
-}
-#ifdef __rtems__
-static int
-rtems_bsd_soo_poll(rtems_libio_t *iop, int events)
-{
- struct thread *td = rtems_bsd_get_curthread_or_null();
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- int error;
-
- if (td != NULL) {
- error = soo_poll(fp, events, NULL, td);
- } else {
- error = ENOMEM;
- }
-
- return (error);
}
-#endif /* __rtems__ */
-#ifndef __rtems__
int
soo_stat(struct file *fp, struct stat *ub, struct ucred *active_cred,
struct thread *td)
{
struct socket *so = fp->f_data;
-#else /* __rtems__ */
-static int
-soo_stat(struct socket *so, struct stat *ub)
-{
-#endif /* __rtems__ */
#ifdef MAC
int error;
#endif
-#ifndef __rtems__
bzero((caddr_t)ub, sizeof (*ub));
-#endif /* __rtems__ */
ub->st_mode = S_IFSOCK;
#ifdef MAC
error = mac_socket_check_stat(active_cred, so);
@@ -525,19 +335,6 @@ soo_stat(struct socket *so, struct stat *ub)
#endif /* __rtems__ */
return (*so->so_proto->pr_usrreqs->pru_sense)(so, ub);
}
-#ifdef __rtems__
-static int
-rtems_bsd_soo_stat(
- const rtems_filesystem_location_info_t *loc,
- struct stat *buf
-)
-{
- struct socket *so = rtems_bsd_loc_to_f_data(loc);
- int error = soo_stat(so, buf);
-
- return rtems_bsd_error_to_status_and_errno(error);
-}
-#endif /* __rtems__ */
/*
* API socket close on file pointer. We call soclose() to close the socket
@@ -545,27 +342,15 @@ rtems_bsd_soo_stat(
* file reference but the actual socket will not go away until the socket's
* ref count hits 0.
*/
-#ifdef __rtems__
-int
-#else /* __rtems__ */
static int
-#endif /* __rtems__ */
soo_close(struct file *fp, struct thread *td)
{
int error = 0;
struct socket *so;
-#ifdef __rtems__
- /* FIXME: Move this to the RTEMS close() function */
- knote_fdclose(td, rtems_bsd_fp_to_fd(fp));
-#endif /* __rtems__ */
so = fp->f_data;
-#ifndef __rtems__
fp->f_ops = &badfileops;
-#else /* __rtems__ */
- fp->f_io.pathinfo.handlers = &rtems_filesystem_handlers_default;
-#endif /* __rtems__ */
fp->f_data = NULL;
if (so)
@@ -573,7 +358,6 @@ soo_close(struct file *fp, struct thread *td)
return (error);
}
-#ifndef __rtems__
static int
soo_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
{
@@ -642,6 +426,7 @@ soo_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
return (0);
}
+#ifndef __rtems__
/*
* Use the 'backend3' field in AIO jobs to store the amount of data
* completed by the AIO job so far.
@@ -1014,10 +799,12 @@ soo_aio_cancel(struct kaiocb *job)
else
aio_cancel(job);
}
+#endif /* __rtems__ */
static int
soo_aio_queue(struct file *fp, struct kaiocb *job)
{
+#ifndef __rtems__
struct socket *so;
struct sockbuf *sb;
int error;
@@ -1050,56 +837,7 @@ soo_aio_queue(struct file *fp, struct kaiocb *job)
}
SOCKBUF_UNLOCK(sb);
return (0);
-}
+#else /* __rtems__ */
+ return (EIO);
#endif /* __rtems__ */
-#ifdef __rtems__
-static int
-rtems_bsd_soo_open(rtems_libio_t *iop, const char *path, int oflag,
- mode_t mode)
-{
- return rtems_bsd_error_to_status_and_errno(ENXIO);
-}
-
-static int
-rtems_bsd_soo_close(rtems_libio_t *iop)
-{
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- int error = soo_close(fp, NULL);
-
- return rtems_bsd_error_to_status_and_errno(error);
}
-
-static int
-rtems_bsd_soo_fcntl(rtems_libio_t *iop, int cmd)
-{
- int error = 0;
-
- if (cmd == F_SETFL) {
- struct file *fp = rtems_bsd_iop_to_fp(iop);
- int nbio = iop->flags & LIBIO_FLAGS_NO_DELAY;
-
- error = soo_ioctl(fp, FIONBIO, &nbio, NULL, NULL);
- }
-
- return rtems_bsd_error_to_status_and_errno(error);
-}
-
-const rtems_filesystem_file_handlers_r socketops = {
- .open_h = rtems_bsd_soo_open,
- .close_h = rtems_bsd_soo_close,
- .read_h = rtems_bsd_soo_read,
- .write_h = rtems_bsd_soo_write,
- .ioctl_h = rtems_bsd_soo_ioctl,
- .lseek_h = rtems_filesystem_default_lseek,
- .fstat_h = rtems_bsd_soo_stat,
- .ftruncate_h = rtems_filesystem_default_ftruncate,
- .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
- .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
- .fcntl_h = rtems_bsd_soo_fcntl,
- .poll_h = rtems_bsd_soo_poll,
- .kqfilter_h = rtems_bsd_soo_kqfilter,
- .readv_h = rtems_bsd_soo_readv,
- .writev_h = rtems_bsd_soo_writev,
- .mmap_h = rtems_filesystem_default_mmap
-};
-#endif /* __rtems__ */