packages/net/tunneldigger-broker/files/tunneldigger-broker.init

123 lines
3.0 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
. $IPKG_INSTROOT/lib/functions/network.sh
START=90
USE_PROCD=1
NAME=tunneldigger-broker
PIDPATH=/var/run
CONFIGFILE=/var/etc/tunneldigger-broker.cfg
HOOKPATH=/usr/lib/tunneldigger-broker/hooks
missing() {
echo "Not starting tunneldigger-broker - missing $1" >&2
exit 1
}
cfg_append() {
local value="$1"
echo "$value" >> $CONFIGFILE
}
cfg_append_section() {
local name="$1"
cfg_append "[${name}]"
}
cfg_append_kv() {
local key="$1"
local value="$2"
cfg_append "${key}=${value}"
}
cfg_append_option() {
local cfg="$1"
local option="$2"
local key="$3"
config_get value "$cfg" "${option}"
[ -z "${value}" ] && missing ${option}
cfg_append_kv "${key}" "${value}"
}
parse_broker() {
local section="$1"
cfg_append_section broker
config_get interface "$section" interface
[ ! -z "${interface}" ] && {
# Resolve logical interface name.
unset _interface address
network_get_device _interface "${interface}" || _interface="${interface}"
cfg_append_kv interface "${_interface}"
network_get_ipaddr address "${interface}"
cfg_append_kv address "${address}"
}
OPTIONS="max_tunnels tunnel_id_base connection_rate_limit connection_rate_limit_per_ip_count connection_rate_limit_per_ip_time pmtu"
for option in ${OPTIONS}; do
cfg_append_option "$section" "${option}" "${option}"
done
config_get port "$section" port
cfg_append_kv "port" "${port// /,}"
cfg_append_section hooks
cfg_append_kv "session.up" "${HOOKPATH}/setup"
cfg_append_kv "session.pre-down" "${HOOKPATH}/teardown"
cfg_append_kv "session.mtu-changed" "${HOOKPATH}/mtu-changed"
cfg_append_kv "broker.connection-rate-limit" "${HOOKPATH}/connection-rate-limit"
}
parse_log() {
local section="$1"
cfg_append_section log
OPTIONS="verbosity"
for option in ${OPTIONS}; do
cfg_append_option "$section" "${option}" "${option}"
done
config_get_bool log_ip_addresses "$section" log_ip_addresses 1
if [ "${log_ip_addresses}" -eq 1 ]; then
cfg_append_kv "log_ip_addresses" "true"
else
cfg_append_kv "log_ip_addresses" "false"
fi
}
start_service() {
# Prepare the configuration file from UCI settings.
rm -f ${CONFIGFILE}
config_load tunneldigger-broker
config_foreach parse_broker broker
config_foreach parse_log log
# Start the service using procd.
procd_open_instance
procd_set_param command "/usr/bin/python"
procd_append_param command -m tunneldigger_broker.main
procd_append_param command "${CONFIGFILE}"
# Set up a trigger when the interface changes state
local netdev
network_get_physdev netdev $(uci show "tunneldigger-broker.@broker[0].interface" | cut -d \' -f 2)
procd_set_param netdev $netdev
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
reload_service() {
restart
}
service_triggers() {
local interface=$(uci show "tunneldigger-broker.@broker[0].interface" | cut -d \' -f 2)
procd_add_interface_trigger "interface.*.up" $interface /etc/init.d/tunneldigger-broker restart
procd_add_reload_trigger "tunneldigger-broker"
}