]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/netdev/wireguard.h
tree-wide: drop 'This file is part of systemd' blurb
[thirdparty/systemd.git] / src / network / netdev / wireguard.h
CommitLineData
e5719363
JT
1#pragma once
2
3/***
e5719363 4 Copyright 2016 Jörg Thalheim <joerg@thalheim.io>
e5719363
JT
5***/
6
7typedef 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
19typedef 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
27typedef 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
40typedef 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
50struct 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
73DEFINE_NETDEV_CAST(WIREGUARD, Wireguard);
74extern const NetDevVTable wireguard_vtable;
75
76int 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);
77int 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);
78int 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
80int 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);
81int 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);
82int 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);
83int 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);