#!/bin/sh /etc/rc.common
# velmo-guardiano: il nome di ogni connessione dei televisori (ADR 0017).
# Prima del firewall (19): quando fw3 carica la coda, c'è già chi la legge.

START=18
STOP=10
USE_PROCD=1

start_service() {
	. /etc/velmo/router.conf
	[ -r /var/run/velmo/dati ] || /usr/lib/velmo/dati.sh prepara
	. /var/run/velmo/dati
	modprobe nfnetlink_queue 2>/dev/null
	procd_open_instance
	procd_set_param command /usr/sbin/velmo-guardiano \
		-coda "$VELMO_GUARDIANO_CODA" \
		-liste /etc/velmo/guardiano \
		-registro "$VELMO_DATI/guardiano/connessioni.log" \
		-registro-kb "$GUARDIANO_KB" \
		-stato-liste /var/run/velmo/guardiano-liste.json
	# La cartella delle liste consegnate da un aggiornamento (spec 2026-09-21
	# §5.1): senza, contano solo quelle incorporate nel binario.
	procd_append_param command -liste-dir /etc/velmo/liste
	# Dialix (spec 2026-09-30-dialix §3.1): le decisioni e i byte dei flussi su
	# un socket che velmod apre solo durante una partita. Senza ascoltatore non
	# costa niente.
	procd_append_param command -dialix /var/run/velmo/dialix/dialix.sock
	# L'attesa di un SYN che non ha ancora portato dati: vuota resta quella del
	# codice (120 s). Si alza solo per misurare quanto pesa il taglio delle
	# connessioni aperte in anticipo (spec §14.15).
	[ -n "${VELMO_ATTESA_SYN:-}" ] && procd_append_param command -attesa-syn "$VELMO_ATTESA_SYN"
	# Un solo thread di Go che esegue codice: il ciclo del guardiano è uno solo,
	# e con GOMAXPROCS predefinito (4) il runtime a riposo costa il 4,2 % di un
	# core su questo MIPS, con 1 lo 0,9 % (misura del 15 settembre 2026, spec §11).
	# Il fuso orario, come per velmod (vedi /etc/init.d/velmod): il guardiano
	# scrive gli istanti con il proprio scarto, e in UTC erano tutti «Z».
	[ -n "$VELMO_FUSO" ] || VELMO_FUSO=$(uci -q get system.@system[0].zonename)
	procd_set_param env GOMAXPROCS=1 ${VELMO_FUSO:+TZ=$VELMO_FUSO}
	# Riparte sempre, senza limite di tentativi (Restart=always di main).
	procd_set_param respawn 3600 2 0
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}

reload_service() {
	procd_send_signal velmo-guardiano '*' HUP
}
