#!/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 < "${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 }