summaryrefslogtreecommitdiff
path: root/kernel/network/ethernet.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-11-22 21:58:30 +0100
committerAnton Kling <anton@kling.gg>2023-11-22 21:58:30 +0100
commitec91e81a4fcfd7ee6bc4150f06d8740e82f808da (patch)
tree6cad6ef6dc775d56758bc4da4a2bddd13cdec35f /kernel/network/ethernet.c
parent90e4da9473ee2fc6419b7821274ec102219551f9 (diff)
Networking: Split network packets if they are too large
Diffstat (limited to 'kernel/network/ethernet.c')
-rw-r--r--kernel/network/ethernet.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/network/ethernet.c b/kernel/network/ethernet.c
index 6255ecb..940802f 100644
--- a/kernel/network/ethernet.c
+++ b/kernel/network/ethernet.c
@@ -67,6 +67,7 @@ void handle_ethernet(const u8 *packet, u64 packet_length) {
void send_ethernet_packet(u8 mac_dst[6], u16 type, u8 *payload,
u64 payload_length) {
+ assert(payload_length <= 1500);
// FIXME: Janky allocation, do this better
u64 buffer_size =
sizeof(struct ETHERNET_HEADER) + payload_length + sizeof(u32);
@@ -82,6 +83,6 @@ void send_ethernet_packet(u8 mac_dst[6], u16 type, u8 *payload,
eth_header->type = htons(type);
*(u32 *)(buffer) = htonl(crc32((const char *)buffer_start, buffer_size - 4));
- assert(rtl8139_send_data(buffer_start, buffer_size));
+ rtl8139_send_data(buffer_start, buffer_size);
kfree(buffer_start);
}