mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-14 19:41:51 +00:00
Add choice between ping or dns to omr-tracker
This commit is contained in:
parent
7b94b8742e
commit
8eb08542c0
4 changed files with 61 additions and 26 deletions
|
@ -23,6 +23,9 @@ o.default = "2"
|
|||
o.datatype = "range(1, 100)"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "type", translate("Type"))
|
||||
o:value("ping","ping")
|
||||
o:value("dns","dns")
|
||||
|
||||
o = s:option(DynamicList, "hosts", translate("Hosts"))
|
||||
o.placeholder = "4.2.2.1"
|
||||
|
|
|
@ -73,7 +73,40 @@ _post_tracking() {
|
|||
done
|
||||
}
|
||||
|
||||
_restart
|
||||
_ping() {
|
||||
local host=$1
|
||||
local deviceip=$2
|
||||
local localip=$3
|
||||
ret=$(ping "${host}" \
|
||||
-I "${deviceip}" \
|
||||
-W "$OMR_TRACKER_TIMEOUT" \
|
||||
-c 1 \
|
||||
-q
|
||||
) && echo "$ret" | grep -sq "0% packet loss" && {
|
||||
if [ "$localip" = "yes" ]; then
|
||||
OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f4 | cut -d "." -f1)
|
||||
_update_rto "$OMR_TRACKER_LATENCY"
|
||||
fi
|
||||
return
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
_dns() {
|
||||
local host=$1
|
||||
local deviceip=$2
|
||||
ret=$(dig @"${host}" \
|
||||
-b "${deviceip}" \
|
||||
+time="$OTB_TRACKER_TIMEOUT" \
|
||||
+tries=1 \
|
||||
openmptcprouter.com
|
||||
) && echo "$ret" | grep -sq "94.23.252.192" && {
|
||||
OTB_TRACKER_LATENCY=$(echo "$ret" | awk '/Query time/{print $4}')
|
||||
_update_rto "$OTB_TRACKER_LATENCY"
|
||||
return
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
# main loop
|
||||
while true; do
|
||||
|
@ -86,36 +119,36 @@ while true; do
|
|||
if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then
|
||||
# retrieve iface ip and gateway
|
||||
OMR_TRACKER_DEVICE_IP=$(ip -4 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}')
|
||||
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
|
||||
OTB_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n")
|
||||
fi
|
||||
|
||||
# execute specific tracker
|
||||
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
|
||||
retgw=$(ping "$OMR_TRACKER_DEVICE_GATEWAY" \
|
||||
-I "$OMR_TRACKER_DEVICE_IP" \
|
||||
-W 1 \
|
||||
-c 1 \
|
||||
-q
|
||||
) && echo "$retgw" | grep -sq "0% packet loss" && {
|
||||
_ping "$OMR_TRACKER_DEVICE_GATEWAY" "$OMR_TRACKER_DEVICE_IP" "no"
|
||||
status=$?
|
||||
if ! $(exit $status); then
|
||||
# setup loop variable
|
||||
tries="$OMR_TRACKER_TRIES"
|
||||
ip route replace "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP"
|
||||
# loop until tries attempts have been reached
|
||||
while [ "$tries" -gt 0 ]; do
|
||||
ret=$(ping "$OMR_TRACKER_HOST" \
|
||||
-I "$OMR_TRACKER_DEVICE_IP" \
|
||||
-W "$OMR_TRACKER_TIMEOUT" \
|
||||
-c 1 \
|
||||
-q
|
||||
) && echo "$ret" | grep -sq "0% packet loss" && {
|
||||
OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f4 | cut -d "." -f1)
|
||||
_update_rto "$OMR_TRACKER_LATENCY"
|
||||
if [ "$OMR_TRACKER_TYPE" = "ping" ]; then
|
||||
_ping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes"
|
||||
status=$?
|
||||
elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then
|
||||
_dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes"
|
||||
status=$?
|
||||
fi
|
||||
if ! $(exit $status); then
|
||||
OMR_TRACKER_STATUS="OK"
|
||||
break
|
||||
}
|
||||
fi
|
||||
tries=$((tries - 1))
|
||||
OMR_TRACKER_TIMEOUT=$((OMR_TRACKER_TIMEOUT * 2))
|
||||
done
|
||||
ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP"
|
||||
}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -4,7 +4,5 @@ config defaults 'defaults'
|
|||
option timeout '1'
|
||||
option tries '4'
|
||||
option interval '2'
|
||||
option type 'ping'
|
||||
option options ''
|
||||
|
||||
config rule_type 'tunnel'
|
||||
option tries '5'
|
||||
|
|
|
@ -11,13 +11,14 @@
|
|||
|
||||
_validate_section() {
|
||||
local tmp_hosts=$hosts tmp_timeout=$timeout tmp_tries=$tries
|
||||
local tmp_interval=$interval tmp_options=$options
|
||||
local tmp_interval=$interval tmp_options=$options tmp_type=$type
|
||||
|
||||
uci_validate_section omr-tracker "$1" "$2" \
|
||||
'hosts:list(host)' \
|
||||
'timeout:uinteger' \
|
||||
'tries:uinteger' \
|
||||
'hosts:list(host)' \
|
||||
'timeout:uinteger' \
|
||||
'tries:uinteger' \
|
||||
'interval:uinteger' \
|
||||
'type:string' \
|
||||
'options:string'
|
||||
|
||||
[ -z "$hosts" ] && hosts=$tmp_hosts
|
||||
|
@ -25,6 +26,7 @@ _validate_section() {
|
|||
[ -z "$tries" ] && tries=$tmp_tries
|
||||
[ -z "$interval" ] && interval=$tmp_interval
|
||||
[ -z "$options" ] && options=$tmp_options
|
||||
[ -z "$type" ] && options=$tmp_type
|
||||
}
|
||||
|
||||
_launch_tracker() {
|
||||
|
@ -35,9 +37,8 @@ _launch_tracker() {
|
|||
local interface_type
|
||||
config_get interface_type "$1" type
|
||||
|
||||
local hosts timeout tries interval options
|
||||
local hosts timeout tries interval options type
|
||||
_validate_section "defaults" "defaults"
|
||||
_validate_section "rule_type" "$interface_type"
|
||||
_validate_section "interface" "$1"
|
||||
|
||||
local ifname ip4table
|
||||
|
|
Loading…
Reference in a new issue