mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Tracker type for an "interface" does not inherit global configuration and always be set "ping", or needs be set explicitly
165 lines
5.2 KiB
Bash
Executable file
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
|
|
}
|