From 5e7cf8bd7a19f1eb4ecfedec14d7d93bb5823312 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 18 Jun 2018 10:56:32 +0200 Subject: [PATCH] Add check that MPTCP is not blocked --- luci-app-openmptcprouter/Makefile | 2 +- .../luasrc/controller/openmptcprouter.lua | 21 +++++++++++++++++-- .../luasrc/view/openmptcprouter/wanstatus.htm | 4 ++++ .../root/bin/omr-mptcp-intf | 10 +++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100755 luci-app-openmptcprouter/root/bin/omr-mptcp-intf 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