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;
# 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>
/>
<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" -->
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 = {
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")
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
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))
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))
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")
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))
LUCI_TITLE:=LuCI Support for OpenVPN
LUCI_DEPENDS:=
+PKG_LICENSE:=Apache-2.0
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
--- /dev/null
+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 アカウント無しにフロントエンドを実行している場合、これを設定"
+"します。"
<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">
.. 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
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
<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%>"/>
"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"))
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
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"))
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"))
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"))
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"))
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
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))"
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")
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"))
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"),
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"
msgid "Downlink"
msgstr "Enllaç de baixada"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Habilita la funcionalitat NAT-PMP"
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"
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Povolit funkčnost NAT-PMP"
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"
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP Funktionalität aktivieren"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
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"
msgid "Downlink"
msgstr "Enlace para bajada"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Activar la funcionalidad NAT-PMP"
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 "
msgid "Downlink"
msgstr "Lien descendant"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Activer la fonctionnalité NAT-PMP"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
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 "
msgid "Downlink"
msgstr "Letöltés"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP funkció engedélyezése"
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"
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Abilita il protocollo NAT-PMP"
msgid "Advanced Settings"
msgstr "詳細設定"
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "要求元IPアドレスへの転送のみ、追加を許可します。"
msgid "Downlink"
msgstr "ダウンリンク"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP機能を有効にする"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
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"
msgid "Downlink"
msgstr "Nedlinje"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Aktiver NAT-PMP funksjonalitet"
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"
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Włącz funkcjonalność NAT-PMP"
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"
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"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr "Link para download"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
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"
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Activeaza functionalitatea NAT-PMP"
msgid "Advanced Settings"
msgstr "Дополнительные настройки"
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Разрешить перенаправление только для запрашивающих IP-адресов."
msgid "Downlink"
msgstr "Внутреннее соединение"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Включить NAT-PMP"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
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 ""
msgid "Downlink"
msgstr "Nerlänk"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Aktivera NAT-PMP-funktionalitet"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr ""
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
msgid "Advanced Settings"
msgstr "Додаткові параметри"
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Дозволити додавання переспрямування тільки для IP-адрес, що надсилають запити"
msgid "Downlink"
msgstr "Низхідний канал"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "Увімкнути функцію NAT-PMP"
msgid "Advanced Settings"
msgstr ""
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
msgid "Downlink"
msgstr "Downlink"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr ""
msgid "Advanced Settings"
msgstr "高级设置"
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "允许只向请求的 IP 地址添加转发"
msgid "Downlink"
msgstr "下行速率"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "启用 NAT-PMP 功能"
msgid "Advanced Settings"
msgstr "進階設定"
+msgid "Advertise as IGDv1 device instead of IGDv2"
+msgstr ""
+
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "只允許請求的IP位址新增從導機制"
msgid "Downlink"
msgstr "下載"
+msgid "Enable IGDv1 mode"
+msgstr ""
+
msgid "Enable NAT-PMP functionality"
msgstr "啓用蘋果NAT-PMP傳輸埠對應通訊協定功能"
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
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,
}
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) {
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);
}
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
+++ /dev/null
--- 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
(not allowed_users or
util.contains(allowed_users, sdat.values.username))
then
+ uci:set_session_id(sid)
return sid, sdat.values
end
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
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
res:render({
firstmap = (i == 1),
applymap = applymap,
+ confirmmap = (is_rollback and time_remaining or nil),
redirect = redirect,
messages = messages,
pageaction = pageaction,
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()
end
return true
- end)
+ end, HTTP_MAX_CONTENT)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
end
return true
- end)
+ end, HTTP_MAX_CONTENT)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
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
local os = require "os"
local util = require "luci.util"
+local conf = require "luci.config"
local table = require "table"
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)
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
]]
---[[
-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
]]
---[[
--- /dev/null
+<% 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) %>
+++ /dev/null
-<% 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) %>
<%- 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>
<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">
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>"
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"
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."
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>"
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"
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."
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"
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"
"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 ""
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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"
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"
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."
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>"
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"
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."
"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"
msgstr "ドメイン ホワイトリスト"
msgid "Don't Fragment"
-msgstr ""
+msgstr "非フラグメント化"
msgid ""
"Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
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>を有効にする"
msgstr "送信パケットのミラーリングを有効化"
msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "カプセル化されたパケットの DF (Don't Fragment) フラグを有効にします。"
msgid "Enable this mount"
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"
msgid "Install iputils-traceroute6 for IPv6 traceroute"
msgstr ""
+"IPv6 の traceroute を使用するには、 iputils-traceroute6 をインストールしま"
+"す。"
msgid "Install package %q"
msgstr "%q パッケージをインストールします"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
+"キャッシュされる DNS エントリーの数です。(最大 10000 件。 0の場合はキャッ"
+"シュしません)"
msgid "OK"
msgstr "OK"
msgstr "パケット"
msgid "Part of zone %q"
-msgstr "ゾーン %qの一部"
+msgstr "ゾーン %q の一部"
msgid "Password"
msgstr "パスワード"
msgstr "サイズ (.ipk)"
msgid "Size of DNS query cache"
-msgstr ""
+msgstr "DNS クエリ キャッシュのサイズ"
msgid "Skip"
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."
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> 활성화"
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"
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."
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>"
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"
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."
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>"
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"
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."
"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"
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)"
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.:"
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 ""
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>"
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>"
"<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 ""
msgstr ""
msgid "ADSL"
-msgstr ""
+msgstr "ADSL"
msgid "AICCU (SIXXS)"
msgstr ""
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)"
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"
msgstr "Dodatkowe pliki Hosts"
msgid "Additional servers file"
-msgstr ""
+msgstr "Dodatkowe pliki serwera"
msgid "Address"
msgstr "Adres"
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>"
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"
"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"
msgstr ""
msgid "Always announce default router"
-msgstr ""
+msgstr "Zawsze rozgłaszaj domyślny router"
msgid "Annex"
msgstr ""
msgid "Authentication Type"
msgstr ""
-# Nawet M$ tego nie tłumaczy;)
msgid "Authoritative"
msgstr "Autorytatywny"
"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 ""
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 "
"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"
msgstr "Poziom logowania Cron`a"
msgid "Custom Interface"
-msgstr "Interfejs Niestandardowy"
+msgstr "Interfejs niestandardowy"
msgid "Custom delegated IPv6-prefix"
msgstr ""
"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."
msgstr "Dzierżawy DHCPv6"
msgid "DHCPv6 client"
-msgstr ""
+msgstr "Klient DHCPv6"
msgid "DHCPv6-Mode"
msgstr ""
msgstr ""
msgid "DSL"
-msgstr ""
+msgstr "DSL"
msgid "DSL Status"
-msgstr ""
+msgstr "Status DSL"
msgid "DSL line mode"
msgstr ""
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"
"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"
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>"
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"
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"
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"
msgstr "Switch Ethernet"
msgid "Exclude interfaces"
-msgstr ""
+msgstr "Wyklucz interfejsy"
msgid "Expand hosts"
msgstr "Rozwiń hosty"
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 ""
msgid "Firewall Mark"
msgstr ""
-# Nie ma potrzeby pisania z dużej litery
msgid "Firewall Settings"
msgstr "Ustawienia firewalla"
msgstr "Wymuś TKIP i CCMP (AES)"
msgid "Force link"
-msgstr ""
+msgstr "Wymuś połączenie"
msgid "Force use of NAT-T"
msgstr ""
msgstr ""
msgid "Generate Config"
-msgstr ""
+msgstr "Wygeneruj konfigurację"
msgid "Generate PMK locally"
-msgstr ""
+msgstr "Wygeneruj PMK lokalnie"
msgid "Generate archive"
msgstr "Twórz archiwum"
msgstr ""
msgid "Guest"
-msgstr ""
+msgstr "Gość"
msgid "HE.net password"
msgstr "Hasło HE.net"
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"
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"
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."
msgstr "Niewłaściwy login i/lub hasło! Spróbuj ponownie."
msgid "Isolate Clients"
-msgstr ""
+msgstr "Izoluj klientów"
#, fuzzy
msgid ""
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"
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"
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 ""
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 ""
msgstr "Ładowanie"
msgid "Local IP address to assign"
-msgstr ""
+msgstr "Lokalny adres IP do przypisania"
msgid "Local IPv4 address"
msgstr "Lokalny adres IPv4"
msgstr "MB/s"
msgid "MD5"
-msgstr ""
+msgstr "MD5"
msgid "MHz"
msgstr "MHz"
"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 ""
msgstr "Tryb"
msgid "Model"
-msgstr ""
+msgstr "Model"
msgid "Modem device"
msgstr "Modem"
msgstr ""
msgid "NCM"
-msgstr ""
+msgstr "NCM"
msgid "NDP-Proxy"
msgstr ""
msgstr "Szum"
msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Margines szumów (SNR)"
msgid "Noise:"
msgstr "Szum:"
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 ""
msgstr ""
msgid "Operating frequency"
-msgstr ""
+msgstr "Częstotliwość"
msgid "Option changed"
msgstr "Wartość zmieniona"
msgstr "Usunięto wartość"
msgid "Optional"
-msgstr ""
+msgstr "Opcjonalny"
msgid "Optional, specify to override default server (tic.sixxs.net)"
msgstr ""
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"
msgstr "PIN"
msgid "PMK R1 Push"
-msgstr ""
+msgstr "PMK R1 Push"
msgid "PPP"
msgstr "PPP"
msgstr "PPPoE"
msgid "PPPoSSH"
-msgstr ""
+msgstr "PPPoSSH"
msgid "PPtP"
msgstr "PPtP"
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!"
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:"
msgstr "Status portu:"
msgid "Power Management Mode"
-msgstr ""
+msgstr "Tryb zarządzania energią"
msgid "Pre-emtive CRC errors (CRCP_P)"
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"
msgstr "Procesy"
msgid "Profile"
-msgstr ""
+msgstr "Profil"
msgid "Prot."
msgstr "Prot."
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"
msgstr "Pseudo Ad-Hoc (ahdemo)"
msgid "Public Key"
-msgstr ""
+msgstr "Klucz publiczny"
msgid "Public prefix routed to this device for distribution to clients."
msgstr ""
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ę"
msgstr "Zdalny adres IPv4"
msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "Zdalny adres IPv4 lub FQDN"
msgid "Remove"
msgstr "Usuń"
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"
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 ""
"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"
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ć!"
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 ""
"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 ""
msgstr "Trigger"
msgid "Trigger Mode"
-msgstr "Tryb Trigger"
+msgstr "Rodzaj Triggeru"
msgid "Tunnel ID"
msgstr "Numer identyfikacyjny tunelu"
msgstr ""
msgid "Tunnel type"
-msgstr ""
+msgstr "Typ tunelu"
msgid "Tx-Power"
msgstr "Moc nadawania"
msgstr "Urządzenie USB"
msgid "USB Ports"
-msgstr ""
+msgstr "Porty USB"
msgid "UUID"
msgstr "UUID"
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"
"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..."
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"
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."
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"
msgstr "VC-Mux"
msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
msgid "VLANs on %q"
msgstr "Sieci VLAN na %q"
msgstr "Serwer VPN"
msgid "VPN Server port"
-msgstr ""
+msgstr "Port serwera VPN"
msgid "VPN Server's certificate SHA1 hash"
msgstr ""
msgstr ""
msgid "Vendor"
-msgstr ""
+msgstr "Producent"
msgid "Vendor Class to send when requesting DHCP"
msgstr "Klasa producenta do wysłania podczas żądania DHCP"
"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..."
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 "
msgstr ""
msgid "Width"
-msgstr ""
+msgstr "Szerokość"
msgid "WireGuard VPN"
msgstr ""
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 "
"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"
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"
msgstr "wyłącz"
msgid "disabled"
-msgstr ""
+msgstr "wyłączony"
msgid "expired"
msgstr "wygasły"
msgstr "ukryty"
msgid "hybrid mode"
-msgstr ""
+msgstr "tryb hybrydowy"
msgid "if target is a network"
msgstr "jeżeli celem jest sieć"
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"
msgstr "żaden"
msgid "not present"
-msgstr ""
+msgstr "nieobecny"
msgid "off"
msgstr "wyłączone"
msgstr ""
msgid "random"
-msgstr ""
+msgstr "losowy"
msgid "relay mode"
msgstr ""
msgstr "routowane"
msgid "server mode"
-msgstr ""
+msgstr "tryb serwera"
msgid "stateful-only"
msgstr ""
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"
msgstr "nieokreślone -lub- utwórz:"
msgid "untagged"
-msgstr "nietagowane"
+msgstr "nieotagowane"
msgid "yes"
msgstr "tak"
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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 ""
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"
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."
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>"
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"
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."
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 ""
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"
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."
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 ""
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"
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
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>"
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"
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."
option enable 1
config internal themes
+
+config internal apply
+ option rollback 30
+ option holdoff 4
+ option timeout 5
+ option display 1.5
config system
option init led
+ option exec '/etc/init.d/log reload'
list affects luci_statistics
list affects dhcp
--- /dev/null
+#!/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
+}
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
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()
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 & 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
"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."))
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')"
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
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", "",
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
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
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
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
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)
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."))
+++ /dev/null
-<%#
- 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%>
<%#
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"))%>" />
<%#
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>
<%+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': [
if( time_remaining <= 0 )
{
window.clearInterval(interval);
- location.href = 'http://' + location.hostname + '/';
+ location.href = 'http://' + location.host + '/';
}
else
{
-- 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
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"
}
})
- 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,
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()
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
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",
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
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
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