123 lines
3.0 KiB
Bash
Executable File
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"
|
|
}
|
|
|