diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua
index 383498a75..eb84bc718 100755
--- a/luci-app-mptcp/luasrc/controller/mptcp.lua
+++ b/luci-app-mptcp/luasrc/controller/mptcp.lua
@@ -17,6 +17,8 @@ function index()
entry({"admin", "network", "mptcp", "mptcp_fullmesh_data"}, post("mptcp_fullmesh_data")).leaf = true
entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true
entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true
+ entry({"admin", "network", "mptcp", "mptcp_monitor"}, template("mptcp/mptcp_monitor"), _("MPTCP monitoring"), 6).leaf = true
+ entry({"admin", "network", "mptcp", "mptcp_monitor_data"}, post("mptcp_monitor_data")).leaf = true
end
function interface_bandwidth(iface)
@@ -206,6 +208,21 @@ function mptcp_fullmesh_data()
return
end
+function mptcp_monitor_data()
+ luci.http.prepare_content("text/plain")
+ local fullmesh
+ fullmesh = io.popen("cat /proc/net/mptcp_net/snmp")
+ if fullmesh then
+ while true do
+ local ln = fullmesh:read("*l")
+ if not ln then break end
+ luci.http.write(ln)
+ luci.http.write("\n")
+ end
+ end
+ return
+end
+
function mptcp_connections_data()
luci.http.prepare_content("text/plain")
local connections
diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm
new file mode 100644
index 000000000..ec4eb5606
--- /dev/null
+++ b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm
@@ -0,0 +1,42 @@
+<%+header%>
+
+
+
+
+<% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %>
+
+
+
+
+<%+footer%>
diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
index b86f4d287..858ae5798 100755
--- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
+++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
@@ -1116,6 +1116,7 @@ function interfaces_status()
local multipath = section["multipath"]
local enabled = section["auto"]
local proto = section["proto"] or ""
+ local ipv6 = section["ipv6"] or "0"
--if not ipaddr or not gateway then return end
-- Don't show if0 in the overview
@@ -1130,8 +1131,8 @@ function interfaces_status()
--end
duplicateif = false
- if ifname ~= "" and ifname ~= nil then
- if allintf[ifname] and not section["ifname"]:match("^@.*") then
+ if ifname ~= "" and ifname ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then
+ if allintf[ifname] then
connectivity = "ERROR"
duplicateif = true
else
@@ -1151,10 +1152,10 @@ function interfaces_status()
if ipaddr == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then
ipaddr = ut.trim(sys.exec("ip -4 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'"))
end
- if ip6addr == "" and ifname ~= nil and ifname ~= "" then
+ if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then
ip6addr = ut.trim(sys.exec("ip -6 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'"))
end
- if ip6addr == "" and ifname ~= nil and ifname ~= "" then
+ if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then
ip6addr = ut.trim(sys.exec("ip -6 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'"))
end
if ipaddr == "" and ip6addr == "" then
@@ -1199,13 +1200,15 @@ function interfaces_status()
if proto ~= "dhcpv6" then
gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
end
- gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
+ if ipv6 == "1" or ipv6 == "auto" then
+ gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
+ end
end
if gateway == "" and proto ~= "dhcpv6" then
gateway = get_gateway(interface)
end
- if gateway == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then
+ if gateway == "" and ifname ~= nil and ifname ~= "" and ipv6 ~= "1" and ipv6 ~= "auto" then
if fs.access("/sys/class/net/" .. ifname) then
gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'"))
if gateway == "" then
@@ -1213,10 +1216,10 @@ function interfaces_status()
end
end
end
- if gateway6 == "" then
+ if gateway6 == "" and (ipv6 == "1" or ipv6 == "auto") then
gateway6 = get_gateway6(interface)
end
- if gateway6 == "" and ifname ~= nil and ifname ~= "" then
+ if gateway6 == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then
if fs.access("/sys/class/net/" .. ifname) then
gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'"))
if gateway6 == "" then
diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking
index 09519061a..f383b11ce 100755
--- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking
+++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking
@@ -206,13 +206,29 @@ set_routes_intf6() {
#multipath_current_config=$(multipath $interface_if | grep 'deactivated')
interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up")
if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then
- interface_gw="$(uci -q get network.$INTERFACE.gateway)"
+ interface_gw="$(uci -q get network.$INTERFACE.ip6gw)"
+ interface_ip6="$(uci -q get network.$INTERFACE.ip6)"
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n")
+ fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n")
+ fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
@@ -300,12 +316,28 @@ set_route_balancing6() {
interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up")
if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
+ interface_ip6="$(uci -q get network.$INTERFACE.ip6)"
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n")
+ fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n")
+ fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
+ if [ -z "$interface_gw" ]; then
+ interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n")
+ fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
@@ -355,15 +387,15 @@ set_server_all_routes() {
config_foreach set_routes_intf interface
uintf="$(echo $routesintf | awk '{print $5}')"
uintfb="$(echo $routesintfbackup | awk '{print $5}')"
- if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then
+ if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then
while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do
ip r del $serverip
done
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf"
- ip route replace $serverip scope global $routesintf
- [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')"
+ ip route replace $serverip scope global metric 1 $routesintf
+ [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')"
fi
- if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then
+ if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE"
ip route replace $serverip scope global metric 999 $routesintfbackup
fi
@@ -394,20 +426,20 @@ set_server_all_routes6() {
nbintf6=0
nbintfb6=0
config_load network
- config_foreach set_routes_intf interface
- uintf="$(echo $routesintf | awk '{print $5}')"
- uintfb="$(echo $routesintfbackup | awk '{print $5}')"
- if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then
+ config_foreach set_routes_intf6 interface
+ uintf="$(echo $routesintf6 | awk '{print $5}')"
+ uintfb="$(echo $routesintfbackup6 | awk '{print $5}')"
+ if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then
while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do
ip -6 r del $serverip
done
- [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf"
- ip -6 route replace $serverip scope global $routesintf
- [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')"
+ [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6"
+ ip -6 route replace $serverip scope global metric 1 $routesintf6
+ [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')"
fi
- if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then
- [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE"
- ip -6 route replace $serverip scope global metric 999 $routesintfbackup
+ if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then
+ [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE"
+ ip -6 route replace $serverip scope global metric 999 $routesintfbackup6
fi
fi
}
diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4
index c7eba5bfa..8bf094a50 100755
--- a/omr-6in4/files/bin/omr-6in4
+++ b/omr-6in4/files/bin/omr-6in4
@@ -31,6 +31,7 @@ while true; do
uci -q batch <<-EOF
set network.omr6in4.ipaddr=$addr
set network.omr6in4.peeraddr=$peer
+ set network.omr6in4.metric=1
commit network
EOF
if [ -n "$(ip tunnel | grep omr6in4)" ]; then
@@ -49,7 +50,7 @@ while true; do
#[ -z "$ipv6_gw" ] && ipv6_gw='fe80::aff:ff01'
ip -6 route add ${ipv6_gw} dev 6in4-omr6in4 > /dev/null 2>&1
ip -6 route 2002::/16 dev 6in4-omr6in4 > /dev/null 2>&1
- ip -6 route replace default via ${ipv6_gw} dev 6in4-omr6in4 > /dev/null 2>&1
+ ip -6 route replace default via ${ipv6_gw} dev 6in4-omr6in4 metric 1 > /dev/null 2>&1
if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then
uci -q batch <<-EOF
set network.omr6in4_route6_default=route6
diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4
index 9d22cabb2..e9ef23296 100755
--- a/omr-6in4/files/etc/init.d/omr-6in4
+++ b/omr-6in4/files/etc/init.d/omr-6in4
@@ -64,6 +64,7 @@ set_ipv6_state() {
set network.lan.ipv6="1"
set network.lan.delegate="0"
set network.omr6in4.force_link=1
+ set network.omr6in4.metric=1
delete network.omr6in4.auto
EOF
if [ "$(network.lan.ip6assign)" = "" ]; then
diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker
index e42a26cab..f9e4fa504 100755
--- a/omr-tracker/files/bin/omr-tracker
+++ b/omr-tracker/files/bin/omr-tracker
@@ -24,6 +24,8 @@ export OMR_TRACKER_DEVICE_IP
export OMR_TRACKER_DEVICE_IP6
export OMR_TRACKER_DEVICE_GATEWAY
export OMR_TRACKER_DEVICE_GATEWAY6
+export OMR_TRACKER_IPV6
+export OMR_TRACKER_PROTO
dscp=56 # set DSCP CS7 (56) in outgoing packets
initial_hosts="$OMR_TRACKER_HOSTS"
@@ -87,16 +89,45 @@ _post_tracking() {
}
_ping_server() {
- local serverip=$(uci -q get openmptcprouter.$1.ip)
+ local servername=$1
+ local disabled=$(uci -q get openmptcprouter.$1.disabled)
local device=$2
- if [ -n "$serverip" ] && [ -n "$device" ]; then
- _ping $serverip $device "yes"
- statusp=$?
- if $(exit $statusp); then
- serverip_ping=true
- fi
- else
- serverip_ping=false
+ if [ -n "$device" ] && [ "$disabled" != "1" ]; then
+ check_ping() {
+ serverip=$1
+ if [ -n "$serverip" ]; then
+ _ping $serverip $device "yes"
+ statusp=$?
+ if $(exit $statusp); then
+ serverip_ping=true
+ break
+ fi
+ fi
+ }
+ config_load openmptcprouter
+ config_list_foreach ${servername} ip check_ping
+ fi
+}
+
+_httping_server() {
+ local servername=$1
+ local disabled=$(uci -q get openmptcprouter.$1.disabled)
+ local port=$(uci -q get openmptcprouter.$1.port)
+ local device=$2
+ if [ -n "$device" ] && [ "$disabled" != "1" ]; then
+ check_ping() {
+ serverip=$1
+ if [ -n "$serverip" ]; then
+ _httping "${serverip}:${port}" $device "yes" true
+ statusp=$?
+ if $(exit $statusp); then
+ serverip_ping=true
+ break
+ fi
+ fi
+ }
+ config_load openmptcprouter
+ config_list_foreach ${servername} ip check_ping
fi
}
@@ -138,18 +169,34 @@ _httping() {
local host=$1
local deviceip=$2
local localip=$3
- ret=$(httping "${host}" \
- -y "${deviceip}" \
- -t "$OMR_TRACKER_TIMEOUT" \
- -c 1 \
- -q
- ) && echo "$ret" | grep -sq "1 ok" && {
- if [ "$localip" = "yes" ]; then
- OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1)
- _update_rto "$OMR_TRACKER_LATENCY"
- fi
- return
- }
+ local https=$4
+ if [ -z "$https" ] || [ "$https" = false ]; then
+ ret=$(httping "${host}" \
+ -y "${deviceip}" \
+ -t "$OMR_TRACKER_TIMEOUT" \
+ -c 1 \
+ -q
+ ) && echo "$ret" | grep -sq "1 ok" && {
+ if [ "$localip" = "yes" ]; then
+ OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1)
+ _update_rto "$OMR_TRACKER_LATENCY"
+ fi
+ return
+ }
+ else
+ ret=$(httping -l "${host}" \
+ -y "${deviceip}" \
+ -t "$OMR_TRACKER_TIMEOUT" \
+ -c 1 \
+ -q
+ ) && echo "$ret" | grep -sq "1 ok" && {
+ if [ "$localip" = "yes" ]; then
+ OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1)
+ _update_rto "$OMR_TRACKER_LATENCY"
+ fi
+ return
+ }
+ fi
false
}
@@ -234,6 +281,7 @@ while true; do
OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n")
fi
fi
+ if [ "$OMR_TRACKER_INTERFACE_IPV6" = "1" ] || [ "$OMR_TRACKER_INTERFACE_IPV6" = "auto" ]; then
#OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}')
#if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then
OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1)
@@ -256,6 +304,7 @@ while true; do
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then
OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n")
fi
+ fi
# execute specific tracker
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
@@ -283,6 +332,10 @@ while true; do
config_load openmptcprouter
config_foreach _ping_server server $OMR_TRACKER_DEVICE
fi
+ if [ "$OMR_TRACKER_TYPE" = "httping" ]; then
+ config_load openmptcprouter
+ config_foreach _httping_server server $OMR_TRACKER_DEVICE
+ fi
if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST" ]; then
OMR_TRACKER_HOST=$(resolveip -4 -t 5 $OMR_TRACKER_HOST | head -n 1 | tr -d "\n")
if [ -n "$OMR_TRACKER_HOST" ]; then
@@ -366,6 +419,11 @@ while true; do
config_load openmptcprouter
config_foreach _ping_server server $OMR_TRACKER_DEVICE
fi
+ if [ "$OMR_TRACKER_TYPE" = "httping" ]; then
+ config_load openmptcprouter
+ config_foreach _httping_server server $OMR_TRACKER_DEVICE
+ fi
+
if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST6" ]; then
OMR_TRACKER_HOST6=$(resolveip -6 -t 5 $OMR_TRACKER_HOST6 | head -n 1 | tr -d "\n")
if [ -n "$OMR_TRACKER_HOST6" ]; then
diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker
index 67e72a3bc..31c306a73 100755
--- a/omr-tracker/files/etc/init.d/omr-tracker
+++ b/omr-tracker/files/etc/init.d/omr-tracker
@@ -19,7 +19,7 @@ _validate_section() {
uci_validate_section omr-tracker "$1" "$2" \
'hosts:list(host)' \
- 'hosts6:list(host6)' \
+ 'hosts6:list(host)' \
'timeout:uinteger' \
'tries:uinteger' \
'interval:uinteger' \
@@ -46,7 +46,7 @@ _launch_tracker() {
loopback|lan*|if0*) return;;
esac
- local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test
+ local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test ipv6 proto
_validate_section "defaults" "defaults"
_validate_section "interface" "$1"
@@ -59,6 +59,8 @@ _launch_tracker() {
config_get multipath "$1" multipath
config_get ifenabled "$1" auto
config_get gateway "$1" gateway
+ config_get ipv6 "$1" ipv6
+ config_get proto "$1" proto
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && [ "$( uci -q get openmptcprouter.$1.multipathvpn)" != "1" ] && return
[ "${ifenabled}" = "0" ] && return
@@ -79,6 +81,8 @@ _launch_tracker() {
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_append_param env "OMR_TRACKER_IPV6=$ipv6"
+ procd_append_param env "OMR_TRACKER_PROTO=$proto"
procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test"
procd_set_param limits nofile="51200 51200"
procd_set_param respawn 0 10 0
diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed
index fa95ff2cc..0521e7bf1 100755
--- a/openmptcprouter/files/bin/omr-test-speed
+++ b/openmptcprouter/files/bin/omr-test-speed
@@ -24,7 +24,7 @@ done
echo "Best server is $HOST, running test:"
trap : HUP INT TERM
if [ -z "$INTERFACE" ]; then
- curl -4 $HOST >/dev/null || echo
+ curl -4 -o /dev/null $HOST || echo
else
domain=$(echo $HOST | awk -F/ '{print $3}')
hostip=$(dig +nocmd +noall +answer A $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ')
@@ -33,7 +33,7 @@ else
ipset add ss_rules_dst_bypass_all $ip
done
fi
- curl -4 --interface $INTERFACE $HOST >/dev/null || echo
+ curl -4 -o /dev/null --interface $INTERFACE $HOST || echo
if [ -n "$(ipset list 2>/dev/null | grep ss_rules)" ]; then
for ip in $hostip; do
ipset del ss_rules_dst_bypass_all $ip
diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks
index 5880c13b0..91a0ad9cc 100755
--- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks
+++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks
@@ -57,8 +57,9 @@ if [ "$(uci -q get shadowsocks-libev.hi3)" != "" ]; then
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.hi$c.local_port=$port
set shadowsocks-libev.hi$c.server=sss0
+ set shadowsocks-libev.hi$((c+1)).local_address="::"
set shadowsocks-libev.hi$((c+1)).local_port=$port
- set shadowsocks-libev.hi$((c+1)).local_address="::"
+ set shadowsocks-libev.hi$((c+1)).local_address="::"
set shadowsocks-libev.hi$((c+1)).server=sss1
commit shadowsocks-libev
EOF