#!/bin/sh /etc/rc.common

. $IPKG_INSTROOT/lib/functions/network.sh

USE_PROCD=1
START=90

tunnel_id=1

missing() {
	echo "Not starting tunneldigger - missing $1" >&2
}

parse_broker() {
	local section="$1"

	config_get_bool enabled "$section" enabled 1
	config_get addresses "$section" address
	config_get uuid "$section" uuid
	config_get interface "$section" interface
	config_get limit_bw_down "$section" limit_bw_down
	config_get hook_script "$section" hook_script
	config_get bind_interface "$section" bind_interface
	config_get group "$section" group
	
	[ $enabled -eq 0 ] && return

	local broker_opts=""
	for address in $addresses; do
		append broker_opts "-b ${address}"
	done

	[ ! -z "${limit_bw_down}" ] && append broker_opts "-L ${limit_bw_down}"
	[ ! -z "${hook_script}" ] && append broker_opts "-s ${hook_script}"
	[ ! -z "${bind_interface}" ] && {
		# Resolve logical interface name.
		unset _bind_interface
		network_get_device _bind_interface "${bind_interface}" || _bind_interface="${bind_interface}"
		append broker_opts "-I ${_bind_interface}"
	}

	if [ -z "$uuid" ]; then
		missing uuid
		return
	elif [ -z "$interface" ]; then
		missing interface
		return
	fi

	procd_open_instance "tunneldigger_${tunnel_id}"
	procd_set_param command "/usr/bin/tunneldigger"
	procd_append_param command -f
	procd_append_param command -u "${uuid}"
	procd_append_param command -i "${interface}"
	procd_append_param command -t "${tunnel_id}"
	procd_append_param command ${broker_opts}
	[ -n "$group" ] && procd_set_param group "$group"
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param respawn
	procd_close_instance

	let tunnel_id++
}

start_service() {
	config_load tunneldigger
	config_foreach parse_broker broker
}