]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/netdev/wireguard.h
tree-wide: drop 'This file is part of systemd' blurb
[thirdparty/systemd.git] / src / network / netdev / wireguard.h
1 #pragma once
2
3 /***
4 Copyright 2016 Jörg Thalheim <joerg@thalheim.io>
5 ***/
6
7 typedef struct Wireguard Wireguard;
8
9 #include "netdev.h"
10 #include "sd-resolve.h"
11 #include "wireguard-netlink.h"
12 #include "socket-util.h"
13 #include "in-addr-util.h"
14
15 #ifndef IFNAMSIZ
16 #define IFNAMSIZ 16
17 #endif
18
19 typedef struct WireguardIPmask {
20 uint16_t family;
21 union in_addr_union ip;
22 uint8_t cidr;
23
24 LIST_FIELDS(struct WireguardIPmask, ipmasks);
25 } WireguardIPmask;
26
27 typedef struct WireguardPeer {
28 uint8_t public_key[WG_KEY_LEN];
29 uint8_t preshared_key[WG_KEY_LEN];
30 uint32_t flags;
31
32 union sockaddr_union endpoint;
33
34 uint16_t persistent_keepalive_interval;
35
36 LIST_HEAD(WireguardIPmask, ipmasks);
37 LIST_FIELDS(struct WireguardPeer, peers);
38 } WireguardPeer;
39
40 typedef struct WireguardEndpoint {
41 char *host;
42 char *port;
43
44 NetDev *netdev;
45 WireguardPeer *peer;
46
47 LIST_FIELDS(struct WireguardEndpoint, endpoints);
48 } WireguardEndpoint;
49
50 struct Wireguard {
51 NetDev meta;
52 unsigned last_peer_section;
53
54 char interface[IFNAMSIZ];
55 uint32_t flags;
56
57 uint8_t public_key[WG_KEY_LEN];
58 uint8_t private_key[WG_KEY_LEN];
59 uint32_t fwmark;
60
61 uint16_t port;
62
63 LIST_HEAD(WireguardPeer, peers);
64 size_t allocation_size;
65 sd_event_source *resolve_retry_event_source;
66
67 LIST_HEAD(WireguardEndpoint, unresolved_endpoints);
68 LIST_HEAD(WireguardEndpoint, failed_endpoints);
69 unsigned n_retries;
70 sd_resolve_query *resolve_query;
71 };
72
73 DEFINE_NETDEV_CAST(WIREGUARD, Wireguard);
74 extern const NetDevVTable wireguard_vtable;
75
76 int config_parse_wireguard_allowed_ips(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
77 int config_parse_wireguard_endpoint(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
78 int config_parse_wireguard_listen_port(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
79
80 int config_parse_wireguard_public_key(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
81 int config_parse_wireguard_private_key(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
82 int config_parse_wireguard_preshared_key(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
83 int config_parse_wireguard_keepalive(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);