diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
index 18cc3ce64..ae9f2d8fb 100644
--- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
+++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
@@ -311,7 +311,7 @@
temp += '';
temp += '';
}
- if (mArray !== null && mArray.wans)
+ if (mArray !== null && (mArray.wans || mArray.tunnels))
{
temp += '
';
var master = 0;
@@ -471,6 +471,162 @@
temp += '';
}
+ for( var i = 0; i < mArray.tunnels.length; i++ )
+ {
+ // Get link color
+ mArray.tunnels[i].color = stringToColour(mArray.tunnels[i].name)
+ // Mwan status infos and colors
+ var stat = '';
+ var cssc = '';
+ switch (mArray.tunnels[i].status)
+ {
+ case 'OK':
+ stat = 'Online';
+ cssc = 'rgb(144, 240, 144)';
+ statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
+ statusMessageClass = "";
+ statusMessage = "";
+ break;
+ case 'ERROR':
+ stat = 'Offline';
+ cssc = 'rgb(240, 144, 144)';
+ statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png";
+ statusMessageClass = "error";
+ statusMessage = "";
+ break;
+ default:
+ stat = 'Unknown';
+ cssc = 'rgb(144, 240, 144)';
+ statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
+ statusMessageClass = "warning";
+ statusMessage = "";
+ }
+ // Populate info
+ var wanip = mArray.tunnels[i].wanip;
+ if (anonymize == "true" && testPrivateIP(wanip) == false)
+ {
+ wanip=replaceLastNChars(wanip,"x",6);
+ }
+ var ipaddr = mArray.tunnels[i].ipaddr;
+ if (anonymize == "true" && testPrivateIP(ipaddr) == false)
+ {
+ ipaddr=replaceLastNChars(ipaddr,"x",6);
+ }
+ var whois = mArray.tunnels[i].whois;
+ var multipath = mArray.tunnels[i].multipath;
+ if(multipath == 'master')
+ {
+ master++;
+ }
+ var latency = mArray.tunnels[i].latency;
+ var mtu = mArray.tunnels[i].mtu;
+ var gateway = mArray.tunnels[i].gateway;
+ if (anonymize == "true" && testPrivateIP(gateway) == false)
+ {
+ gateway=replaceLastNChars(gateway,"x",6);
+ }
+ var gw_ping = mArray.tunnels[i].gw_ping;
+ var server_ping = mArray.tunnels[i].server_ping;
+ var ipv6_discover = mArray.tunnels[i].ipv6_discover;
+ var multipath_available = mArray.tunnels[i].multipath_available;
+ var multipath_state = mArray.tunnels[i].multipath_state;
+ var duplicateif = mArray.tunnels[i].duplicateif;
+ // Generate template
+ if(mArray.openmptcprouter.remote_from_lease == true && mArray.tunnels.length == 1)
+ {
+ temp += String.format('- ', mArray.tunnels[i].link);
+ } else {
+ temp += String.format('
- ', mArray.tunnels[i].link);
+ }
+
+ var equipmentIcon = String.format('', mArray.tunnels[i].name, mArray.tunnels[i].name, mArray.tunnels[i].color);
+ if (mArray.tunnels[i].gateway !== "")
+ {
+ var title = mArray.tunnels[i].label + " (" + mArray.tunnels[i].gateway + ")";
+ } else {
+ var title = mArray.tunnels[i].label;
+ }
+ var content = "";
+ if(ipaddr !== '')
+ {
+ content += String.format('%s %s
',_('ip address:'), ipaddr);
+ }
+ if(wanip !== '')
+ {
+ content += String.format('%s %s ',_('wan address:'), wanip);
+ }
+ if(whois !== '')
+ {
+ content += String.format('%s %s ',_('whois:'), whois);
+ }
+ if(latency !== '')
+ {
+ content += String.format('%s %s ms ',_('latency:'), latency);
+ }
+ if(mtu !== '')
+ {
+ content += String.format('%s %s ',_('mtu:'), mtu);
+ }
+ if(ipaddr == '')
+ {
+ statusMessage += _('No IP defined') + ' '
+ }
+ if(gateway == '')
+ {
+ statusMessage += _('No gateway defined') + ' '
+ } else if(gw_ping == 'DOWN')
+ {
+ statusMessage += _('Gateway DOWN') + ' '
+ } else if(multipath_available == 'ERROR')
+ {
+ statusMessage += _('Multipath seems to be blocked on the connection') + ' '
+ }
+ if(server_ping == 'DOWN')
+ {
+ statusMessage += _('No Server ping response after 1 second') + ' '
+ }
+ if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.tunnels[i].gateway)
+ {
+ statusMessage += _('Wan IP and gateway are identical') + ' ';
+ statusMessageClass = "error";
+ }
+ if(multipath == 'master')
+ {
+ if (master > 1)
+ {
+ statusMessage += _('Multipath master already defined') + ' ';
+ statusMessageClass = "error";
+ }
+ if(multipath_state !== 'on' && multipath_state !== '')
+ {
+ statusMessage += _('Multipath current state is ') + multipath_state + ' ';
+ statusMessageClass = "error";
+ }
+ } else {
+ if(multipath !== multipath_state && multipath_state !== '')
+ {
+ statusMessage += _('Multipath current state is ') + multipath_state + ' ';
+ statusMessageClass = "error";
+ }
+ }
+ if(duplicateif)
+ {
+ statusMessage += _('Network interface duplicated') + ' ';
+ statusMessageClass = "error";
+ }
+ if(ipv6_discover == 'DETECTED')
+ {
+ statusMessage += _('IPv6 route received') + ' '
+ }
+ content += String.format('multipath: %s ',multipath);
+ if(mArray.tunnels[i].qos && mArray.tunnels[i].download > 0 && mArray.tunnels[i].upload > 0)
+ {
+ content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos)
+ }
+ temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
+
+ temp += ' ';
+ }
temp += ' | ';
temp += '';
}
diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
index 20a2ed05e..89f0784ab 100755
--- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
+++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
@@ -907,6 +907,10 @@ function interfaces_status()
if ifname == "" or ifname == nil then
ifname = section["ifname"] or ""
end
+ --if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
+ --ifname = get_device(interface:sub(5))
+ --end
+
duplicateif = false
if ifname ~= "" and ifname ~= nil then
if allintf[ifname] then
@@ -965,6 +969,10 @@ function interfaces_status()
-- Detect WAN gateway status
local gw_ping = "UP"
+ if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") 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
+
if gateway == "" then
gateway = get_gateway(interface)
end
@@ -988,7 +996,7 @@ function interfaces_status()
gw_ping = "DOWN"
connectivity = "ERROR"
end
-
+
local latency = ""
local server_ping = ""
--if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then
@@ -1068,11 +1076,21 @@ function interfaces_status()
end
end
- local publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
- if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
- publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
- end
+ local publicIP = ""
local whois = ""
+ if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
+ publicIP = uci:get("openmptcprouter",interface:sub(5),"publicip") or ""
+ if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
+ publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5))))
+ end
+ else
+ publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
+ if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
+ publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
+ end
+ end
+
+ whois = ""
if publicIP ~= "" then
whois = uci:get("openmptcprouter",interface,"asn") or ""
if whois == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" 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 fd5dec947..45fe3c1dd 100755
--- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking
+++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking
@@ -451,7 +451,7 @@ fi
# Save wan settings for status page
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then
_log "Get status and settings for $OMR_TRACKER_INTERFACE..."
- if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
+ if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then
local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)"
else
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
diff --git a/openmptcprouter/files/etc/init.d/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn
index 7a7d2d5d3..b0470f35a 100755
--- a/openmptcprouter/files/etc/init.d/mptcpovervpn
+++ b/openmptcprouter/files/etc/init.d/mptcpovervpn
@@ -23,7 +23,8 @@ mptcp_over_vpn() {
config_load_openmptcprouter
config_foreach _getremoteip server
localip=$(ubus call network.interface.$interface status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n")
- multipath=$(uci -q get network.${interface}.multipath)
+ [ -z "$(uci -q get openmptcprouter.ovpn${interface}.multipath)" ] && multipath=$(uci -q get network.${interface}.multipath)
+ [ -n "$(uci -q get openmptcprouter.ovpn${interface}.multipath)" ] && multipath=$(uci -q get openmptcprouter.ovpn${interface}.multipath)
[ -z "$multipath" ] && multipath="on"
uci -q batch <<-EOF >/dev/null
set network.ovpn${interface}=interface
@@ -32,6 +33,7 @@ mptcp_over_vpn() {
set network.ovpn${interface}.peerdns='0'
set network.ovpn${interface}.proto='none'
set network.ovpn${interface}.multipath='on'
+ set network.${interface}.multipath='off'
commit network
set openvpn.${interface}=openvpn
set openvpn.${interface}.dev="tun${id}"