]> git.corax.cc Git - corax/commitdiff
Add sys_cxnet() handler for network-related syscalls and handler stubs for a number...
authorMatthias Kruk <m@m10k.eu>
Wed, 2 Oct 2019 07:16:35 +0000 (16:16 +0900)
committerMatthias Kruk <m@m10k.eu>
Wed, 2 Oct 2019 07:16:35 +0000 (16:16 +0900)
 - sys_socket()
 - sys_close()
 - sys_sendto()
 - sys_recvfrom()
 - sys_connect()
 - sys_listen()
 - sys_accept()
 - sys_setsockopt()
 - sys_getsockopt()
 - sys_shutdown()
 - sys_select()
 - sys_poll()

kernel/core/Makefile
kernel/core/cxnet.c [new file with mode: 0644]

index 47a3eea3bb95f71b865268611f29487dd77cb94f..8ca96b0dd83771d9d05b8201818c0a96459ac9aa 100644 (file)
@@ -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 (file)
index 0000000..b2bcd74
--- /dev/null
@@ -0,0 +1,217 @@
+#include <config.h>
+#include <corax/types.h>
+#include <corax/errno.h>
+#include <corax/syscall.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <poll.h>
+#include <debug.h>
+
+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);
+}