aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml8
-rwxr-xr-xdist/procd/wgconfd55
-rw-r--r--dist/systemd/wgconfd@.service20
-rw-r--r--wgconfd@.service18
4 files changed, 79 insertions, 22 deletions
diff --git a/Cargo.toml b/Cargo.toml
index acb03dc..a3ae394 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,11 +12,11 @@ keywords = [ "wireguard" ]
[dependencies]
arrayref = { version = "0.3.5" }
base64 = { version = "0.10.1" }
-serde = { version = "1.0.89" }
-serde_derive = { version = "1.0.89" }
-serde_json = { version = "1.0.39" }
+serde = { version = "1.0" }
+serde_derive = { version = "1.0" }
+serde_json = { version = "1.0" }
chrono = { version = "0.4.6", default-features = false }
-toml = { version = "0.5", optional = true }
+toml = { version = "0.5.0", optional = true }
[features]
default = [ "toml" ]
diff --git a/dist/procd/wgconfd b/dist/procd/wgconfd
new file mode 100755
index 0000000..9cfd438
--- /dev/null
+++ b/dist/procd/wgconfd
@@ -0,0 +1,55 @@
+#!/bin/sh /etc/rc.common
+
+START=50
+STOP=50
+USE_PROCD=1
+
+handle_interface() {
+ local iface="$1"
+ local val
+
+ mkdir -p "/tmp/wgconfd/$1" "/tmp/wgconfd/$1/cache"
+ procd_open_instance
+ procd_set_param env RUNTIME_DIRECTORY="/tmp/wgconfd/$1" CACHE_DIRECTORY="/tmp/wgconfd/$1/cache"
+ procd_set_param command /usr/bin/wgconfd "$1" --cmdline
+
+ config_get val "$1" refresh_sec
+ [ -n "$val" ] && procd_append_param command refresh_sec "$val"
+
+ config_get val "$1" min_keepalive
+ [ -n "$val" ] && procd_append_param command min_keepalive "$val"
+
+ config_get val "$1" max_keepalive
+ [ -n "$val" ] && procd_append_param command max_keepalive "$val"
+
+ config_list_foreach "$1" source handle_source
+
+ procd_set_param respawn 30 5 5
+ procd_set_param stderr 1
+ procd_close_instance
+}
+
+handle_source() {
+ local val
+ config_get val "$1" url
+ procd_append_param command source "$1" "$val"
+
+ config_get val "$1" psk
+ [ -n "$val" ] && procd_append_param command psk "$val"
+
+ config_get_bool val "$1" required 0
+ [ "$val" -eq 1 ] && procd_append_param command required
+
+ config_list_foreach "$1" ipv4 handle_source_arg ipv4
+
+ config_list_foreach "$1" ipv6 handle_source_arg ipv6
+}
+
+handle_source_arg() {
+ procd_append_param command "$2" "$1"
+}
+
+start_service() {
+ config_load wgconfd
+ config_foreach handle_interface interface
+}
diff --git a/dist/systemd/wgconfd@.service b/dist/systemd/wgconfd@.service
new file mode 100644
index 0000000..85acb13
--- /dev/null
+++ b/dist/systemd/wgconfd@.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=WireGuard configuration daemon on %i
+Wants=network.target
+After=network-pre.target
+Before=network.target
+
+[Service]
+Type=simple
+CapabilityBoundingSet=CAP_NET_ADMIN
+Restart=on-failure
+RestartSec=0
+RuntimeDirectory=wgconfd/%i
+RuntimeDirectoryPreserve=yes
+CacheDirectory=wgconfd/%i
+ExecStart=/usr/bin/env wgconfd %i /etc/wireguard/%i.toml
+StandardError=journal
+SyslogLevelPrefix=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/wgconfd@.service b/wgconfd@.service
deleted file mode 100644
index 1079fbf..0000000
--- a/wgconfd@.service
+++ /dev/null
@@ -1,18 +0,0 @@
-[Unit]
-Description=Configure WireGuard interface
-Wants=network-pre.target
-Before=network-pre.target nftables.service systemd-networkd.service NetworkManager.service
-
-[Service]
-Type=simple
-CapabilityBoundingSet=CAP_NET_ADMIN
-RuntimeDirectory=wgconfd
-CacheDirectory=wgconfd
-ExecStartPre=+-/usr/sbin/ip link add %i type wireguard
-ExecStartPre=+/usr/bin/wg setconf %i /etc/wireguard/%i.conf
-ExecStart=/usr/bin/env wgconfd %i /etc/wireguard/%i.toml
-StandardError=journal
-SyslogLevelPrefix=true
-
-[Install]
-WantedBy=multi-user.target