summaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-06-09 22:05:53 +0200
committerAnton Kling <anton@kling.gg>2024-06-09 22:05:53 +0200
commit15003d1b0abccc8bcef84386c4a6da176e41f883 (patch)
treed4f8c4f1602ee9e6c4332f3b0585d0e284d0f695 /kernel/fs
parentddd796325c9c703f007f046ed9f6fd9eb0ba6383 (diff)
Add UDP
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/ext2.c13
-rw-r--r--kernel/fs/shm.c2
-rw-r--r--kernel/fs/tmpfs.c4
-rw-r--r--kernel/fs/vfs.c5
-rw-r--r--kernel/fs/vfs.h6
5 files changed, 18 insertions, 12 deletions
diff --git a/kernel/fs/ext2.c b/kernel/fs/ext2.c
index 61c16eb..18ce8c7 100644
--- a/kernel/fs/ext2.c
+++ b/kernel/fs/ext2.c
@@ -612,12 +612,11 @@ vfs_inode_t *ext2_open(const char *path) {
break;
}
- return vfs_create_inode(inode_num, type, NULL, NULL,
- 1 /*is_open*/, NULL /*internal_object*/, file_size,
- ext2_open, ext2_create_file, ext2_read, ext2_write,
- ext2_close, ext2_create_directory,
- NULL /*get_vm_object*/, ext2_truncate /*truncate*/,
- ext2_stat, NULL /*send_signal*/);
+ return vfs_create_inode(
+ inode_num, type, NULL, NULL, 1 /*is_open*/, NULL /*internal_object*/,
+ file_size, ext2_open, ext2_create_file, ext2_read, ext2_write, ext2_close,
+ ext2_create_directory, NULL /*get_vm_object*/, ext2_truncate /*truncate*/,
+ ext2_stat, NULL /*send_signal*/, NULL /*connect*/);
}
u64 end_of_last_entry_position(int dir_inode, u64 *entry_offset,
@@ -829,7 +828,7 @@ vfs_inode_t *ext2_mount(void) {
0 /*is_open*/, NULL /*internal_object*/, 0 /*file_size*/, ext2_open,
ext2_create_file, ext2_read, ext2_write, ext2_close,
ext2_create_directory, NULL /*get_vm_object*/, ext2_truncate /*truncate*/,
- ext2_stat, NULL /*send_signal*/);
+ ext2_stat, NULL /*send_signal*/, NULL /*connect*/);
}
void parse_superblock(void) {
diff --git a/kernel/fs/shm.c b/kernel/fs/shm.c
index caf356c..ec7286f 100644
--- a/kernel/fs/shm.c
+++ b/kernel/fs/shm.c
@@ -90,7 +90,7 @@ int shm_open(const char *name, int oflag, mode_t mode) {
0 /*inode_num*/, 0 /*type*/, NULL, NULL, 1 /*is_open*/,
internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/,
shm_read, shm_write, NULL /*close*/, NULL /*create_directory*/,
- shm_get_vm_object, shm_ftruncate, NULL /*stat*/, NULL /*send_signal*/);
+ shm_get_vm_object, shm_ftruncate, NULL /*stat*/, NULL /*send_signal*/, NULL /*connect*/);
vfs_fd_t *fd_ptr;
int fd = vfs_create_fd(oflag, mode, 0 /*is_tty*/, inode, &fd_ptr);
diff --git a/kernel/fs/tmpfs.c b/kernel/fs/tmpfs.c
index eb6ae34..cd48b93 100644
--- a/kernel/fs/tmpfs.c
+++ b/kernel/fs/tmpfs.c
@@ -52,7 +52,7 @@ void dual_pipe(int fd[2]) {
internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/,
tmp_read, tmp_write, tmp_close, NULL /*create_directory*/,
NULL /*get_vm_object*/, NULL /*truncate*/, NULL /*stat*/,
- NULL /*send_signal*/);
+ NULL /*send_signal*/, NULL /*connect*/);
assert(inode);
fd[i] =
@@ -85,7 +85,7 @@ void pipe(int fd[2]) {
internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/,
tmp_read, tmp_write, tmp_close, NULL /*create_directory*/,
NULL /*get_vm_object*/, NULL /*truncate*/, NULL /*stat*/,
- NULL /*send_signal*/);
+ NULL /*send_signal*/, NULL /*connect*/);
assert(inode);
fd[i] = vfs_create_fd(O_RDWR, 0, 0 /*is_tty*/, inode, &fd_ptrs[i]);
diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c
index cd3f854..59149f5 100644
--- a/kernel/fs/vfs.c
+++ b/kernel/fs/vfs.c
@@ -36,7 +36,9 @@ vfs_inode_t *vfs_create_inode(
vfs_vm_object_t *(*get_vm_object)(u64 length, u64 offset, vfs_fd_t *fd),
int (*truncate)(vfs_fd_t *fd, size_t length),
int (*stat)(vfs_fd_t *fd, struct stat *buf),
- int (*send_signal)(vfs_fd_t *fd, int signal)) {
+ int (*send_signal)(vfs_fd_t *fd, int signal),
+ int (*connect)(vfs_fd_t *fd, const struct sockaddr *addr,
+ socklen_t addrlen)) {
vfs_inode_t *r = kmalloc(sizeof(inode_t));
r->inode_num = inode_num;
r->type = type;
@@ -56,6 +58,7 @@ vfs_inode_t *vfs_create_inode(
r->stat = stat;
r->send_signal = send_signal;
r->ref = 0;
+ r->connect = connect;
return r;
}
diff --git a/kernel/fs/vfs.h b/kernel/fs/vfs.h
index 83f1375..bce3925 100644
--- a/kernel/fs/vfs.h
+++ b/kernel/fs/vfs.h
@@ -9,6 +9,7 @@ typedef struct vfs_mounts vfs_mounts_t;
#include <sched/scheduler.h>
#include <socket.h>
#include <stddef.h>
+#include <sys/socket.h>
#include <sys/stat.h>
#include <typedefs.h>
@@ -70,6 +71,7 @@ struct vfs_inode {
int (*truncate)(vfs_fd_t *fd, size_t length);
int (*stat)(vfs_fd_t *fd, struct stat *buf);
int (*send_signal)(vfs_fd_t *fd, int signal);
+ int (*connect)(vfs_fd_t *fd, const struct sockaddr *addr, socklen_t addrlen);
};
int vfs_close(int fd);
@@ -103,5 +105,7 @@ vfs_inode_t *vfs_create_inode(
vfs_vm_object_t *(*get_vm_object)(u64 length, u64 offset, vfs_fd_t *fd),
int (*truncate)(vfs_fd_t *fd, size_t length),
int (*stat)(vfs_fd_t *fd, struct stat *buf),
- int (*send_signal)(vfs_fd_t *fd, int signal));
+ int (*send_signal)(vfs_fd_t *fd, int signal),
+ int (*connect)(vfs_fd_t *fd, const struct sockaddr *addr,
+ socklen_t addrlen));
#endif