42 lines
2.2 KiB
C
42 lines
2.2 KiB
C
// Kernel net socket declarations shared by implementation files and kernel clients.
|
|
|
|
#pragma once
|
|
// net_socket.h - process-owned, provider-neutral kernel socket objects.
|
|
|
|
// The native networking ABI lives in net_abi.h. Protocol implementation lives
|
|
// in a network stack driver registered through net_stack.h.
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <ntlite/status.h>
|
|
#include <kernel/ob_object.h>
|
|
#include <ntlite/ddi/net_abi.h>
|
|
|
|
struct NET_STACK_PROVIDER;
|
|
|
|
typedef struct SOCKET_OBJECT {
|
|
OBJECT Header; // must be first
|
|
|
|
const struct NET_STACK_PROVIDER* Provider;
|
|
void* ProviderSocket;
|
|
|
|
uint32_t Domain;
|
|
uint32_t Type;
|
|
uint32_t Protocol;
|
|
} SOCKET_OBJECT;
|
|
|
|
KSTATUS NetSocketCreate(uint32_t domain, uint32_t type, uint32_t protocol, SOCKET_OBJECT** out);
|
|
KSTATUS NetSocketBind(SOCKET_OBJECT* socket, const SYS_SOCKET_ADDRESS_IPV4_K* address, size_t addressSize);
|
|
KSTATUS NetSocketListen(SOCKET_OBJECT* socket, uint32_t backlog);
|
|
KSTATUS NetSocketAccept(SOCKET_OBJECT* socket, SOCKET_OBJECT** acceptedOut, SYS_SOCKET_ADDRESS_IPV4_K* remoteOut);
|
|
KSTATUS NetSocketConnect(SOCKET_OBJECT* socket, const SYS_SOCKET_ADDRESS_IPV4_K* address, size_t addressSize);
|
|
KSTATUS NetSocketSend(SOCKET_OBJECT* socket, const void* buffer, size_t length, uint32_t flags, size_t* sentOut);
|
|
KSTATUS NetSocketReceive(SOCKET_OBJECT* socket, void* buffer, size_t length, uint32_t flags, size_t* receivedOut);
|
|
KSTATUS NetSocketSendTo(SOCKET_OBJECT* socket, const void* buffer, size_t length, uint32_t flags, const SYS_SOCKET_ADDRESS_IPV4_K* remote, size_t remoteSize, size_t* sentOut);
|
|
KSTATUS NetSocketReceiveFrom(SOCKET_OBJECT* socket, void* buffer, size_t length, uint32_t flags, SYS_SOCKET_ADDRESS_IPV4_K* remoteOut, size_t* receivedOut);
|
|
KSTATUS NetSocketShutdown(SOCKET_OBJECT* socket, uint32_t how);
|
|
KSTATUS NetSocketSetOption(SOCKET_OBJECT* socket, uint32_t option, const void* value, size_t valueSize);
|
|
KSTATUS NetSocketGetOption(SOCKET_OBJECT* socket, uint32_t option, void* value, size_t valueSize, size_t* actualSizeOut);
|
|
KSTATUS NetSocketPoll(SOCKET_OBJECT* socket, uint32_t events, uint32_t* returnedEventsOut);
|
|
KSTATUS NetResolveHostIpv4(const char* name, SYS_SOCKET_ADDRESS_IPV4_K* addressOut);
|