aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/uapi/windows/wireguard.h
blob: 5c5938e1d6b424e73b06ad037cb0a80897e9b662 (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
68
69
70
71
72
73
74
75
76
77
78
79
80
/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright (C) 2021 WireGuard LLC. All Rights Reserved.
 */

#ifndef _WIREGUARD_NT_H
#define _WIREGUARD_NT_H

#include <ntdef.h>
#include <ws2def.h>
#include <ws2ipdef.h>
#include <inaddr.h>
#include <in6addr.h>

#define WG_KEY_LEN 32

typedef struct _WG_IOCTL_ALLOWED_IP
{
	union
	{
		IN_ADDR V4;
		IN6_ADDR V6;
	} Address;
		ADDRESS_FAMILY AddressFamily;
		UCHAR Cidr;
} __attribute__((aligned(8))) WG_IOCTL_ALLOWED_IP;

typedef enum
{
	WG_IOCTL_PEER_HAS_PUBLIC_KEY = 1 << 0,
	WG_IOCTL_PEER_HAS_PRESHARED_KEY = 1 << 1,
	WG_IOCTL_PEER_HAS_PERSISTENT_KEEPALIVE = 1 << 2,
	WG_IOCTL_PEER_HAS_ENDPOINT = 1 << 3,
	WG_IOCTL_PEER_HAS_PROTOCOL_VERSION = 1 << 4,
	WG_IOCTL_PEER_REPLACE_ALLOWED_IPS = 1 << 5,
	WG_IOCTL_PEER_REMOVE = 1 << 6,
	WG_IOCTL_PEER_UPDATE = 1 << 7
} WG_IOCTL_PEER_FLAG;

typedef struct _WG_IOCTL_PEER
{
	WG_IOCTL_PEER_FLAG Flags;
	ULONG ProtocolVersion; /* 0 = latest protocol, 1 = this protocol. */
	UCHAR PublicKey[WG_KEY_LEN];
	UCHAR PresharedKey[WG_KEY_LEN];
	USHORT PersistentKeepalive;
	SOCKADDR_INET Endpoint;
	ULONG64 TxBytes;
	ULONG64 RxBytes;
	ULONG64 LastHandshake;
	ULONG AllowedIPsCount;
} __attribute__((aligned(8))) WG_IOCTL_PEER;

typedef enum
{
	WG_IOCTL_INTERFACE_HAS_PUBLIC_KEY = 1 << 0,
	WG_IOCTL_INTERFACE_HAS_PRIVATE_KEY = 1 << 1,
	WG_IOCTL_INTERFACE_HAS_LISTEN_PORT = 1 << 2,
	WG_IOCTL_INTERFACE_REPLACE_PEERS = 1 << 3
} WG_IOCTL_INTERFACE_FLAG;

typedef struct _WG_IOCTL_INTERFACE
{
	WG_IOCTL_INTERFACE_FLAG Flags;
	USHORT ListenPort;
	UCHAR PrivateKey[WG_KEY_LEN];
	UCHAR PublicKey[WG_KEY_LEN];
	ULONG PeersCount;
} __attribute__((aligned(8))) WG_IOCTL_INTERFACE;

#define WG_IOCTL_GET CTL_CODE(45208U, 321, METHOD_OUT_DIRECT, FILE_READ_DATA | FILE_WRITE_DATA)
#define WG_IOCTL_SET CTL_CODE(45208U, 322, METHOD_IN_DIRECT, FILE_READ_DATA | FILE_WRITE_DATA)

#define DEVPKEY_WG_NAME (DEVPROPKEY) { \
		{ 0x65726957, 0x7547, 0x7261, { 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x4b, 0x65, 0x79 } }, \
		DEVPROPID_FIRST_USABLE + 1 \
	}


#endif