From 3193f4ef70371b9b6f4105419b7a205fdbe07edb Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 9 Aug 2019 17:19:05 +0200 Subject: [PATCH] Use ubus when possible --- .../luasrc/controller/openmptcprouter.lua | 701 +----------------- .../luasrc/view/openmptcprouter/wanstatus.htm | 4 +- 2 files changed, 8 insertions(+), 697 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index d23fd355a..170a86f3e 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -263,7 +263,8 @@ function wizard_add() -- Enable/disable IPv6 local disable_ipv6 = luci.http.formvalue("enableipv6") or "1" - set_ipv6_state(disable_ipv6) + local ut = require "luci.util" + local result = ut.ubus("openmptcprouter", "set_ipv6_state", { disable_ipv6 = disable_ipv6 }) -- Get VPN set by default local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" @@ -591,7 +592,7 @@ function settings_add() -- Disable IPv6 local disable_ipv6 = luci.http.formvalue("enableipv6") or "1" - set_ipv6_state(disable_ipv6) + local dump = require("luci.util").ubus("openmptcprouter", "disableipv6", { disable_ipv6 = disable_ipv6}) -- Enable/disable external check local externalcheck = luci.http.formvalue("externalcheck") or "1" @@ -667,184 +668,19 @@ function update_vps() -- Update VPS local update_vps = luci.http.formvalue("flash") or "" if update_vps ~= "" then - ucic:foreach("openmptcprouter", "server", function(s) - local serverip = ucic:get("openmptcprouter",s[".name"],"ip") - local adminport = ucic:get("openmptcprouter",s[".name"],"port") or "65500" - local token = ucic:get("openmptcprouter",s[".name"],"token") or "" - if token ~= "" then - sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") - luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) - return - end - end) + local ut = require "luci.util" + local result = ut.ubus("openmptcprouter", "update_vps", {}) end end -function get_ip(interface) - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - local ip = "" - if dump and dump['ipv4-address'] then - local _, ipv4address - for _, ipv4address in ipairs(dump['ipv4-address']) do - ip = dump['ipv4-address'][_].address - end - end - if ip == "" then - local dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) - if dump and dump['ipv4-address'] then - local _, ipv4address - for _, ipv4address in ipairs(dump['ipv4-address']) do - ip = dump['ipv4-address'][_].address - end - end - end - return ip -end - function get_device(interface) local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) return dump['l3_device'] end -function get_gateway(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 == "0.0.0.0" 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 == "0.0.0.0" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - - if gateway == "" then - dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) - - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "0.0.0.0" 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 == "0.0.0.0" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - end - return gateway -end - --- This function come from OverTheBox by OVH with some changes --- Copyright 2015 OVH --- Simon Lelievre (simon.lelievre@corp.ovh.com) --- Sebastien Duponcheel --- Modified by Ycarus (Yannick Chabanois) --- Under GPL3+ function interfaces_status() local ut = require "luci.util" - local rv = ut.ubus("openmptcprouter", "status", {}) or {_=0} - - luci.http.prepare_content("application/json") - luci.http.write_json(rv) -end - -function old_interfaces_status() - local ut = require "luci.util" - local ntm = require "luci.model.network".init() - local uci = require "luci.model.uci".cursor() - - local mArray = {} - - -- OpenMPTCProuter info - mArray.openmptcprouter = {} - --mArray.openmptcprouter["version"] = ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::'")) - mArray.openmptcprouter["version"] = uci:get("openmptcprouter", "settings", "version") or ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::' -e 's/^.//' -e 's/.$//'")) - - mArray.openmptcprouter["latest_version_omr"] = uci:get("openmptcprouter", "latest_versions", "omr") or "" - mArray.openmptcprouter["latest_version_vps"] = uci:get("openmptcprouter", "latest_versions", "vps") or "" - - mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "sss0", "server") or "" - mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") - mArray.openmptcprouter["hostname"] = "OpenMPTCProuter" - ucic:foreach("system", "system", function(s) - mArray.openmptcprouter["hostname"] = uci:get("system",s[".name"],"hostname") or "OpenMPTCProuter" - end) - - mArray.openmptcprouter["server_mptcp"] = "" - -- dns - mArray.openmptcprouter["dns"] = false - local dns_test = sys.exec("dig openmptcprouter.com | grep 'ANSWER: 0'") - if dns_test == "" then - mArray.openmptcprouter["dns"] = true - end - - mArray.openmptcprouter["ipv6"] = "disabled" - if uci:get("openmptcprouter","settings","disable_ipv6") ~= "1" then - mArray.openmptcprouter["ipv6"] = "enabled" - end - - mArray.openmptcprouter["ss_addr"] = "" - --mArray.openmptcprouter["ss_addr6"] = "" - mArray.openmptcprouter["wan_addr"] = "" - mArray.openmptcprouter["wan_addr6"] = "" - local tracker_ip = "" - local check_ipv4_website = uci:get("openmptcprouter","settings","check_ipv4_website") or "http://ip.openmptcprouter.com" - local check_ipv6_website = uci:get("openmptcprouter","settings","check_ipv6_website") or "http://ipv6.openmptcprouter.com" - if mArray.openmptcprouter["dns"] == true then - -- wanaddr - --mArray.openmptcprouter["wan_addr"] = uci:get("openmptcprouter","omr","public_detected_ipv4") or "" - - if uci:get("openmptcprouter","settings","external_check") ~= "0" then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("wget -4 -qO- -T 2 " .. check_ipv4_website)) - if mArray.openmptcprouter["wan_addr"] == "" then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig TXT +timeout=2 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) - end - if mArray.openmptcprouter["ipv6"] == "enabled" 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("wget -6 -qO- -T 2 " .. check_ipv6_website)) - end - end - mArray.openmptcprouter["external_check"] = true - else - mArray.openmptcprouter["external_check"] = false - end - -- shadowsocksaddr - mArray.openmptcprouter["ss_addr"] = uci:get("openmptcprouter","omr","detected_ss_ipv4") or "" - if mArray.openmptcprouter["ss_addr"] == "" then - tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" - if tracker_ip ~= "" then - local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") - if uci:get("openmptcprouter","settings","external_check") ~= "0" then - mArray.openmptcprouter["ss_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 2 " .. check_ipv4_website)) - --mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com") - end - end - end - end + local mArray = ut.ubus("openmptcprouter", "status", {}) or {_=0} mArray.openmptcprouter["remote_addr"] = luci.http.getenv("REMOTE_ADDR") or "" mArray.openmptcprouter["remote_from_lease"] = false @@ -856,531 +692,6 @@ function old_interfaces_status() end end - if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then - mArray.openmptcprouter["vps_status"] = "DOWN" - else - mArray.openmptcprouter["vps_status"] = "UP" - end - - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "Not found" - mArray.openmptcprouter["vps_hostname"] = "OpenMPTCProuter Server" - -- Get VPS info - ucic:foreach("openmptcprouter", "server", function(s) - local serverip = uci:get("openmptcprouter",s[".name"],"ip") or "" - if 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 "" - 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 2 -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 or "" - mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or "" - 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 - else - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No answer" - end - else - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No token" - end - end - end) - if mArray.openmptcprouter["vps_hostname"] == "" then - mArray.openmptcprouter["vps_hostname"] = "Server" - end - -- Check openmptcprouter service are running - mArray.openmptcprouter["tun_service"] = false - mArray.openmptcprouter["tun_state"] = "" - mArray.openmptcprouter["tun6_state"] = "" - if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?dsvpn?$'"), "%d+") then - mArray.openmptcprouter["tun_service"] = true - mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") - local tun_dev = uci:get("network","omrvpn","ifname") - if tun_dev == "" then - tun_dev = get_device("omrvpn") - end - if tun_dev ~= "" then - local peer = get_gateway("omrvpn") - if peer == "" then - peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) - end - if peer ~= "" then - local tunnel_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 -I " .. tun_dev .. " " .. peer .. " | grep '100% packet loss'")) - if tunnel_ping_test == "" then - mArray.openmptcprouter["tun_state"] = "UP" - else - mArray.openmptcprouter["tun_state"] = "DOWN" - end - if mArray.openmptcprouter["ipv6"] == "enabled" then - local tunnel_ping6_test = ut.trim(sys.exec("ping6 -w 1 -c 1 fe80::a00:1%6in4-omr6in4 | grep '100% packet loss'")) - if tunnel_ping6_test == "" then - mArray.openmptcprouter["tun6_state"] = "UP" - else - mArray.openmptcprouter["tun6_state"] = "DOWN" - end - end - else - mArray.openmptcprouter["tun_state"] = "DOWN" - mArray.openmptcprouter["tun6_state"] = "DOWN" - end - end - end - - -- check Shadowsocks is running - mArray.openmptcprouter["socks_service"] = false - if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then - mArray.openmptcprouter["socks_service"] = true - end - - mArray.openmptcprouter["socks_service_enabled"] = true - local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0" - if ss_server == "1" then - mArray.openmptcprouter["socks_service_enabled"] = false - end - local ss_key = uci:get("shadowsocks-libev","sss0","key") or "" - mArray.openmptcprouter["socks_service_method"] = uci:get("shadowsocks-libev","sss0","method") - if ss_key == "" then - mArray.openmptcprouter["socks_service_key"] = false - else - mArray.openmptcprouter["socks_service_key"] = true - end - - -- Add DHCP infos by parsing dnsmasq config file - mArray.openmptcprouter.dhcpd = {} - dnsmasq = ut.trim(sys.exec("cat /var/etc/dnsmasq.conf*")) - for itf, range_start, range_end, mask, leasetime in dnsmasq:gmatch("range=[%w,!:-]*set:(%w+),(%d+\.%d+\.%d+\.%d+),(%d+\.%d+\.%d+\.%d+),(%d+\.%d+\.%d+\.%d+),(%w+)") do - mArray.openmptcprouter.dhcpd[itf] = {} - mArray.openmptcprouter.dhcpd[itf].interface = itf - mArray.openmptcprouter.dhcpd[itf].range_start = range_start - mArray.openmptcprouter.dhcpd[itf].range_end = range_end - mArray.openmptcprouter.dhcpd[itf].netmask = mask - mArray.openmptcprouter.dhcpd[itf].leasetime = leasetime - mArray.openmptcprouter.dhcpd[itf].router = mArray.openmptcprouter["local_addr"] - mArray.openmptcprouter.dhcpd[itf].dns = mArray.openmptcprouter["local_addr"] - end - for itf, option, value in dnsmasq:gmatch("option=(%w+),([%w:-]+),(%d+\.%d+\.%d+\.%d+)") do - if mArray.openmptcprouter.dhcpd[itf] then - if option == "option:router" or option == "3" then - mArray.openmptcprouter.dhcpd[itf].router = value - end - if option == "option:dns-server" or option == "6" then - mArray.openmptcprouter.dhcpd[itf].dns = value - end - end - end - - -- Parse mptcp kernel info - local mptcp = {} - local fullmesh = ut.trim(sys.exec("cat /proc/net/mptcp_fullmesh")) - for ind, addressId, backup, ipaddr in fullmesh:gmatch("(%d+), (%d+), (%d+), (%d+\.%d+\.%d+\.%d+)") do - mptcp[ipaddr] = {} - mptcp[ipaddr].index = ind - mptcp[ipaddr].id = addressId - mptcp[ipaddr].backup= backup - mptcp[ipaddr].ipaddr= ipaddr - end - - -- retrieve core temperature - --mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input 2>/dev/null"):match("%d+") - mArray.openmptcprouter["loadavg"] = sys.exec("cat /proc/loadavg 2>/dev/null"):match("[%d%.]+ [%d%.]+ [%d%.]+") - mArray.openmptcprouter["uptime"] = sys.exec("cat /proc/uptime 2>/dev/null"):match("[%d%.]+") - - mArray.openmptcprouter["fstype"] = sys.exec("cat /proc/mounts 2>/dev/null | awk '/\\/dev\\/root/ {print $3}' | tr -d '\n'") - if mArray.openmptcprouter["fstype"] == "ext4" then - if sys.exec("cat /proc/mounts 2>/dev/null | awk '/\\/dev\\/root/ {print $4}' | grep ro") == "" then - mArray.openmptcprouter["fsro"] = false - else - mArray.openmptcprouter["fsro"] = true - end - elseif mArray.openmptcprouter["fstype"] == "squashfs" then - if sys.exec("cat /proc/mounts 2>/dev/null | awk '/overlayfs/ {print $4}' | grep overlay") == "" then - mArray.openmptcprouter["fsro"] = true - else - mArray.openmptcprouter["fsro"] = false - end - end - - -- overview status - mArray.wans = {} - mArray.tunnels = {} - allintf = {} - - uci:foreach("network", "interface", function (section) - local interface = section[".name"] - local net = ntm:get_network(interface) - local ipaddr = net:ipaddr() or "" - local gateway = section["gateway"] or "" - local multipath = section["multipath"] - local enabled = section["auto"] - - --if not ipaddr or not gateway then return end - -- Don't show if0 in the overview - --if interface == "lo" then return end - - local ifname = get_device(interface) - if ifname == "" or ifname == nil then - ifname = section["ifname"] or "" - end - duplicateif = false - if ifname ~= "" and ifname ~= nil then - if allintf[ifname] then - connectivity = "ERROR" - duplicateif = true - else - allintf[ifname] = true - end - end - - --if multipath == "off" and not ifname:match("^tun.*") then return end - if multipath == "off" then return end - - if enabled == "0" then return end - - local connectivity - local multipath_state = "" - local current_multipath_state = "" - if ifname ~= "" and ifname ~= nil then - if fs.access("/sys/class/net/" .. ifname) then - multipath_state = ut.trim(sys.exec("multipath " .. ifname .. " | grep deactivated")) - if multipath_state == "" then - connectivity = "OK" - else - connectivity = "ERROR" - end - else - connectivity = "ERROR" - end - else - connectivity = "ERROR" - end - if ifname ~= "" and ifname ~= nil then - local test_current_multipath_state = ut.trim(sys.exec("multipath " .. ifname)) - if string.find(test_current_multipath_state,"deactivated") then - current_multipath_state = "off" - elseif string.find(test_current_multipath_state,"default") then - current_multipath_state = "on" - elseif string.find(test_current_multipath_state,"backup") then - current_multipath_state = "backup" - elseif string.find(test_current_multipath_state,"handover") then - current_multipath_state = "handover" - else - current_multipath_state = "" - end - end - - if ipaddr == "" and ifname ~= nil and ifname ~= "" then - ipaddr = ut.trim(sys.exec("ip -4 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'")) - end - 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 - connectivity = "ERROR" - end - - -- Detect WAN gateway status - local gw_ping = "UP" - if gateway == "" then - gateway = get_gateway(interface) - end - if gateway == "" and ifname ~= nil and ifname ~= "" then - if fs.access("/sys/class/net/" .. ifname) then - gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) - if gateway == "" then - gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'")) - end - end - end - 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 - elseif gateway == "" then - gw_ping = "DOWN" - connectivity = "ERROR" - end - - local latency = "" - local server_ping = "" - if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" then - local serverip = mArray.openmptcprouter["service_addr"] - if serverip == "127.0.0.1" then - serverip = mArray.openmptcprouter["wan_addr"] - end - if serverip ~= "" then - local server_ping_test = sys.exec("ping -w 1 -c 1 -I " .. ifname .. " " .. serverip) - local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) - if server_ping_result ~= "" then - server_ping = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - else - mArray.openmptcprouter["vps_status"] = "UP" - server_ping = "UP" - latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f5 | cut -d '.' -f1")) - end - end - end - - local multipath_available - if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and gateway ~= "" and gw_ping == "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 - --if mArray.openmptcprouter["service_addr"] ~= "" then - -- multipath_available_state = ut.trim(sys.exec("omr-tracebox-mptcp " .. mArray.openmptcprouter["service_addr"] .. " " .. ifname .. " | grep 'MPTCP disabled'")) - --else - multipath_available_state = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) - --end - else - multipath_available_state = ut.trim(sys.exec("echo '" .. multipath_available_state .. "' | grep 'MPTCP disabled'")) - end - if multipath_available_state == "" then - multipath_available = "OK" - else - multipath_available_state_wan = ut.trim(sys.exec("omr-mptcp-intf " .. ifname .. " | grep 'Nay, Nay, Nay'")) - if multipath_available_state_wan == "" then - multipath_available = "OK" - if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then - mArray.openmptcprouter["server_mptcp"] = "disabled" - end - else - multipath_available = "ERROR" - connectivity = "WARNING" - end - end - else - multipath_available = "NO CHECK" - end - - - -- Detect if WAN get an IPv6 - local ipv6_discover = "NONE" - if ifname ~= "" and ifname ~= nil and mArray.openmptcprouter["ipv6"] == "enabled" then - local ipv6_result = _ipv6_discover(ifname) - if type(ipv6_result) == "table" and #ipv6_result > 0 then - local ipv6_addr_test - for k,v in ipairs(ipv6_result) do - if v.RecursiveDnsServer then - if type(v.RecursiveDnsServer) ~= "table" then - ipv6_addr_test = sys.exec("ip -6 addr | grep " .. v.RecursiveDnsServer) - if ipv6_addr_test == "" then - ipv6_discover = "DETECTED" - if connectivity == "OK" then - connectivity = "WARNING" - end - end - end - end - end - end - end - - local publicIP = uci:get("openmptcprouter",interface,"publicip") or "" - if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then - publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) - end - local whois = "" - if publicIP ~= "" then - whois = uci:get("openmptcprouter",interface,"asn") or "" - if whois == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" 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'")) - end - end - - local mtu = "" - 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 "" - end - end - end - - local data = { - label = section["label"] or interface, - name = interface, - link = net:adminlink(), - ifname = ifname, - ipaddr = ipaddr, - gateway = gateway, - multipath = section["multipath"], - status = connectivity, - wanip = publicIP, - latency = latency, - mtu = mtu, - whois = whois or "unknown", - qos = section["trafficcontrol"], - download = section["download"], - upload = section["upload"], - gw_ping = gw_ping, - server_ping = server_ping, - ipv6_discover = ipv6_discover, - multipath_available = multipath_available, - multipath_state = current_multipath_state, - duplicateif = duplicateif, - } - - if ifname ~= nil and ifname:match("^tun.*") then - table.insert(mArray.tunnels, data); - elseif ifname ~= nil and ifname:match("^mlvpn.*") then - table.insert(mArray.tunnels, data); - else - table.insert(mArray.wans, data); - end - end) - luci.http.prepare_content("application/json") luci.http.write_json(mArray) end - --- This come from OverTheBox by OVH --- Copyright 2015 OVH --- Simon Lelievre (simon.lelievre@corp.ovh.com) --- Sebastien Duponcheel --- Under GPL3+ -function _ipv6_discover(interface) - local result = {} - - --local ra6_list = (sys.exec("rdisc6 -nm " .. interface)) - local ra6_list = (sys.exec("rdisc6 -n1 -r1 " .. interface)) - -- dissect results - local lines = {} - local index = {} - ra6_list:gsub('[^\r\n]+', function(c) - table.insert(lines, c) - if c:match("Hop limit") then - table.insert(index, #lines) - end - end) - local ra6_result = {} - for k,v in ipairs(index) do - local istart = v - local iend = index[k+1] or #lines - - local entry = {} - for i=istart,iend - 1 do - local level = lines[i]:find('%w') - local line = lines[i]:sub(level) - - local param, value - if line:match('^from') then - param, value = line:match('(from)%s+(.*)$') - else - param, value = line:match('([^:]+):(.*)$') - -- Capitalize param name and remove spaces - param = param:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end):gsub("[%s-]",'') - param = param:gsub("%.$", '') - -- Remove text between brackets, seconds and spaces - value = value:lower() - value = value:gsub("%(.*%)", '') - value = value:gsub("%s-seconds%s-", '') - value = value:gsub("^%s+", '') - value = value:gsub("%s+$", '') - end - - if entry[param] == nil then - entry[param] = value - elseif type(entry[param]) == "table" then - table.insert(entry[param], value) - else - old = entry[param] - entry[param] = {} - table.insert(entry[param], old) - table.insert(entry[param], value) - end - end - table.insert(ra6_result, entry) - end - return ra6_result -end - -function set_ipv6_state(disable_ipv6) - -- Disable/Enable IPv6 support - --luci.sys.exec("sysctl -qw net.ipv6.conf.all.disable_ipv6=%s" % disable_ipv6) - --luci.sys.exec("sed -i 's:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % disable_ipv6) - luci.sys.exec("sysctl -qw net.ipv6.conf.all.disable_ipv6=0") - luci.sys.exec("sed -i 's:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=0:' /etc/sysctl.d/zzz_openmptcprouter.conf" % disable_ipv6) - - -- Disable/Enable IPv6 for firewall - ucic:set("firewall",ucic:get_first("firewall","defaults"),"disable_ipv6",disable_ipv6) - ucic:save("firewall") - ucic:commit("firewall") - - -- Disable/Enable IPv6 in OpenMPTCProuter settings - ucic:set("openmptcprouter","settings","disable_ipv6",disable_ipv6) - ucic:commit("openmptcprouter") - - -- Disable/Enable route announce of IPv6 - if disable_ipv6 == "1" then - ucic:set("dhcp","lan","ra_default","0") - ucic:set("network","lan","ipv6","0") - --luci.sys.call("uci -q del network.lan.ipifaceid") - else - -- ucic:set("dhcp","lan","ra_default","1") - ucic:set("network","lan","ipv6","1") - ucic:set("network","lan","delegate","0") - --ucic:set("network","lan","ipifaceid","random") - end - ucic:save("network") - ucic:commit("network") - - -- Disable/Enable IPv6 DHCP and change Shadowsocks listen address - if disable_ipv6 == "1" then - luci.sys.call("uci -q del dhcp.lan.dhcpv6") - luci.sys.call("uci -q del dhcp.lan.ra") - luci.sys.call("uci -q del dhcp.lan.ra_default") - luci.sys.call("uci -q del dhcp.lan.ra_management") - luci.sys.call("uci -q del dhcp.lan.ra_preference") - ucic:set("shadowsocks-libev","hi","local_address","0.0.0.0") - else - ucic:set("dhcp","lan","dhcpv6","server") - ucic:set("dhcp","lan","ra","server") - ucic:set("dhcp","lan","ra_default","1") - ucic:set("dhcp","lan","ra_preference","high") - ucic:set("dhcp","lan","ra_management","1") - ucic:set("shadowsocks-libev","hi","local_address","::") - end - ucic:save("dhcp") - ucic:commit("dhcp") - --if disable_ipv6 == "1" then - -- luci.sys.exec("/etc/init.d/odhcpd stop >/dev/null 2>&1") - -- luci.sys.exec("/etc/init.d/odhcpd disable >/dev/null 2>&1") - --else - -- luci.sys.exec("/etc/init.d/odhcpd start >/dev/null 2>&1") - -- luci.sys.exec("/etc/init.d/odhcpd enable >/dev/null 2>&1") - --end -end \ No newline at end of file diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index d8d0c6c46..ae005069a 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -75,7 +75,7 @@ var statusMessage = _('Your IP was not leased by this router'); } } else { - var title = String.format('
%s', _('You')) + var title = String.format('
%s', _('Clients')) var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; var statusMessage = ""; @@ -544,7 +544,7 @@

Settings

- +