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

# Ignore a few shellchecks:
# - SC2034: USE_PROCD, START, STOP appears unused
# - SC3043: In POSIX sh, 'local' is undefined

# shellcheck disable=SC2034
# shellcheck disable=SC3043

USE_PROCD=1

START=40
STOP=10

boot() {
  config_load tunspace
  local _value
  config_get _value tunspace uplink_ifname
  ubus -t 15 wait_for network.interface."${_value#br-}" 2>/dev/null

  start "$@"
}

start_service() {
  config_load tunspace

  procd_open_instance
  procd_set_param command /usr/bin/tunspace
  procd_set_param respawn 60 10 0  # respawn indefinitely, wait 10s before retry
  procd_close_instance
}

stop_service() {
  config_load tunspace
  config_foreach del_wg_iface "wg-interface"
  del_uplink_netns
}

del_wg_iface() {
  local section="$1"
  local _value
  config_get _value "$section" ifname
  logger -t tunspace "ip link del $_value"
  ip link del "$_value"
}

del_uplink_netns() {
  local _value
  config_get _value tunspace uplink_netns
  logger -t tunspace "ip netns del $_value"
  ip netns del "$_value"
}
