OpenVPN
ovpn_dco_win.h
Go to the documentation of this file.
1/*
2 * ovpn-dco-win OpenVPN protocol accelerator for Windows
3 *
4 * Copyright (C) 2020-2025 OpenVPN Inc <sales@openvpn.net>
5 *
6 * Author: Lev Stipakov <lev@openvpn.net>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, see <https://www.gnu.org/licenses/>.
19 *
20 * This particular file (uapi.h) is also licensed using the MIT license (see COPYRIGHT.MIT).
21 */
22
23#pragma once
24#ifndef _KERNEL_MODE
25#include <winsock2.h>
26#endif
27#include <ws2def.h>
28#include <ws2ipdef.h>
29
34
35typedef struct _OVPN_NEW_PEER {
36 union {
37 SOCKADDR_IN Addr4;
38 SOCKADDR_IN6 Addr6;
40
41 union {
42 SOCKADDR_IN Addr4;
43 SOCKADDR_IN6 Addr6;
45
48
49typedef struct _OVPN_MP_NEW_PEER {
50 union {
51 SOCKADDR_IN Addr4;
52 SOCKADDR_IN6 Addr6;
54
55 union {
56 SOCKADDR_IN Addr4;
57 SOCKADDR_IN6 Addr6;
59
60 IN_ADDR VpnAddr4;
61 IN6_ADDR VpnAddr6;
62
63 int PeerId;
65
85
93
98
104
106{
107 unsigned char Key[32];
108 unsigned char KeyLen; // 16/24/32 -> AES-128-GCM/AES-192-GCM/AES-256-GCM
109 unsigned char NonceTail[8];
111
120
121#define CRYPTO_OPTIONS_EPOCH (1<<1)
122
127
134
140
146
151
155
156typedef struct _OVPN_MP_START_VPN {
157 union {
158 SOCKADDR_IN Addr4;
159 SOCKADDR_IN6 Addr6;
163
169
177
184
188
192
193typedef struct _OVPN_MP_IROUTE {
194 union {
195 IN_ADDR Addr4;
196 IN6_ADDR Addr6;
200 int IPv6;
202
203typedef struct _OVPN_GET_PEER_STATS {
204 int PeerId; // -1 for all peers stats
206
207#define OVPN_IOCTL_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
208#define OVPN_IOCTL_GET_STATS CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
209#define OVPN_IOCTL_NEW_KEY CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
210#define OVPN_IOCTL_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
211#define OVPN_IOCTL_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
212#define OVPN_IOCTL_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
213#define OVPN_IOCTL_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
214#define OVPN_IOCTL_GET_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
215#define OVPN_IOCTL_NEW_KEY_V2 CTL_CODE(FILE_DEVICE_UNKNOWN, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
216#define OVPN_IOCTL_SET_MODE CTL_CODE(FILE_DEVICE_UNKNOWN, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
217
218#define OVPN_IOCTL_MP_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
219#define OVPN_IOCTL_MP_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
220#define OVPN_IOCTL_MP_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
221
222#define OVPN_IOCTL_NOTIFY_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
223
224#define OVPN_IOCTL_MP_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
225#define OVPN_IOCTL_MP_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
226
227#define OVPN_IOCTL_MP_ADD_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
228#define OVPN_IOCTL_MP_DEL_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
229
230#define OVPN_IOCTL_GET_PEER_STATS CTL_CODE(FILE_DEVICE_UNKNOWN, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
struct _OVPN_STATS * POVPN_STATS
struct _OVPN_MP_IROUTE * POVPN_MP_IROUTE
struct _OVPN_GET_PEER_STATS OVPN_GET_PEER_STATS
struct _OVPN_KEY_DIRECTION OVPN_KEY_DIRECTION
struct _OVPN_MP_IROUTE OVPN_MP_IROUTE
struct _OVPN_SET_PEER * POVPN_SET_PEER
enum _OVPN_KEY_SLOT OVPN_KEY_SLOT
OVPN_PROTO
@ OVPN_PROTO_UDP
@ OVPN_PROTO_TCP
struct _OVPN_MP_DEL_PEER * POVPN_MP_DEL_PEER
_OVPN_CIPHER_ALG
@ OVPN_CIPHER_ALG_CHACHA20_POLY1305
@ OVPN_CIPHER_ALG_AES_GCM
@ OVPN_CIPHER_ALG_NONE
struct _OVPN_MP_DEL_PEER OVPN_MP_DEL_PEER
struct _OVPN_MP_NEW_PEER OVPN_MP_NEW_PEER
struct _OVPN_MP_SET_PEER * POVPN_MP_SET_PEER
_OVPN_KEY_SLOT
@ OVPN_KEY_SLOT_SECONDARY
@ OVPN_KEY_SLOT_PRIMARY
struct _OVPN_STATS OVPN_STATS
struct _OVPN_CRYPTO_DATA_V2 * POVPN_CRYPTO_DATA_V2
OVPN_MODE
@ OVPN_MODE_MP
@ OVPN_MODE_P2P
struct _OVPN_MP_START_VPN OVPN_MP_START_VPN
enum _OVPN_CIPHER_ALG OVPN_CIPHER_ALG
struct _OVPN_NEW_PEER OVPN_NEW_PEER
struct _OVPN_CRYPTO_DATA_V2 OVPN_CRYPTO_DATA_V2
struct _OVPN_NOTIFY_EVENT OVPN_NOTIFY_EVENT
struct _OVPN_MP_SWAP_KEYS OVPN_MP_SWAP_KEYS
struct _OVPN_SET_PEER OVPN_SET_PEER
struct _OVPN_MP_SWAP_KEYS * POVPN_MP_SWAP_KEYS
struct _OVPN_SET_MODE OVPN_SET_MODE
struct _OVPN_GET_PEER_STATS * POVPN_GET_PEER_STATS
struct _OVPN_SET_MODE * POVPN_SET_MODE
struct _OVPN_NEW_PEER * POVPN_NEW_PEER
struct _OVPN_VERSION * POVPN_VERSION
struct _OVPN_CRYPTO_DATA * POVPN_CRYPTO_DATA
struct _OVPN_NOTIFY_EVENT * POVPN_NOTIFY_EVENT
struct _OVPN_VERSION OVPN_VERSION
struct _OVPN_CRYPTO_DATA OVPN_CRYPTO_DATA
struct _OVPN_MP_SET_PEER OVPN_MP_SET_PEER
struct _OVPN_PEER_STATS * POVPN_PEER_STATS
OVPN_NOTIFY_CMD
@ OVPN_CMD_FLOAT_PEER
@ OVPN_CMD_SWAP_KEYS
@ OVPN_CMD_DEL_PEER
struct _OVPN_MP_NEW_PEER * POVPN_MP_NEW_PEER
struct _OVPN_MP_START_VPN * POVPN_MP_START_VPN
OVPN_DEL_PEER_REASON
@ OVPN_DEL_PEER_REASON_EXPIRED
@ OVPN_DEL_PEER_REASON_TRANSPORT_DISCONNECT
@ OVPN_DEL_PEER_REASON_TRANSPORT_ERROR
@ OVPN_DEL_PEER_REASON_USERSPACE
@ OVPN_DEL_PEER_REASON_TEARDOWN
struct _OVPN_PEER_STATS OVPN_PEER_STATS
OVPN_CRYPTO_DATA V1
OVPN_KEY_SLOT KeySlot
unsigned char KeyId
OVPN_KEY_DIRECTION Decrypt
OVPN_KEY_DIRECTION Encrypt
OVPN_CIPHER_ALG CipherAlg
unsigned char Key[32]
unsigned char NonceTail[8]
unsigned char KeyLen
union _OVPN_MP_IROUTE::@20 Addr
union _OVPN_MP_NEW_PEER::@17 Local
SOCKADDR_IN6 Addr6
SOCKADDR_IN Addr4
union _OVPN_MP_NEW_PEER::@18 Remote
SOCKADDR_IN6 Addr6
union _OVPN_MP_START_VPN::@19 ListenAddress
SOCKADDR_IN6 Addr6
union _OVPN_NEW_PEER::@15 Local
SOCKADDR_IN Addr4
union _OVPN_NEW_PEER::@16 Remote
OVPN_PROTO Proto
OVPN_DEL_PEER_REASON DelPeerReason
struct sockaddr_storage FloatAddress
OVPN_NOTIFY_CMD Cmd
LONG64 TunBytesSent
LONG ReceivedDataPackets
LONG LostOutControlPackets
LONG SentDataPackets
LONG ReceivedControlPackets
LONG SentControlPackets
LONG LostInDataPackets
LONG64 TransportBytesSent
LONG64 TunBytesReceived
LONG LostOutDataPackets
LONG LostInControlPackets
LONG64 TransportBytesReceived