X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=applications%2Fluci-app-mwan3%2Fluasrc%2Fmodel%2Fcbi%2Fmwan%2Finterface.lua;h=162b388d17e944319e95615fbb3d365412edad8f;hp=4b1a070d1bffdb981bff86fb5aabe01630cbab85;hb=65eacaef1627a365d6242c7b636c1e731c167fbd;hpb=44132150fc71b6aac0a9e8723bc8efe16bd8104c diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua index 4b1a070d1..162b388d1 100644 --- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua @@ -3,42 +3,43 @@ -- Licensed to the public under the GNU General Public License v2. dsp = require "luci.dispatcher" +uci = require "uci" -function interfaceWarnings(overview, count) +function interfaceWarnings(overview, count, iface_max) local warnings = "" - if count <= 250 then - warnings = string.format("%s
", - translatef("There are currently %d of 250 supported interfaces configured", count) + if count <= iface_max then + warnings = string.format("%s
", + translatef("There are currently %d of %d supported interfaces configured", count, iface_max) ) else - warnings = string.format("%s
", - translatef("WARNING: %d interfaces are configured exceeding the maximum of 250!", count) + warnings = string.format("%s
", + translatef("WARNING: %d interfaces are configured exceeding the maximum of %d!", count, iface_max) ) end for i, k in pairs(overview) do if overview[i]["network"] == false then - warnings = warnings .. string.format("%s
", + warnings = warnings .. string.format("%s
", translatef("WARNING: Interface %s are not found in /etc/config/network", i) ) end if overview[i]["default_route"] == false then - warnings = warnings .. string.format("%s
", + warnings = warnings .. string.format("%s
", translatef("WARNING: Interface %s has no default route in the main routing table", i) ) end if overview[i]["reliability"] == false then - warnings = warnings .. string.format("%s
", + warnings = warnings .. string.format("%s
", translatef("WARNING: Interface %s has a higher reliability " .. "requirement than tracking hosts (%d)", i, overview[i]["tracking"]) ) end if overview[i]["duplicate_metric"] == true then - warnings = warnings .. string.format("%s
", + warnings = warnings .. string.format("%s
", translatef("WARNING: Interface %s has a duplicate metric %s configured", i, overview[i]["metric"]) ) end @@ -103,16 +104,43 @@ function configCheck() end end ) - return overview, count + + -- calculate iface_max usage from firewall mmx_mask + function bit(p) + return 2 ^ (p - 1) + end + function hasbit(x, p) + return x % (p + p) >= p + end + function setbit(x, p) + return hasbit(x, p) and x or x + p + end + + local uci = require("uci").cursor(nil, "/var/state") + local mmx_mask = uci:get("mwan3", "globals", "mmx_mask") or "0x3F00" + local number = tonumber(mmx_mask, 16) + local bits = 0 + local iface_max = 0 + for i=1,16 do + if hasbit(number, bit(i)) then + bits = bits + 1 + iface_max = setbit( iface_max, bit(bits)) + end + end + + -- subtract blackhole, unreachable and default table from iface_max + iface_max = iface_max - 3 + + return overview, count, iface_max end m5 = Map("mwan3", translate("MWAN - Interfaces"), interfaceWarnings(configCheck())) mwan_interface = m5:section(TypedSection, "interface", nil, - translate("MWAN supports up to 250 physical and/or logical interfaces
" .. + translate("MWAN supports up to 252 physical and/or logical interfaces
" .. "MWAN requires that all interfaces have a unique metric configured in /etc/config/network
" .. - "Names must match the interface name found in /etc/config/network (see advanced tab)
" .. + "Names must match the interface name found in /etc/config/network
" .. "Names may contain characters A-Z, a-z, 0-9, _ and no spaces
" .. "Interfaces may not share the same name as configured members, policies or rules")) mwan_interface.addremove = true @@ -142,7 +170,7 @@ track_method.rawhtml = true function track_method.cfgvalue(self, s) local tracked = self.map:get(s, "track_ip") if tracked then - return self.map:get(s, "track_method") or "—" + return self.map:get(s, "track_method") or "ping" else return "—" end @@ -153,7 +181,7 @@ reliability.rawhtml = true function reliability.cfgvalue(self, s) local tracked = self.map:get(s, "track_ip") if tracked then - return self.map:get(s, "reliability") or "—" + return self.map:get(s, "reliability") or "1" else return "—" end @@ -168,7 +196,7 @@ function interval.cfgvalue(self, s) if intervalValue then return intervalValue .. "s" else - return "—" + return "5s" end else return "—" @@ -180,7 +208,7 @@ down.rawhtml = true function down.cfgvalue(self, s) local tracked = self.map:get(s, "track_ip") if tracked then - return self.map:get(s, "down") or "—" + return self.map:get(s, "down") or "3" else return "—" end @@ -191,7 +219,7 @@ up.rawhtml = true function up.cfgvalue(self, s) local tracked = self.map:get(s, "track_ip") if tracked then - return self.map:get(s, "up") or "—" + return self.map:get(s, "up") or "3" else return "—" end