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-2021 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, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * This particular file (uapi.h) is also licensed using the MIT license (see COPYRIGHT.MIT).
22 */
23
24#pragma once
25#ifndef _KERNEL_MODE
26#include <winsock2.h>
27#endif
28#include <ws2def.h>
29#include <ws2ipdef.h>
30
35
36typedef struct _OVPN_NEW_PEER {
37 union {
38 SOCKADDR_IN Addr4;
39 SOCKADDR_IN6 Addr6;
41
42 union {
43 SOCKADDR_IN Addr4;
44 SOCKADDR_IN6 Addr6;
46
49
50typedef struct _OVPN_MP_NEW_PEER {
51 union {
52 SOCKADDR_IN Addr4;
53 SOCKADDR_IN6 Addr6;
55
56 union {
57 SOCKADDR_IN Addr4;
58 SOCKADDR_IN6 Addr6;
60
61 IN_ADDR VpnAddr4;
62 IN6_ADDR VpnAddr6;
63
64 int PeerId;
66
86
91
97
98typedef struct _OVPN_KEY_DIRECTION
99{
100 unsigned char Key[32];
101 unsigned char KeyLen; // 16/24/32 -> AES-128-GCM/AES-192-GCM/AES-256-GCM
102 unsigned char NonceTail[8];
104
113
120
126
132
137
141
142typedef struct _OVPN_MP_START_VPN {
143 union {
144 SOCKADDR_IN Addr4;
145 SOCKADDR_IN6 Addr6;
149
154
162
168
172
176
177typedef struct _OVPN_MP_IROUTE {
178 union {
179 IN_ADDR Addr4;
180 IN6_ADDR Addr6;
184 int IPv6;
186
187#define OVPN_IOCTL_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
188#define OVPN_IOCTL_GET_STATS CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
189#define OVPN_IOCTL_NEW_KEY CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
190#define OVPN_IOCTL_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
191#define OVPN_IOCTL_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
192#define OVPN_IOCTL_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
193#define OVPN_IOCTL_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
194#define OVPN_IOCTL_GET_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
195#define OVPN_IOCTL_NEW_KEY_V2 CTL_CODE(FILE_DEVICE_UNKNOWN, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
196#define OVPN_IOCTL_SET_MODE CTL_CODE(FILE_DEVICE_UNKNOWN, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
197
198#define OVPN_IOCTL_MP_START_VPN CTL_CODE(FILE_DEVICE_UNKNOWN, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
199#define OVPN_IOCTL_MP_NEW_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
200#define OVPN_IOCTL_MP_SET_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
201
202#define OVPN_IOCTL_NOTIFY_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
203
204#define OVPN_IOCTL_MP_DEL_PEER CTL_CODE(FILE_DEVICE_UNKNOWN, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
205#define OVPN_IOCTL_MP_SWAP_KEYS CTL_CODE(FILE_DEVICE_UNKNOWN, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
206
207#define OVPN_IOCTL_MP_ADD_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
208#define OVPN_IOCTL_MP_DEL_IROUTE CTL_CODE(FILE_DEVICE_UNKNOWN, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
struct _OVPN_STATS * POVPN_STATS
struct _OVPN_MP_IROUTE * POVPN_MP_IROUTE
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_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
OVPN_NOTIFY_CMD
@ 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
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
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