Merge pull request #1801 from dibdot/adblock
authorDirk Brenken <dev@brenken.org>
Fri, 18 May 2018 16:31:07 +0000 (18:31 +0200)
committerGitHub <noreply@github.com>
Fri, 18 May 2018 16:31:07 +0000 (18:31 +0200)
luci-app-adblock: respect SimpleForm size limit

98 files changed:
applications/luci-app-commands/luasrc/view/commands.htm
applications/luci-app-ddns/Makefile
applications/luci-app-ddns/luasrc/view/ddns/global_value.htm
applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
applications/luci-app-mwan3/luasrc/controller/mwan3.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
applications/luci-app-openvpn/Makefile
applications/luci-app-pagekitec/po/ja/pagekitec.po [new file with mode: 0644]
applications/luci-app-radicale/luasrc/view/radicale/tabmap_nsections.htm
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua
applications/luci-app-upnp/po/ca/upnp.po
applications/luci-app-upnp/po/cs/upnp.po
applications/luci-app-upnp/po/de/upnp.po
applications/luci-app-upnp/po/el/upnp.po
applications/luci-app-upnp/po/en/upnp.po
applications/luci-app-upnp/po/es/upnp.po
applications/luci-app-upnp/po/fr/upnp.po
applications/luci-app-upnp/po/he/upnp.po
applications/luci-app-upnp/po/hu/upnp.po
applications/luci-app-upnp/po/it/upnp.po
applications/luci-app-upnp/po/ja/upnp.po
applications/luci-app-upnp/po/ms/upnp.po
applications/luci-app-upnp/po/no/upnp.po
applications/luci-app-upnp/po/pl/upnp.po
applications/luci-app-upnp/po/pt-br/upnp.po
applications/luci-app-upnp/po/pt/upnp.po
applications/luci-app-upnp/po/ro/upnp.po
applications/luci-app-upnp/po/ru/upnp.po
applications/luci-app-upnp/po/sk/upnp.po
applications/luci-app-upnp/po/sv/upnp.po
applications/luci-app-upnp/po/templates/upnp.pot
applications/luci-app-upnp/po/tr/upnp.po
applications/luci-app-upnp/po/uk/upnp.po
applications/luci-app-upnp/po/vi/upnp.po
applications/luci-app-upnp/po/zh-cn/upnp.po
applications/luci-app-upnp/po/zh-tw/upnp.po
contrib/package/lucihttp/Makefile
libs/luci-lib-json/luasrc/json.lua
modules/luci-base/htdocs/luci-static/resources/xhr.js
modules/luci-base/luasrc/cbi.lua
modules/luci-base/luasrc/controller/admin/servicectl.lua [deleted file]
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/http.lua
modules/luci-base/luasrc/model/network.lua
modules/luci-base/luasrc/model/uci.lua
modules/luci-base/luasrc/model/uci.luadoc
modules/luci-base/luasrc/view/cbi/apply_widget.htm [new file with mode: 0644]
modules/luci-base/luasrc/view/cbi/apply_xhr.htm [deleted file]
modules/luci-base/luasrc/view/cbi/footer.htm
modules/luci-base/luasrc/view/cbi/map.htm
modules/luci-base/po/ca/base.po
modules/luci-base/po/cs/base.po
modules/luci-base/po/de/base.po
modules/luci-base/po/el/base.po
modules/luci-base/po/en/base.po
modules/luci-base/po/es/base.po
modules/luci-base/po/fr/base.po
modules/luci-base/po/he/base.po
modules/luci-base/po/hu/base.po
modules/luci-base/po/it/base.po
modules/luci-base/po/ja/base.po
modules/luci-base/po/ko/base.po
modules/luci-base/po/ms/base.po
modules/luci-base/po/no/base.po
modules/luci-base/po/pl/base.po
modules/luci-base/po/pt-br/base.po
modules/luci-base/po/pt/base.po
modules/luci-base/po/ro/base.po
modules/luci-base/po/ru/base.po
modules/luci-base/po/sk/base.po
modules/luci-base/po/sv/base.po
modules/luci-base/po/templates/base.pot
modules/luci-base/po/tr/base.po
modules/luci-base/po/uk/base.po
modules/luci-base/po/vi/base.po
modules/luci-base/po/zh-cn/base.po
modules/luci-base/po/zh-tw/base.po
modules/luci-base/root/etc/config/luci
modules/luci-base/root/etc/config/ucitrack
modules/luci-base/root/etc/init.d/ucitrack [new file with mode: 0755]
modules/luci-mod-admin-full/luasrc/controller/admin/system.lua
modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm [deleted file]
modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
modules/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm
modules/luci-mod-freifunk/htdocs/luci-static/flashing.html
modules/luci-mod-rpc/luasrc/controller/rpc.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua

index 3b36155..4285f25 100644 (file)
 
                if (legend && output)
                {
-                       var prefix = location.protocol + '//' + location.hostname +
-                                  (location.port ? ':' + location.port : '') +
-                                          location.pathname.split(';')[0] + 'command/';
+                       var prefix = location.protocol + '//' + location.host + '<%=url('command')%>/';
                        var suffix = (args ? '/' + args : '');
                        
                        var link = prefix + id + suffix;
index 06dbefb..bd6ddeb 100644 (file)
@@ -16,7 +16,7 @@ PKG_VERSION:=2.4.9
 
 # Release == build
 # increase on changes of translation files
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_LICENSE:=Apache-2.0
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
index 23ec059..3cbb66b 100644 (file)
@@ -25,9 +25,8 @@
 />
 <br />
 <div class="cbi-value-description">
-       <span class="cbi-value-helpicon"><img src="<%=resource%>/cbi/help.gif" alt="<%:help%>" /><%=self.description%></span>
-       <br />
-       <span id="<%=cbid%>.help" class="cbi-value-helpicon"><%:Current setting%>: <strong><%=self.date_string%></strong></span>
+       <span class="cbi-value-helpicon"><img src="<%=resource%>/cbi/help.gif" alt="<%:help%>" /></span><%=self.description%>
+       <br /><%:Current setting%>: <strong><%=self.date_string%></strong>
 </div> <!-- div class="cbi-value-description" -->
 </div> <!-- div class="cbi-value-field" -->
 </div> <!-- div class="cbi-value cbi-value-last" -->
index 7553504..a42c149 100644 (file)
@@ -68,12 +68,6 @@ function name.write(self, section, value)
                out.exclude = value
                inp.exclude = value
        end
-
-       m.redirect = ds.build_url("admin/network/firewall/zones", value)
-       m.title = "%s - %s" %{
-               translate("Firewall - Zone Settings"),
-               translatef("Zone %q", value or "?")
-       }
 end
 
 p = {
index d5fc4a3..18c2135 100644 (file)
@@ -97,9 +97,9 @@ function diagnosticsData(interface, task)
                return interfaceNumber
        end
 
-       function diag_command(cmd, addr)
+       function diag_command(cmd, device, addr)
                if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then
-                       local util = io.popen(cmd % ut.shellquote(addr))
+                       local util = io.popen(cmd %{ut.shellquote(device), ut.shellquote(addr)})
                        if util then
                                while true do
                                        local ln = util:read("*l")
@@ -114,8 +114,14 @@ function diagnosticsData(interface, task)
        end
 
        function get_gateway(inteface)
-               local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
-               local gateway
+               local gateway = nil
+               local dump = nil
+
+               dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {})
+               if not dump then
+                       dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
+               end
+
                if dump and dump.route then
                        local _, route
                        for _, route in ipairs(dump.route) do
@@ -139,7 +145,7 @@ function diagnosticsData(interface, task)
                if task == "ping_gateway" then
                        local gateway = get_gateway(interface)
                        if gateway ~= nil then
-                               diag_command("ping -c 5 -W 1 %s 2>&1", gateway)
+                               diag_command("ping -I %s -c 5 -W 1 %s 2>&1", device, gateway)
                        else
                                luci.http.prepare_content("text/plain")
                                luci.http.write(string.format("No gateway for interface %s found.", interface))
@@ -148,7 +154,7 @@ function diagnosticsData(interface, task)
                        local trackips = uci:get("mwan3", interface, "track_ip")
                        if #trackips > 0 then
                                for i in pairs(trackips) do
-                                       diag_command("ping -c 5 -W 1 %s 2>&1", trackips[i])
+                                       diag_command("ping -I %s -c 5 -W 1 %s 2>&1", device, trackips[i])
                                end
                        else
                                luci.http.write(string.format("No tracking Hosts for interface %s defined.", interface))
index a439502..a6570e3 100644 (file)
@@ -54,6 +54,7 @@ count:value("5")
 
 size = mwan_interface:option(Value, "size", translate("Ping size"))
 size.default = "56"
+size:depends("track_method", "ping")
 size:value("8")
 size:value("24")
 size:value("56")
@@ -67,6 +68,52 @@ size.datatype = "range(1, 65507)"
 size.rmempty = false
 size.optional = false
 
+check_quality = mwan_interface:option(Flag, "check_quality", translate("Check link quality"))
+check_quality:depends("track_method", "ping")
+check_quality.default = false
+
+failure_latency = mwan_interface:option(Value, "failure_latency", translate("Max packet latency [ms]"))
+failure_latency:depends("check_quality", 1)
+failure_latency.default = "1000"
+failure_latency:value("25")
+failure_latency:value("50")
+failure_latency:value("75")
+failure_latency:value("100")
+failure_latency:value("150")
+failure_latency:value("200")
+failure_latency:value("250")
+failure_latency:value("300")
+
+failure_loss = mwan_interface:option(Value, "failure_loss", translate("Max packet loss [%]"))
+failure_loss:depends("check_quality", 1)
+failure_loss.default = "20"
+failure_loss:value("2")
+failure_loss:value("5")
+failure_loss:value("10")
+failure_loss:value("20")
+failure_loss:value("25")
+
+recovery_latency = mwan_interface:option(Value, "recovery_latency", translate("Min packet latency [ms]"))
+recovery_latency:depends("check_quality", 1)
+recovery_latency.default = "500"
+recovery_latency:value("25")
+recovery_latency:value("50")
+recovery_latency:value("75")
+recovery_latency:value("100")
+recovery_latency:value("150")
+recovery_latency:value("200")
+recovery_latency:value("250")
+recovery_latency:value("300")
+
+recovery_loss = mwan_interface:option(Value, "recovery_loss", translate("Min packet loss [%]"))
+recovery_loss:depends("check_quality", 1)
+recovery_loss.default = "5"
+recovery_loss:value("2")
+recovery_loss:value("5")
+recovery_loss:value("10")
+recovery_loss:value("20")
+recovery_loss:value("25")
+
 timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout"))
 timeout.default = "2"
 timeout:value("1", translatef("%d second", 1))
index a8070fd..380ee73 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=LuCI Support for OpenVPN
 LUCI_DEPENDS:=
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-pagekitec/po/ja/pagekitec.po b/applications/luci-app-pagekitec/po/ja/pagekitec.po
new file mode 100644 (file)
index 0000000..c303f58
--- /dev/null
@@ -0,0 +1,59 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.7\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid ""
+"<p/>Note: you need a working PageKite account, or at least, your own running "
+"front end for this form to work. Visit <a href=\"https://pagekite.net/home/"
+"\">your account</a> to set up a name for your router and get a secret key "
+"for the connection. <p/><em>Note: this web configurator only supports some "
+"very very basic uses of pagekite.</em>"
+msgstr ""
+"<p/>注意: 動作には PageKite アカウント、もしくは少なくともこのフォーム用の実"
+"行中のフロントエンドが必要です。ルーター用の名前をセットアップするには<a "
+"href=\"https://pagekite.net/home/\">アカウント</a>へアクセスし、接続用のシー"
+"クレット キーを取得します。<p/><em>注意: この Web 設定は、PageKite の非常に簡"
+"易な使用のみサポートしています。</em>"
+
+msgid "Basic HTTP"
+msgstr "ベーシック HTTP"
+
+msgid "Basic SSH"
+msgstr "ベーシック SSH"
+
+msgid ""
+"Enable a tunnel to the local HTTP server (in most cases, this admin site)"
+msgstr "ローカル HTTP サーバーへのトンネルを有効化(通常、この管理サイト)"
+
+msgid "Enable a tunnel to the local SSH server"
+msgstr "ローカル SSH サーバーへのトンネルを有効化"
+
+msgid "Kite Name"
+msgstr "Kite 名"
+
+msgid "Kite Secret"
+msgstr "Kite シークレット"
+
+msgid "PageKite"
+msgstr "PageKite"
+
+msgid "Static Setup"
+msgstr "静的セットアップ"
+
+msgid ""
+"Static setup, disable FE failover and DDNS updates, set this if you are "
+"running your own frontend without a pagekite.me account"
+msgstr ""
+"静的セットアップは、 FE フェイルオーバーと DDNS アップデートを無効にします。"
+"もし pagekite.me アカウント無しにフロントエンドを実行している場合、これを設定"
+"します。"
index 45fe60c..2b526a3 100644 (file)
@@ -2,12 +2,23 @@
        <div class="errorbox"><%=pcdata(msg)%></div>
 <%- end end -%>
 
-<%-+cbi/apply_xhr-%>
-
 <div class="cbi-map" id="cbi-<%=self.config%>">
        <% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %>
        <% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
-       <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%>
+       <%- if firstmap and (applymap or confirmmap) then -%>
+               <%+cbi/apply_widget%>
+               <% cbi_apply_widget() %>
+               <div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+               <script type="text/javascript">
+                       document.addEventListener("DOMContentLoaded", function() {
+                               <% if confirmmap then -%>
+                                       uci_confirm(true, Date.now() + <%=confirmmap%> * 1000);
+                               <%- else -%>
+                                       uci_apply(true);
+                               <%- end %>
+                       });
+               </script>
+       <%- end -%>
 
        <% if self.tabbed then %>
                <ul class="cbi-tabmenu map">
index 7b6b965..a1dcbc6 100644 (file)
@@ -18,8 +18,11 @@ m = Map("travelmate", translate("Travelmate"),
        .. translatef("For further information "
        .. "<a href=\"%s\" target=\"_blank\">"
        .. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
+m:chain("network")
+m:chain("firewall")
+m.apply_on_parse = true
 
-function m.on_after_commit(self)
+function m.on_apply(self)
        luci.sys.call("env -i /etc/init.d/travelmate restart >/dev/null 2>&1")
        luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
 end
@@ -28,39 +31,27 @@ end
 
 if uplink == "" then
        ds = m:section(NamedSection, "global", "travelmate", translate("Interface Wizard"))
-
-       o = ds:option(Value, "", translate("Uplink interface"))
+       o = ds:option(Value, "trm_iface", translate("Create Uplink interface"),
+               translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
+               .. translate("add it to the wan zone of the firewall.<br />")
+               .. translate("This step has only to be done once."))
        o.datatype = "and(uciname,rangelength(3,15))"
        o.default = trmiface
        o.rmempty = false
 
-       btn = ds:option(Button, "trm_iface", translate("Create Uplink Interface"),
-               translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
-               .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
-       btn.inputtitle = translate("Add Interface")
-       btn.inputstyle = "apply"
-       btn.disabled = false
-
-       function btn.write(self, section)
-               local iface = o:formvalue(section)
-               if iface then
-                       uci:set("travelmate", section, "trm_iface", iface)
-                       uci:save("travelmate")
-                       uci:commit("travelmate")
-                       local net = nw:add_network(iface, { proto = "dhcp" })
-                       if net then
-                               nw:save("network")
-                               nw:commit("network")
-                               local zone = fw:get_zone_by_network("wan")
-                               if zone then
-                                       zone:add_network(iface)
-                                       fw:save("firewall")
-                                       fw:commit("firewall")
-                               end
+       function o.validate(self, value)
+               if value then
+                       local nwnet = nw:get_network(value)
+                       local zone  = fw:get_zone("wan")
+                       local fwnet = fw:get_zone_by_network(value)
+                       if not nwnet then
+                               nwnet = nw:add_network(value, { proto = "dhcp" })
+                       end
+                       if zone and not fwnet then
+                               fwnet = zone:add_network(value)
                        end
-                       luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
                end
-               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+               return value
        end
        return m
 end
index 1dacb6e..f76b52e 100644 (file)
@@ -46,8 +46,8 @@ This is free software, licensed under the Apache License, Version 2.0
       <td style="<%=style%>"><%=bssid%></td>
       <td style="<%=style%>"><%=encryption%></td>
       <td class="cbi-value-field" style="width:80px">
-        <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
-        <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
+        <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
+        <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
       </td>
       <td class="cbi-value-field" style="width:150px">
         <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/>
index c92e379..bf2b65a 100644 (file)
@@ -29,53 +29,52 @@ s1:tab("basic", translate("Basic"),
   "https://www.unbound.net/",
   "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
 
-ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"),
-  translate("Enable the initialization scripts for Unbound"))
-ena.rmempty = false
-
-mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
-  translate("Skip UCI and use /etc/unbound/unbound.conf"))
-mcf.rmempty = false
-
-lci = s1:taboption("basic", Flag, "extended_luci", translate("Extended Tabs:"),
-  translate("See detailed tabs for statistics, debug, and manual configuration"))
-lci.rmempty = false
-
-
-function ena.cfgvalue(self, section)
-  return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
-end
-
-
-function ena.write(self, section, value)
-  if value == "1" then
-    luci.sys.init.enable("unbound")
-    luci.sys.call("/etc/init.d/unbound start >/dev/null")
-  else
-    luci.sys.call("/etc/init.d/unbound stop >/dev/null")
-    luci.sys.init.disable("unbound")
-  end
-
-  return Flag.write(self, section, value)
-end
-
 
 if valman ~= "1" then
   -- Not in manual configuration mode; show UCI
   s1:tab("advanced", translate("Advanced"),
     translatef("<h3>Unbound Advanced Settings</h3>\n"
-    .. "Link DHCP-DNS, Manipulate DNS, or protect your local domain in "
+    .. "Domain manipulation, lookup protection, and workarounds for "
     .. "<a href=\"%s\" target=\"_blank\">Unbound </a>"
     .. " DNS resolver.", "https://www.unbound.net/"))
 
+  s1:tab("DHCP", translate("DHCP"),
+    translatef("<h3>Unbound DHCP Settings</h3>\n"
+    .. "Link your DHCP server to "
+    .. "<a href=\"%s\" target=\"_blank\">Unbound </a>"
+    .. " DNS resolver.", "https://www.unbound.net/ "))
 
   s1:tab("resource", translate("Resource"),
     translatef("<h3>Unbound Resource Settings</h3>\n"
     .. "Memory and protocol setttings for "
     .. "<a href=\"%s\" target=\"_blank\">Unbound </a>"
     .. " DNS resolver.", "https://www.unbound.net/"))
+end
 
 
+s1:tab("trigger", translate("Trigger"),
+    translatef("<h3>Unbound Event Trigger Settings</h3>\n"
+    .. "Start, reload, and save RFC5011 DNSKEY records for "
+    .. "<a href=\"%s\" target=\"_blank\">Unbound </a>"
+    .. " DNS resolver.", "https://www.unbound.net/"))
+
+
+--Basic Tab, unconditional pieces
+ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"),
+  translate("Enable the initialization scripts for Unbound"))
+ena.rmempty = false
+
+mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
+  translate("Skip UCI and use /etc/unbound/unbound.conf"))
+mcf.rmempty = false
+
+lci = s1:taboption("basic", Flag, "extended_luci", translate("Extended Tabs:"),
+  translate("See detailed tabs for statistics, debug, and manual configuration"))
+lci.rmempty = false
+
+
+if valman ~= "1" then
+  -- Not in manual configuration mode; show UCI
   --Basic Tab
   lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"),
     translate("Accept queries only from local subnets"))
@@ -90,11 +89,6 @@ if valman ~= "1" then
   nvd.rmempty = false
   nvd:depends({ validator = true })
 
-  din = s1:taboption("basic", DynamicList, "domain_insecure",
-    translate("Domain Insecure:"),
-    translate("List domains to bypass checks of DNSSEC"))
-  din:depends({ validator = true })
-
   d64 = s1:taboption("basic", Flag, "dns64", translate("Enable DNS64:"),
     translate("Enable the DNS64 module"))
   d64.rmempty = false
@@ -121,25 +115,56 @@ if valman ~= "1" then
   prt.rmempty = false
 
   --Avanced Tab
-  dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
+  din = s1:taboption("advanced", DynamicList, "domain_insecure",
+    translate("Domain Insecure:"),
+    translate("List domains to bypass checks of DNSSEC"))
+  din:depends({ validator = true })
+
+  dfw = s1:taboption("advanced", DynamicList, "domain_forward",
+    translate("Domain Forward:"),
+    translate("List domains to simply forward to stub resolvers in /tmp/resolve.auto"))
+
+  rlh = s1:taboption("advanced", Flag, "rebind_localhost", translate("Filter Localhost Rebind:"),
+    translate("Protect against upstream response of 127.0.0.0/8"))
+  rlh.rmempty = false
+
+  rpv = s1:taboption("advanced", ListValue, "rebind_protection", translate("Filter Private Rebind:"),
+    translate("Protect against upstream responses within local subnets"))
+  rpv:value("0", translate("No Filter"))
+  rpv:value("1", translate("Filter RFC1918/4193"))
+  rpv:value("2", translate("Filter Entire Subnet"))
+  rpv.rmempty = false
+
+  rpn = s1:taboption("advanced", Value, "rebind_interface", translate("Rebind Network Filter:"),
+    translate("Network subnets to filter from upstream responses"))
+  rpn.template = "cbi/network_netlist"
+  rpn.widget = "checkbox"
+  rpn.rmempty = true
+  rpn.cast = "string"
+  rpn.nocreate = true
+  rpn:depends({ rebind_protection = 2 })
+  rpn:depends({ rebind_protection = 3 })
+
+  --DHCP Tab
+  dlk = s1:taboption("DHCP", ListValue, "dhcp_link", translate("DHCP Link:"),
     translate("Link to supported programs to load DHCP into DNS"))
   dlk:value("none", translate("No Link"))
   dlk:value("dnsmasq", "dnsmasq")
   dlk:value("odhcpd", "odhcpd")
   dlk.rmempty = false
 
-  dp6 = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
+  dp6 = s1:taboption("DHCP", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
     translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
   dp6.rmempty = false
   dp6:depends({ dhcp_link = "odhcpd" })
 
-  dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
+  dom = s1:taboption("DHCP", Value, "domain", translate("Local Domain:"),
     translate("Domain suffix for this router and DHCP clients"))
   dom.placeholder = "lan"
   dom:depends({ dhcp_link = "none" })
   dom:depends({ dhcp_link = "odhcpd" })
 
-  dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
+  dty = s1:taboption("DHCP", ListValue, "domain_type", translate("Local Domain Type:"),
     translate("How to treat queries of this local domain"))
   dty:value("deny", translate("Ignored"))
   dty:value("refuse", translate("Refused"))
@@ -148,7 +173,7 @@ if valman ~= "1" then
   dty:depends({ dhcp_link = "none" })
   dty:depends({ dhcp_link = "odhcpd" })
 
-  lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
+  lfq = s1:taboption("DHCP", ListValue, "add_local_fqdn", translate("LAN DNS:"),
     translate("How to enter the LAN or local network router in DNS"))
   lfq:value("0", translate("No Entry"))
   lfq:value("1", translate("Hostname, Primary Address"))
@@ -158,7 +183,7 @@ if valman ~= "1" then
   lfq:depends({ dhcp_link = "none" })
   lfq:depends({ dhcp_link = "odhcpd" })
 
-  wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
+  wfq = s1:taboption("DHCP", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
     translate("Override the WAN side router entry in DNS"))
   wfq:value("0", translate("Use Upstream"))
   wfq:value("1", translate("Hostname, Primary Address"))
@@ -168,7 +193,7 @@ if valman ~= "1" then
   wfq:depends({ dhcp_link = "none" })
   wfq:depends({ dhcp_link = "odhcpd" })
 
-  exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
+  exa = s1:taboption("DHCP", ListValue, "add_extra_dns", translate("Extra DNS:"),
     translate("Use extra DNS entries found in /etc/config/dhcp"))
   exa:value("0", translate("Ignore"))
   exa:value("1", translate("Include Network/Hostnames"))
@@ -177,29 +202,6 @@ if valman ~= "1" then
   exa:depends({ dhcp_link = "none" })
   exa:depends({ dhcp_link = "odhcpd" })
 
-  dfw = s1:taboption("advanced", DynamicList, "domain_forward",
-    translate("Domain Forward:"),
-    translate("List domains to simply forward to stub resolvers in /tmp/resolve.auto"))
-
-  rlh = s1:taboption("advanced", Flag, "rebind_localhost", translate("Filter Localhost Rebind:"),
-    translate("Protect against upstream response of 127.0.0.0/8"))
-  rlh.rmempty = false
-
-  rpv = s1:taboption("advanced", ListValue, "rebind_protection", translate("Filter Private Rebind:"),
-    translate("Protect against upstream responses within local subnets"))
-  rpv:value("0", translate("No Filter"))
-  rpv:value("1", translate("Filter RFC1918/4193"))
-  rpv:value("2", translate("Filter Entire Subnet"))
-  rpv.rmempty = false
-
-  rpn = s1:taboption("advanced", Value, "rebind_interface", translate("Rebind Network Filter:"),
-    translate("Network subnets to filter from upstream responses"))
-  rpn.template = "cbi/network_netlist"
-  rpn.widget = "checkbox"
-  rpn.cast = "string"
-  rpn:depends({ rebind_protection = 2 })
-  rpn:depends({ rebind_protection = 3 })
-
   --TODO: dnsmasq needs to not reference resolve-file and get off port 53.
 
   --Resource Tuning Tab
@@ -235,15 +237,6 @@ if valman ~= "1" then
   rsc:value("tiny", translate("Tiny"))
   rsc.rmempty = false
 
-  ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
-    translate("Limit days between RFC 5011 copies to reduce flash writes"))
-  ag2.datatype = "and(uinteger,min(1),max(99))"
-  ag2:value("3", "3")
-  ag2:value("9", "9 ("..translate("default")..")")
-  ag2:value("12", "12")
-  ag2:value("24", "24")
-  ag2:value("99", "99 ("..translate("never")..")")
-
   eds = s1:taboption("resource", Value, "edns_size", translate("EDNS Size:"),
     translate("Limit extended DNS packet size"))
   eds.datatype = "and(uinteger,min(512),max(4096))"
@@ -257,30 +250,47 @@ if valman ~= "1" then
   stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"),
     translate("Extended statistics are printed from unbound-control"))
   stt.rmempty = false
+end
 
-  tgr = s1:taboption("resource", Value, "trigger_interface", translate("Trigger Networks:"),
+
+--Trigger Tab, always unconditional
+ag2 = s1:taboption("trigger", Value, "root_age", translate("Root DSKEY Age:"),
+    translate("Limit days between RFC5011 copies to reduce flash writes"))
+ag2.datatype = "and(uinteger,min(1),max(99))"
+ag2:value("3", "3")
+ag2:value("9", "9 ("..translate("default")..")")
+ag2:value("12", "12")
+ag2:value("24", "24")
+ag2:value("99", "99 ("..translate("never")..")")
+
+tgr = s1:taboption("trigger", Value, "trigger_interface", translate("Trigger Networks:"),
     translate("Networks that may trigger Unbound to reload (avoid wan6)"))
-  tgr.template = "cbi/network_netlist"
-  tgr.widget = "checkbox"
-  tgr.cast = "string"
-
-else
-  s1:tab("rfc5011", translate("RFC5011"),
-    translatef("<h3>Unbound RFC5011 Settings</h3>\n"
-    .. "RFC5011 copy scripts protect flash ROM even with UCI disabled."))
-
-  ag2 = s1:taboption("rfc5011", Value, "root_age", translate("Root DSKEY Age:"),
-    translate("Limit days to copy /var/->/etc/ to reduce flash writes"))
-  ag2.datatype = "and(uinteger,min(1),max(99))"
-  ag2:value("3", "3")
-  ag2:value("9", "9 ("..translate("default")..")")
-  ag2:value("12", "12")
-  ag2:value("24", "24")
-  ag2:value("99", "99 ("..translate("never")..")")
+tgr.template = "cbi/network_netlist"
+tgr.widget = "checkbox"
+tgr.rmempty = true
+tgr.cast = "string"
+tgr.nocreate = true
+
+
+function ena.cfgvalue(self, section)
+  return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
+end
+
+
+function ena.write(self, section, value)
+  if value == "1" then
+    luci.sys.init.enable("unbound")
+    luci.sys.call("/etc/init.d/unbound start >/dev/null")
+  else
+    luci.sys.call("/etc/init.d/unbound stop >/dev/null")
+    luci.sys.init.disable("unbound")
+  end
+
+  return Flag.write(self, section, value)
 end
 
 
-function m1.on_after_commit(self)
+function m1.on_apply(self)
   function ena.validate(self, value)
     if value ~= "0" then
       luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1")
index 74b9d1d..a202392 100644 (file)
@@ -35,6 +35,9 @@ s:taboption("general", Flag, "enable_natpmp", translate("Enable NAT-PMP function
 s:taboption("general", Flag, "secure_mode", translate("Enable secure mode"),
        translate("Allow adding forwards only to requesting ip addresses")).default = "1"
 
+s:taboption("general", Flag, "igdv1", translate("Enable IGDv1 mode"),
+       translate("Advertise as IGDv1 device instead of IGDv2")).default = "0"
+
 s:taboption("general", Flag, "log_output", translate("Enable additional logging"),
        translate("Puts extra debugging information into the system log"))
 
@@ -71,7 +74,7 @@ pu = s:taboption("advanced", Value, "presentation_url", translate("Presentation
 pu.placeholder = "http://192.168.1.1/"
 
 lf = s:taboption("advanced", Value, "upnp_lease_file", translate("UPnP lease file"))
-lf.placeholder = "/var/log/upnp.leases"
+lf.placeholder = "/var/run/miniupnpd.leases"
 
 
 s2 = m:section(TypedSection, "perm_rule", translate("MiniUPnP ACLs"),
index 2767ade..398c87e 100644 (file)
@@ -31,6 +31,9 @@ msgstr "Redireccions UPnP actives"
 msgid "Advanced Settings"
 msgstr "Ajusts avançats"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Permet que s'afegeixin redireccions només a les adreces IP peticionant"
 
@@ -70,6 +73,9 @@ msgstr "UUID de dispositiu"
 msgid "Downlink"
 msgstr "Enllaç de baixada"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Habilita la funcionalitat NAT-PMP"
 
index bfc97cc..adb4d19 100644 (file)
@@ -27,6 +27,9 @@ msgstr "Aktivní přesměrování UPnP"
 msgid "Advanced Settings"
 msgstr "Pokročilé nastavení"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Povolit přesměrování pouze na dotazující ip adresy"
 
@@ -66,6 +69,9 @@ msgstr "UUID zařízení"
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Povolit funkčnost NAT-PMP"
 
index 46aa42f..bdafbf1 100644 (file)
@@ -29,6 +29,9 @@ msgstr "Aktive UPnP-Weiterleitungen"
 msgid "Advanced Settings"
 msgstr "Erweiterte Einstellungen"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Nur Weiterleitungen zurück zum anfordernden Client zulassen"
 
@@ -68,6 +71,9 @@ msgstr "Geräte-UUID"
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "NAT-PMP Funktionalität aktivieren"
 
index 79a02a4..c02b0ce 100644 (file)
@@ -26,6 +26,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -65,6 +68,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 450e62a..eae23a1 100644 (file)
@@ -26,6 +26,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -65,6 +68,9 @@ msgstr ""
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 8c26b3c..6c9c262 100644 (file)
@@ -29,6 +29,9 @@ msgstr "Redirecciones UPnP activas"
 msgid "Advanced Settings"
 msgstr "Configuración avanzada"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Permitir añadir redirecciones sólo a IPs que lo soliciten"
 
@@ -68,6 +71,9 @@ msgstr "UUID del dispositivo"
 msgid "Downlink"
 msgstr "Enlace para bajada"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Activar la funcionalidad NAT-PMP"
 
index 1f3f863..f8b2a85 100644 (file)
@@ -29,6 +29,9 @@ msgstr "Redirections UPnP actives"
 msgid "Advanced Settings"
 msgstr "Paramètres avancés"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 "Permet d'ajouter des redirections seulement vers les adresses IP qui font "
@@ -70,6 +73,9 @@ msgstr "UUID du périphérique"
 msgid "Downlink"
 msgstr "Lien descendant"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Activer la fonctionnalité NAT-PMP"
 
index 5b01f31..387444f 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -61,6 +64,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 9f64e5a..21bc7b5 100644 (file)
@@ -27,6 +27,9 @@ msgstr "Aktív UPnP átirányítások"
 msgid "Advanced Settings"
 msgstr "Haladó beállítások"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 "Kizárólag a kérést küldő IP címre történő továbbítás hozzáadásának "
@@ -68,6 +71,9 @@ msgstr "Eszköz UUID"
 msgid "Downlink"
 msgstr "Letöltés"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "NAT-PMP funkció engedélyezése"
 
index 2eb4a44..8e498c3 100644 (file)
@@ -29,6 +29,9 @@ msgstr "Attiva reindirizzamento UPnP"
 msgid "Advanced Settings"
 msgstr "Opzioni Avanzate"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Permetti l'aggiunta della mappatura solo agli indirizzi IP richiedenti"
 
@@ -68,6 +71,9 @@ msgstr "UUID del dispositivo"
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Abilita il protocollo NAT-PMP"
 
index fe2dd64..4e6f879 100644 (file)
@@ -29,6 +29,9 @@ msgstr "稼働中のUPnPリダイレクト"
 msgid "Advanced Settings"
 msgstr "詳細設定"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "要求元IPアドレスへの転送のみ、追加を許可します。"
 
@@ -68,6 +71,9 @@ msgstr "デバイス UUID"
 msgid "Downlink"
 msgstr "ダウンリンク"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "NAT-PMP機能を有効にする"
 
index 62d4d5a..834d654 100644 (file)
@@ -21,6 +21,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -60,6 +63,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index dc9daba..f313b42 100644 (file)
@@ -20,6 +20,9 @@ msgstr "Aktive UPnP Viderekoblinger"
 msgid "Advanced Settings"
 msgstr "Avanserte Innstillinger"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Tillat videkobling kun til IP adresser som ber om det"
 
@@ -59,6 +62,9 @@ msgstr "Enhet UUID"
 msgid "Downlink"
 msgstr "Nedlinje"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Aktiver NAT-PMP funksjonalitet"
 
index 0afabe3..fb1f0a4 100644 (file)
@@ -28,6 +28,9 @@ msgstr "Aktywne przekierowania UPnP"
 msgid "Advanced Settings"
 msgstr "Ustawienia zaawansowane"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Zezwól na dodawanie przekierowań tylko do odpytujących adresów IP"
 
@@ -67,6 +70,9 @@ msgstr "UUID urządzenia"
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Włącz funkcjonalność NAT-PMP"
 
index 72741d2..705bbde 100644 (file)
@@ -29,6 +29,9 @@ msgstr "Redirecionamentos UPnP Ativos"
 msgid "Advanced Settings"
 msgstr "Configurações Avançadas"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 "Permite adicionar encaminhamento apenas para o endereço IP requisitante"
@@ -69,6 +72,9 @@ msgstr "UUID do Dispositivo"
 msgid "Downlink"
 msgstr "Velocidade de recebimento do enlace (downlink)"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Habilite a função NAT-PMP"
 
index 415a72b..e1ee340 100644 (file)
@@ -26,6 +26,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -65,6 +68,9 @@ msgstr ""
 msgid "Downlink"
 msgstr "Link para download"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index d5e5c79..8525279 100644 (file)
@@ -28,6 +28,9 @@ msgstr "Redirecturi active UPnP"
 msgid "Advanced Settings"
 msgstr "Setari avansate"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Permite adaugarea forward-urilor doar catre adresele ip solicitante"
 
@@ -67,6 +70,9 @@ msgstr "UUID al dispozitivului"
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Activeaza functionalitatea NAT-PMP"
 
index 8095357..878f83e 100644 (file)
@@ -31,6 +31,9 @@ msgstr "Активные UPnP-переадресации"
 msgid "Advanced Settings"
 msgstr "Дополнительные настройки"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "Разрешить перенаправление только для запрашивающих IP-адресов."
 
@@ -70,6 +73,9 @@ msgstr "UUID устройства"
 msgid "Downlink"
 msgstr "Внутреннее соединение"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Включить NAT-PMP"
 
index ccd256c..81ded22 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -61,6 +64,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 10fef55..c2d1c6b 100644 (file)
@@ -25,6 +25,9 @@ msgstr "Aktivera UPnP-omdirigeringar"
 msgid "Advanced Settings"
 msgstr "Avancerade inställningar"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -64,6 +67,9 @@ msgstr "Enhetens UUID"
 msgid "Downlink"
 msgstr "Nerlänk"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Aktivera NAT-PMP-funktionalitet"
 
index dda0e7e..e3b1f1a 100644 (file)
@@ -15,6 +15,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -54,6 +57,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 1bcd2b7..2a997a7 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -61,6 +64,9 @@ msgstr ""
 msgid "Downlink"
 msgstr ""
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 746fd3e..8f43ae3 100644 (file)
@@ -28,6 +28,9 @@ msgstr "Активні переспрямування UPnP"
 msgid "Advanced Settings"
 msgstr "Додаткові параметри"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 "Дозволити додавання переспрямування тільки для IP-адрес, що надсилають запити"
@@ -68,6 +71,9 @@ msgstr "UUID пристрою"
 msgid "Downlink"
 msgstr "Низхідний канал"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "Увімкнути функцію NAT-PMP"
 
index d27720d..c933777 100644 (file)
@@ -27,6 +27,9 @@ msgstr ""
 msgid "Advanced Settings"
 msgstr ""
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr ""
 
@@ -66,6 +69,9 @@ msgstr ""
 msgid "Downlink"
 msgstr "Downlink"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr ""
 
index 894de1c..588ad2c 100644 (file)
@@ -27,6 +27,9 @@ msgstr "活动的 UPnP 重定向"
 msgid "Advanced Settings"
 msgstr "高级设置"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "允许只向请求的 IP 地址添加转发"
 
@@ -66,6 +69,9 @@ msgstr "设备 UUID"
 msgid "Downlink"
 msgstr "下行速率"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "启用 NAT-PMP 功能"
 
index 338a662..57edb9e 100644 (file)
@@ -25,6 +25,9 @@ msgstr "啓用UPnP從導"
 msgid "Advanced Settings"
 msgstr "進階設定"
 
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
 msgid "Allow adding forwards only to requesting ip addresses"
 msgstr "只允許請求的IP位址新增從導機制"
 
@@ -64,6 +67,9 @@ msgstr "設備UUID獨立識別碼"
 msgid "Downlink"
 msgstr "下載"
 
+msgid "Enable IGDv1 mode"
+msgstr ""
+
 msgid "Enable NAT-PMP functionality"
 msgstr "啓用蘋果NAT-PMP傳輸埠對應通訊協定功能"
 
index f1926a8..4089944 100644 (file)
@@ -5,9 +5,9 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=https://github.com/jow-/lucihttp.git
-PKG_SOURCE_DATE:=2018-04-22
-PKG_SOURCE_VERSION:=ccc685e5c366490fc9f50a2e211ec79b7cf5962e
-PKG_MIRROR_HASH:=48608971cdfe20a6ad476fbf461527e4bf4786afeb8316fd6c38412bfeed4a3c
+PKG_SOURCE_DATE:=2018-05-18
+PKG_SOURCE_VERSION:=cb119deddee5f0f8f1da883b20c60aea7611b175
+PKG_MIRROR_HASH:=573a20817c73344b17c8fa1b8112f14af9dccc25fef017ae072ecd09140cf9e1
 CMAKE_INSTALL:=1
 
 PKG_LICENSE:=ISC
index f7b57f9..6d4d752 100644 (file)
@@ -181,13 +181,18 @@ function Encoder.parse_iter(self, obj)
        end
 end
 
+function Encoder.parse_udata(self, obj)
+       return self:parse_string(tostring(obj))
+end
+
 Encoder.parsers = {
        ['nil']      = Encoder.parse_nil,
        ['table']    = Encoder.parse_iter,
        ['number']   = Encoder.parse_number,
        ['string']   = Encoder.parse_string,
        ['boolean']  = Encoder.parse_bool,
-       ['function'] = Encoder.parse_iter
+       ['function'] = Encoder.parse_iter,
+       ['userdata'] = Encoder.parse_udata,
 }
 
 
index 91dcf3f..de4476c 100644 (file)
@@ -54,11 +54,11 @@ XHR = function()
                        else
                                url += '?' + code;
 
+               xhr.open('GET', url, true);
+
                if (!isNaN(timeout))
                        xhr.timeout = timeout;
 
-               xhr.open('GET', url, true);
-
                xhr.onreadystatechange = function()
                {
                        if (xhr.readyState == 4) {
@@ -92,10 +92,11 @@ XHR = function()
                                callback(xhr);
                }
 
+               xhr.open('POST', url, true);
+
                if (!isNaN(timeout))
                        xhr.timeout = timeout;
 
-               xhr.open('POST', url, true);
                xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                xhr.send(code);
        }
index 2184395..4728642 100644 (file)
@@ -388,21 +388,21 @@ function Map.parse(self, readinput, ...)
 
        if self.save then
                self:_run_hooks("on_save", "on_before_save")
+               local i, config
                for i, config in ipairs(self.parsechain) do
                        self.uci:save(config)
                end
                self:_run_hooks("on_after_save")
                if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then
                        self:_run_hooks("on_before_commit")
-                       for i, config in ipairs(self.parsechain) do
-                               self.uci:commit(config)
-
-                               -- Refresh data because commit changes section names
-                               self.uci:load(config)
+                       if self.apply_on_parse == false then
+                               for i, config in ipairs(self.parsechain) do
+                                       self.uci:commit(config)
+                               end
                        end
                        self:_run_hooks("on_commit", "on_after_commit", "on_before_apply")
-                       if self.apply_on_parse then
-                               self.uci:apply(self.parsechain)
+                       if self.apply_on_parse == true or self.apply_on_parse == false then
+                               self.uci:apply(self.apply_on_parse)
                                self:_run_hooks("on_apply", "on_after_apply")
                        else
                                -- This is evaluated by the dispatcher and delegated to the
diff --git a/modules/luci-base/luasrc/controller/admin/servicectl.lua b/modules/luci-base/luasrc/controller/admin/servicectl.lua
deleted file mode 100644 (file)
index 1d73eb4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
--- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-module("luci.controller.admin.servicectl", package.seeall)
-
-function index()
-       entry({"servicectl"}, alias("servicectl", "status")).sysauth = "root"
-       entry({"servicectl", "status"}, call("action_status")).leaf = true
-       entry({"servicectl", "restart"}, post("action_restart")).leaf = true
-end
-
-function action_status()
-       local data = nixio.fs.readfile("/var/run/luci-reload-status")
-       if data then
-               luci.http.write("/etc/config/")
-               luci.http.write(data)
-       else
-               luci.http.write("finish")
-       end
-end
-
-function action_restart(args)
-       local uci = require "luci.model.uci".cursor()
-       if args then
-               local service
-               local services = { }
-
-               for service in args:gmatch("[%w_-]+") do
-                       services[#services+1] = service
-               end
-
-               local command = uci:apply(services, true)
-               if nixio.fork() == 0 then
-                       local i = nixio.open("/dev/null", "r")
-                       local o = nixio.open("/dev/null", "w")
-
-                       nixio.dup(i, nixio.stdin)
-                       nixio.dup(o, nixio.stdout)
-
-                       i:close()
-                       o:close()
-
-                       nixio.exec("/bin/sh", unpack(command))
-               else
-                       luci.http.write("OK")
-                       os.exit(0)
-               end
-       end
-end
index 1984fc4..45e1e30 100644 (file)
@@ -182,6 +182,7 @@ local function session_retrieve(sid, allowed_users)
           (not allowed_users or
            util.contains(allowed_users, sdat.values.username))
        then
+               uci:set_session_id(sid)
                return sid, sdat.values
        end
 
@@ -428,7 +429,9 @@ function dispatch(request)
                                return
                        end
 
-                       http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sid, build_url() })
+                       http.header("Set-Cookie", 'sysauth=%s; path=%s; HttpOnly%s' %{
+                               sid, build_url(), http.getenv("HTTPS") == "on" and "; secure" or ""
+                       })
                        http.redirect(build_url(unpack(ctx.requestpath)))
                end
 
@@ -882,6 +885,8 @@ local function _cbi(self, ...)
        local pageaction = true
        local parsechain = { }
 
+       local is_rollback, time_remaining = uci:rollback_pending()
+
        for i, res in ipairs(maps) do
                if res.apply_needed and res.parsechain then
                        local c
@@ -909,6 +914,7 @@ local function _cbi(self, ...)
                res:render({
                        firstmap   = (i == 1),
                        applymap   = applymap,
+                       confirmmap = (is_rollback and time_remaining or nil),
                        redirect   = redirect,
                        messages   = messages,
                        pageaction = pageaction,
index 16fb04c..f4ede4b 100644 (file)
@@ -14,7 +14,7 @@ local table, ipairs, pairs, type, tostring, tonumber, error =
 
 module "luci.http"
 
-HTTP_MAX_CONTENT      = 1024*8         -- 8 kB maximum content size
+HTTP_MAX_CONTENT      = 1024*100               -- 100 kB maximum content size
 
 context = util.threadlocal()
 
@@ -416,7 +416,7 @@ function mimedecode_message_body(src, msg, file_cb)
                end
 
                return true
-       end)
+       end, HTTP_MAX_CONTENT)
 
        return ltn12.pump.all(src, function (chunk)
                len = len + (chunk and #chunk or 0)
@@ -460,7 +460,7 @@ function urldecode_message_body(src, msg)
                end
 
                return true
-       end)
+       end, HTTP_MAX_CONTENT)
 
        return ltn12.pump.all(src, function (chunk)
                len = len + (chunk and #chunk or 0)
index dfe818b..0f58c16 100644 (file)
@@ -1428,7 +1428,7 @@ function wifidev.hwmodes(self)
 end
 
 function wifidev.get_i18n(self)
-       local t = "Generic"
+       local t = self.iwinfo.hardware_name or "Generic"
        if self.iwinfo.type == "wl" then
                t = "Broadcom"
        end
index fc2a605..34323f0 100644 (file)
@@ -3,6 +3,7 @@
 
 local os    = require "os"
 local util  = require "luci.util"
+local conf  = require "luci.config"
 local table = require "table"
 
 
@@ -143,22 +144,84 @@ function commit(self, config)
        return (err == nil), ERRSTR[err]
 end
 
---[[
-function apply(self, configs, command)
-       local _, config
+function apply(self, rollback)
+       local _, err
+
+       if rollback then
+               local timeout = tonumber(conf.apply and conf.apply.rollback or "") or 0
 
-       assert(not command, "Apply command not supported anymore")
+               _, err = call("apply", {
+                       timeout  = (timeout > 30) and timeout or 30,
+                       rollback = true
+               })
 
-       if type(configs) == "table" then
-               for _, config in ipairs(configs) do
-                       call("service", "event", {
-                               type = "config.change",
-                               data = { package = config }
+               if not err then
+                       util.ubus("session", "set", {
+                               ubus_rpc_session = session_id,
+                               values = { rollback = os.time() + timeout }
                        })
                end
+       else
+               _, err = call("changes", {})
+
+               if not err then
+                       if type(_) == "table" and type(_.changes) == "table" then
+                               local k, v
+                               for k, v in pairs(_.changes) do
+                                       _, err = call("commit", { config = k })
+                                       if err then
+                                               break
+                                       end
+                               end
+                       end
+               end
+
+               if not err then
+                       _, err = call("apply", { rollback = false })
+               end
+       end
+
+       return (err == nil), ERRSTR[err]
+end
+
+function confirm(self)
+       local _, err = call("confirm", {})
+       if not err then
+               util.ubus("session", "set", {
+                       ubus_rpc_session = session_id,
+                       values = { rollback = 0 }
+               })
        end
+       return (err == nil), ERRSTR[err]
+end
+
+function rollback(self)
+       local _, err = call("rollback", {})
+       if not err then
+               util.ubus("session", "set", {
+                       ubus_rpc_session = session_id,
+                       values = { rollback = 0 }
+               })
+       end
+       return (err == nil), ERRSTR[err]
+end
+
+function rollback_pending(self)
+       local deadline, err = util.ubus("session", "get", {
+               ubus_rpc_session = session_id,
+               keys = { "rollback" }
+       })
+
+       if type(deadline) == "table" and
+          type(deadline.values) == "table" and
+          type(deadline.values.rollback) == "number" and
+          deadline.values.rollback > os.time()
+       then
+               return true, deadline.values.rollback - os.time()
+       end
+
+       return false, ERRSTR[err]
 end
-]]
 
 
 function foreach(self, config, stype, callback)
@@ -425,59 +488,3 @@ function delete_all(self, config, stype, comparator)
 
        return (err == nil), ERRSTR[err]
 end
-
-
-function apply(self, configlist, command)
-       configlist = self:_affected(configlist)
-       if command then
-               return { "/sbin/luci-reload", unpack(configlist) }
-       else
-               return os.execute("/sbin/luci-reload %s >/dev/null 2>&1"
-                       % util.shellquote(table.concat(configlist, " ")))
-       end
-end
-
--- Return a list of initscripts affected by configuration changes.
-function _affected(self, configlist)
-       configlist = type(configlist) == "table" and configlist or { configlist }
-
-       -- Resolve dependencies
-       local reloadlist = { }
-
-       local function _resolve_deps(name)
-               local reload = { name }
-               local deps = { }
-
-               self:foreach("ucitrack", name,
-                       function(section)
-                               if section.affects then
-                                       for i, aff in ipairs(section.affects) do
-                                               deps[#deps+1] = aff
-                                       end
-                               end
-                       end)
-
-               local i, dep
-               for i, dep in ipairs(deps) do
-                       local j, add
-                       for j, add in ipairs(_resolve_deps(dep)) do
-                               reload[#reload+1] = add
-                       end
-               end
-
-               return reload
-       end
-
-       -- Collect initscripts
-       local j, config
-       for j, config in ipairs(configlist) do
-               local i, e
-               for i, e in ipairs(_resolve_deps(config)) do
-                       if not util.contains(reloadlist, e) then
-                               reloadlist[#reloadlist+1] = e
-                       end
-               end
-       end
-
-       return reloadlist
-end
index ef89d09..d798b00 100644 (file)
@@ -28,12 +28,63 @@ Create a new Cursor initialized to the state directory.
 ]]
 
 ---[[
-Applies UCI configuration changes
+Applies UCI configuration changes.
+
+If the rollback parameter is set to true, the apply function will invoke the
+rollback mechanism which causes the configuration to be automatically reverted
+if no confirm() call occurs within a certain timeout.
+
+The current default timeout is 30s and can be increased using the
+"luci.apply.timeout" uci configuration key.
 
 @class                         function
 @name                          Cursor.apply
-@param configlist      List of UCI configurations
-@param command         Don't apply only return the command
+@param rollback                Enable rollback mechanism
+@return                                Boolean whether operation succeeded
+]]
+
+---[[
+Confirms UCI apply process.
+
+If a previous UCI apply with rollback has been invoked using apply(true),
+this function confirms the process and cancels the pending rollback timer.
+
+If no apply with rollback session is active, the function has no effect and
+returns with a "No data" error.
+
+@class                         function
+@name                          Cursor.confirm
+@return                                Boolean whether operation succeeded
+]]
+
+---[[
+Cancels UCI apply process.
+
+If a previous UCI apply with rollback has been invoked using apply(true),
+this function cancels the process and rolls back the configuration to the
+pre-apply state.
+
+If no apply with rollback session is active, the function has no effect and
+returns with a "No data" error.
+
+@class                         function
+@name                          Cursor.rollback
+@return                                Boolean whether operation succeeded
+]]
+
+---[[
+Checks whether a pending rollback is scheduled.
+
+If a previous UCI apply with rollback has been invoked using apply(true),
+and has not been confirmed or rolled back yet, this function returns true
+and the remaining time until rollback in seconds. If no rollback is pending,
+the function returns false. On error, the function returns false and an
+additional string describing the error.
+
+@class                         function
+@name                          Cursor.rollback_pending
+@return                                Boolean whether rollback is pending
+@return                                Remaining time in seconds
 ]]
 
 ---[[
diff --git a/modules/luci-base/luasrc/view/cbi/apply_widget.htm b/modules/luci-base/luasrc/view/cbi/apply_widget.htm
new file mode 100644 (file)
index 0000000..543ef0b
--- /dev/null
@@ -0,0 +1,181 @@
+<% export("cbi_apply_widget", function(redirect_ok) -%>
+<style type="text/css">
+       #cbi_apply_status {
+               display: flex;
+               flex-wrap: wrap;
+               min-height: 32px;
+               align-items: center;
+               margin: 1.5em 0 1.5em 0;
+       }
+
+       #cbi_apply_status > h4,
+       #cbi_apply_status > p,
+       #cbi_apply_status > div {
+               flex-basis: 100%;
+       }
+
+       #cbi_apply_status > img {
+               margin-right: 1em;
+               flex-basis: 32px;
+       }
+
+       #cbi_apply_status + script + .cbi-section {
+               margin-top: -1em;
+       }
+
+       .alert-message.notice {
+               background: linear-gradient(#fff 0%, #eee 100%);
+       }
+</style>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+       var xhr = new XHR(),
+           stat, indicator,
+           uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' },
+           uci_apply_rollback = <%=math.max(luci.config and luci.config.apply and luci.config.apply.rollback or 30, 30)%>,
+           uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>,
+           uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>,
+           uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>;
+
+       function uci_rollback(checked) {
+               if (checked) {
+                       stat.classList.remove('notice');
+                       stat.classList.add('warning');
+                       stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+                                        '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback);
+
+                       var call = function(r) {
+                               if (r.status === 204) {
+                                       stat.innerHTML = '<h4><%:Configuration has been rolled back!%></h4>' +
+                                               '<p><%:The device could not be reached within %d seconds after applying the pending changes, which caused the configuration to be rolled back for safety reasons. If you believe that the configuration changes are correct nonetheless, perform an unchecked configuration apply. Alternatively, you can dismiss this warning and edit changes before attempting to apply again, or revert all pending changes to keep the currently working configuration state.%></p>'.format(uci_apply_rollback) +
+                                               '<div class="right">' +
+                                                       '<input type="button" class="btn" onclick="this.parentNode.parentNode.style.display=\'none\'" value="<%:Dismiss%>" /> ' +
+                                                       '<input type="button" class="btn" onclick="uci_revert()" value="<%:Revert changes%>" /> ' +
+                                                       '<input type="button" class="btn danger" onclick="uci_apply(false)" value="<%:Apply unchecked%>" />' +
+                                               '</div>';
+
+                                       return;
+                               }
+
+                               xhr.post('<%=url("admin/uci/confirm")%>', uci_apply_auth, call, uci_apply_timeout * 1000);
+                       };
+
+                       call({ status: 0 });
+               }
+               else {
+                       stat.classList.remove('notice');
+                       stat.classList.add('warning');
+                       stat.innerHTML = '<h4><%:Device unreachable!%></h4>' +
+                               '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>';
+               }
+       }
+
+       function uci_confirm(checked, deadline) {
+               var tt;
+               var ts = Date.now();
+
+               stat = document.getElementById('cbi_apply_status');
+               stat.style.display = '';
+               stat.classList.remove('warning');
+               stat.classList.add('notice');
+
+               indicator = document.querySelector('.uci_change_indicator');
+
+               var call = function(r) {
+                       if (Date.now() >= deadline) {
+                               uci_rollback(checked);
+                               return;
+                       }
+                       else if (r && (r.status === 200 || r.status === 204)) {
+                               if (indicator)
+                                       indicator.style.display = 'none';
+
+                               stat.innerHTML = '<%:Configuration has been applied.%>';
+
+                               window.clearTimeout(tt);
+                               window.setTimeout(function() {
+                                       stat.style.display = 'none';
+                                       <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+                               }, uci_apply_display * 1000);
+
+                               return;
+                       }
+
+                       xhr.post('<%=url("admin/uci/confirm")%>', uci_apply_auth, call, uci_apply_timeout * 1000);
+               };
+
+               var tick = function() {
+                       var now = Date.now();
+
+                       stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+                                        '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0));
+
+                       if (now >= deadline)
+                               return;
+
+                       tt = window.setTimeout(tick, 1000 - (now - ts));
+                       ts = now;
+               };
+
+               tick();
+
+               /* wait a few seconds for the settings to become effective */
+               window.setTimeout(call, Math.max(uci_apply_holdoff * 1000 - ((ts + uci_apply_rollback * 1000) - deadline), 1));
+       }
+
+       function uci_apply(checked) {
+               stat = document.getElementById('cbi_apply_status');
+               stat.style.display = '';
+               stat.classList.remove('warning');
+               stat.classList.add('notice');
+               stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+                                '<%:Starting configuration apply…%>';
+
+               xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r) {
+                       if (r.status === (checked ? 200 : 204)) {
+                               uci_confirm(checked, Date.now() + uci_apply_rollback * 1000);
+                       }
+                       else if (checked && r.status === 204) {
+                               stat.innerHTML = '<%:There are no changes to apply.%>';
+                               window.setTimeout(function() {
+                                       stat.style.display = 'none';
+                                       <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+                               }, uci_apply_display * 1000);
+                       }
+                       else {
+                               stat.classList.add('warning');
+                               stat.classList.remove('notice');
+                               stat.innerHTML = '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status);
+                       }
+               });
+       }
+
+       function uci_revert() {
+               stat = document.getElementById('cbi_apply_status');
+               stat.style.display = '';
+               stat.classList.remove('warning');
+               stat.classList.add('notice');
+               stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+                                '<%:Reverting configuration…%>';
+
+               xhr.post('<%=url("admin/uci/revert")%>', uci_apply_auth, function(r) {
+                       if (r.status === 200) {
+                               stat.innerHTML = '<%:Changes have been reverted.%>';
+                               window.setTimeout(function() {
+                                       <% if redirect_ok then -%>
+                                               location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
+                                       <%- else -%>
+                                               window.location = window.location.href.split('#')[0];
+                                       <%- end %>
+                               }, uci_apply_display * 1000);
+                       }
+                       else {
+                               stat.classList.add('warning');
+                               stat.classList.remove('notice');
+                               stat.innerHTML = '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status);
+                       }
+               });
+       }
+//]]></script>
+<%-    end) %>
diff --git a/modules/luci-base/luasrc/view/cbi/apply_xhr.htm b/modules/luci-base/luasrc/view/cbi/apply_xhr.htm
deleted file mode 100644 (file)
index daa57c1..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<% export("cbi_apply_xhr", function(id, configs, redirect) -%>
-<fieldset class="cbi-section" id="cbi-apply-<%=id%>">
-       <legend><%:Applying changes%></legend>
-       <script type="text/javascript">//<![CDATA[
-               var apply_xhr = new XHR();
-
-               apply_xhr.post('<%=url('servicectl/restart', table.concat(configs, ","))%>', { token: '<%=token%>' },
-                       function() {
-                               var checkfinish = function() {
-                                       apply_xhr.get('<%=url('servicectl/status')%>', null,
-                                               function(x) {
-                                                       if( x.responseText == 'finish' )
-                                                       {
-                                                               var e = document.getElementById('cbi-apply-<%=id%>-status');
-                                                               if( e )
-                                                               {
-                                                                       e.innerHTML = '<%:Configuration applied.%>';
-                                                                       window.setTimeout(function() {
-                                                                               e.parentNode.style.display = 'none';
-                                                                               <% if redirect then %>location.href='<%=redirect%>';<% end %>
-                                                                       }, 1000);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               var e = document.getElementById('cbi-apply-<%=id%>-status');
-                                                               if( e && x.responseText ) e.innerHTML = x.responseText;
-
-                                                               window.setTimeout(checkfinish, 1000);
-                                                       }
-                                               }
-                                       );
-                               }
-
-                               window.setTimeout(checkfinish, 1000);
-                       }
-               );
-       //]]></script>
-
-       <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
-       <span id="cbi-apply-<%=id%>-status"><%:Waiting for changes to be applied...%></span>
-</fieldset>
-<%-    end) %>
index 4d332fd..e6acfb0 100644 (file)
@@ -1,6 +1,6 @@
        <%- if pageaction then -%>
        <div class="cbi-page-actions">
-               <% if redirect then %>
+               <% if redirect and not flow.hidebackbtn then %>
                <div style="float:left">
                        <input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" />
                </div>
index e3210ad..69ef361 100644 (file)
@@ -2,12 +2,23 @@
        <div class="errorbox"><%=pcdata(msg)%></div>
 <%- end end -%>
 
-<%-+cbi/apply_xhr-%>
-
 <div class="cbi-map" id="cbi-<%=self.config%>">
        <% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %>
        <% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
-       <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%>
+       <%- if firstmap and (applymap or confirmmap) then -%>
+               <%+cbi/apply_widget%>
+               <% cbi_apply_widget(redirect) %>
+               <div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+               <script type="text/javascript">
+                       document.addEventListener("DOMContentLoaded", function() {
+                               <% if confirmmap then -%>
+                                       uci_confirm(true, Date.now() + <%=confirmmap%> * 1000);
+                               <%- else -%>
+                                       uci_apply(true);
+                               <%- end %>
+                       });
+               </script>
+       <%- end -%>
 
        <% if self.tabbed then %>
                <ul class="cbi-tabmenu map">
index c413b71..b08344b 100644 (file)
@@ -1017,6 +1017,11 @@ msgstr "Emergència"
 msgid "Enable"
 msgstr "Habilita"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Habilita l'<abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1074,6 +1079,9 @@ msgstr "Activa/Desactiva"
 msgid "Enabled"
 msgstr "Habilitat"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3537,7 +3545,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 89714cc..aa41447 100644 (file)
@@ -1017,6 +1017,11 @@ msgstr "Záchrana"
 msgid "Enable"
 msgstr "Povolit"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Povolit <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1074,6 +1079,9 @@ msgstr "Povolit/Zakázat"
 msgid "Enabled"
 msgstr "Povoleno"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3577,7 +3585,7 @@ msgstr "Použít směrovací tabulku"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index fd495b9..574ddf1 100644 (file)
@@ -1043,6 +1043,11 @@ msgstr "Notfall"
 msgid "Enable"
 msgstr "Aktivieren"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> aktivieren"
 
@@ -1101,6 +1106,9 @@ msgstr "Aktivieren/Deaktivieren"
 msgid "Enabled"
 msgstr "Aktiviert"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3486,7 +3494,7 @@ msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
 "front of 'exit 0') to execute them at the end of the boot process."
 msgstr ""
-"Dies ist der Inhalt von /etc.rc.local. Hier kann man eigene Befehle einfügen "
+"Dies ist der Inhalt von /etc/rc.local. Hier kann man eigene Befehle einfügen "
 "(vor 'exit 0'), die dann am Ende des Bootvorgangs ausgeführt werden."
 
 msgid ""
@@ -3714,7 +3722,7 @@ msgstr "Benutze Routing-Tabelle"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index ad5ed07..f746db3 100644 (file)
@@ -1029,6 +1029,11 @@ msgstr "Έκτακτη ανάγκη"
 msgid "Enable"
 msgstr "Ενεργοποίηση"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Ενεργοποίηση <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1086,6 +1091,9 @@ msgstr "Ενεργοποίηση/Απενεργοποίηση"
 msgid "Enabled"
 msgstr "Ενεργοποιημένο"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3533,7 +3541,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index f629135..50a7c92 100644 (file)
@@ -1008,6 +1008,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1065,6 +1070,9 @@ msgstr "Enable/Disable"
 msgid "Enabled"
 msgstr "Enabled"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3490,7 +3498,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 776f7fb..8aed2e9 100644 (file)
@@ -1023,6 +1023,11 @@ msgstr "Emergencia"
 msgid "Enable"
 msgstr "Activar"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Activar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1080,6 +1085,9 @@ msgstr "Activar/Desactivar"
 msgid "Enabled"
 msgstr "Activado"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3602,7 +3610,7 @@ msgstr "Usar tabla de rutas"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 9de1687..e093438 100644 (file)
@@ -1033,6 +1033,11 @@ msgstr "Urgence"
 msgid "Enable"
 msgstr "Activer"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Activer le protocole <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1090,6 +1095,9 @@ msgstr "Activer/Désactiver"
 msgid "Enabled"
 msgstr "Activé"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3621,7 +3629,7 @@ msgstr "Utiliser la table de routage"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 8d5daf3..cb4c74a 100644 (file)
@@ -993,6 +993,11 @@ msgstr "מצב חרום"
 msgid "Enable"
 msgstr "אפשר"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "אפשר <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1050,6 +1055,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "אפשר"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3448,7 +3456,7 @@ msgstr "השתמש בטבלת ניתוב"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 5e2ea2b..e49b530 100644 (file)
@@ -1026,6 +1026,11 @@ msgstr "Vészhelyzet"
 msgid "Enable"
 msgstr "Engedélyezés"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> engedélyezése"
 
@@ -1083,6 +1088,9 @@ msgstr "Engedélyezés/Letiltás"
 msgid "Enabled"
 msgstr "Engedélyezve"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3608,7 +3616,7 @@ msgstr "Útválasztó tábla használata"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 6b55e23..ce866d9 100644 (file)
@@ -1029,6 +1029,11 @@ msgstr "Emergenza"
 msgid "Enable"
 msgstr "Abilita"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Abilita <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1086,6 +1091,9 @@ msgstr "Abilita/Disabilita"
 msgid "Enabled"
 msgstr "Abilitato"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3565,7 +3573,7 @@ msgstr "Utilizzare tabella di instradamento"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index b643e8c..07eeec5 100644 (file)
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2018-04-26 00:23+0900\n"
+"PO-Revision-Date: 2018-05-03 00:23+0900\n"
 "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
@@ -962,7 +962,7 @@ msgid "Domain whitelist"
 msgstr "ドメイン ホワイトリスト"
 
 msgid "Don't Fragment"
-msgstr ""
+msgstr "非フラグメント化"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
@@ -1033,6 +1033,13 @@ msgstr "緊急"
 msgid "Enable"
 msgstr "有効"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+"<abbr title=\"Internet Group Management Protocol\">IGMP</abbr> スヌーピングの"
+"有効化"
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr>を有効にする"
 
@@ -1076,7 +1083,7 @@ msgid "Enable mirroring of outgoing packets"
 msgstr "送信パケットのミラーリングを有効化"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "カプセル化されたパケットの DF (Don't Fragment) フラグを有効にします。"
 
 msgid "Enable this mount"
 msgstr "マウント設定を有効にする"
@@ -1090,6 +1097,9 @@ msgstr "有効/無効"
 msgid "Enabled"
 msgstr "有効"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr "ブリッジの IGMP スヌーピングを有効にします"
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -1607,6 +1617,8 @@ msgstr "インストール"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
 msgstr ""
+"IPv6 の traceroute を使用するには、 iputils-traceroute6 をインストールしま"
+"す。"
 
 msgid "Install package %q"
 msgstr "%q パッケージをインストールします"
@@ -2193,6 +2205,8 @@ msgstr "Nslookup"
 
 msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
 msgstr ""
+"キャッシュされる DNS エントリーの数です。(最大 10000 件。 0の場合はキャッ"
+"シュしません)"
 
 msgid "OK"
 msgstr "OK"
@@ -2410,7 +2424,7 @@ msgid "Packets"
 msgstr "パケット"
 
 msgid "Part of zone %q"
-msgstr "ゾーン %qの一部"
+msgstr "ゾーン %q の一部"
 
 msgid "Password"
 msgstr "パスワード"
@@ -2979,7 +2993,7 @@ msgid "Size (.ipk)"
 msgstr "サイズ (.ipk)"
 
 msgid "Size of DNS query cache"
-msgstr ""
+msgstr "DNS クエリ キャッシュのサイズ"
 
 msgid "Skip"
 msgstr "スキップ"
@@ -3613,7 +3627,7 @@ msgstr "ルーティング テーブルの使用"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 04d3c6a..e4f77c7 100644 (file)
@@ -1006,6 +1006,11 @@ msgstr ""
 msgid "Enable"
 msgstr "활성화"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> 활성화"
 
@@ -1063,6 +1068,9 @@ msgstr "활성/비활성"
 msgid "Enabled"
 msgstr "활성화됨"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3495,7 +3503,7 @@ msgstr "Routing table 사용"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index b478bd6..d5c8895 100644 (file)
@@ -978,6 +978,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Mengaktifkan <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1035,6 +1040,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3463,7 +3471,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 502c3b3..1805d8e 100644 (file)
@@ -1013,6 +1013,11 @@ msgstr "Krisesituasjon"
 msgid "Enable"
 msgstr "Aktiver"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Aktiver <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1070,6 +1075,9 @@ msgstr "Aktiver/Deaktiver"
 msgid "Enabled"
 msgstr "Aktivert"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3573,7 +3581,7 @@ msgstr "Bruk rutingtabellen"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 956e566..390e489 100644 (file)
@@ -3,8 +3,8 @@ msgstr ""
 "Project-Id-Version: LuCI\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-04-20 09:40+0200\n"
-"PO-Revision-Date: 2014-04-23 19:15+0200\n"
-"Last-Translator: goodgod261 <goodgod261@wp.pl>\n"
+"PO-Revision-Date: 2018-05-14 20:05+0200\n"
+"Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n"
 "Language-Team: Polish\n"
 "Language: pl\n"
 "MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgid "%.1f dB"
 msgstr ""
 
 msgid "%s is untagged in multiple VLANs!"
-msgstr ""
+msgstr "%s jest nieotagowany w wielu grupach VLAN!"
 
 msgid "(%d minute window, %d second interval)"
 msgstr "(okno %d minut, interwał %d sekund)"
@@ -42,13 +42,13 @@ msgid "-- custom --"
 msgstr "-- własne --"
 
 msgid "-- match by device --"
-msgstr ""
+msgstr "-- dopasuj według urządzenia --"
 
 msgid "-- match by label --"
-msgstr ""
+msgstr "-- dopasuj po etykiecie --"
 
 msgid "-- match by uuid --"
-msgstr ""
+msgstr "-- dopasuj po uuid --"
 
 msgid "1 Minute Load:"
 msgstr "Obciążenie 1 min.:"
@@ -60,13 +60,13 @@ msgid "4-character hexadecimal ID"
 msgstr ""
 
 msgid "464XLAT (CLAT)"
-msgstr ""
+msgstr "464XLAT (CLAT)"
 
 msgid "5 Minute Load:"
 msgstr "Obciążenie 5 min.:"
 
 msgid "6-octet identifier as a hex string - no colons"
-msgstr ""
+msgstr "Identyfikator 6-oktetowy jako ciąg szesnastkowy - bez dwukropków"
 
 msgid "802.11r Fast Transition"
 msgstr ""
@@ -81,10 +81,10 @@ msgid "802.11w Management Frame Protection"
 msgstr ""
 
 msgid "802.11w maximum timeout"
-msgstr ""
+msgstr "802.11w maksymalny czas oczekiwania"
 
 msgid "802.11w retry timeout"
-msgstr ""
+msgstr "802.11w interwał ponawiania prób"
 
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
@@ -124,7 +124,7 @@ msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway"
 msgstr "Brama <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>"
 
 msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
-msgstr ""
+msgstr "Sufiks <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>(hex)"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
 msgstr "Konfiguracja diod <abbr title=\"Light Emitting Diode\">LED</abbr>"
@@ -162,6 +162,8 @@ msgid ""
 "<br/>Note: you need to manually restart the cron service if the crontab file "
 "was empty before editing."
 msgstr ""
+"<br/>Uwaga: musisz ręcznie zrestartować usługę cron, jeśli plik crontab "
+"był pusty przed edycją."
 
 msgid "A43C + J43 + A43"
 msgstr ""
@@ -170,7 +172,7 @@ msgid "A43C + J43 + A43 + V43"
 msgstr ""
 
 msgid "ADSL"
-msgstr ""
+msgstr "ADSL"
 
 msgid "AICCU (SIXXS)"
 msgstr ""
@@ -188,7 +190,7 @@ msgid "ATM (Asynchronous Transfer Mode)"
 msgstr ""
 
 msgid "ATM Bridges"
-msgstr "Mostki ATM"
+msgstr "Mosty ATM"
 
 # Nie wiem czy to powinno się tłumaczyć wg. mnie lepiej zostawić po angielsku
 msgid "ATM Virtual Channel Identifier (VCI)"
@@ -198,15 +200,14 @@ msgstr "Identyfikator kanału wirtualnego ATM (VCI)"
 msgid "ATM Virtual Path Identifier (VPI)"
 msgstr "Identyfikator ścieżki wirtualnej ATM (VPI)"
 
-# Jak zwykle zakręciłem...niech ktoś poprawi
 msgid ""
 "ATM bridges expose encapsulated ethernet in AAL5 connections as virtual "
 "Linux network interfaces which can be used in conjunction with DHCP or PPP "
 "to dial into the provider network."
 msgstr ""
-"Mostki ATM maskują za-kapsułkowane ramki Ethernet w połączeniach AAL5 jako "
-"wirtualne interfejsy w Linuksie. Interfejsy takie mogą być użyte w "
-"połączeniu z protokołami DHCP lub PPP do wdzwaniania się do sieci provider`a"
+"Mosty ATM eksponują enkapsulowaną sieć Ethernet w połączeniach AAL5 jako wirtualne "
+"interfejsy sieciowe systemu Linux, które mogą być używane w połączeniu z protokołem "
+"DHCP lub PPP w celu polączenia się z siecią dostawcy."
 
 msgid "ATM device number"
 msgstr "Numer urządzenia ATM"
@@ -265,7 +266,7 @@ msgid "Additional Hosts files"
 msgstr "Dodatkowe pliki Hosts"
 
 msgid "Additional servers file"
-msgstr ""
+msgstr "Dodatkowe pliki serwera"
 
 msgid "Address"
 msgstr "Adres"
@@ -289,10 +290,10 @@ msgstr "Alarm"
 msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
 "address"
-msgstr ""
+msgstr "Przydziel sekwencyjnie adresy IP, zaczynając od najmniejszego dostępnego"
 
 msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "Przydzielaj adresy IP po kolei"
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
 msgstr "Pozwól na logowanie <abbr title=\"Secure Shell\">SSH</abbr>"
@@ -310,16 +311,13 @@ msgid "Allow localhost"
 msgstr "Pozwól tylko sobie (localhost)"
 
 msgid "Allow remote hosts to connect to local SSH forwarded ports"
-msgstr ""
-"Pozwól zdalnym komputerom na połączenia SSH do lokalnych przekierowanych "
-"portów"
+msgstr "Zezwalaj zdalnym hostom na łączenie się z lokalnie przekazywanymi portami SSH"
 
 msgid "Allow root logins with password"
 msgstr "Zezwól na logowanie roota przy pomocy hasła"
 
-# Brak spacji...
 msgid "Allow the <em>root</em> user to login with password"
-msgstr "Pozwól użytkownikowi <em>root</em> na logowanie przy pomocy hasła"
+msgstr "Pozwól użytkownikowi <em>root</em> na logowanie się przy pomocy hasła"
 
 msgid ""
 "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
@@ -327,7 +325,7 @@ msgstr ""
 "Pozwól na ruch wychodzący (odpowiedzi) z podsieci 127.0.0.0/8, np. usługi RBL"
 
 msgid "Allowed IPs"
-msgstr ""
+msgstr "Dozwolone adresy IP"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
@@ -335,7 +333,7 @@ msgid ""
 msgstr ""
 
 msgid "Always announce default router"
-msgstr ""
+msgstr "Zawsze rozgłaszaj domyślny router"
 
 msgid "Annex"
 msgstr ""
@@ -441,7 +439,6 @@ msgstr "Uwierzytelnianie"
 msgid "Authentication Type"
 msgstr ""
 
-# Nawet M$ tego nie tłumaczy;)
 msgid "Authoritative"
 msgstr "Autorytatywny"
 
@@ -624,8 +621,8 @@ msgid ""
 "interface to it."
 msgstr ""
 "Wybierz strefę firewalla którą chcesz przypisać do tego interfejsu. Wybierz "
-"<em>unspecified</em> aby usunąć interfejs z przypisanej strefy lub wybierz "
-"pole <em>create</em> aby zdefiniować nową strefę i przypisać ją do "
+"<em>nieokreślone</em> aby usunąć interfejs z przypisanej strefy lub wybierz "
+"pole <em>utwórz</em> aby zdefiniować nową strefę i przypisać ją do "
 "interfejsu."
 
 msgid ""
@@ -641,7 +638,6 @@ msgstr "Szyfr"
 msgid "Cisco UDP encapsulation"
 msgstr ""
 
-# Przyciski nazywają sie "Twórz archiwum" i "Wykonaj reset" a nie Przywróć Ustawienia
 msgid ""
 "Click \"Generate archive\" to download a tar archive of the current "
 "configuration files. To reset the firmware to its initial state, click "
@@ -682,6 +678,7 @@ msgid ""
 "workaround might cause interoperability issues and reduced robustness of key "
 "negotiation especially in environments with heavy traffic load."
 msgstr ""
+"Komplikuje atak ponownej instalacji klucza po stronie klienta, wyłączając retransmisję ramek klucza EAPOL, które są używane do instalowania kluczy. To obejście może powodować problemy z interoperacyjnością i zmniejszoną odporność kluczowych negocjacji, szczególnie w środowiskach o dużym natężeniu ruchu."
 
 msgid "Configuration"
 msgstr "Konfiguracja"
@@ -739,7 +736,7 @@ msgid "Cron Log Level"
 msgstr "Poziom logowania Cron`a"
 
 msgid "Custom Interface"
-msgstr "Interfejs Niestandardowy"
+msgstr "Interfejs niestandardowy"
 
 msgid "Custom delegated IPv6-prefix"
 msgstr ""
@@ -757,7 +754,6 @@ msgid ""
 "this, perform a factory-reset first."
 msgstr ""
 
-# Spacji zabrało i napisy się skleiły
 msgid ""
 "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
 "\">LED</abbr>s if possible."
@@ -784,7 +780,7 @@ msgid "DHCPv6 Leases"
 msgstr "Dzierżawy DHCPv6"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "Klient DHCPv6"
 
 msgid "DHCPv6-Mode"
 msgstr ""
@@ -814,10 +810,10 @@ msgid "DS-Lite AFTR address"
 msgstr ""
 
 msgid "DSL"
-msgstr ""
+msgstr "DSL"
 
 msgid "DSL Status"
-msgstr ""
+msgstr "Status DSL"
 
 msgid "DSL line mode"
 msgstr ""
@@ -880,10 +876,10 @@ msgid "Device Configuration"
 msgstr "Konfiguracja urządzenia"
 
 msgid "Device is rebooting..."
-msgstr ""
+msgstr "Urządzenie jest uruchamiane ponownie ..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "Urządzenie nieosiągalne"
 
 msgid "Diagnostics"
 msgstr "Diagnostyka"
@@ -905,16 +901,16 @@ msgstr ""
 "tym interfejsie."
 
 msgid "Disable DNS setup"
-msgstr "Wyłącz konfigurowanie DNS"
+msgstr "Wyłącz konfigurację DNS"
 
 msgid "Disable Encryption"
-msgstr ""
+msgstr "Wyłącz szyfrowanie"
 
 msgid "Disabled"
 msgstr "Wyłączony"
 
 msgid "Disabled (default)"
-msgstr ""
+msgstr "Wyłączone (domyślnie)"
 
 msgid "Discard upstream RFC1918 responses"
 msgstr "Odrzuć wychodzące odpowiedzi RFC1918"
@@ -1032,13 +1028,17 @@ msgstr "Edytuj ten interfejs"
 msgid "Edit this network"
 msgstr "Edytuj tą sieć"
 
-# dosłownie nagły wypadek
 msgid "Emergency"
 msgstr "Zagrożenie"
 
 msgid "Enable"
 msgstr "Włącz"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr "Włącz nasłuchiwanie <abbr title=\"Internet Group Management Protocol\">IGMP</abbr>"
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Włącz <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1046,7 +1046,7 @@ msgid "Enable HE.net dynamic endpoint update"
 msgstr "Włącz dynamiczną aktualizację punktu końcowego sieci HE.net"
 
 msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "Włącz negocjację IPv6"
 
 msgid "Enable IPv6 negotiation on the PPP link"
 msgstr "Włącz negocjację IPv6 na łączu PPP"
@@ -1067,10 +1067,10 @@ msgid "Enable VLAN functionality"
 msgstr "Włącz funkcjonalność VLAN"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "Włącz przycisk WPS, wymaga WPA(2)-PSK"
 
 msgid "Enable key reinstallation (KRACK) countermeasures"
-msgstr ""
+msgstr "Włącz środki zaradcze dotyczące ponownej instalacji kluczy (KRACK)"
 
 msgid "Enable learning and aging"
 msgstr "Włącz uczenie się i starzenie"
@@ -1096,19 +1096,22 @@ msgstr "Wlącz/Wyłącz"
 msgid "Enabled"
 msgstr "Włączony"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr "Włącz nasłuchiwanie IGMP na tym moście"
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
-msgstr ""
+msgstr "Aktywuje szybki roaming pomiędzy punktami dostępowymi, które należą "
+"do tej samej domeny"
 
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 "Włącz protokół <abbr title=\"Spanning Tree Protocol\">STP</abbr> na tym "
 "moście"
 
-# a może sposób kapsułkowania byłby lepszy?
 msgid "Encapsulation mode"
-msgstr "Sposób Enkapsulacji"
+msgstr "Sposób enkapsulacji"
 
 msgid "Encryption"
 msgstr "Szyfrowanie"
@@ -1135,7 +1138,7 @@ msgid "Ethernet Switch"
 msgstr "Switch Ethernet"
 
 msgid "Exclude interfaces"
-msgstr ""
+msgstr "Wyklucz interfejsy"
 
 msgid "Expand hosts"
 msgstr "Rozwiń hosty"
@@ -1159,13 +1162,13 @@ msgid "External R1 Key Holder List"
 msgstr ""
 
 msgid "External system log server"
-msgstr "Zewnętrzny serwer dla loga systemowego"
+msgstr "Zewnętrzny serwer dla logów systemowych"
 
 msgid "External system log server port"
-msgstr "Port zewnętrznego serwera dla loga systemowego"
+msgstr "Port zewnętrznego serwera dla logów systemowych"
 
 msgid "External system log server protocol"
-msgstr ""
+msgstr "Protokół zewnętrznego serwera dla logów systemowych"
 
 msgid "Extra SSH command options"
 msgstr ""
@@ -1217,7 +1220,6 @@ msgstr "Firewall"
 msgid "Firewall Mark"
 msgstr ""
 
-# Nie ma potrzeby pisania z dużej litery
 msgid "Firewall Settings"
 msgstr "Ustawienia firewalla"
 
@@ -1265,7 +1267,7 @@ msgid "Force TKIP and CCMP (AES)"
 msgstr "Wymuś TKIP i CCMP (AES)"
 
 msgid "Force link"
-msgstr ""
+msgstr "Wymuś połączenie"
 
 msgid "Force use of NAT-T"
 msgstr ""
@@ -1327,10 +1329,10 @@ msgid "General options for opkg"
 msgstr ""
 
 msgid "Generate Config"
-msgstr ""
+msgstr "Wygeneruj konfigurację"
 
 msgid "Generate PMK locally"
-msgstr ""
+msgstr "Wygeneruj PMK lokalnie"
 
 msgid "Generate archive"
 msgstr "Twórz archiwum"
@@ -1359,7 +1361,7 @@ msgid "Group Password"
 msgstr ""
 
 msgid "Guest"
-msgstr ""
+msgstr "Gość"
 
 msgid "HE.net password"
 msgstr "Hasło HE.net"
@@ -1418,7 +1420,7 @@ msgid "Hostname"
 msgstr "Nazwa hosta"
 
 msgid "Hostname to send when requesting DHCP"
-msgstr "Nazwa hosta do wysłania podczas negocjacji DHCP"
+msgstr "Nazwa hosta wysyłana podczas negocjacji DHCP"
 
 msgid "Hostnames"
 msgstr "Nazwy hostów"
@@ -1621,7 +1623,7 @@ msgid "Install"
 msgstr "Instaluj"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
-msgstr ""
+msgstr "Zainstaluj iputils-traceroute6 w celu skorzystania z traceroute dla iPv6"
 
 msgid "Install package %q"
 msgstr "Instaluj pakiet %q"
@@ -1652,7 +1654,7 @@ msgid "Interface is shutting down..."
 msgstr "Interfejs jest wyłączany..."
 
 msgid "Interface name"
-msgstr ""
+msgstr "Nazwa interfejsu"
 
 msgid "Interface not present or not connected yet."
 msgstr "Interfejs nie istnieje lub nie jest jeszcze podłączony."
@@ -1686,7 +1688,7 @@ msgid "Invalid username and/or password! Please try again."
 msgstr "Niewłaściwy login i/lub hasło! Spróbuj ponownie."
 
 msgid "Isolate Clients"
-msgstr ""
+msgstr "Izoluj klientów"
 
 #, fuzzy
 msgid ""
@@ -1703,10 +1705,10 @@ msgid "Join Network"
 msgstr "Połącz z siecią"
 
 msgid "Join Network: Wireless Scan"
-msgstr "Przyłącz do sieci: Skanuj sieci WiFi"
+msgstr "Przyłącz do sieci: Skanuj sieci Wi-Fi"
 
 msgid "Joining Network: %q"
-msgstr ""
+msgstr "Przyłączanie do sieci: %q"
 
 msgid "Keep settings"
 msgstr "Zachowaj ustawienia"
@@ -1751,13 +1753,13 @@ msgid "Language and Style"
 msgstr "Wygląd i język"
 
 msgid "Latency"
-msgstr ""
+msgstr "Opoźnienie"
 
 msgid "Leaf"
 msgstr ""
 
 msgid "Lease time"
-msgstr ""
+msgstr "Czas dzierżawy"
 
 msgid "Lease validity time"
 msgstr "Czas ważności dzierżawy"
@@ -1784,7 +1786,7 @@ msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
 msgstr ""
 
 msgid "Limit listening to these interfaces, and loopback."
-msgstr ""
+msgstr "Ogranicz nasłuchiwanie do tych interfesjów, oraz loopbacku."
 
 msgid "Line Attenuation (LATN)"
 msgstr ""
@@ -1834,10 +1836,10 @@ msgid "List of hosts that supply bogus NX domain results"
 msgstr "Lista hostów które dostarczają zafałszowane wyniki NX domain"
 
 msgid "Listen Interfaces"
-msgstr ""
+msgstr "Nasłuchuj interfejs"
 
 msgid "Listen Port"
-msgstr ""
+msgstr "Nasłuchuj port"
 
 msgid "Listen only on the given interface or, if unspecified, on all"
 msgstr ""
@@ -1856,7 +1858,7 @@ msgid "Loading"
 msgstr "Ładowanie"
 
 msgid "Local IP address to assign"
-msgstr ""
+msgstr "Lokalny adres IP do przypisania"
 
 msgid "Local IPv4 address"
 msgstr "Lokalny adres IPv4"
@@ -1944,7 +1946,7 @@ msgid "MB/s"
 msgstr "MB/s"
 
 msgid "MD5"
-msgstr ""
+msgstr "MD5"
 
 msgid "MHz"
 msgstr "MHz"
@@ -1956,6 +1958,8 @@ msgid ""
 "Make sure to clone the root filesystem using something like the commands "
 "below:"
 msgstr ""
+"Upewnij się, że klonujesz główny system plików, używając czegoś podobnego "
+"do poleceń poniżej:"
 
 msgid "Manual"
 msgstr ""
@@ -2014,7 +2018,7 @@ msgid "Mode"
 msgstr "Tryb"
 
 msgid "Model"
-msgstr ""
+msgstr "Model"
 
 msgid "Modem device"
 msgstr "Modem"
@@ -2081,7 +2085,7 @@ msgid "NAT64 Prefix"
 msgstr ""
 
 msgid "NCM"
-msgstr ""
+msgstr "NCM"
 
 msgid "NDP-Proxy"
 msgstr ""
@@ -2165,7 +2169,7 @@ msgid "Noise"
 msgstr "Szum"
 
 msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Margines szumów (SNR)"
 
 msgid "Noise:"
 msgstr "Szum:"
@@ -2192,7 +2196,7 @@ msgid "Not connected"
 msgstr "Nie podłączony"
 
 msgid "Note: Configuration files will be erased."
-msgstr "UWAGA: Pliki konfiguracyjne zostaną usunięte."
+msgstr "Uwaga: Pliki konfiguracyjne zostaną usunięte."
 
 msgid "Note: interface name length"
 msgstr ""
@@ -2257,7 +2261,7 @@ msgid "OpenConnect (CISCO AnyConnect)"
 msgstr ""
 
 msgid "Operating frequency"
-msgstr ""
+msgstr "Częstotliwość"
 
 msgid "Option changed"
 msgstr "Wartość zmieniona"
@@ -2266,7 +2270,7 @@ msgid "Option removed"
 msgstr "Usunięto wartość"
 
 msgid "Optional"
-msgstr ""
+msgstr "Opcjonalny"
 
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
@@ -2335,13 +2339,13 @@ msgid "Override MTU"
 msgstr "Nadpisz MTU"
 
 msgid "Override TOS"
-msgstr ""
+msgstr "Nadpisz TOS"
 
 msgid "Override TTL"
-msgstr ""
+msgstr "Nadpisz TTL"
 
 msgid "Override default interface name"
-msgstr ""
+msgstr "Nadpisz domyślną nazwę interfejsu"
 
 msgid "Override the gateway in DHCP responses"
 msgstr "Nadpisz adres bramy w odpowiedziach DHCP"
@@ -2375,7 +2379,7 @@ msgid "PIN"
 msgstr "PIN"
 
 msgid "PMK R1 Push"
-msgstr ""
+msgstr "PMK R1 Push"
 
 msgid "PPP"
 msgstr "PPP"
@@ -2390,7 +2394,7 @@ msgid "PPPoE"
 msgstr "PPPoE"
 
 msgid "PPPoSSH"
-msgstr ""
+msgstr "PPPoSSH"
 
 msgid "PPtP"
 msgstr "PPtP"
@@ -2423,13 +2427,13 @@ msgid "Password"
 msgstr "Hasło"
 
 msgid "Password authentication"
-msgstr "Identyfikacja hasłem"
+msgstr "Uwierzytelnianie hasłem"
 
 msgid "Password of Private Key"
 msgstr "Hasło lub klucz prywatny"
 
 msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Wewnętrzne hasło klucza prywatnego"
 
 msgid "Password successfully changed!"
 msgstr "Pomyślnie zmieniono hasło!"
@@ -2441,19 +2445,19 @@ msgid "Path to CA-Certificate"
 msgstr "Ścieżka do certyfikatu CA"
 
 msgid "Path to Client-Certificate"
-msgstr "Ścieżka do certyfikatu Klienta"
+msgstr "Ścieżka do certyfikatu klienta"
 
 msgid "Path to Private Key"
 msgstr "Ścieżka do Klucza Prywatnego"
 
 msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "Ścieżka do wewnętrznego certyfikatu CA"
 
 msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "Ścieżka do wewnętrznego certyfikatu Klienta"
 
 msgid "Path to inner Private Key"
-msgstr ""
+msgstr "Ścieżka do wewnętrznego klucza prywatnego "
 
 msgid "Peak:"
 msgstr "Szczyt:"
@@ -2501,7 +2505,7 @@ msgid "Port status:"
 msgstr "Status portu:"
 
 msgid "Power Management Mode"
-msgstr ""
+msgstr "Tryb zarządzania energią"
 
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
@@ -2526,16 +2530,16 @@ msgstr ""
 "wpisz 0 aby zignorować błędy"
 
 msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Zapobiegaj nasłuchiwaniu na tych interfejsach."
 
 msgid "Prevents client-to-client communication"
-msgstr "Zapobiegaj komunikacji klientów pomiędzy sobą"
+msgstr "Zabroń klientą na komunikacje między sobą"
 
 msgid "Prism2/2.5/3 802.11b Wireless Controller"
 msgstr "Kontroler bezprzewodowy Prism2/2.5/3 802.11b"
 
 msgid "Private Key"
-msgstr ""
+msgstr "Klucz prywatny"
 
 msgid "Proceed"
 msgstr "Wykonaj"
@@ -2544,7 +2548,7 @@ msgid "Processes"
 msgstr "Procesy"
 
 msgid "Profile"
-msgstr ""
+msgstr "Profil"
 
 msgid "Prot."
 msgstr "Prot."
@@ -2561,7 +2565,6 @@ msgstr "Protokół nowego interfejsu"
 msgid "Protocol support is not installed"
 msgstr "Wsparcie dla protokołu nie jest zainstalowane"
 
-# Opcja dotyczy włączenia serwera czasu, więc "podaj" nie jest właściwym tłumaczeniem w tym miejscu - obsy
 msgid "Provide NTP server"
 msgstr "Włącz serwer NTP"
 
@@ -2572,7 +2575,7 @@ msgid "Pseudo Ad-Hoc (ahdemo)"
 msgstr "Pseudo Ad-Hoc (ahdemo)"
 
 msgid "Public Key"
-msgstr ""
+msgstr "Klucz publiczny"
 
 msgid "Public prefix routed to this device for distribution to clients."
 msgstr ""
@@ -2681,10 +2684,10 @@ msgid "Realtime Traffic"
 msgstr "Ruch w czasie rzeczywistym"
 
 msgid "Realtime Wireless"
-msgstr "WiFi w czasie rzeczywistym"
+msgstr "Wi-Fi w czasie rzeczywistym"
 
 msgid "Reassociation Deadline"
-msgstr ""
+msgstr "Termin reasocjacji"
 
 msgid "Rebind protection"
 msgstr "Przypisz ochronę"
@@ -2732,7 +2735,7 @@ msgid "Remote IPv4 address"
 msgstr "Zdalny adres IPv4"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "Zdalny adres IPv4 lub FQDN"
 
 msgid "Remove"
 msgstr "Usuń"
@@ -2747,16 +2750,16 @@ msgid "Replace wireless configuration"
 msgstr "Zamień konfigurację WiFi"
 
 msgid "Request IPv6-address"
-msgstr ""
+msgstr "Zażądaj adresu IPv6"
 
 msgid "Request IPv6-prefix of length"
 msgstr ""
 
 msgid "Require TLS"
-msgstr ""
+msgstr "Wymagaj TLS"
 
 msgid "Required"
-msgstr ""
+msgstr "Wymagany"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Wymagany dla niektórych dostawców internetu, np. Charter z DOCSIS 3"
@@ -2866,16 +2869,16 @@ msgid "SIXXS-handle[/Tunnel-ID]"
 msgstr ""
 
 msgid "SNR"
-msgstr ""
+msgstr "SNR"
 
 msgid "SSH Access"
 msgstr "Dostęp SSH"
 
 msgid "SSH server address"
-msgstr ""
+msgstr "Adres serwera SSH"
 
 msgid "SSH server port"
-msgstr ""
+msgstr "Port serwera SSH"
 
 msgid "SSH username"
 msgstr ""
@@ -2948,6 +2951,8 @@ msgid ""
 "Set interface properties regardless of the link carrier (If set, carrier "
 "sense events do not invoke hotplug handlers)."
 msgstr ""
+"Ustaw właściwości interfejsu, niezależnie od operatora łącza (nie wpływa"
+" na programy operatora które ustanawiają połączenie)."
 
 #, fuzzy
 msgid "Set up Time Synchronization"
@@ -3005,7 +3010,7 @@ msgid "Software"
 msgstr "Oprogramowanie"
 
 msgid "Software VLAN"
-msgstr ""
+msgstr "VLAN programowy"
 
 msgid "Some fields are invalid, cannot save values!"
 msgstr "Wartości pewnych pól są niewłaściwe, nie mogę ich zachować!"
@@ -3278,7 +3283,7 @@ msgid "The following rules are currently active on this system."
 msgstr "Następujące zasady są obecnie aktywne w tym systemie."
 
 msgid "The given network name is not unique"
-msgstr "Podana sieć NIE jest unikalna"
+msgstr "Podana sieć nie jest unikalna"
 
 #, fuzzy
 msgid ""
@@ -3466,8 +3471,8 @@ msgid ""
 "To restore configuration files, you can upload a previously generated backup "
 "archive here."
 msgstr ""
-"Aby przywrócić pliki konfiguracyjne, można tutaj wczytać wcześniej utworzone "
-"archiwum kopii zapasowej."
+"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesłać wcześniej utworzoną "
+"kopię zapasową."
 
 msgid "Tone"
 msgstr ""
@@ -3500,7 +3505,7 @@ msgid "Trigger"
 msgstr "Trigger"
 
 msgid "Trigger Mode"
-msgstr "Tryb Trigger"
+msgstr "Rodzaj Triggeru"
 
 msgid "Tunnel ID"
 msgstr "Numer identyfikacyjny tunelu"
@@ -3518,7 +3523,7 @@ msgid "Tunnel setup server"
 msgstr ""
 
 msgid "Tunnel type"
-msgstr ""
+msgstr "Typ tunelu"
 
 msgid "Tx-Power"
 msgstr "Moc nadawania"
@@ -3539,7 +3544,7 @@ msgid "USB Device"
 msgstr "Urządzenie USB"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "Porty USB"
 
 msgid "UUID"
 msgstr "UUID"
@@ -3554,13 +3559,13 @@ msgid "Unknown"
 msgstr "Nieznany"
 
 msgid "Unknown Error, password not changed!"
-msgstr "Nieznany błąd, hasło nie zostało zmienione"
+msgstr "Nieznany błąd, hasło nie zostało zmienione!"
 
 msgid "Unmanaged"
 msgstr "Niezarządzalny"
 
 msgid "Unmount"
-msgstr ""
+msgstr "Odmontuj"
 
 msgid "Unsaved Changes"
 msgstr "Niezapisane zmiany"
@@ -3576,9 +3581,9 @@ msgid ""
 "Check \"Keep settings\" to retain the current configuration (requires a "
 "compatible firmware image)."
 msgstr ""
-"Prześlij zgodny z funkcją sysupgrade obraz tutaj, aby zastąpić aktualnie "
-"działające firmware. Zaznacz opcję \"Zachowaj ustawienia\", aby zachować "
-"bieżącą konfigurację (wymaga zgodnego obrazu firmware)."
+"Prześlij tutaj obraz zgodny z funkcją sysupgrade, aby zastąpić aktualnie "
+"działające opragramowanie. Zaznacz opcję \"Zachowaj ustawienia\", aby zachować "
+"bieżącą konfigurację (wymagany obraz zgodny z bieżącym opragramowaniem)."
 
 msgid "Upload archive..."
 msgstr "Załaduj archiwum..."
@@ -3611,16 +3616,16 @@ msgid "Use as external overlay (/overlay)"
 msgstr ""
 
 msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "Użyj jako systemu plików root (/)"
 
 msgid "Use broadcast flag"
 msgstr "Użyj flagi rozgłaszania"
 
 msgid "Use builtin IPv6-management"
-msgstr ""
+msgstr "Skorzystaj z wbudowanego zarządzania protokołem IPv6"
 
 msgid "Use custom DNS servers"
-msgstr "Użyj własnych serwerów DNS"
+msgstr "Użyj własne serwery DNS"
 
 msgid "Use default gateway"
 msgstr "Użyj domyślnej bramy"
@@ -3633,7 +3638,7 @@ msgstr "Użyj tabeli routingu"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
@@ -3656,10 +3661,10 @@ msgid ""
 msgstr ""
 
 msgid "User certificate (PEM encoded)"
-msgstr ""
+msgstr "Certyfikat użytkownika (kodowany PEM)"
 
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "Klucz użytkownika (kodowany PEM)"
 
 msgid "Username"
 msgstr "Nazwa użytkownika"
@@ -3668,7 +3673,7 @@ msgid "VC-Mux"
 msgstr "VC-Mux"
 
 msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
 
 msgid "VLANs on %q"
 msgstr "Sieci VLAN na %q"
@@ -3686,7 +3691,7 @@ msgid "VPN Server"
 msgstr "Serwer VPN"
 
 msgid "VPN Server port"
-msgstr ""
+msgstr "Port serwera VPN"
 
 msgid "VPN Server's certificate SHA1 hash"
 msgstr ""
@@ -3695,7 +3700,7 @@ msgid "VPNC (CISCO 3000 (and others) VPN)"
 msgstr ""
 
 msgid "Vendor"
-msgstr ""
+msgstr "Producent"
 
 msgid "Vendor Class to send when requesting DHCP"
 msgstr "Klasa producenta do wysłania podczas żądania DHCP"
@@ -3734,14 +3739,13 @@ msgid ""
 "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP "
 "and ad-hoc mode) to be installed."
 msgstr ""
-"Kodowanie WPA wymaga zainstalowanych modułów wpa_supplicant (na tryb "
-"klienta) lub hostapd (dla trybów AP lub ad-hoc)"
+"Kodowanie WPA wymaga zainstalowanych modułów wpa_supplicant (tryb "
+"klienta) lub hostapd (tryb AP lub ad-hoc)"
 
 msgid ""
 "Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)"
 msgstr ""
 
-# obsy: Brzmi to lepiej niż "czekanie na wprowadzanie zmian.
 msgid "Waiting for changes to be applied..."
 msgstr "Trwa wprowadzenie zmian..."
 
@@ -3749,13 +3753,14 @@ msgid "Waiting for command to complete..."
 msgstr "Trwa wykonanie polecenia..."
 
 msgid "Waiting for device..."
-msgstr ""
+msgstr "Oczekiwanie na urządzenie..."
 
 msgid "Warning"
 msgstr "Ostrzeżenie"
 
 msgid "Warning: There are unsaved changes that will get lost on reboot!"
-msgstr ""
+msgstr "Ostrzeżenie: Istnieją niezapisane zmiany, które zostaną utracone "
+"po ponownym uruchomieniu urządzenia!"
 
 msgid ""
 "When using a PSK, the PMK can be generated locally without inter AP "
@@ -3769,7 +3774,7 @@ msgid "Whether to route only packets from delegated prefixes"
 msgstr ""
 
 msgid "Width"
-msgstr ""
+msgstr "Szerokość"
 
 msgid "WireGuard VPN"
 msgstr ""
@@ -3811,7 +3816,7 @@ msgid "Write received DNS requests to syslog"
 msgstr "Zapisz otrzymane żądania DNS do syslog'a"
 
 msgid "Write system log to file"
-msgstr ""
+msgstr "Zapisz log systemowy do pliku"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3834,6 +3839,9 @@ msgid ""
 "upgrade it to at least version 7 or use another browser like Firefox, Opera "
 "or Safari."
 msgstr ""
+"Twój Internet Explorer jest za stary, aby poprawnie wyświetlić tę stronę"
+"zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglądarki, takiej "
+"jak Firefox, Opera czy Safari".
 
 msgid "any"
 msgstr "dowolny"
@@ -3845,13 +3853,13 @@ msgid "baseT"
 msgstr "baseT"
 
 msgid "bridged"
-msgstr "bridged"
+msgstr "zmostkowany"
 
 msgid "create:"
 msgstr "utwórz:"
 
 msgid "creates a bridge over specified interface(s)"
-msgstr "utwórz bridge na określonych interfejsach"
+msgstr "utwórz most na określonych interfejsach"
 
 msgid "dB"
 msgstr "dB"
@@ -3863,7 +3871,7 @@ msgid "disable"
 msgstr "wyłącz"
 
 msgid "disabled"
-msgstr ""
+msgstr "wyłączony"
 
 msgid "expired"
 msgstr "wygasły"
@@ -3891,7 +3899,7 @@ msgid "hidden"
 msgstr "ukryty"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "tryb hybrydowy"
 
 msgid "if target is a network"
 msgstr "jeżeli celem jest sieć"
@@ -3912,10 +3920,10 @@ msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
 msgstr "lokalny plik <abbr title=\"Domain Name System\">DNS</abbr>"
 
 msgid "minimum 1280, maximum 1480"
-msgstr ""
+msgstr "minimum 1280, maksimum 1480"
 
 msgid "minutes"
-msgstr ""
+msgstr "minuty"
 
 msgid "no"
 msgstr "nie"
@@ -3928,7 +3936,7 @@ msgid "none"
 msgstr "żaden"
 
 msgid "not present"
-msgstr ""
+msgstr "nieobecny"
 
 msgid "off"
 msgstr "wyłączone"
@@ -3943,7 +3951,7 @@ msgid "overlay"
 msgstr ""
 
 msgid "random"
-msgstr ""
+msgstr "losowy"
 
 msgid "relay mode"
 msgstr ""
@@ -3952,7 +3960,7 @@ msgid "routed"
 msgstr "routowane"
 
 msgid "server mode"
-msgstr ""
+msgstr "tryb serwera"
 
 msgid "stateful-only"
 msgstr ""
@@ -3964,10 +3972,10 @@ msgid "stateless + stateful"
 msgstr ""
 
 msgid "tagged"
-msgstr "tagowane"
+msgstr "otagowane"
 
 msgid "time units (TUs / 1.024 ms) [1000-65535]"
-msgstr ""
+msgstr "jednostki czasu (TUs / 1.024 ms) [1000-65535]"
 
 msgid "unknown"
 msgstr "nieznane"
@@ -3982,7 +3990,7 @@ msgid "unspecified -or- create:"
 msgstr "nieokreślone -lub- utwórz:"
 
 msgid "untagged"
-msgstr "nietagowane"
+msgstr "nieotagowane"
 
 msgid "yes"
 msgstr "tak"
index 9c4901f..a51d11d 100644 (file)
@@ -1075,6 +1075,11 @@ msgstr "Emergência"
 msgid "Enable"
 msgstr "Ativar"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1132,6 +1137,9 @@ msgstr "Ativar/Desativar"
 msgid "Enabled"
 msgstr "Ativado"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3756,7 +3764,7 @@ msgstr "Use a tabela de roteamento"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 8f2622c..843a4ca 100644 (file)
@@ -1029,6 +1029,11 @@ msgstr "Emergência"
 msgid "Enable"
 msgstr "Ativar"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1086,6 +1091,9 @@ msgstr "Ativar/Desativar"
 msgid "Enabled"
 msgstr "Ativado"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3571,7 +3579,7 @@ msgstr "Usar tabela de roteamento"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 86eaa64..748bfdb 100644 (file)
@@ -984,6 +984,11 @@ msgstr "Urgenta"
 msgid "Enable"
 msgstr "Activeaza"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Activeaza <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1041,6 +1046,9 @@ msgstr "Activeaza/Dezactiveaza"
 msgid "Enabled"
 msgstr "Activat"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3439,7 +3447,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 4ffb723..35a6976 100644 (file)
@@ -1060,6 +1060,11 @@ msgstr "Чрезвычайная ситуация"
 msgid "Enable"
 msgstr "Включить"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Включить <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1117,6 +1122,9 @@ msgstr "Включить/выключить"
 msgid "Enabled"
 msgstr "Включено"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3704,7 +3712,7 @@ msgstr "Использовать таблицу маршрутизации"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index a17ac98..acc5779 100644 (file)
@@ -965,6 +965,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr ""
 
@@ -1022,6 +1027,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3409,7 +3417,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 089546a..632ea6f 100644 (file)
@@ -985,6 +985,11 @@ msgstr "Nödsituation"
 msgid "Enable"
 msgstr "Aktivera"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Aktivera <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1042,6 +1047,9 @@ msgstr "Aktivera/Inaktivera"
 msgid "Enabled"
 msgstr "Aktiverad"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3436,7 +3444,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index de8b7fb..ddf2e56 100644 (file)
@@ -958,6 +958,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr ""
 
@@ -1015,6 +1020,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3402,7 +3410,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 45f4a7c..953d1e9 100644 (file)
@@ -978,6 +978,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr ""
 
@@ -1035,6 +1040,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3422,7 +3430,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index b1feed3..8ead616 100644 (file)
@@ -1039,6 +1039,11 @@ msgstr "Аварійний"
 msgid "Enable"
 msgstr "Увімкнути"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1096,6 +1101,9 @@ msgstr "Увімкнено/Вимкнено"
 msgid "Enabled"
 msgstr "Увімкнено"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3625,7 +3633,7 @@ msgstr "Використовувати таблицю маршрутизації
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index ecb369e..888fc92 100644 (file)
@@ -983,6 +983,11 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "Kích hoạt <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1040,6 +1045,9 @@ msgstr "Cho kích hoạt/ Vô hiệu hóa"
 msgid "Enabled"
 msgstr ""
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3464,7 +3472,7 @@ msgstr ""
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index c76511b..df6ce8b 100644 (file)
@@ -993,6 +993,11 @@ msgstr "紧急"
 msgid "Enable"
 msgstr "启用"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "开启 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1050,6 +1055,9 @@ msgstr "启用/禁用"
 msgid "Enabled"
 msgstr "启用"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3507,7 +3515,7 @@ msgstr "使用路由表"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index 28a806e..edc5207 100644 (file)
@@ -995,6 +995,11 @@ msgstr "緊急"
 msgid "Enable"
 msgstr "啟用"
 
+msgid ""
+"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
+"snooping"
+msgstr ""
+
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 msgstr "啟用 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
@@ -1052,6 +1057,9 @@ msgstr "啟用/關閉"
 msgid "Enabled"
 msgstr "啟用"
 
+msgid "Enables IGMP snooping on this bridge"
+msgstr ""
+
 msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
@@ -3498,7 +3506,7 @@ msgstr "使用路由表"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
-"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed "
+"em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
 "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
 "the requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
index baa3ac5..82c2230 100644 (file)
@@ -22,3 +22,9 @@ config internal ccache
        option enable 1
                
 config internal themes
+
+config internal apply
+       option rollback 30
+       option holdoff 4
+       option timeout 5
+       option display 1.5
index d083922..1d4d110 100644 (file)
@@ -36,6 +36,7 @@ config qos
 
 config system
        option init led
+       option exec '/etc/init.d/log reload'
        list affects luci_statistics
        list affects dhcp
 
diff --git a/modules/luci-base/root/etc/init.d/ucitrack b/modules/luci-base/root/etc/init.d/ucitrack
new file mode 100755 (executable)
index 0000000..27d34fa
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh /etc/rc.common
+
+START=80
+USE_PROCD=1
+
+register_init() {
+       local config="$1"
+       local init="$2"
+       shift; shift
+
+       if [ -x "$init" ] && "$init" enabled && ! grep -sqE 'USE_PROCD=.' "$init"; then
+               logger -t "ucitrack" "Setting up /etc/config/$config reload trigger for non-procd $init"
+               procd_add_config_trigger "config.change" "$config" "$init" "$@"
+       fi
+}
+
+register_trigger() {
+       local sid="$1"
+       local config init exec affects affected
+
+       config_get config "$sid" TYPE
+       config_get init "$sid" init
+       config_get exec "$sid" exec
+       config_get affects "$sid" affects
+
+       if [ -n "$init" ]; then
+               register_init "$config" "/etc/init.d/$init" "reload"
+       fi
+
+       if [ -n "$exec" ]; then
+               case "$exec" in
+                       /etc/init.d/*)
+                               set -- $exec
+                               register_init "$config" "$@"
+                       ;;
+                       *)
+                               logger -t "ucitrack" "Setting up non-init /etc/config/$config reload handler: $exec"
+                               procd_add_config_trigger "config.change" "$config" "$exec"
+                       ;;
+               esac
+       fi
+
+       for affected in $affects; do
+               logger -t "ucitrack" "Setting up /etc/config/$config reload dependency on /etc/config/$affected"
+               procd_add_config_trigger "config.change" "$affected" \
+                       ubus call service event \
+                       "$(printf '{"type":"config.change","data":{"package":"%s"}}' $config)"
+       done
+}
+
+service_triggers() {
+       config_foreach register_trigger
+}
+
+start_service() {
+       config_load ucitrack
+}
index 5478afa..6fcd66f 100644 (file)
@@ -27,7 +27,8 @@ function index()
                entry({"admin", "system", "fstab", "swap"},  cbi("admin_system/fstab/swap"),  nil).leaf = true
        end
 
-       if fs.access("/sys/class/leds") then
+       local nodes, number = fs.glob("/sys/class/leds/*")
+       if number > 0 then
                entry({"admin", "system", "leds"}, cbi("admin_system/leds"), _("<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"), 60)
        end
 
@@ -195,7 +196,7 @@ local function supports_sysupgrade()
 end
 
 local function supports_reset()
-       return (os.execute([[grep -sqE '"rootfs_data"|"ubi"' /proc/mtd]]) == 0)
+       return (os.execute([[grep -sq "^overlayfs:/overlay / overlay " /proc/mounts]]) == 0)
 end
 
 local function storage_size()
index ba317f9..9533ff5 100644 (file)
@@ -11,54 +11,91 @@ function index()
        entry({"admin", "uci"}, nil, _("Configuration"))
        entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir}
        entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir}
-       entry({"admin", "uci", "apply"}, post("action_apply"), _("Apply"), 20).query = {redir=redir}
-       entry({"admin", "uci", "saveapply"}, post("action_apply"), _("Save &#38; Apply"), 10).query = {redir=redir}
+
+       local node
+       local authen = function(checkpass, allowed_users)
+               return "root", luci.http.formvalue("sid")
+       end
+
+       node = entry({"admin", "uci", "apply_rollback"}, post("action_apply_rollback"), nil)
+       node.cors = true
+       node.sysauth_authenticator = authen
+
+       node = entry({"admin", "uci", "apply_unchecked"}, post("action_apply_unchecked"), nil)
+       node.cors = true
+       node.sysauth_authenticator = authen
+
+       node = entry({"admin", "uci", "confirm"}, post("action_confirm"), nil)
+       node.cors = true
+       node.sysauth_authenticator = authen
 end
 
+
 function action_changes()
-       local uci = luci.model.uci.cursor()
+       local uci  = require "luci.model.uci"
        local changes = uci:changes()
 
        luci.template.render("admin_uci/changes", {
-               changes = next(changes) and changes
+               changes  = next(changes) and changes,
+               timeout  = timeout
        })
 end
 
-function action_apply()
-       local path = luci.dispatcher.context.path
-       local uci = luci.model.uci.cursor()
+function action_revert()
+       local uci = require "luci.model.uci"
        local changes = uci:changes()
-       local reload = {}
 
-       -- Collect files to be applied and commit changes
+       -- Collect files to be reverted
+       local r, tbl
        for r, tbl in pairs(changes) do
-               table.insert(reload, r)
-               if path[#path] ~= "apply" then
-                       uci:load(r)
-                       uci:commit(r)
-                       uci:unload(r)
-               end
+               uci:revert(r)
        end
 
-       luci.template.render("admin_uci/apply", {
-               changes = next(changes) and changes,
-               configs = reload
+       luci.template.render("admin_uci/revert", {
+               changes = next(changes) and changes
        })
 end
 
 
-function action_revert()
-       local uci = luci.model.uci.cursor()
-       local changes = uci:changes()
+local function ubus_state_to_http(errstr)
+       local map = {
+               ["Invalid command"]   = 400,
+               ["Invalid argument"]  = 400,
+               ["Method not found"]  = 404,
+               ["Entry not found"]   = 404,
+               ["No data"]           = 204,
+               ["Permission denied"] = 403,
+               ["Timeout"]           = 504,
+               ["Not supported"]     = 500,
+               ["Unknown error"]     = 500,
+               ["Connection failed"] = 503
+       }
 
-       -- Collect files to be reverted
-       for r, tbl in pairs(changes) do
-               uci:load(r)
-               uci:revert(r)
-               uci:unload(r)
+       local code = map[errstr] or 200
+       local msg  = errstr      or "OK"
+
+       luci.http.status(code, msg)
+
+       if code ~= 204 then
+               luci.http.prepare_content("text/plain")
+               luci.http.write(msg)
        end
+end
 
-       luci.template.render("admin_uci/revert", {
-               changes = next(changes) and changes
-       })
+function action_apply_rollback()
+       local uci = require "luci.model.uci"
+       local _, errstr = uci:apply(true)
+       ubus_state_to_http(errstr)
+end
+
+function action_apply_unchecked()
+       local uci = require "luci.model.uci"
+       local _, errstr = uci:apply(false)
+       ubus_state_to_http(errstr)
+end
+
+function action_confirm()
+       local uci = require "luci.model.uci"
+       local _, errstr = uci:confirm()
+       ubus_state_to_http(errstr)
 end
index fbde431..855ed31 100644 (file)
@@ -270,7 +270,7 @@ s = m:section(TypedSection, "host", translate("Static Leases"),
                "DHCP clients. They are also required for non-dynamic interface configurations where " ..
                "only hosts with a corresponding lease are served.") .. "<br />" ..
        translate("Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</em> " ..
-               "indentifies the host, the <em>IPv4-Address</em> specifies the fixed address to " ..
+               "identifies the host, the <em>IPv4-Address</em> specifies the fixed address to " ..
                "use, and the <em>Hostname</em> is assigned as a symbolic name to the requesting host. " ..
                "The optional <em>Lease time</em> can be used to set non-standard host-specific " ..
                "lease time, e.g. 12h, 3d or infinite."))
@@ -297,6 +297,11 @@ mac = s:option(Value, "mac", translate("<abbr title=\"Media Access Control\">MAC
 mac.datatype = "list(macaddr)"
 mac.rmempty  = true
 
+function mac.cfgvalue(self, section)
+       local val = Value.cfgvalue(self, section)
+       return ipc.checkmac(val) or val
+end
+
 ip = s:option(Value, "ip", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
 ip.datatype = "or(ip4addr,'ignore')"
 
index 8e7a3b0..38e5de7 100644 (file)
@@ -272,6 +272,11 @@ if not net:is_virtual() then
                translate("Enables the Spanning Tree Protocol on this bridge"))
        stp:depends("type", "bridge")
        stp.rmempty = true
+
+       igmp = s:taboption("physical", Flag, "igmp_snooping", translate("Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> snooping"),
+               translate("Enables IGMP snooping on this bridge"))
+       igmp:depends("type", "bridge")
+       igmp.rmempty = true
 end
 
 
index a574d35..a3e28fe 100644 (file)
@@ -7,6 +7,17 @@ local ut = require "luci.util"
 local nt = require "luci.sys".net
 local fs = require "nixio.fs"
 
+local acct_port, acct_secret, acct_server, anonymous_identity, ant1, ant2,
+       auth, auth_port, auth_secret, auth_server, bssid, cacert, cacert2,
+       cc, ch, cipher, clientcert, clientcert2, ea, eaptype, en, encr,
+       ft_protocol, ft_psk_generate_local, hidden, htmode, identity,
+       ieee80211r, ieee80211w, ifname, ifsection, isolate, key_retries,
+       legacyrates, max_timeout, meshfwd, meshid, ml, mobility_domain, mode,
+       mp, nasid, network, password, pmk_r1_push, privkey, privkey2, privkeypwd,
+       privkeypwd2, r0_key_lifetime, r0kh, r1_key_holder, r1kh,
+       reassociation_deadline, retry_timeout, ssid, st, tp, wepkey, wepslot,
+       wmm, wpakey, wps
+
 arg[1] = arg[1] or ""
 
 m = Map("wireless", "",
@@ -19,8 +30,6 @@ m:chain("network")
 m:chain("firewall")
 m.redirect = luci.dispatcher.build_url("admin/network/wireless")
 
-local ifsection
-
 function m.on_commit(map)
        local wnet = nw:get_wifinet(arg[1])
        if ifsection and wnet then
@@ -40,38 +49,6 @@ if not wnet or not wdev then
        return
 end
 
--- wireless toggle was requested, commit and reload page
-function m.parse(map)
-       local new_cc = m:formvalue("cbid.wireless.%s.country" % wdev:name())
-       local old_cc = m:get(wdev:name(), "country")
-
-       if m:formvalue("cbid.wireless.%s.__toggle" % wdev:name()) then
-               if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
-                       wnet:set("disabled", nil)
-               else
-                       wnet:set("disabled", "1")
-               end
-               wdev:set("disabled", nil)
-
-               nw:commit("wireless")
-               luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null")
-
-               luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1]))
-               return
-       end
-
-       Map.parse(map)
-
-       if m:get(wdev:name(), "type") == "mac80211" and new_cc and new_cc ~= old_cc then
-               luci.sys.call("iw reg set %s" % ut.shellquote(new_cc))
-               luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1]))
-               return
-       end
-end
-
-m.title = luci.util.pcdata(wnet:get_i18n())
-
-
 local function txpower_list(iw)
        local list = iw.txpwrlist or { }
        local off  = tonumber(iw.txpower_offset) or 0
@@ -112,6 +89,57 @@ local hw_modes      = iw.hwmodelist or { }
 local tx_power_list = txpower_list(iw)
 local tx_power_cur  = txpower_current(wdev:get("txpower"), tx_power_list)
 
+-- wireless toggle was requested, commit and reload page
+function m.parse(map)
+       local new_cc = m:formvalue("cbid.wireless.%s.country" % wdev:name())
+       local old_cc = m:get(wdev:name(), "country")
+
+       if m:formvalue("cbid.wireless.%s.__toggle" % wdev:name()) then
+               if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
+                       wnet:set("disabled", nil)
+               else
+                       wnet:set("disabled", "1")
+               end
+               wdev:set("disabled", nil)
+               m.apply_needed = true
+               m.redirect = nil
+       end
+
+       Map.parse(map)
+
+       if m:get(wdev:name(), "type") == "mac80211" and new_cc and new_cc ~= old_cc then
+               luci.sys.call("iw reg set %s" % ut.shellquote(new_cc))
+
+               local old_ch = tonumber(m:formvalue("cbid.wireless.%s._mode_freq.channel" % wdev:name()) or "")
+               if old_ch then
+                       local _, c, new_ch
+                       for _, c in ipairs(iw.freqlist) do
+                               if c.channel > old_ch or (old_ch <= 14 and c.channel > 14) then
+                                       break
+                               end
+                               new_ch = c.channel
+                       end
+                       if new_ch ~= old_ch then
+                               wdev:set("channel", new_ch)
+                               m.message = translatef("Channel %d is not available in the %s regulatory domain and has been auto-adjusted to %d.",
+                                       old_ch, new_cc, new_ch)
+                       end
+               end
+       end
+
+       if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
+               en.title      = translate("Wireless network is disabled")
+               en.inputtitle = translate("Enable")
+               en.inputstyle = "apply"
+       else
+               en.title      = translate("Wireless network is enabled")
+               en.inputtitle = translate("Disable")
+               en.inputstyle = "reset"
+       end
+end
+
+m.title = luci.util.pcdata(wnet:get_i18n())
+
 s = m:section(NamedSection, wdev:name(), "wifi-device", translate("Device Configuration"))
 s.addremove = false
 
@@ -119,29 +147,12 @@ s:tab("general", translate("General Setup"))
 s:tab("macfilter", translate("MAC-Filter"))
 s:tab("advanced", translate("Advanced Settings"))
 
---[[
-back = s:option(DummyValue, "_overview", translate("Overview"))
-back.value = ""
-back.titleref = luci.dispatcher.build_url("admin", "network", "wireless")
-]]
-
 st = s:taboption("general", DummyValue, "__status", translate("Status"))
 st.template = "admin_network/wifi_status"
 st.ifname   = arg[1]
 
 en = s:taboption("general", Button, "__toggle")
 
-if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then
-       en.title      = translate("Wireless network is disabled")
-       en.inputtitle = translate("Enable")
-       en.inputstyle = "apply"
-else
-       en.title      = translate("Wireless network is enabled")
-       en.inputtitle = translate("Disable")
-       en.inputstyle = "reset"
-end
-
-
 local hwtype = wdev:get("type")
 
 -- NanoFoo
@@ -170,9 +181,7 @@ if found_sta then
                found_sta.channel or "(auto)", table.concat(found_sta.names, ", "))
 else
        ch = s:taboption("general", Value, "_mode_freq", '<br />'..translate("Operating frequency"))
-       ch.hwmodes = hw_modes
-       ch.htmodes = iw.htmodelist
-       ch.freqlist = iw.freqlist
+       ch.iwinfo = iw
        ch.template = "cbi/wireless_modefreq"
 
        function ch.cfgvalue(self, section)
@@ -1049,7 +1058,7 @@ if hwtype == "mac80211" then
                retry_timeout.rmempty = true
        end
 
-       local key_retries = s:taboption("encryption", Flag, "wpa_disable_eapol_key_retries",
+       key_retries = s:taboption("encryption", Flag, "wpa_disable_eapol_key_retries",
                translate("Enable key reinstallation (KRACK) countermeasures"),
                translate("Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load."))
 
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm
deleted file mode 100644 (file)
index 370027e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%+header%>
-
-<h2 name="content"><%:Configuration%> / <%:Apply%></h2>
-
-<% if changes then %>
-       <%+cbi/apply_xhr%>
-       <%+admin_uci/changelog%>
-
-       <%- cbi_apply_xhr('uci-apply', configs) -%>
-
-       <p><strong><%:The following changes have been committed%>:</strong></p>
-       <%- uci_changelog(changes) -%>
-<% else %>
-       <p><strong><%:There are no pending changes to apply!%></strong></p>
-<% end %>
-
-<%+footer%>
index 6e725c8..9e9ce2b 100644 (file)
@@ -1,40 +1,41 @@
 <%#
  Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
  Licensed to the public under the Apache License 2.0.
 -%>
 
 <%+header%>
 
+<%-
+       local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
+
+       include("cbi/apply_widget")
+       include("admin_uci/changelog")
+
+       cbi_apply_widget(redir_url or url("admin/uci/changes"))
+-%>
+
 <h2 name="content"><%:Configuration%> / <%:Changes%></h2>
 
 <% if changes then %>
-       <%+admin_uci/changelog%>
        <%- uci_changelog(changes) -%>
 <% else %>
        <p><strong><%:There are no pending changes!%></strong></p>
 <% end %>
 
+<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+
 <div class="cbi-page-actions">
-       <% local node, url = luci.dispatcher.lookup(luci.http.formvalue("redir")); if url then %>
+       <% if redir_url then %>
        <div style="float:left">
-               <form class="inline" method="get" action="<%=luci.util.pcdata(url)%>">
+               <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>">
                        <input class="cbi-button cbi-button-link" style="float:left; margin:0" type="submit" value="<%:Back%>" />
                </form>
        </div>
        <% end %>
 
        <div style="text-align:right">
-               <form class="inline" method="post" action="<%=controller%>/admin/uci/apply">
-                       <input type="hidden" name="token" value="<%=token%>" />
-                       <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
-                       <input class="cbi-button cbi-button-apply" type="submit" value="<%:Apply%>" />
-               </form>
-               <form class="inline" method="post" action="<%=controller%>/admin/uci/saveapply">
-                       <input type="hidden" name="token" value="<%=token%>" />
-                       <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
-                       <input class="cbi-button cbi-button-save" type="submit" value="<%:Save & Apply%>" />
-               </form>
+               <input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" />
                <form class="inline" method="post" action="<%=controller%>/admin/uci/revert">
                        <input type="hidden" name="token" value="<%=token%>" />
                        <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
index 20327ad..dff5342 100644 (file)
@@ -1,26 +1,39 @@
 <%#
  Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
  Licensed to the public under the Apache License 2.0.
 -%>
 
 <%+header%>
 
+<%-
+       local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
+
+       include("cbi/apply_widget")
+       include("admin_uci/changelog")
+
+       cbi_apply_widget(redir_url or url("admin/uci/revert"))
+-%>
+
 <h2 name="content"><%:Configuration%> / <%:Revert%></h2>
 
 <% if changes then %>
-       <%+cbi/apply_xhr%>
-       <%+admin_uci/changelog%>
-
        <p><strong><%:The following changes have been reverted%>:</strong></p>
        <%- uci_changelog(changes) -%>
 <% else %>
        <p><strong><%:There are no pending changes to revert!%></strong></p>
 <% end %>
 
-<% local node, url = luci.dispatcher.lookup(luci.http.formvalue("redir")); if url then %>
+<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+<script type="text/javascript">
+       document.addEventListener("DOMContentLoaded", function() {
+               uci_apply(true);
+       });
+</script>
+
+<% if redir_url then %>
        <div class="cbi-page-actions">
-               <form class="inline" method="get" action="<%=luci.util.pcdata(url)%>">
+               <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>">
                        <input class="cbi-button cbi-button-link" style="margin:0" type="submit" value="<%:Back%>" />
                </form>
        </div>
index 2fb64b3..ebb02e4 100644 (file)
@@ -1,9 +1,9 @@
 <%+cbi/valueheader%>
 
 <script type="text/javascript">//<![CDATA[
-       var freqlist = <%= luci.http.write_json(self.freqlist) %>;
-       var hwmodes  = <%= luci.http.write_json(self.hwmodes) %>;
-       var htmodes  = <%= luci.http.write_json(self.htmodes) %>;
+       var freqlist = <%= luci.http.write_json(self.iwinfo.freqlist) %>;
+       var hwmodes  = <%= luci.http.write_json(self.iwinfo.hwmodelist or {}) %>;
+       var htmodes  = <%= luci.http.write_json(self.iwinfo.htmodelist) %>;
 
        var channels = {
                '11g': [
index 43e5123..f9e882f 100644 (file)
@@ -45,7 +45,7 @@
                        if( time_remaining <= 0 )
                        {
                                window.clearInterval(interval);
-                               location.href = 'http://' + location.hostname + '/';
+                               location.href = 'http://' + location.host + '/';
                        }
                        else
                        {
index 3326d57..1e8038b 100644 (file)
@@ -2,18 +2,10 @@
 -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 -- Licensed to the public under the Apache License 2.0.
 
-local require = require
-local pairs = pairs
-local print = print
-local pcall = pcall
-local table = table
-local type = type
-local tonumber = tonumber
+module("luci.controller.rpc", package.seeall)
 
-module "luci.controller.rpc"
 
-
-local function session_retrieve(sid, allowed_users)
+function session_retrieve(sid, allowed_users)
        local util = require "luci.util"
        local sdat = util.ubus("session", "get", {
                ubus_rpc_session = sid
@@ -32,33 +24,39 @@ local function session_retrieve(sid, allowed_users)
        return nil
 end
 
-local function authenticator(validator, accs)
-       local auth = luci.http.formvalue("auth", true)
-               or luci.http.getcookie("sysauth")
+function authenticator(validator, accs)
+       local http = require "luci.http"
+       local ctrl = require "luci.controller.rpc"
+       local auth = http.formvalue("auth", true) or http.getcookie("sysauth")
 
        if auth then -- if authentication token was given
-               local sid, sdat = session_retrieve(auth, accs)
+               local sid, sdat = ctrl.session_retrieve(auth, accs)
                if sdat then -- if given token is valid
                        return sdat.username, sid
                end
-               luci.http.status(403, "Forbidden")
+               http.status(403, "Forbidden")
        end
 end
 
+
 function index()
+       local ctrl = require "luci.controller.rpc"
+
        local rpc = node("rpc")
        rpc.sysauth = "root"
-       rpc.sysauth_authenticator = authenticator
+       rpc.sysauth_authenticator = ctrl.authenticator
        rpc.notemplate = true
 
        entry({"rpc", "uci"}, call("rpc_uci"))
        entry({"rpc", "fs"}, call("rpc_fs"))
        entry({"rpc", "sys"}, call("rpc_sys"))
        entry({"rpc", "ipkg"}, call("rpc_ipkg"))
+       entry({"rpc", "ip"}, call("rpc_ip"))
        entry({"rpc", "auth"}, call("rpc_auth")).sysauth = false
 end
 
 function rpc_auth()
+       local ctrl    = require "luci.controller.rpc"
        local jsonrpc = require "luci.jsonrpc"
        local http    = require "luci.http"
        local sys     = require "luci.sys"
@@ -85,7 +83,7 @@ function rpc_auth()
                                }
                        })
 
-                       local sid, sdat = session_retrieve(login.ubus_rpc_session, { user })
+                       local sid, sdat = ctrl.session_retrieve(login.ubus_rpc_session, { user })
                        if sdat then
                                return {
                                        sid = sid,
@@ -168,13 +166,40 @@ function rpc_fs()
 end
 
 function rpc_sys()
+       local util    = require "luci.util"
        local sys     = require "luci.sys"
        local jsonrpc = require "luci.jsonrpc"
        local http    = require "luci.http"
        local ltn12   = require "luci.ltn12"
 
+       local sys2 = util.clone(sys)
+             sys2.net = util.clone(sys.net)
+             sys2.wifi = util.clone(sys.wifi)
+
+       function sys2.wifi.getiwinfo(ifname, operation)
+               local iw = sys.wifi.getiwinfo(ifname)
+               if iw then
+                       if operation then
+                               assert(type(iwinfo[iw.type][operation]) == "function")
+                               return iw[operation]
+                       end
+
+                       local n, f
+                       local rv = { ifname = ifname }
+                       for n, f in pairs(iwinfo[iw.type]) do
+                               if type(f) == "function" and
+                                  n ~= "scanlist" and n ~= "countrylist"
+                               then
+                                       rv[n] = iw[n]
+                               end
+                       end
+                       return rv
+               end
+               return nil
+       end
+
        http.prepare_content("application/json")
-       ltn12.pump.all(jsonrpc.handle(sys, http.source()), http.write)
+       ltn12.pump.all(jsonrpc.handle(sys2, http.source()), http.write)
 end
 
 function rpc_ipkg()
@@ -190,3 +215,34 @@ function rpc_ipkg()
        http.prepare_content("application/json")
        ltn12.pump.all(jsonrpc.handle(ipkg, http.source()), http.write)
 end
+
+function rpc_ip()
+       if not pcall(require, "luci.ip") then
+               luci.http.status(404, "Not Found")
+               return nil
+       end
+
+       local util    = require "luci.util"
+       local ip      = require "luci.ip"
+       local jsonrpc = require "luci.jsonrpc"
+       local http    = require "luci.http"
+       local ltn12   = require "luci.ltn12"
+
+       local ip2 = util.clone(ip)
+
+       local _, n
+       for _, n in ipairs({ "new", "IPv4", "IPv6", "MAC" }) do
+               ip2[n] = function(address, netmask, operation, argument)
+                       local cidr = ip[n](address, netmask)
+                       if cidr and operation then
+                               assert(type(cidr[operation]) == "function")
+                               local cidr2 = cidr[operation](cidr, argument)
+                               return (type(cidr2) == "userdata") and cidr2:string() or cidr2
+                       end
+                       return (type(cidr) == "userdata") and cidr:string() or cidr
+               end
+       end
+
+       http.prepare_content("application/json")
+       ltn12.pump.all(jsonrpc.handle(ip2, http.source()), http.write)
+end
index 506170c..604f019 100644 (file)
@@ -18,13 +18,13 @@ password = section:taboption("general", Value, "password", translate("PAP/CHAP p
 password.password = true
 
 if luci.model.network:has_ipv6() then
-
-        ipv6 = section:taboption("advanced", ListValue, "ipv6")
-        ipv6:value("auto", translate("Automatic"))
-        ipv6:value("0", translate("Disabled"))
-        ipv6:value("1", translate("Manual"))
-        ipv6.default = "auto"
-
+       ipv6 = section:taboption("advanced", ListValue, "ipv6",
+               translate("Obtain IPv6-Address"),
+               translate("Enable IPv6 negotiation on the PPP link"))
+       ipv6:value("auto", translate("Automatic"))
+       ipv6:value("0", translate("Disabled"))
+       ipv6:value("1", translate("Manual"))
+       ipv6.default = "auto"
 end
 
 defaultroute = section:taboption("advanced", Flag, "defaultroute",
index b14db59..355d9b5 100644 (file)
@@ -30,13 +30,13 @@ password.password = true
 
 
 if luci.model.network:has_ipv6() then
-
-        ipv6 = section:taboption("advanced", ListValue, "ipv6")
-        ipv6:value("auto", translate("Automatic"))
-        ipv6:value("0", translate("Disabled"))
-        ipv6:value("1", translate("Manual"))
-        ipv6.default = "auto"
-
+       ipv6 = section:taboption("advanced", ListValue, "ipv6",
+               translate("Obtain IPv6-Address"),
+               translate("Enable IPv6 negotiation on the PPP link"))
+       ipv6:value("auto", translate("Automatic"))
+       ipv6:value("0", translate("Disabled"))
+       ipv6:value("1", translate("Manual"))
+       ipv6.default = "auto"
 end
 
 
index 8f463e5..a5f76a3 100644 (file)
@@ -36,13 +36,13 @@ password.password = true
 
 
 if luci.model.network:has_ipv6() then
-
-        ipv6 = section:taboption("advanced", ListValue, "ipv6")
-        ipv6:value("auto", translate("Automatic"))
-        ipv6:value("0", translate("Disabled"))
-        ipv6:value("1", translate("Manual"))
-        ipv6.default = "auto"
-
+       ipv6 = section:taboption("advanced", ListValue, "ipv6",
+               translate("Obtain IPv6-Address"),
+               translate("Enable IPv6 negotiation on the PPP link"))
+       ipv6:value("auto", translate("Automatic"))
+       ipv6:value("0", translate("Disabled"))
+       ipv6:value("1", translate("Manual"))
+       ipv6.default = "auto"
 end
 
 
index 5a05cd2..d844c01 100644 (file)
@@ -30,13 +30,13 @@ service.placeholder = translate("auto")
 
 
 if luci.model.network:has_ipv6() then
-
-        ipv6 = section:taboption("advanced", ListValue, "ipv6")
-        ipv6:value("auto", translate("Automatic"))
-        ipv6:value("0", translate("Disabled"))
-        ipv6:value("1", translate("Manual"))
-        ipv6.default = "auto"
-
+       ipv6 = section:taboption("advanced", ListValue, "ipv6",
+               translate("Obtain IPv6-Address"),
+               translate("Enable IPv6 negotiation on the PPP link"))
+       ipv6:value("auto", translate("Automatic"))
+       ipv6:value("0", translate("Disabled"))
+       ipv6:value("1", translate("Manual"))
+       ipv6.default = "auto"
 end