code cleanup. renamed exported socket functions as socket_ and removed void *
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1792 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -98,19 +98,6 @@
|
|||||||
# define get_interfaces core->get_interfaces
|
# define get_interfaces core->get_interfaces
|
||||||
# define get_primary_addr core->get_primary_addr
|
# define get_primary_addr core->get_primary_addr
|
||||||
|
|
||||||
# define initsocket core->initsocket
|
|
||||||
# define socreate core->socreate
|
|
||||||
# define soclose core->soclose
|
|
||||||
|
|
||||||
# define sobind core->sobind
|
|
||||||
# define soconnect core->soconnect
|
|
||||||
# define solisten core->solisten
|
|
||||||
# define soaccept core->soaccept
|
|
||||||
|
|
||||||
# define soo_ioctl core->soo_ioctl
|
|
||||||
# define net_sysctl core->net_sysctl
|
# define net_sysctl core->net_sysctl
|
||||||
|
|
||||||
# define readit core->readit
|
|
||||||
# define writeit core->writeit
|
|
||||||
|
|
||||||
#endif /* OBOS_CORE_FUNCS_H */
|
#endif /* OBOS_CORE_FUNCS_H */
|
||||||
|
|||||||
@@ -129,25 +129,26 @@ struct core_module_info {
|
|||||||
|
|
||||||
struct in_ifaddr *(*get_primary_addr)(void);
|
struct in_ifaddr *(*get_primary_addr)(void);
|
||||||
|
|
||||||
/* socket functions - used by socket driver */
|
|
||||||
int (*initsocket)(struct socket **);
|
|
||||||
int (*socreate)(int, struct socket *, int, int);
|
|
||||||
int (*soclose)(void *);
|
|
||||||
int (*sobind)(void *, caddr_t, int);
|
|
||||||
int (*solisten)(void *, int);
|
|
||||||
int (*soconnect)(void *, caddr_t, int);
|
|
||||||
int (*recvit)(void *, struct msghdr *, caddr_t, int *);
|
|
||||||
int (*sendit)(void *, struct msghdr *, int, int *);
|
|
||||||
int (*soo_ioctl)(void *, int, caddr_t);
|
|
||||||
int (*net_sysctl)(int *, uint, void *, size_t *, void *, size_t);
|
int (*net_sysctl)(int *, uint, void *, size_t *, void *, size_t);
|
||||||
int (*writeit)(void *, struct iovec *, int);
|
|
||||||
int (*readit)(void*, struct iovec *, int *);
|
/* socket functions - used by socket driver */
|
||||||
int (*sosetopt)(void *, int, int, const void *, size_t);
|
int (*socket_init) (struct socket **nso);
|
||||||
int (*sogetopt)(void *, int, int, void *, size_t *);
|
int (*socket_create) (struct socket *so, int dom, int type, int proto);
|
||||||
int (*set_socket_event_callback)(void *, socket_event_callback, void *, int);
|
int (*socket_close) (struct socket *so);
|
||||||
int (*sogetpeername)(void *, struct sockaddr *, int *);
|
int (*socket_bind) (struct socket *so, caddr_t, int);
|
||||||
int (*sogetsockname)(void *, struct sockaddr *, int *);
|
int (*socket_listen) (struct socket *so, int backlog);
|
||||||
int (*soaccept)(struct socket *s, struct socket **news, void *, int *);
|
int (*socket_connect) (struct socket *so, caddr_t, int);
|
||||||
|
int (*socket_accept) (struct socket *so, struct socket **nso, void *, int *);
|
||||||
|
int (*socket_recv) (struct socket *so, struct msghdr *, caddr_t namelenp, int *retsize);
|
||||||
|
int (*socket_send) (struct socket *so, struct msghdr *, int flags, int *retsize);
|
||||||
|
int (*socket_ioctl) (struct socket *so, int, caddr_t);
|
||||||
|
int (*socket_writev) (struct socket *so, struct iovec *, int flags);
|
||||||
|
int (*socket_readv) (struct socket *so, struct iovec *, int *flags);
|
||||||
|
int (*socket_setsockopt) (struct socket *so, int, int, const void *, size_t);
|
||||||
|
int (*socket_getsockopt) (struct socket *so, int, int, void *, size_t *);
|
||||||
|
int (*socket_getpeername) (struct socket *so, struct sockaddr *, int *);
|
||||||
|
int (*socket_getsockname) (struct socket *so, struct sockaddr *, int *);
|
||||||
|
int (*socket_set_event_callback)(struct socket *so, socket_event_callback, void *, int);
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _KERNEL_MODE
|
#ifdef _KERNEL_MODE
|
||||||
@@ -157,4 +158,3 @@ struct core_module_info {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* OBOS_CORE_MODULE_H */
|
#endif /* OBOS_CORE_MODULE_H */
|
||||||
|
|
||||||
|
|||||||
@@ -4,35 +4,33 @@
|
|||||||
#include <sys/socketvar.h>
|
#include <sys/socketvar.h>
|
||||||
#include <mbuf.h>
|
#include <mbuf.h>
|
||||||
|
|
||||||
//uint32 sb_max;
|
|
||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
|
|
||||||
/* These are the ones we export to libnet.so */
|
/* These functions are exported through the core module */
|
||||||
|
|
||||||
int initsocket(struct socket **);
|
int socket_init (struct socket **nso);
|
||||||
int socreate (int, struct socket *, int, int);//XXX
|
int socket_create (struct socket *so, int dom, int type, int proto);
|
||||||
int soshutdown(void *, int);
|
int socket_shutdown (struct socket *so, int how); // XXX this one is not used at all
|
||||||
int soclose (void *);
|
int socket_close (struct socket *so);
|
||||||
|
|
||||||
int sobind (void *, char *, int);
|
int socket_bind (struct socket *so, char *, int);
|
||||||
int solisten (void *, int);
|
int socket_listen (struct socket *so, int backlog);
|
||||||
int soconnect (void *, char *, int);
|
int socket_connect (struct socket *so, char *, int);
|
||||||
int soaccept (struct socket *, struct socket **, void *, int *);
|
int socket_accept (struct socket *so, struct socket **nso, void *, int *);
|
||||||
|
|
||||||
int writeit (void *, struct iovec *, int);
|
int socket_writev (struct socket *so, struct iovec *, int flags);
|
||||||
int readit (void *, struct iovec *, int *);
|
int socket_readv (struct socket *so, struct iovec *, int *flags);
|
||||||
int sendit (void *, struct msghdr *, int, int *);
|
int socket_send (struct socket *so, struct msghdr *, int flags, int *retsize);
|
||||||
int recvit (void *, struct msghdr *, char *, int *);
|
int socket_recv (struct socket *so, struct msghdr *, caddr_t namelenp, int *retsize);
|
||||||
|
|
||||||
//int so_ioctl (void *, int, void *, size_t);
|
int socket_setsockopt (struct socket *so, int, int, const void *, size_t);
|
||||||
int sosysctl (int *, uint, void *, size_t *, void *, size_t);
|
int socket_getsockopt (struct socket *so, int, int, void *, size_t *);
|
||||||
int sosetopt (void *, int, int, const void *, size_t);
|
int socket_ioctl (struct socket *so, int cmd, caddr_t data);
|
||||||
int sogetopt (void *, int, int, void *, size_t *);
|
|
||||||
int soo_ioctl(void *sp, int cmd, caddr_t data);
|
|
||||||
|
|
||||||
int sogetpeername(void *, struct sockaddr *, int *);
|
int socket_getpeername (struct socket *so, struct sockaddr *, int *);
|
||||||
int sogetsockname(void *, struct sockaddr *, int *);
|
int socket_getsockname (struct socket *so, struct sockaddr *, int *);
|
||||||
|
|
||||||
|
int socket_set_event_callback(struct socket *so, socket_event_callback, void *, int);
|
||||||
|
|
||||||
|
|
||||||
/* these are all private to the stack...although may be shared with
|
/* these are all private to the stack...although may be shared with
|
||||||
@@ -43,7 +41,6 @@ int sosend(struct socket *so, struct mbuf *addr, struct uio *uio,
|
|||||||
struct mbuf *top, struct mbuf *control, int flags);
|
struct mbuf *top, struct mbuf *control, int flags);
|
||||||
|
|
||||||
struct socket *sonewconn(struct socket *head, int connstatus);
|
struct socket *sonewconn(struct socket *head, int connstatus);
|
||||||
int set_socket_event_callback(void *, socket_event_callback, void *, int);
|
|
||||||
int soreserve (struct socket *so, uint32 sndcc, uint32 rcvcc);
|
int soreserve (struct socket *so, uint32 sndcc, uint32 rcvcc);
|
||||||
|
|
||||||
void sbrelease (struct sockbuf *sb);
|
void sbrelease (struct sockbuf *sb);
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ static status_t net_stack_close(void *cookie)
|
|||||||
|
|
||||||
if (nsc->socket) {
|
if (nsc->socket) {
|
||||||
// if a socket was opened on this fd, close it now.
|
// if a socket was opened on this fd, close it now.
|
||||||
rv = core->soclose(nsc->socket);
|
rv = core->socket_close(nsc->socket);
|
||||||
nsc->socket = NULL;
|
nsc->socket = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,26 +364,26 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
// okay, now try to open a real socket behind this fd/net_stack_cookie pair
|
// okay, now try to open a real socket behind this fd/net_stack_cookie pair
|
||||||
rv = core->initsocket(&nsc->socket);
|
rv = core->socket_init(&nsc->socket);
|
||||||
if (rv == 0)
|
if (rv == 0)
|
||||||
rv = core->socreate(args->family, nsc->socket, args->type, args->proto);
|
rv = core->socket_create(nsc->socket, args->family, args->type, args->proto);
|
||||||
// TODO: This is where the open flags need to be addressed
|
// TODO: This is where the open flags need to be addressed
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
case NET_STACK_CONNECT: {
|
case NET_STACK_CONNECT: {
|
||||||
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
||||||
// args->addr == sockaddr to connect to
|
// args->addr == sockaddr to connect to
|
||||||
return core->soconnect(nsc->socket, (caddr_t) args->addr, args->addrlen);
|
return core->socket_connect(nsc->socket, (caddr_t) args->addr, args->addrlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_BIND: {
|
case NET_STACK_BIND: {
|
||||||
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
||||||
// args->addr == sockaddr to try and bind to
|
// args->addr == sockaddr to try and bind to
|
||||||
return core->sobind(nsc->socket, (caddr_t) args->addr, args->addrlen);
|
return core->socket_bind(nsc->socket, (caddr_t) args->addr, args->addrlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_LISTEN: {
|
case NET_STACK_LISTEN: {
|
||||||
struct int_args * args = (struct int_args *) data;
|
struct int_args * args = (struct int_args *) data;
|
||||||
// args->value == backlog to set
|
// args->value == backlog to set
|
||||||
return core->solisten(nsc->socket, args->value);
|
return core->socket_listen(nsc->socket, args->value);
|
||||||
}
|
}
|
||||||
case NET_STACK_GET_COOKIE: {
|
case NET_STACK_GET_COOKIE: {
|
||||||
/* this is needed by accept() call, to be able to pass back
|
/* this is needed by accept() call, to be able to pass back
|
||||||
@@ -399,7 +399,7 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
/* args->cookie == net_stack_cookie * of the already opened fd to use to the
|
/* args->cookie == net_stack_cookie * of the already opened fd to use to the
|
||||||
* newly accepted socket
|
* newly accepted socket
|
||||||
*/
|
*/
|
||||||
return core->soaccept(nsc->socket, &ansc->socket, (void *)args->addr, &args->addrlen);
|
return core->socket_accept(nsc->socket, &ansc->socket, (void *)args->addr, &args->addrlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_SEND: {
|
case NET_STACK_SEND: {
|
||||||
struct data_xfer_args * args = (struct data_xfer_args *) data;
|
struct data_xfer_args * args = (struct data_xfer_args *) data;
|
||||||
@@ -415,7 +415,7 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
struct msghdr * mh = (struct msghdr *) data;
|
struct msghdr * mh = (struct msghdr *) data;
|
||||||
int retsize, error;
|
int retsize, error;
|
||||||
|
|
||||||
error = core->recvit(nsc->socket, mh, (caddr_t)&mh->msg_namelen,
|
error = core->socket_recv(nsc->socket, mh, (caddr_t)&mh->msg_namelen,
|
||||||
&retsize);
|
&retsize);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
return retsize;
|
return retsize;
|
||||||
@@ -425,7 +425,7 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
struct msghdr * mh = (struct msghdr *) data;
|
struct msghdr * mh = (struct msghdr *) data;
|
||||||
int retsize, error;
|
int retsize, error;
|
||||||
|
|
||||||
error = core->sendit(nsc->socket, mh, mh->msg_flags,
|
error = core->socket_send(nsc->socket, mh, mh->msg_flags,
|
||||||
&retsize);
|
&retsize);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
return retsize;
|
return retsize;
|
||||||
@@ -439,24 +439,24 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
}
|
}
|
||||||
case NET_STACK_GETSOCKOPT: {
|
case NET_STACK_GETSOCKOPT: {
|
||||||
struct sockopt_args * args = (struct sockopt_args *) data;
|
struct sockopt_args * args = (struct sockopt_args *) data;
|
||||||
return core->sogetopt(nsc->socket, args->level, args->option,
|
return core->socket_getsockopt(nsc->socket, args->level, args->option,
|
||||||
args->optval, (size_t *) &args->optlen);
|
args->optval, (size_t *) &args->optlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_SETSOCKOPT: {
|
case NET_STACK_SETSOCKOPT: {
|
||||||
struct sockopt_args * args = (struct sockopt_args *)data;
|
struct sockopt_args * args = (struct sockopt_args *)data;
|
||||||
|
|
||||||
return core->sosetopt(nsc->socket, args->level, args->option,
|
return core->socket_setsockopt(nsc->socket, args->level, args->option,
|
||||||
(const void *) args->optval, args->optlen);
|
(const void *) args->optval, args->optlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_GETSOCKNAME: {
|
case NET_STACK_GETSOCKNAME: {
|
||||||
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
||||||
// args->addr == sockaddr to accept the sockname
|
// args->addr == sockaddr to accept the sockname
|
||||||
return core->sogetsockname(nsc->socket, args->addr, &args->addrlen);
|
return core->socket_getsockname(nsc->socket, args->addr, &args->addrlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_GETPEERNAME: {
|
case NET_STACK_GETPEERNAME: {
|
||||||
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
struct sockaddr_args * args = (struct sockaddr_args *) data;
|
||||||
// args->addr == sockaddr to accept the peername
|
// args->addr == sockaddr to accept the peername
|
||||||
return core->sogetpeername(nsc->socket, args->addr, &args->addrlen);
|
return core->socket_getpeername(nsc->socket, args->addr, &args->addrlen);
|
||||||
}
|
}
|
||||||
case NET_STACK_STOP: {
|
case NET_STACK_STOP: {
|
||||||
core->stop();
|
core->stop();
|
||||||
@@ -485,7 +485,7 @@ static status_t net_stack_control(void *cookie, uint32 op, void * data, size_t l
|
|||||||
default:
|
default:
|
||||||
if (nsc->socket)
|
if (nsc->socket)
|
||||||
// pass any unhandled opcode to the stack
|
// pass any unhandled opcode to the stack
|
||||||
return core->soo_ioctl(nsc->socket, op, data);
|
return core->socket_ioctl(nsc->socket, op, data);
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -519,7 +519,7 @@ static status_t net_stack_read(void *cookie,
|
|||||||
iov.iov_base = buffer;
|
iov.iov_base = buffer;
|
||||||
iov.iov_len = *readlen;
|
iov.iov_len = *readlen;
|
||||||
|
|
||||||
error = core->readit(nsc->socket, &iov, &flags);
|
error = core->socket_readv(nsc->socket, &iov, &flags);
|
||||||
*readlen = error;
|
*readlen = error;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@@ -556,7 +556,7 @@ static status_t net_stack_write(void *cookie,
|
|||||||
iov.iov_base = (void*)buffer;
|
iov.iov_base = (void*)buffer;
|
||||||
iov.iov_len = *writelen;
|
iov.iov_len = *writelen;
|
||||||
|
|
||||||
error = core->writeit(nsc->socket, &iov, flags);
|
error = core->socket_writev(nsc->socket, &iov, flags);
|
||||||
*writelen = error;
|
*writelen = error;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@@ -600,7 +600,7 @@ static status_t net_stack_select(void *cookie, uint8 event, uint32 ref, selectsy
|
|||||||
release_sem(nsc->selecters_lock);
|
release_sem(nsc->selecters_lock);
|
||||||
|
|
||||||
// start (or continue) to monitor for socket event
|
// start (or continue) to monitor for socket event
|
||||||
return core->set_socket_event_callback(nsc->socket, on_socket_event, nsc, event);
|
return core->socket_set_event_callback(nsc->socket, on_socket_event, nsc, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -650,7 +650,7 @@ static status_t net_stack_deselect(void *cookie, uint8 event, selectsync *sync)
|
|||||||
|
|
||||||
if (nsc->selecters == NULL)
|
if (nsc->selecters == NULL)
|
||||||
// selecters list is empty: no need to monitor socket events anymore
|
// selecters list is empty: no need to monitor socket events anymore
|
||||||
core->set_socket_event_callback(nsc->socket, NULL, NULL, event);
|
core->socket_set_event_callback(nsc->socket, NULL, NULL, event);
|
||||||
|
|
||||||
// unlock the selecters list
|
// unlock the selecters list
|
||||||
return release_sem(nsc->selecters_lock);
|
return release_sem(nsc->selecters_lock);
|
||||||
|
|||||||
@@ -172,24 +172,25 @@ _EXPORT struct core_module_info core_info = {
|
|||||||
|
|
||||||
get_primary_addr,
|
get_primary_addr,
|
||||||
|
|
||||||
initsocket,
|
|
||||||
socreate,
|
|
||||||
soclose,
|
|
||||||
sobind,
|
|
||||||
solisten,
|
|
||||||
soconnect,
|
|
||||||
recvit,
|
|
||||||
sendit,
|
|
||||||
soo_ioctl,
|
|
||||||
net_sysctl,
|
net_sysctl,
|
||||||
writeit,
|
|
||||||
readit,
|
socket_init,
|
||||||
sosetopt,
|
socket_create,
|
||||||
sogetopt,
|
socket_close,
|
||||||
set_socket_event_callback,
|
socket_bind,
|
||||||
sogetpeername,
|
socket_listen,
|
||||||
sogetsockname,
|
socket_connect,
|
||||||
soaccept
|
socket_accept,
|
||||||
|
socket_recv,
|
||||||
|
socket_send,
|
||||||
|
socket_ioctl,
|
||||||
|
socket_writev,
|
||||||
|
socket_readv,
|
||||||
|
socket_setsockopt,
|
||||||
|
socket_getsockopt,
|
||||||
|
socket_getpeername,
|
||||||
|
socket_getsockname,
|
||||||
|
socket_set_event_callback
|
||||||
};
|
};
|
||||||
|
|
||||||
static int32 if_thread(void *data)
|
static int32 if_thread(void *data)
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ void in_pcbdetach(struct inpcb *inp)
|
|||||||
* (SS_NOFDREF) and if there are it doesn't free. We don't have
|
* (SS_NOFDREF) and if there are it doesn't free. We don't have
|
||||||
* the same relationship to our sockets, as we use the socket for
|
* the same relationship to our sockets, as we use the socket for
|
||||||
* the kernel cookie, and freeing it here would lead to real problems,
|
* the kernel cookie, and freeing it here would lead to real problems,
|
||||||
* so we leave the socket until we call soclose()
|
* so we leave the socket until we call socket_close()
|
||||||
* This may need to be reviewed and an extra layer of abstraction
|
* This may need to be reviewed and an extra layer of abstraction
|
||||||
* added at some point if we find it's using too much system resource.
|
* added at some point if we find it's using too much system resource.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -106,32 +106,31 @@ int uiomove(caddr_t cp, int n, struct uio *uio)
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
int initsocket(struct socket **sp)
|
int socket_init(struct socket **nso)
|
||||||
{
|
{
|
||||||
struct socket *so;
|
struct socket *so;
|
||||||
|
|
||||||
so = (struct socket*)pool_get(spool);
|
so = (struct socket*)pool_get(spool);
|
||||||
|
|
||||||
if (so == NULL) {
|
if (so == NULL) {
|
||||||
printf("initsocket: ENOMEM\n");
|
printf("socket_init: ENOMEM\n");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(so, 0, sizeof(*so));
|
memset(so, 0, sizeof(*so));
|
||||||
|
|
||||||
*sp = so;
|
*nso = so;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int socreate(int dom, struct socket *sp, int type, int proto)
|
int socket_create(struct socket *so, int dom, int type, int proto)
|
||||||
{
|
{
|
||||||
struct protosw *prm = NULL; /* protocol module */
|
struct protosw *prm = NULL; /* protocol module */
|
||||||
struct socket *so = sp;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (so == NULL) {
|
if (so == NULL) {
|
||||||
printf("socreate: EINVAL\n");
|
printf("socket_create: EINVAL\n");
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,12 +140,12 @@ int socreate(int dom, struct socket *sp, int type, int proto)
|
|||||||
prm = pffindtype(dom, type);
|
prm = pffindtype(dom, type);
|
||||||
|
|
||||||
if (!prm || !prm->pr_userreq) {
|
if (!prm || !prm->pr_userreq) {
|
||||||
printf("socreate: EPROTONOSUPPORT\n");
|
printf("socket_create: EPROTONOSUPPORT\n");
|
||||||
return EPROTONOSUPPORT;
|
return EPROTONOSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prm->pr_type != type) {
|
if (prm->pr_type != type) {
|
||||||
printf("socreate: EPROTOTYPE\n");
|
printf("socket_create: EPROTOTYPE\n");
|
||||||
return EPROTOTYPE;
|
return EPROTOTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,15 +208,14 @@ bad:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int sobind(void *sp, caddr_t data, int len)
|
int socket_bind(struct socket *so, caddr_t data, int len)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
struct mbuf *nam;
|
struct mbuf *nam;
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
|
|
||||||
nam = m_get(MT_SONAME);
|
nam = m_get(MT_SONAME);
|
||||||
if (!nam) {
|
if (!nam) {
|
||||||
printf("sobind: ENOMEM\n");
|
printf("socket_bind: ENOMEM\n");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,9 +230,8 @@ int sobind(void *sp, caddr_t data, int len)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int solisten(void *sp, int backlog)
|
int socket_listen(struct socket *so, int backlog)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *)sp;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = so->so_proto->pr_userreq(so, PRU_LISTEN, NULL, NULL, NULL);
|
error = so->so_proto->pr_userreq(so, PRU_LISTEN, NULL, NULL, NULL);
|
||||||
@@ -252,9 +249,8 @@ int solisten(void *sp, int backlog)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int soconnect(void *sp, caddr_t data, int len)
|
int socket_connect(struct socket *so, caddr_t data, int len)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *)sp;
|
|
||||||
struct mbuf *nam = m_get(MT_SONAME);
|
struct mbuf *nam = m_get(MT_SONAME);
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
@@ -295,7 +291,7 @@ int soconnect(void *sp, caddr_t data, int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0)
|
while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0)
|
||||||
if ((error = nsleep(so->so_timeo, "soconnect", 0)))
|
if ((error = nsleep(so->so_timeo, "socket_connect", 0)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
@@ -317,7 +313,7 @@ struct socket *sonewconn(struct socket *head, int connstatus)
|
|||||||
|
|
||||||
if (head->so_qlen + head->so_q0len > 3 * head->so_qlimit / 2)
|
if (head->so_qlen + head->so_q0len > 3 * head->so_qlimit / 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (initsocket(&so) < 0)
|
if (socket_init(&so) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
so->so_type = head->so_type;
|
so->so_type = head->so_type;
|
||||||
@@ -343,9 +339,8 @@ struct socket *sonewconn(struct socket *head, int connstatus)
|
|||||||
return so;
|
return so;
|
||||||
}
|
}
|
||||||
|
|
||||||
int soshutdown(void *sp, int how)
|
int socket_shutdown(struct socket *so, int how)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct protosw *pr = so->so_proto;
|
struct protosw *pr = so->so_proto;
|
||||||
|
|
||||||
how++;
|
how++;
|
||||||
@@ -356,9 +351,8 @@ int soshutdown(void *sp, int how)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sendit(void *sp, struct msghdr *mp, int flags, int *retsize)
|
int socket_send(struct socket *so, struct msghdr *mp, int flags, int *retsize)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *)sp;
|
|
||||||
struct uio auio;
|
struct uio auio;
|
||||||
struct iovec *iov;
|
struct iovec *iov;
|
||||||
int i;
|
int i;
|
||||||
@@ -418,9 +412,8 @@ bad:
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int writeit(void *sp, struct iovec *iov, int flags)
|
int socket_writev(struct socket *so, struct iovec *iov, int flags)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *)sp;
|
|
||||||
struct uio auio;
|
struct uio auio;
|
||||||
int len = iov->iov_len;
|
int len = iov->iov_len;
|
||||||
int error;
|
int error;
|
||||||
@@ -606,9 +599,8 @@ out:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
int readit(void *sp, struct iovec *iov, int *flags)
|
int socket_readv(struct socket *so, struct iovec *iov, int *flags)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *)sp;
|
|
||||||
struct uio auio;
|
struct uio auio;
|
||||||
int len = iov->iov_len;
|
int len = iov->iov_len;
|
||||||
int error;
|
int error;
|
||||||
@@ -626,9 +618,8 @@ int readit(void *sp, struct iovec *iov, int *flags)
|
|||||||
return (len - auio.uio_resid);
|
return (len - auio.uio_resid);
|
||||||
}
|
}
|
||||||
|
|
||||||
int recvit(void *sp, struct msghdr *mp, caddr_t namelenp, int *retsize)
|
int socket_recv(struct socket *so, struct msghdr *mp, caddr_t namelenp, int *retsize)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct uio auio;
|
struct uio auio;
|
||||||
struct iovec *iov;
|
struct iovec *iov;
|
||||||
struct mbuf *control = NULL;
|
struct mbuf *control = NULL;
|
||||||
@@ -944,10 +935,8 @@ release:
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int soo_ioctl(void *sp, int cmd, caddr_t data)
|
int socket_ioctl(struct socket *so, int cmd, caddr_t data)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case FIONBIO:
|
case FIONBIO:
|
||||||
if (*(int*)data)
|
if (*(int*)data)
|
||||||
@@ -975,9 +964,8 @@ int soo_ioctl(void *sp, int cmd, caddr_t data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int soclose(void *sp)
|
int socket_close(struct socket *so)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
/* we don't want any more events... */
|
/* we don't want any more events... */
|
||||||
@@ -1019,7 +1007,7 @@ drop:
|
|||||||
|
|
||||||
discard:
|
discard:
|
||||||
if (so->so_state & SS_NOFDREF)
|
if (so->so_state & SS_NOFDREF)
|
||||||
printf("PANIC: soclose: NOFDREF");
|
printf("PANIC: socket_close: NOFDREF");
|
||||||
so->so_state |= SS_NOFDREF;
|
so->so_state |= SS_NOFDREF;
|
||||||
sofree(so);
|
sofree(so);
|
||||||
return error;
|
return error;
|
||||||
@@ -1086,9 +1074,8 @@ void sofree(struct socket *so)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sosetopt(void *sp, int level, int optnum, const void *data, size_t datalen)
|
int socket_setsockopt(struct socket *so, int level, int optnum, const void *data, size_t datalen)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct mbuf *m, *m0;
|
struct mbuf *m, *m0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
@@ -1193,9 +1180,8 @@ bad:
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sogetopt(void *sp, int level, int optnum, void *data, size_t *datalen)
|
int socket_getsockopt(struct socket *so, int level, int optnum, void *data, size_t *datalen)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct mbuf *m;
|
struct mbuf *m;
|
||||||
|
|
||||||
m = m_get(MT_SOOPTS);
|
m = m_get(MT_SOOPTS);
|
||||||
@@ -1270,10 +1256,8 @@ int sogetopt(void *sp, int level, int optnum, void *data, size_t *datalen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int set_socket_event_callback(void * sp, socket_event_callback cb, void * cookie, int event)
|
int socket_set_event_callback(struct socket *so, socket_event_callback cb, void * cookie, int event)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket *) sp;
|
|
||||||
|
|
||||||
so->event_callback = cb;
|
so->event_callback = cb;
|
||||||
so->event_callback_cookie = cookie;
|
so->event_callback_cookie = cookie;
|
||||||
if (cb) {
|
if (cb) {
|
||||||
@@ -1469,9 +1453,8 @@ void wakeup(sem_id chan)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* This file is too big - split it up!! */
|
/* This file is too big - split it up!! */
|
||||||
int sogetsockname(void *sp, struct sockaddr *sa, int *alen)
|
int socket_getsockname(struct socket *so, struct sockaddr *sa, int *alen)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct mbuf *m = m_getclr(MT_SONAME);
|
struct mbuf *m = m_getclr(MT_SONAME);
|
||||||
int len;
|
int len;
|
||||||
int error;
|
int error;
|
||||||
@@ -1490,9 +1473,8 @@ int sogetsockname(void *sp, struct sockaddr *sa, int *alen)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sogetpeername(void *sp, struct sockaddr *sa, int * alen)
|
int socket_getpeername(struct socket *so, struct sockaddr *sa, int * alen)
|
||||||
{
|
{
|
||||||
struct socket *so = (struct socket*)sp;
|
|
||||||
struct mbuf *m = m_getclr(MT_SONAME);
|
struct mbuf *m = m_getclr(MT_SONAME);
|
||||||
int len;
|
int len;
|
||||||
int error;
|
int error;
|
||||||
@@ -1513,7 +1495,7 @@ int sogetpeername(void *sp, struct sockaddr *sa, int * alen)
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int soaccept(struct socket *so, struct socket **nsp, void *data, int *alen)
|
int socket_accept(struct socket *so, struct socket **nso, void *data, int *alen)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int error;
|
int error;
|
||||||
@@ -1530,7 +1512,7 @@ int soaccept(struct socket *so, struct socket **nsp, void *data, int *alen)
|
|||||||
so->so_error = ECONNABORTED;
|
so->so_error = ECONNABORTED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((error = nsleep(so->so_timeo, "soaccept", 0)))
|
if ((error = nsleep(so->so_timeo, "socket_accept", 0)))
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
if (so->so_error) {
|
if (so->so_error) {
|
||||||
@@ -1542,7 +1524,7 @@ int soaccept(struct socket *so, struct socket **nsp, void *data, int *alen)
|
|||||||
{
|
{
|
||||||
struct socket *aso = so->so_q;
|
struct socket *aso = so->so_q;
|
||||||
if (soqremque(aso, 1) == 0) {
|
if (soqremque(aso, 1) == 0) {
|
||||||
printf("PANIC: soaccept!\n");
|
printf("PANIC: socket_accept!\n");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
so = aso;
|
so = aso;
|
||||||
@@ -1559,6 +1541,6 @@ int soaccept(struct socket *so, struct socket **nsp, void *data, int *alen)
|
|||||||
m_freem(nam);
|
m_freem(nam);
|
||||||
|
|
||||||
/* assign the socket to the cookie passed in! */
|
/* assign the socket to the cookie passed in! */
|
||||||
*nsp = so;
|
*nso = so;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user