113 lines
3.0 KiB
Bash
Executable File
113 lines
3.0 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=98
|
|
STOP=98
|
|
|
|
USE_PROCD=1
|
|
|
|
YGG_JUMPER_INTERFACES=""
|
|
|
|
|
|
envset_jumper_interfaces() {
|
|
|
|
all_ygg_interfaces=$(uci show network | grep ".proto='yggdrasil'" | awk -F '.' '{print $2}')
|
|
|
|
for interface in ${all_ygg_interfaces}; do
|
|
|
|
is_started_on_boot="$(uci -q get network.${interface}.auto)"
|
|
|
|
if [ "${is_started_on_boot}" == "0" ]; then
|
|
: # Skip interface is is disabled
|
|
else
|
|
|
|
is_yggdrasil_jumper_enabled="$(uci -q get network.${interface}.jumper)"
|
|
|
|
YGG_JUMPER_INTERFACES=" $YGG_JUMPER_INTERFACES ${interface} "
|
|
|
|
## - [ ] add jumper flag support in luci-proto-yggdrasil
|
|
# if [ "${is_yggdrasil_jumper_enabled}" == "1" ]; then
|
|
# : # Append yggdrasil + jumper interface to the global
|
|
# YGG_JUMPER_INTERFACES=" $YGG_JUMPER_INTERFACES ${interface} "
|
|
# fi
|
|
fi
|
|
|
|
done
|
|
|
|
: # Strip leading/trailing space
|
|
YGG_JUMPER_INTERFACES="$(echo ${YGG_JUMPER_INTERFACES} | xargs)"
|
|
|
|
|
|
}
|
|
|
|
|
|
uci_to_jumper_configs() {
|
|
# remove stale not used configs avoiding confusion
|
|
cfgs="/tmp/yggdrasil/*-jumper.conf"
|
|
rm $cfgs
|
|
|
|
# scoop up uci details from /etc/config/yggdrasil-jumper
|
|
admin_listen=$(uci -q get yggdrasil-jumper.config.admin_listen)
|
|
listen_port=$(uci -q get yggdrasil-jumper.config.listen_port)
|
|
allow_ipv4=$(uci -q get yggdrasil-jumper.config.allow_ipv4)
|
|
allow_ipv6=$(uci -q get yggdrasil-jumper.config.allow_ipv6)
|
|
stun_server=$(uci -q get yggdrasil-jumper.config.stun_server)
|
|
stun_randomize=$(uci -q get yggdrasil-jumper.config.stun_randomize)
|
|
|
|
for interface in $YGG_JUMPER_INTERFACES; do
|
|
ali="unix:///tmp/yggdrasil/${interface}.sock"
|
|
cfg="/tmp/yggdrasil/${interface}-jumper.conf"
|
|
: # write a interface-jumper.conf file for yggdrasil interface
|
|
cat <<EOF > "${cfg}"
|
|
yggdrasil_admin_listen = [ "${ali}" ]
|
|
yggdrasil_listen = [ ]
|
|
listen_port = $listen_port
|
|
allow_ipv4 = $( [ "$allow_ipv4" = "1" ] && echo true || echo false )
|
|
allow_ipv6 = $( [ "$allow_ipv6" = "1" ] && echo true || echo false )
|
|
whitelist = [ ]
|
|
stun_servers = [ "${stun_server// /\",\"}" ]
|
|
stun_randomize = $( [ "$stun_randomize" = "1" ] && echo true || echo false )
|
|
EOF
|
|
done
|
|
|
|
|
|
}
|
|
|
|
|
|
start_service() {
|
|
[ -f /etc/uci-defaults/yggdrasil-jumper ] && ( . /etc/uci-defaults/yggdrasil-jumper )
|
|
|
|
envset_jumper_interfaces
|
|
|
|
uci_to_jumper_configs
|
|
|
|
for interface in $YGG_JUMPER_INTERFACES; do
|
|
jumper_cfg="/tmp/yggdrasil/${interface}-jumper.conf"
|
|
procd_open_instance ${interface}
|
|
procd_set_param respawn
|
|
procd_set_param command yggdrasil-jumper --config "${jumper_cfg}"
|
|
procd_set_param facility "yggdrasil-jumper-${interface}"
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
procd_close_instance
|
|
done
|
|
|
|
}
|
|
|
|
|
|
stop_service() {
|
|
killall yggdrasil-jumper
|
|
}
|
|
|
|
|
|
x_reload_service() {
|
|
:
|
|
# cat /tmp/etc/cjdroute.conf | cjdrouteconf reload
|
|
}
|
|
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger yggdrasil-jumper
|
|
}
|
|
|
|
|