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

START=99
USE_PROCD=1
PROG=/usr/bin/bandix

service_triggers() {
	procd_add_reload_trigger "bandix"
}

reload_service() {
	restart
}

start_service() {
	local iface
	local port
	local data_dir
	local log_level
	local tc_order
	local tc_backend
	local tc_priority
	local netlink_priority
	local tcx_anchor_ingress_id
	local tcx_anchor_egress_id
	local traffic_enabled
	local traffic_realtime_window
	local traffic_flush_interval
	local traffic_enable_storage
	local traffic_export_url
	local traffic_event_url
	local traffic_additional_subnets
	local traffic_exclude_iface_device
	local traffic_neighbor_flush_enable
	local traffic_neighbor_flush_interval
	local connections_enabled
	local dns_enabled
	local dns_max_records
	local dns_enable_storage
	local dns_flush_interval
	
	config_load 'bandix'
	config_get iface 'general' 'iface'
	config_get port 'general' 'port'
	config_get data_dir 'general' 'data_dir'
	config_get log_level 'general' 'log_level'
	config_get tc_order 'general' 'tc_order'
	config_get tc_backend 'general' 'tc_backend'
	config_get tc_priority 'general' 'tc_priority'
	config_get netlink_priority 'general' 'netlink_priority'
	config_get tcx_anchor_ingress_id 'general' 'tcx_anchor_ingress_id'
	config_get tcx_anchor_egress_id 'general' 'tcx_anchor_egress_id'
	config_get_bool traffic_enabled 'traffic' 'enabled'
	config_get traffic_realtime_window 'traffic' 'traffic_realtime_window'
	config_get traffic_flush_interval 'traffic' 'traffic_flush_interval'
	config_get_bool traffic_enable_storage 'traffic' 'traffic_enable_storage'
	config_get traffic_export_url 'traffic' 'traffic_export_url'
	config_get traffic_event_url 'traffic' 'traffic_event_url'
	config_get traffic_additional_subnets 'traffic' 'traffic_additional_subnets'
	config_get_bool traffic_exclude_iface_device 'traffic' 'traffic_exclude_iface_device' '0'
	config_get_bool traffic_neighbor_flush_enable 'traffic' 'traffic_neighbor_flush_enable' '0'
	config_get traffic_neighbor_flush_interval 'traffic' 'traffic_neighbor_flush_interval' '600'
	config_get_bool connections_enabled 'connections' 'enabled'
	config_get_bool dns_enabled 'dns' 'enabled'
	config_get dns_max_records 'dns' 'dns_max_records'
	config_get_bool dns_enable_storage 'dns' 'dns_enable_storage'
	config_get dns_flush_interval 'dns' 'dns_flush_interval'
	

	[ "$connections_enabled" != 1 ] && [ "$traffic_enabled" != 1 ] && [ "$dns_enabled" != 1 ] && return 1
	
	# 构建基础命令行参数
	local args="--iface $iface --port $port --data-dir $data_dir"
	if [ -n "$log_level" ]; then
		args="$args --log-level $log_level"
	fi
	if [ -z "$tc_order" ]; then
		case "$tc_priority" in
			1) tc_order="first" ;;
			65535) tc_order="last" ;;
			*) tc_order="default" ;;
		esac
	fi
	[ -z "$tc_order" ] && tc_order="default"
	if [ -n "$tc_order" ]; then
		args="$args --tc-order $tc_order"
	fi
	[ -z "$tc_backend" ] && tc_backend="auto"
	if [ -n "$tc_backend" ]; then
		args="$args --tc-backend $tc_backend"
	fi
	if [ -n "$netlink_priority" ]; then
		args="$args --netlink-priority $netlink_priority"
	fi
	if [ -n "$tcx_anchor_ingress_id" ]; then
		args="$args --tcx-anchor-ingress-id $tcx_anchor_ingress_id"
	fi
	if [ -n "$tcx_anchor_egress_id" ]; then
		args="$args --tcx-anchor-egress-id $tcx_anchor_egress_id"
	fi
	
	# 添加流量监控相关参数
	if [ "$traffic_enabled" -eq 1 ]; then
		args="$args --enable-traffic"
	fi
	if [ -n "$traffic_realtime_window" ]; then
		args="$args --traffic-realtime-window $traffic_realtime_window"
	fi
	if [ -n "$traffic_flush_interval" ]; then
		args="$args --traffic-flush-interval $traffic_flush_interval"
	fi
	if [ "$traffic_enable_storage" -eq 1 ]; then
		args="$args --traffic-enable-storage"
	fi
	if [ -n "$traffic_export_url" ]; then
		args="$args --traffic-export-url $traffic_export_url"
	fi
	if [ -n "$traffic_event_url" ]; then
		args="$args --traffic-event-url $traffic_event_url"
	fi
	if [ -n "$traffic_additional_subnets" ]; then
		args="$args --traffic-additional-subnets $traffic_additional_subnets"
	fi
	if [ "$traffic_exclude_iface_device" -eq 1 ]; then
		args="$args --traffic-exclude-iface-device"
	fi
	if [ "$traffic_neighbor_flush_enable" -eq 1 ]; then
		args="$args --traffic-neighbor-flush-enable"
	fi
	if [ -n "$traffic_neighbor_flush_interval" ]; then
		args="$args --traffic-neighbor-flush-interval $traffic_neighbor_flush_interval"
	fi
	
	# 添加连接统计监控参数
	if [ "$connections_enabled" -eq 1 ]; then
		args="$args --enable-connection"
	fi
	
	# 添加 DNS 监控参数
	if [ "$dns_enabled" -eq 1 ]; then
		args="$args --enable-dns"
	fi
	if [ -n "$dns_max_records" ]; then
		args="$args --dns-max-records $dns_max_records"
	fi
	if [ "$dns_enable_storage" -eq 1 ]; then
		args="$args --dns-enable-storage"
	fi
	if [ -n "$dns_flush_interval" ]; then
		args="$args --dns-flush-interval $dns_flush_interval"
	fi
	
	procd_open_instance bandix
	procd_set_param command $PROG $args
	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-60} ${respawn_retry:-3}
	procd_set_param stderr 1
	procd_set_param stdout 1
	procd_set_param pidfile /var/run/bandix.pid
	procd_close_instance
}
