1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Changes for MPTCPoverVPN

This commit is contained in:
Ycarus (Yannick Chabanois) 2019-11-17 20:48:13 +01:00
parent 3f2d37f810
commit 1400f7b0aa
4 changed files with 184 additions and 8 deletions

View file

@ -311,7 +311,7 @@
temp += '</a></td></tr></table>';
temp += '</td>';
}
if (mArray !== null && mArray.wans)
if (mArray !== null && (mArray.wans || mArray.tunnels))
{
temp += '<td><ul>';
var master = 0;
@ -471,6 +471,162 @@
temp += '</a></li>';
}
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('<li class="subnode-only-child"><a href="%q">', mArray.tunnels[i].link);
} else {
temp += String.format('<li><a href="%q">', mArray.tunnels[i].link);
}
var equipmentIcon = String.format('<embed id="modem_%s" onload="setColorSVG(\'modem_%s\', \'%s\')" src="<%=resource%>/modem.svg" />', 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 <strong>%s</strong><br />',_('ip address:'), ipaddr);
}
if(wanip !== '')
{
content += String.format('%s <strong>%s</strong><br />',_('wan address:'), wanip);
}
if(whois !== '')
{
content += String.format('%s %s<br />',_('whois:'), whois);
}
if(latency !== '')
{
content += String.format('%s %s ms<br />',_('latency:'), latency);
}
if(mtu !== '')
{
content += String.format('%s %s<br />',_('mtu:'), mtu);
}
if(ipaddr == '')
{
statusMessage += _('No IP defined') + '<br />'
}
if(gateway == '')
{
statusMessage += _('No gateway defined') + '<br />'
} else if(gw_ping == 'DOWN')
{
statusMessage += _('Gateway DOWN') + '<br />'
} else if(multipath_available == 'ERROR')
{
statusMessage += _('Multipath seems to be blocked on the connection') + '<br />'
}
if(server_ping == 'DOWN')
{
statusMessage += _('No Server ping response after 1 second') + '<br />'
}
if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.tunnels[i].gateway)
{
statusMessage += _('Wan IP and gateway are identical') + '<br />';
statusMessageClass = "error";
}
if(multipath == 'master')
{
if (master > 1)
{
statusMessage += _('Multipath master already defined') + '<br />';
statusMessageClass = "error";
}
if(multipath_state !== 'on' && multipath_state !== '')
{
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
statusMessageClass = "error";
}
} else {
if(multipath !== multipath_state && multipath_state !== '')
{
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
statusMessageClass = "error";
}
}
if(duplicateif)
{
statusMessage += _('Network interface duplicated') + '<br />';
statusMessageClass = "error";
}
if(ipv6_discover == 'DETECTED')
{
statusMessage += _('IPv6 route received') + '<br />'
}
content += String.format('multipath: %s<br />',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 += '</a></li>';
}
temp += '</ul></td>';
temp += '</tr></table>';
}

View file

@ -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

View file

@ -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")

View file

@ -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}"