diff --git a/luci-app-openmptcprouter/Makefile b/luci-app-openmptcprouter/Makefile
index bde3eb374..26de8e19f 100644
--- a/luci-app-openmptcprouter/Makefile
+++ b/luci-app-openmptcprouter/Makefile
@@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for OpenMPTCProuter
-LUCI_DEPENDS:=+luci-lib-json +rdisc6
+LUCI_DEPENDS:=+luci-lib-json +rdisc6 +curl
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua
index 24ed57859..5fba6340c 100644
--- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua
+++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua
@@ -306,11 +306,17 @@ function interfaces_status()
mArray.openmptcprouter = {}
mArray.openmptcprouter["version"] = ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::'"))
-- Check that requester is in same network
- mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks", "proxy", "server") or "0.0.0.0"
+ mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "proxy", "server") or "0.0.0.0"
mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr")
-- shadowsocksaddr
- mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 127.0.0.1:1111 -m 5 http://ip.openmptcprouter.com")
+ local tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or ""
+ local tracker_port = uci:get("shadowsocks-libev","tracker","local_port")
+ if tracker_ip ~= "" then
+ mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 5 http://ip.openmptcprouter.com")
+ else
+ mArray.openmptcprouter["ss_addr"] = ""
+ end
-- wanaddr
mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com")
@@ -446,6 +452,16 @@ function interfaces_status()
connectivity = 'ERROR'
end
+ -- Test if multipath can work on the connection
+ local multipath_available
+ local multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'"))
+ if multipath_available_state == "" then
+ multipath_available = 'OK'
+ else
+ multipath_available = 'ERROR'
+ end
+
+
-- Detect WAN gateway status
local gw_ping = 'UP'
if gateway == "" then
@@ -509,6 +525,7 @@ function interfaces_status()
upload = section['upload'],
gw_ping = gw_ping,
ipv6_discover = ipv6_discover,
+ multipath_available = multipath_available,
}
if ifname:match("^tun.*") then
diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
index c1a491544..3f75351e1 100644
--- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
+++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
@@ -188,6 +188,7 @@
var gateway = mArray.wans[i].gateway;
var gw_ping = mArray.wans[i].gw_ping;
var ipv6_discover = mArray.wans[i].ipv6_discover;
+ var multipath_available = mArray.wans[i].multipath_available;
// Generate template
if(mArray.openmptcprouter.remote_from_lease == true && mArray.wans.length == 1)
{
@@ -210,6 +211,9 @@
} else if(gw_ping == 'DOWN')
{
statusMessage += 'Gateway DOWN
'
+ } else if(multipath_available == 'ERROR')
+ {
+ statusMessage += 'Multipath blocked on the connection
'
}
if(ipv6_discover == 'DETECTED')
{
diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf
new file mode 100755
index 000000000..4de062d19
--- /dev/null
+++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf
@@ -0,0 +1,10 @@
+#!/bin/sh
+uci -q batch <<-EOF >/dev/null
+ add_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass'
+ commit dhcp
+EOF
+curl -s -4 -m 5 --interface $1 http://www.multipath-tcp.org
+uci -q batch <<-EOF >/dev/null
+ del_list dhcp.dnsmasq.ipset='/multipath-tcp.org/ss_rules_dst_bypass'
+ commit dhcp
+EOF