diff options
author | Anton Kling <anton@kling.gg> | 2024-07-08 21:37:15 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-07-08 21:37:15 +0200 |
commit | e49d2a9fa5a485c33a250ce843d44fc6dedea8b5 (patch) | |
tree | 4be00773adca0b6c59da6d07602338ff538a7199 /kernel/network/ethernet.c | |
parent | 35292a486c2b44862cac6887441d6fa18148b249 (diff) |
Kernel/Net: Don't use kmalloc to create send buffers
Current method is also really bad since it uses multiple copies when it
should instead just copy to the send buffer of the network card
directly. But I have other things that I want to prioritize first.
Diffstat (limited to 'kernel/network/ethernet.c')
-rw-r--r-- | kernel/network/ethernet.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/network/ethernet.c b/kernel/network/ethernet.c index 7b1de7f..dbd1b6d 100644 --- a/kernel/network/ethernet.c +++ b/kernel/network/ethernet.c @@ -68,14 +68,14 @@ void handle_ethernet(const u8 *packet, u64 packet_length) { } } +u8 ethernet_buffer[0x1000]; void send_ethernet_packet(u8 mac_dst[6], u16 type, u8 *payload, u64 payload_length) { - // FIXME: Janky allocation, do this better u64 buffer_size = sizeof(struct EthernetHeader) + payload_length + sizeof(u32); - u8 *buffer = kmalloc(buffer_size); - memset(buffer, 0, buffer_size); - u8 *buffer_start = buffer; + assert(buffer_size < 0x1000); + memset(ethernet_buffer, 0, buffer_size); + u8 *buffer = ethernet_buffer; struct EthernetHeader *eth_header = (struct EthernetHeader *)buffer; buffer += sizeof(struct EthernetHeader); memcpy(buffer, payload, payload_length); @@ -84,8 +84,8 @@ void send_ethernet_packet(u8 mac_dst[6], u16 type, u8 *payload, memcpy(eth_header->mac_dst, mac_dst, sizeof(u8[6])); get_mac_address(eth_header->mac_src); eth_header->type = htons(type); - *(u32 *)(buffer) = htonl(crc32((const char *)buffer_start, buffer_size - 4)); + *(u32 *)(buffer) = + htonl(crc32((const char *)ethernet_buffer, buffer_size - 4)); - rtl8139_send_data(buffer_start, buffer_size); - kfree(buffer_start); + rtl8139_send_data(ethernet_buffer, buffer_size); } |