diff options
author | Anton Kling <anton@kling.gg> | 2024-04-29 18:00:20 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-29 18:00:20 +0200 |
commit | 7d2ab3a71f4bda9d8ee997764d98b29e13a902c5 (patch) | |
tree | 6dcdc7a674a8047a2dba3e95d3be91b4e3161bd5 /kernel/cpu | |
parent | d60fa1fc01e600c4a163bbe82fab3f1986cb1476 (diff) |
Kernel/Socket: Move sockets back to being file descriptors
Diffstat (limited to 'kernel/cpu')
-rw-r--r-- | kernel/cpu/isr.s | 2 | ||||
-rw-r--r-- | kernel/cpu/syscall.c | 91 |
2 files changed, 54 insertions, 39 deletions
diff --git a/kernel/cpu/isr.s b/kernel/cpu/isr.s index 819b22b..9fca13c 100644 --- a/kernel/cpu/isr.s +++ b/kernel/cpu/isr.s @@ -32,7 +32,7 @@ ISR_NOERRCODE 9 ISR_NOERRCODE 10 ISR_NOERRCODE 11 ISR_NOERRCODE 12 -ISR_NOERRCODE 13 +ISR_ERRCODE 13 ISR_ERRCODE 14 ISR_NOERRCODE 15 ISR_NOERRCODE 16 diff --git a/kernel/cpu/syscall.c b/kernel/cpu/syscall.c index 3765a84..84faa16 100644 --- a/kernel/cpu/syscall.c +++ b/kernel/cpu/syscall.c @@ -140,49 +140,64 @@ int syscall_openpty(SYS_OPENPTY_PARAMS *args) { args->winp); } -u32 syscall_tcp_connect(u32 ip, u16 port, int *error) { - // TODO: Make sure error is a user address - return tcp_connect_ipv4(ip, port, error); -} - -int syscall_tcp_write(u32 socket, const u8 *buffer, u32 len, u64 *out) { - // TODO: Make sure out is a user address - return tcp_write(socket, buffer, len, out); -} - -int syscall_tcp_read(u32 socket, u8 *buffer, u32 buffer_size, u64 *out) { - // TODO: Make sure out is a user address - return tcp_read(socket, buffer, buffer_size, out); +int syscall_connect(int sockfd, const struct sockaddr *addr, + socklen_t addrlen) { + return connect(sockfd, addr, addrlen); } int (*syscall_functions[])() = { - (void(*))syscall_open, (void(*))syscall_mread, - (void(*))syscall_write, (void(*))syscall_pread, - (void(*))syscall_pwrite, (void(*))syscall_fork, - (void(*))syscall_exec, (void(*))syscall_getpid, - (void(*))syscall_exit, (void(*))syscall_wait, - (void(*))syscall_brk, (void(*))syscall_sbrk, - (void(*))syscall_pipe, (void(*))syscall_dup2, - (void(*))syscall_close, (void(*))syscall_openpty, - (void(*))syscall_poll, (void(*))syscall_mmap, - (void(*))syscall_accept, (void(*))syscall_bind, - (void(*))syscall_socket, (void(*))syscall_shm_open, - (void(*))syscall_ftruncate, (void(*))syscall_fstat, - (void(*))syscall_msleep, (void(*))syscall_uptime, - (void(*))syscall_mkdir, (void(*))syscall_recvfrom, - (void(*))syscall_sendto, (void(*))syscall_kill, - (void(*))syscall_sigaction, (void(*))syscall_chdir, - (void(*))syscall_getcwd, (void(*))syscall_isatty, - (void(*))syscall_randomfill, (void(*))syscall_outw, - (void(*))syscall_inl, (void(*))syscall_outl, - (void(*))syscall_map_frames, (void(*))syscall_virtual_to_physical, - (void(*))syscall_install_irq, (void(*))syscall_tmp_handle_packet, - (void(*))syscall_tcp_connect, (void(*))syscall_tcp_write, - (void(*))syscall_tcp_read, - (void(*))syscall_queue_create, (void(*))syscall_queue_add, - (void(*))syscall_queue_wait, (void(*))syscall_munmap, + (void(*))syscall_open, + (void(*))syscall_mread, + (void(*))syscall_write, + (void(*))syscall_pread, + (void(*))syscall_pwrite, + (void(*))syscall_fork, + (void(*))syscall_exec, + (void(*))syscall_getpid, + (void(*))syscall_exit, + (void(*))syscall_wait, + (void(*))syscall_brk, + (void(*))syscall_sbrk, + (void(*))syscall_pipe, + (void(*))syscall_dup2, + (void(*))syscall_close, + (void(*))syscall_openpty, + (void(*))syscall_poll, + (void(*))syscall_mmap, + (void(*))syscall_accept, + (void(*))syscall_bind, + (void(*))syscall_socket, + (void(*))syscall_shm_open, + (void(*))syscall_ftruncate, + (void(*))syscall_fstat, + (void(*))syscall_msleep, + (void(*))syscall_uptime, + (void(*))syscall_mkdir, + (void(*))syscall_recvfrom, + (void(*))syscall_sendto, + (void(*))syscall_kill, + (void(*))syscall_sigaction, + (void(*))syscall_chdir, + (void(*))syscall_getcwd, + (void(*))syscall_isatty, + (void(*))syscall_randomfill, + (void(*))syscall_outw, + (void(*))syscall_inl, + (void(*))syscall_outl, + (void(*))syscall_map_frames, + (void(*))syscall_virtual_to_physical, + (void(*))syscall_install_irq, + (void(*))syscall_tmp_handle_packet, + (void(*))NULL, + (void(*))NULL, + (void(*))NULL, + (void(*))NULL, + (void(*))NULL, + (void(*))NULL, + (void(*))syscall_munmap, (void(*))syscall_open_process, (void(*))syscall_lseek, + (void(*))syscall_connect, }; void int_syscall(reg_t *r); |