netdev: freeing of netdescs

This commit is contained in:
Matheus
2024-06-03 21:55:52 -03:00
parent 4c0940828c
commit 7053ed68af
5 changed files with 50 additions and 20 deletions
+8 -1
View File
@@ -13,7 +13,8 @@ static void rx_dpc(context_t *context, dpcarg_t arg) {
}
// requested size doesn't account for ethernet header or the virtio header
static int loopback_allocdesc(size_t requestedsize, netdesc_t *desc) {
static int loopback_allocdesc(netdev_t *netdev, size_t requestedsize, netdesc_t *desc) {
__assert(requestedsize <= netdev->mtu);
desc->address = alloc(requestedsize + sizeof(ethframe_t));
if (desc->address == NULL)
return ENOMEM;
@@ -23,6 +24,11 @@ static int loopback_allocdesc(size_t requestedsize, netdesc_t *desc) {
return 0;
}
static int loopback_freedesc(netdev_t *netdev, netdesc_t *desc) {
free(desc->address);
return 0;
}
static int loopback_sendpacket(netdev_t *netdev, netdesc_t desc, mac_t targetmac, int proto) {
desc.curroffset = 0;
ethframe_t ethframe = {
@@ -49,6 +55,7 @@ void loopback_init() {
loopbacknetdev.mtu = 30000;
loopbacknetdev.sendpacket = loopback_sendpacket;
loopbacknetdev.allocdesc = loopback_allocdesc;
loopbacknetdev.freedesc = loopback_freedesc;
loopbacknetdev.ip = 0x7f000001;
__assert(hashtable_init(&loopbacknetdev.arpcache, 30) == 0);