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
127
133
139
144
148
149typedef struct _OVPN_MP_START_VPN {
150 union {
151 SOCKADDR_IN Addr4;
152 SOCKADDR_IN6 Addr6;
156
162
170
177
181
185
186typedef struct _OVPN_MP_IROUTE {
187 union {
188 IN_ADDR Addr4;
189 IN6_ADDR Addr6;
193 int IPv6;
195
196typedef struct _OVPN_GET_PEER_STATS {
197 int PeerId; // -1 for all peers stats
199
200#define OVPN_IOCTL_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
201#define OVPN_IOCTL_GET_STATS CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
202#define OVPN_IOCTL_NEW_KEY CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
203#define OVPN_IOCTL_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
204#define OVPN_IOCTL_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
205#define OVPN_IOCTL_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
206#define OVPN_IOCTL_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
207#define OVPN_IOCTL_GET_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
208#define OVPN_IOCTL_NEW_KEY_V2 CTL_CODE(FILE_DEVICE_UNKNOWN, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
209#define OVPN_IOCTL_SET_MODE CTL_CODE(FILE_DEVICE_UNKNOWN, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
210
211#define OVPN_IOCTL_MP_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
212#define OVPN_IOCTL_MP_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
213#define OVPN_IOCTL_MP_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
214
215#define OVPN_IOCTL_NOTIFY_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
216
217#define OVPN_IOCTL_MP_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
218#define OVPN_IOCTL_MP_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
219
220#define OVPN_IOCTL_MP_ADD_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
221#define OVPN_IOCTL_MP_DEL_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
222
223#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
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_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_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