#!/bin/sh /etc/rc.common
# Copyright (C) 2024 OpenWrt.org

START=99
STOP=10

USE_PROCD=1

PROG=/usr/sbin/bpftune
CONFIGFILE=/etc/config/bpftune

start_service() {
    local enabled logging_stdout tuners_disabled tuners_allowed learning_rate daemon rollback legacy cgroup libdir respawn_threshold respawn_timeout respawn_retry

    config_load bpftune
    config_get_bool enabled config 'enabled' '0'
    config_get_bool logging_stdout config 'logging_stdout' '0'
    config_get learning_rate config 'learning_rate' ''
    config_get_bool daemon config 'daemon' '1'
    config_get_bool rollback config 'rollback' '0'
    config_get_bool legacy config 'legacy' '0'
    config_get cgroup config 'cgroup' ''
    config_get libdir config 'libdir' ''
    config_get tuners_disabled config 'tuners_disabled' ''
    config_get tuners_allowed config 'tuners_allowed' ''
    config_get respawn_threshold config 'respawn_threshold' '3600'
    config_get respawn_timeout config 'respawn_timeout' '5'
    config_get respawn_retry config 'respawn_retry' '5'

    [ "$enabled" -eq 0 ] && {
	echo "bpftune is disabled in config"
	return 1
    }

    procd_open_instance
    procd_set_param command "$PROG"

    [ "$daemon" -eq 1 ] && procd_append_param command -D
    [ "$rollback" -eq 1 ] && procd_append_param command -R
    [ "$legacy" -eq 1 ] && procd_append_param command -L
    [ "$logging_stdout" -eq 1 ] && procd_append_param command -s
    [ -n "$learning_rate" ] && procd_append_param command -r "$learning_rate"
    [ -n "$cgroup" ] && procd_append_param command -c "$cgroup"
    [ -n "$libdir" ] && procd_append_param command -l "$libdir"

    [ -n "$tuners_disabled" ] && {
	for tuner in $tuners_disabled; do
	    procd_append_param command -d "$tuner"
	done
    }

    [ -n "$tuners_allowed" ] && {
	for tuner in $tuners_allowed; do
	    procd_append_param command -a "$tuner"
	done
    }

    procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
    procd_set_param stdout 1
    procd_set_param stderr 1

    procd_close_instance
}

service_triggers() {
    procd_add_reload_trigger "bpftune"
}

reload_service() {
    stop
    start
}

status() {
    $PROG -S
}

query() {
    $PROG -q
}