[PATCH 1/2] fff-vpn-select: make vpn-select modular
Robert Langhammer
rlanghammer at web.de
Mi Jun 17 23:46:51 CEST 2020
vpn-select is an old relic and did not reflect the opportunities of our hoodfile.
This rewrite makes vpn-select modular to easely add new vpn-protocols.
The stuff dependent on the vpn-protocol is outsourced to files in /etc/vpn-select.d and comes in with the respective vpn package.
Signed-off-by: Robert Langhammer <rlanghammer at web.de>
---
.../fff-vpn-select/files/usr/sbin/vpn-select | 83 ++++++-------------
1 file changed, 27 insertions(+), 56 deletions(-)
diff --git a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
index 30883f5..bf9c199 100755
--- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
+++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
@@ -1,65 +1,36 @@
#!/bin/sh
# Usage: vpn-select <path-to-hood-file>
+# To add a new protocol, put a file with two functions to /etc/vpn-select.d/ .
+# The function ${protocol}_config is called for every peer in hoodfile.
+# The second function ${protocol}_start_stop is called once per installed protocol
. /usr/share/libubox/jshn.sh
hoodfile="$1"
-
-make_config() {
- # remove old config
- rm /tmp/fastd_fff_peers/*
-
- # prepare
- Index=1
- json_load "$(cat "$hoodfile")"
- json_select vpn
-
- # get fastd peers
- while json_select "$Index" > /dev/null
- do
- json_get_var protocol protocol
- if [ "$protocol" = "fastd" ]; then
- # set up fastd
- json_get_var servername name
- filename="/etc/fastd/fff/peers/$servername"
- echo "#name \"${servername}\";" > "$filename"
- json_get_var key key
- echo "key \"${key}\";" >> "$filename"
- json_get_var address address
- json_get_var port port
- echo "remote \"${address}\" port ${port};" >> "$filename"
- echo "" >> "$filename"
- echo "float yes;" >> "$filename"
- fi
- json_select ".." # back to vpn
- Index=$(( Index + 1 ))
- done
- json_select ".." # back to root
-}
-
# Only do something if file is there and not empty; otherwise exit 1
-if [ -s "$hoodfile" ]; then
- if [ ! -d /tmp/fastd_fff_peers ]; then
- # first run after reboot
- mkdir /tmp/fastd_fff_peers
- make_config
- # start fastd only if there are some peers
- [ "$(ls /etc/fastd/fff/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
- else
- make_config
- /etc/init.d/fastd reload
+[ -s "$hoodfile" ] || exit 1
+
+# source functions
+for file in /etc/vpn-select.d/*; do
+ . "$file"
+done
+
+# load hoodfile
+json_load "$(cat "$hoodfile")"
+json_select vpn
+
+# configure vpn
+index=1
+while json_select "$index" > /dev/null ; do
+ json_get_var protocol protocol
+ "${protocol}_config"
+ json_select ".." # back to vpn
+ index=$(( index + 1 ))
+done
+
+# start/restart/stop vpnservices
+for protocol in $(grep "_start_stop()" /etc/vpn-select.d/* | cut -f1 -d\(); do
+ "${protocol}"
+done
- # fastd start/stop for various situations
- pidfile="/tmp/run/fastd.fff.pid"
- if [ "$(ls /etc/fastd/fff/peers/* 2>/dev/null)" ]; then
- ([ -s "$pidfile" ] && [ -d "/proc/$(cat "$pidfile")" ]) || /etc/init.d/fastd start
- else
- ([ -s "$pidfile" ] && [ -d "/proc/$(cat "$pidfile")" ]) && /etc/init.d/fastd stop
- fi
- fi
- exit 0
-else
- echo "vpn-select: Hood file not found or empty!"
- exit 1
-fi
--
2.20.1
Mehr Informationen über die Mailingliste franken-dev