forked from OpenVPN/ovpn-dco-win
-
Notifications
You must be signed in to change notification settings - Fork 0
/
peer.h
130 lines (102 loc) · 3.25 KB
/
peer.h
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* ovpn-dco-win OpenVPN protocol accelerator for Windows
*
* Copyright (C) 2020-2021 OpenVPN Inc <[email protected]>
* Copyright (C) 2023 Rubicon Communications LLC (Netgate)
*
* Author: Lev Stipakov <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <ntddk.h>
#include "driver.h"
#include "uapi\ovpn-dco.h"
struct OvpnPeerContext
{
EX_SPIN_LOCK SpinLock;
OvpnCryptoContext CryptoContext;
INT32 PeerId;
// keepalive interval in seconds
LONG KeepaliveInterval;
// keepalive timeout in seconds
LONG KeepaliveTimeout;
// 1-sec timer which handles ping intervals and keepalive timeouts
WDFTIMER Timer;
UINT16 MSS;
struct {
IN_ADDR IPv4;
IN6_ADDR IPv6;
} VpnAddrs;
struct {
union {
IN_ADDR IPv4;
IN6_ADDR IPv6;
} Local;
union {
SOCKADDR_IN IPv4;
SOCKADDR_IN6 IPv6;
} Remote;
} TransportAddrs;
LONG RefCounter;
};
_Must_inspect_result_
OvpnPeerContext*
OvpnPeerCtxAlloc();
VOID
OvpnPeerCtxFree(_In_ OvpnPeerContext*);
VOID
OvpnPeerCtxRelease(_In_ OvpnPeerContext*);
RTL_GENERIC_ALLOCATE_ROUTINE OvpnPeerAllocateRoutine;
RTL_GENERIC_FREE_ROUTINE OvpnPeerFreeRoutine;
RTL_GENERIC_COMPARE_ROUTINE OvpnPeerCompareByPeerIdRoutine;
RTL_GENERIC_COMPARE_ROUTINE OvpnPeerCompareByVPN4Routine;
RTL_GENERIC_COMPARE_ROUTINE OvpnPeerCompareByVPN6Routine;
_Must_inspect_result_
_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
OvpnPeerNew(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
OvpnMPPeerNew(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
_Requires_exclusive_lock_held_(device->SpinLock)
NTSTATUS
OvpnPeerSet(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
_Requires_exclusive_lock_held_(device->SpinLock)
NTSTATUS
OvpnMPPeerSet(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
NTSTATUS
_Requires_shared_lock_held_(device->SpinLock)
OvpnPeerGetStats(_In_ POVPN_DEVICE device, WDFREQUEST request, _Out_ ULONG_PTR* bytesReturned);
_Must_inspect_result_
_IRQL_requires_(PASSIVE_LEVEL)
_IRQL_requires_same_
NTSTATUS
OvpnPeerStartVPN(_In_ POVPN_DEVICE device);
_Must_inspect_result_
_Requires_exclusive_lock_held_(device->SpinLock)
NTSTATUS
OvpnPeerNewKey(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
_Requires_exclusive_lock_held_(device->SpinLock)
NTSTATUS
OvpnPeerNewKeyV2(_In_ POVPN_DEVICE device, WDFREQUEST request);
_Must_inspect_result_
_Requires_exclusive_lock_held_(device->SpinLock)
NTSTATUS
OvpnPeerSwapKeys(_In_ POVPN_DEVICE device);