1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2015-2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4  */
5 
6 struct def {
7 	const char *name;
8 	long long value;
9 };
10 extern const struct def defs[];
11 
12 #ifdef __KERNEL__
13 #include "../drivers/net/wireguard/device.h"
14 #include "../drivers/net/wireguard/peer.h"
15 #include "../drivers/net/wireguard/noise.h"
16 const struct def defs[] = {
17 	{ "SOCK_DEVICE_OFFSET", offsetof(struct sock, sk_user_data) },
18 	{ "DEVICE_NAME_OFFSET", -ALIGN(sizeof(struct net_device), NETDEV_ALIGN) + offsetof(struct net_device, name) },
19 	{ "IFNAMSIZ", IFNAMSIZ },
20 	{ "DEVICE_PEERS_OFFSET", offsetof(struct wg_device, peer_list) },
21 	{ "PEERS_PEER_OFFSET", -offsetof(struct wg_peer, peer_list) },
22 	{ "PEER_CURRENTKEY_OFFSET", offsetof(struct wg_peer, keypairs.current_keypair) },
23 	{ "PEER_PREVIOUSKEY_OFFSET", offsetof(struct wg_peer, keypairs.previous_keypair) },
24 	{ "PEER_NEXTKEY_OFFSET", offsetof(struct wg_peer, keypairs.next_keypair) },
25 	{ "KEY_LOCALID_OFFSET", offsetof(struct noise_keypair, entry.index) },
26 	{ "KEY_REMOTEID_OFFSET", offsetof(struct noise_keypair, remote_index) },
27 	{ "KEY_SENDING_OFFSET", offsetof(struct noise_keypair, sending.key) },
28 	{ "KEY_RECEIVING_OFFSET", offsetof(struct noise_keypair, receiving.key) },
29 	{ NULL, 0 }
30 };
31 #else
32 #include <stdio.h>
main(int argc,char * argv[])33 int main(int argc, char *argv[])
34 {
35 	for (const struct def *def = defs; def->name; ++def)
36 		printf("#define %s %lld\n", def->name, def->value);
37 	return 0;
38 }
39 #endif
40