forked from freifunk-franken/firmware
72 lines
2.6 KiB
Bash
Executable File
72 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
make_config() {
|
|
# remove old config
|
|
>/etc/config/tunneldigger
|
|
rm /tmp/fastd_fff_peers/*
|
|
count=0
|
|
# get fastd peers
|
|
filecounts=$(awk '/^####/ { gsub(/^####/, "", $0); gsub(/.conf/, "", $0); print $0; }' /tmp/fastd_fff_output)
|
|
for file in $filecounts; do
|
|
awk "{ if(a) print }; /^####$file.conf$/{a=1}; /^$/{a=0};" /tmp/fastd_fff_output | sed 's/ float;/;/g' > /etc/fastd/fff/peers/$file
|
|
echo 'float yes;' >> /etc/fastd/fff/peers/$file
|
|
|
|
# ask for Broker and select the tunnel
|
|
IP=$(awk -F\" '/remote/ {print $2}' /etc/fastd/fff/peers/$file)
|
|
if [ "l2tp" = "$(wget -T10 $IP/vpn.txt -O - 2>/dev/null)" ]; then
|
|
# Gateway offers l2tp
|
|
FDPORT=$(awk '/remote/{gsub(";", ""); print $5}' /etc/fastd/fff/peers/$file)
|
|
L2PORT=$((FDPORT + 10000))
|
|
UUID=$hostname
|
|
|
|
uci set tunneldigger.$count=broker
|
|
uci set tunneldigger.$count.address="$IP:$L2PORT"
|
|
uci set tunneldigger.$count.uuid="$UUID"
|
|
uci set tunneldigger.$count.interface="l2tp$count"
|
|
uci set tunneldigger.$count.enabled="1"
|
|
uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
|
|
uci -c /tmp commit tunneldigger
|
|
count=$((count + 1))
|
|
# remove this fastd-peer
|
|
rm /etc/fastd/fff/peers/$file
|
|
fi
|
|
done
|
|
}
|
|
|
|
# main
|
|
|
|
# Only do something when file is here and greater 0 byte
|
|
if [ -s /tmp/fastd_fff_output ]; then
|
|
|
|
# set some vars
|
|
hostname=$(cat /proc/sys/kernel/hostname)
|
|
mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
|
|
[ "$hostname" = "OpenWrt" ] && hostname=""
|
|
[ "$hostname" = "" ] && hostname="$mac"
|
|
|
|
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 left
|
|
[ "$(ls /etc/fastd/fff/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
|
|
/etc/init.d/tunneldigger start
|
|
else
|
|
# check if new tunneldigger conf is different
|
|
sumold=$(sha256sum /etc/config/tunneldigger)
|
|
make_config
|
|
sumnew=$(sha256sum /etc/config/tunneldigger)
|
|
[ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
|
|
/etc/init.d/fastd reload
|
|
|
|
# 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
|
|
fi
|