#!/bin/sh /etc/rc.common
# QoSmate Autorate procd Service
# Managed by procd for automatic start/stop/respawn

USE_PROCD=1

START=99
STOP=01

AUTORATE_SCRIPT=/etc/qosmate-autorate.sh

. /lib/functions.sh

start_service() {
    local enabled wan downrate
    
    config_load qosmate || return 1
    config_get_bool enabled autorate enabled 0
    
    [ "$enabled" != "1" ] && return 0
    [ ! -x "$AUTORATE_SCRIPT" ] && return 1
    
    # Check if qosmate is running. A DOWNRATE of 0 disables ingress shaping, so no IFB
    # exists in that case and the egress root qdisc is what proves qosmate is up.
    config_get wan settings WAN
    config_get downrate settings DOWNRATE
    [ -z "$wan" ] && return 1
    case "${downrate:-0}" in
        0|*[!0-9]*) tc qdisc show dev "$wan" 2>/dev/null | grep -E -q "hfsc|cake|htb" || return 1 ;;
        *) ip link show "ifb-$wan" >/dev/null 2>&1 || return 1 ;;
    esac
    
    logger -t qosmate-autorate "Starting autorate daemon via procd"
    
    procd_open_instance
    procd_set_param command /bin/sh "$AUTORATE_SCRIPT" run
    procd_set_param respawn 3600 5 5
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_close_instance
}

stop_service() {
    logger -t qosmate-autorate "Stopping autorate daemon"
}

service_triggers() {
    procd_add_reload_trigger "qosmate"
}

reload_service() {
	restart
}
