small-packages/openwrt-bandix/files/bandix.init
2026-05-10 09:48:30 +08:00

161 lines
5.0 KiB
Bash

#!/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
}