#!/bin/sh
#
# Setzen aller fuer Opennet relevanten olsr-Einstellungen.
#
# Dieses Skript wird nur ein einziges Mal nach einem Upgrade oder der Erstinstallation ausgefuehrt:
#   http://wiki.openwrt.org/doc/uci#defaults
#


# shellcheck source=opennet/packages/on-core/files/usr/lib/opennet/on-helper.sh
. "${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"


configure_olsrd_httpinfo_port() {
	trap 'error_trap configure_olsrd_httpinfo_port "$*"' EXIT
	local port="$1"
	local uci_prefix

	# add and activate httpinfo plugin
	uci_prefix=$(get_and_enable_olsrd_library_uci_prefix "httpinfo")
	# Wir koennen leider nicht zwischen "Nutzer hat 1978 eingestellt" und "Auslieferungszustand" unterscheiden.
	# Falls der Nutzer also explizit diesen Port will, dann muss er ihn nach einem Upgrade wieder einstellen.
	if [ "$(uci_get "${uci_prefix}.port" "1978")" = "1978" ]; then
		uci set "${uci_prefix}.port=$port"
	fi
}


# das txtinfo-Modul ist notwendig fuer die Dienstverwaltung (Routen-Entfernung)
olsrd_enable_txtinfo() {
	trap 'error_trap olsrd_enable_txtinfo "$*"' EXIT
	local uci_prefix
	uci_prefix=$(get_and_enable_olsrd_library_uci_prefix "txtinfo")
	uci set "${uci_prefix}.ignore=0"
}


# das jsoninfo-Modul ist notwendig fuer die luci-Integration von olsrd
# (nett, aber unwichtig)
olsrd_enable_jsoninfo() {
	trap 'error_trap olsrd_enable_jsoninfo "$*"' EXIT
	local uci_prefix
	uci_prefix=$(get_and_enable_olsrd_library_uci_prefix "jsoninfo")
	uci set "${uci_prefix}.ignore=0"
}


olsrd_enable_ondataservice() {
	trap 'error_trap enable_ondataservice "$*"' EXIT
	local uci_prefix

	# schon vorhanden? Unberuehrt lassen ...
	uci -q show olsrd | grep -q ondataservice && return

	# add and activate ondataservice plugin
	uci_prefix=$(get_and_enable_olsrd_library_uci_prefix "ondataservice_light")
	uci set "${uci_prefix}.interval=10800"
	uci set "${uci_prefix}.inc_interval=5"
	uci set "${uci_prefix}.database=/tmp/database.json"
	# Wir setzen "ignore" nicht explizit auf "0", da es nicht unbedingt erforderlich ist und
	# im Unterschied zu den relevanten olsrd-Plugins nicht zu erwarten ist, dass es zuvor
	# bereits existierte. Falls also "ignore" auf "1" gesetzt ist, dann war es eine bewusste
	# Entscheidung des Nutzers.
}


olsrd_enable_nameservice() {
	trap 'error_trap enable_nameservice "$*"' EXIT
	local current_trigger
	local uci_prefix

	# fuer NTP, DNS und die Gateway-Auswahl benoetigen wir das nameservice-Plugin
	local uci_prefix
	uci_prefix=$(get_and_enable_olsrd_library_uci_prefix "nameservice")
	if [ -z "$uci_prefix" ]; then
	       msg_info "Failed to find olsrd_nameservice plugin"
	else
		# Option 'services-change-script' setzen
		current_trigger=$(uci_get "${uci_prefix}.services_change_script" || true)
		[ -n "$current_trigger" ] && [ "$current_trigger" != "$OLSR_NAMESERVICE_SERVICE_TRIGGER" ] && \
			msg_info "WARNING: overwriting 'services-change-script' option of olsrd nameservice plugin with custom value. You should place a script below /etc/olsrd/nameservice.d/ instead."
		uci set "${uci_prefix}.services_change_script=$OLSR_NAMESERVICE_SERVICE_TRIGGER"
		uci set "${uci_prefix}.ignore=0"
	fi
}


# disable olsrd6. By default it is enabled. We use olsrd2 for IPv6.
olsrd6_disable() {
	trap 'error_trap olsrd6_disable "$*"' EXIT
	/etc/init.d/olsrd6 disable
}


# erwuenschte Einstellungen setzen
olsrd_enable_ondataservice
olsrd_enable_nameservice
disable_missing_olsr_modules
olsr_set_main_ip
olsr_sync_routing_tables
configure_olsrd_httpinfo_port "$OLSR_HTTP_PORT"
olsrd_enable_txtinfo
olsrd_enable_jsoninfo
olsrd6_disable

apply_changes olsrd
