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

Merge branch 'test' into develop

This commit is contained in:
suyuan 2021-01-25 21:58:10 +08:00
commit c782a5d552
35 changed files with 2070 additions and 438 deletions

View file

@ -71,7 +71,7 @@ ul {
-moz-transition: all 0.5s;
}
.tree ul ul {
padding-left: 85px;
padding-left: 5px;
position: relative;
}
.tree > ul > li:first-child {
@ -152,7 +152,7 @@ right connector from last child*/
top: 50%;
left: 0;
border-top: 2px solid black;
width: 85px;
width: 7px;
height: 100%;
}
.tree li a {
@ -222,7 +222,7 @@ right connector from last child*/
width: 2px;
/*height: 50%;*/
height: 55px;
left: 200px;
left: 240px;
/* z-index: -10;*/
}
/*Time for some hover effects*/
@ -243,9 +243,9 @@ Thanks :)*/
.network-node {
position: relative;
background-color: #f3f3f3;
padding: 12px;
width: 400px;
max-width: 400px;
padding: 8px;
width: 480px;
max-width: 480px;
box-sizing: border-box;
min-height: 170px;
}
@ -282,7 +282,7 @@ Thanks :)*/
.network-node .info {
position: relative;
float: right;
width: 250px;
width: 330px;
text-align: left;
font-size: 12px;
color: #757575;
@ -319,7 +319,7 @@ Thanks :)*/
width:5px;
border-right:2px dotted black;
height:70px;
padding-right: 195px;
padding-right: 240px;
}
#omr {
min-height: 190px;

View file

@ -223,8 +223,10 @@ function wizard_add()
local device_qmi = luci.http.formvalue("cbid.network.%s.device.qmi" % intf) or ""
local device_modemmanager = luci.http.formvalue("cbid.network.%s.device.modemmanager" % intf) or ""
local ipaddr = luci.http.formvalue("cbid.network.%s.ipaddr" % intf) or ""
local ip6addr = luci.http.formvalue("cbid.network.%s.ip6addr" % intf) or ""
local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or ""
local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or ""
local ip6gw = luci.http.formvalue("cbid.network.%s.ip6gw" % intf) or ""
local apn = luci.http.formvalue("cbid.network.%s.apn" % intf) or ""
local pincode = luci.http.formvalue("cbid.network.%s.pincode" % intf) or ""
local delay = luci.http.formvalue("cbid.network.%s.delay" % intf) or ""
@ -281,6 +283,13 @@ function wizard_add()
ucic:set("network",intf,"netmask","")
ucic:set("network",intf,"gateway","")
end
if ip6addr ~= "" then
ucic:set("network",intf,"ip6addr",ip6addr)
ucic:set("network",intf,"ip6gw",ip6gw)
else
ucic:set("network",intf,"ip6addr","")
ucic:set("network",intf,"ip6gw","")
end
ucic:delete("openmptcprouter",intf,"lc")
ucic:save("openmptcprouter")
@ -416,7 +425,8 @@ function wizard_add()
local disablednb = 0
local servers = luci.http.formvaluetable("server")
for server, _ in pairs(servers) do
local server_ip = luci.http.formvalue("%s.server_ip" % server) or ""
local server_ip = {}
server_ip[1] = luci.http.formvalue("%s.server_ip" % server) or ""
local master = luci.http.formvalue("master") or ""
-- OpenMPTCProuter VPS
@ -437,14 +447,14 @@ function wizard_add()
if openmptcprouter_vps_disabled == "1" then
disablednb = disablednb + 1
end
if server_ip ~= "" then
if server_ip[1] ~= "" then
serversnb = serversnb + 1
end
ucic:set("openmptcprouter",server,"server")
ucic:set("openmptcprouter",server,"username",openmptcprouter_vps_username)
ucic:set("openmptcprouter",server,"password",openmptcprouter_vps_key)
ucic:set("openmptcprouter",server,"disabled",openmptcprouter_vps_disabled)
ucic:set("openmptcprouter",server,"ip",server_ip)
ucic:set_list("openmptcprouter",server,"ip",server_ip)
ucic:set("openmptcprouter",server,"port","65500")
ucic:save("openmptcprouter")
end

View file

@ -231,14 +231,25 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
} else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip6) && mArray.openmptcprouter.wan_addr6 != "")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6);
} else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.wan_addr6 != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6);
} else if (mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr);
statusMessageClass = "warning";
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
} else if (mArray.openmptcprouter.wan_addr6 != "")
{
var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr6);
statusMessageClass = "warning";
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
} else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.ss_addr);
@ -248,11 +259,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
var title = '<%:No output%>';
statusMessage += '<%:No output%>' + '<br/>';
}
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:No server IP address, No WAN IP address%>' + '<br/>';
}
if (mArray.openmptcprouter.service_addr !== "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN")
if (mArray.openmptcprouter.service_addr !== "" && (mArray.openmptcprouter.wan_addr !== "" || mArray.openmptcprouter.wan_addr6 !== "") && mArray.openmptcprouter.vps_status == "DOWN")
{
statusMessage += '<%:Can\'t access and use server part%>' + '<br/>';
}
@ -274,7 +285,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
} else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '<br/>';
} else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.external_check == true)
} else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '<br/>';
}
@ -392,18 +403,21 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
statusMessage = "";
}
// Populate info
var wanip = mArray.wans[i].wanip;
var wanip = mArray.wans[i].wanip;
var wanip6 = mArray.wans[i].wanip6;
if (anonymize == "true" && testPrivateIP(wanip) == false)
{
wanip=replaceLastNChars(wanip,"x",6);
}
var ipaddr = mArray.wans[i].ipaddr;
var ipaddr = mArray.wans[i].ipaddr;
var ip6addr = mArray.wans[i].ip6addr;
if (anonymize == "true" && testPrivateIP(ipaddr) == false)
{
ipaddr=replaceLastNChars(ipaddr,"x",6);
}
var whois = mArray.wans[i].whois;
var signal = mArray.wans[i].signal;
var whois = mArray.wans[i].whois;
var whois6 = mArray.wans[i].whois6;
var signal = mArray.wans[i].signal;
var multipath = mArray.wans[i].multipath;
if(multipath == 'master')
{
@ -420,7 +434,13 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
gateway=replaceLastNChars(gateway,"x",6);
}
var gateway6 = mArray.wans[i].gateway6;
if (anonymize == "true" && testPrivateIP(gateway6) == false)
{
gateway6=replaceLastNChars(gateway6,"x",10);
}
var gw_ping = mArray.wans[i].gw_ping;
var gw_ping6 = mArray.wans[i].gw_ping6;
var server_ping = mArray.wans[i].server_ping;
var ipv6_discover = mArray.wans[i].ipv6_discover;
var multipath_available = mArray.wans[i].multipath_available;
@ -438,6 +458,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
if (mArray.wans[i].gateway !== "")
{
var title = mArray.wans[i].label + " (" + gateway + ")";
} else if (mArray.wans[i].gateway6 !== "")
{
var title = mArray.wans[i].label + " (" + gateway6 + ")";
} else {
var title = mArray.wans[i].label;
}
@ -446,14 +469,26 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
content += String.format('%s <strong>%s</strong><br />','<%:ip address:%>', ipaddr);
}
if(ip6addr !== '')
{
content += String.format('%s <strong>%s</strong><br />','<%:ipv6 address:%>', ip6addr);
}
if(wanip !== '')
{
content += String.format('%s <strong>%s</strong><br />','<%:wan address:%>', wanip);
}
if(wanip6 !== '' && gateway6 != '')
{
content += String.format('%s <strong>%s</strong><br />','<%:wan ipv6 address:%>', wanip6);
}
if(whois !== '')
{
content += String.format('%s %s<br />','<%:whois:%>', whois);
}
if(whois6 !== '')
{
content += String.format('%s %s<br />','<%:whois:%>', whois6);
}
if(latency !== '')
{
content += String.format('%s %s ms<br />','<%:latency:%>', latency);
@ -492,14 +527,17 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
title += String.format(' <i>%s</i>',networktype);
}
if(ipaddr == '')
if(ipaddr == '' && ip6addr == '')
{
statusMessage += '<%:No IP defined%>' + '<br />';
}
if(gateway == '')
if(gateway == '' && gateway6 == '')
{
statusMessage += '<%:No gateway defined%>' + '<br />';
} else if(gw_ping == 'DOWN')
{
statusMessage += '<%:Gateway DOWN%>' + '<br />';
} else if(gw_ping6 == 'DOWN')
{
statusMessage += '<%:Gateway DOWN%>' + '<br />';
} else if(multipath_available == 'ERROR')
@ -515,6 +553,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
statusMessageClass = "error";
}
if (stat == 'Offline' && ip6addr != '' && ipaddr == mArray.wans[i].gateway6)
{
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
statusMessageClass = "error";
}
if(multipath == 'master')
{
if (master > 1)
@ -557,6 +600,12 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
temp += '</a></li>';
}
if (mArray.wans.length == 0)
{
temp += '<li>';
temp += '<%:No WAN with multipath enabled:%>';
temp += '</li>';
}
for( var i = 0; i < mArray.tunnels.length; i++ )
{
// Get link color

View file

@ -57,7 +57,7 @@
<div class="cbi-value">
<label class="cbi-value-title" for="server_ip"><%:Server IP%></label>
<div class="cbi-value-field">
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="<%:Server IP%>" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"ip")%>" data-optional="false">
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="<%:Server IP%>" class="cbi-input-text" value="<%=uci:get_list("openmptcprouter",servername,"ip")[1]%>" data-optional="false">
<div class="cbi-value-description">
<%:Server IP will be set for proxy and VPN%>
</div>
@ -147,7 +147,7 @@
<div class="cbi-value">
<label class="cbi-value-title"><%:Enable IPv6%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="enableipv6" value="0" <% if uci:get("openmptcprouter","settings","disable_ipv6") == "0" then %>checked<% end %> />
<input class="cbi-input-checkbox" type="checkbox" id="enableipv6" name="enableipv6" value="0" <% if uci:get("openmptcprouter","settings","disable_ipv6") == "0" then %>checked<% end %> />
<br />
<div class="cbi-value-description">
<%:You should disable IPv6 here if server doesn't provide IPv6.%>
@ -511,6 +511,7 @@
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" or uci:get("network",ifname,"proto") == nil then findproto = 1 %> selected="selected"<% end %>><%:Static address%></option>
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then findproto = 1 %> selected="selected"<% end %>><%:DHCP%></option>
<option id="cbid.network.<%=ifname%>.proto-dhcpv6" value="dhcpv6"<% if uci:get("network",ifname,"proto") == "dhcpv6" then findproto = 1 %> selected="selected"<% end %>><%:DHCPv6%></option>
<option id="cbid.network.<%=ifname%>.proto-modemmanager" value="modemmanager"<% if uci:get("network",ifname,"proto") == "modemmanager" then findproto = 1 %> selected="selected"<% end %>><%:ModemManager%></option>
<option id="cbid.network.<%=ifname%>.proto-ncm" value="ncm"<% if uci:get("network",ifname,"proto") == "ncm" then findproto = 1 %> selected="selected"<% end %>><%:NCM%></option>
<option id="cbid.network.<%=ifname%>.proto-pppoe" value="pppoe"<% if uci:get("network",ifname,"proto") == "pppoe" then findproto = 1 %> selected="selected"<% end %>><%:PPPoE%></option>
@ -523,7 +524,7 @@
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcp&#34;}]" data-index="4">
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcp&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcpv6&#34;}]" data-index="4">
<label class="cbi-value-title"><%:Physical interface%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
@ -576,6 +577,60 @@
</div>
</div>
</div>
<%
ipv6list = uci:get_list("network",ifname,"ip6addr")
for key, value in pairs(ipv6list) do
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-index="8">
<label class="cbi-value-title"><%:IPv6 address%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="<%=value%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set an IP in the same network as the modem%>
</div>
</div>
</div>
<%
end
if table.getn(ipv6list) ~= 0 then
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-index="9">
<label class="cbi-value-title"><%:IPv6 gateway%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set here IP of the modem%>
</div>
</div>
</div>
<%
else
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-depends="[{&#34;enableipv6&#34;:&#34;0&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.type&#34;:&#34;macvlan&#34;}]" data-index="8">
<label class="cbi-value-title"><%:IPv6 address%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set an IP in the same network as the modem%>
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-depends="[{&#34;enableipv6&#34;:&#34;0&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.type&#34;:&#34;macvlan&#34;}]" data-index="9">
<label class="cbi-value-title"><%:IPv6 gateway%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set here IP of the modem%>
</div>
</div>
</div>
<%
end
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-device-ncm" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;ncm&#34;}]" data-index="5">
<label class="cbi-value-title"><%:Device%></label>
<div class="cbi-value-field">

View file

@ -28,8 +28,10 @@ get_ip_from_website() {
}
[ -z "$intf" ] && return
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
if [ -n "$(ip -4 a show dev $intf)" ]; then
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
fi

View file

@ -0,0 +1,37 @@
#!/bin/sh
. /lib/functions.sh
intf=$1
get_ip_from_server() {
serverip=$(uci -q get openmptcprouter.$1.ip)
serverport=$(uci -q get openmptcprouter.$1.port)
getip="$(curl -s -k -6 -m 2 --interface $intf https://$serverip:$serverport/clienthost)"
[ -n "$getip" ] && getip=$(echo $getip | jsonfilter -e '@.client_host')
if [ -n "$(echo "$getip" | grep :)" ]; then
ip=$getip
break
fi
}
get_ip_from_website() {
check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)"
[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com"
checkip=$(echo $check_ipv6_website | sed -e 's/https:\/\///' -e 's/http:\/\///' | xargs dig +short AAAA | tr -d "\n")
ipset add ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1
getip="$(curl -s -6 -m 2 --interface $intf $check_ipv6_website)"
ipset del ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1
if [ -n "$(echo "$getip" | grep :)" ]; then
ip=$getip
break
fi
}
[ -z "$intf" ] && return
if [ -n "$(ip -6 a show dev $intf)" ]; then
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
fi

View file

@ -1,7 +1,16 @@
#!/bin/sh
INTERFACE=$2
if [ -z "$INTERFACE" ]; then
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $1
SERVER=$1
if [ -n "$(resolveip -4 $SERVER)" ]; then
if [ -z "$INTERFACE" ]; then
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER
else
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER
fi
else
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $1
if [ -z "$INTERFACE" ]; then
tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER
else
tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER
fi
fi

View file

@ -18,31 +18,12 @@ omr_intf_check() {
omr_intf_set() {
local device
local ifname
local multipath
config_get multipath "$1" multipath
config_get ifname "$1" ifname
config_get device "$1" device
config_get proto "$1" proto
config_get type "$1" type
config_get addlatency "$1" addlatency
[ -z "$addlatency" ] && addlatency=0
devicename=$(echo "$device" | cut -d'/' -f3)
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
if [ -n "$ifname" ]; then
if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc del dev ${ifname} root netem
fi
if [ "$addlatency" != "0" ]; then
if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc add dev ${ifname} root netem delay ${addlatency}ms
elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then
tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms
fi
fi
fi
if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then
devicepath=$(readlink -f /sys/class/net/${ifname})
if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then
@ -63,6 +44,15 @@ omr_intf_set() {
}
omr_set_settings() {
local device
local ifname
local multipath
config_get multipath "$1" multipath
config_get ifname "$1" ifname
config_get device "$1" device
config_get proto "$1" proto
config_get type "$1" type
config_get addlatency "$1" addlatency
[ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return
uci -q set openmptcprouter.$1=interface
@ -73,6 +63,25 @@ omr_set_settings() {
else
uci -q set network.$1.ipv6=1
fi
[ -z "$addlatency" ] && addlatency=0
devicename=$(echo "$device" | cut -d'/' -f3)
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
if [ -n "$ifname" ]; then
if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc del dev ${ifname} root netem
fi
if [ "$addlatency" != "0" ]; then
if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc add dev ${ifname} root netem delay ${addlatency}ms
elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then
tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms
fi
fi
fi
}
start_service() {

View file

@ -545,7 +545,14 @@ function update_vps()
local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null")
end
function get_rootfs()
local rootfs = {}
rootfs['format'] = luci.util.trim(sys.exec("mount | awk 'NR==1{print $5}'"))
return rootfs
end
function get_ip(interface)
local ut = require "luci.util"
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
local ip = ""
if dump and dump['ipv4-address'] then
@ -563,6 +570,42 @@ function get_ip(interface)
end
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump['l3_device'] then
local ifname = dump['l3_device']
ip = ut.trim(sys.exec("ip -4 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname))
end
end
return ip
end
function get_ip6(interface)
local ut = require "luci.util"
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
local ip = ""
if dump and dump['ipv6-address'] then
local _, ipv6address
for _, ipv6address in ipairs(dump['ipv6-address']) do
ip = dump['ipv6-address'][_].address
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {})
if dump and dump['ipv6-address'] then
local _, ipv6address
for _, ipv6address in ipairs(dump['ipv6-address']) do
ip = dump['ipv6-address'][_].address
end
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump['l3_device'] then
local ifname = dump['l3_device']
ip = ut.trim(sys.exec("ip -6 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname))
end
end
return ip
end
@ -625,6 +668,56 @@ function get_gateway(interface)
return gateway
end
function get_gateway6(interface)
local gateway = ""
local dump = nil
dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump.route then
local _, route
for _, route in ipairs(dump.route) do
if dump.route[_].target == "::" then
gateway = dump.route[_].nexthop
end
end
end
if gateway == "" then
if dump and dump.inactive and dump.inactive.route then
local _, route
for _, route in ipairs(dump.inactive.route) do
if dump.inactive.route[_].target == "::" then
gateway = dump.inactive.route[_].nexthop
end
end
end
end
if gateway == "" then
dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {})
if dump and dump.route then
local _, route
for _, route in ipairs(dump.route) do
if dump.route[_].target == "::" then
gateway = dump.route[_].nexthop
end
end
end
if gateway == "" then
if dump and dump.inactive and dump.inactive.route then
local _, route
for _, route in ipairs(dump.inactive.route) do
if dump.inactive.route[_].target == "::" then
gateway = dump.inactive.route[_].nexthop
end
end
end
end
end
return gateway
end
-- This function come from OverTheBox by OVH with many changes
-- Copyright 2015 OVH <OverTheBox@ovh.net>
-- Simon Lelievre (simon.lelievre@corp.ovh.com)
@ -689,16 +782,25 @@ function interfaces_status()
if mArray.openmptcprouter["dns"] == true then
-- wanaddr
--mArray.openmptcprouter["wan_addr"] = uci:get("openmptcprouter","omr","public_detected_ipv4") or ""
if mArray.openmptcprouter["service_addr"] ~= "" then
mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
mArray.openmptcprouter["service_addr_ip6"] = ut.trim(sys.exec("resolveip -6 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
end
if uci:get("openmptcprouter","settings","external_check") ~= "0" and mArray.openmptcprouter["dns"] == true then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website))
if mArray.openmptcprouter["wan_addr"] == "" then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
if mArray.openmptcprouter["service_addr_ip"] ~= "" and mArray.openmptcprouter["service_addr_ip"] ~= nil then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website))
if mArray.openmptcprouter["wan_addr"] == "" then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -4 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
end
end
if mArray.openmptcprouter["ipv6"] == "enabled" then
if mArray.openmptcprouter["ipv6"] == "enabled" or ( mArray.openmptcprouter["service_addr_ip6"] ~= "" and mArray.openmptcprouter["service_addr_ip6"] ~= nil) then
mArray.openmptcprouter["wan_addr6"] = uci:get("openmptcprouter","omr","public_detected_ipv6") or ""
if mArray.openmptcprouter["wan_addr6"] == "" then
mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("curl -6 -s -m " .. timeout .. " " .. check_ipv6_website))
if mArray.openmptcprouter["wan_addr6"] == "" then
mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
end
end
end
mArray.openmptcprouter["external_check"] = true
@ -720,9 +822,6 @@ function interfaces_status()
end
end
end
if mArray.openmptcprouter["service_addr"] ~= "" then
mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
end
end
if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then
@ -738,92 +837,105 @@ function interfaces_status()
mArray.openmptcprouter["vps_hostname"] = "Server"
-- Get VPS info
ucic:foreach("openmptcprouter", "server", function(s)
local serverip = uci:get("openmptcprouter",s[".name"],"ip") or ""
local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" }
local master = uci:get("openmptcprouter",s[".name"],"master") or "1"
if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip) then
mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or ""
mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or ""
mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or ""
timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2"
if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then
mArray.openmptcprouter["vps_admin_error"] = true
end
local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500"
local token = uci:get("openmptcprouter",s[".name"],"token") or ""
if token ~= "" then
local vpsinfo_json = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status')
if vpsinfo_json ~= "" and vpsinfo_json ~= nil then
local status, vpsinfo = pcall(function()
return json.decode(vpsinfo_json)
end)
if status and vpsinfo.vps ~= nil then
mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or ""
mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or ""
mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or ""
mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or ""
mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or ""
if vpsinfo.vps.kernel ~= nil then
mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or ""
end
if vpsinfo.vps.omr_version ~= nil then
mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or ""
end
if vpsinfo.vps.time ~= "" then
if math.abs(os.time() - vpsinfo.vps.time) > 10 then
mArray.openmptcprouter["vps_time_accurate"] = false
else
mArray.openmptcprouter["vps_time_accurate"] = true
for key, value in pairs(serverips) do
serverip = value
if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) and mArray.openmptcprouter["vps_admin"] == false then
mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or ""
mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or ""
mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or ""
timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2"
if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then
mArray.openmptcprouter["vps_admin_error"] = true
end
local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500"
local token = uci:get("openmptcprouter",s[".name"],"token") or ""
if token ~= "" then
local vpsinfo_json = ""
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status')
end
if mArray.openmptcprouter["service_addr_ip6"] ~= "" then
vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status')
end
if vpsinfo_json ~= "" and vpsinfo_json ~= nil then
local status, vpsinfo = pcall(function()
return json.decode(vpsinfo_json)
end)
if status and vpsinfo.vps ~= nil then
mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or ""
mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or ""
mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or ""
mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or ""
mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or ""
if vpsinfo.vps.kernel ~= nil then
mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or ""
end
if vpsinfo.vps.omr_version ~= nil then
mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or ""
end
if vpsinfo.vps.time ~= "" then
if math.abs(os.time() - vpsinfo.vps.time) > 10 then
mArray.openmptcprouter["vps_time_accurate"] = false
else
mArray.openmptcprouter["vps_time_accurate"] = true
end
end
mArray.openmptcprouter["vps_admin"] = true
mArray.openmptcprouter["vps_status"] = "UP"
mArray.openmptcprouter["vps_admin_error_msg"] = ""
else
uci:set("openmptcprouter",s[".name"],"admin_error","1")
mArray.openmptcprouter["vps_admin_error"] = true
uci:delete("openmptcprouter",s[".name"],"token")
uci:save("openmptcprouter",s[".name"])
uci:commit("openmptcprouter",s[".name"])
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error"
end
mArray.openmptcprouter["vps_admin"] = true
mArray.openmptcprouter["vps_status"] = "UP"
mArray.openmptcprouter["vps_admin_error_msg"] = ""
if status and vpsinfo.vpn ~= nil then
mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0"
mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0"
mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"]
else
mArray.openmptcprouter["vpn_traffic_rx"] = "0"
mArray.openmptcprouter["vpn_traffic_tx"] = "0"
mArray.openmptcprouter["vpn_traffic"] = "0"
end
if status and vpsinfo.shadowsocks ~= nil then
mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0"
else
mArray.openmptcprouter["ss_traffic"] = "0"
end
if status and vpsinfo.v2ray ~= nil then
mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0"
mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"]
else
mArray.openmptcprouter["v2ray_traffic_rx"] = "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = "0"
mArray.openmptcprouter["v2ray_traffic"] = "0"
end
mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"]
mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"]
else
uci:set("openmptcprouter",s[".name"],"admin_error","1")
mArray.openmptcprouter["vps_admin_error"] = true
uci:delete("openmptcprouter",s[".name"],"token")
uci:save("openmptcprouter",s[".name"])
uci:commit("openmptcprouter",s[".name"])
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error"
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
end
if status and vpsinfo.vpn ~= nil then
mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0"
mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0"
mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"]
else
mArray.openmptcprouter["vpn_traffic_rx"] = "0"
mArray.openmptcprouter["vpn_traffic_tx"] = "0"
mArray.openmptcprouter["vpn_traffic"] = "0"
end
if status and vpsinfo.shadowsocks ~= nil then
mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0"
else
mArray.openmptcprouter["ss_traffic"] = "0"
end
if status and vpsinfo.v2ray ~= nil then
mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0"
mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"]
else
mArray.openmptcprouter["v2ray_traffic_rx"] = "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = "0"
mArray.openmptcprouter["v2ray_traffic"] = "0"
end
mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"]
mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"]
else
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available"
end
else
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available"
end
if mArray.openmptcprouter["vps_admin"] == false then
local vpstest = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/')
if vpstest == "" then
mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer"
if mArray.openmptcprouter["vps_admin"] == false then
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/')
elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then
local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/')
end
if vpstest == "" then
mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer"
end
end
end
end
@ -859,7 +971,7 @@ function interfaces_status()
else
mArray.openmptcprouter["tun_state"] = "DOWN"
end
if mArray.openmptcprouter["ipv6"] == "enabled" then
if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then
local tunnel_ipv6_gw = uci:get("network","omr6in4","gateway")
local tunnel_ping6_test = ut.trim(sys.exec("ping6 -w 1 -c 1 " .. tunnel_ipv6_gw .. "%6in4-omr6in4 | grep '100% packet loss'"))
if tunnel_ping6_test == "" then
@ -875,6 +987,8 @@ function interfaces_status()
end
elseif uci:get("openmptcprouter","settings","vpn") == "none" then
mArray.openmptcprouter["tun_service"] = true
mArray.openmptcprouter["tun_state"] = "NONE"
mArray.openmptcprouter["tun6_state"] = "NONE"
end
mArray.openmptcprouter["multi_vpn"] = false
@ -996,7 +1110,9 @@ function interfaces_status()
local interface = section[".name"]
local net = ntm:get_network(interface)
local ipaddr = net:ipaddr() or ""
local ip6addr = net:ip6addr() or ""
local gateway = section["gateway"] or ""
local gateway6 = section["ip6gw"] or ""
local multipath = section["multipath"]
local enabled = section["auto"]
@ -1034,7 +1150,13 @@ function interfaces_status()
if ipaddr == "" and ifname ~= nil and ifname ~= "" 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 ipaddr == "" then
if ip6addr == "" and ifname ~= nil and ifname ~= "" 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
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
connectivity = "ERROR"
end
@ -1071,8 +1193,10 @@ function interfaces_status()
-- Detect WAN gateway status
local gw_ping = "UP"
if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
local gw_ping6 = "UP"
if ifname ~= nil and not (ifname:match("^tun.*") or 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'"))
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
if gateway == "" then
@ -1086,18 +1210,40 @@ function interfaces_status()
end
end
end
if gateway6 == "" then
gateway6 = get_gateway6(interface)
end
if gateway6 == "" and ifname ~= nil and ifname ~= "" 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
gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'"))
end
end
end
local signal = ""
local operator = ""
local phonenumber = ""
local donglestate = ""
local networktype = ""
if gateway ~= "" then
if gateway ~= "" or gateway6 ~= "" then
if uci:get("openmptcprouter", "settings", "disablegwping") ~= "1" and connectivity ~= "ERROR" then
local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'"))
if gw_ping_test ~= "" then
gw_ping = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
if gateway ~= "" then
local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'"))
if gw_ping_test ~= "" then
gw_ping = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
end
end
end
if gateway6 ~= "" then
local gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway6 .. " | grep '100% packet loss'"))
if gw_ping6_test ~= "" then
gw_ping6 = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
end
end
end
end
@ -1111,7 +1257,7 @@ function interfaces_status()
networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'"))
end
end
elseif gateway == "" then
elseif gateway == "" and gateway6 == "" then
gw_ping = "DOWN"
connectivity = "ERROR"
end
@ -1147,7 +1293,7 @@ function interfaces_status()
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
if ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" and connectivity ~= "ERROR" then
if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then
local serverip = mArray.openmptcprouter["service_addr"]
if serverip == "127.0.0.1" then
serverip = mArray.openmptcprouter["wan_addr"]
@ -1170,7 +1316,7 @@ function interfaces_status()
local multipath_available = ""
local multipath_available_state = ""
if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then
if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and (gw_ping == "UP" or gw_ping6 == "UP") then
-- Test if multipath can work on the connection
local multipath_available_state = uci:get("openmptcprouter",interface,"mptcp_status") or ""
if multipath_available_state == "" then
@ -1207,7 +1353,9 @@ function interfaces_status()
-- end
local mtu = ""
local whois = ""
local whois6 = ""
local publicIP = ""
local publicIP6 = ""
if connectivity ~= "ERROR" then
if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
@ -1215,24 +1363,39 @@ function interfaces_status()
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5))))
end
publicIP6 = uci:get("openmptcprouter",interface:sub(5),"publicip6") or ""
if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(5))))
end
else
publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
end
publicIP6 = uci:get("openmptcprouter",interface,"publicip6") or ""
if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. ifname))
end
end
if publicIP ~= "" then
whois = uci:get("openmptcprouter",interface,"asn") or ""
if whois == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
--whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'"))
whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'"))
whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'"))
--whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'"))
end
end
if publicIP6 ~= "" then
whois6 = uci:get("openmptcprouter",interface,"asn") or ""
if whois6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
whois6 = ut.trim(sys.exec("whois " .. publicIP6 .. " | grep -i 'netname' | awk '{print $2}'"))
--whois6 = ut.trim(sys.exec("wget -6 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP6 .. "' | jsonfilter -q -e '@.as_description'"))
end
end
if ifname ~= "" and ifname ~= nil then
if fs.access("/sys/class/net/" .. ifname) then
mtu = ut.trim(sys.exec("cat /sys/class/net/" .. ifname .. "/mtu | tr -d '\n'"))
if mtu == "" and interface ~= nil then
mtu = uci:get("openmptcprouter",interface,"mtu") or ""
mtu = uci:get("openmptcprouter",interface,"mtu") or ""
end
end
end
@ -1249,17 +1412,22 @@ function interfaces_status()
--link = net:adminlink() or "",
ifname = ifname,
ipaddr = ipaddr,
ip6addr = ip6addr,
gateway = gateway,
gateway6 = gateway6,
multipath = section["multipath"],
status = connectivity,
wanip = publicIP,
wanip6 = publicIP6,
latency = latency,
mtu = mtu,
whois = whois or "unknown",
whois6 = whois6 or "unknown",
qos = section["trafficcontrol"],
download = section["download"],
upload = section["upload"],
gw_ping = gw_ping,
gw_ping6 = gw_ping6,
server_ping = server_ping,
ipv6_discover = ipv6_discover,
multipath_available = multipath_available,
@ -1350,6 +1518,11 @@ function _ipv6_discover(interface)
end
local methods = {
getrootfs = {
call = function()
return get_rootfs()
end
},
status = {
call = function()
return interfaces_status()