Files
nt-lite/code/kernel/net_device.h
T

58 lines
2.0 KiB
C

#pragma once
// net_device.h - tiny kernel network-device registry.
//
// This layer is intentionally below the future socket/IP stack. NIC drivers
// register a NET_DEVICE and feed complete Ethernet frames into NetReceiveFrame().
// Protocol code can later subscribe above this layer or bind a real stack.
#include <stdint.h>
#include <stddef.h>
#include <ke_status.h>
#define NET_DEVICE_NAME_MAX 16u
#define NET_HWADDR_MAX 16u
#define NET_MTU_ETHERNET 1500u
#define NET_ETHERNET_ADDRESS_LENGTH 6u
#define NET_ETHERNET_HEADER_LENGTH 14u
#define NET_ETHERNET_MIN_FRAME 60u
#define NET_ETHERNET_MAX_FRAME (NET_ETHERNET_HEADER_LENGTH + NET_MTU_ETHERNET)
struct NET_DEVICE;
typedef struct NET_DEVICE NET_DEVICE;
typedef KSTATUS (*NET_SEND_FRAME)(NET_DEVICE* device,
const void* frame,
size_t length);
typedef struct NET_DEVICE_STATS {
uint64_t TxPackets;
uint64_t TxBytes;
uint64_t TxErrors;
uint64_t RxPackets;
uint64_t RxBytes;
uint64_t RxDrops;
} NET_DEVICE_STATS;
struct NET_DEVICE {
char Name[NET_DEVICE_NAME_MAX];
uint32_t Index;
uint32_t Mtu;
uint8_t HardwareAddressLength;
uint8_t HardwareAddress[NET_HWADDR_MAX];
void* DriverContext;
NET_SEND_FRAME SendFrame;
NET_DEVICE_STATS Stats;
};
__declspec(dllexport) KSTATUS NetRegisterDevice(NET_DEVICE* device);
__declspec(dllexport) uint32_t NetGetDeviceCount(void);
__declspec(dllexport) NET_DEVICE* NetGetDevice(uint32_t index);
__declspec(dllexport) KSTATUS NetGetDeviceStats(uint32_t index,
NET_DEVICE_STATS* stats);
__declspec(dllexport) KSTATUS NetSendFrame(uint32_t index,
const void* frame,
size_t length);
__declspec(dllexport) void NetReceiveFrame(NET_DEVICE* device,
const void* frame,
size_t length);