op-packages/mnh/files/mnh.init
github-actions[bot] 32600acc60 🌴 Sync 2026-03-05 23:51:42
2026-03-05 23:51:42 +08:00

73 lines
1.6 KiB
Bash

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=99
NAME=mnh
PROG=/usr/bin/$NAME
_err() {
echo "$*" >&2
logger -p daemon.err -t "$NAME" "$*"
}
parse() {
local name="$1"
local type="$2"
local disabled type server id port protocol mode service
uci_validate_section "$NAME" "$type" "$name" \
'disabled:bool:0' \
'type:or("tcp","udp")' \
'server:regex("[a-zA-Z0-9\-]*?(\.[a-zA-Z0-9\-]*)*(\:[0-9]*)?")' \
'id:string' \
'port:port:0' \
'protocol:string:mnh' \
'mode:string:proxy' \
'service:regex("[a-zA-Z0-9\-]*?(\.[a-zA-Z0-9\-]*)*\:[0-9]*")' \
|| return 1
[ "$disabled" = 0 ] || return 1
mkdir -p "/var/run/mnh"
touch "/var/run/mnh/$name"
chown nobody "/var/run/mnh/$name"
if fw4 >/dev/null; then
nft list chain inet fw4 "mnh" >/dev/null 2>&1 || fw4 reload
else
iptables -t "filter" -L "MNH" >/dev/null 2>&1 || fw3 reload
fi
local hook="/usr/share/mnh/hook.sh '$name' '$type' '%e' '%m' '%p' '%a'"
procd_open_instance "$name"
procd_set_param command "$PROG" "$type" --routerForward none --event-hook "$hook" --server "$server" --mode "$mode" --service "$service" --port "$port" --id "$id"
procd_set_param stdout 1
procd_set_param stderr 1
# procd_set_param user "nobody"
# [ $respawn -eq 1 ] && procd_set_param respawn
procd_close_instance
}
start_service() {
config_load "$NAME"
config_foreach parse instance
}
service_triggers() {
procd_add_reload_trigger "$NAME"
}
stop_service() {
if fw4 >/dev/null; then
nft flush chain inet fw4 "mnh" 2>/dev/null
else
iptables -t "filter" -F "MNH" 2>/dev/null
fi
}
reload_service() {
restart
}