OpenAppFilter/open-app-filter/files/appfilter.init
sbwml 38bd822475 open-app-filter: init.d: highly available
Signed-off-by: sbwml <admin@cooluc.com>
2024-03-01 00:49:57 +08:00

104 lines
2.6 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
. /usr/share/libubox/jshn.sh
. /lib/functions.sh
START=96
USE_PROCD=1
OAFD_BIN="/usr/bin/oafd"
FEATURE_FILE="/tmp/feature.cfg"
CLASS_FILE="/tmp/app_class.txt"
disable_offload_nat6()
{
if [ $(uci -q show firewall.@defaults[0] | grep -c flow_offloading) -ge 1 ]; then
echo flow_offloading > /etc/appfilter/offload_mode
uci -q del firewall.@defaults[0].flow_offloading
uci commit firewall
/etc/init.d/firewall reload >/dev/null 2>&1
elif [ $(uci -q show firewall.@defaults[0] | grep -c shortcut_fe) -ge 1 ]; then
uci -q get firewall.@defaults[0].shortcut_fe_module > /etc/appfilter/offload_mode
uci -q del firewall.@defaults[0].shortcut_fe
uci -q del firewall.@defaults[0].shortcut_fe_module
uci commit firewall
/etc/init.d/firewall reload >/dev/null 2>&1
/etc/init.d/shortcut-fe restart
fi
if [ $(uci -q show firewall.@defaults[0] | grep -c nat6) -ge 1 ]; then
true > /etc/appfilter/firewall_nat6
uci -q del firewall.@defaults[0].nat6
uci commit firewall
/etc/init.d/nat6 reload >/dev/null 2>&1
fi
}
enable_offload()
{
offload_mode=$(cat /etc/appfilter/offload_mode)
rm -f /etc/appfilter/offload_mode
if [ "$offload_mode" = "flow_offloading" ]; then
uci set firewall.@defaults[0].flow_offloading='1'
uci commit firewall
/etc/init.d/firewall reload >/dev/null 2>&1
else
uci set firewall.@defaults[0].shortcut_fe='1'
uci set firewall.@defaults[0].shortcut_fe_module="$offload_mode"
uci commit firewall
/etc/init.d/firewall reload >/dev/null 2>&1
/etc/init.d/shortcut-fe restart
fi
}
enable_nat6()
{
rm -f /etc/appfilter/firewall_nat6
uci set firewall.@defaults[0].nat6='1'
uci commit firewall
/etc/init.d/nat6 reload >/dev/null 2>&1
}
service_triggers()
{
procd_add_reload_trigger "appfilter"
}
stop_service(){
killall -9 oafd >/dev/null 2>&1
rmmod oaf >/dev/null 2>&1
[ -f "/etc/appfilter/offload_mode" ] && enable_offload
[ -f "/etc/appfilter/firewall_nat6" ] && enable_nat6
}
start_service(){
if [ "$(uci -q get appfilter.global.enable)" != 1 ]; then
stop_service
return 1
fi
local update
rm -f $FEATURE_FILE
update=`uci get appfilter.feature.update`
if [ x"1" == x"$update" ];then
ln -s /etc/appfilter/feature.cfg $FEATURE_FILE
else
uci get luci.languages.zh_cn >/dev/null 2>&1
if [ $? -eq 0 ];then
test -f $FEATURE_FILE && rm $FEATURE_FILE
ln -s /etc/appfilter/feature_cn.cfg $FEATURE_FILE
else
ln -s /etc/appfilter/feature_en.cfg $FEATURE_FILE
fi
fi
disable_offload_nat6
gen_class.sh /tmp/feature.cfg
insmod oaf
/usr/bin/oaf_rule reload
procd_open_instance
procd_set_param respawn 60 5 5
procd_set_param stderr 1
procd_set_param command "$OAFD_BIN"
procd_close_instance
}