153 lines
3.1 KiB
Bash
Executable File
153 lines
3.1 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
#
|
|
# Copyright (C) 2016-2025 eGloo Incorporated
|
|
# Copyright (C) 2025 CyberMind.fr (SecuBox Integration)
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
|
|
START=50
|
|
STOP=50
|
|
|
|
USE_PROCD=1
|
|
PROG=/usr/sbin/netifyd
|
|
|
|
function append_params() {
|
|
procd_append_param command "$@"
|
|
}
|
|
|
|
function append_ifopts() {
|
|
local filter=0
|
|
local filter_expr=
|
|
|
|
for a in $1; do
|
|
case $a in
|
|
-F|--device-filter)
|
|
filter=1
|
|
procd_append_param command "$a"
|
|
;;
|
|
-*)
|
|
if [ $filter -gt 0 ]; then
|
|
procd_append_param command "${filter_expr#\ }"
|
|
filter=0; filter_expr=
|
|
fi
|
|
procd_append_param command "$a"
|
|
;;
|
|
*)
|
|
if [ $filter -gt 0 ]; then
|
|
a=${a#\"}; a=${a%\"}; a=${a#\'}; a=${a%\'}
|
|
filter_expr="$filter_expr $a"
|
|
else
|
|
procd_append_param command "$a"
|
|
fi
|
|
esac
|
|
done
|
|
|
|
if [ $filter -gt 0 ]; then
|
|
procd_append_param command "${filter_expr#\ }"
|
|
fi
|
|
}
|
|
|
|
function append_internal_if() {
|
|
append_ifopts "-I $@"
|
|
}
|
|
|
|
function append_external_if() {
|
|
append_ifopts "-E $@"
|
|
}
|
|
|
|
start_netifyd() {
|
|
local autoconfig enabled instance options
|
|
|
|
instance="$1"
|
|
config_get_bool enabled "$instance" enabled 0
|
|
[ "$enabled" -eq 0 ] && return 0
|
|
|
|
# Load kernel modules if needed
|
|
[ -f /usr/share/netifyd/functions.sh ] && {
|
|
. /usr/share/netifyd/functions.sh
|
|
load_modules
|
|
}
|
|
|
|
procd_open_instance
|
|
procd_set_param file /etc/netifyd.conf
|
|
procd_set_param term_timeout 30
|
|
procd_set_param respawn 3600 15 0
|
|
procd_set_param command $PROG -R
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
|
|
# Add custom options
|
|
config_list_foreach "$instance" options append_params
|
|
|
|
# Auto-detect interfaces if enabled
|
|
config_get_bool autoconfig "$instance" autoconfig 1
|
|
|
|
if [ "$autoconfig" -gt 0 ]; then
|
|
NETIFYD_AUTODETECT=yes
|
|
options="$(auto_detect_options)"
|
|
[ -n "$options" ] && procd_append_param command $options
|
|
fi
|
|
|
|
# Manual interface configuration
|
|
config_list_foreach "$instance" internal_if append_internal_if
|
|
config_list_foreach "$instance" external_if append_external_if
|
|
|
|
procd_close_instance
|
|
}
|
|
|
|
start_service() {
|
|
# Ensure directories exist
|
|
[ ! -d /var/run/netifyd ] && mkdir -p /var/run/netifyd
|
|
[ ! -d /etc/netify.d ] && mkdir -p /etc/netify.d
|
|
|
|
# Set permissions
|
|
chmod 755 /var/run/netifyd
|
|
chmod 755 /etc/netify.d
|
|
|
|
# Load configuration
|
|
config_load netifyd
|
|
config_foreach start_netifyd netifyd
|
|
}
|
|
|
|
stop_service() {
|
|
# Cleanup
|
|
rm -f /var/run/netifyd/*.pid 2>/dev/null
|
|
}
|
|
|
|
reload_service() {
|
|
procd_send_signal netifyd
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "netifyd"
|
|
}
|
|
|
|
# Auto-detect internal/external interfaces
|
|
auto_detect_options() {
|
|
local options=""
|
|
local internal=""
|
|
local external=""
|
|
|
|
# Try to detect LAN interface (br-lan or eth0)
|
|
if [ -d "/sys/class/net/br-lan" ]; then
|
|
internal="br-lan"
|
|
elif [ -d "/sys/class/net/eth0" ]; then
|
|
internal="eth0"
|
|
fi
|
|
|
|
# Try to detect WAN interface
|
|
if [ -d "/sys/class/net/br-wan" ]; then
|
|
external="br-wan"
|
|
elif [ -d "/sys/class/net/eth1" ]; then
|
|
external="eth1"
|
|
elif [ -d "/sys/class/net/wan" ]; then
|
|
external="wan"
|
|
fi
|
|
|
|
# Build options
|
|
[ -n "$internal" ] && options="$options -I $internal"
|
|
[ -n "$external" ] && options="$options -E $external"
|
|
|
|
echo "$options"
|
|
}
|