summaryrefslogtreecommitdiff
path: root/kernel/network/udp.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-28 21:47:49 +0100
committerAnton Kling <anton@kling.gg>2024-02-28 21:47:49 +0100
commite6c8f7298b40757a410d9df6319824c4f0d70351 (patch)
treeb90ee0eba9a45c7551d9f23b6e66620ff0ea5b66 /kernel/network/udp.c
parent4536dc81b4be9a62328826455664cd6d696df8fb (diff)
TCP/UDP: Start rewrite of network sockets
Having sockets be file descriptors seems like a bad idea so I trying to make UDP and TCP sockets be more independent and not be abstracted away as much.
Diffstat (limited to 'kernel/network/udp.c')
-rw-r--r--kernel/network/udp.c42
1 files changed, 2 insertions, 40 deletions
diff --git a/kernel/network/udp.c b/kernel/network/udp.c
index 5aae050..4f3848a 100644
--- a/kernel/network/udp.c
+++ b/kernel/network/udp.c
@@ -20,44 +20,6 @@ void send_udp_packet(struct sockaddr_in *src, const struct sockaddr_in *dst,
}
void handle_udp(u8 src_ip[4], const u8 *payload, u32 packet_length) {
- assert(packet_length >= 8);
- // n_.* means network format(big endian)
- // h_.* means host format((probably) little endian)
- u16 n_source_port = *(u16 *)payload;
- u16 h_source_port = ntohs(n_source_port);
- (void)h_source_port;
- u16 h_dst_port = ntohs(*(u16 *)(payload + 2));
- u16 h_length = ntohs(*(u16 *)(payload + 4));
- assert(h_length == packet_length);
- u16 data_length = h_length - 8;
- const u8 *data = payload + 8;
-
- // Find the open port
- OPEN_INET_SOCKET *in_s = find_open_udp_port(htons(h_dst_port));
- assert(in_s);
- SOCKET *s = in_s->s;
- vfs_fd_t *fifo_file = s->ptr_socket_fd;
-
- // Write the sockaddr struct such that it can later be
- // given to userland if asked.
- struct sockaddr_in /*{
- sa_family_t sin_family;
- union {
- u32 s_addr;
- } sin_addr;
- u16 sin_port;
- }*/ in;
- in.sin_family = AF_INET;
- memcpy(&in.sin_addr.s_addr, src_ip, sizeof(u32));
- in.sin_port = n_source_port;
- socklen_t sock_length = sizeof(struct sockaddr_in);
-
- raw_vfs_pwrite(fifo_file, &sock_length, sizeof(sock_length), 0);
- raw_vfs_pwrite(fifo_file, &in, sizeof(in), 0);
-
- // Write the UDP payload length(not including header)
- raw_vfs_pwrite(fifo_file, &data_length, sizeof(u16), 0);
-
- // Write the UDP payload
- raw_vfs_pwrite(fifo_file, (char *)data, data_length, 0);
+ // TODO: Reimplement
+ assert(NULL);
}