]>
Commit | Line | Data |
---|---|---|
e5719363 JT |
1 | #pragma once |
2 | ||
3 | /*** | |
e5719363 | 4 | Copyright 2016 Jörg Thalheim <joerg@thalheim.io> |
e5719363 JT |
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); |