aboutsummaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
Diffstat (limited to 'dist')
-rwxr-xr-xdist/procd/wgconfd55
-rw-r--r--dist/systemd/wgconfd@.service20
2 files changed, 75 insertions, 0 deletions
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