aboutsummaryrefslogtreecommitdiffstats
path: root/driver/socket.h
blob: 223c3ec4e4cb8a3cba24fb6feb2f1b215b5370d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright (C) 2015-2021 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
 */

#pragma once

#include <wsk.h>

typedef struct _SOCKET
{
    WSK_SOCKET *Sock;
    WG_DEVICE *Device;
    EX_RUNDOWN_REF ItemsInFlight;
} SOCKET;

_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
SocketSendNblsToPeer(_Inout_ WG_PEER *Peer, _In_ __drv_aliasesMem NET_BUFFER_LIST *First, _Out_ BOOLEAN *AllKeepalive);

_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
SocketSendBufferToPeer(_Inout_ WG_PEER *Peer, _In_reads_bytes_(Len) CONST VOID *Data, _In_ ULONG Len);

_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
SocketSendBufferAsReplyToNbl(
    _Inout_ WG_DEVICE *Wg,
    _In_ CONST NET_BUFFER_LIST *InNbl,
    _In_reads_bytes_(Len) CONST VOID *Buffer,
    _In_ ULONG Len);

NTSTATUS
SocketEndpointFromNbl(_Out_ ENDPOINT *Endpoint, _In_ CONST NET_BUFFER_LIST *Nbl);

_Requires_lock_not_held_(Peer->EndpointLock)
VOID
SocketSetPeerEndpoint(_Inout_ WG_PEER *Peer, _In_ CONST ENDPOINT *Endpoint);

_Requires_lock_not_held_(Peer->EndpointLock)
VOID
SocketSetPeerEndpointFromNbl(_Inout_ WG_PEER *Peer, _In_ CONST NET_BUFFER_LIST *Nbl);

_Requires_lock_not_held_(Peer->EndpointLock)
VOID
SocketClearPeerEndpointSrc(_Inout_ WG_PEER *Peer);

_IRQL_requires_max_(APC_LEVEL)
_Requires_lock_not_held_(Wg->SocketUpdateLock)
NTSTATUS
SocketInit(_Inout_ WG_DEVICE *Wg, _In_ UINT16 Port);

_IRQL_requires_max_(APC_LEVEL)
_Requires_lock_not_held_(Wg->SocketUpdateLock)
VOID
SocketReinit(
    _Inout_ WG_DEVICE *Wg,
    _In_opt_ __drv_aliasesMem SOCKET *New4,
    _In_opt_ __drv_aliasesMem SOCKET *New6,
    _In_ UINT16 Port);

_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
WskInit(VOID);

_IRQL_requires_max_(PASSIVE_LEVEL)
VOID WskUnload(VOID);