2018-03-23 19:23:27 +00:00
< %+header%>
< %
local uci = require("luci.model.uci").cursor()
local net = require "luci.model.network".init()
2018-06-29 16:27:21 +00:00
local fs = require "nixio.fs"
2018-09-01 19:59:02 +00:00
local sys = require "luci.sys"
2019-09-22 06:33:54 +00:00
local ut = require "luci.util"
2018-09-01 19:59:02 +00:00
local ifaces = sys.net:devices()
2020-11-22 14:51:31 +00:00
menuentry = uci:get("openmptcprouter","settings","menu") or "openmptcprouter"
2020-11-05 09:18:57 +00:00
function device_notvirtual(dev)
for _, iface in ipairs(net:get_networks()) do
local ifacen = iface:name()
local ifacename = uci:get("network",ifacen,"ifname")
local ifacetype = uci:get("network",ifacen,"type") or ""
local ifaceproto = uci:get("network",ifacen,"proto") or ""
2020-11-17 14:33:22 +00:00
--if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
if ifacename == dev and (ifacetype == "macvlan" or ifaceproto == "6in4") then
2020-11-05 09:18:57 +00:00
return false
end
2018-09-01 19:59:02 +00:00
end
2020-11-05 09:18:57 +00:00
return true
2018-09-01 19:59:02 +00:00
end
2021-01-29 16:29:28 +00:00
function splitstring(inputstr, sep)
2021-02-06 08:05:02 +00:00
if inputstr == nil then
return ""
end
2021-01-29 16:29:28 +00:00
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
2018-09-01 19:59:02 +00:00
2018-03-23 19:23:27 +00:00
%>
2018-09-01 19:59:02 +00:00
< script type = "text/javascript" src = "<%=resource%>/cbi.js?v=git-18.243.49640-2f13420" data-strings = "{"path":{"resource":"\/luci-static\/resources","browser":"\/cgi-bin\/luci\/admin\/filebrowser"}}" > < / script >
2018-11-27 14:21:47 +00:00
< script src = "/luci-static/resources/xhr.js?v=git-18.324.48426-65adb4e" > < / script >
< script >
function jsshowadv() {
if(document.getElementById('showadv').checked){
document.getElementById('advancedsettings').style.display='inline';
} else {
document.getElementById('advancedsettings').style.display='none';
}
}
< / script >
2018-03-23 19:23:27 +00:00
< % if stderr and #stderr > 0 then %>< pre class = "error" > < %=pcdata(stderr)%>< / pre > < % end %>
2020-11-22 14:51:31 +00:00
< form class = "inline" method = "post" action = "<%=url('admin/system/' .. menuentry:lower() .. '/wizard_add')%>" enctype = "multipart/form-data" >
2018-03-30 09:12:43 +00:00
< div class = "cbi-map" >
< h2 name = "content" > < %:Wizard%>< / h2 >
2018-03-30 13:47:27 +00:00
< fieldset class = "cbi-section" id = "server" >
2018-11-27 14:21:47 +00:00
< legend > < %:Server settings%>< / legend >
2018-12-12 20:30:15 +00:00
< %
2018-12-12 20:59:08 +00:00
nbserver=0
uci:foreach("openmptcprouter","server", function(s)
nbserver=nbserver+1
end)
2018-12-12 20:30:15 +00:00
uci:foreach("openmptcprouter","server", function(s)
servername = s[".name"]
%>
< div class = "cbi-section-remove right" >
2018-12-17 19:46:53 +00:00
< input type = "submit" name = "deleteserver.<%=servername%>" value = "<%:Delete%>" class = "cbi-button" / >
2018-12-12 20:30:15 +00:00
< input type = "hidden" name = "server.<%=servername%>" value = "<%=servername%>" / >
< / div >
< h3 > < %=servername%>< / h3 >
< div class = "cbi-section-node" id = "cbi-omr-wizard-<%=servername%>" >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" id = "<%=servername%>.server_ip" data-depends = "[{"enableipv6":"1"}]" data-index = "1" >
2021-02-05 18:47:47 +00:00
< label class = "cbi-value-title" for = "server_ip.1" > < %:Server IP%>< / label >
< div class = "cbi-value-field" >
< input name = "<%=servername%>.serverip.ip1" id = "<%=servername%>.server_ip.1" 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 >
< / div >
< / div >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" id = "<%=servername%>.server_ipv6" data-depends = "[{"enableipv6":"0"}]" data-index = "1" >
2021-01-28 19:43:01 +00:00
< label class = "cbi-value-title" for = "server_ip.1" > < %:Server IP%>< / label >
2018-12-12 20:30:15 +00:00
< div class = "cbi-value-field" >
2021-01-29 09:50:57 +00:00
< input name = "<%=servername%>.serverip.ip1" id = "<%=servername%>.server_ip.1" placeholder = "<%:Primary server IP%>" class = "cbi-input-text" value = "<%=uci:get_list(" openmptcprouter " , servername , " ip " ) [ 1 ] % > " data-optional="false">
< input name = "<%=servername%>.serverip.ip2" id = "<%=servername%>.server_ip.2" placeholder = "<%:Secondary server IP%>" class = "cbi-input-text" value = "<%=uci:get_list(" openmptcprouter " , servername , " ip " ) [ 2 ] % > " data-optional="false">
2021-01-28 19:43:01 +00:00
< div class = "cbi-value-description" >
< %:Server IP will be set for proxy and VPN%>
< / div >
2018-12-12 20:30:15 +00:00
< div class = "cbi-value-description" >
2021-02-11 20:12:55 +00:00
< %:A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set%>
2018-12-12 20:30:15 +00:00
< / div >
< / div >
2018-06-26 16:07:36 +00:00
< / div >
2018-12-12 20:30:15 +00:00
< br / >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" data-index = "2" >
2019-11-03 18:22:51 +00:00
< label class = "cbi-value-title" > < %:Server username%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "<%=servername%>.openmptcprouter_vps_username" placeholder = "<%:Server username%>" class = "cbi-input-text" value = "<%=uci:get(" openmptcprouter " , servername , " username " ) % > " data-optional="false">
2019-11-03 18:22:51 +00:00
< br / >
< div class = "cbi-value-description" >
2020-01-02 20:02:03 +00:00
< %:API username to retrieve personnalized settings from the server.%>
2019-11-03 18:22:51 +00:00
< / div >
< / div >
< / div >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" data-index = "3" >
2019-07-15 20:36:24 +00:00
< label class = "cbi-value-title" > < %:Server key%>< / label >
2018-12-12 20:30:15 +00:00
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "<%=servername%>.openmptcprouter_vps_key" placeholder = "<%:Server key%>" class = "cbi-input-text" value = "<%=uci:get(" openmptcprouter " , servername , " password " ) % > " data-optional="false">
2018-12-12 20:30:15 +00:00
< br / >
< div class = "cbi-value-description" >
2019-08-05 14:58:42 +00:00
< %:Key to configure and retrieve others keys from Server and to set server settings from OpenMPTCProuter.%>
2018-12-12 20:30:15 +00:00
< / div >
< / div >
< / div >
2018-12-12 20:59:08 +00:00
< %
if nbserver > 1 then
%>
< br / >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" data-index = "4" >
2019-01-14 17:13:04 +00:00
< label class = "cbi-value-title" > < %:Set server as master%>< / label >
2018-12-12 20:59:08 +00:00
< div class = "cbi-value-field" >
2019-01-14 17:13:04 +00:00
< input class = "cbi-input-radio" type = "radio" name = "master" value = "<%=servername%>" < % if uci:get ( " openmptcprouter " , servername , " master " ) = = " 1 " then % > checked< % end %>/>
< br / >
< div class = "cbi-value-description" >
< %:Only one server can be master, else all servers are set as backup.%>
< / div >
2018-12-12 20:59:08 +00:00
< / div >
< / div >
2018-12-12 20:30:15 +00:00
< %
2018-12-12 20:59:08 +00:00
end
2020-05-11 08:00:14 +00:00
%>
< br / >
2021-02-11 20:12:55 +00:00
< div class = "cbi-value" data-index = "5" >
2020-05-11 08:00:14 +00:00
< label class = "cbi-value-title" > < %:Disable server%>< / label >
< div class = "cbi-value-field" >
2020-06-09 20:36:39 +00:00
< input class = "cbi-input-radio" type = "checkbox" name = "<%=servername%>.openmptcprouter_vps_disabled" value = "1" < % if uci:get ( " openmptcprouter " , servername , " disabled " ) = = " 1 " then % > checked< % end %>/>
2020-05-11 08:00:14 +00:00
< / div >
< / div >
< %
2018-12-12 20:30:15 +00:00
end)
%>
< div class = "cbi-section-create" >
< div >
2018-12-14 19:49:07 +00:00
< input type = "text" class = "cbi-section-create-name" id = "cbi.cts.omr-bypass.server." name = "add_server_name" data-type = "uciname" data-optional = "true" / >
2018-12-12 20:30:15 +00:00
< / div >
2020-09-10 19:05:31 +00:00
< input class = "cbi-button cbi-button-add" type = "submit" onclick = "this.form.cbi_state='add-section'; return true" name = "add_server" value = "<%:Add a new server%>" / >
2018-03-23 19:23:27 +00:00
< / div >
< / div >
2018-12-12 20:30:15 +00:00
< / fieldset >
< fieldset class = "cbi-section" id = "server_common" >
< legend > < %:Common server settings%>< / legend >
2018-11-27 14:21:47 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Advanced settings%>< / label >
< div class = "cbi-value-field" >
< input type = "checkbox" class = "cbi-input-checkbox" id = "showadv" value = "1" onclick = "jsshowadv()" / >
< / div >
< / div >
< / fieldset >
< span id = "advancedsettings" style = "display:none;" >
2020-07-20 08:25:07 +00:00
< fieldset class = "cbi-section" id = "serverretrieve" >
< legend > < %:Retrieve settings from server%>< / legend >
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Force retrieve settings%>< / label >
< div class = "cbi-value-field" >
< input class = "cbi-input-checkbox" type = "checkbox" name = "forceretrieve" value = "1" / >
< br / >
< div class = "cbi-value-description" >
< %:Force retrieve all keys from server.%>
< / div >
< / div >
< / div >
< / fieldset >
2020-05-14 19:12:32 +00:00
< fieldset class = "cbi-section" id = "ipv6" >
< legend > < %:IPv6 settings%>< / legend >
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Enable IPv6%>< / label >
< div class = "cbi-value-field" >
2021-01-29 09:50:57 +00:00
< select class = "cbi-input-select" name = "enableipv6" id = "enableipv6" data-update = "change" size = "1" >
2021-01-28 19:43:01 +00:00
< option value = "1" < % if uci:get ( " openmptcprouter " , " settings " , " disable_ipv6 " ) ~ = " 0 " then % > selected="selected"< % end %>>< %:Disabled%>< / option >
< option value = "0" < % if uci:get ( " openmptcprouter " , " settings " , " disable_ipv6 " ) = = " 0 " then % > selected="selected"< % end %>>< %:Enabled%>< / option >
< / select >
2020-05-14 19:12:32 +00:00
< br / >
< div class = "cbi-value-description" >
< %:You should disable IPv6 here if server doesn't provide IPv6.%>
< / div >
< / div >
< / div >
< div class = "cbi-value" >
2020-06-09 20:36:39 +00:00
< label class = "cbi-value-title" > < %:IPv6 Prefix%>< / label >
2020-05-14 19:12:32 +00:00
< div class = "cbi-value-field" >
2020-06-02 15:19:07 +00:00
< input type = "text" name = "ula" class = "cbi-input-text" value = "<%=uci:get(" network " , " globals " , " ula_prefix " ) % > " />
2020-05-27 16:09:16 +00:00
< br / >
< div class = "cbi-value-description" >
2020-07-20 08:25:07 +00:00
< %:You can use a public IPv6 prefix only if you set only one server.%>
2020-05-27 16:09:16 +00:00
< / div >
2020-05-14 19:12:32 +00:00
< / div >
< / div >
< / fieldset >
2020-08-19 13:46:00 +00:00
< fieldset class = "cbi-section" id = "proxy" >
< legend > < %:Proxy settings%>< / legend >
< div class = "cbi-section-descr" > < %:By default proxy is used for any traffic that is TCP (and UDP for V2Ray).%>< / div >
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Default Proxy%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" name = "default_proxy" size = "1" >
2020-12-15 14:44:47 +00:00
< % if nixio.fs.access("/etc/init.d/shadowsocks-libev") then %>< option value = "shadowsocks" < % if uci:get ( " openmptcprouter " , " settings " , " shadowsocks " ) = = " 0 " or uci:get ( " openmptcprouter " , " settings " , " proxy " ) = = nil then % > selected="selected"< % end %>>Shadowsocks< / option > < % end %>
< % if nixio.fs.access("/etc/init.d/v2ray") then %>< option value = "v2ray" < % if uci:get ( " openmptcprouter " , " settings " , " proxy " ) = = " v2ray " then % > selected="selected"< % end %>>V2Ray< / option > < % end %>
< option value = "none" < % if uci:get ( " openmptcprouter " , " settings " , " proxy " ) = = " none " then % > selected="selected"< % end %>>None< / option >
2020-08-19 13:46:00 +00:00
< / select >
< br / >
< div class = "cbi-value-description" >
< %:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray is enabled.%>
2020-11-08 18:45:32 +00:00
< %:Only ShadowSocks is supported with server multiple IPs for now.%>
2020-08-19 13:46:00 +00:00
< / div >
< / div >
< / div >
2018-03-23 19:23:27 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:ShadowSocks key%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "shadowsocks_key" placeholder = "<%:ShadowSocks key%>" class = "cbi-input-text" value = "<%=uci:get(" shadowsocks-libev " , " sss0 " , " key " ) % > " />
2018-06-07 14:51:37 +00:00
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:ShadowSocks is used for TCP.%>
2018-06-07 14:51:37 +00:00
< / div >
2018-03-23 19:23:27 +00:00
< / div >
< / div >
2018-11-27 14:21:47 +00:00
< div class = "cbi-value" >
2020-08-19 13:46:00 +00:00
< label class = "cbi-value-title" > < %:V2Ray user id%>< / label >
2018-11-27 14:21:47 +00:00
< div class = "cbi-value-field" >
2020-08-19 13:46:00 +00:00
< input type = "text" name = "v2ray_user" placeholder = "<%:V2Ray user%>" class = "cbi-input-text" value = "<%=uci:get(" v2ray " , " omrout " , " s_vmess_user_id " ) % > " />
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:V2Ray is used for TCP and UDP.%>
2020-08-19 13:46:00 +00:00
< / div >
2018-11-27 14:21:47 +00:00
< / div >
< / div >
2019-09-22 06:33:54 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Encryption%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" name = "encryption" size = "1" >
< %
local method=uci:get("shadowsocks-libev","sss0","method")
%>
< option value = "none" < % if method = = " none " then % > selected="selected"< % end %>>< %:None%>< / option >
< option value = "aes-256-gcm" < % if method = = " aes-256-gcm " then % > selected="selected"< % end %>>AES-256-GCM< / option >
2020-07-03 15:36:29 +00:00
< option value = "aes-256-cfb" < % if method = = " aes-256-cfb " then % > selected="selected"< % end %>>AES-256-CFB< / option >
2019-11-01 08:15:51 +00:00
< option value = "chacha20-ietf-poly1305" < % if method = = " chacha20 " or method = = " chacha20-ietf-poly1305 " then % > selected="selected"< % end %>>chacha20< / option >
2020-07-03 15:36:29 +00:00
< option value = "other" < % if method ~ = " chacha20 " and method ~ = " aes-256-gcm " and method ~ = " aes-256-cfb " and method ~ = " chacha20-ietf-poly1305 " and method ~ = " none " then % > selected="selected"< % end %>>< %:other%>< / option >
2019-09-22 06:33:54 +00:00
< / select >
< br / >
< div class = "cbi-value-description" >
< %
if ut.trim(sys.exec("cat /proc/cpuinfo | grep aes")) ~= "" then
%>
< %:An Advanced Encryption Standard (AES) instruction set is integrated in the processor.%>
< % else %>
< %:There is no Advanced Encryption Standard (AES) instruction set integrated in the processor, you should use chacha20.%>
< % end %>
2020-09-04 19:56:09 +00:00
< %:Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN.%>
2019-09-22 06:33:54 +00:00
< / div >
< / div >
< / div >
2018-11-27 14:21:47 +00:00
< / fieldset >
< fieldset class = "cbi-section" id = "vpn" >
< legend > < %:VPN settings%>< / legend >
< div class = "cbi-section-descr" > < %:By default VPN is used for any traffic that is not TCP.%>< / div >
2018-06-12 17:22:55 +00:00
< % if nixio.fs.access("/usr/sbin/glorytun") or nixio.fs.access("/usr/sbin/glorytun-udp") then %>
2018-03-23 19:23:27 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Glorytun key%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "glorytun_key" placeholder = "<%:Glorytun key%>" class = "cbi-input-text" value = "<%=uci:get(" glorytun " , " vpn " , " key " ) % > ">
2018-06-07 14:51:37 +00:00
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:Glorytun TCP is used by default for UDP and ICMP%>
2018-06-07 14:51:37 +00:00
< / div >
< / div >
< / div >
2018-06-12 17:22:55 +00:00
< % end %>
2019-08-02 20:37:45 +00:00
< % if nixio.fs.access("/usr/sbin/dsvpn") then %>
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:A Dead Simple VPN key%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "dsvpn_key" placeholder = "<%:A Dead Simple VPN key%>" class = "cbi-input-text" value = "<%=uci:get(" dsvpn " , " vpn " , " key " ) % > ">
2019-08-02 20:37:45 +00:00
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP%>
2019-08-02 20:37:45 +00:00
< / div >
< / div >
< / div >
< % end %>
2018-06-12 17:22:55 +00:00
< % if nixio.fs.access("/usr/sbin/mlvpn") then %>
2018-06-07 14:51:37 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:MLVPN password%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "mlvpn_password" placeholder = "<%:MLVPN password%>" class = "cbi-input-text" value = "<%=uci:get(" mlvpn " , " general " , " password " ) % > ">
2018-06-07 14:51:37 +00:00
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:MLVPN can replace Glorytun with connections with same latency%>
2018-06-11 08:21:48 +00:00
< / div >
< / div >
< / div >
2018-06-12 17:22:55 +00:00
< % end %>
2019-10-27 07:42:52 +00:00
< % if nixio.fs.access("/usr/sbin/ubond") then %>
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:UBOND password%>< / label >
< div class = "cbi-value-field" >
2019-11-07 20:02:51 +00:00
< input type = "text" name = "ubond_password" placeholder = "<%:UBOND password%>" class = "cbi-input-text" value = "<%=uci:get(" ubond " , " general " , " password " ) % > ">
2019-10-27 07:42:52 +00:00
< br / >
< div class = "cbi-value-description" >
2020-09-16 15:12:49 +00:00
< %:Key is retrieved from server API by default.%> < %:UBOND can replace Glorytun with connections with same latency%>
2019-10-27 07:42:52 +00:00
< / div >
< / div >
< / div >
< % end %>
2018-06-11 08:21:48 +00:00
< div class = "cbi-value" >
< label class = "cbi-value-title" > < %:Default VPN%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" name = "default_vpn" size = "1" >
2018-12-04 15:56:02 +00:00
< %
local available_vpns = uci:get("openmptcprouter","vps","available_vpn") or ""
if available_vpns ~= "" then
if (type(available_vpns) ~= "table") then
available_vpns = {available_vpns}
end
for _, vpn in pairs(available_vpns) do
2020-03-09 12:03:33 +00:00
if vpn == "glorytun_tcp" then
2018-12-04 15:56:02 +00:00
%>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/glorytun") then %>< option value = "glorytun_tcp" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " glorytun_tcp " then % > selected="selected"< % end %>>Glorytun TCP< / option > < % end %>
2020-03-09 12:03:33 +00:00
< % elseif vpn == "glorytun_udp" then %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/glorytun-udp") then %>< option value = "glorytun_udp" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " glorytun_udp " then % > selected="selected"< % end %>>Glorytun UDP< / option > < % end %>
2019-08-02 20:37:45 +00:00
< % elseif vpn == "dsvpn" then %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/dsvpn") then %>< option value = "dsvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " dsvpn " then % > selected="selected"< % end %>>A Dead Simple VPN< / option > < % end %>
2018-12-04 15:56:02 +00:00
< % elseif vpn == "mlvpn" then %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/mlvpn") then %>< option value = "mlvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " mlvpn " then % > selected="selected"< % end %>>MLVPN< / option > < % end %>
2019-10-27 07:42:52 +00:00
< % elseif vpn == "ubond" then %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/ubond") then %>< option value = "ubond" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " ubond " then % > selected="selected"< % end %>>UBOND< / option > < % end %>
2018-12-04 15:56:02 +00:00
< % elseif vpn == "openvpn" then %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/etc/init.d/openvpn") then %>< option value = "openvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " openvpn " then % > selected="selected"< % end %>>OpenVPN TCP< / option > < % end %>
2020-12-11 20:39:49 +00:00
< % elseif vpn == "openvpn_bonding" then %>
< % if nixio.fs.access("/etc/init.d/openvpnbonding") then %>< option value = "openvpn_bonding" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " openvpn_bonding " then % > selected="selected"< % end %>>OpenVPN Bonding< / option > < % end %>
2018-12-04 15:56:02 +00:00
< %
end
end
%>
< option value = "none" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " none " then % > selected="selected"< % end %>>None< / option >
< %
else
%>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/glorytun") then %>< option value = "glorytun_tcp" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " glorytun_tcp " then % > selected="selected"< % end %>>Glorytun TCP< / option > < % end %>
< % if nixio.fs.access("/usr/sbin/glorytun-udp") then %>< option value = "glorytun_udp" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " glorytun_udp " then % > selected="selected"< % end %>>Glorytun UDP< / option > < % end %>
2020-12-19 06:16:10 +00:00
< % if nixio.fs.access("/usr/sbin/dsvpn") then %>< option value = "dsvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " dsvpn " then % > selected="selected"< % end %>>A Dead Simple VPN< / option > < % end %>
2020-12-18 18:44:51 +00:00
< % if nixio.fs.access("/usr/sbin/mlvpn") then %>< option value = "mlvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " mlvpn " then % > selected="selected"< % end %>>MLVPN< / option > < % end %>
< % if nixio.fs.access("/usr/sbin/ubond") then %>< option value = "ubond" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " ubond " then % > selected="selected"< % end %>>UBOND< / option > < % end %>
< % if nixio.fs.access("/etc/init.d/openvpn") then %>< option value = "openvpn" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " openvpn " then % > selected="selected"< % end %>>OpenVPN< / option > < % end %>
2020-12-11 20:39:49 +00:00
< % if nixio.fs.access("/etc/init.d/openvpnbonding") then %>< option value = "openvpn_bonding" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " openvpn_bonding " then % > selected="selected"< % end %>>OpenVPN Bonding< / option > < % end %>
2018-06-29 16:27:21 +00:00
< option value = "none" < % if uci:get ( " openmptcprouter " , " settings " , " vpn " ) = = " none " then % > selected="selected"< % end %>>None< / option >
2018-12-04 15:56:02 +00:00
< %
end
%>
2018-06-11 08:21:48 +00:00
< / select >
< br / >
< div class = "cbi-value-description" >
2020-11-01 08:36:32 +00:00
< %:Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), for all traffic if proxy is disabled.%> < %:All VPN available here can do aggregation over MPTCP or using own internal method.%> < %:OpenVPN can't be used in multi VPS configuration.%>
2018-06-07 14:51:37 +00:00
< / div >
2018-03-23 19:23:27 +00:00
< / div >
< / div >
2018-03-30 13:47:27 +00:00
< / fieldset >
2018-11-27 14:21:47 +00:00
< / span >
2020-10-01 15:16:14 +00:00
< hr / >
2020-09-23 08:11:59 +00:00
< fieldset class = "cbi-section" id = "laninterfaces" >
< legend > < %:LAN interfaces settings%>< / legend >
< %
for _, iface in ipairs(net:get_networks()) do
local ifname = iface:name()
local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[0].network | grep " .. ifname))
if firewall_lan ~= "" then
%>
< h3 > < %=ifname%>< / h3 >
< fieldset class = "cbi-section-node" id = "cbi-openmptcprouter-<%=ifname%>" >
< input type = "hidden" name = "intf.<%=ifname%>" value = "<%=ifname%>" / >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-label" data-index = "1" >
< label class = "cbi-value-title" > < %:Label%>< / label >
< div class = "cbi-value-field" >
< input type = "hidden" id = "cbid.network.<%=ifname%>.lan" name = "cbid.network.<%=ifname%>.lan" value = "1" >
< input type = "text" id = "cbid.network.<%=ifname%>.label" name = "cbid.network.<%=ifname%>.label" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " label " ) % > ">
< br / >
< div class = "cbi-value-description" >
< %:Label for the interface%>
< / div >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-proto" data-index = "3" >
< label class = "cbi-value-title" > < %:Protocol%>< / label >
< div class = "cbi-value-field" >
< % findproto = 0 %>
< 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 " ) = = " " 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-other" value = "other" < % if uci:get ( " network " , ifname , " proto " ) ~ = nil and findproto ~ = 1 then % > selected="selected"< % end %>>< %:Other%>< / option >
< / select >
< br / >
< div class = "cbi-value-description" >
< %:You can use DHCP if you have multiple real ethernet ports.%>
< / div >
< / div >
< / div >
2020-10-07 19:35:13 +00:00
< %
if uci:get("network",ifname,"type") ~= "bridge" then
%>
2020-09-23 17:29:45 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-intf" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.proto":"dhcp"}]" 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" >
< %
iffind=0
for _, ifacea in ipairs(ifaces) do
2020-11-17 14:33:22 +00:00
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
2020-10-29 20:12:09 +00:00
if uci:get("network",ifname,"proto") ~= "macvlan" then
2020-09-23 17:29:45 +00:00
%>
< option value = "<%=ifacea%>" < % if uci:get ( " network " , ifname , " ifname " ) = = ifacea then iffind = 1 % > selected="selected"< % end %>>< %=ifacea%>< / option >
< %
2020-10-29 20:12:09 +00:00
else
%>
< option value = "<%=ifacea%>" < % if uci:get ( " network " , ifname , " masterintf " ) = = ifacea then iffind = 1 % > selected="selected"< % end %>>< %=ifacea%>< / option >
< %
end
2020-09-23 17:29:45 +00:00
end
end
2020-10-29 20:12:09 +00:00
if uci:get("network",ifname,"proto") ~= "macvlan" then
if iffind == 0 and uci:get("network",ifname,"ifname") ~= nil then
2020-09-23 17:29:45 +00:00
%>
< option value = "<%=uci:get(" network " , ifname , " ifname " ) % > " selected="selected">< %=uci:get("network",ifname,"ifname")%>< / option >
< %
2020-10-29 20:12:09 +00:00
end
else
if iffind == 0 and uci:get("network",ifname,"masterintf") ~= nil then
%>
< option value = "<%=uci:get(" network " , ifname , " masterintf " ) % > " selected="selected">< %=uci:get("network",ifname,"masterintf")%>< / option >
< %
end
2020-09-23 17:29:45 +00:00
end
%>
< / select >
< br / >
< div class = "cbi-value-description" >
< %:Choose physical interface.%>
< / div >
< / div >
< / div >
2020-10-07 19:35:13 +00:00
< %
end
%>
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-address" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "5" >
< label class = "cbi-value-title" > < %:IPv4 address%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.ipaddr" name = "cbid.network.<%=ifname%>.ipaddr" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " ipaddr " ) % > " data-type="ip4addr">
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-netmask" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "6" >
< label class = "cbi-value-title" > < %:IPv4 netmask%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.netmask" name = "cbid.network.<%=ifname%>.netmask" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " netmask " ) or " 255 . 255 . 255 . 0 " % > " data-type="ip4addr">
< / div >
< / div >
< / fieldset >
< %
end
end
%>
2020-10-01 15:16:14 +00:00
< hr / >
2018-03-30 13:47:27 +00:00
< fieldset class = "cbi-section" id = "interfaces" >
< legend > < %:Interfaces settings%>< / legend >
< div class = "cbi-section-descr" > < %:You must disable DHCP on your modems and set IP in different networks.%>< / div >
2018-03-23 19:23:27 +00:00
< %
2018-08-17 20:03:17 +00:00
for _, iface in ipairs(net:get_networks()) do
2018-03-23 19:23:27 +00:00
local ifname = iface:name()
2020-09-23 08:11:59 +00:00
local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[1].network | grep " .. ifname))
if firewall_wan ~= "" then
-- local multipath = uci:get("network",ifname,"multipath")
-- local multipathvpn = uci:get("openmptcprouter",ifname,"multipathvpn")
-- local vpn = uci:get("openmptcprouter",ifname,"vpn")
-- if (multipath ~= nil and multipath ~= "off" and vpn ~= "1") or multipathvpn == "1" then
2018-03-23 19:23:27 +00:00
%>
2018-04-20 12:56:19 +00:00
< div class = "cbi-section-remove right" >
< input type = "submit" name = "delete.<%=ifname%>" value = "<%:Delete%>" class = "cbi-button" / >
< / div >
2018-03-30 09:12:43 +00:00
< h3 > < %=ifname%>< / h3 >
2018-04-20 12:56:19 +00:00
< fieldset class = "cbi-section-node" id = "cbi-openmptcprouter-<%=ifname%>" >
< input type = "hidden" name = "intf.<%=ifname%>" value = "<%=ifname%>" / >
2020-01-10 19:39:51 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-label" data-index = "1" >
< label class = "cbi-value-title" > < %:Label%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.label" name = "cbid.network.<%=ifname%>.label" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " label " ) % > ">
< br / >
< div class = "cbi-value-description" >
< %:Label for the interface%>
< / div >
< / div >
< / div >
2020-09-10 19:05:31 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-type" data-index = "2" >
< label class = "cbi-value-title" > < %:Type%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.type" name = "cbid.network.<%=ifname%>.type" size = "1" >
2020-11-27 17:12:10 +00:00
< option id = "cbid.network.<%=ifname%>.type-normal" value = "normal" < % if uci:get ( " network " , ifname , " type " ) ~ = " macvlan " and uci:get ( " network " , ifname , " type " ) ~ = " bridge " then % > selected="selected"< % end %>>< %:Normal%>< / option >
2020-09-10 19:05:31 +00:00
< option id = "cbid.network.<%=ifname%>.type-macvlan" value = "macvlan" < % if uci:get ( " network " , ifname , " type " ) = = " macvlan " then % > selected="selected"< % end %>>< %:MacVLAN%>< / option >
< option id = "cbid.network.<%=ifname%>.type-bridge" value = "bridge" < % if uci:get ( " network " , ifname , " type " ) = = " bridge " then % > selected="selected"< % end %>>< %:Bridge%>< / option >
< / select >
< br / >
< div class = "cbi-value-description" >
< %:Choose MacVLAN if you want to create a virtual interface based on a physical interface.%>
< / div >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-masterintf" data-depends = "[{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "3" >
< 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%>.masterintf" name = "cbid.network.<%=ifname%>.masterintf" size = "1" >
< %
for _, ifacea in ipairs(ifaces) do
2020-11-17 14:33:22 +00:00
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
2020-09-10 19:05:31 +00:00
%>
< option value = "<%=ifacea%>" < % if uci:get ( " network " , ifname , " masterintf " ) = = ifacea then % > selected="selected"< % end %>>< %=ifacea%>< / option >
< %
end
end
%>
< / select >
< br / >
< div class = "cbi-value-description" >
< %:Choose physical interface.%>
< / div >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-proto" data-depends = "[{"cbid.network.<%=ifname%>.type":"normal"},{"cbid.network.<%=ifname%>.type":"bridge"}]" data-index = "3" >
2018-11-27 14:21:47 +00:00
< label class = "cbi-value-title" > < %:Protocol%>< / label >
< div class = "cbi-value-field" >
2020-09-10 19:05:31 +00:00
< % findproto = 0 %>
2018-11-27 14:21:47 +00:00
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.proto" name = "cbid.network.<%=ifname%>.proto" size = "1" >
2020-09-23 08:11:59 +00:00
< 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 >
2020-09-10 19:05:31 +00:00
< option id = "cbid.network.<%=ifname%>.proto-dhcp" value = "dhcp" < % if uci:get ( " network " , ifname , " proto " ) = = " dhcp " then findproto = 1 % > selected="selected"< % end %>>< %:DHCP%>< / option >
2021-01-21 17:59:32 +00:00
< option id = "cbid.network.<%=ifname%>.proto-dhcpv6" value = "dhcpv6" < % if uci:get ( " network " , ifname , " proto " ) = = " dhcpv6 " then findproto = 1 % > selected="selected"< % end %>>< %:DHCPv6%>< / option >
2020-09-10 19:05:31 +00:00
< 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 >
2020-09-15 13:21:30 +00:00
< option id = "cbid.network.<%=ifname%>.proto-pppoe" value = "pppoe" < % if uci:get ( " network " , ifname , " proto " ) = = " pppoe " then findproto = 1 % > selected="selected"< % end %>>< %:PPPoE%>< / option >
2020-09-10 19:05:31 +00:00
< option id = "cbid.network.<%=ifname%>.proto-qmi" value = "qmi" < % if uci:get ( " network " , ifname , " proto " ) = = " qmi " then findproto = 1 % > selected="selected"< % end %>>< %:QMI%>< / option >
2020-09-23 08:11:59 +00:00
< option id = "cbid.network.<%=ifname%>.proto-other" value = "other" < % if uci:get ( " network " , ifname , " proto " ) ~ = nil and findproto ~ = 1 then % > selected="selected"< % end %>>< %:Other%>< / option >
2018-11-27 14:21:47 +00:00
< / select >
< br / >
< div class = "cbi-value-description" >
< %:You can use DHCP if you have multiple real ethernet ports. Select other if you want to use another protocol available in Network Interfaces page.%>
< / div >
< / div >
< / div >
2021-01-21 17:59:32 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-intf" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.proto":"dhcp"},{"cbid.network.<%=ifname%>.proto":"dhcpv6"}]" data-index = "4" >
2020-09-10 19:05:31 +00:00
< 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" >
< %
iffind=0
2021-01-29 16:29:28 +00:00
uciifname=uci:get("network",ifname,"ifname")
2021-02-15 14:35:04 +00:00
if uciifname ~= nil then
if uciifname:match("/") then
realifname=uciifname
vlan=""
else
realifname=splitstring(uciifname,'.')[1] or ""
vlan=splitstring(uciifname,'.')[2] or ""
end
2021-02-06 07:56:44 +00:00
end
2020-09-10 19:05:31 +00:00
for _, ifacea in ipairs(ifaces) do
2020-09-14 17:41:58 +00:00
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
2020-09-10 19:05:31 +00:00
%>
2021-02-01 15:21:58 +00:00
< option value = "<%=ifacea%>" < % if realifname = = ifacea then iffind = 1 % > selected="selected"< % end %>>< %=ifacea%>< / option >
2020-09-10 19:05:31 +00:00
< %
end
end
2021-02-01 15:21:58 +00:00
if iffind == 0 and uciifname ~= nil then
2020-09-10 19:05:31 +00:00
%>
2021-02-01 15:21:58 +00:00
< option value = "<%=uciifname%>" selected = "selected" > < %=uciifname%>< / option >
2020-09-10 19:05:31 +00:00
< %
end
%>
< / select >
2021-02-01 15:21:58 +00:00
< label > < %:VLAN%>< / label >
< input type = "text" id = "cbid.network.<%=ifname%>.vlan" name = "cbid.network.<%=ifname%>.vlan" class = "cbi-input-text" placeholder = "<%:VLAN%>" value = "<%=vlan%>" data-optional = "true" >
2020-09-10 19:05:31 +00:00
< br / >
< div class = "cbi-value-description" >
< %:Choose physical interface.%>
< / div >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-address" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "5" >
2018-04-20 12:56:19 +00:00
< label class = "cbi-value-title" > < %:IPv4 address%>< / label >
< div class = "cbi-value-field" >
2018-11-27 14:21:47 +00:00
< input type = "text" id = "cbid.network.<%=ifname%>.ipaddr" name = "cbid.network.<%=ifname%>.ipaddr" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " ipaddr " ) % > " data-type="ip4addr">
2018-04-20 12:56:19 +00:00
< br / >
< div class = "cbi-value-description" >
< %:Set an IP in the same network as the modem%>
< / div >
2018-04-04 16:08:10 +00:00
< / div >
2018-03-30 09:12:43 +00:00
< / div >
2020-09-10 19:05:31 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-netmask" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "6" >
2018-04-20 12:56:19 +00:00
< label class = "cbi-value-title" > < %:IPv4 netmask%>< / label >
< div class = "cbi-value-field" >
2018-11-27 14:21:47 +00:00
< input type = "text" id = "cbid.network.<%=ifname%>.netmask" name = "cbid.network.<%=ifname%>.netmask" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " netmask " ) or " 255 . 255 . 255 . 0 " % > " data-type="ip4addr">
2018-04-20 12:56:19 +00:00
< / div >
2018-03-30 09:12:43 +00:00
< / div >
2020-09-10 19:05:31 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-gateway" data-depends = "[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "7" >
2018-04-20 12:56:19 +00:00
< label class = "cbi-value-title" > < %:IPv4 gateway%>< / label >
< div class = "cbi-value-field" >
2018-11-27 14:21:47 +00:00
< input type = "text" id = "cbid.network.<%=ifname%>.gateway" name = "cbid.network.<%=ifname%>.gateway" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " gateway " ) % > " data-type="ip4addr">
2018-04-20 12:56:19 +00:00
< br / >
< div class = "cbi-value-description" >
< %:Set here IP of the modem%>
< / div >
2018-04-04 16:08:10 +00:00
< / div >
2018-03-30 09:12:43 +00:00
< / div >
2021-01-18 16:22:27 +00:00
< %
ipv6list = uci:get_list("network",ifname,"ip6addr")
for key, value in pairs(ipv6list) do
%>
2021-01-20 15:39:16 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-ipv6address" data-index = "8" >
2021-01-18 16:22:27 +00:00
< 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
2021-01-21 17:59:32 +00:00
if table.getn(ipv6list) ~= 0 then
2021-01-18 16:22:27 +00:00
%>
2021-01-20 15:39:16 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-ip6gw" data-index = "9" >
2021-01-18 16:22:27 +00:00
< 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 >
2021-01-20 15:39:16 +00:00
< %
else
%>
2021-01-29 09:50:57 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-ipv6address" data-depends = "[{"enableipv6":"0","cbid.network.<%=ifname%>.proto":"static"},{"enableipv6":"0","cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "8" >
2021-01-20 15:39:16 +00:00
< 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 >
2021-01-29 09:50:57 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-ip6gw" data-depends = "[{"enableipv6":"0","cbid.network.<%=ifname%>.proto":"static"},{"enableipv6":"0","cbid.network.<%=ifname%>.type":"macvlan"}]" data-index = "9" >
2021-01-20 15:39:16 +00:00
< 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
%>
2021-02-15 18:53:28 +00:00
<!--
2021-02-15 14:35:04 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-ip6" data-depends = "[{"enableipv6":"0","cbid.network.<%=ifname%>.proto":"static"}]" data-index = "10" >
< label class = "cbi-value-title" > < %:Accept IPv6 RA%>< / label >
< div class = "cbi-value-field" >
< input type = "checkbox" id = "cbid.network.<%=ifname%>.ipv6" name = "cbid.network.<%=ifname%>.ipv6" value = "1" < % if uci:get ( " network " , ifname , " ipv6 " ) = = " 1 " then % > checked< % end %> />
< / div >
< / div >
2021-02-15 18:53:28 +00:00
-->
2020-11-09 14:18:59 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-device-ncm" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"}]" data-index = "5" >
2020-09-10 19:05:31 +00:00
< label class = "cbi-value-title" > < %:Device%>< / label >
< div class = "cbi-value-field" >
2020-11-09 14:18:59 +00:00
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.device.ncm" name = "cbid.network.<%=ifname%>.device.ncm" size = "1" >
2020-09-10 19:05:31 +00:00
< %
iffind=0
iftty = nixio.fs.glob("/dev/ttyUSB*")
for tty in iftty do
%>
< option value = "<%=tty%>" < % if uci:get ( " network " , ifname , " device " ) = = tty then iffind = 1 % > selected="selected"< % end %>>< %=tty%>< / option >
< %
end
iftty = nixio.fs.glob("/dev/cdc-wdm*")
for tty in iftty do
%>
< option value = "<%=tty%>" < % if uci:get ( " network " , ifname , " device " ) = = tty then iffind = 1 % > selected="selected"< % end %>>< %=tty%>< / option >
< %
end
2020-11-05 14:28:41 +00:00
if iffind == 0 and uci:get("network",ifname,"device") ~= nil then
2020-09-10 19:05:31 +00:00
%>
< option value = "<%=uci:get(" network " , ifname , " device " ) % > " selected="selected">< %=uci:get("network",ifname,"device")%>< / option >
< %
end
%>
< / select >
< / div >
< / div >
2020-11-09 14:18:59 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-device-qmi" data-depends = "[{"cbid.network.<%=ifname%>.proto":"qmi"}]" data-index = "5" >
2020-09-10 19:05:31 +00:00
< label class = "cbi-value-title" > < %:Device%>< / label >
< div class = "cbi-value-field" >
2020-11-09 14:18:59 +00:00
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.device.qmi" name = "cbid.network.<%=ifname%>.device.qmi" size = "1" >
2020-09-10 19:05:31 +00:00
< %
iffind=0
iftty = nixio.fs.glob("/dev/cdc-wdm*")
for tty in iftty do
%>
< option value = "<%=tty%>" < % if uci:get ( " network " , ifname , " device " ) = = tty then iffind = 1 % > selected="selected"< % end %>>< %=tty%>< / option >
< %
end
2020-11-05 14:28:41 +00:00
if iffind == 0 and uci:get("network",ifname,"device") ~= nil then
2020-09-10 19:05:31 +00:00
%>
< option value = "<%=uci:get(" network " , ifname , " device " ) % > " selected="selected">< %=uci:get("network",ifname,"device")%>< / option >
< %
end
%>
< / select >
< / div >
< / div >
2020-11-09 14:18:59 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-device-modemmanager" data-depends = "[{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index = "5" >
2020-09-10 19:05:31 +00:00
< label class = "cbi-value-title" > < %:Device%>< / label >
< div class = "cbi-value-field" >
2020-11-09 14:18:59 +00:00
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.device.modemmanager" name = "cbid.network.<%=ifname%>.device.modemmanager" size = "1" >
2020-09-10 19:05:31 +00:00
< %
iffind=0
iftty = luci.sys.exec("/usr/bin/mmcli -L")
for listtty in iftty:gmatch("([^\r\n]*)[\r\n]") do
2020-09-13 06:41:21 +00:00
modemid = luci.util.trim(luci.sys.exec("echo '" .. listtty .. "' | awk -F' ' '{print $1}' | awk -F/ '{print $6}'"))
if modemid ~= '' then
modeminfo = luci.sys.exec("/usr/bin/mmcli -m " .. modemid .. " --output-keyvalue")
tty = luci.util.trim(luci.sys.exec("echo '" .. modeminfo .. "' | grep 'modem.generic.device ' | awk -F': ' '{print $2}'"))
2020-09-10 19:05:31 +00:00
%>
< option value = "<%=tty%>" < % if uci:get ( " network " , ifname , " device " ) = = tty then iffind = 1 % > selected="selected"< % end %>>< %=tty%>< / option >
< %
2020-09-13 06:41:21 +00:00
end
2020-09-10 19:05:31 +00:00
end
2020-11-05 14:28:41 +00:00
if iffind == 0 and uci:get("network",ifname,"device") ~= nil then
2020-09-10 19:05:31 +00:00
%>
< option value = "<%=uci:get(" network " , ifname , " device " ) % > " selected="selected">< %=uci:get("network",ifname,"device")%>< / option >
< %
end
%>
< / select >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-apn" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index = "6" >
< label class = "cbi-value-title" > < %:APN%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.apn" name = "cbid.network.<%=ifname%>.apn" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " apn " ) % > ">
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-pincode" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index = "7" >
< label class = "cbi-value-title" > < %:PIN code%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.pincode" name = "cbid.network.<%=ifname%>.pincode" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " pincode " ) % > ">
< / div >
< / div >
2020-09-15 13:21:30 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-mode" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"}]" data-index = "8" >
< label class = "cbi-value-title" > < %:Service Type%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.mode" name = "cbid.network.<%=ifname%>.mode" size = "1" >
2020-09-15 14:49:42 +00:00
< option value = "" < % if uci:get ( " network " , ifname , " mode " ) = = " " then % > selected="selected"< % end %>>< %:Modem default%>< / option >
< option value = "preferlte" < % if uci:get ( " network " , ifname , " auth " ) = = " preferlte " then % > selected="selected"< % end %>>< %:Prefer LTE%>< / option >
< option value = "preferumts" < % if uci:get ( " network " , ifname , " auth " ) = = " preferumts " then % > selected="selected"< % end %>>< %:Prefer UMTS%>< / option >
< option value = "lte" < % if uci:get ( " network " , ifname , " auth " ) = = " lte " then % > selected="selected"< % end %>>< %:LTE%>< / option >
< option value = "umts" < % if uci:get ( " network " , ifname , " auth " ) = = " umts " then % > selected="selected"< % end %>>< %:UMTS/GPRS%>< / option >
< option value = "gsm" < % if uci:get ( " network " , ifname , " auth " ) = = " gsm " then % > selected="selected"< % end %>>< %:GPRS only%>< / option >
< option value = "auto" < % if uci:get ( " network " , ifname , " auth " ) = = " auto " then % > selected="selected"< % end %>>< %:auto%>< / option >
2020-09-15 13:21:30 +00:00
< / select >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-auth" data-depends = "[{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index = "9" >
< label class = "cbi-value-title" > < %:Authentication Type%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.auth" name = "cbid.network.<%=ifname%>.auth" size = "1" >
2020-09-15 14:49:42 +00:00
< option value = "none" < % if uci:get ( " network " , ifname , " auth " ) = = " none " then % > selected="selected"< % end %>>< %:NONE%>< / option >
< option value = "pap" < % if uci:get ( " network " , ifname , " auth " ) = = " pap " then % > selected="selected"< % end %>>< %:PAP%>< / option >
< option value = "chap" < % if uci:get ( " network " , ifname , " auth " ) = = " chap " then % > selected="selected"< % end %>>< %:CHAP%>< / option >
< option value = "both" < % if uci:get ( " network " , ifname , " auth " ) = = " both " then % > selected="selected"< % end %>>< %:PAP/CHAP%>< / option >
2020-09-15 13:21:30 +00:00
< / select >
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-username" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index = "10" >
< label class = "cbi-value-title" > < %:PAP/CHAP username%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.username" name = "cbid.network.<%=ifname%>.username" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " username " ) % > ">
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-password" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index = "11" >
< label class = "cbi-value-title" > < %:PAP/CHAP password%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.password" name = "cbid.network.<%=ifname%>.password" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " password " ) % > ">
< / div >
< / div >
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-delay" data-depends = "[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"}]" data-index = "12" >
< label class = "cbi-value-title" > < %:Modem init timeout%>< / label >
< div class = "cbi-value-field" >
< input type = "text" id = "cbid.network.<%=ifname%>.delay" name = "cbid.network.<%=ifname%>.delay" class = "cbi-input-text" value = "<%=uci:get(" network " , ifname , " delay " ) % > ">
< / div >
< / div >
2020-10-06 12:06:11 +00:00
< %
if uci:get("openmptcprouter",ifname,"multipathvpn") == "1" then
%>
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-multipath" data-index = "13" >
< label class = "cbi-value-title" > < %:Multipath TCP%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.multipath" name = "cbid.network.<%=ifname%>.multipath" size = "1" >
< option value = "on" < % if uci:get ( " network " , " ovpn " . . ifname , " multipath " ) = = " on " then % > selected="selected"< % end %>>< %:Enabled%>< / option >
< option value = "off" < % if uci:get ( " network " , " ovpn " . . ifname , " multipath " ) = = " off " then % > selected="selected"< % end %>>< %:Disabled%>< / option >
< option value = "master" < % if uci:get ( " network " , " ovpn " . . ifname , " multipath " ) = = " master " then % > selected="selected"< % end %>>< %:Master%>< / option >
< option value = "backup" < % if uci:get ( " network " , " ovpn " . . ifname , " multipath " ) = = " backup " then % > selected="selected"< % end %>>< %:Backup%>< / option >
< / select >
2020-12-15 14:44:47 +00:00
< br / >
< div class = "cbi-value-description" >
< %:Only one interface must be set as "Master", this should be the most stable interface.%>
< / div >
2020-10-06 12:06:11 +00:00
< / div >
< / div >
< % else %>
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" id = "cbi-network-<%=ifname%>-multipath" data-index = "13" >
< label class = "cbi-value-title" > < %:Multipath TCP%>< / label >
< div class = "cbi-value-field" >
< select class = "cbi-input-select" data-update = "change" id = "cbid.network.<%=ifname%>.multipath" name = "cbid.network.<%=ifname%>.multipath" size = "1" >
< option value = "on" < % if uci:get ( " network " , ifname , " multipath " ) = = " on " then % > selected="selected"< % end %>>< %:Enabled%>< / option >
< option value = "off" < % if uci:get ( " network " , ifname , " multipath " ) = = " off " then % > selected="selected"< % end %>>< %:Disabled%>< / option >
< option value = "master" < % if uci:get ( " network " , ifname , " multipath " ) = = " master " then % > selected="selected"< % end %>>< %:Master%>< / option >
< option value = "backup" < % if uci:get ( " network " , ifname , " multipath " ) = = " backup " then % > selected="selected"< % end %>>< %:Backup%>< / option >
< / select >
< / div >
< / div >
2020-10-06 12:06:11 +00:00
< %
end
%>
2020-09-10 19:05:31 +00:00
2018-08-02 07:39:43 +00:00
< %
2019-03-23 22:17:16 +00:00
local download = "0"
local upload = "0"
download = uci:get("network",ifname,"downloadspeed") or "0"
upload = uci:get("network",ifname,"uploadspeed") or "0"
2020-11-26 15:28:21 +00:00
--if download == "0" or upload == "0" then
-- if nixio.fs.access("/etc/init.d/sqm") then
-- download = uci:get("sqm",ifname,"download")
-- upload = uci:get("sqm",ifname,"upload")
-- else
-- download = uci:get("qos",ifname,"download")
-- upload = uci:get("qos",ifname,"upload")
-- end
--end
2018-08-02 07:39:43 +00:00
%>
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" data-index = "14" >
2019-10-26 07:16:28 +00:00
< label class = "cbi-value-title" > < %:MPTCP over VPN%>< / label >
< div class = "cbi-value-field" >
< input class = "cbi-input-checkbox" type = "checkbox" name = "multipathvpn.<%=ifname%>.enabled" value = "1" < % if uci:get ( " openmptcprouter " , ifname , " multipathvpn " ) = = " 1 " then % > checked< % end %> />
< br / >
< div class = "cbi-value-description" >
< %:You can enable MPTCP over VPN if your provider filter Multipath TCP.%>
< / div >
< / div >
< / div >
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" data-index = "15" >
2019-04-03 21:14:25 +00:00
< label class = "cbi-value-title" > < %:Enable SQM%>< / label >
< div class = "cbi-value-field" >
2019-10-26 07:16:28 +00:00
< input class = "cbi-input-checkbox" type = "checkbox" name = "cbid.sqm.<%=ifname%>.enabled" value = "1" < % if uci:get ( " sqm " , ifname , " enabled " ) = = " 1 " then % > checked< % end %> />
2019-04-03 21:14:25 +00:00
< br / >
< div class = "cbi-value-description" >
< %:You should disable SQM for LTE or any interfaces with variable speed.%>
< / div >
< / div >
< / div >
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" data-index = "16" >
2018-08-02 07:39:43 +00:00
< label class = "cbi-value-title" > < %:Download speed (Kb/s)%>< / label >
< div class = "cbi-value-field" >
2018-08-20 12:02:56 +00:00
< input type = "text" name = "cbid.sqm.<%=ifname%>.download" class = "cbi-input-text" value = "<%=download%>" data-type = "uinteger" >
2018-08-02 07:39:43 +00:00
< br / >
2019-03-22 19:27:13 +00:00
< div class = "cbi-value-description" >
2019-04-03 21:14:25 +00:00
< %:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%>
2019-03-22 19:27:13 +00:00
< / div >
<!--
< br / >
2018-08-02 07:39:43 +00:00
< div class = "cbi-value-description" >
2018-12-21 15:20:20 +00:00
< %:Set value between 80-95% of max download speed link. 0 to disable SQM/QoS.%>
2018-08-02 07:39:43 +00:00
< / div >
2019-03-22 19:27:13 +00:00
-->
2018-08-02 07:39:43 +00:00
< / div >
< / div >
2020-09-23 08:11:59 +00:00
< div class = "cbi-value" data-index = "17" >
2018-08-02 07:39:43 +00:00
< label class = "cbi-value-title" > < %:Upload speed (Kb/s)%>< / label >
< div class = "cbi-value-field" >
2018-08-20 12:02:56 +00:00
< input type = "text" name = "cbid.sqm.<%=ifname%>.upload" class = "cbi-input-text" value = "<%=upload%>" data-type = "uinteger" >
2018-08-02 07:39:43 +00:00
< br / >
2019-03-22 19:27:13 +00:00
< div class = "cbi-value-description" >
2019-04-03 21:14:25 +00:00
< %:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%>
2019-03-22 19:27:13 +00:00
< / div >
<!--
< br / >
2018-10-26 14:51:30 +00:00
< div class = "cbi-value-description" >
2018-12-21 15:20:20 +00:00
< %:Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS.%>
2018-10-26 14:51:30 +00:00
< / div >
2019-03-22 19:27:13 +00:00
-->
2018-08-02 07:39:43 +00:00
< / div >
< / div >
2018-04-20 12:56:19 +00:00
< / fieldset >
2018-03-23 19:23:27 +00:00
< %
end
end
%>
2018-04-20 12:56:19 +00:00
< div class = "cbi-section-create" >
2018-09-01 19:59:02 +00:00
< select class = "cbi-section-create-name" name = "add_interface_ifname" >
< %
for _, ifacea in ipairs(ifaces) do
2020-11-17 14:33:22 +00:00
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*")) and device_notvirtual(ifacea) then
2018-09-01 19:59:02 +00:00
%>
< option value = "<%=ifacea%>" > < %=ifacea%>< / option >
2021-01-28 19:43:01 +00:00
< %
end
end
for _, ifacea in ipairs(net:get_networks()) do
2021-01-29 16:29:28 +00:00
if not (ifacea:name() == "loopback" or ifacea:name() == "lan" or ifacea:name() == "omr6in4" or ifacea:name() == "omrvpn" or ifacea:name():match("^omrip.*")) then
2021-01-28 19:43:01 +00:00
%>
< option value = "<%='@' .. ifacea:name()%>" > < %='@' .. ifacea:name() .. ' (alias)'%>< / option >
2018-09-01 19:59:02 +00:00
< %
end
end
%>
< / select >
2018-04-20 12:56:19 +00:00
< input class = "cbi-button cbi-button-add" type = "submit" name = "add_interface" value = "<%:Add an interface%>" title = "<%:Add an interface%>" / >
< / div >
2018-09-01 20:31:00 +00:00
< div class = "cbi-value-description" >
< %:Select the device you want to base the interface on.%>
< / div >
2018-03-30 13:47:27 +00:00
< / fieldset >
2018-03-23 19:23:27 +00:00
< / div >
< div class = "cbi-page-actions" >
< input type = "hidden" name = "token" value = "<%=token%>" / >
2018-07-25 12:44:21 +00:00
< input class = "cbi-button cbi-button-apply" type = "submit" value = "<%:Save & Apply%>" / > < input class = "cbi-button cbi-button-reset" type = "button" value = "Reset" onclick = "location.href='<%=url('admin/system/openmptcprouter/wizard')%>'" / >
2018-03-23 19:23:27 +00:00
< / div >
< / form >
2018-06-26 16:07:36 +00:00
< script type = "text/javascript" > cbi _init ( ) ; < / script >
2018-03-23 19:23:27 +00:00
< %+footer%>