Files
my-os-project2/kernel/netdev/netdev.c
2025-10-29 14:29:06 +01:00

57 lines
1.2 KiB
C

#include <stdint.h>
#include <stddef.h>
#include "netdev.h"
#include "spinlock/spinlock.h"
#include "kprintf.h"
#include "dlmalloc/malloc.h"
#include "errors.h"
#include "util/util.h"
#include "hal/hal.h"
#include "pico_device.h"
#include "pico_dev_loop.h"
#include "pico_ipv4.h"
NetDevList NETDEV_LIST;
void netdev_init(void) {
spinlock_init(&NETDEV_LIST.spinlock);
NETDEV_LIST.head = NULL;
LOG("netdev", "init\n");
netdev_create(NETDEV_LOOPBACK, "127.0.0.1", "255.255.255.0");
}
NetDev *netdev_create(int32_t ndtype, const char *ipaddrstring, const char *netmaskstring) {
NetDev *nd = dlmalloc(sizeof(*nd));
if (nd == NULL) {
return NULL;
}
spinlock_acquire(&NETDEV_LIST.spinlock);
nd->_magic = NETDEV_MAGIC;
spinlock_init(&nd->spinlock);
switch (ndtype) {
case NETDEV_LOOPBACK: {
nd->picodev = pico_loop_create();
} break;
default:
dlfree(nd);
spinlock_release(&NETDEV_LIST.spinlock);
return NULL;
}
pico_string_to_ipv4(ipaddrstring, &nd->ipaddr4.addr);
pico_string_to_ipv4(netmaskstring, &nd->netmask4.addr);
pico_ipv4_link_add(nd->picodev, nd->ipaddr4, nd->netmask4);
LL_APPEND(NETDEV_LIST.head, nd);
spinlock_release(&NETDEV_LIST.spinlock);
return nd;
}
// TODO: delete