summaryrefslogtreecommitdiff
path: root/kernel/cpu
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-29 18:00:20 +0200
committerAnton Kling <anton@kling.gg>2024-04-29 18:00:20 +0200
commit7d2ab3a71f4bda9d8ee997764d98b29e13a902c5 (patch)
tree6dcdc7a674a8047a2dba3e95d3be91b4e3161bd5 /kernel/cpu
parentd60fa1fc01e600c4a163bbe82fab3f1986cb1476 (diff)
Kernel/Socket: Move sockets back to being file descriptors
Diffstat (limited to 'kernel/cpu')
-rw-r--r--kernel/cpu/isr.s2
-rw-r--r--kernel/cpu/syscall.c91
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);