60 lines
2.1 KiB
C
60 lines
2.1 KiB
C
// Public NTLite net device ABI declarations shared between kernel, drivers, and user mode.
|
|
|
|
#pragma once
|
|
// net_device.h - kernel network-device registry.
|
|
|
|
// NIC drivers register NET_DEVICE objects here and feed complete Ethernet
|
|
// frames into NetReceiveFrame(). Protocol ownership belongs to whichever
|
|
// network stack driver registered through net_stack.h.
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <ntlite/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);
|