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