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