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