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

# Sigh, shellcheck doesn't like comments following its declarations (SC1125),
# so I'll explain this separately:
# - SC2034: USE_PROCD, START, STOP appears unused
# - SC3043: In POSIX sh, 'local' is undefined
# - SC2154: _value is referenced but not assigned

# shellcheck disable=SC2034
# shellcheck disable=SC3043
# shellcheck disable=SC2154

USE_PROCD=1

START=71
STOP=10

tm_start() {
    local instance="$1"

    config_get _value "$instance" namespace
    local namespace="$_value"

    config_get _value "$instance" mtu
    local mtu="$_value"

    config_get _value "$instance" interface
    local interface="$_value"

    config_get _value "$instance" uplink_ip
    local uplink_ip="$_value"

    config_get _value "$instance" uplink_gateway
    local uplink_gateway="$_value"

    config_get _value "$instance" tunnel_count
    local tunnel_count="$_value"

    config_get _value "$instance" tunnel_timeout
    local tunnel_timeout="$_value"

    config_get _value "$instance" check_interval
    local check_interval="$_value"

    config_get _value "$instance" up_script
    local up_script="$_value"

    config_get _value "$instance" up_script_args
    local up_script_args="$_value"

    config_get _value "$instance" down_script
    local down_script="$_value"

    procd_open_instance
    procd_set_param respawn 3600 5 0
    procd_set_param command /bin/sh "/usr/bin/tunnelman"  "-n" "$namespace" "-m" "$mtu" "-i" "$interface" "-a" "$uplink_ip" "-g" "$uplink_gateway" "-c" "$tunnel_count" "-t" "$tunnel_timeout" "-o" "$check_interval" "-U" "$up_script" "-A" "$up_script_args" "-D" "$down_script"
    config_list_foreach "$instance" tunnel_endpoints append_tunnel_endpoint
    procd_set_param netdev "$interface"
    procd_close_instance
}

append_tunnel_endpoint() {
    procd_append_param command "-T" "$1"
}

wait_for_babeld()
{
	ubus -t 60 wait_for babeld 2>/dev/null
}

wait_for_olsrd()
{
	ubus -t 60 wait_for olsrd 2>/dev/null
}

boot()
{
    wait_for_babeld
    wait_for_olsrd
    start "$@"
}

start_service() {
    config_load tunnelmanager
    config_foreach tm_start tunnelmanager
}

#stop_service() {
#	config_load tunnelmanager
#	config_foreach tm_stop tunnelmanager
#}
