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 3b361558eee5834d6a68acc754a334bb2284a90e..4285f25cb20dd17c1d52139c6639bee36dc7d5a0 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 06dbefbcfd3c29932202db22fc53d76f17933f20..bd6ddeb1b354c4f260b3d87e303c6f3da9ecd72e 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 23ec0591708499f31d0641517fc5b601308c044f..3cbb66b4bf4cb4336fe4170be7896c9c18747c2e 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 7553504572bbf4cbe577e19e6960269586472464..a42c1499f09f59a138ebd47d2b4d24998e3b3ffa 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 d5fc4a3edefcdd0f9fbafddce64840b266815ecd..18c2135e4385443cf3941572db70dafe09c69bc2 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 a439502671e4a0a413ffd5bba3de21fabdd82d4a..a6570e341cebb18381409de0f4056f92e64c3c9f 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 a8070fd3feb087214e6c1f9001c13e1267ae59e3..380ee73a6dcc22dbd123848ec6e00da7bffef7fa 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 45fe60cc80f182a480816d1a9d1ccbffd4093906..2b526a31d7e93d2725b76ef2b23b35b2baf8f4c4 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 7b6b9658ca5447afe9d4e3539910c8bd57a21735..a1dcbc638ce18166123dc779336a16019c779db1 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 1dacb6e24b6e062a597c74ca21a668fc73115323..f76b52e9cca52b1ddbb44b0fce92e1b94d1fb53c 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 c92e379957307fa603a658a4e73456af353bf7e9..bf2b65a0a1e1a61ee3e8ef4895c69c676b003c73 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 74b9d1d033e8584035942c727c1d1e2b6b011215..a2023926e060fd2651fe943d5c7d7b5b474e6f74 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 2767ade5b165993baa7c6478e1e9cf77017c9731..398c87ecb65ee27993107135a95394f4f6280258 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 bfc97cca5223660bb71ff0c4b510cf122316d657..adb4d19ab1eb691bdd2dbedf0e0ede5c0b43508b 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 46aa42ffe35d2f6a575af3da8b4a9caeccd4dc80..bdafbf1054452efaee35452921089f11bf0cdd76 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 79a02a487ac6625c692e707a6ecde458600abf14..c02b0ce29a39783e4de809d5f7281650889cac7e 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 450e62a7c91b5311f7ee249c8543031aa279f3d4..eae23a13a02e99e92504fc64464c425a9b37fa0c 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 8c26b3cf5e2169e996606fb3baf95413511042cb..6c9c262607adb72f9a4b7ceb24c21173073d0c69 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 1f3f8635bdb113031704806e5b090e2a0d322ac8..f8b2a8536a397d6997e36a76993454d054f28c0f 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 5b01f31b84d4bd4ca33e0aa299d1ab67fd869e8d..387444f152e557db2883c9ebe7eee238aec89b70 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 9f64e5a18af2a10f7989b44517349499e69b77b3..21bc7b59c040c74ecec04fb1f615b44fde2fb920 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 2eb4a44044615a7eceaabd116f38af1c7ef797ed..8e498c34b0b1ac5280f8e06d7843abc5b5b98186 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 fe2dd64566aa60606b97b9453b2cc199ecf553ba..4e6f879dc0c15b6e1135cdcd66f06d5e9ecdf592 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 62d4d5aec484d3b91e46c065853524b3b2332b5e..834d6546abdfe87c23fbc661aad91f8da0697a73 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 dc9daba1ba8f54750ec2438421328b8d86603f15..f313b42ee917c4f5b6e9406c1854044cfd3245b6 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 0afabe326f1b5c5e09a292e77ef56d6c7050a8cd..fb1f0a4bddfa185566062c296f6e671df9f544ec 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 72741d26c99025158c49b1dde50da009b8488b76..705bbde617da059ecdc4551518dc0bee9c520496 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 415a72b08233e7c020e3cfd0aaa8ff1f173c28d3..e1ee340e30596da6a78a827e09d745b78e5625f7 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 d5e5c79932dd290ce57e51d4808e88e2e4f122ed..8525279d005b03a64d9f4e713bbac77f68d5ef10 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 80953578bec8d95da0a502131b4ebc20b8689ba6..878f83eafb4044283469ac479cabf21935ee68bb 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 ccd256c715468a22c545c98664b0e0438a0fe687..81ded2220f9fa1fa74f7a4216fe9f88a9c416194 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 10fef558ea927974c75b261425380acbe8a04938..c2d1c6b0bf38535591cb633e04efe86bce9dd4c6 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 dda0e7ea3c4387226a015e657616f65aa4ffa776..e3b1f1a26c9e107f28d4ae3579764a64f1546da5 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 1bcd2b73abe5134056e517216673ee03cf2c3221..2a997a79b03980f0669298ac73d26340e5b2b664 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 746fd3e8819b52880c5a1e1e0a01b6619b327456..8f43ae371ad0ed00938f559c6d64cb8b3345f035 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 d27720d2af6fe59913996dfc04d0801deefa55fb..c933777478df99055e2767f83f40f8ef642b50da 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 894de1c260c75ae1c163013406315d9bc6eeb1f8..588ad2cf191e4812b48bbeb434777348fdff422c 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 338a6629e212d2f1b39189d82a88a982e5f1dca4..57edb9e4602998d2cd2ac28b68790a958f2975c7 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 f1926a8e324493dffa14fcdbad0b7f61ae80c04c..408994435a4c2e9cefaa3f5c18e8695bc2d7ef6d 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 f7b57f916c1e7c7d62a30dd62a1fa5e52ee4c7b5..6d4d752b19809fe6a841d924a5cabf1b215da52b 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 91dcf3fefeb838246f6c1b5b5de0372e40f90408..de4476cdd32412a7bbf45e8c507a5f8025820acc 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 21843950394081c1e0959038be660b28e628ba4f..4728642118c5d3794a3b5f9d7f25389bcf5c8743 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 1984fc4ad2c84b1b5de701ddc1e9a078296647b4..45e1e308f8f6ddebddbc7ee7534e1f677443d9e6 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 16fb04c549890f8c3acd63dc8dc7f397685f903a..f4ede4b8a5771ea3b7eacb301993f09d1ddee912 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 dfe818bcc72e7d840d7df906d44c2e04a2a1c293..0f58c16848630faec67b477b671cefc50d6807b6 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 fc2a605b342d2019b9e63648986f33af5416720f..34323f08bd1d8657e6b130e82d5c22f7d4d830e9 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 ef89d09b9e1940162515678a2b41713e89a8fb98..d798b00338a5585f6afd36dee81f67d54c084773 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 4d332fd07a36bd27fced6dcd76475f90a96c2447..e6acfb0697c043df477c50dcb95239dbf34beff8 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 e3210add634ea0659f4cfcc8bc851ff9b1254e4f..69ef3615a28665925cd84946e86da6ec140fd488 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 c413b7172df591a9c89152cf9586c6418ae86f25..b08344b404cd6fee2ab92897e96bf8f7388c543e 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 89714cc818f380526597ce774fcd11ae124ea412..aa4144758b6704908dfafceb1919caed28733148 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 fd495b9507ac59154731a3d692d8f62e9f61b41d..574ddf184a4bf9b6f6c9d8d0c561afe5f16a0cc4 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 ad5ed07fb9bcacd5cfaf2ee301e305bb4a6ba5d1..f746db32a4a521b3ef9f1b787f86dddfeb85308c 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 f62913595068baa239d446617f623d0aaa7a0b69..50a7c928156f903a6d2a9faa7f7188084024e6ff 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 776f7fb15c7f1ff6143280f1ee62298e281ae589..8aed2e9ee3501d78685ca40f1c05b93e6dcead4b 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 9de1687204c29f87cd0c8f26b1e2af43ff80690f..e09343815dfe5a57d52f49b50fde14481b718e86 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 8d5daf389074b4bb2c6b1a079b6fd0de442e2f94..cb4c74a3f625e540b2c2976661d8b5d7fa4363c9 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 5e2ea2b176f510fdec953db8af754e5724c3f541..e49b5303f065269b014795849ac9e98b8a4744d4 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 6b55e23e2234504b9b56f6baaf4f21670f0abbd8..ce866d9e7b609f56316b7531434a687636310dae 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 b643e8cf5b8ba468d7c7a6a372386a817dff44ba..07eeec5ee3d6fba083f7f8a2feb96e0e43fd9e45 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 04d3c6a23a9b6f91a7908258d9d2dca4697e1cae..e4f77c78f59d80ce2ab84240c9324bcfcd5a3ed9 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 b478bd623b530e90904dc90c35025749e6b06187..d5c889580b0c74842eb0da56a189d30ea4a74e4d 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 502c3b38a8dcd6b975e153a279a1d6cacf1acd21..1805d8e990c81564fa113a3a2bd27d0d04a9200d 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 956e566e9137c7b0f1470064f0c74c67b22a83c3..390e489e29ffc3e232dc53b238ba33600eda3b8f 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 9c4901f3d4a1500b7838fe14cb3df2d272c8e485..a51d11d2a5bf183278500df222da16eb5c5863b9 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 8f2622c26de8caa9c5a9ef35c6bc292ab0076d29..843a4cac86e4923d482cbc77cf947411b2c9bbc6 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 86eaa6495d00c81fb09007581a0f0e3fbf2dfc9d..748bfdbc5390ee6739b06fab029929aa663a6348 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 4ffb7233c2ca69f14f1b80601db621ec663ddf79..35a697620ed832fbe9e9ad04cb832b19947638b0 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 a17ac98e20735f05b0661a82a449b9d6c39c91ef..acc57792b3f8493f193ac4b1f7eddd777ebf9f2f 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 089546a37d4635c42886c4999411c054b845327c..632ea6f74512274eb8920054b3dc8b3accb4c8c3 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 de8b7fb22c664b8c6339a3584eb404e102a8ac47..ddf2e56faa264171f87dcab777d6c557de3ca7c5 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 45f4a7c342e3e615f2633434e9363dfd1985cdec..953d1e9669ad1aecd908e941d40ab7f7cd156460 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 b1feed3d181df5617a35c620e81a620d071efb42..8ead61607418c3004c432f418dd3e38609bd9dd9 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 ecb369e13eda6f6ca4a3e00e989699dd4589b733..888fc92bfebfd73c6f8245279ac2a36c64948e4d 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 c76511b99185d5a3257999625710037255892cf4..df6ce8b7465556de07b009b9b515ee225561f91d 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 28a806e8396f9957867b69645a53df3348e718b4..edc5207bd9da5f99024311c2f8046161d71c18e4 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 baa3ac5d1e3d164cc6986a75f272ddba5ffb267f..82c2230e55ad9294987c758fa4b141652d1fbeca 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 d083922955a319bd9f6b66fd6e785a7f4c9f7aed..1d4d110f2a9c2563239ed450eeb634ae52a9c44f 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 5478afa3e6e2eab107459fb6f79e95dc9c185859..6fcd66f44107e4ecdbcd167c630b4db6a6d31326 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 ba317f9f4ffd5100b6604cd54b08ae9eb34bca9c..9533ff5e6ea3d89bab823e1a7f3368df42c226ca 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 fbde431df8df7c5a67773adbd4ef43600095130e..855ed31f100b5f6456e7a05e6e5f2aaccb7b755f 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 8e7a3b06678adf874246948f953fac5ffc273d8b..38e5de7b39be75fad648db060b61c50c93917ac9 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 a574d359795ba7d0b6b68876f90d3ed38653c1a1..a3e28fe58977a013dba665d19365817f85681ddf 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 6e725c88887ffe820a6dbe32927d392cc32a10cb..9e9ce2be2ae03070efd96c79f3b32d3df06c3b38 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 20327adff377e42da281553d6272647bd3a7f414..dff53420aad919abc89bbc646c507b1f8b589da5 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 2fb64b3c420254ccded1487a8e41419a2a8f8bcc..ebb02e489b6d6403be89263eca09f889870f1d1d 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 43e51236d7bd00d60265ca7508b234b36367ab9a..f9e882ff304f8a4aaf660cf8a56a5f26e556a34e 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 3326d57a956907462781dbac35ebe4b72d88e23e..1e8038b28af803336bc62338a97b1e8ca414ac08 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 506170c2de395f9e21b258083a2d674e1e8ced15..604f019ee61e61eb4e91fb06d4b8efa012caf0ae 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 b14db5966d0da5bd83494f7cf56c0b5136c5725b..355d9b5b399259d695c8c56db813de0591847103 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 8f463e5d76a2cc203dce32ef4493de18576d5fd6..a5f76a38ad4164d2fc8dfbd7ac63f08c0196773e 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 5a05cd20656c2ffb0edaf3cf58e2bdb7a737e8ec..d844c01db0c6b2419a036af96e69a15d3388770b 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