58 lines
2.0 KiB
C
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);
|