From e3dd7964b4cd923973bc22d01263ca50a5822ed1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 29 Mar 2024 13:41:08 -0300 Subject: [PATCH] udp: initial tx only implementation --- kernel-src/io/net/udp.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 kernel-src/io/net/udp.c diff --git a/kernel-src/io/net/udp.c b/kernel-src/io/net/udp.c new file mode 100644 index 00000000..288a928e --- /dev/null +++ b/kernel-src/io/net/udp.c @@ -0,0 +1,23 @@ +#include +#include +#include + +int udp_allocdesc(netdev_t *netdev, size_t requestedsize, netdesc_t *desc) { + int e = netdev->allocdesc(requestedsize + sizeof(udpframe_t), desc); + desc->curroffset += sizeof(udpframe_t); + return e; +} + +int udp_sendpacket(netdev_t *netdev, netdesc_t desc, uint32_t ip, uint16_t srcport, uint16_t dstport) { + size_t len = desc.size - desc.curroffset; + desc.curroffset -= sizeof(udpframe_t); + udpframe_t frame = { + .srcport = cpu_to_be_w(srcport), + .dstport = cpu_to_be_w(dstport), + .length = cpu_to_be_w(len), + .checksum = 0xfefe + }; + memcpy((void *)((uintptr_t)desc.address + desc.curroffset), &frame, sizeof(udpframe_t)); + + return ipv4_sendpacket(netdev, desc, ip, IPV4_PROTO_UDP); +}