]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/netdev/wireguard.h
e2c06f037763b3999f7bd895071de40ba77d9f30
[thirdparty/systemd.git] / src / network / netdev / wireguard.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #pragma once
4
5 typedef struct Wireguard Wireguard;
6
7 #include <netinet/in.h>
8 #include <linux/wireguard.h>
9
10 #include "in-addr-util.h"
11 #include "netdev.h"
12 #include "socket-util.h"
13
14 typedef struct WireguardIPmask {
15 uint16_t family;
16 union in_addr_union ip;
17 uint8_t cidr;
18
19 LIST_FIELDS(struct WireguardIPmask, ipmasks);
20 } WireguardIPmask;
21
22 typedef struct WireguardPeer {
23 Wireguard *wireguard;
24 NetworkConfigSection *section;
25
26 uint8_t public_key[WG_KEY_LEN];
27 uint8_t preshared_key[WG_KEY_LEN];
28 char *preshared_key_file;
29 uint32_t flags;
30 uint16_t persistent_keepalive_interval;
31
32 union sockaddr_union endpoint;
33 char *endpoint_host;
34 char *endpoint_port;
35
36 LIST_HEAD(WireguardIPmask, ipmasks);
37 LIST_FIELDS(struct WireguardPeer, peers);
38 } WireguardPeer;
39
40 struct Wireguard {
41 NetDev meta;
42 unsigned last_peer_section;
43
44 uint32_t flags;
45 uint8_t private_key[WG_KEY_LEN];
46 char *private_key_file;
47 uint16_t port;
48 uint32_t fwmark;
49
50 Hashmap *peers_by_section;
51 Set *peers_with_unresolved_endpoint;
52 Set *peers_with_failed_endpoint;
53
54 LIST_HEAD(WireguardPeer, peers);
55
56 unsigned n_retries;
57 sd_event_source *resolve_retry_event_source;
58 };
59
60 DEFINE_NETDEV_CAST(WIREGUARD, Wireguard);
61 extern const NetDevVTable wireguard_vtable;
62
63 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_allowed_ips);
64 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_endpoint);
65 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_listen_port);
66 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_peer_key);
67 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_private_key);
68 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_private_key_file);
69 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_preshared_key_file);
70 CONFIG_PARSER_PROTOTYPE(config_parse_wireguard_keepalive);