From: Matthias Kruk Date: Wed, 2 Oct 2019 07:16:35 +0000 (+0900) Subject: Add sys_cxnet() handler for network-related syscalls and handler stubs for a number... X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=9a8f8713dfb6859000b84ca9b33a92bc94dc936e;p=corax Add sys_cxnet() handler for network-related syscalls and handler stubs for a number of sub-syscalls: - sys_socket() - sys_close() - sys_sendto() - sys_recvfrom() - sys_connect() - sys_listen() - sys_accept() - sys_setsockopt() - sys_getsockopt() - sys_shutdown() - sys_select() - sys_poll() --- diff --git a/kernel/core/Makefile b/kernel/core/Makefile index 47a3eea..8ca96b0 100644 --- a/kernel/core/Makefile +++ b/kernel/core/Makefile @@ -1,7 +1,8 @@ -OBJECTS = main.o process.o sched.o +OBJECTS = main.o process.o sched.o cxnet.o OUTPUT = core.o INCLUDES = -I../include -I../../include -I../.. CFLAGS += $(INCLUDES) +ASFLAGS = $(CFLAGS) PHONY = clean all: $(OUTPUT) diff --git a/kernel/core/cxnet.c b/kernel/core/cxnet.c new file mode 100644 index 0000000..b2bcd74 --- /dev/null +++ b/kernel/core/cxnet.c @@ -0,0 +1,217 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int sys_socket(int domain, int type, int protocol) +{ + return(-ENOSYS); +} + +int sys_close(int sockfd) +{ + return(-ENOSYS); +} + +int sys_sendto(int sockfd, const void *buf, size_t len, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen) +{ + return(-ENOSYS); +} + +int sys_recvfrom(int sockfd, void *buf, size_t len, int flags, + struct sockaddr *src_addr, socklen_t *addrlen) +{ + return(-ENOSYS); +} + +int sys_connect(int sockfd, const struct sockaddr *addr, + socklen_t addrlen) +{ + return(-ENOSYS); +} + +int sys_listen(int sockfd, int backlog) +{ + return(-ENOSYS); +} + +int sys_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) +{ + return(-ENOSYS); +} + +int sys_setsockopt(int sockfd, int level, int optname, + const void *optval, socklen_t optlen) +{ + return(-ENOSYS); +} + +int sys_getsockopt(int sockfd, int level, int optname, + void *optval, socklen_t *optlen) +{ + return(-ENOSYS); +} + +int sys_shutdown(int sockfd, int how) +{ + return(-ENOSYS); +} + +int sys_select(int nfds, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, struct timeval *timeout) +{ + return(-ENOSYS); +} + +int sys_poll(struct pollfd *fds, nfds_t nfds, int timeout) +{ + return(-ENOSYS); +} + +int sys_cxnet(long arg0, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6) +{ + int ret_val; + + ret_val = -EFAULT; + + switch(arg0) { + case SYS_SOCKET: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_socket(0x%08x, 0x%08x, 0x%08x)\n", + arg1, arg2, arg3); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_socket((int)arg1, (int)arg2, (int)arg3); + + break; + + case SYS_CLOSE: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_close(0x%08x)\n", + arg1); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_close((int)arg1); + + break; + + case SYS_SENDTO: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_sendto(0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x)\n", + arg1, arg2, arg3, arg4, arg5, arg6); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_sendto((int)arg1, (const void*)arg2, (size_t)arg3, (int)arg4, + (const struct sockaddr*)arg5, (socklen_t)arg6); + + break; + + case SYS_RECVFROM: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_recvfrom(0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x)\n", + arg1, arg2, arg3, arg4, arg5, arg6); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_recvfrom((int)arg1, (void*)arg2, (size_t)arg3, (int)arg4, + (struct sockaddr*)arg5, (socklen_t*)arg6); + + break; + + case SYS_CONNECT: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_connect(0x%08x, %p, 0x%08x)\n", + arg1, arg2, arg3); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_connect((int)arg1, (const struct sockaddr*)arg2, + (socklen_t)arg3); + + break; + + case SYS_LISTEN: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_listen(0x%08x, 0x%08x)\n", + arg1, arg2); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_listen((int)arg1, (int)arg2); + + break; + + case SYS_ACCEPT: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_accept(0x%08x, %p, %p)\n", + arg1, arg2, arg3); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_accept((int)arg1, (struct sockaddr*)arg2, + (socklen_t*)arg3); + + break; + + case SYS_SETSOCKOPT: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_setsockopt(0x%08x, 0x%08x, 0x%08x, %p, 0x%08x)\n", + arg1, arg2, arg3, arg4, arg5); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_setsockopt((int)arg1, (int)arg2, (int)arg3, + (const void*)arg4, (socklen_t)arg5); + + break; + + case SYS_GETSOCKOPT: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_getsockopt(0x%08x, 0x%08x, 0x%08x, %p, %p)\n", + arg1, arg2, arg3, arg4, arg5); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_getsockopt((int)arg1, (int)arg2, (int)arg3, + (void*)arg4, (socklen_t*)arg5); + + break; + + case SYS_SHUTDOWN: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_shutdown(0x%08x, 0x%08x)\n", + arg1, arg2); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_shutdown((int)arg1, (int)arg2); + + break; + + case SYS_SELECT: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_select(0x%08x, %p, %p, %p, %p)\n", + arg1, arg2, arg3, arg4, arg5); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_select((int)arg1, (fd_set*)arg2, (fd_set*)arg3, + (fd_set*)arg4, (struct timeval*)arg5); + + break; + + case SYS_POLL: +#if FEATURE(DEBUG_NET) + dbg_printf("sys_poll(%p, 0x%08x, 0x%08x)\n", + arg1, arg2, arg3); +#endif /* FEATURE(DEBUG_NET) */ + + ret_val = sys_poll((struct pollfd*)arg1, (nfds_t)arg2, (int)arg3); + + break; + + default: + ret_val = -ENOSYS; + } + + return(ret_val); +}