mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 19:11:51 +00:00
166 lines
5.3 KiB
Bash
Executable file
166 lines
5.3 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 "${hosts}" ] && [ "$type" != "none" ] && 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" ] || [ -z "$hosts" ] && 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
|
|
}
|