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

START=90
USE_PROCD=1

proc_instance_add() {
	procd_open_instance
	procd_set_param command $@
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}

nas_optimizer() {
	proc_instance_add pbr-optimizer -m 1 -o
}

nat_optimizer() {
	proc_instance_add pbr-optimizer -m 2 -o
}

balancing_optimizer() {
	proc_instance_add pbr-optimizer -m 2 -o
}

wifi_optimizer() {
	proc_instance_add pbr-optimizer -m 3 -o
}

optimizer_auto() {
	proc_instance_add pbr-optimizer -m 0 -o
	proc_instance_add irqbalance -t 5 -f
}

optimizer_disable() {
	proc_instance_add pbr-optimizer -m 0
}

start_optimizer() {
	local enable
	local mode
	local system
	
	config_get_bool enable $1 enable
	config_get_bool usb3_disable $1 usb3_disable
	config_get mode $1 mode

	[ "$usb3_disable" == 1 ] && {
		echo "Disable xHCI SuperSpeed Mode!"
		rmmod xhci-hcd
		sleep 1
		insmod xhci-hcd usb3_disable=1
	}
	
	[ "$enable" == 1 ] || return 0
	[ -z "$mode" ] && return 0

	case $mode in
   	 nas)
		config_get process $1 process
		nas_optimizer $process
		;;
	wifi)
		wifi_optimizer
    	;;
	
	nat)
	    nat_optimizer
    	;;
	
	balance)
		balancing_optimizer
    	;;
	auto) 
		optimizer_auto
   	 ;;
	*) 
		optimizer_disable
   	 ;;

	esac

	return 0
}

start_service() {
	config_load optimizer
	config_foreach start_optimizer optimizer
}

reload_service() {
	restart
}

service_triggers()
{
	procd_add_reload_trigger "optimizer"
}

