1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00
openmptcprouter-feeds/omr-tracker/files/etc/init.d/omr-tracker
Ivan Revyakin b9e6f3adc5
always type is "ping" for an "interface"
Tracker type for an "interface" does not inherit global configuration and always be set "ping", or needs be set explicitly
2019-11-11 17:38:16 +03:00

165 lines
5.2 KiB
Bash
Executable file

#!/bin/sh /etc/rc.common
# shellcheck disable=SC2039
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
# Released under GPL 3. See LICENSE for the full terms.
# shellcheck disable=SC2034
{
START=90
STOP=10
USE_PROCD=1
}
_validate_section() {
local tmp_hosts=$hosts tmp_timeout=$timeout tmp_tries=$tries
local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled
uci_validate_section omr-tracker "$1" "$2" \
'hosts:list(host)' \
'timeout:uinteger' \
'tries:uinteger' \
'interval:uinteger' \
'interval_tries:uinteger' \
'type:string:undef' \
'enabled:bool:1' \
'options:string'
[ -z "$hosts" ] && hosts=$tmp_hosts
[ -z "$timeout" ] && timeout=$tmp_timeout
[ -z "$tries" ] && tries=$tmp_tries
[ -z "$interval" ] && interval=$tmp_interval
[ -z "$interval_tries" ] && interval_tries=$tmp_interval_tries
[ -z "$options" ] && options=$tmp_options
[ "$type" = "undef" ] && type=${tmp_type:-ping}
[ -z "$enabled" ] && enabled=$tmp_enabled
}
_launch_tracker() {
case "$1" in
loopback|lan*|if0*) return;;
esac
local hosts timeout tries interval interval_tries options type enabled
_validate_section "defaults" "defaults"
_validate_section "interface" "$1"
local ifname ip4table
ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
[ -z "$ifname" ] && ifname=$(ifstatus "$1_4" | jsonfilter -q -e '@["l3_device"]')
[ -z "$ifname" ] && config_get ifname "$1" ifname
config_get multipath "$1" multipath
config_get ifenabled "$1" auto
config_get gateway "$1" gateway
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && return
[ "${ifenabled}" = "0" ] && return
[ "${enabled}" = "0" ] && return
[ -z "${interval_tries}" ] && interval_tries=1
procd_open_instance
# shellcheck disable=SC2086
procd_set_param command /bin/omr-tracker "$1" $options
procd_append_param env "OMR_TRACKER_HOSTS=$hosts"
procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout"
procd_append_param env "OMR_TRACKER_TRIES=$tries"
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
procd_append_param env "OMR_TRACKER_INTERVAL_TRIES=$interval_tries"
procd_append_param env "OMR_TRACKER_TABLE=$ip4table"
procd_append_param env "OMR_TRACKER_DEVICE=$ifname"
procd_append_param env "OMR_TRACKER_DEVICE_GATEWAY=$gateway"
procd_append_param env "OMR_TRACKER_TYPE=$type"
procd_set_param limits nofile="51200 51200"
procd_set_param respawn 0 10 0
procd_set_param stderr 1
procd_close_instance
}
_initialize_shadowsocks_tracker() {
local redir_tcp server tracker_server
config_get redir_tcp ss_rules redir_tcp
config_get server $redir_tcp server
config_get tracker_server "tracker" server
config_get ss_disabled $server disabled 0
[ -z "$tracker_server" ] && {
logger -t "omr-tracker" "Create ShadowSock tracker ss_local..."
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.tracker=ss_local
set shadowsocks-libev.tracker.server=$server
set shadowsocks-libev.tracker.local_address="127.0.0.1"
set shadowsocks-libev.tracker.local_port=1111
set shadowsocks-libev.tracker.mode=tcp_and_udp
set shadowsocks-libev.tracker.timeout=600
set shadowsocks-libev.tracker.fast_open=1
set shadowsocks-libev.tracker.syslog=0
set shadowsocks-libev.tracker.reuse_port=1
set shadowsocks-libev.tracker.mptcp=1
set shadowsocks-libev.tracker.verbose=0
commit shadowsocks-libev
EOF
/etc/init.d/shadowsocks-libev restart
}
[ -n "$tracker_server" ] && [ "$server" = "$tracker_server" ] || {
logger -t "omr-tracker" "Set ShadowSock tracker to current server ($tracker_server -> $server)..."
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.tracker.server=$server
commit shadowsocks-libev
EOF
/etc/init.d/shadowsocks-libev restart
}
}
_launch_shadowsocks_tracker() {
local hosts timeout tries interval local_port enabled
[ "$1" = "tracker" ] || return
_validate_section "shadowsocks" "shadowsocks"
config_get local_port "$1" local_port
local disabled
config_get disabled "$1" disabled 0
[ "$enabled" = "0" ] || [ "$disabled" = "1" ] && return
procd_open_instance
# shellcheck disable=SC2086
procd_set_param command /bin/omr-tracker-ss "$1"
procd_append_param env "OMR_TRACKER_HOSTS=$hosts"
procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout"
procd_append_param env "OMR_TRACKER_TRIES=$tries"
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port"
procd_set_param limits nofile="51200 51200"
procd_set_param respawn 0 10 0
procd_set_param stderr 1
procd_close_instance
}
start_service() {
local ss_disabled
logger -t "omr-tracker" "Launching..."
config_load shadowsocks-libev
_initialize_shadowsocks_tracker
config_load network
config_foreach _launch_tracker interface
if [ "$ss_disabled" != "1" ]; then
config_load shadowsocks-libev
config_foreach _launch_shadowsocks_tracker ss_local
else
/etc/init.d/shadowsocks-libev rules_down
fi
logger -t "omr-tracker" "Launched"
}
service_triggers() {
procd_add_reload_trigger omr-tracker network shadowsocks-libev
}
reload_service() {
stop
start
}