51 lines
2.4 KiB
C
51 lines
2.4 KiB
C
// Public NTLite net stack ABI declarations shared between kernel, drivers, and user mode.
|
|
|
|
#pragma once
|
|
// net_stack.h - provider interface between kernel socket facade and network stack drivers.
|
|
|
|
// The kernel owns process handles, user-memory copying, NET_DEVICE registration,
|
|
// and SOCKET_OBJECT lifetime. A stack driver owns protocol implementation.
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <ntlite/status.h>
|
|
#include <ntlite/ddi/net_device.h>
|
|
#include <ntlite/ddi/net_abi.h>
|
|
|
|
#define NET_STACK_PROVIDER_VERSION 1u
|
|
|
|
typedef struct NET_STACK_PROVIDER NET_STACK_PROVIDER;
|
|
|
|
struct NET_STACK_PROVIDER {
|
|
uint32_t Version;
|
|
const char* Name;
|
|
|
|
KSTATUS (*AttachDevice)(NET_DEVICE* device);
|
|
KSTATUS (*ReceiveFrame)(NET_DEVICE* device, const void* frame, size_t length);
|
|
|
|
KSTATUS (*SocketCreate)(uint32_t domain, uint32_t type, uint32_t protocol, void** outSocket);
|
|
void (*SocketClose)(void* socket);
|
|
|
|
KSTATUS (*Bind)(void* socket, const SYS_SOCKET_ADDRESS_K* address, size_t addressSize);
|
|
KSTATUS (*Listen)(void* socket, uint32_t backlog);
|
|
KSTATUS (*Accept)(void* socket, void** acceptedOut, SYS_SOCKET_ADDRESS_K* remoteOut);
|
|
KSTATUS (*Connect)(void* socket, const SYS_SOCKET_ADDRESS_K* address, size_t addressSize);
|
|
|
|
KSTATUS (*Send)(void* socket, const void* buffer, size_t length, uint32_t flags, size_t* sentOut);
|
|
KSTATUS (*Receive)(void* socket, void* buffer, size_t length, uint32_t flags, size_t* receivedOut);
|
|
KSTATUS (*SendTo)(void* socket, const void* buffer, size_t length, uint32_t flags,
|
|
const SYS_SOCKET_ADDRESS_K* remote, size_t remoteSize, size_t* sentOut);
|
|
KSTATUS (*ReceiveFrom)(void* socket, void* buffer, size_t length, uint32_t flags,
|
|
SYS_SOCKET_ADDRESS_K* remoteOut, size_t* receivedOut);
|
|
|
|
KSTATUS (*Shutdown)(void* socket, uint32_t how);
|
|
KSTATUS (*SetOption)(void* socket, uint32_t option, const void* value, size_t valueSize);
|
|
KSTATUS (*GetOption)(void* socket, uint32_t option, void* value, size_t valueSize, size_t* actualSizeOut);
|
|
KSTATUS (*Poll)(void* socket, uint32_t events, uint32_t* returnedEventsOut);
|
|
|
|
KSTATUS (*ResolveHost)(const char* name, uint32_t family, SYS_SOCKET_ADDRESS_K* addressOut);
|
|
};
|
|
|
|
__declspec(dllexport) KSTATUS NetRegisterStackProvider(const NET_STACK_PROVIDER* provider);
|
|
__declspec(dllexport) const NET_STACK_PROVIDER* NetGetStackProvider(void);
|