diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index 030e4829d..e5c6ecc8c 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.8.1
-PKG_RELEASE:=208
+PKG_RELEASE:=209
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
index 7d4282414..fec29453a 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
@@ -49,24 +49,16 @@ m.uci:foreach(appname, "socks", function(s)
end
end)
+
local dynamicList_write = function(self, section, value)
- local t = {}
- local t2 = {}
+ local new_t = {}
if type(value) == "table" then
- local x
- for _, x in ipairs(value) do
- if x and #x > 0 then
- if not t2[x] then
- t2[x] = x
- t[#t+1] = x
- end
- end
- end
+ new_t = api.table_remove_duplicates(value)
else
- t = { value }
+ new_t = { value }
end
- t = table.concat(t, " ")
- return DynamicList.write(self, section, t)
+ local new_val = table.concat(new_t, " ")
+ return DynamicList.write(self, section, new_val)
end
-- [[ ACLs Settings ]]--
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index c1ba96ff5..1cc2b2689 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -373,22 +373,13 @@ if api.is_finded("smartdns") then
return m:get(section, self.option) or {"tcp://1.1.1.1"}
end
function o.write(self, section, value)
- local t = {}
- local t2 = {}
+ local new_t = {}
if type(value) == "table" then
- local x
- for _, x in ipairs(value) do
- if x and #x > 0 then
- if not t2[x] then
- t2[x] = x
- t[#t+1] = x
- end
- end
- end
+ new_t = api.table_remove_duplicates(value)
else
- t = { value }
+ new_t = { value }
end
- return DynamicList.write(self, section, t)
+ return DynamicList.write(self, section, new_t)
end
end
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
index 8ae6a0e60..a02db5f6b 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
@@ -165,23 +165,14 @@ source.validate = function(self, value, t)
end
local dynamicList_write = function(self, section, value)
- local t = {}
- local t2 = {}
+ local new_t = {}
if type(value) == "table" then
- local x
- for _, x in ipairs(value) do
- if x and #x > 0 then
- if not t2[x] then
- t2[x] = x
- t[#t+1] = x
- end
- end
- end
+ new_t = api.table_remove_duplicates(value)
else
- t = { value }
+ new_t = { value }
end
- t = table.concat(t, " ")
- return DynamicList.write(self, section, t)
+ local new_val = table.concat(new_t, " ")
+ return DynamicList.write(self, section, new_val)
end
source.write = dynamicList_write
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
index b3efefdb1..ee7a72bcd 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
@@ -216,23 +216,14 @@ o:depends({ [_n("reality")] = true })
o = s:option(DynamicList, _n("reality_serverNames"), translate("serverNames"))
o:depends({ [_n("reality")] = true })
-function o.write(self, section, value)
- local t = {}
- local t2 = {}
+function o.custom_write(self, section, value)
+ local new_t = {}
if type(value) == "table" then
- local x
- for _, x in ipairs(value) do
- if x and #x > 0 then
- if not t2[x] then
- t2[x] = x
- t[#t+1] = x
- end
- end
- end
+ new_t = api.table_remove_duplicates(value)
else
- t = { value }
+ new_t = { value }
end
- return DynamicList.write(self, section, t)
+ m:set(section, self.option:sub(1 + #option_prefix), new_t)
end
o = s:option(ListValue, _n("alpn"), translate("alpn"))
diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua
index 6dc1b1528..d026127d4 100644
--- a/luci-app-passwall/luasrc/passwall/api.lua
+++ b/luci-app-passwall/luasrc/passwall/api.lua
@@ -1874,3 +1874,20 @@ function get_network_devices()
table.sort(_devices, function(a, b) return a.sort < b.sort end)
return _devices
end
+
+
+function table_remove_duplicates(t)
+ if not t or #t == 0 then return nil end
+ local t_lookup = {}
+ local new_t = {}
+ local x
+ for _, x in ipairs(t) do
+ if x and #x > 0 then
+ if not t_lookup[x] then
+ t_lookup[x] = x
+ new_t[#new_t+1] = x
+ end
+ end
+ end
+ return new_t
+end
diff --git a/luci-app-upnp/Makefile b/luci-app-upnp/Makefile
index 6b91e069b..649c5deec 100644
--- a/luci-app-upnp/Makefile
+++ b/luci-app-upnp/Makefile
@@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
-LUCI_TITLE:=UPnP IGD & PCP/NAT-PMP configuration module | Universal Plug and Play
+LUCI_TITLE:=LuCI support for UPnP IGD & PCP/NAT-PMP service | originally: Universal Plug and Play
LUCI_DEPENDS:=+luci-base +miniupnpd +rpcd-mod-ucode
PKG_LICENSE:=Apache-2.0
diff --git a/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js b/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js
index c82a10823..7d06b2a56 100644
--- a/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js
+++ b/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js
@@ -70,15 +70,19 @@ return baseclass.extend({
rule.proto,
expires_str,
'%h'.format(rule.descr),
- E('button', {
+ rule.num != '0' ? E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num),
'title': _('Delete')
+ }, [_('Delete')]) : E('button', {
+ 'class': 'btn cbi-button-remove',
+ 'title': _('Not yet deletable; UPnP IGDv2 IPv6 port maps expire sooner, have no description'),
+ 'style': 'cursor: not-allowed'
}, [_('Delete')])
];
});
- cbi_update_table(table, rows, E('em', _('There are no active port maps.')));
+ cbi_update_table(table, rows, E('em', _('There are no active IPv4/IPv6 port maps')));
return table;
}
diff --git a/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js b/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js
index e1eb76926..68de0e56a 100644
--- a/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js
+++ b/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js
@@ -6,6 +6,7 @@
'require ui';
'require rpc';
'require form';
+'require tools.widgets as widgets';
const callInitAction = rpc.declare({
object: 'luci',
@@ -67,15 +68,19 @@ return view.extend({
rule.proto,
expires_str,
'%h'.format(rule.descr),
- E('button', {
+ rule.num != '0' ? E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num),
'title': _('Delete')
+ }, [_('Delete')]) : E('button', {
+ 'class': 'btn cbi-button-remove',
+ 'title': _('Not yet deletable; UPnP IGDv2 IPv6 port maps expire sooner, have no description'),
+ 'style': 'cursor: not-allowed'
}, [_('Delete')])
];
});
- cbi_update_table(nodes.querySelector('#upnp_status_table'), rows, E('em', _('There are no active port maps.')));
+ cbi_update_table(nodes.querySelector('#upnp_status_table'), rows, E('em', _('There are no active IPv4/IPv6 port maps')));
},
render: function(data) {
@@ -87,19 +92,20 @@ return view.extend({
'PCP',
'NAT-PMP');
m = new form.Map('upnpd', _('UPnP IGD & PCP/NAT-PMP Service'),
- _('The %s protocols allow clients on the local network to configure port maps/forwards on the router autonomously.',
- 'The %s (%s = UPnP IGD & PCP/NAT-PMP) protocols allow clients on the local network to configure port maps/forwards on the router autonomously.')
+ _('The %s protocols/service enable permitted devices on local networks to autonomously set up IPv4/IPv6 port maps/forwards on this router.',
+ 'The %s (%s = UPnP IGD & PCP/NAT-PMP) protocols/service enable permitted devices on local networks to autonomously set up IPv4/IPv6 port maps/forwards on this router.')
.format(protocols)
);
- if (!uci.get('upnpd', 'config')) {
+ if (!uci.get('upnpd', 'settings')) {
ui.addNotification(null, E('div', '
' + _('No suitable configuration was found!') + '
' +
- _('No suitable config (LuCI app %s) found in %s. A related package update (daemon or LuCI app) may be missing.').format('v1.0', '/etc/config/upnpd') + '
' +
+ _('No suitable config (LuCI app %s) found in %s. A related package update (daemon or LuCI app) may be missing.').format('v2.0', '/etc/config/upnpd') + '
' +
_('Use the software package manager, update lists, and install the related update. Config is migrated with the daemon package update.') + '
' +
'' + _('Go to package manager…') + ''), 'warning');
m.readonly = true;
}
s = m.section(form.GridSection, '_active_rules');
+ s.disable = uci.get('upnpd', 'settings', 'enabled') == '0';
s.render = L.bind(function(view, section_id) {
const table = E('table', { 'class': 'table cbi-section-table', 'id': 'upnp_status_table' }, [
@@ -124,156 +130,264 @@ return view.extend({
rule.intport,
rule.extport,
rule.proto,
- rule.descr,
- E('button', {
+ '', // expires
+ '%h'.format(rule.descr),
+ rule.num != '0' ? E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num),
'title': _('Delete')
+ }, [_('Delete')]) : E('button', {
+ 'class': 'btn cbi-button-remove',
+ 'title': _('Not yet deletable; UPnP IGDv2 IPv6 port maps expire sooner, have no description'),
+ 'style': 'cursor: not-allowed'
}, [_('Delete')])
];
});
- cbi_update_table(table, rows, E('em', _('There are no active port maps.')));
+ cbi_update_table(table, rows, E('em', _('There are no active IPv4/IPv6 port maps')));
return E('div', { 'class': 'cbi-section cbi-tblsection' }, [
E('h3', _('Active Port Maps')), table
]);
}, o, this);
- s = m.section(form.NamedSection, 'config', 'upnpd', _('Service Settings'));
+ s = m.section(form.NamedSection, 'settings', 'upnpd', _('Service Settings'));
s.addremove = false;
s.tab('setup', _('Service Setup'));
+ s.tab('access_control', _('Access Control'));
s.tab('advanced', _('Advanced Settings'));
+ s.tab('igd', _('UPnP IGD Adjustments'));
o = s.taboption('setup', form.Flag, 'enabled', _('Enable service'),
_('Enable the autonomous port mapping service'));
o.rmempty = false;
- o = s.taboption('setup', form.Flag, 'enable_upnp', _('Enable UPnP IGD protocol'));
- o.default = '1';
+ o = s.taboption('setup', form.ListValue, 'enable_protocols', _('Enable protocols'));
+ o.value('all', _('All protocols'));
+ o.value('upnp-igd', _('UPnP IGD'));
+ o.value('pcp+nat-pmp', _('PCP and NAT-PMP'));
+ o.default = 'all';
+ o.widget = 'radio';
- o = s.taboption('setup', form.Flag, 'enable_natpmp', _('Enable PCP/NAT-PMP protocols'));
- o.default = '1';
-
- o = s.taboption('setup', form.Flag, 'igdv1', _('UPnP IGDv1 compatibility mode'),
- _('Advertise as IGDv1 (IPv4 only) device instead of IGDv2'));
- o.default = '1';
+ o = s.taboption('setup', widgets.NetworkSelect, 'internal_iface', _('Enable networks'),
+ _('Select local/internal (LAN) network interfaces to enable the service for'));
+ o.nocreate = true;
+ o.multiple = true;
o.rmempty = false;
- o.depends('enable_upnp', '1');
+ o.filter = function(section_id, value) {
+ return (value == 'wan' || value == 'wan6') ? '' : value;
+ };
+ o.write = function(section_id, formvalue) {
+ uci.set('upnpd', section_id, 'internal_iface', Array.isArray(formvalue) ? formvalue.join(' ') : formvalue);
+ };
+
+ o = s.taboption('setup', form.ListValue, 'upnp_igd_compat', _('UPnP IGD compatibility'),
+ _('Set compatibility mode (act as device) to workaround IGDv2-incompatible clients; %s are known to only work with %s (or)
Emulate/report a specific/different device to workaround/support/handle/bypass/assist/mitigate... (Alternative text welcome)').format('Sony PS, Activision CoD…', 'IGDv1'));
+ o.value('igdv1', _('IGDv1 (IPv4 only)'));
+ o.value('igdv2', _('IGDv2 (with workarounds)'));
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
o.retain = true;
- o = s.taboption('setup', form.Value, 'download', _('Download speed'),
- _('Report maximum download speed in kByte/s'));
- o.depends('enable_upnp', '1');
- o.retain = true;
+ o = s.taboption('access_control', form.ListValue, 'access_defaults', _('Access defaults'),
+ _('Set access control defaults for ports that all devices can map'));
+ o.value('', _('None / accept extra ports only'));
+ o.value('accept-high-ports', _('Accept ports >= 1024'));
+ o.value('accept-web+high-ports', _('Accept HTTP/HTTPS + ports >= 1024'));
+ o.value('accept-web-ports', _('Accept HTTP/HTTPS ports'));
+ o.value('accept-all-ports', _('Accept all ports'));
- o = s.taboption('setup', form.Value, 'upload', _('Upload speed'),
- _('Report maximum upload speed in kByte/s'));
- o.depends('enable_upnp', '1');
- o.retain = true;
+ o = s.taboption('access_control', form.Value, 'accept_ports', _('Accept extra ports'));
+ o.datatype = 'list(portrange)';
- s.taboption('advanced', form.Flag, 'use_stun', _('Use %s', 'Use %s (%s = STUN)')
- .format('STUN'),
- _('To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs'));
+ o = s.taboption('access_control', form.Value, 'reject_ports', _('Reject ports'),
+ _('Reject unsafe/insecure/risky FTP/Telnet/DCE/NetBIOS/SMB/RDP ports by default; overrides other settings; use %s for none').format('0'));
+ o.datatype = 'list(portrange)';
+ o.placeholder = '21 23 135 137-139 445 3389';
+ o.modalonly = true;
- o = s.taboption('advanced', form.Value, 'stun_host', _('STUN host'));
- o.datatype = 'host';
- o.depends('use_stun', '1');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'stun_port', _('STUN port'));
- o.datatype = 'port';
- o.placeholder = '3478';
- o.depends('use_stun', '1');
- o.retain = true;
-
- s.taboption('advanced', form.Flag, 'force_forwarding', _('Force forwarding'),
- _('Force forwarding ports even the network is behind NAT'));
-
- o = s.taboption('advanced', form.Flag, 'secure_mode', _('Enable secure mode'),
- _('Allow adding port maps for requesting IP addresses only'));
+ o = s.taboption('access_control', form.Flag, 'check_acl', _('Check ACL'),
+ _('Extend or override access defaults by device-specific permissions using the access control list (ACL)') + '
' +
+ _('Sequence:') + ' 1. ' + _('Reject ports') + ', 2. ' + _('ACL entries (if checked)') + ', 3. ' + _('Access defaults') + ', 4. ' + _('Accept extra ports'));
o.default = '1';
- o.depends('enable_upnp', '1');
+ o.onchange = function(ev, section_id, value) {
+ let acl = document.getElementById('cbi-upnpd-acl_entry');
+ value == 0 ? acl.style.display = 'none' : acl.style.display = 'block';
+ };
+
+ s.taboption('access_control', form.Flag, 'ipv6_disable', _('Disable IPv6 mapping'),
+ _('IPv6 is currently always accepted unless disabled'));
+
+ o = s.taboption('advanced', form.RichListValue, 'allow_cgnat', _('Allow %s/%s', 'Allow %s/%s (%s = CGNAT, %s = STUN)')
+ .format('CGNAT',
+ 'STUN'),
+ _('Allow use of unrestricted endpoint-independent (1:1) CGNATs and detect the public IPv4'));
+ o.value('', _('Disabled'), _('Manually override external IPv4 with public'));
+ o.value('1', _('Enabled'), _('Filtering test currently requires an extra firewall rule'));
+ o.value('allow-filtered', _('Enabled') + ' (' + _('allow filtered') + ')', _('Workaround filtered IPv4 CGNAT test result'));
+ o.value('report-private-ipv4', _('Disabled') + ' (' + _('report private IPv4, avoid') + ')', _('No STUN public IPv4 detection; client issues'));
+ o.optional = true;
+
+ o = s.taboption('advanced', form.Value, 'stun_host', _('STUN server'));
+ o.datatype = 'or(hostname,hostport,ip4addr("nomask"))';
+ o.placeholder = 'stun.nextcloud.com';
+ o.depends('allow_cgnat', '1');
+ o.depends('allow_cgnat', 'allow-filtered');
o.retain = true;
- s.taboption('advanced', form.Flag, 'ipv6_disable', _('Disable IPv6 mapping'));
+ o = s.taboption('advanced', form.Value, 'external_ip', _('Override external IPv4'),
+ _('Report custom public/external (WAN) IPv4 address'));
+ o.datatype = 'ip4addr("nomask")';
+ o.depends('allow_cgnat', '');
+ o.depends('allow_cgnat', 'report-private-ipv4');
- o = s.taboption('advanced', form.Value, 'notify_interval', _('Notify interval'),
- _('A 900 s interval sends %s announcements with the minimum %s header',
- 'A 900 s interval sends %s (%s = SSDP) announcements with the minimum %s (%s = Cache-Control: max-age=1800) header')
- .format('SSDP', 'Cache-Control: max-age=1800'));
- o.datatype = 'min(900)';
- o.placeholder = '900';
- o.depends('enable_upnp', '1');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'port', _('SOAP/HTTP port'));
- o.datatype = 'port';
- o.placeholder = '5000';
- o.depends('enable_upnp', '1');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'presentation_url', _('Router/presentation URL'),
- _('Report custom router web interface URL'));
- o.placeholder = 'http://192.168.1.1/';
- o.depends('enable_upnp', '1');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'uuid', _('Device UUID'));
- // o.depends('enable_upnp', '1');
- o.depends('keep-translation', 'to-disable-as-rare-use');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'model_number', _('Announced model number'));
- o.depends('enable_upnp', '1');
- o.retain = true;
-
- o = s.taboption('advanced', form.Value, 'serial_number', _('Announced serial number'));
- o.depends('enable_upnp', '1');
- o.retain = true;
+ o = s.taboption('advanced', form.ListValue, 'allow_third_party_mapping', _('Allow third-party mapping'),
+ _('Allow adding port maps for non-requesting IP addresses; use with care'));
+ o.value('', _('Disabled') + ' (' + _('recommended') + ')');
+ o.value('1', _('Enabled'));
+ o.value('upnp-igd', _('Enabled') + ' (' + _('UPnP IGD only') + ')');
+ o.value('pcp', _('Enabled') + ' (' + _('PCP only') + ')');
o = s.taboption('advanced', form.Flag, 'system_uptime', _('Report system instead of service uptime'));
o.default = '1';
o.depends('keep-translation', 'to-disable-as-rare-use');
o.retain = true;
- s.taboption('advanced', form.Flag, 'log_output', _('Enable additional logging'),
- _('Puts extra debugging information into the system log'));
+ o = s.taboption('advanced', form.ListValue, 'log_output', _('Log level'));
+ o.value('default', _('Default'));
+ o.value('info', _('Info'));
+ o.value('debug', _('Debug'));
+ o.default = 'default';
+ o.widget = 'radio';
- o = s.taboption('advanced', form.Value, 'upnp_lease_file', _('Service lease file'));
+ o = s.taboption('advanced', form.Value, 'lease_file', _('Service lease file'));
o.depends('keep-translation', 'to-disable-as-rare-use');
o.retain = true;
- s = m.section(form.GridSection, 'perm_rule', _('Service Access Control List'),
- _('ACL specify which client addresses and ports can be mapped, IPv6 always allowed.'));
+ o = s.taboption('igd', form.Value, 'download_kbps', _('Download speed'),
+ _('Report maximum connection speed in kbit/s'));
+ o.datatype = 'uinteger';
+ o.placeholder = _('Default interface link speed');
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'upload_kbps', _('Upload speed'),
+ _('Report maximum connection speed in kbit/s'));
+ o.datatype = 'uinteger';
+ o.placeholder = _('Default interface link speed');
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'friendly_name', _('Router/friendly name'));
+ o.placeholder = 'OpenWrt UPnP IGD & PCP';
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'model_number', _('Announced model number'));
+ // o.depends('enable_protocols', 'upnp-igd');
+ // o.depends('enable_protocols', 'all');
+ o.depends('keep-translation', 'to-disable-as-rare-use');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'serial_number', _('Announced serial number'));
+ // o.depends('enable_protocols', 'upnp-igd');
+ // o.depends('enable_protocols', 'all');
+ o.depends('keep-translation', 'to-disable-as-rare-use');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'presentation_url', _('Router/presentation URL'),
+ _('Report custom router web interface URL'));
+ o.placeholder = 'http://192.168.1.1/';
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'uuid', _('Device UUID'));
+ // o.depends('enable_protocols', 'upnp-igd');
+ // o.depends('enable_protocols', 'all');
+ o.depends('keep-translation', 'to-disable-as-rare-use');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'http_port', _('SOAP/HTTP port'));
+ o.datatype = 'port';
+ o.placeholder = '5000';
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ o = s.taboption('igd', form.Value, 'notify_interval', _('Notify interval'),
+ _('A 900 s interval sends %s announcements with the minimum %s header',
+ 'A 900 s interval sends %s (%s = SSDP) announcements with the minimum %s (%s = Cache-Control: max-age=1800) header')
+ .format('SSDP', 'Cache-Control: max-age=1800'));
+ o.datatype = 'min(900)';
+ o.placeholder = '900';
+ o.depends('enable_protocols', 'upnp-igd');
+ o.depends('enable_protocols', 'all');
+ o.retain = true;
+
+ s = m.section(form.GridSection, 'acl_entry', '' + _('Access Control List') + '
',
+ _('The access control list (ACL) specifies which IP addresses and ports can be mapped.') + ' ' +
+ _('ACL entries are checked in order, then rejected if not matched and not accepted by access defaults. (To do: should be part of access control tab)'));
s.anonymous = true;
s.addremove = true;
+ s.cloneable = true;
s.sortable = true;
+ s.modaltitle = _('UPnP IGD & PCP/NAT-PMP') + ' - ' + _('Edit ACL Entry');
+ // To do: ACL part of access control tab and hide (or dependency on option) instead of disable as immediately, and to not break onchange function
+ s.disable = uci.get('upnpd', 'settings', 'check_acl') == '0';
- s.option(form.Value, 'comment', _('Comment'));
+ o = s.option(form.Value, 'comment', _('Comment'));
+ o.default = _('unspecified');
o = s.option(form.Value, 'int_addr', _('IP address'));
o.datatype = 'ip4addr';
- o.placeholder = '0.0.0.0/0';
+ o.rmempty = false;
+ o.editable = true;
+ o.retain = true;
+ o.modalonly = false;
- o = s.option(form.Value, 'int_ports', _('Port'));
- o.datatype = 'portrange';
- o.placeholder = '1-65535';
+ o = s.option(form.Value, 'int_addr', _('IP address'),
+ _('Enter device\'s IPv4 address, or an address with netmask'));
+ o.datatype = 'ip4addr';
+ o.rmempty = false;
+ o.retain = true;
+ o.modalonly = true;
- o = s.option(form.Value, 'ext_ports', _('External port'));
+ o = s.option(form.Value, 'int_port', _('Port'));
o.datatype = 'portrange';
- o.placeholder = '1-65535';
+ o.placeholder = '1-65535 (' + _('any port') + ')';
+ o.editable = true;
+ o.retain = true;
+
+ o = s.option(form.Value, 'ext_port', _('External port'));
+ o.datatype = 'portrange';
+ o.placeholder = '1-65535 (' + _('any port') + ')';
+ o.editable = true;
+ o.retain = true;
+
+ o = s.option(form.Value, 'descr_filter', _('Description filter'),
+ _('Regular expression to check description of UPnP IGD IPv4 port maps'));
+ o.placeholder = '.* (' + _('any description') + ')';
+ o.modalonly = true;
o = s.option(form.ListValue, 'action', _('Action'));
- o.value('allow', _('Allow'));
- o.value('deny', _('Deny'));
+ o.value('accept', _('Accept'));
+ o.value('reject', _('Reject'));
+ o.value('disabled', _('Disabled'));
+ o.editable = true;
+ o.retain = true;
return m.render().then(L.bind(function(m, nodes) {
- poll.add(L.bind(function() {
- return Promise.all([
- callUpnpGetStatus()
- ]).then(L.bind(this.poll_status, this, nodes));
- }, this), 5);
+ if (uci.get('upnpd', 'settings', 'enabled') != '0') {
+ poll.add(L.bind(function() {
+ return Promise.all([
+ callUpnpGetStatus()
+ ]).then(L.bind(this.poll_status, this, nodes));
+ }, this), 5);
+ }
return nodes;
}, this, m));
}
diff --git a/luci-app-upnp/po/ar/upnp.po b/luci-app-upnp/po/ar/upnp.po
index 09561891e..8a0a43ef2 100644
--- a/luci-app-upnp/po/ar/upnp.po
+++ b/luci-app-upnp/po/ar/upnp.po
@@ -15,7 +15,7 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.17.1-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,13 +24,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "إجراء"
@@ -46,29 +46,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "الإعدادات المتقدمة"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -79,11 +83,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "تعليق"
@@ -93,7 +97,7 @@ msgstr "تعليق"
msgid "Delete"
msgstr "احدف"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -102,11 +106,11 @@ msgstr ""
msgid "Description"
msgstr "الوصف"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "سرعة التنزيل"
@@ -118,11 +122,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -133,7 +141,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -141,11 +149,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -154,39 +162,39 @@ msgstr ""
msgid "Protocol"
msgstr "البروتوكول"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "المنفذ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -198,7 +206,7 @@ msgstr ""
msgid "Service Setup"
msgstr "الاعدادات العامة"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -225,7 +233,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -238,7 +246,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -248,11 +256,11 @@ msgstr ""
msgid "Unknown"
msgstr "مجهول"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "سرعة الرفع"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/az/upnp.po b/luci-app-upnp/po/az/upnp.po
new file mode 100644
index 000000000..4c033267f
--- /dev/null
+++ b/luci-app-upnp/po/az/upnp.po
@@ -0,0 +1,258 @@
+msgid ""
+msgstr ""
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: az\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
+msgctxt ""
+"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
+"max-age of 1800s"
+msgid ""
+"A 900s interval will result in %s notifications with the minimum max-age of "
+"1800s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
+msgid ""
+"ACL specify which client addresses and ports can be mapped, IPv6 always "
+"allowed."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
+msgid "Action"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:129
+msgid "Active Service Port Maps"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:29
+msgid "Active UPnP IGD & PCP/NAT-PMP Port Maps"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:135
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
+msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
+msgid "Allow"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
+msgid "Allow adding port maps for requesting IP addresses only"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+msgid "Announced serial number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
+msgid "Client Address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:40
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:98
+msgid "Client Name"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
+msgid "Client Port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
+msgid "Comment"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:76
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:72
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:122
+msgid "Delete"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
+msgid "Deny"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:104
+msgid "Description"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+msgid "Device UUID"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
+msgid "Download speed"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:144
+msgid "Enable PCP/NAT-PMP protocols"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:141
+msgid "Enable UPnP IGD protocol"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+msgid "Enable additional logging"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
+msgid "Enable secure mode"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:103
+msgid "Expires"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
+msgid "External Port"
+msgstr ""
+
+#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
+msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
+msgid "Notify interval"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
+msgid "Presentation URL"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:102
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
+msgid "Puts extra debugging information into the system log"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
+msgid "Report custom router web interface (presentation) URL"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+msgid "Report maximum download speed in kByte/s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+msgid "Report maximum upload speed in kByte/s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
+msgid "Report system instead of service uptime"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
+msgid "SOAP/HTTP port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
+msgid "STUN host"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
+msgid "STUN port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
+msgid "Service Access Control List"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:132
+msgid "Service Settings"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
+msgid "Service Setup"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+msgid "Service lease file"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:138
+msgid "Start autonomous port mapping service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
+msgid "Start service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
+msgctxt ""
+"The %s (%s = UPnP IGD & PCP/NAT-PMP) protocols allow clients on the local "
+"network to configure port maps/forwards on the router autonomously."
+msgid ""
+"The %s protocols allow clients on the local network to configure port maps/"
+"forwards on the router autonomously."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:80
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:126
+msgid "There are no active port maps."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
+msgid ""
+"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
+msgstr ""
+
+#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
+msgid "UPnP IGD & PCP"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
+msgid "UPnP IGD & PCP/NAT-PMP Service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
+msgid "UPnP IGDv1 compatibility mode"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
+msgid "Upload speed"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
+msgctxt "Use %s (%s = STUN)"
+msgid "Use %s"
+msgstr ""
diff --git a/luci-app-upnp/po/be/upnp.po b/luci-app-upnp/po/be/upnp.po
new file mode 100644
index 000000000..83d26d796
--- /dev/null
+++ b/luci-app-upnp/po/be/upnp.po
@@ -0,0 +1,259 @@
+msgid ""
+msgstr ""
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: be\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
+msgctxt ""
+"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
+"max-age of 1800s"
+msgid ""
+"A 900s interval will result in %s notifications with the minimum max-age of "
+"1800s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
+msgid ""
+"ACL specify which client addresses and ports can be mapped, IPv6 always "
+"allowed."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
+msgid "Action"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:129
+msgid "Active Service Port Maps"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:29
+msgid "Active UPnP IGD & PCP/NAT-PMP Port Maps"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:135
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
+msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
+msgid "Allow"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
+msgid "Allow adding port maps for requesting IP addresses only"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+msgid "Announced serial number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
+msgid "Client Address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:40
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:98
+msgid "Client Name"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
+msgid "Client Port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
+msgid "Comment"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:76
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:72
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:122
+msgid "Delete"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
+msgid "Deny"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:104
+msgid "Description"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+msgid "Device UUID"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
+msgid "Download speed"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:144
+msgid "Enable PCP/NAT-PMP protocols"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:141
+msgid "Enable UPnP IGD protocol"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+msgid "Enable additional logging"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
+msgid "Enable secure mode"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:103
+msgid "Expires"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
+msgid "External Port"
+msgstr ""
+
+#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
+msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
+msgid "Notify interval"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
+msgid "Presentation URL"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:102
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
+msgid "Puts extra debugging information into the system log"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
+msgid "Report custom router web interface (presentation) URL"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+msgid "Report maximum download speed in kByte/s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+msgid "Report maximum upload speed in kByte/s"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
+msgid "Report system instead of service uptime"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
+msgid "SOAP/HTTP port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
+msgid "STUN host"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
+msgid "STUN port"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
+msgid "Service Access Control List"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:132
+msgid "Service Settings"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
+msgid "Service Setup"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+msgid "Service lease file"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:138
+msgid "Start autonomous port mapping service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
+msgid "Start service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
+msgctxt ""
+"The %s (%s = UPnP IGD & PCP/NAT-PMP) protocols allow clients on the local "
+"network to configure port maps/forwards on the router autonomously."
+msgid ""
+"The %s protocols allow clients on the local network to configure port maps/"
+"forwards on the router autonomously."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:80
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:126
+msgid "There are no active port maps."
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
+msgid ""
+"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
+msgstr ""
+
+#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
+msgid "UPnP IGD & PCP"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
+msgid "UPnP IGD & PCP/NAT-PMP Service"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
+msgid "UPnP IGDv1 compatibility mode"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
+msgid "Upload speed"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
+msgctxt "Use %s (%s = STUN)"
+msgid "Use %s"
+msgstr ""
diff --git a/luci-app-upnp/po/bg/upnp.po b/luci-app-upnp/po/bg/upnp.po
index d0a404035..be411ecb9 100644
--- a/luci-app-upnp/po/bg/upnp.po
+++ b/luci-app-upnp/po/bg/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgid ""
"1800s"
msgstr "Интервал от 900s ще доведе до %s известия с минимален max-age от 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -31,7 +31,7 @@ msgstr ""
"ACL указва кои клиентски адреси и портове могат да бъдат съпоставяни; IPv6 "
"винаги е разрешен."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Действие"
@@ -47,29 +47,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Разширени настройки"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -80,11 +84,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Коментар"
@@ -94,7 +98,7 @@ msgstr "Коментар"
msgid "Delete"
msgstr "Изтрий"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -103,11 +107,11 @@ msgstr ""
msgid "Description"
msgstr "Описание"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Скорост на теглене"
@@ -119,11 +123,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -134,7 +142,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -142,11 +150,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -155,39 +163,39 @@ msgstr ""
msgid "Protocol"
msgstr "Протокол"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Порт"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -199,7 +207,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Общи настройки"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -226,7 +234,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -239,7 +247,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -249,11 +257,11 @@ msgstr ""
msgid "Unknown"
msgstr "Неизвестно"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Скорост на качване"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/bn_BD/upnp.po b/luci-app-upnp/po/bn_BD/upnp.po
index 833c9a1a8..85a6259c5 100644
--- a/luci-app-upnp/po/bn_BD/upnp.po
+++ b/luci-app-upnp/po/bn_BD/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.11-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,13 +23,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr ""
@@ -45,29 +45,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "উন্নত সেটিংস"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -78,11 +82,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr ""
@@ -92,7 +96,7 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -101,11 +105,11 @@ msgstr ""
msgid "Description"
msgstr "বর্ণনা"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -117,11 +121,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "এক্সটার্নাল পোর্ট"
@@ -140,11 +148,11 @@ msgstr "এক্সটার্নাল পোর্ট"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -153,39 +161,39 @@ msgstr ""
msgid "Protocol"
msgstr "প্রোটোকল"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "পোর্ট"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -197,7 +205,7 @@ msgstr ""
msgid "Service Setup"
msgstr "সাধারণ সেটিংস"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -247,11 +255,11 @@ msgstr ""
msgid "Unknown"
msgstr "অজানা"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/ca/upnp.po b/luci-app-upnp/po/ca/upnp.po
index 2ff340b72..0c27ed46e 100644
--- a/luci-app-upnp/po/ca/upnp.po
+++ b/luci-app-upnp/po/ca/upnp.po
@@ -15,7 +15,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,7 +24,7 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"Els ACL especifiquen quins ports externs es poden redirigir a quines adreces "
"i ports interns, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Acció"
@@ -48,29 +48,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Configuració Avançada"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Permet que s'afegeixin redireccions només a les adreces IP peticionant"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Número de model anunciat"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Número de sèrie anunciat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adreça de client"
@@ -81,11 +85,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port de client"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Commentari"
@@ -95,7 +99,7 @@ msgstr "Commentari"
msgid "Delete"
msgstr "Suprimeix"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -104,11 +108,11 @@ msgstr ""
msgid "Description"
msgstr "Descripció"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID de dispositiu"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Enllaç de baixada"
@@ -120,11 +124,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Habilita el registre addicional"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Habilita mode segur"
@@ -135,7 +143,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Port extern"
@@ -143,11 +151,11 @@ msgstr "Port extern"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Interval de notificació"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -156,39 +164,39 @@ msgstr ""
msgid "Protocol"
msgstr "Protocol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Posa informació extra de depuració en el registre de sistema"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Informa del temps d'activitat del sistema en lloc del servei"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "port SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -200,7 +208,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Paràmetres generals"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "No hi ha redireccions actives."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr "UPnP IGD i PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Servei UPnP IGD, PCP i NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -251,11 +259,11 @@ msgstr ""
msgid "Unknown"
msgstr "Desconegut"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Enllaç de pujada"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/cs/upnp.po b/luci-app-upnp/po/cs/upnp.po
index 8c2ba1876..0758b4829 100644
--- a/luci-app-upnp/po/cs/upnp.po
+++ b/luci-app-upnp/po/cs/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 2026.5.dev0\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Interval 900s bude mít za následek %s upozornění s minimální max-age 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -30,7 +30,7 @@ msgstr ""
"ACL stanovují, které vnější porty by měly být přesměrovány na které vnitřní "
"adresy a porty, IPv6 je povoleno vždy."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Akce"
@@ -46,29 +46,33 @@ msgstr "Aktivní UPnP IGD a PCP/NAT-PMP mapy portů"
msgid "Advanced Settings"
msgstr "Pokročilá nastavení"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Inzerovat jako IGDv1 (pouze IPv4) zařízení namísto IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Umožnit"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Umožnit přidávání map portů pouze pro požadující IP adresy"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Umožnit IPv4 z rozsahu pro soukromé sítě"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Oznámené číslo modelu"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Oznámené sériové číslo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adresa klienta"
@@ -79,11 +83,11 @@ msgstr "Název klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port klienta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Komentář"
@@ -93,7 +97,7 @@ msgstr "Komentář"
msgid "Delete"
msgstr "Smazat"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Odepřít"
@@ -102,11 +106,11 @@ msgstr "Odepřít"
msgid "Description"
msgstr "Popis"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID zařízení"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Rychlost příjmu"
@@ -118,11 +122,16 @@ msgstr "Zapnout protokoly PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Zapnout protokol UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Zapnout rozšířené zaznamenávání událostí"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+"Zapnout předávání na IPv4 adresy vyhrazené / z rozsahů pro soukromé sítě"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Zapnout zabezpečený režim"
@@ -133,7 +142,7 @@ msgstr "Platnost skončí"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Vnější port"
@@ -141,11 +150,11 @@ msgstr "Vnější port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Udělit přístup k UPnP IGD a PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Interval oznamování"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Prezentační URL"
@@ -154,39 +163,39 @@ msgstr "Prezentační URL"
msgid "Protocol"
msgstr "Protokol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Vypisovat extra ladící informace do systémového záznamu událostí"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "Hlásit URL uživatelsky určené webové rozhraní směrovače (prezentace)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Hlásit nejvyšší umožněnou rychlost stahování (v kB/s)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Hlásit nejvyšší umožněnou rychlost odesílání (v kB/s)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Hlásit dobu chodu systému namísto doby chodu služby"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN hostitel"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Seznam řízení přístupu ke službě"
@@ -198,7 +207,7 @@ msgstr "Nastavení služby"
msgid "Service Setup"
msgstr "Nastavení služby"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Soubor se zápůjčkami služby"
@@ -225,7 +234,7 @@ msgstr "%s umožňuje klientům v místní síti automaticky nastavovat směrova
msgid "There are no active port maps."
msgstr "Neexistují žádná aktivní přesměrování."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -240,7 +249,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Služba UPnP IGD a PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Povolit režim UPnP IGDv1"
@@ -250,11 +259,11 @@ msgstr "Povolit režim UPnP IGDv1"
msgid "Unknown"
msgstr "Neznámý"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Rychlost odesílání"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Použít %s"
diff --git a/luci-app-upnp/po/da/upnp.po b/luci-app-upnp/po/da/upnp.po
index c7ec9da2d..f163f7042 100644
--- a/luci-app-upnp/po/da/upnp.po
+++ b/luci-app-upnp/po/da/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9.1-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -31,7 +31,7 @@ msgstr ""
"ACL'er angiver, hvilke eksterne porte der kan omdirigeres til hvilke interne "
"adresser og porte, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Handling"
@@ -47,29 +47,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Avancerede indstillinger"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Annoncerer som IGDv1-enhed i stedet for IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Tillad kun at tilføje viderestillinger til IP-adresser, der anmoder om"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Annonceret modelnummer"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Annonceret serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Klient adresse"
@@ -80,11 +84,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Klient port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Kommentar"
@@ -94,7 +98,7 @@ msgstr "Kommentar"
msgid "Delete"
msgstr "Slet"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -103,11 +107,11 @@ msgstr ""
msgid "Description"
msgstr "Beskrivelse"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Enhedens UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Download speed"
@@ -119,11 +123,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Aktiver yderligere logning"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Aktiver sikker tilstand"
@@ -134,7 +142,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Ekstern port"
@@ -142,11 +150,11 @@ msgstr "Ekstern port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Underretningsinterval"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL til præsentation"
@@ -155,39 +163,39 @@ msgstr "URL til præsentation"
msgid "Protocol"
msgstr "Protokol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Sætter ekstra fejlfindingsoplysninger i systemloggen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Rapportere system i stedet for dæmonens oppetid"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN vært"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -199,7 +207,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Generelle indstillinger"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Der er ingen aktive omdirigeringer."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Aktiver UPnP IGDv1-tilstand"
@@ -251,11 +259,11 @@ msgstr "Aktiver UPnP IGDv1-tilstand"
msgid "Unknown"
msgstr "Ukendt"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Upload speed"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Brug %s"
diff --git a/luci-app-upnp/po/de/upnp.po b/luci-app-upnp/po/de/upnp.po
index c1d75f6cb..f3ed2d3cc 100644
--- a/luci-app-upnp/po/de/upnp.po
+++ b/luci-app-upnp/po/de/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"Ein Intervall von 900 Sekunden führt zu SSDP-Benachrichtigungen mit dem "
"minimalen Maximalalter von 1800 Sekunden"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"ACL definieren, welche externen Ports zu welchen internen Adressen und Ports "
"weitergeleitet werden dürfen, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Aktion"
@@ -49,29 +49,33 @@ msgstr "Aktive UPnP IGD & PCP/NAT-PMP Portzuweisungen"
msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Als IGDv1-Gerät anstelle von IGDv2 bekanntgeben"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Erlauben"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Nur Weiterleitungen zurück zum anfordernden Client zulassen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Private IPv4 erlauben"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Angekündigte Modellnummer"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Angekündigte Seriennummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Clientadresse"
@@ -82,11 +86,11 @@ msgstr "Gerätename"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Clientport"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Kommentar"
@@ -96,7 +100,7 @@ msgstr "Kommentar"
msgid "Delete"
msgstr "Löschen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Ablehnen"
@@ -105,11 +109,11 @@ msgstr "Ablehnen"
msgid "Description"
msgstr "Beschreibung"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Geräte-UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Download-Geschwindigkeit"
@@ -121,11 +125,15 @@ msgstr "Protokolle PCP/NAT-PMP aktivieren"
msgid "Enable UPnP IGD protocol"
msgstr "UPnP IGD-Protokoll aktivieren"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Erweiterte Protokollierung aktivieren"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Weiterleitung für private/reservierte IPv4-Adresse aktivieren"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Sicheren Modus aktivieren"
@@ -136,7 +144,7 @@ msgstr "Läuft ab"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Externer Port"
@@ -144,11 +152,11 @@ msgstr "Externer Port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Zugriff zu UPnP IGD & PCP/NAT-PMP gewähren"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Benachrichtigungsintervall"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Präsentations-URL"
@@ -157,40 +165,40 @@ msgstr "Präsentations-URL"
msgid "Protocol"
msgstr "Protokoll"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Schreibt zusätzliche Debug-Informationen in das Systemprotokoll"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"URL der benutzerdefinierten Router-Webschnittstelle (Präsentation) melden"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Maximale Downloadgeschwindigkeit in kByte/s melden"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Maximale Hochladegeschwindigkeit in kByte/s melden"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Systemlaufzeit statt Prozesslaufzeit melden"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN-Host"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN-Port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Dienst-Zugriffskontrollliste"
@@ -202,7 +210,7 @@ msgstr "Diensteinstellungen"
msgid "Service Setup"
msgstr "Allgemeine Einstellungen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Service Lease-Datei"
@@ -231,7 +239,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Es gibt keine aktiven Weiterleitungen."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -246,7 +254,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD & PCP/NAT-PMP Service"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 Modus aktivieren"
@@ -256,11 +264,11 @@ msgstr "UPnP IGDv1 Modus aktivieren"
msgid "Unknown"
msgstr "Unbekannt"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Hochladegeschwindigkeit"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "%s verwenden"
diff --git a/luci-app-upnp/po/el/upnp.po b/luci-app-upnp/po/el/upnp.po
index e3ef7a110..1542fc180 100644
--- a/luci-app-upnp/po/el/upnp.po
+++ b/luci-app-upnp/po/el/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8.2\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,13 +23,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Δράση"
@@ -45,29 +45,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Ρυθμίσεις για προχωρημένους"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -78,11 +82,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Σχόλιο"
@@ -92,7 +96,7 @@ msgstr "Σχόλιο"
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -101,11 +105,11 @@ msgstr ""
msgid "Description"
msgstr "Περιγραφή"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -117,11 +121,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -140,11 +148,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -153,39 +161,39 @@ msgstr ""
msgid "Protocol"
msgstr "Πρωτόκολλο"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Θύρα"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -197,7 +205,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Γενικές ρυθμίσεις"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -247,11 +255,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Ταχύτητα μεταφόρτωσης"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/es/upnp.po b/luci-app-upnp/po/es/upnp.po
index a9811017c..267be9cae 100644
--- a/luci-app-upnp/po/es/upnp.po
+++ b/luci-app-upnp/po/es/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"Un intervalo de 900 s dará lugar a %s notificaciones con una edad máxima "
"mínima de 1800 s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -34,7 +34,7 @@ msgstr ""
"pueden ser reenviados hacía las direcciones IP y puertos del cliente. Las "
"direcciones IPv6 siempre son permitidas."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Acción"
@@ -50,30 +50,34 @@ msgstr "Mapas de puertos UPnP IGD y PCP/NAT-PMP activos"
msgid "Advanced Settings"
msgstr "Ajustes avanzados"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Anunciar como dispositivo UPnP IGDv1 (sin IPv6) en lugar de IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Permitir"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Permitir agregar reenvíos de puertos solo a direcciones IP solicitantes"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Permitir IPv4 privada"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Número de modelo anunciado"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Número de serie anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Dirección del cliente"
@@ -84,11 +88,11 @@ msgstr "Nombre del cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Puerto del cliente"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Comentario"
@@ -98,7 +102,7 @@ msgstr "Comentario"
msgid "Delete"
msgstr "Eliminar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Denegar"
@@ -107,11 +111,11 @@ msgstr "Denegar"
msgid "Description"
msgstr "Descripción"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID del dispositivo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Velocidad de descarga"
@@ -123,11 +127,15 @@ msgstr "Activar protocolos PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Activar protocolo UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Activar registro adicional"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Activar el reenvío para direcciones IPv4 privadas/reservadas"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Activar modo seguro"
@@ -138,7 +146,7 @@ msgstr "Expira"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Puerto externo"
@@ -146,11 +154,11 @@ msgstr "Puerto externo"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Conceder acceso a UPnP IGD y PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervalo de notificación"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL de presentación"
@@ -159,40 +167,40 @@ msgstr "URL de presentación"
msgid "Protocol"
msgstr "Protocolo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Coloca información de depuración adicional en el registro del sistema"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"URL de la interfaz web (presentación) del enrutador personalizado del informe"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Informar de la velocidad máxima de descarga en kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Informar de la velocidad máxima de subida en kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Informar tiempo de actividad del sistema en vez de la del servicio"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Puerto SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Host STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Puerto STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Lista de control de acceso al servicio"
@@ -204,7 +212,7 @@ msgstr "Ajustes del Servicio"
msgid "Service Setup"
msgstr "Ajustes generales"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Archivo de tiempo de concesión del servicio"
@@ -233,7 +241,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "No hay reenvíos de puertos vigentes."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -248,7 +256,7 @@ msgstr "UPnP IGD y PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Servicio UPnP IGD y PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Activar UPnP modo IGDv1"
@@ -258,11 +266,11 @@ msgstr "Activar UPnP modo IGDv1"
msgid "Unknown"
msgstr "Desconocido"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Velocidad de carga"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Utilizar %s"
diff --git a/luci-app-upnp/po/fi/upnp.po b/luci-app-upnp/po/fi/upnp.po
index 8568880c2..feeedf1b8 100644
--- a/luci-app-upnp/po/fi/upnp.po
+++ b/luci-app-upnp/po/fi/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"900 sekunnin väli johtaa %s ilmoitukseen, joiden vähimmäisikä on 1800 "
"sekuntia"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"ACL-pääsylista määrittää, mitkä asiakasosoitteet ja portit voidaan yhdistää "
"– IPv6 aina sallittu."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Toiminta"
@@ -49,29 +49,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Lisäasetukset"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Mainosta IGDv1-laitteena (vain IPv4) IGDv2:n sijaan"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Salli"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Ilmoitettu mallinumero"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Ilmoitettu sarjanumero"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Asiakasosoite"
@@ -82,11 +86,11 @@ msgstr "Asiakasnimi"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Asiakasportti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Kommentti"
@@ -96,7 +100,7 @@ msgstr "Kommentti"
msgid "Delete"
msgstr "Poista"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Kiellä"
@@ -105,11 +109,11 @@ msgstr "Kiellä"
msgid "Description"
msgstr "Kuvaus"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Laitteen UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -121,11 +125,15 @@ msgstr "Ota PCP-/NAT-PMP-protokollat käyttöön"
msgid "Enable UPnP IGD protocol"
msgstr "Ota UPnP IGD -protokolla käyttöön"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Ota ylimääräinen lokikirjaaminen käyttöön"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Ota turvallinen tila käyttöön"
@@ -136,7 +144,7 @@ msgstr "Umpeutuu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Ulkoinen portti"
@@ -144,11 +152,11 @@ msgstr "Ulkoinen portti"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Myönnä pääsy UPnP IGD:hen ja PCP/NAT-PMP:hen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Ilmoitusväli"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Esityksen URL-osoite"
@@ -157,39 +165,39 @@ msgstr "Esityksen URL-osoite"
msgid "Protocol"
msgstr "Protokolla"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Laita ylimääräisiä viankorjaustietoja järjestelmälokiin"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "Ilmoita mukautetun reitittimen verkkoliitännän (esitys) URL-osoite"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Ilmoita enimmäislatausnopeus kilotavuina sekunnissa; kt/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Ilmoita enimmäisuloslatausnopeus kilotavuina sekunnissa; kt/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Ilmoita järjestelmän käyttöaika palvelun käyttöajan sijaan"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Portti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN-isäntä"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN-portti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -201,7 +209,7 @@ msgstr "Palveluasetukset"
msgid "Service Setup"
msgstr "Yleiset asetukset"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Ei aktiivisia uudelleenohjauksia."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Käytä UPnP IGDv1-tilaa"
@@ -251,11 +259,11 @@ msgstr "Käytä UPnP IGDv1-tilaa"
msgid "Unknown"
msgstr "Tuntematon"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Lähetysyhteys"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Käytä %s:ia"
diff --git a/luci-app-upnp/po/fr/upnp.po b/luci-app-upnp/po/fr/upnp.po
index 8d16d1faf..ddb4bfe83 100644
--- a/luci-app-upnp/po/fr/upnp.po
+++ b/luci-app-upnp/po/fr/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"Un intervalle de 900s indique qu'il y aura %s notifications avec une valeur "
"max-age ayant pour minimum 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"Les ACL définissent quels ports externes peuvent être redirigés, vers "
"quelles adresses et ports internes, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Action"
@@ -49,31 +49,35 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Paramètres avancés"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Annoncer comme dispositif IGDv1 au lieu de IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Permet d'ajouter des redirections seulement vers les adresses IP qui font "
"des demandes"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Numéro de modèle annoncé"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Numéro de série annoncé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adresse du client"
@@ -84,11 +88,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port du client"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Commentaire"
@@ -98,7 +102,7 @@ msgstr "Commentaire"
msgid "Delete"
msgstr "Effacer"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -107,11 +111,11 @@ msgstr ""
msgid "Description"
msgstr "Description"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID du périphérique"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Liaison descendante"
@@ -123,11 +127,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Activer la journalisation additionnelle"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Activer le mode sécurisé"
@@ -138,7 +146,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Port externe"
@@ -146,11 +154,11 @@ msgstr "Port externe"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervalle de notification"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL de présentation"
@@ -159,40 +167,40 @@ msgstr "URL de présentation"
msgid "Protocol"
msgstr "Protocole"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Rajoute des informations de debug dans le journal-système"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
"Indiquer la durée de fonctionnement du système plutôt que celle du démon UPnP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Hôte STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Port STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -204,7 +212,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Réglages généraux"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -233,7 +241,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Il n'y a pas de redirections actives."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -246,7 +254,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Activer le mode UPnP IGDv1"
@@ -256,11 +264,11 @@ msgstr "Activer le mode UPnP IGDv1"
msgid "Unknown"
msgstr "Inconnue"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Liaison montante"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Utiliser %s"
diff --git a/luci-app-upnp/po/ga/upnp.po b/luci-app-upnp/po/ga/upnp.po
index 01ca50397..37b7bce8a 100644
--- a/luci-app-upnp/po/ga/upnp.po
+++ b/luci-app-upnp/po/ga/upnp.po
@@ -11,11 +11,11 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
-"(n>6 && n<11) ? 3 : 4;\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>"
+"6 && n<11) ? 3 : 4;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgid ""
msgstr ""
"Mar thoradh ar eatramh 900s beidh %s fógraí leis an aois uasta íosta de 1800í"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"Sonraíonn ACLanna cé na calafoirt sheachtracha is féidir a chur ar aghaidh "
"chuig a seoltaí cliant agus calafoirt, IPv6 ceadaithe i gcónaí."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Gníomh"
@@ -49,29 +49,33 @@ msgstr "Léarscáileanna Gníomhacha UPnP IGD & PCP/NAT-PMP Port"
msgid "Advanced Settings"
msgstr "Socruithe Ardleibhéil"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Fógairt mar ghléas UPnP IGDv1 (gan IPv6) in ionad IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Ceadaigh"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Ceadaigh port a chur ar aghaidh chuig seoltaí IP amháin a iarrtar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Ceadaigh IPv4 príobháideach"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Uimhir mhúnla fógartha"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Sraithuimhir fógartha"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Seoladh Cliant"
@@ -82,11 +86,11 @@ msgstr "Ainm an Chliaint"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port Cliant"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Trácht"
@@ -96,7 +100,7 @@ msgstr "Trácht"
msgid "Delete"
msgstr "Scrios"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Shéanadh"
@@ -105,11 +109,11 @@ msgstr "Shéanadh"
msgid "Description"
msgstr "Cur síos"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID Gléas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Gá le luas a íoslódáil"
@@ -121,11 +125,15 @@ msgstr "Cumasaigh prótacal PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Cumasaigh prótacal UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Cumasaigh logáil bhreise"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Cumasaigh atreorú le haghaidh seoladh IPv4 príobháideach/áirithe"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Cumasaigh mód slán"
@@ -136,7 +144,7 @@ msgstr "In éag"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Port Seachtrach"
@@ -144,11 +152,11 @@ msgstr "Port Seachtrach"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Deonaigh rochtain ar UPnP IGD & PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Eatramh fógra"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL cur i láthair"
@@ -157,40 +165,40 @@ msgstr "URL cur i láthair"
msgid "Protocol"
msgstr "Prótacal"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Cuireann sé faisnéis bhreise dífhabhtaithe isteach i loga an chórais"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"Tuairiscigh URL comhéadan gréasáin ródaire saincheaptha (cur i láthair)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Tuairiscigh an t-uasluas íoslódála i kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Tuairiscigh an t-uasluas uaslódála i kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Córas tuairisce in ionad aga fónaimh seirbhíse"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Port SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN Óstach"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Liosta Rialaithe Rochtana Seirbhíse"
@@ -202,7 +210,7 @@ msgstr "Socruithe Seirbhíse"
msgid "Service Setup"
msgstr "Socrú Seirbhíse"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Comhad léasa seirbhíse"
@@ -232,7 +240,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Níl aon phort gníomhach ar aghaidh."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -246,7 +254,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD & Seirbhís PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Cumasaigh mód UPnP IGDv1"
@@ -256,11 +264,11 @@ msgstr "Cumasaigh mód UPnP IGDv1"
msgid "Unknown"
msgstr "Anaithnid"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Luas uaslódála"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Bain úsáid as %s"
diff --git a/luci-app-upnp/po/he/upnp.po b/luci-app-upnp/po/he/upnp.po
index ce0b02219..f36486448 100644
--- a/luci-app-upnp/po/he/upnp.po
+++ b/luci-app-upnp/po/he/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 5.0.1-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -21,13 +21,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "פעולה"
@@ -43,29 +43,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "הגדרות מתקדמות"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -76,11 +80,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "תגובה"
@@ -90,7 +94,7 @@ msgstr "תגובה"
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -99,11 +103,11 @@ msgstr ""
msgid "Description"
msgstr "תיאור"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -115,11 +119,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -130,7 +138,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -138,11 +146,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -151,39 +159,39 @@ msgstr ""
msgid "Protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "פתחה"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -195,7 +203,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -222,7 +230,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -235,7 +243,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -245,11 +253,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/hi/upnp.po b/luci-app-upnp/po/hi/upnp.po
index 35b75c6ff..691db8979 100644
--- a/luci-app-upnp/po/hi/upnp.po
+++ b/luci-app-upnp/po/hi/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.7-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,13 +23,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr ""
@@ -45,29 +45,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "उन्नत सेटिंग्स"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -78,11 +82,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr ""
@@ -92,7 +96,7 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -101,11 +105,11 @@ msgstr ""
msgid "Description"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -117,11 +121,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -140,11 +148,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -153,39 +161,39 @@ msgstr ""
msgid "Protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -197,7 +205,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -247,11 +255,11 @@ msgstr ""
msgid "Unknown"
msgstr "अज्ञात"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/hu/upnp.po b/luci-app-upnp/po/hu/upnp.po
index e37b65f31..66507b215 100644
--- a/luci-app-upnp/po/hu/upnp.po
+++ b/luci-app-upnp/po/hu/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -21,7 +21,7 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -29,7 +29,7 @@ msgstr ""
"Az ACL-ek határozzák meg, hogy melyik külső portok melyik belső portokra és "
"címekre kerülhetnek továbbításra, IPv6 mindig engedélyezett."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Művelet"
@@ -45,31 +45,35 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Haladó beállítások"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Hirdetés IGDv1 eszközként IGDv2 helyett"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Kizárólag a kérést küldő IP címre történő továbbítás hozzáadásának "
"engedélyezése"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Bejelentett modellszám"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Bejelentett sorozatszám"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -80,11 +84,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Megjegyzés"
@@ -94,7 +98,7 @@ msgstr "Megjegyzés"
msgid "Delete"
msgstr "Törlés"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -103,11 +107,11 @@ msgstr ""
msgid "Description"
msgstr "Leírás"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Eszköz UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Befelé jövő kapcsolat"
@@ -119,11 +123,15 @@ msgstr "PCP/NAT-PMP protokoll engedélyezése"
msgid "Enable UPnP IGD protocol"
msgstr "UPnP IGD protokoll engedélyezése"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "További naplózás engedélyezése"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Biztonságos mód engedélyezése"
@@ -134,7 +142,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Külső port"
@@ -142,11 +150,11 @@ msgstr "Külső port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Értesítési időköz"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Bemutató URL"
@@ -155,39 +163,39 @@ msgstr "Bemutató URL"
msgid "Protocol"
msgstr "Protokoll"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "További hibakeresési információkat tesz a rendszernaplóba"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "A démon helyett a rendszer működési idejét jeleníti meg"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -199,7 +207,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Általános beállítások"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Nincsenek aktív átírányítások."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 mód engedélyezése"
@@ -251,11 +259,11 @@ msgstr "UPnP IGDv1 mód engedélyezése"
msgid "Unknown"
msgstr "Ismeretlen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Kimenő sebesség"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/it/upnp.po b/luci-app-upnp/po/it/upnp.po
index e13dda534..469aaa2f2 100644
--- a/luci-app-upnp/po/it/upnp.po
+++ b/luci-app-upnp/po/it/upnp.po
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2026-07-23 06:18+0000\n"
-"Last-Translator: Random \n"
+"PO-Revision-Date: 2025-11-28 22:04+0000\n"
+"Last-Translator: niky1987 \n"
"Language-Team: Italian \n"
"Language: it\n"
@@ -12,9 +12,9 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2026.8.dev0\n"
+"X-Generator: Weblate 5.15-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"\"Con un intervallo di 900 secondi verranno generate notifiche SSDP (%s) con "
"un max-age minimo di 1800 secondi.\""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"Le ACL specificano quali porte esterne possono essere ridirezionate a quali "
"indirizzi e porte interni, IPv6 sempre consentito."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Azione"
@@ -49,29 +49,33 @@ msgstr "Mappe delle porte UPnP IGD e PCP/NAT-PMP attive"
msgid "Advanced Settings"
msgstr "Impostazioni Avanzate"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Pubblicizza come dispositivo IGDv1 anziché IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Permetti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Permetti l'aggiunta della mappatura solo agli indirizzi IP richiedenti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Numero modello annunciato"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Numero seriale annunciato"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Indirizzo IP"
@@ -82,11 +86,11 @@ msgstr "Nome del Client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Porta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Commento"
@@ -96,7 +100,7 @@ msgstr "Commento"
msgid "Delete"
msgstr "Elimina"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Nega"
@@ -105,27 +109,31 @@ msgstr "Nega"
msgid "Description"
msgstr "Descrizione"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID del dispositivo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Velocità di download"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:144
msgid "Enable PCP/NAT-PMP protocols"
-msgstr "Attiva i protocolli PCP/NAT-PMP"
+msgstr "Abilita il protocollo PCP/NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:141
msgid "Enable UPnP IGD protocol"
msgstr "Abilita il protocollo UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Abilita log addizionale"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Abilita la modalità sicura"
@@ -136,7 +144,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Porta Esterna"
@@ -144,11 +152,11 @@ msgstr "Porta Esterna"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervallo di notifica"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL di presentazione"
@@ -157,39 +165,39 @@ msgstr "URL di presentazione"
msgid "Protocol"
msgstr "Protocollo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Scrivi nel log di sistema ulteriori informazioni di debug"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Mostra l'uptime del sistema invece del servizio"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Porta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Host STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Porta STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Servizi ACL"
@@ -201,7 +209,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Impostazioni Generali"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -230,7 +238,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Non ci sono mappature attive."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -243,7 +251,7 @@ msgstr "UPnP IGD e PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Abilita modalità UPnP IGDv1"
@@ -253,11 +261,11 @@ msgstr "Abilita modalità UPnP IGDv1"
msgid "Unknown"
msgstr "Sconosciuto"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Velocità di upload"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Usa %s"
diff --git a/luci-app-upnp/po/ja/upnp.po b/luci-app-upnp/po/ja/upnp.po
index f6d0f2c1a..1de28731d 100644
--- a/luci-app-upnp/po/ja/upnp.po
+++ b/luci-app-upnp/po/ja/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -31,7 +31,7 @@ msgstr ""
"アクセス制御リスト(ACL)は、どの外部ポートからどの内部アドレス及びポートへリ"
"ダイレクトするかを設定します。, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "アクション"
@@ -47,29 +47,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "詳細設定"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "IGDv2 ではなく IGDv1 デバイスとしてアドバタイズ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "許可"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "要求元IPアドレスへの転送のみ、追加を許可します"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "通知するモデル番号"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "通知するシリアル番号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "クライアント・アドレス"
@@ -80,11 +84,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "クライアント・ポート"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "コメント"
@@ -94,7 +98,7 @@ msgstr "コメント"
msgid "Delete"
msgstr "削除"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "拒否"
@@ -103,11 +107,11 @@ msgstr "拒否"
msgid "Description"
msgstr "説明"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "デバイス UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "ダウンロード速度"
@@ -119,11 +123,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr "UPnP IGD機能を有効にする"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "ログ機能を有効にする"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "セキュアモードを有効にする"
@@ -134,7 +142,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "外部ポート"
@@ -142,11 +150,11 @@ msgstr "外部ポート"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "通知間隔"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "プレゼンテーションURL"
@@ -155,39 +163,39 @@ msgstr "プレゼンテーションURL"
msgid "Protocol"
msgstr "プロトコル"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "追加のデバッグ情報をシステムログへ挿入する"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "サービスの起動時間の代わりにシステムの起動時間を使用する"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "ポート"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN ホスト"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN ポート"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -199,7 +207,7 @@ msgstr ""
msgid "Service Setup"
msgstr "一般設定"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "有効なリダイレクトはありません。"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr "UPnP IGDとPCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 モードを有効化"
@@ -251,11 +259,11 @@ msgstr "UPnP IGDv1 モードを有効化"
msgid "Unknown"
msgstr "不明"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "アップロード速度"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "%s を使用"
diff --git a/luci-app-upnp/po/ko/upnp.po b/luci-app-upnp/po/ko/upnp.po
index 9e45c2194..c864a566d 100644
--- a/luci-app-upnp/po/ko/upnp.po
+++ b/luci-app-upnp/po/ko/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,7 +24,7 @@ msgid ""
msgstr ""
"간격을 900초로 설정하면 최소 1800초의 max-age를 가진 %s 알림을 전파합니다"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"ACL은 포트 매핑이 허용될 클라이언트 주소와 포트를 지정합니다. IPv6는 항상 허"
"용됩니다."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "동작"
@@ -48,29 +48,33 @@ msgstr "활성 UPnP IGD 및 PCP/NAT-PMP 포트 매핑"
msgid "Advanced Settings"
msgstr "고급 설정"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "IGDv2 대신 IGDv1 (IPv4 전용) 기기로 이웃 단말에 전파합니다"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "허용"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "요청한 IP 주소에 한해서만 포트 매핑 추가를 허용합니다"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "사설 IPv4 허용"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "표시 모델 번호"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "표시 일련번호"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "클라이언트 주소"
@@ -81,11 +85,11 @@ msgstr "클라이언트 이름"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "클라이언트 포트"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "설명"
@@ -95,7 +99,7 @@ msgstr "설명"
msgid "Delete"
msgstr "삭제"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "거부"
@@ -104,11 +108,11 @@ msgstr "거부"
msgid "Description"
msgstr "설명"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "기기 UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "다운로드 속도"
@@ -120,11 +124,15 @@ msgstr "PCP/NAT-PMP 프로토콜 활성화"
msgid "Enable UPnP IGD protocol"
msgstr "UPnP IGD 프로토콜 활성화"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "추가 로그 기록 사용"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "사설 또는 예약된 IPv4 주소로 전달을 활성화합니다"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "보안 모드 활성화"
@@ -135,7 +143,7 @@ msgstr "만료 시간"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "외부 포트"
@@ -143,11 +151,11 @@ msgstr "외부 포트"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "UPnP IGD & PCP/NAT-PMP에 접근 권한 부여"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "알림 주기"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "관리 페이지 URL"
@@ -156,39 +164,39 @@ msgstr "관리 페이지 URL"
msgid "Protocol"
msgstr "프로토콜"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "시스템 로그에 상세 디버그 정보를 기록합니다"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "사용자 정의 라우터 웹 인터페이스 (관리 페이지) URL를 전파합니다"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "표시할 최대 다운로드 속도 (kByte/s 단위)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "표시할 최대 업로드 속도 (kByte/s 단위)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "서비스 가동 시간 대신 시스템 가동 시간 보고"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP 포트"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN 호스트"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN 포트"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "서비스 접근 제어 목록(ACL)"
@@ -200,7 +208,7 @@ msgstr "서비스 설정"
msgid "Service Setup"
msgstr "기본 설정"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "서비스 임대 파일"
@@ -229,7 +237,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "활성 포트 매핑 내역이 없습니다."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -243,7 +251,7 @@ msgstr "UPnP IGD 및 PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD 및 PCP/NAT-PMP 서비스"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 호환 모드 활성화"
@@ -253,11 +261,11 @@ msgstr "UPnP IGDv1 호환 모드 활성화"
msgid "Unknown"
msgstr "알 수 없음"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "업로드 속도"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "%s 사용"
diff --git a/luci-app-upnp/po/lo/upnp.po b/luci-app-upnp/po/lo/upnp.po
index 22ab56ec5..d654d5b64 100644
--- a/luci-app-upnp/po/lo/upnp.po
+++ b/luci-app-upnp/po/lo/upnp.po
@@ -10,7 +10,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -20,14 +20,14 @@ msgid ""
msgstr ""
"ໄລຍະຫ່າງ 900 ວິນາທີ ຈະສົ່ງຜົນໃຫ້ມີການແຈ້ງເຕືອນ %s ດ້ວຍຄ່າ max-age ຕ່ຳສຸດແມ່ນ 1800 ວິນາທີ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
"ACL ກຳນົດວ່າທີ່ຢູ່ ແລະ ພອດຂອງໄຄເອັນໃດແດ່ທີ່ສາມາດຈັບຄູ່ພອດໄດ້, ສ່ວນ IPv6 ແມ່ນໄດ້ຮັບອະນຸຍາດສະເໝີ."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "ການກະທຳ"
@@ -43,29 +43,33 @@ msgstr "ລາຍການຈັບຄູ່ພອດ UPnP IGD & PCP/NAT-PMP ທ
msgid "Advanced Settings"
msgstr "ການຕັ້ງຄ່າຂັ້ນສູງ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "ປະກາດເປັນອຸປະກອນ IGDv1 (IPv4 ເທົ່ານັ້ນ) ແທນທີ່ຈະເປັນ IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "ອະນຸຍາດ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "ອະນຸຍາດໃຫ້ເພີ່ມການຈັບຄູ່ພອດສຳລັບທີ່ຢູ່ IP ທີ່ຮ້ອງຂໍເທົ່ານັ້ນ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "ອະນຸຍາດ IPv4 ສ່ວນຕົວ"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "ເລກລຸ້ນທີ່ປະກາດ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "ເລກຊີຣຽນທີ່ປະກາດ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "ທີ່ຢູ່ໄຄເອັນ"
@@ -76,11 +80,11 @@ msgstr "ຊື່ໄຄເອັນ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "ພອດໄຄເອັນ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "ຄຳອະທິບາຍ"
@@ -90,7 +94,7 @@ msgstr "ຄຳອະທິບາຍ"
msgid "Delete"
msgstr "ລຶບ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "ປະຕິເສດ"
@@ -99,11 +103,11 @@ msgstr "ປະຕິເສດ"
msgid "Description"
msgstr "ຄຳອະທິບາຍ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID ຂອງອຸປະກອນ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "ຄວາມໄວດາວໂຫຼດ"
@@ -115,11 +119,15 @@ msgstr "ເປີດໃຊ້ງານໂປຣໂຕຄອນ PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "ເປີດໃຊ້ງານໂປຣໂຕຄອນ UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "ເປີດໃຊ້ງານການບັນທຶກລັອກເພີ່ມເຕີມ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "ເປີດໃຊ້ງານການສົ່ງຕໍ່ສຳລັບທີ່ຢູ່ IPv4 ສ່ວນຕົວ ຫຼື ທີ່ຖືກສຳຮອງໄວ້"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "ເປີດໃຊ້ງານໂໝດປອດໄພ"
@@ -130,7 +138,7 @@ msgstr "ໝົດອາຍຸ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "ພອດພາຍນອກ"
@@ -138,11 +146,11 @@ msgstr "ພອດພາຍນອກ"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "ອະນຸຍາດການເຂົ້າເຖິງ UPnP IGD & PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "ໄລຍະຫ່າງການແຈ້ງເຕືອນ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL ການນຳສະເໜີ"
@@ -151,39 +159,39 @@ msgstr "URL ການນຳສະເໜີ"
msgid "Protocol"
msgstr "ໂປຣໂຕຄອນ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "ເພີ່ມຂໍ້ມູນການດີບັກ (debugging) ລົງໃນລັອກຂອງລະບົບ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "ລາຍງານ URL ຂອງເວັບອິນເຕີເຟສເລົາເຕີ (ການນຳສະເໜີ) ແບບກຳນົດເອງ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "ລາຍງານຄວາມໄວດາວໂຫຼດສູງສຸດເປັນ kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "ລາຍງານຄວາມໄວອັບໂຫຼດສູງສຸດເປັນ kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "ລາຍງານໄລຍະເວລາເຮັດວຽກຂອງລະບົບ ແທນທີ່ໄລຍະເວລາຂອງບໍລິການ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "ພອດ SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "ໂຮສ STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "ພອດ STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "ລາຍການຄວບຄຸມການເຂົ້າເຖິງບໍລິການ"
@@ -195,7 +203,7 @@ msgstr "ການຕັ້ງຄ່າບໍລິການ"
msgid "Service Setup"
msgstr "ການຕິດຕັ້ງບໍລິການ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "ໄຟລ໌ສັນຍາເຊົ່າບໍລິການ"
@@ -215,8 +223,8 @@ msgid ""
"The %s protocols allow clients on the local network to configure port maps/"
"forwards on the router autonomously."
msgstr ""
-"ໂປຣໂຕຄອນ %s ອະນຸຍາດໃຫ້ໄຄເອັນໃນເຄືອຂ່າຍທ້ອງຖິ່ນສາມາດກຳນົດຄ່າການຈັບຄູ່ ຫຼື "
-"ການສົ່ງຕໍ່ພອດເທິງເລົາເຕີໄດ້ດ້ວຍຕົນເອງ."
+"ໂປຣໂຕຄອນ %s ອະນຸຍາດໃຫ້ໄຄເອັນໃນເຄືອຂ່າຍທ້ອງຖິ່ນສາມາດກຳນົດຄ່າການຈັບຄູ່ ຫຼື ການສົ່ງຕໍ່ພອດເທິງເລົາເຕີໄດ້"
+"ດ້ວຍຕົນເອງ."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:80
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
@@ -224,10 +232,11 @@ msgstr ""
msgid "There are no active port maps."
msgstr "ບໍ່ມີລາຍການຈັບຄູ່ພອດທີ່ກຳລັງເຮັດວຽກ."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
-msgstr "ເພື່ອຄົ້ນຫາທີ່ຢູ່ IPv4 ສາທາລະນະ ສຳລັບ full-cone/one-to-one NATs ທີ່ບໍ່ຖືກຈຳກັດ"
+msgstr ""
+"ເພື່ອຄົ້ນຫາທີ່ຢູ່ IPv4 ສາທາລະນະ ສຳລັບ full-cone/one-to-one NATs ທີ່ບໍ່ຖືກຈຳກັດ"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP IGD & PCP"
@@ -237,7 +246,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "ບໍລິການ UPnP IGD & PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "ໂໝດຄວາມເຂົ້າກັນໄດ້ຂອງ UPnP IGDv1"
@@ -247,11 +256,11 @@ msgstr "ໂໝດຄວາມເຂົ້າກັນໄດ້ຂອງ UPnP IGD
msgid "Unknown"
msgstr "ບໍ່ຮູ້ຈັກ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "ຄວາມໄວອັບໂຫຼດ"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "ໃຊ້ %s"
diff --git a/luci-app-upnp/po/lt/upnp.po b/luci-app-upnp/po/lt/upnp.po
index 22d7254d5..dcda4bd8f 100644
--- a/luci-app-upnp/po/lt/upnp.po
+++ b/luci-app-upnp/po/lt/upnp.po
@@ -13,7 +13,7 @@ msgstr ""
"(n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,7 +24,7 @@ msgstr ""
"900 sek. intervalas lems %s pranešimų, kurių mažiausias maksimalus amžius "
"yra – 1800 sek."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"„ACL“ (dgs.) nurodo, į kuriuos išorinius prievadus galima persiųsti į "
"nurodytus kliento adresus ir prievadus, IPv6 yra visada leidžiamas."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Veiksmas"
@@ -48,31 +48,35 @@ msgstr "Aktyvūs „UPnP IGD“ ir „PCP/NAT-PMP“ prievadų atvaizdavimai"
msgid "Advanced Settings"
msgstr "Pažangūs nustatymai"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Reklamuoti/Skelbti kaip – „IGDv1“ įrenginį (tik IPv4), vietoj „IGDv2“"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Leisti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Leisti pridėti prievadų persiuntimus tik į užklausų reikalaujančius IP "
"adresus"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Leisti privatų IPv4"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Paskelbtas modelio numeris"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Paskelbtas serijos numeris"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Kliento adresas"
@@ -83,11 +87,11 @@ msgstr "Kliento pavadinimas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Kliento prievadas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Komentuoti"
@@ -97,7 +101,7 @@ msgstr "Komentuoti"
msgid "Delete"
msgstr "Ištrinti"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Atmesti/Neprileisti"
@@ -106,11 +110,11 @@ msgstr "Atmesti/Neprileisti"
msgid "Description"
msgstr "Aprašas/-ymas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Įrenginio „UUID“"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Atsisiuntimo greitis"
@@ -122,11 +126,15 @@ msgstr "Įjungti/Įgalinti „PCP/NAT-PMP“ protokolus"
msgid "Enable UPnP IGD protocol"
msgstr "Įjungti/Įgalinti „UPnP IGD“ protokolą"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Įjungti papildomą žurnalinimą"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Įjungti/Įgalinti persiuntimą privačiam/rezervuotam IPv4 adresui"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Įjungti „saugiąją veikseną“"
@@ -137,7 +145,7 @@ msgstr "Baigia galioti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Išorinis prievadas"
@@ -145,11 +153,11 @@ msgstr "Išorinis prievadas"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Duoti prieigą prie „UPnP IGD“ ir „PCP/NAT-PMP“"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Pranešimo intervalas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Pateikties „URL“ – saitas"
@@ -158,41 +166,41 @@ msgstr "Pateikties „URL“ – saitas"
msgid "Protocol"
msgstr "Protokolas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Įdeda papildomą derinimo informaciją į sistemos žurnalą"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"Pranešti apie pasirinktinio maršrutizatoriaus žiniatinklio sąsajos ir/arba "
"sietuvo (pristatymo) „URL“ – saitą"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Pranešti apie maksimalų atsisiuntimo greitį kb/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Pranešti apie maksimalų įkėlimo greitį kb/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Pranešti apie sistemos veikimo laiką, o ne tarnybos"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "„SOAP“/„HTTP“ prievadas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "„STUN“ skleidėjas/vedėjas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "„STUN“ prievadas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Tarnybos prieigos kontrolės sąrašas"
@@ -204,7 +212,7 @@ msgstr "Tarnybos nustatymai"
msgid "Service Setup"
msgstr "Paslaugos/Tarnybos sąranka"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Tarnybos nuomos failas"
@@ -233,7 +241,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Nėra aktyvių prievadų persiuntimų."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -248,7 +256,7 @@ msgstr "„UPnP“ – „IGD“ ir „PCP“"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "„UPnP“ – „IGD“ ir „PCP“ tarnyba"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Įjungti „UPnP IGDv1“ suderinamumo veikseną"
@@ -258,11 +266,11 @@ msgstr "Įjungti „UPnP IGDv1“ suderinamumo veikseną"
msgid "Unknown"
msgstr "Nežinoma/-s/-i"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Įkėlimo greitis"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Naudoti „%s“"
diff --git a/luci-app-upnp/po/mr/upnp.po b/luci-app-upnp/po/mr/upnp.po
index 39a2580aa..ba80c5e92 100644
--- a/luci-app-upnp/po/mr/upnp.po
+++ b/luci-app-upnp/po/mr/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.11-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,13 +23,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr ""
@@ -45,29 +45,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "प्रगत सेटिंग्ज"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -78,11 +82,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "टिप्पणी"
@@ -92,7 +96,7 @@ msgstr "टिप्पणी"
msgid "Delete"
msgstr "हटवा"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -101,11 +105,11 @@ msgstr ""
msgid "Description"
msgstr "वर्णन"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -117,11 +121,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -140,11 +148,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -153,39 +161,39 @@ msgstr ""
msgid "Protocol"
msgstr "प्रोटोकॉल"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "पोर्ट"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -197,7 +205,7 @@ msgstr ""
msgid "Service Setup"
msgstr "सामान्य सेटिंग्ज"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -247,11 +255,11 @@ msgstr ""
msgid "Unknown"
msgstr "अज्ञात"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "अपलिंक"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/ms/upnp.po b/luci-app-upnp/po/ms/upnp.po
index d2ccb18f0..3b71781b5 100644
--- a/luci-app-upnp/po/ms/upnp.po
+++ b/luci-app-upnp/po/ms/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.4-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -21,13 +21,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Tindakan"
@@ -43,29 +43,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Tetapan Lanjutan"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -76,11 +80,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Ulasan"
@@ -90,7 +94,7 @@ msgstr "Ulasan"
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -99,11 +103,11 @@ msgstr ""
msgid "Description"
msgstr "Keterangan"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -115,11 +119,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -130,7 +138,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -138,11 +146,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -151,39 +159,39 @@ msgstr ""
msgid "Protocol"
msgstr "Protokol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -195,7 +203,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -222,7 +230,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -235,7 +243,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -245,11 +253,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/nb_NO/upnp.po b/luci-app-upnp/po/nb_NO/upnp.po
index e61f79ea2..f53eb63b6 100644
--- a/luci-app-upnp/po/nb_NO/upnp.po
+++ b/luci-app-upnp/po/nb_NO/upnp.po
@@ -10,7 +10,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.11-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -19,7 +19,7 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -27,7 +27,7 @@ msgstr ""
"ACL angir hvilke eksterne porter som kan bli viderekoblet, og til hvilke "
"interne adresser og porter, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Handling"
@@ -43,29 +43,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Avanserte innstillinger"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Annonser som IGDv1-enhet istedenfor IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Tillat videkobling kun til IP adresser som ber om det"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Annonsert modellnummer"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Annonsert serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Klient adresse"
@@ -76,11 +80,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Klient port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Kommentar"
@@ -90,7 +94,7 @@ msgstr "Kommentar"
msgid "Delete"
msgstr "Slett"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -99,11 +103,11 @@ msgstr ""
msgid "Description"
msgstr "Beskrivelse"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Enhet UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Nedlastningshastighet"
@@ -115,11 +119,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Aktiver tilleggs logging"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Aktiver sikker modus"
@@ -130,7 +138,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Ekstern port"
@@ -138,11 +146,11 @@ msgstr "Ekstern port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Informasjons intervall"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Presentasjon URL"
@@ -151,39 +159,39 @@ msgstr "Presentasjon URL"
msgid "Protocol"
msgstr "Protokoll"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Setter ekstra debugging informasjon i systemloggen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Rapporter systemets oppetid istedenfor daemon oppetid"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN-vert"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN-port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -195,7 +203,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Generelle innstillinger"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Det finnes ingen aktive viderekoblinger"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD & PCP/NAT-PMP Service"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Skru på UPnP IGDv1-modus"
@@ -247,11 +255,11 @@ msgstr "Skru på UPnP IGDv1-modus"
msgid "Unknown"
msgstr "Ukjent"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Opplastningshastighet"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Bruk %s"
diff --git a/luci-app-upnp/po/nl/upnp.po b/luci-app-upnp/po/nl/upnp.po
index 146acea15..0d1e134b7 100644
--- a/luci-app-upnp/po/nl/upnp.po
+++ b/luci-app-upnp/po/nl/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,13 +23,13 @@ msgstr ""
"Een 900s interval zal resulteren in %s notificaties met een minimum max-"
"leeftijd van 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Actie"
@@ -45,29 +45,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Geavanceerde instellingen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Toestaan"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -78,11 +82,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr ""
@@ -92,7 +96,7 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -101,11 +105,11 @@ msgstr ""
msgid "Description"
msgstr "Beschrijving"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -117,11 +121,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -140,11 +148,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -153,39 +161,39 @@ msgstr ""
msgid "Protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -197,7 +205,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -237,7 +245,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -247,11 +255,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/pl/upnp.po b/luci-app-upnp/po/pl/upnp.po
index b56192d29..83a926b3b 100644
--- a/luci-app-upnp/po/pl/upnp.po
+++ b/luci-app-upnp/po/pl/upnp.po
@@ -13,7 +13,7 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Interwał 900s doprowadzi do powiadomień %s z minimalnym czasem życia 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -31,7 +31,7 @@ msgstr ""
"Lista kontroli dostępu określa, które adresy i porty klientów mogą być "
"przekierowane. Protokół IPv6 jest zawsze dozwolony."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Akcja"
@@ -47,29 +47,33 @@ msgstr "Aktywne przekierowania portów UPnP IGD i PCP/NAT-PMP"
msgid "Advanced Settings"
msgstr "Ustawienia zaawansowane"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Rozgłaszaj jako urządzenie IGDv1 (bez IPv6) zamiast IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Zezwól"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Zezwól na dodawanie przekierowań tylko do odpytujących adresów IP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Zezwól na prywatny IPv4"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Rozgłaszany numer modelu"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Rozgłaszany numer seryjny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adres klienta"
@@ -80,11 +84,11 @@ msgstr "Nazwa klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port klienta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Komentarz"
@@ -94,7 +98,7 @@ msgstr "Komentarz"
msgid "Delete"
msgstr "Usuń"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Odmów"
@@ -103,11 +107,11 @@ msgstr "Odmów"
msgid "Description"
msgstr "Opis"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID urządzenia"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Prędkość pobierania"
@@ -119,11 +123,15 @@ msgstr "Włącz protokół PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Włącz protokół UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Włącz dodatkowe rejestrowanie"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Włącz przekierowanie dla prywatnego/zarezerwowanego adresu IPv4"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Włącz tryb bezpieczny"
@@ -134,7 +142,7 @@ msgstr "Wygasa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Port zewnętrzny"
@@ -142,11 +150,11 @@ msgstr "Port zewnętrzny"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Udziel dostępu do UPnP IGD i PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Interwał powiadamiania"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Adres URL prezentacji"
@@ -155,41 +163,41 @@ msgstr "Adres URL prezentacji"
msgid "Protocol"
msgstr "Protokół"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
"Umieszcza dodatkowe informacje dotyczące debugowania w dzienniku systemowym"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"Zgłaszaj niestandardowy adres URL interfejsu sieciowego (prezentacji) routera"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Zgłaszaj maksymalną prędkość pobierania w kB/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Zgłaszaj maksymalną prędkość wysyłania w kB/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Zgłaszaj czas pracy systemu zamiast czasu pracy usługi"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Port SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Host STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Port STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Lista kontroli dostępu usługi"
@@ -201,7 +209,7 @@ msgstr "Ustawienia usługi"
msgid "Service Setup"
msgstr "Konfiguracja usługi"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Plik dzierżawy usługi"
@@ -230,7 +238,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Nie ma aktywnych przekierowań portów."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -245,7 +253,7 @@ msgstr "UPnP IGD i PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Usługa UPnP IGD i PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Włącz tryb UPnP IGDv1"
@@ -255,11 +263,11 @@ msgstr "Włącz tryb UPnP IGDv1"
msgid "Unknown"
msgstr "Nieznany"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Prędkość wysyłania"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Użyj %s"
diff --git a/luci-app-upnp/po/pt/upnp.po b/luci-app-upnp/po/pt/upnp.po
index ad638836a..694e18ecd 100644
--- a/luci-app-upnp/po/pt/upnp.po
+++ b/luci-app-upnp/po/pt/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"Um intervalo de 900s resultará em %s notificações com o max-age mínimo de "
"1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"Os ACL especificam quais as portas externas que podem ser redirecionadas "
"para que endereços internos e portas, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Ação"
@@ -49,30 +49,34 @@ msgstr "Mapas de portas activos UPnP IGD e PCP/NAT-PMP"
msgid "Advanced Settings"
msgstr "Definições Avançadas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Anuncie como aparelho IGDv1 em vez de IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Permitir"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Permitir a adição de encaminhamentos apenas para solicitar endereços IP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Permitir IPv4 privado"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Número modelo anunciado"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Endereço do Cliente"
@@ -83,11 +87,11 @@ msgstr "Nome do cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Porta do Cliente"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Comentário"
@@ -97,7 +101,7 @@ msgstr "Comentário"
msgid "Delete"
msgstr "Apagar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Negar"
@@ -106,11 +110,11 @@ msgstr "Negar"
msgid "Description"
msgstr "Descrição"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID do aparelho"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Velocidade de descarga"
@@ -122,11 +126,15 @@ msgstr "Ativar protocolos PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Ativar protocolo UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Ativar log adicional"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Ativar encaminhamento para endereço IPv4 privado / reservado"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Ativar o modo seguro"
@@ -137,7 +145,7 @@ msgstr "Expira"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Porta externa"
@@ -145,11 +153,11 @@ msgstr "Porta externa"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Conceder acesso a UPnP IGD e PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervalo de Notificação"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL de apresentação"
@@ -158,39 +166,39 @@ msgstr "URL de apresentação"
msgid "Protocol"
msgstr "Protocolo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Põe informações de depuração extras no log do sistema"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "Relatar URL personalizada da interface web do roteador (apresentação)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Relatar a velocidade máxima de descarga em kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Relatar a velocidade máxima de upload em kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Relata uptime do sistema ao invés da do daemon"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Porta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Host STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Porta STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Lista de Controle de Acesso ao Serviço"
@@ -202,7 +210,7 @@ msgstr "Configurações do Serviço"
msgid "Service Setup"
msgstr "Configurações gerais"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Ficheiro de concessão do serviço"
@@ -230,7 +238,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Não há redirecionamentos ativos."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -245,7 +253,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Serviço UPnP IGD e PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Ativar o modo UPnP IGDv1"
@@ -255,11 +263,11 @@ msgstr "Ativar o modo UPnP IGDv1"
msgid "Unknown"
msgstr "Desconhecido"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Ligação ascendente"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Utilizar %s"
diff --git a/luci-app-upnp/po/pt_BR/upnp.po b/luci-app-upnp/po/pt_BR/upnp.po
index c168d54a2..3abe125e5 100644
--- a/luci-app-upnp/po/pt_BR/upnp.po
+++ b/luci-app-upnp/po/pt_BR/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 2026.6.dev0\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -25,7 +25,7 @@ msgstr ""
"Um intervalo de 900s resultará em %s notificações com o max-age mínimo de "
"1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -33,7 +33,7 @@ msgstr ""
"As ACL especificam quais portas externas podem ser encaminhadas para quais "
"endereços e portas de clientes, com IPv6 sempre será permitido."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Ação"
@@ -49,30 +49,34 @@ msgstr "Mapeamentos de portas UPnP IGD e PCP/NAT-PMP ativos"
msgid "Advanced Settings"
msgstr "Configurações Avançadas"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Anuncie-se como um dispositivo IGDv1 ao invés de um IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Permitir"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Permite adicionar encaminhamento apenas para o endereço IP requisitante"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Número do modelo anunciado"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Endereço do cliente"
@@ -83,11 +87,11 @@ msgstr "Nome do cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Porta do Cliente"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Comentário"
@@ -97,7 +101,7 @@ msgstr "Comentário"
msgid "Delete"
msgstr "Excluir"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Negar"
@@ -106,11 +110,11 @@ msgstr "Negar"
msgid "Description"
msgstr "Descrição"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID do Dispositivo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Velocidade de download"
@@ -122,11 +126,15 @@ msgstr "Habilitar protocolos PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Habilitar protocolo UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Habilite registros adicionais"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Habilite modo seguro"
@@ -137,7 +145,7 @@ msgstr "Expiração"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Porta externa"
@@ -145,11 +153,11 @@ msgstr "Porta externa"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Conceder acesso ao UPnP IGD e PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervalo de notificação"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL de Apresentação"
@@ -158,39 +166,39 @@ msgstr "URL de Apresentação"
msgid "Protocol"
msgstr "Protocolo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Envie informações extra de depuração ao registro do sistema"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "Relatar URL personalizada da interface web do roteador (apresentação)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Relatar a velocidade máxima de download em kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Relatar a velocidade máxima de upload em kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Informe o tempo de vida do sistema ao invés do tempo do processo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Porta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Host STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Porta STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Lista de Controle de Acesso ao Serviço"
@@ -202,7 +210,7 @@ msgstr "Configurações do Serviço"
msgid "Service Setup"
msgstr "Configuração do serviço"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Arquivo de concessão do serviço"
@@ -230,7 +238,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Não existe redirecionamentos ativos."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -245,7 +253,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Serviço UPnP IGD e PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Habilitar o modo UPnP IGDv1"
@@ -255,11 +263,11 @@ msgstr "Habilitar o modo UPnP IGDv1"
msgid "Unknown"
msgstr "Desconhecido"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Velocidade de envio (upload)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Use o %s"
diff --git a/luci-app-upnp/po/ro/upnp.po b/luci-app-upnp/po/ro/upnp.po
index 8dda6102d..1df44dcf9 100644
--- a/luci-app-upnp/po/ro/upnp.po
+++ b/luci-app-upnp/po/ro/upnp.po
@@ -9,11 +9,11 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : "
+"(n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.15-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,7 +24,7 @@ msgstr ""
"Un interval de 900s va rezulta în %s notificări cu durata maximă de viață de "
"1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"ACL-urile specifica porturile externe care pot fi redirectate si spre ce "
"adrese si porturi interne, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Acţiune"
@@ -48,29 +48,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Setări Avansate"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Publicitate ca dispozitiv IGDv1 în loc de IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Permite"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Permite adaugarea forward-urilor doar catre adresele IP solicitante"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Numărul modelului anunțat"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Număr de serie anunțat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adresa client"
@@ -81,11 +85,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port client"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Comentariu"
@@ -95,7 +99,7 @@ msgstr "Comentariu"
msgid "Delete"
msgstr "Ștergeți"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -104,11 +108,11 @@ msgstr ""
msgid "Description"
msgstr "Descriere"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID al dispozitivului"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Viteza de descărcare"
@@ -120,11 +124,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Activeaza log-area aditionala"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Activeaza modul securizat"
@@ -135,7 +143,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Port extern"
@@ -143,11 +151,11 @@ msgstr "Port extern"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Interval de notificare"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Adresa de prezentare"
@@ -156,39 +164,39 @@ msgstr "Adresa de prezentare"
msgid "Protocol"
msgstr "Protocol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Pune informatii utile suplimentare in log-ul de sistem"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Raporteaza timpul de functionare de sistem in loc de serviciu"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Gazda STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Portul STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -200,7 +208,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Setări generale"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -229,7 +237,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Nu exista redirecturi active."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -242,7 +250,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Activează modul UPnP IGDv1"
@@ -252,11 +260,11 @@ msgstr "Activează modul UPnP IGDv1"
msgid "Unknown"
msgstr "Necunoscut"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Viteza de încărcare"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Utilizați %s"
diff --git a/luci-app-upnp/po/ru/upnp.po b/luci-app-upnp/po/ru/upnp.po
index 477d6dff7..d787239cd 100644
--- a/luci-app-upnp/po/ru/upnp.po
+++ b/luci-app-upnp/po/ru/upnp.po
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: LuCI: upnp\n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2026-05-02 12:03+0000\n"
-"Last-Translator: SnIPeRSnIPeR "
-"\n"
+"Last-Translator: SnIPeRSnIPeR "
+"\n"
"Language-Team: Russian \n"
"Language: ru\n"
@@ -17,7 +17,7 @@ msgstr ""
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -28,7 +28,7 @@ msgstr ""
"Интервал 900 сек. приведет к появлению %s уведомлений с минимальным "
"максимальным возрастом 1800 сек"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -36,7 +36,7 @@ msgstr ""
"Список контроля доступа (ACL) определяет, какие клиентские адресы могут быть "
"перенаправлены, IPv6 всегда разрешён."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Действие"
@@ -52,29 +52,33 @@ msgstr "Активные карты портов UPnP IGD и PCP/NAT-PMP"
msgid "Advanced Settings"
msgstr "Расширенные настройки"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Объявить как IGDv1 устройство вместо IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Разрешить"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Разрешить перенаправление только для запрашивающих IP-адресов"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Разрешить частные IPv4-адреса"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Объявить номер модели"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Объявить серийный номер"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Адрес клиента"
@@ -85,11 +89,11 @@ msgstr "Имя клиента"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Порт клиента"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Комментарий"
@@ -99,7 +103,7 @@ msgstr "Комментарий"
msgid "Delete"
msgstr "Удалить"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Отказать"
@@ -108,11 +112,11 @@ msgstr "Отказать"
msgid "Description"
msgstr "Описание"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID устройства"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Скорость закачки"
@@ -124,11 +128,15 @@ msgstr "Включить протоколы PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Включить UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Дополнительное журналирование"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Включить переадресацию для частных и зарезервированных IPv4-адресов"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Защищённый режим"
@@ -139,7 +147,7 @@ msgstr "Истекает"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Внешний порт"
@@ -147,11 +155,11 @@ msgstr "Внешний порт"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Предоставить доступ к UPnP IGD и PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Интервал уведомления"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Задать URL-адрес"
@@ -160,40 +168,40 @@ msgstr "Задать URL-адрес"
msgid "Protocol"
msgstr "Протокол"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Добавлять дополнительную отладочную информацию в системный журнал"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"URL-адрес веб-интерфейса (презентации) пользовательского маршрутизатора"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Сообщать максимальную скорость загрузки в кБайт/с"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Сообщать максимальную скорость загрузки в кБайт/с"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Сообщать время работы системы вместо службы"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Порт SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Хост STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Порт STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Список контроля доступа к сервисам"
@@ -205,7 +213,7 @@ msgstr "Настройки сервиса"
msgid "Service Setup"
msgstr "Основные настройки"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Файл аренды сервиса"
@@ -234,7 +242,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Активные переадресации отсутствуют."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -249,7 +257,7 @@ msgstr "UPnP IGD и PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Сервис UPnP IGD и PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 режим"
@@ -259,11 +267,11 @@ msgstr "UPnP IGDv1 режим"
msgid "Unknown"
msgstr "Неизвестный"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Внешнее соединение"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Использовать %s"
diff --git a/luci-app-upnp/po/sk/upnp.po b/luci-app-upnp/po/sk/upnp.po
index bcab28e5a..6a4265a4e 100644
--- a/luci-app-upnp/po/sk/upnp.po
+++ b/luci-app-upnp/po/sk/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 4.0-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -21,13 +21,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Akcia"
@@ -43,29 +43,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Pokročilé nastavenia"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Umožniť pridanie preposielaní iba požadovaným adresám IP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Ohlásené číslo modelu"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Ohlásené sériové číslo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Adresa klienta"
@@ -76,11 +80,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Port klienta"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Komentár"
@@ -90,7 +94,7 @@ msgstr "Komentár"
msgid "Delete"
msgstr "Odstrániť"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -99,11 +103,11 @@ msgstr ""
msgid "Description"
msgstr "Popis"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID zariadenia"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -115,11 +119,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Povoliť dodatočné zaznamenávanie"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Povoliť zabezpečený režim"
@@ -130,7 +138,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Externý port"
@@ -138,11 +146,11 @@ msgstr "Externý port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Interval upozornení"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Prezentačná URL"
@@ -151,39 +159,39 @@ msgstr "Prezentačná URL"
msgid "Protocol"
msgstr "Protokol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -195,7 +203,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Všeobecné nastavenia"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -222,7 +230,7 @@ msgstr "%s umožňuje klientom v miestnej sieti automaticky nastaviť smerovač.
msgid "There are no active port maps."
msgstr "Neexistujú žiadne aktívne presmerovania."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -235,7 +243,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Povoliť režim UPnP IGDv1"
@@ -245,11 +253,11 @@ msgstr "Povoliť režim UPnP IGDv1"
msgid "Unknown"
msgstr "Neznáme"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/sv/upnp.po b/luci-app-upnp/po/sv/upnp.po
index f5a987a38..80f4db3c7 100644
--- a/luci-app-upnp/po/sv/upnp.po
+++ b/luci-app-upnp/po/sv/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgstr ""
"Ett 900s intervall kommer att resultera i %s notifieringar med minimum "
"maxålder på 1800s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -31,7 +31,7 @@ msgstr ""
"ACL:er anger vilka externa portar som ska omdirigeras till vilka interna "
"adresser och portar, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Åtgärd"
@@ -47,29 +47,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Avancerade inställningar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Annonsera som IGDv1-enhet (ingen IPv6) istället för IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Tillåt"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Aviserat modellnummer"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Aviserat serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Klient-adress"
@@ -80,11 +84,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Klient-port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Kommentar"
@@ -94,7 +98,7 @@ msgstr "Kommentar"
msgid "Delete"
msgstr "Radera"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Neka"
@@ -103,11 +107,11 @@ msgstr "Neka"
msgid "Description"
msgstr "Beskrivning"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Enhetens UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Hämtningshastighet"
@@ -119,11 +123,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Aktivera ytterligare loggning"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Aktivera säkert läge"
@@ -134,7 +142,7 @@ msgstr "Utgår"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Extern port"
@@ -142,11 +150,11 @@ msgstr "Extern port"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Tillåt åtkomst till UPnP IGD & PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Intervall för avisering"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Presentationens URL"
@@ -155,39 +163,39 @@ msgstr "Presentationens URL"
msgid "Protocol"
msgstr "Protokoll"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Lägger extra felsökningsinformation till system-loggen"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Rapportera systemet iställer för demonens upptid"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN-värd"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN-port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -199,7 +207,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Generella inställningar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -228,7 +236,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Det finns inga aktiva omdirigeringar."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -241,7 +249,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Aktivera UPnP IGDv1-läge"
@@ -251,11 +259,11 @@ msgstr "Aktivera UPnP IGDv1-läge"
msgid "Unknown"
msgstr "Okänd"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Uppladdningshastighet"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Använd %s"
diff --git a/luci-app-upnp/po/ta/upnp.po b/luci-app-upnp/po/ta/upnp.po
index 246c68f06..8be0643f4 100644
--- a/luci-app-upnp/po/ta/upnp.po
+++ b/luci-app-upnp/po/ta/upnp.po
@@ -10,7 +10,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"900 களின் இடைவெளி 1800 களின் குறைந்தபட்ச அதிகபட்ச வயதுடன் %s அறிவிப்புகளை ஏற்படுத்தும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -28,7 +28,7 @@ msgstr ""
"எந்த கிளையன்ட் முகவரிகள் மற்றும் துறைமுகங்களை வரைபடமாக்க முடியும் என்பதைக் குறிப்பிடவும், "
"ஐபிவி 6 எப்போதும் அனுமதிக்கப்படுகிறது."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "செயல்"
@@ -44,29 +44,33 @@ msgstr "ஆக்டிவ் யுபிஎன்பி ஐ.சி.டி &
msgid "Advanced Settings"
msgstr "மேம்பட்ட அமைப்புகள்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "IGDV2 க்கு பதிலாக IGDV1 (IPV4 மட்டும்) சாதனமாக விளம்பரம் செய்யுங்கள்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "இசைவு"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "ஐபி முகவரிகளைக் கோருவதற்கு துறைமுகம் வரைபடங்களைச் சேர்க்க அனுமதிக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "மாதிரி எண் அறிவிக்கப்பட்டது"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "அறிவிக்கப்பட்ட வரிசை எண்"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "வாடிக்கையாளர் முகவரி"
@@ -77,11 +81,11 @@ msgstr "கிளையன்ட் பெயர்"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "வாங்கி துறைமுகம்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "கருத்து"
@@ -91,7 +95,7 @@ msgstr "கருத்து"
msgid "Delete"
msgstr "நீக்கு"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "மறுக்கவும்"
@@ -100,11 +104,11 @@ msgstr "மறுக்கவும்"
msgid "Description"
msgstr "விவரம்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "சாதனம் uuid"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "பதிவிறக்க விரைவு"
@@ -116,11 +120,15 @@ msgstr "PCP/NAT-PMP நெறிமுறைகளை இயக்கவும
msgid "Enable UPnP IGD protocol"
msgstr "UPNP IGD நெறிமுறையை இயக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "கூடுதல் பதிவுகளை இயக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "பாதுகாப்பான பயன்முறையை இயக்கவும்"
@@ -131,7 +139,7 @@ msgstr "காலாவதியாகிறது"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "வெளிப்புற துறைமுகம்"
@@ -139,11 +147,11 @@ msgstr "வெளிப்புற துறைமுகம்"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "UPNP IGD & PCP/NAT-PMP க்கு அணுகல் வழங்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "இடைவெளியை அறிவிக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "விளக்கக்காட்சி முகவரி"
@@ -152,39 +160,39 @@ msgstr "விளக்கக்காட்சி முகவரி"
msgid "Protocol"
msgstr "நெறிமுறை"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "கூடுதல் பிழைத்திருத்த தகவல்களை கணினி பதிவில் வைக்கிறது"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "தனிப்பயன் திசைவி வலை இடைமுகம் (விளக்கக்காட்சி) முகவரி ஐப் புகாரளிக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "KByte/s இல் அதிகபட்ச பதிவிறக்க வேகத்தைப் புகாரளிக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "KByte/s இல் அதிகபட்ச பதிவேற்ற வேகத்தைப் புகாரளிக்கவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "பணி நேரம் நேரத்திற்கு பதிலாக அறிக்கை முறை"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP துறைமுகம்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "ச்டன் புரவலன்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "ச்டன் துறைமுகம்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "பணி அணுகல் கட்டுப்பாட்டு பட்டியல்"
@@ -196,7 +204,7 @@ msgstr "பணி அமைப்புகள்"
msgid "Service Setup"
msgstr "பணி அமைப்பு"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "பணி குத்தகை கோப்பு"
@@ -225,7 +233,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "செயலில் உள்ள துறைமுகம் வரைபடங்கள் எதுவும் இல்லை."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -239,7 +247,7 @@ msgstr "UPNP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPNP IGD & PCP/NAT-PMP பணி"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPNP IGDV1 பொருந்தக்கூடிய பயன்முறை"
@@ -249,11 +257,11 @@ msgstr "UPNP IGDV1 பொருந்தக்கூடிய பயன்மு
msgid "Unknown"
msgstr "தெரியவில்லை"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "வேகத்தை பதிவேற்றவும்"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "%s பயன்படுத்தவும்"
diff --git a/luci-app-upnp/po/templates/upnp.pot b/luci-app-upnp/po/templates/upnp.pot
index 3a1dc9419..010901252 100644
--- a/luci-app-upnp/po/templates/upnp.pot
+++ b/luci-app-upnp/po/templates/upnp.pot
@@ -1,7 +1,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -10,13 +10,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr ""
@@ -32,29 +32,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -65,11 +69,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr ""
@@ -79,7 +83,7 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -88,11 +92,11 @@ msgstr ""
msgid "Description"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -104,11 +108,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -119,7 +127,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -127,11 +135,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -140,39 +148,39 @@ msgstr ""
msgid "Protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -184,7 +192,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -211,7 +219,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -224,7 +232,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -234,11 +242,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/tr/upnp.po b/luci-app-upnp/po/tr/upnp.po
index e7bf9ca03..984dbfabd 100644
--- a/luci-app-upnp/po/tr/upnp.po
+++ b/luci-app-upnp/po/tr/upnp.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17.1-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -23,7 +23,7 @@ msgstr ""
"900 saniyelik bir aralık 1800 saniyelik en düşük azami yaş değeriyle %s "
"bildirimle sonuçlanacaktır"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"bağlantı noktalarına yeniden yönlendirilebileceğini belirtir, IPv6 always "
"allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Eylem"
@@ -48,29 +48,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Gelişmiş Ayarlar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "IGDv2 yerine IGDv1 aygıtı olarak duyuru yap"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "İzin ver"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Yalnızca istekte bulunan IP adreslerine yönlendirme eklemeye izin ver"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Açıklanan model numarası"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Açıklanan seri numarası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "İstemci Adresi"
@@ -81,11 +85,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "İstemci Bağlantı Noktası"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Yorum"
@@ -95,7 +99,7 @@ msgstr "Yorum"
msgid "Delete"
msgstr "Sil"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Reddet"
@@ -104,11 +108,11 @@ msgstr "Reddet"
msgid "Description"
msgstr "Açıklama"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Aygıt UUID'si"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "İndirme hızı"
@@ -120,11 +124,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Ek günlük kaydını etkinleştir"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Güvenli modu etkinleştir"
@@ -135,7 +143,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Harici Bağlantı Noktası"
@@ -143,11 +151,11 @@ msgstr "Harici Bağlantı Noktası"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Bildirme aralığı"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Sunum URL'si"
@@ -156,39 +164,39 @@ msgstr "Sunum URL'si"
msgid "Protocol"
msgstr "Protokol"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Sistem günlüğüne fazladan hata ayıklama bilgisi koyar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Arka plan programı çalışma süresi yerine sistemi rapor et"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Bağlantı noktası"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN Ana Bilgisayarı"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN Bağlantı Noktası"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -200,7 +208,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Genel Ayarlar"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -229,7 +237,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Etkin yönlendirme yok."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -242,7 +250,7 @@ msgstr "UPnP IGD ve PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 modunu etkinleştir"
@@ -252,11 +260,11 @@ msgstr "UPnP IGDv1 modunu etkinleştir"
msgid "Unknown"
msgstr "Bilinmiyor"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Yükleme hızı"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "%s kullan"
diff --git a/luci-app-upnp/po/uk/upnp.po b/luci-app-upnp/po/uk/upnp.po
index 1432e5536..8194bc8a5 100644
--- a/luci-app-upnp/po/uk/upnp.po
+++ b/luci-app-upnp/po/uk/upnp.po
@@ -13,7 +13,7 @@ msgstr ""
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 2026.5-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,7 +24,7 @@ msgstr ""
"Інтервал у 900 секунд призведе до %s сповіщень із мінімальним максимальним "
"часом дії у 1800 секунд"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -32,7 +32,7 @@ msgstr ""
"Список контролю доступу (ACL) визначає, які адреси й порти клієнтів можуть "
"переспрямовуватися; для IPv6 завжди дозволено."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Дія"
@@ -48,30 +48,34 @@ msgstr "Активні переспрямування портів UPnP IGD & PC
msgid "Advanced Settings"
msgstr "Розширені налаштування"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Оголошувати як пристрій IGDv1 замість IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "Дозволити"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
"Дозволити додавання переспрямування тільки для IP-адрес, що надсилають запити"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "Дозволити приватні IPv4"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Оголошуваний номер моделі"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Оголошуваний серійний номер"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Адреса клієнта"
@@ -82,11 +86,11 @@ msgstr "Імʼя клієнта"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Порт клієнта"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Примітка"
@@ -96,7 +100,7 @@ msgstr "Примітка"
msgid "Delete"
msgstr "Видалити"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "Заборонити"
@@ -105,11 +109,11 @@ msgstr "Заборонити"
msgid "Description"
msgstr "Опис"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "UUID пристрою"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Швидкість завантаження"
@@ -121,11 +125,15 @@ msgstr "Увімкнути протоколи PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "Увімкнути протокол UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Увімкнути додаткове журналювання"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "Увімкнути переспрямування для приватних/зарезервованих IPv4-адрес"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Увімкнути захищений режим"
@@ -136,7 +144,7 @@ msgstr "Термін дії закінчується"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Зовнішній порт"
@@ -144,11 +152,11 @@ msgstr "Зовнішній порт"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "Надати доступ до UPnP IGD & PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Інтервал сповіщення"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "URL презентації"
@@ -157,41 +165,41 @@ msgstr "URL презентації"
msgid "Protocol"
msgstr "Протокол"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Записує додаткову інформацію для налагодження у системний журнал"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
"Повідомляти користувацьку URL-адресу вебінтерфейсу маршрутизатора "
"(презентації)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "Повідомляти максимальну швидкість завантаження у кбайт/с"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "Повідомляти максимальну швидкість вивантаження у кбайт/с"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Повідомляти час безвідмовної роботи системи, а не служби"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Порт SOAP/HTTP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "Вузол STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "Порт STUN"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Список контролю доступу до служби"
@@ -203,7 +211,7 @@ msgstr "Налаштування служби"
msgid "Service Setup"
msgstr "Загальні налаштування"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "Файл оренди служби"
@@ -232,7 +240,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Немає активних переспрямувань."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -247,7 +255,7 @@ msgstr "UPnP IGD та PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "Служба UPnP IGD та PCP/NAT-PMP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Режим сумісності UPnP IGDv1"
@@ -257,11 +265,11 @@ msgstr "Режим сумісності UPnP IGDv1"
msgid "Unknown"
msgstr "Невідомо"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "Швидкість вивантаження"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Використовувати %s"
diff --git a/luci-app-upnp/po/vi/upnp.po b/luci-app-upnp/po/vi/upnp.po
index 141fd6c35..a77c8ccdc 100644
--- a/luci-app-upnp/po/vi/upnp.po
+++ b/luci-app-upnp/po/vi/upnp.po
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
#, fuzzy
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
@@ -26,7 +26,7 @@ msgstr ""
"Khoảng thời gian 900 giây sẽ dẫn đến thông báo %s với độ tuổi tối thiểu là "
"1800 giây"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
@@ -34,7 +34,7 @@ msgstr ""
"ACL chỉ định cổng bên ngoài nào có thể được chuyển hướng đến địa chỉ và cổng "
"nội bộ nào, IPv6 always allowed."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "Hành động"
@@ -50,29 +50,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr "Cài đặt Nâng cao"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "Quảng cáo dưới dạng thiết bị IGDv1 thay vì IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "Chỉ cho phép thêm chuyển tiếp để yêu cầu địa chỉ IP"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "Announced model number"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "Announced serial number"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "Client Address"
@@ -83,11 +87,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "Client Port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "Bình luận"
@@ -97,7 +101,7 @@ msgstr "Bình luận"
msgid "Delete"
msgstr "Xoá"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -106,11 +110,11 @@ msgstr ""
msgid "Description"
msgstr "Mô tả"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "Device UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "Download speed"
@@ -122,11 +126,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "Bật ghi nhật ký bổ sung"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "Kích hoạt chế độ an toàn"
@@ -137,7 +145,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "Cổng bên ngoài"
@@ -145,11 +153,11 @@ msgstr "Cổng bên ngoài"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "Vòng lặp thông báo"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "Presentation URL"
@@ -158,39 +166,39 @@ msgstr "Presentation URL"
msgid "Protocol"
msgstr "Giao thức"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "Đưa thông tin sửa lỗi bổ sung vào nhật ký hệ thống"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "Hệ thống báo cáo thay vì thời gian hoạt động của daemon"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "Cổng"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN host"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN port"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "Service Access Control List"
@@ -202,7 +210,7 @@ msgstr ""
msgid "Service Setup"
msgstr "Các cài đặt chung"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -230,7 +238,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr "Không có chuyển hướng đang hoạt động."
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -243,7 +251,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD & PCP/NAT-PMP Service"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "Kích hoạt chế độ UPnP IGDv1"
@@ -253,12 +261,12 @@ msgstr "Kích hoạt chế độ UPnP IGDv1"
msgid "Unknown"
msgstr "Không xác định"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
#, fuzzy
msgid "Upload speed"
msgstr "Tốc độ tải lên"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "Sử dụng %s"
diff --git a/luci-app-upnp/po/yua/upnp.po b/luci-app-upnp/po/yua/upnp.po
index dfc442edb..1ca02524a 100644
--- a/luci-app-upnp/po/yua/upnp.po
+++ b/luci-app-upnp/po/yua/upnp.po
@@ -13,7 +13,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.3-dev\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -22,13 +22,13 @@ msgid ""
"1800s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr ""
@@ -44,29 +44,33 @@ msgstr ""
msgid "Advanced Settings"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
-msgid "Announced model number"
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+msgid "Announced model number"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr ""
@@ -77,11 +81,11 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr ""
@@ -91,7 +95,7 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr ""
@@ -100,11 +104,11 @@ msgstr ""
msgid "Description"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr ""
@@ -116,11 +120,15 @@ msgstr ""
msgid "Enable UPnP IGD protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr ""
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr ""
@@ -131,7 +139,7 @@ msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr ""
@@ -139,11 +147,11 @@ msgstr ""
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr ""
@@ -152,39 +160,39 @@ msgstr ""
msgid "Protocol"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr ""
@@ -196,7 +204,7 @@ msgstr ""
msgid "Service Setup"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr ""
@@ -223,7 +231,7 @@ msgstr ""
msgid "There are no active port maps."
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -236,7 +244,7 @@ msgstr ""
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr ""
@@ -246,11 +254,11 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr ""
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr ""
diff --git a/luci-app-upnp/po/zh_Hans/upnp.po b/luci-app-upnp/po/zh_Hans/upnp.po
index 4da1f25d5..883a0ce28 100644
--- a/luci-app-upnp/po/zh_Hans/upnp.po
+++ b/luci-app-upnp/po/zh_Hans/upnp.po
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -27,13 +27,13 @@ msgid ""
"1800s"
msgstr "当通知间隔为 900 秒时,%s 通知的最小 max-age 为 1800 秒"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr "ACL 用来限制哪些客户端地址和端口可以被映射,IPv6 始终被允许。"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "操作"
@@ -49,29 +49,33 @@ msgstr "当前生效的 UPnP IGD 和 PCP/NAT-PMP 端口映射"
msgid "Advanced Settings"
msgstr "高级设置"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "将设备标识为 IGDv1(仅IPv4)设备,而不是 IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "允许"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "仅允许为发起请求的 IP 地址添加端口映射"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "允许 IPv4 内网地址"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "通告的设备型号"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "通告的设备序列号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "客户端地址"
@@ -82,11 +86,11 @@ msgstr "客户端名称"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "客户端端口"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "注释"
@@ -96,7 +100,7 @@ msgstr "注释"
msgid "Delete"
msgstr "删除"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "拒绝"
@@ -105,11 +109,11 @@ msgstr "拒绝"
msgid "Description"
msgstr "描述"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "设备 UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "下行带宽"
@@ -121,11 +125,15 @@ msgstr "启用 PCP/NAT-PMP 协议"
msgid "Enable UPnP IGD protocol"
msgstr "启用 UPnP IGD 协议"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "启用额外的日志"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "允许转发 IPv4 内网/保留地址"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "启用安全模式"
@@ -136,25 +144,19 @@ msgstr "剩余有效期"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "外部端口"
-msgid "Force forwarding"
-msgstr "强制转发"
-
-msgid "Force forwarding ports even the network is behind NAT"
-msgstr "即使网络位于 NAT 之后,也强制转发端口"
-
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "授予访问 UPnP IGD 及 PCP/NAT-PMP 的权限"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "通知间隔"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "服务网址"
@@ -163,39 +165,39 @@ msgstr "服务网址"
msgid "Protocol"
msgstr "协议"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "将额外的调试信息输出到系统日志中"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "自定义路由器网页界面(展示页面)网址"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "向客户端通告的最大下载速度 kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "向客户端通告的最大上传速度 kByte/s"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "用系统运行时间代替进程运行时间"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP 端口"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN 主机"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN 端口"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "服务访问控制列表"
@@ -207,7 +209,7 @@ msgstr "服务设置"
msgid "Service Setup"
msgstr "常规设置"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "服务租约文件"
@@ -234,7 +236,7 @@ msgstr "%s 协议允许本地网络上的客户端自主配置路由器上的端
msgid "There are no active port maps."
msgstr "当前没有生效的端口映射。"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr ""
@@ -249,7 +251,7 @@ msgstr "UPnP IGD 和 PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD 和 PCP/NAT-PMP 服务"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 兼容模式"
@@ -259,11 +261,11 @@ msgstr "UPnP IGDv1 兼容模式"
msgid "Unknown"
msgstr "未知"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "上行带宽"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "使用 %s"
diff --git a/luci-app-upnp/po/zh_Hant/upnp.po b/luci-app-upnp/po/zh_Hant/upnp.po
index 5071f4bb7..6b53cecaa 100644
--- a/luci-app-upnp/po/zh_Hant/upnp.po
+++ b/luci-app-upnp/po/zh_Hant/upnp.po
@@ -15,7 +15,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.17.1\n"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:183
msgctxt ""
"A 900s interval will result in %s (%s = SSDP) notifications with the minimum "
"max-age of 1800s"
@@ -24,13 +24,13 @@ msgid ""
"1800s"
msgstr "最小 max-age 為 1800 秒,此時每隔 900 秒將產生 %s 個通知"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:216
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:219
msgid ""
"ACL specify which client addresses and ports can be mapped, IPv6 always "
"allowed."
msgstr "ACL 指定可被映射的用戶端位址和連接埠,IPv6 始終允許。"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:235
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:238
msgid "Action"
msgstr "動作"
@@ -46,29 +46,33 @@ msgstr "活動的 UPnP IGD & PCP/NAT-PMP 連接埠映射"
msgid "Advanced Settings"
msgstr "進階設定"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:151
msgid "Advertise as IGDv1 (IPv4 only) device instead of IGDv2"
msgstr "通告為 IGDv1 (僅 IPv4) 裝置而非 IGDv2"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:236
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:239
msgid "Allow"
msgstr "允許"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:175
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:178
msgid "Allow adding port maps for requesting IP addresses only"
msgstr "僅允許為請求的 IP 位址新增連接埠映射"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+msgid "Allow private IPv4"
+msgstr "允許私有 IPv4"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Announced model number"
msgstr "宣告的型號"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
msgid "Announced serial number"
msgstr "宣告的序列號"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:41
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:99
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:223
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:226
msgid "Client Address"
msgstr "用戶端位址"
@@ -79,11 +83,11 @@ msgstr "用戶端名稱"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:42
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:227
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:230
msgid "Client Port"
msgstr "用戶端連接埠"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:221
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:224
msgid "Comment"
msgstr "註解"
@@ -93,7 +97,7 @@ msgstr "註解"
msgid "Delete"
msgstr "刪除"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:237
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:240
msgid "Deny"
msgstr "拒絕"
@@ -102,11 +106,11 @@ msgstr "拒絕"
msgid "Description"
msgstr "描述"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:196
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:199
msgid "Device UUID"
msgstr "裝置 UUID"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:153
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Download speed"
msgstr "下載速度"
@@ -118,11 +122,15 @@ msgstr "啟用 PCP/NAT-PMP"
msgid "Enable UPnP IGD protocol"
msgstr "啟用 UPnP IGD"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:209
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
msgid "Enable additional logging"
msgstr "啟用額外紀錄"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:174
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
+msgid "Enable forwarding for private/reserved IPv4 address"
+msgstr "啟用私有/保留 IPv4 位址轉送"
+
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:177
msgid "Enable secure mode"
msgstr "啟用安全模式"
@@ -133,7 +141,7 @@ msgstr "過期"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:101
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:231
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:234
msgid "External Port"
msgstr "外部連接埠"
@@ -141,11 +149,11 @@ msgstr "外部連接埠"
msgid "Grant access to UPnP IGD & PCP/NAT-PMP"
msgstr "授予存取 UPnP IGD & PCP/NAT-PMP 的權限"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:179
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid "Notify interval"
msgstr "通知間隔"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:191
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Presentation URL"
msgstr "簡報 URL"
@@ -154,39 +162,39 @@ msgstr "簡報 URL"
msgid "Protocol"
msgstr "協定"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:210
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:213
msgid "Puts extra debugging information into the system log"
msgstr "將額外的除錯資訊寫入系統紀錄"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:192
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:195
msgid "Report custom router web interface (presentation) URL"
msgstr "報告路由器 web 介面自訂 (簡報) URL"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:154
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
msgid "Report maximum download speed in kByte/s"
msgstr "報告最大下載速度 (kByte/s)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:158
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
msgid "Report maximum upload speed in kByte/s"
msgstr "報告最大上傳速度 (kByte/s)"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:205
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:208
msgid "Report system instead of service uptime"
msgstr "報告系統上線時間而非服務上線時間"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:186
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:189
msgid "SOAP/HTTP port"
msgstr "SOAP/HTTP 連接埠"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:165
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:168
msgid "STUN host"
msgstr "STUN 主機"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:169
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN port"
msgstr "STUN 連接埠"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:218
msgid "Service Access Control List"
msgstr "服務存取控制清單"
@@ -198,7 +206,7 @@ msgstr "服務設定"
msgid "Service Setup"
msgstr "服務設定"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:212
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:215
msgid "Service lease file"
msgstr "服務租約檔案"
@@ -225,7 +233,7 @@ msgstr "%s 協定允許本地網路中的用戶端在路由器自動配置連接
msgid "There are no active port maps."
msgstr "無活動的連接埠映射。"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:163
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:166
msgid ""
"To detect the public IPv4 address for unrestricted full-cone/one-to-one NATs"
msgstr "偵測不受限制的全錐/一對一 NAT 的公共 IPv4 位址"
@@ -238,7 +246,7 @@ msgstr "UPnP IGD & PCP"
msgid "UPnP IGD & PCP/NAT-PMP Service"
msgstr "UPnP IGD & PCP/NAT-PMP 服務"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:147
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "UPnP IGDv1 compatibility mode"
msgstr "UPnP IGDv1 相容模式"
@@ -248,11 +256,11 @@ msgstr "UPnP IGDv1 相容模式"
msgid "Unknown"
msgstr "未知"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:157
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Upload speed"
msgstr "上傳速度"
-#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:161
+#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgctxt "Use %s (%s = STUN)"
msgid "Use %s"
msgstr "使用 %s"
diff --git a/luci-app-upnp/root/usr/share/rpcd/ucode/luci.upnp b/luci-app-upnp/root/usr/share/rpcd/ucode/luci.upnp
index f777f165b..b9bf72809 100644
--- a/luci-app-upnp/root/usr/share/rpcd/ucode/luci.upnp
+++ b/luci-app-upnp/root/usr/share/rpcd/ucode/luci.upnp
@@ -9,16 +9,14 @@ import { access, open, popen } from 'fs';
import { connect } from 'ubus';
import { cursor } from 'uci';
-const uci = cursor();
-const leasefilepath = uci.get('upnpd', 'config', 'upnp_lease_file') || '/var/run/miniupnpd.leases';
-
const methods = {
get_status: {
call: function(req) {
+ const uci = cursor();
const ubus = connect();
const rules = [];
const leases = [];
- const leasefile = open(leasefilepath, 'r');
+ const leasefile = open(uci.get('upnpd', 'settings', 'lease_file') || '/var/run/miniupnpd.leases', 'r');
if (leasefile) {
for (let line = leasefile.read('line'); length(line); line = leasefile.read('line')) {
const record = split(line, ':', 6);
@@ -61,6 +59,23 @@ const methods = {
}
}
ipt.close();
+
+ const iptipv6 = popen('ip6tables --line-numbers -xnvL MINIUPNPD 2>/dev/null');
+ if (iptipv6) {
+ for (let line = iptipv6.read('line'); length(line); line = iptipv6.read('line')) {
+ let m = match(line, /^([0-9]+) .+ ([0-9a-f:]+) ([ut].p) dpt:([0-9]+)/);
+ if (m) {
+ push(rules, {
+ num: '0',
+ intaddr: arrtoip(iptoarr(m[2])),
+ intport: +m[4],
+ extport: +m[4],
+ proto: uc(m[3])
+ });
+ }
+ }
+ iptipv6.close();
+ }
}
const nft = popen('nft --handle list chain inet fw4 upnp_prerouting 2>/dev/null');
@@ -79,6 +94,27 @@ const methods = {
}
}
nft.close();
+
+ const nftipv6 = popen('nft --handle list chain inet fw4 upnp_forward 2>/dev/null');
+ if (nftipv6) {
+ for (let line = nftipv6.read('line'), num = 1; length(line); line = nftipv6.read('line')) {
+ let m = match(line, /^\t\tiif ".+" th dport ([0-9]+) @nh,192,128 0x([0-9a-f]+) @nh,48,8 (0x6|0x11) accept/);
+ if (m) {
+ push(rules, {
+ num: '0',
+ intaddr: arrtoip(iptoarr(join(':', [substr(m[2], 0, 4),
+ substr(m[2], 4, 4), substr(m[2], 8, 4), substr(m[2], 12, 4), substr(m[2], 16, 4),
+ substr(m[2], 20, 4), substr(m[2], 24, 4), substr(m[2], 28, 4)
+ ]))),
+ intport: +m[1],
+ extport: +m[1],
+ proto: (m[3] == '0x6') ? 'TCP' : 'UDP'
+ });
+ num++;
+ }
+ }
+ nftipv6.close();
+ }
}
return ubus.defer('luci-rpc', 'getHostHints', {}, function(rc, host_hints) {
@@ -94,7 +130,7 @@ const methods = {
}
}
for (let mac, hint in host_hints) {
- if (rule.intaddr in hint.ipaddrs) {
+ if (rule.intaddr in hint.ipaddrs || rule.intaddr in hint.ip6addrs) {
rule.host_hint = hint.name;
break;
}
@@ -110,8 +146,10 @@ const methods = {
call: function(req) {
const idx = +req.args?.token;
if (idx > 0) {
- if (access(leasefilepath)) {
- system(['sed', '-i', '-e', `${idx}d`, leasefilepath]);
+ const uci = cursor();
+ const leasefile = uci.get('upnpd', 'settings', 'lease_file') || '/var/run/miniupnpd.leases';
+ if (access(leasefile)) {
+ system(['sed', '-i', '-e', `${idx}d`, leasefile]);
system(['/etc/init.d/miniupnpd', 'restart']);
}
return { result: 'OK' };
diff --git a/miniupnpd/Makefile b/miniupnpd/Makefile
index ce8dd3350..720e789e5 100644
--- a/miniupnpd/Makefile
+++ b/miniupnpd/Makefile
@@ -8,8 +8,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=miniupnpd
-PKG_VERSION:=2.3.9
-PKG_RELEASE:=5
+PKG_VERSION:=2.3.10
+PKG_RELEASE:=6
PKG_SOURCE_URL:=https://github.com/miniupnp/miniupnp/releases/download/miniupnpd_$(subst .,_,$(PKG_VERSION))
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
@@ -100,13 +100,14 @@ define Package/miniupnpd/install/Default
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/miniupnpd $(1)/usr/sbin/miniupnpd
$(INSTALL_BIN) ./files/miniupnpd.init $(1)/etc/init.d/miniupnpd
+ $(INSTALL_BIN) ./files/upnpd-migration.uci-defaults $(1)/etc/uci-defaults/99-miniupnpd-upnpd-migration
$(INSTALL_CONF) ./files/upnpd.config $(1)/etc/config/upnpd
$(INSTALL_DATA) ./files/miniupnpd.hotplug $(1)/etc/hotplug.d/iface/50-miniupnpd
- $(INSTALL_BIN) ./files/miniupnpd.defaults.migration $(1)/etc/uci-defaults/99-miniupnpd-migration
endef
define Package/miniupnpd-iptables/install
$(call Package/miniupnpd/install/Default,$1)
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DIR) $(1)/usr/share/miniupnpd
$(INSTALL_BIN) ./files/miniupnpd.defaults.iptables $(1)/etc/uci-defaults/99-miniupnpd
$(INSTALL_DATA) ./files/firewall3.include $(1)/usr/share/miniupnpd/firewall.include
diff --git a/miniupnpd/files/firewall3.include b/miniupnpd/files/firewall3.include
index 4fd483974..8fc2144db 100644
--- a/miniupnpd/files/firewall3.include
+++ b/miniupnpd/files/firewall3.include
@@ -20,39 +20,39 @@ iptables_prepend_rule() {
local chain="$3"
local target="$4"
- $iptables "$IPTARGS" -t "$table" -I "$chain" $($iptables "$IPTARGS" -t "$table" --line-numbers -nL "$chain" | \
+ $iptables "$IPTARGS" -t "$table" -I "$chain" $($iptables "$IPTARGS" -t "$table" --line-numbers -nL "$chain" |
sed -ne '$s/[^0-9].*//p') -j "$target"
}
ADDED=0
add_extzone_rules() {
- local ext_zone="$1"
+ local ext_zone="$1"
- [ -z "$ext_zone" ] && return
+ [ -z "$ext_zone" ] && return
- # IPv4 - due to NAT, need to add both to nat and filter table
- # need to insert as penultimate rule for input & forward & postrouting since final rule might be a fw3 REJECT
- iptables_prepend_rule "$IPTABLES" filter "zone_${ext_zone}_input" MINIUPNPD
- iptables_prepend_rule "$IPTABLES" filter "zone_${ext_zone}_forward" MINIUPNPD
- $IPTABLES -t nat -A "zone_${ext_zone}_prerouting" -j MINIUPNPD
- iptables_prepend_rule "$IPTABLES" nat "zone_${ext_zone}_postrouting" MINIUPNPD-POSTROUTING
+ # IPv4 - due to NAT, need to add both to nat and filter table
+ # need to insert as penultimate rule for input & forward & postrouting since final rule might be a fw3 REJECT
+ iptables_prepend_rule "$IPTABLES" filter "zone_${ext_zone}_input" MINIUPNPD
+ iptables_prepend_rule "$IPTABLES" filter "zone_${ext_zone}_forward" MINIUPNPD
+ $IPTABLES -t nat -A "zone_${ext_zone}_prerouting" -j MINIUPNPD
+ iptables_prepend_rule "$IPTABLES" nat "zone_${ext_zone}_postrouting" MINIUPNPD-POSTROUTING
- # IPv6 if available - filter only
- [ -x $IP6TABLES ] && {
- iptables_prepend_rule "$IP6TABLES" filter "zone_${ext_zone}_input" MINIUPNPD
- iptables_prepend_rule "$IP6TABLES" filter "zone_${ext_zone}_forward" MINIUPNPD
- }
- ADDED=$(($ADDED + 1))
+ # IPv6 if available - filter only
+ [ -x $IP6TABLES ] && {
+ iptables_prepend_rule "$IP6TABLES" filter "zone_${ext_zone}_input" MINIUPNPD
+ iptables_prepend_rule "$IP6TABLES" filter "zone_${ext_zone}_forward" MINIUPNPD
+ }
+ ADDED=$(($ADDED + 1))
}
# By default, user configuration is king.
-for ext_iface in $(uci -q get upnpd.config.external_iface); do
- add_extzone_rules $(fw3 -q network "$ext_iface")
+for ext_iface in $(uci -q get upnpd.settings.external_iface); do
+ add_extzone_rules $(fw3 -q network "$ext_iface")
done
-add_extzone_rules $(uci -q get upnpd.config.external_zone)
+add_extzone_rules $(uci -q get upnpd.settings.external_zone)
[ "$ADDED" -ne 0 ] && exit 0
@@ -66,7 +66,7 @@ network_find_wan wan_iface
network_find_wan6 wan6_iface
for ext_iface in $wan_iface $wan6_iface; do
- # fw3 -q network fails on sub-interfaces => map to device first
- network_get_device ext_device $ext_iface
- add_extzone_rules $(fw3 -q device "$ext_device")
+ # fw3 -q network fails on sub-interfaces => map to device first
+ network_get_device ext_device $ext_iface
+ add_extzone_rules $(fw3 -q device "$ext_device")
done
diff --git a/miniupnpd/files/miniupnpd.defaults.migration b/miniupnpd/files/miniupnpd.defaults.migration
deleted file mode 100644
index 249200ab8..000000000
--- a/miniupnpd/files/miniupnpd.defaults.migration
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-if uci -q get upnpd.config.force_forwarding; then
- uci -q rename upnpd.config.force_forwarding=ext_allow_private_ipv4
- uci -q commit upnpd
-fi
-
-exit 0
diff --git a/miniupnpd/files/miniupnpd.hotplug b/miniupnpd/files/miniupnpd.hotplug
index 607a32bdc..e86097e86 100644
--- a/miniupnpd/files/miniupnpd.hotplug
+++ b/miniupnpd/files/miniupnpd.hotplug
@@ -1,45 +1,36 @@
+#!/bin/sh
/etc/init.d/miniupnpd enabled || exit 0
-# If miniupnpd is not running:
-# - check on _any_ event (event updates may contribute to network_find_wan*)
-
-# If miniupnpd _is_ running:
-# - check only on ifup (otherwise lease updates etc would cause
-# miniupnpd state loss)
+# If daemon is:
+# - not running: check on any event (event updates may contribute to network_find_wan*)
+# - running: check only on ifup (otherwise lease updates etc. would cause daemon state loss)
[ "$ACTION" != "ifup" ] && /etc/init.d/miniupnpd running && exit 0
tmpconf="/var/etc/miniupnpd.conf"
-external_iface=$(uci -q get upnpd.config.external_iface)
-external_iface6=$(uci -q get upnpd.config.external_iface6)
-external_zone=$(uci -q get upnpd.config.external_zone)
+external_iface=$(uci -q get upnpd.settings.external_iface)
+external_iface6=$(uci -q get upnpd.settings.external_iface6)
+external_zone=$(uci -q get upnpd.settings.external_zone)
[ -x "$(command -v nft)" ] && FW="fw4" || FW="fw3"
. /lib/functions/network.sh
-
-if [ -n "$external_iface" ] ; then
+if [ -n "$external_iface" ]; then
network_get_device ifname "$external_iface"
+elif [ -n "$external_zone" ]; then
+ ifname=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
else
- if [ -n "$external_zone" ] ; then
- ifname=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
- else
- network_find_wan external_iface && \
- network_get_device ifname "$external_iface"
- fi
+ network_find_wan external_iface && network_get_device ifname "$external_iface"
fi
-if [ -n "$external_iface6" ] ; then
+if [ -n "$external_iface6" ]; then
network_get_device ifname6 "$external_iface6"
+elif [ -n "$external_zone" ]; then
+ ifname6=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
else
- if [ -n "$external_zone" ] ; then
- ifname6=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
- else
- network_find_wan6 external_iface6 && \
- network_get_device ifname6 "$external_iface6"
- fi
+ network_find_wan6 external_iface6 && network_get_device ifname6 "$external_iface6"
fi
[ "$DEVICE" != "$ifname" ] && [ "$DEVICE" != "$ifname6" ] && exit 0
-grep -qs "^ext_ifname=$ifname" "$tmpconf" && grep -qs "^ext_ifname6=$ifname6" "$tmpconf" && exit 0
+grep -qs "^ext_ifname=$ifname" "$tmpconf" && grep -qs "^ext_ifname6=${ifname6:-$ifname}" "$tmpconf" && exit 0
/etc/init.d/miniupnpd restart
diff --git a/miniupnpd/files/miniupnpd.init b/miniupnpd/files/miniupnpd.init
index a5679eda1..3489a68f7 100644
--- a/miniupnpd/files/miniupnpd.init
+++ b/miniupnpd/files/miniupnpd.init
@@ -7,112 +7,15 @@ USE_PROCD=1
PROG=/usr/sbin/miniupnpd
[ -x "$(command -v nft)" ] && FW="fw4" || FW="fw3"
-upnpd_get_port_range() {
- local var="$1"; shift
- local val
-
- config_get val "$@"
-
- case "$val" in
- [0-9]*[:-][0-9]*)
- export -n -- "${var}_start=${val%%[:-]*}"
- export -n -- "${var}_end=${val##*[:-]}"
- ;;
- [0-9]*)
- export -n -- "${var}_start=$val"
- export -n -- "${var}_end="
- ;;
- esac
-}
-
-conf_rule_add() {
- local cfg="$1"
- local action int_addr
- local ext_start ext_end int_start int_end comment
-
- config_get action "$cfg" action "deny" # allow or deny
- upnpd_get_port_range "ext" "$cfg" ext_ports "0-65535" # external ports: x, x-y, x:y
- config_get int_addr "$cfg" int_addr "0.0.0.0/0" # ip or network and subnet mask (internal)
- upnpd_get_port_range "int" "$cfg" int_ports "0-65535" # internal ports: x, x-y, x:y or range
- config_get comment "$cfg" comment "ACL" # comment
-
- # Make a single IP IP/32 so that miniupnpd.conf can use it.
- [ "${int_addr%/*}" = "$int_addr" ] && int_addr="$int_addr/32"
-
- echo "$action $ext_start${ext_end:+-}$ext_end $int_addr $int_start${int_end:+-}$int_end #$comment"
-}
-
-upnpd_write_bool() {
- local opt="$1"
- local def="${2:-0}"
- local alt="${3:-$opt}"
- local val
-
- config_get_bool val config "$opt" "$def"
- if [ "$val" -eq 0 ]; then
- echo "$alt=no"
- else
- echo "$alt=yes"
- fi
-}
-
-upnpd() {
+start_service() {
config_load "upnpd"
- local external_iface external_iface6 external_zone external_ip internal_iface
- local upload download log_output port config_file serial_number model_number
- local use_stun stun_host stun_port uuid notify_interval presentation_url
- local upnp_lease_file upnp_lease_file6 ipv6_disable ext_allow_private_ipv4
-
- local enabled
- config_get_bool enabled config enabled 1
- [ "$enabled" -eq 0 ] && return 1
-
- config_get external_iface config external_iface
- config_get external_iface6 config external_iface6
- config_get external_zone config external_zone
- config_get external_ip config external_ip
- config_get internal_iface config internal_iface
- config_get port config port 5000
- config_get upload config upload
- config_get download config download
- config_get_bool log_output config log_output 0
- config_get config_file config config_file
- config_get serial_number config serial_number
- config_get model_number config model_number
- config_get uuid config uuid
- config_get use_stun config use_stun 0
- config_get stun_host config stun_host
- config_get stun_port config stun_port
- config_get notify_interval config notify_interval
- config_get presentation_url config presentation_url
- config_get upnp_lease_file config upnp_lease_file
- config_get upnp_lease_file6 config upnp_lease_file6
- config_get ipv6_disable config ipv6_disable 0
- config_get ext_allow_private_ipv4 config ext_allow_private_ipv4 0
-
- local conf ifname ifname6
-
- . /lib/functions/network.sh
-
- if [ -n "$external_iface" ] ; then
- network_get_device ifname "$external_iface"
- else
- if [ -n "$external_zone" ] ; then
- ifname=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
- else
- network_find_wan external_iface && \
- network_get_device ifname "$external_iface"
- fi
- fi
- if [ -n "$external_iface6" ] ; then
- network_get_device ifname6 "$external_iface6"
- else
- if [ -n "$external_zone" ] ; then
- ifname6=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
- else
- network_find_wan6 external_iface6 && \
- network_get_device ifname6 "$external_iface6"
- fi
+ local enabled config_file log_output conf
+ config_get enabled settings enabled 0
+ config_get config_file settings config_file
+ config_get log_output settings log_output
+ if [ "$enabled" != "1" ]; then
+ log "Service disabled, enabled UCI option not set"
+ return 1
fi
if [ -n "$config_file" ]; then
@@ -121,107 +24,254 @@ upnpd() {
local tmpconf="/var/etc/miniupnpd.conf"
conf="$tmpconf"
mkdir -p /var/etc
-
- {
- echo "ext_ifname=$ifname"
- echo "ext_ifname6=$ifname6"
- [ -n "$external_ip" ] && echo "ext_ip=$external_ip"
-
- local iface
- for iface in ${internal_iface:-lan}; do
- local device
- network_get_device device "$iface" && echo "listening_ip=$device"
- done
-
- config_load "upnpd"
- upnpd_write_bool enable_natpmp 1 enable_pcp_pmp
- upnpd_write_bool enable_upnp 1
- upnpd_write_bool secure_mode 1
- upnpd_write_bool system_uptime 1
- upnpd_write_bool igdv1 0 force_igd_desc_v1
- upnpd_write_bool use_stun 0 ext_perform_stun
- upnpd_write_bool ipv6_disable $ipv6_disable
- upnpd_write_bool ext_allow_private_ipv4 $ext_allow_private_ipv4
-
- [ "$use_stun" -eq 0 ] || {
- [ -n "$stun_host" ] && echo "ext_stun_host=$stun_host"
- [ -n "$stun_port" ] && echo "ext_stun_port=$stun_port"
- }
-
- [ -n "$upload" ] && [ -n "$download" ] && {
- echo "bitrate_down=$((download * 1024 * 8))"
- echo "bitrate_up=$((upload * 1024 * 8))"
- }
-
- [ -n "$upnp_lease_file" ] && touch "$upnp_lease_file" && echo "lease_file=$upnp_lease_file"
- [ -n "$upnp_lease_file6" ] && touch "$upnp_lease_file6" && echo "lease_file6=$upnp_lease_file6"
- [ -n "$presentation_url" ] && echo "presentation_url=$presentation_url"
- [ -n "$notify_interval" ] && echo "notify_interval=$notify_interval"
- [ -n "$serial_number" ] && echo "serial=$serial_number"
- [ -n "$model_number" ] && echo "model_number=$model_number"
- [ -n "$port" ] && echo "port=$port"
-
- [ -z "$uuid" ] && {
- uuid="$(cat /proc/sys/kernel/random/uuid)"
- uci set upnpd.config.uuid="$uuid"
- uci commit upnpd
- }
-
- [ "$uuid" = "nocli" ] || echo "uuid=$uuid"
-
- config_foreach conf_rule_add perm_rule
-
- if [ "$FW" = "fw4" ]; then
- #When using nftables configure miniupnpd to use its own table and chains
- echo "upnp_table_name=fw4"
- echo "upnp_nat_table_name=fw4"
- echo "upnp_forward_chain=upnp_forward"
- echo "upnp_nat_chain=upnp_prerouting"
- echo "upnp_nat_postrouting_chain=upnp_postrouting"
- fi
-
- } > "$tmpconf"
+ upnpd_generate_config "$tmpconf" || return 1
fi
- if [ -n "$ifname" ]; then
- # start firewall
- if [ "$FW" = "fw4" ]; then
- nft -s -t -n list chain inet fw4 upnp_forward >/dev/null 2>&1 || fw4 reload
- else
- iptables -L MINIUPNPD >/dev/null 2>&1 || fw3 reload
- fi
+ if [ "$FW" = "fw4" ]; then
+ nft -s -t -n list chain inet fw4 upnp_forward >/dev/null 2>&1 || fw4 reload
else
- logger -t "upnp daemon" "external interface not found, not starting"
+ iptables -L MINIUPNPD >/dev/null 2>&1 || fw3 reload
fi
procd_open_instance
- procd_set_param file "$conf" "/etc/config/firewall"
+ procd_set_param file "$conf"
procd_set_param command "$PROG"
procd_append_param command -f "$conf"
- [ "$log_output" = "1" ] && procd_append_param command -d
+ [ "$log_output" = "info" ] && procd_append_param command -v
+ [ "$log_output" = "debug" ] && procd_append_param command -v -v
procd_close_instance
}
stop_service() {
if [ "$FW" = "fw3" ]; then
- iptables -t nat -F MINIUPNPD 2>/dev/null
- iptables -t nat -F MINIUPNPD-POSTROUTING 2>/dev/null
iptables -t filter -F MINIUPNPD 2>/dev/null
[ -x /usr/sbin/ip6tables ] && ip6tables -t filter -F MINIUPNPD 2>/dev/null
+ iptables -t nat -F MINIUPNPD 2>/dev/null
+ iptables -t nat -F MINIUPNPD-POSTROUTING 2>/dev/null
else
nft flush chain inet fw4 upnp_forward 2>/dev/null
nft flush chain inet fw4 upnp_prerouting 2>/dev/null
- nft flush chain inet fw4 upnp_postrouting 2>/dev/null
+ #nft flush chain inet fw4 upnp_postrouting 2>/dev/null
fi
}
-start_service() {
- config_load "upnpd"
- config_foreach upnpd "upnpd"
+service_triggers() {
+ procd_add_reload_trigger "upnpd" "firewall"
}
-service_triggers() {
- procd_add_reload_trigger "upnpd"
+upnpd_generate_config() {
+ # Daemon
+ local enable_protocols allow_cgnat stun_host allow_third_party_mapping system_uptime lease_file
+ config_get enable_protocols settings enable_protocols all
+ config_get allow_cgnat settings allow_cgnat 0
+ config_get stun_host settings stun_host stun.nextcloud.com
+ config_get allow_third_party_mapping settings allow_third_party_mapping 0
+ config_get system_uptime settings system_uptime 1
+ config_get lease_file settings lease_file /var/run/miniupnpd.leases
+
+ # Access control
+ local access_defaults accept_ports reject_ports check_acl ipv6_disable
+ config_get access_defaults settings access_defaults none
+ config_get accept_ports settings accept_ports
+ config_get reject_ports settings reject_ports "21 23 135 137-139 445 3389"
+ config_get check_acl settings check_acl 1
+ config_get ipv6_disable settings ipv6_disable 0
+
+ # UPnP IGD
+ local upnp_igd_compat download_kbps upload_kbps friendly_name model_number serial_number presentation_url uuid http_port notify_interval
+ config_get upnp_igd_compat settings upnp_igd_compat igdv1
+ config_get download_kbps settings download_kbps
+ config_get upload_kbps settings upload_kbps
+ config_get friendly_name settings friendly_name "OpenWrt UPnP IGD & PCP"
+ config_get model_number settings model_number
+ config_get serial_number settings serial_number
+ config_get presentation_url settings presentation_url
+ config_get uuid settings uuid
+ config_get http_port settings http_port 5000
+ config_get notify_interval settings notify_interval
+
+ # Network interfaces
+ local external_iface external_iface6 external_zone external_ip internal_iface
+ config_get external_iface settings external_iface
+ config_get external_iface6 settings external_iface6
+ config_get external_zone settings external_zone
+ config_get external_ip settings external_ip
+ config_get internal_iface settings internal_iface lan
+
+ local ifname ifname6
+ . /lib/functions/network.sh
+ if [ -n "$external_iface" ]; then
+ network_get_device ifname "$external_iface"
+ elif [ -n "$external_zone" ]; then
+ ifname=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
+ else
+ network_find_wan external_iface && network_get_device ifname "$external_iface"
+ fi
+ if [ -n "$external_iface6" ]; then
+ network_get_device ifname6 "$external_iface6"
+ elif [ -n "$external_zone" ]; then
+ ifname6=$($FW -q zone "$external_zone" 2>/dev/null | head -1)
+ else
+ network_find_wan6 external_iface6 && network_get_device ifname6 "$external_iface6"
+ fi
+ if [ "$ifname" = "" ]; then
+ log "No external network interface found, not starting" daemon.err
+ return 1
+ fi
+ # Workaround for daemon bug with UPnP IGDv2 if IPv6 is not ready at start
+ if [ "$ipv6_disable" = "0" ] && [ "$(uci -q get firewall.@defaults[0].disable_ipv6)" != "1" ] &&
+ [ "$(uci -q get network.wan6.disabled)" != "1" ]; then
+ local pass=0
+ while ! ip -6 addr show dev "${ifname6:-$ifname}" | grep -q "inet6 [23]"; do
+ log "IPv6 not ready yet; delay start"
+ sleep 5
+ pass=$((pass + 1))
+ [ "$pass" = "4" ] && log "IPv6 GUA not yet available, UPnP IGD mapping not possible" && break
+ done
+ fi
+ # Only perform an STUN CGNAT test if necessary, with a private/CGNAT-reserved external IPv4
+ local extipv4 extipv4private
+ extipv4="$(ip -4 addr show dev "$ifname" | grep inet | head -1 | sed -E "s/.*inet ([0-9.]+).*/\1/")"
+ case "$extipv4" in
+ 10.* | 100.6[4-9].* | 100.[7-9][0-9].* | 100.1[0-1][0-9].* | 100.12[0-7].* | 172.1[6-9].* | \
+ 172.2[0-9].* | 172.3[0-1].* | 192.0.0.[1-6] | 192.168.* | 198.1[89].*) extipv4private=1 ;;
+ esac
+ [ "$extipv4private" = "1" ] && log "Private/CGNAT-reserved external IPv4 detected ($extipv4)"
+
+ {
+ echo "# Daemon"
+ [ "$enable_protocols" = "all" ] && echo "enable_upnp=yes" && echo "enable_pcp_pmp=yes"
+ [ "$enable_protocols" = "upnp-igd" ] && echo "enable_upnp=yes" && echo "enable_pcp_pmp=no"
+ [ "$enable_protocols" = "pcp+nat-pmp" ] && echo "enable_upnp=no" && echo "enable_pcp_pmp=yes"
+ if [ "$extipv4private" = "1" ] && [ "$allow_cgnat" != "0" ]; then
+ [ "$allow_cgnat" = "1" ] && echo "ext_perform_stun=yes"
+ [ "$allow_cgnat" = "allow-filtered" ] && echo "ext_perform_stun=allow-filtered"
+ # Avoid next option, as no STUN public IPv4 detection, required by clients (PCP/NAT-PMP among others)
+ [ "$allow_cgnat" = "report-private-ipv4" ] && echo "ext_allow_private_ipv4=yes"
+ echo "ext_stun_host=${stun_host%%:*}"
+ [ "${stun_host%%:*}" != "${stun_host##*:}" ] && echo "ext_stun_port=${stun_host##*:}"
+ fi
+ [ "$allow_third_party_mapping" = "0" ] && echo "secure_mode=yes" && echo "pcp_allow_thirdparty=no"
+ [ "$allow_third_party_mapping" = "1" ] && echo "secure_mode=no" && echo "pcp_allow_thirdparty=yes"
+ [ "$allow_third_party_mapping" = "upnp-igd" ] && echo "secure_mode=no" && echo "pcp_allow_thirdparty=no"
+ [ "$allow_third_party_mapping" = "pcp" ] && echo "secure_mode=yes" && echo "pcp_allow_thirdparty=yes"
+ [ "$system_uptime" = "0" ] && echo "system_uptime=no" || echo "system_uptime=yes"
+ touch "$lease_file" && echo "lease_file=$lease_file"
+ [ "$ipv6_disable" = "0" ] && touch "${lease_file}-ipv6" && echo "lease_file6=${lease_file}-ipv6"
+
+ if [ "$enable_protocols" = "upnp-igd" ] || [ "$enable_protocols" = "all" ]; then
+ echo "# UPnP IGD"
+ [ "$upnp_igd_compat" = "igdv1" ] && echo "force_igd_desc_v1=yes" || echo "force_igd_desc_v1=no"
+ [ -n "$download_kbps" ] && echo "bitrate_down=$((download_kbps * 1000))"
+ [ -n "$upload_kbps" ] && echo "bitrate_up=$((upload_kbps * 1000))"
+ [ -n "$friendly_name" ] && echo "friendly_name=$(xml_encode "$friendly_name")"
+ [ -n "$model_number" ] && echo "model_number=$(xml_encode "$model_number")" || echo "model_number="
+ [ -n "$serial_number" ] && echo "serial=$(xml_encode "$serial_number")" || echo "serial="
+ [ -n "$presentation_url" ] && echo "presentation_url=$presentation_url"
+ [ -z "$uuid" ] && {
+ log "Generate UPnP IGD UUID"
+ uuid="$(cat /proc/sys/kernel/random/uuid)"
+ uci set upnpd.settings.uuid="$uuid"
+ uci commit upnpd
+ }
+ [ "$uuid" != "nocli" ] && echo "uuid=$uuid" || log "uuid=nocli deprecated, set to 00000000-0000-0000-0000-000000000000 instead"
+ echo "http_port=$http_port"
+ [ -n "$notify_interval" ] && echo "notify_interval=$notify_interval"
+ fi
+
+ if [ "$FW" = "fw4" ]; then
+ echo "# Firewall backend"
+ echo "upnp_table_name=fw4"
+ echo "upnp_nat_table_name=fw4"
+ echo "upnp_forward_chain=upnp_forward"
+ echo "upnp_nat_chain=upnp_prerouting"
+ #echo "upnp_nat_postrouting_chain=upnp_postrouting"
+ fi
+
+ echo "# External network interface"
+ echo "ext_ifname=$ifname"
+ echo "ext_ifname6=${ifname6:-$ifname}"
+ [ -n "$external_ip" ] && echo "ext_ip=$external_ip"
+
+ echo "# Enable internal networks / access control"
+ [ "$ipv6_disable" = "0" ] && echo "ipv6_disable=no" || echo "ipv6_disable=yes"
+ local rejectport
+ for rejectport in $reject_ports; do
+ is_port_or_range "$rejectport" allowport0 && echo "deny $rejectport 0.0.0.0/0 $rejectport # Reject port $rejectport" ||
+ log "Invalid port or port range ($rejectport) in reject_ports ignored" daemon.warn
+ done
+ [ "$check_acl" = "1" ] && echo "# Access control list" && config_foreach upnpd_add_acl_entry acl_entry
+ local iface
+ for iface in $internal_iface; do
+ local device subnet accessdefaultsports acceptport
+ network_get_device device "$iface"
+ network_get_subnet subnet "$iface"
+ [ "$subnet" = "" ] && log "Cannot get IPv4 subnet for network $iface, network ignored" daemon.warn && continue
+ echo "# Enable internal network $iface ($device) with access defaults $access_defaults and check ACL $check_acl"
+ echo "listening_ip=$device"
+ if [ "$access_defaults" = "accept-high-ports" ]; then
+ accessdefaultsports="1024-65535"
+ elif [ "$access_defaults" = "accept-web+high-ports" ]; then
+ accessdefaultsports="80 443 1024-65535"
+ elif [ "$access_defaults" = "accept-web-ports" ]; then
+ accessdefaultsports="80 443"
+ elif [ "$access_defaults" = "accept-all-ports" ]; then
+ accessdefaultsports="1-65535"
+ elif [ "$access_defaults" != "none" ]; then
+ log "Invalid access_defaults ($access_defaults) ignored" daemon.warn
+ fi
+ for acceptport in $accessdefaultsports $accept_ports; do
+ is_port_or_range "$acceptport" && echo "allow $acceptport $subnet $acceptport # Accept port $acceptport on $iface" ||
+ log "Invalid port or port range ($acceptport) in accept_ports ignored" daemon.warn
+ done
+ done
+ echo "deny 1-65535 0.0.0.0/0 1-65535 # Reject ACL by default"
+
+ } >"$1"
+}
+
+log() {
+ logger -s -p "${2:-daemon.notice}" -t "miniupnpd-init" "$1" || echo "miniupnpd-init: $1" >&2
+}
+
+xml_encode() {
+ # Encode required XML entities of text UPnP IGD config options until the daemon does so
+ echo "$1" | sed "s/&/\&/g; s/\</g; s/>/\>/g"
+}
+
+is_port_or_range() {
+ [ "$1" = "0" ] && [ "$2" != "allowport0" ] && return 1
+ [ "$1" -ge "1" ] 2>/dev/null && [ "$1" -le "65535" ] 2>/dev/null && return 0
+ [ "$2" = "allowport0" ] && local minport=0 || local minport=1
+ [ "${1%%-*}" -ge "$minport" ] 2>/dev/null && [ "${1%%-*}" -le "65535" ] 2>/dev/null &&
+ [ "${1##*-}" -ge "$minport" ] 2>/dev/null && [ "${1##*-}" -le "65535" ] 2>/dev/null &&
+ [ "${1##*-}" -ge "${1%%-*}" ] 2>/dev/null && return 0 || return 1
+}
+
+upnpd_add_acl_entry() {
+ local cfg="$1"
+ local comment int_addr int_port ext_port descr_filter action
+ config_get comment "$cfg" comment "unspecified" # comment
+ config_get int_addr "$cfg" int_addr "0.0.0.0/0" # IPv4 or network and subnet mask (internal)
+ config_get int_port "$cfg" int_port "1-65535" # internal port/range: x or x-y
+ config_get ext_port "$cfg" ext_port "1-65535" # external port/range: x or x-y
+ config_get descr_filter "$cfg" descr_filter # description regex filter (must be built in)
+ config_get action "$cfg" action # accept/reject/disabled
+ ! is_port_or_range "$int_port" allowport0 &&
+ log "ACL entry: Invalid port or port range ($int_port) in int_port ignored" daemon.warn && int_port=1-65535
+ ! is_port_or_range "$ext_port" allowport0 &&
+ log "ACL entry: Invalid port or port range ($ext_port) in ext_port ignored" daemon.warn && ext_port=1-65535
+ [ "$descr_filter" != "" ] && descr_filter=" \"$descr_filter\""
+ if [ "$action" = "accept" ]; then
+ action=allow
+ elif [ "$action" = "reject" ]; then
+ action=deny
+ elif [ "$action" != "disabled" ]; then
+ log "ACL entry: Entry with invalid action ($action) ignored" daemon.warn
+ action=disabled
+ fi
+ [ "$action" = "disabled" ] && return 0
+ echo "$action $ext_port $int_addr $int_port${descr_filter} # $comment"
}
reload_service() {
diff --git a/miniupnpd/files/nftables.d/chain-post/srcnat/20-miniupnpd.nft b/miniupnpd/files/nftables.d/chain-post/srcnat/20-miniupnpd.nft
deleted file mode 100644
index 2d0051e20..000000000
--- a/miniupnpd/files/nftables.d/chain-post/srcnat/20-miniupnpd.nft
+++ /dev/null
@@ -1 +0,0 @@
-jump upnp_postrouting comment "Hook into miniupnpd postrouting chain";
diff --git a/miniupnpd/files/nftables.d/table-post/20-miniupnpd.nft b/miniupnpd/files/nftables.d/table-post/20-miniupnpd.nft
index 7d914e5c8..3d787fba8 100644
--- a/miniupnpd/files/nftables.d/table-post/20-miniupnpd.nft
+++ b/miniupnpd/files/nftables.d/table-post/20-miniupnpd.nft
@@ -1,3 +1,2 @@
chain upnp_forward {}
chain upnp_prerouting {}
-chain upnp_postrouting {}
diff --git a/miniupnpd/files/upnpd-migration.uci-defaults b/miniupnpd/files/upnpd-migration.uci-defaults
new file mode 100644
index 000000000..60f80d54f
--- /dev/null
+++ b/miniupnpd/files/upnpd-migration.uci-defaults
@@ -0,0 +1,246 @@
+#!/bin/sh
+
+log() {
+ logger -s -p "${2:-daemon.notice}" -t "upnpd" "$1" || echo "upnpd: $1" >&2
+}
+
+# Skip migration with existing settings (v2.0) or with no config (v1.0) UCI section
+# Enables the creation of a merged v1.0/v2.0 config file
+{ uci -q get upnpd.settings >/dev/null || ! uci -q get upnpd.config >/dev/null; } && exit 0
+
+log "Check UCI options in /etc/config/upnpd to be migrated to v2.0"
+cp /etc/config/upnpd /tmp
+
+# Set missing enabled option to fix previously different defaults in LuCI/config (0) and init UCI (1)
+if ! uci -q get upnpd.config.enabled >/dev/null; then
+ uci -q set upnpd.config.enabled="1"
+fi
+
+# Migrate boolean options to only use 0/1 for LuCI support
+for option in enabled ipv6_disable system_uptime; do
+ if uci -q get upnpd.config.$option >/dev/null; then
+ uci get upnpd.config.$option | grep -q -E -x "0|off|false|no|disabled" && uci set upnpd.config.$option="0"
+ uci get upnpd.config.$option | grep -q -E -x "1|on|true|yes|enabled" && uci set upnpd.config.$option="1"
+ fi
+done
+
+# Migrate enable_upnp/enable_natpmp -> enable_protocols: Combined option
+if uci -q get upnpd.config.enable_upnp >/dev/null || uci -q get upnpd.config.enable_natpmp >/dev/null; then
+ log "enable_upnp/enable_natpmp -> enable_protocols: Combined option"
+ if ! uci -q get upnpd.config.enable_upnp | grep -q -E -x "0|off|false|no|disabled"; then
+ uci -q get upnpd.config.enable_natpmp | grep -q -E -x "0|off|false|no|disabled" &&
+ uci set upnpd.config.enable_protocols="upnp-igd" ||
+ uci set upnpd.config.enable_protocols="all"
+ elif ! uci -q get upnpd.config.enable_natpmp | grep -q -E -x "0|off|false|no|disabled"; then
+ uci set upnpd.config.enable_protocols="pcp+nat-pmp"
+ else
+ uci set upnpd.config.enable_protocols="all"
+ uci set upnpd.config.enabled="0"
+ fi
+ uci -q delete upnpd.config.enable_upnp
+ uci -q delete upnpd.config.enable_natpmp
+fi
+
+# Rename use_stun -> allow_cgnat
+if uci -q get upnpd.config.use_stun >/dev/null; then
+ log "use_stun -> allow_cgnat"
+ uci rename upnpd.config.use_stun="allow_cgnat"
+fi
+
+# Migrate force_forwarding=1 (in X-Wrt since 2021) to new similar option allow_cgnat=allow-filtered for cross-upgrades
+if uci -q get upnpd.config.force_forwarding >/dev/null; then
+ log "force_forwarding=1 -> allow_cgnat=allow-filtered: New option"
+ uci get upnpd.config.force_forwarding | grep -q -E -x "1|on|true|yes|enabled" &&
+ uci set upnpd.config.allow_cgnat="allow-filtered"
+ uci delete upnpd.config.force_forwarding
+fi
+
+# Remove known unsupported (not CGNAT filtering test capable) STUN servers and include stun_port in stun_host
+if uci -q get upnpd.config.stun_host | grep -q -E "stun[0-9]?.l.google.com|stun.cloudflare.com"; then
+ log "stun_host: Unsupported STUN server ($(uci -q get upnpd.config.stun_host)) set, remove to set default"
+ uci delete upnpd.config.stun_host
+ # Workaround for false negative filtered STUN CGNAT test results for unsupported servers before daemon 2.3.10
+ uci set upnpd.config.allow_cgnat="allow-filtered"
+ uci -q delete upnpd.config.stun_port
+elif uci -q get upnpd.config.stun_port >/dev/null; then
+ uci -q get upnpd.config.stun_host >/dev/null && [ "$(uci -q get upnpd.config.stun_port)" != "3478" ] &&
+ log "stun_port: Include stun_port in stun_host, and remove option" &&
+ uci set upnpd.config.stun_host="$(uci -q get upnpd.config.stun_host | cut -d ":" -f 1):$(uci -q get upnpd.config.stun_port)"
+ uci delete upnpd.config.stun_port
+fi
+
+# Migrate secure_mode=1/0 -> allow_third_party_mapping=0/upnp-igd: Invert and extend to PCP
+if uci -q get upnpd.config.secure_mode >/dev/null; then
+ log "secure_mode=1/0 -> allow_third_party_mapping=0/upnp-igd: Invert and extend to PCP"
+ uci get upnpd.config.secure_mode | grep -q -E -x "0|off|false|no|disabled" &&
+ uci set upnpd.config.allow_third_party_mapping="upnp-igd" ||
+ uci set upnpd.config.allow_third_party_mapping="0"
+ uci delete upnpd.config.secure_mode
+fi
+
+# Migrate log_output=0/1 -> log_output=default/debug: Now info also allowed
+if uci -q get upnpd.config.log_output >/dev/null; then
+ log "log_output=0/1 -> log_output=default/debug: Now info also allowed"
+ uci get upnpd.config.log_output | grep -q -E -x "1|on|true|yes|enabled" &&
+ uci set upnpd.config.log_output="debug"
+ uci get upnpd.config.log_output | grep -q -E -x "0|off|false|no|disabled" &&
+ uci set upnpd.config.log_output="default"
+fi
+
+# Rename upnp_lease_file -> lease_file: To original daemon name, and remove if UCI default set
+if uci -q get upnpd.config.upnp_lease_file >/dev/null; then
+ if [ "$(uci -q get upnpd.config.upnp_lease_file)" = "/var/run/miniupnpd.leases" ]; then
+ log "upnp_lease_file -> lease_file: Remove option as UCI default set"
+ uci delete upnpd.config.upnp_lease_file
+ else
+ log "upnp_lease_file -> lease_file"
+ uci rename upnpd.config.upnp_lease_file="lease_file"
+ fi
+fi
+if uci -q get upnpd.config.upnp_lease_file6 >/dev/null; then
+ uci delete upnpd.config.upnp_lease_file6
+fi
+
+# Migrate igdv1=1/0 -> upnp_igd_compat=igdv1/igdv2: Extensible/clearer
+if uci -q get upnpd.config.igdv1 >/dev/null; then
+ log "igdv1=1/0 -> upnp_igd_compat=igdv1/igdv2"
+ uci get upnpd.config.igdv1 | grep -q -E -x "1|on|true|yes|enabled" &&
+ uci set upnpd.config.upnp_igd_compat="igdv1" ||
+ uci set upnpd.config.upnp_igd_compat="igdv2"
+ uci delete upnpd.config.igdv1
+fi
+
+# Migrate download/upload -> download_kbps/upload_kbps: Convert to kbit/s
+if uci -q get upnpd.config.download >/dev/null; then
+ download="$(uci -q get upnpd.config.download)"
+ if [ "$download" != "1024" ] && [ "$download" -ge "1" ] 2>/dev/null; then
+ log "download -> download_kbps: Convert to kbit/s"
+ download_kbps="$((download * 8 * 1000 / 1024))"
+ uci set upnpd.config.download_kbps="$download_kbps"
+ fi
+ uci delete upnpd.config.download
+fi
+if uci -q get upnpd.config.upload >/dev/null; then
+ upload="$(uci -q get upnpd.config.upload)"
+ if [ "$upload" != "512" ] && [ "$upload" -ge "1" ] 2>/dev/null; then
+ log "upload -> upload_kbps: Convert to kbit/s"
+ upload_kbps="$((upload * 8 * 1000 / 1024))"
+ uci set upnpd.config.upload_kbps="$upload_kbps"
+ fi
+ uci delete upnpd.config.upload
+fi
+
+# Rename port -> http_port: Remove if UCI default set
+if uci -q get upnpd.config.port >/dev/null; then
+ if [ "$(uci -q get upnpd.config.port)" = "5000" ]; then
+ log "port -> http_port: Remove option as UCI default set"
+ uci delete upnpd.config.port
+ else
+ log "port -> http_port"
+ uci rename upnpd.config.port="http_port"
+ fi
+fi
+
+# Migrate notify_interval <= 900 s: Remove to set minimum of 900 (default)
+if [ "$(uci -q get upnpd.config.notify_interval)" -le "900" ] 2>/dev/null; then
+ log "notify_interval <= 900 s: Remove to set minimum of 900 (default)"
+ uci delete upnpd.config.notify_interval
+fi
+
+# Migrate ACL to new section, note that an empty ACL is now rejected alone
+# a) Empty/unmodified ACL: Set access defaults, add/update template entries
+# b) Modified ACL:
+# - Add missing entry action to avoid adding inverted actions when changing via LuCI
+# - Update entry action allow/deny -> accept/reject
+# - Update entry port options to only use the LuCI (and daemon) supported hyphen (-) as port range separator
+# - Not using access defaults, add template entries
+if uci -q get upnpd.@acl_entry[0] >/dev/null; then
+ log "Error migrating ACL, as the new UCI section already exists" daemon.err
+elif ! uci -q get upnpd.@perm_rule[0] >/dev/null; then
+ log "Empty ACL: Set access defaults, add templates, empty ACL rejected alone"
+ access_defaults=accept-all-ports
+ check_acl=0
+ addtemplateentries=1
+elif ! uci -q get upnpd.@perm_rule[2] >/dev/null &&
+ [ "$(uci -q get upnpd.@perm_rule[0].int_addr)" = "0.0.0.0/0" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[0].int_ports)" = "1024-65535" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[0].ext_ports)" = "1024-65535" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[0].action)" = "allow" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[1].int_addr)" = "0.0.0.0/0" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[1].int_ports)" = "0-65535" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[1].ext_ports)" = "0-65535" ] &&
+ [ "$(uci -q get upnpd.@perm_rule[1].action)" = "deny" ]; then
+ log "Unmodified ACL: Set access defaults, empty ACL rejected alone"
+ access_defaults=accept-high-ports
+ check_acl=0
+ addtemplateentries=1
+ uci delete upnpd.@perm_rule[-1]
+ uci delete upnpd.@perm_rule[-1]
+else
+ log "Modified ACL: Migrate entries/section, empty ACL rejected alone"
+ addtemplateentries=1
+ entrynr=0
+ while uci -q get upnpd.@perm_rule[$entrynr] >/dev/null; do
+ comment="$(uci -q get upnpd.@perm_rule[$entrynr].comment)"
+ int_addr="$(uci -q get upnpd.@perm_rule[$entrynr].int_addr)"
+ int_port="$(uci -q get upnpd.@perm_rule[$entrynr].int_ports)"
+ ext_port="$(uci -q get upnpd.@perm_rule[$entrynr].ext_ports)"
+ action="$(uci -q get upnpd.@perm_rule[$entrynr].action)"
+ echo "$int_port" | grep -q ":" &&
+ log "ACL entry: Update int_port to use hyphen (-) as port range separator" &&
+ int_port="$(echo "$int_port" | tr ":" "-")"
+ echo "$ext_port" | grep -q ":" &&
+ log "ACL entry: Update ext_port to use hyphen (-) as port range separator" &&
+ ext_port="$(echo "$ext_port" | tr ":" "-")"
+ [ "$action" = "" ] && log "ACL entry: Add missing action option" && action=reject
+ [ "$action" = "allow" ] && action=accept
+ [ "$action" = "deny" ] && action=reject
+ uci batch >/dev/null <<-EOF
+ add upnpd acl_entry
+ set upnpd.@acl_entry[-1].comment="${comment:-unspecified}"
+ set upnpd.@acl_entry[-1].int_addr="${int_addr:-0.0.0.0/0}"
+ set upnpd.@acl_entry[-1].int_port="$int_port"
+ set upnpd.@acl_entry[-1].ext_port="$ext_port"
+ set upnpd.@acl_entry[-1].action="$action"
+ EOF
+ entrynr=$((entrynr + 1))
+ done
+ if [ "${int_addr:-0.0.0.0/0}" = "0.0.0.0/0" ] && [ "${int_port:-0-65535}" = "0-65535" ] &&
+ [ "${ext_port:-0-65535}" = "0-65535" ] && [ "$action" = "reject" ]; then
+ log "ACL entry: Remove no longer useful reject by default entry"
+ uci delete upnpd.@acl_entry[-1]
+ fi
+ while uci -q delete upnpd.@perm_rule[-1]; do :; done
+fi
+[ "$access_defaults" != "" ] && uci set upnpd.config.access_defaults="$access_defaults"
+[ "$check_acl" = "0" ] && uci set upnpd.config.check_acl="0"
+if [ "$addtemplateentries" = "1" ]; then
+ uci batch >/dev/null <<-EOF
+ add upnpd acl_entry
+ add upnpd acl_entry
+ set upnpd.@acl_entry[-2].comment="High ports"
+ set upnpd.@acl_entry[-2].int_addr="0.0.0.0/0"
+ set upnpd.@acl_entry[-2].int_port="1024-65535"
+ set upnpd.@acl_entry[-2].ext_port="1024-65535"
+ set upnpd.@acl_entry[-2].action="disabled"
+ set upnpd.@acl_entry[-1].comment="Low/system ports"
+ set upnpd.@acl_entry[-1].int_addr="0.0.0.0/0"
+ set upnpd.@acl_entry[-1].int_port="1-1023"
+ set upnpd.@acl_entry[-1].ext_port="1-1023"
+ set upnpd.@acl_entry[-1].action="disabled"
+ EOF
+ uci -q get upnpd.@acl_entry[-3] >/dev/null &&
+ uci reorder upnpd.@acl_entry[-2]=0 && uci reorder upnpd.@acl_entry[-1]=1
+fi
+
+# Rename UCI section config -> settings (v2.0)
+if uci -q get upnpd.config >/dev/null; then
+ log "Rename UCI section config -> settings (v2.0)" && uci rename upnpd.config="settings" ||
+ log "Error renaming the UCI section" daemon.err
+fi
+
+uci commit upnpd >/dev/null
+
+log "Previous v1.0 config file copied to /tmp/upnpd (kept until reboot)"
+
+exit 0
diff --git a/miniupnpd/files/upnpd.config b/miniupnpd/files/upnpd.config
index ee9287127..4c70e0582 100644
--- a/miniupnpd/files/upnpd.config
+++ b/miniupnpd/files/upnpd.config
@@ -1,34 +1,32 @@
-config upnpd config
- option enabled 1
- option enable_natpmp 1
- option enable_upnp 1
- option secure_mode 1
- option log_output 0
- option download 20480
- option upload 2048
-#by default, looked up dynamically from ubus
-# option external_iface wan
- option internal_iface lan
- option port 5000
- option upnp_lease_file /var/run/miniupnpd.leases
- option upnp_lease_file6 /var/run/miniupnpd.leases6
- option igdv1 1
- option ipv6_disable 1
- option use_stun 0
- option stun_host stun.miwifi.com
- option stun_port 3478
- option ext_allow_private_ipv4 1
+# UPnP IGD & PCP/NAT-PMP Service Settings (v2.0)
-config perm_rule
- option action allow
- option ext_ports 1024-65535
- option int_addr 0.0.0.0/0 # Does not override secure_mode
- option int_ports 1024-65535
- option comment "Allow high ports"
+config upnpd 'settings'
+ option enabled '1'
+ # Can be set to all/upnp-igd/pcp+nat-pmp
+ option enable_protocols 'all'
+ # Enable networks, multiple can be specified, separated by a space
+ option internal_iface 'lan'
+ option access_defaults 'accept-high-ports' # default none
+ option check_acl '0' # default 1
+ #option ipv6_disable '0'
+ #option allow_third_party_mapping '0'
+ # Extra logging by setting to info or debug (previously 1)
+ option log_output 'default'
+ option upnp_igd_compat 'igdv1'
-config perm_rule
- option action deny
- option ext_ports 0-65535
- option int_addr 0.0.0.0/0
- option int_ports 0-65535
- option comment "Default deny"
+# Access Control List
+# Empty ACL rejected alone, IPv6 accepted unless disabled, action: accept/reject
+
+config acl_entry
+ option comment 'High ports'
+ option int_addr '0.0.0.0/0'
+ option int_port '1024-65535'
+ option ext_port '1024-65535'
+ option action 'disabled'
+
+config acl_entry
+ option comment 'Low/system ports'
+ option int_addr '0.0.0.0/0'
+ option int_port '1-1023'
+ option ext_port '1-1023'
+ option action 'disabled'
diff --git a/miniupnpd/patches/020-descr-filter-fix.patch b/miniupnpd/patches/020-descr-filter-fix.patch
deleted file mode 100644
index 9d657d153..000000000
--- a/miniupnpd/patches/020-descr-filter-fix.patch
+++ /dev/null
@@ -1,511 +0,0 @@
-From 54ecff0ae4452598773a020e8798ff61ccf3c966 Mon Sep 17 00:00:00 2001
-From: yangfl
-Date: Thu, 31 Jul 2025 10:35:50 +0800
-Subject: [PATCH] miniupnpd: Rewrite permission line parser
-
-Permission line parser rewrites input buffer in-place for parsing,
-which causes several problems:
-
-* It unnecessarily invalidates input buffer for caller. Actually, you
- might see the following error message when parsing fails:
- miniupnpd[1234]: parsing error file /etc/miniupnpd.conf line 16 : allow 1024
- since the hyphen after 1024 is erased by a '\0'.
-
-* It fails to validate token separators. For example, the following
- line will be accepted:
- allow 1024-65535X0.0.0.0/0 1024-65535 all
- ^ could be any character
- and even a potential buffer over-read if the character is '\0', since
- the parser blindlessly skips it.
-
-* The fifth token is never parsed since it gets a previously written
- '\0'.
-
-Instead of fixing them case-by-case, we rewrite it with DFS in mind,
-which is much simpler and less error-prone.
-
---- a/upnppermissions.c
-+++ b/upnppermissions.c
-@@ -29,6 +29,12 @@ isodigit(char c)
- return '0' <= c && c >= '7';
- }
-
-+static int
-+iseol(char c)
-+{
-+ return c == '\0' || c == '\n' || c == '\r';
-+}
-+
- static char
- hex2chr(char c)
- {
-@@ -91,6 +97,84 @@ unescape_char(const char * s, int * seql
- return c;
- }
-
-+/* greedy parser: try to match the longest sequence and do not
-+ * check for terminators */
-+
-+static char *
-+get_sep(const char * s)
-+{
-+ if(!isspace(*s))
-+ return NULL;
-+ do
-+ s++;
-+ while(isspace(*s));
-+ return (char *) s;
-+}
-+
-+static char *
-+get_ushort(const char * s, u_short * val)
-+{
-+ char * end;
-+ unsigned long val_ul;
-+
-+ if(!isdigit(*s))
-+ return NULL;
-+ val_ul = strtoul(s, &end, 10);
-+ if(val_ul > 65535)
-+ return NULL;
-+ *val = (u_short)val_ul;
-+
-+ return end;
-+}
-+
-+static char *
-+get_range(const char * s, u_short * begin, u_short * end)
-+{
-+ s = get_ushort(s, begin);
-+ if(!s)
-+ return NULL;
-+
-+ if(*s!='-')
-+ *end = *begin;
-+ else
-+ {
-+ s++;
-+ s = get_ushort(s, end);
-+ if(!s)
-+ return NULL;
-+ if(*begin > *end)
-+ return NULL;
-+ }
-+ return (char *) s;
-+}
-+
-+static char *
-+get_addr(const char * s, struct in_addr * addr, unsigned int * dot_cnt)
-+{
-+ size_t i;
-+ char buf[64];
-+
-+ if(!isdigit(*s))
-+ return NULL;
-+
-+ *dot_cnt = 0;
-+ for(i = 0; isdigit(s[i]) || s[i] == '.';)
-+ {
-+ if(s[i] == '.')
-+ (*dot_cnt)++;
-+ buf[i] = s[i];
-+ i++;
-+ if (i > sizeof(buf) - 1)
-+ return NULL;
-+ }
-+
-+ buf[i] = '\0';
-+ if(!inet_aton(buf, addr))
-+ return NULL;
-+
-+ return (char *) s + i;
-+}
-+
- /* get_next_token(s, &token, raw)
- * put the unquoted/unescaped token in token and returns
- * a pointer to the begining of the next token
-@@ -99,18 +183,8 @@ static char *
- get_next_token(const char * s, char ** token, int raw)
- {
- char deli;
-- const char * end;
-+ size_t len;
-
-- /* skip any whitespace */
-- for(; isspace(*s); s++)
-- if(*s == '\0' || *s == '\n')
-- {
-- if(token)
-- *token = NULL;
-- return (char *) s;
-- }
--
-- /* find the start */
- if(*s == '"' || *s == '\'')
- {
- deli = *s;
-@@ -119,85 +193,90 @@ get_next_token(const char * s, char ** t
- else
- deli = 0;
- /* find the end */
-- end = s;
-- for(; *end != '\0' && *end != '\n' && (deli ? *end != deli : !isspace(*end));
-- end++)
-- if(*end == '\\')
-+ for(len = 0; !iseol(s[len]) && (deli ? s[len] != deli : !isspace(s[len]));
-+ len++)
-+ if(s[len] == '\\')
- {
-- end++;
-- if(*end == '\0')
-+ len++;
-+ if(iseol(s[len]))
- break;
- }
-
- /* save the token */
- if(token)
- {
-- unsigned int token_len;
-- unsigned int i;
--
-- token_len = end - s;
-- *token = strndup(s, token_len);
-- if(!*token)
-- return NULL;
--
-- for(i = 0; (*token)[i] != '\0'; i++)
-- {
-- int sequence_len;
--
-- if((*token)[i] != '\\')
-- continue;
--
-- if(raw && deli && (*token)[i + 1] != deli)
-- continue;
-- (*token)[i] = unescape_char(*token + i, &sequence_len);
-- memmove(*token + i + 1, *token + i + sequence_len,
-- token_len - i - sequence_len);
-- }
-- if (i == 0)
-- {
-- /* behavior of realloc(p, 0) is implementation-defined, so better set it to NULL.
-- * https://github.com/miniupnp/miniupnp/issues/652#issuecomment-1518922139 */
-- free(*token);
-+ if(len == 0)
- *token = NULL;
-- }
- else
- {
-- char * tmp = realloc(*token, i);
-- if (tmp != NULL)
-- *token = tmp;
-+ unsigned int i;
-+ unsigned int j;
-+
-+ char * tmp;
-+ char * t;
-+
-+ t = malloc(len + 1);
-+ if(!t)
-+ return NULL;
-+
-+ if (raw)
-+ {
-+ memcpy(t, s, len);
-+ j = len;
-+ }
- else
-- syslog(LOG_ERR, "%s: failed to reallocate to %u bytes",
-- "get_next_token()", i);
-+ {
-+ for(i = 0, j = 0; i < len; j++)
-+ if(s[i] != '\\')
-+ {
-+ t[j] = s[i];
-+ i++;
-+ }
-+ else
-+ {
-+ int seqlen;
-+ t[j] = unescape_char(s + i, &seqlen);
-+ i += seqlen;
-+ if (i > len)
-+ break;
-+ }
-+
-+ tmp = realloc(*token, j + 1);
-+ if (tmp != NULL)
-+ t = tmp;
-+ else
-+ syslog(LOG_ERR, "%s: failed to reallocate to %u bytes",
-+ "get_next_token()", j + 1);
-+ }
-+ t[j] = '\0';
-+ *token = t;
- }
- }
-
-- /* return the beginning of the next token */
-- if(deli && *end == deli)
-- end++;
-- while(isspace(*end))
-- end++;
-- return (char *) end;
-+ s += len;
-+ if(deli && *s == deli)
-+ s++;
-+ return (char *) s;
- }
-
- /* read_permission_line()
- * parse the a permission line which format is :
-- * (deny|allow) [0-9]+(-[0-9]+) ip/mask [0-9]+(-[0-9]+) regex
-+ * (deny|allow) [0-9]+(-[0-9]+)? ip(/mask)? [0-9]+(-[0-9]+)? (regex)?
- * ip/mask is either 192.168.1.1/24 or 192.168.1.1/255.255.255.0
- */
- int
- read_permission_line(struct upnpperm * perm,
-- char * p)
-+ const char * p)
- {
-- char * q;
-- int n_bits;
-- int i;
-+ unsigned int dot_cnt;
-
- /* zero memory : see https://github.com/miniupnp/miniupnp/issues/652 */
- memset(perm, 0, sizeof(struct upnpperm));
-
-- /* first token: (allow|deny) */
- while(isspace(*p))
- p++;
-+
-+ /* first token: (allow|deny) */
- if(0 == memcmp(p, "allow", 5))
- {
- perm->type = UPNPPERM_ALLOW;
-@@ -212,133 +291,61 @@ read_permission_line(struct upnpperm * p
- {
- return -1;
- }
-- while(isspace(*p))
-- p++;
-+
-+ p = get_sep(p);
-+ if(!p)
-+ return -1;
-
- /* second token: eport or eport_min-eport_max */
-- if(!isdigit(*p))
-+ p = get_range(p, &perm->eport_min, &perm->eport_max);
-+ if(!p)
- return -1;
-- for(q = p; isdigit(*q); q++);
-- if(*q=='-')
-- {
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->eport_min = (u_short)i;
-- q++;
-- p = q;
-- while(isdigit(*q))
-- q++;
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->eport_max = (u_short)i;
-- if(perm->eport_min > perm->eport_max)
-- return -1;
-- }
-- else if(isspace(*q))
-- {
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->eport_min = perm->eport_max = (u_short)i;
-- }
-- else
-- {
-+
-+ p = get_sep(p);
-+ if(!p)
- return -1;
-- }
-- p = q + 1;
-- while(isspace(*p))
-- p++;
-
-- /* third token: ip/mask */
-- if(!isdigit(*p))
-+ /* third token: ip/mask */
-+ p = get_addr(p, &perm->address, &dot_cnt);
-+ if(!p)
- return -1;
-- for(q = p; isdigit(*q) || (*q == '.'); q++);
-- if(*q=='/')
-+
-+ if(*p!='/')
-+ perm->mask.s_addr = 0xffffffffu;
-+ else
- {
-- *q = '\0';
-- if(!inet_aton(p, &perm->address))
-- return -1;
-- q++;
-- p = q;
-- while(isdigit(*q))
-- q++;
-- if(*q == '.')
-- {
-- while(*q == '.' || isdigit(*q))
-- q++;
-- if(!isspace(*q))
-- return -1;
-- *q = '\0';
-- if(!inet_aton(p, &perm->mask))
-- return -1;
-- }
-- else if(!isspace(*q))
-+ p++;
-+ p = get_addr(p, &perm->mask, &dot_cnt);
-+ if(!p)
- return -1;
-- else
-+ /* inet_aton(): When only one part is given, the value is stored
-+ * directly in the network address without any byte
-+ * rearrangement. */
-+ if(!dot_cnt)
- {
-- *q = '\0';
-- n_bits = atoi(p);
-+ unsigned int n_bits = ntohl(perm->mask.s_addr);
- if(n_bits > 32)
- return -1;
-- perm->mask.s_addr = htonl(n_bits ? (0xffffffffu << (32 - n_bits)) : 0);
-+ perm->mask.s_addr = !n_bits ? 0 : htonl(0xffffffffu << (32 - n_bits));
- }
- }
-- else if(isspace(*q))
-- {
-- *q = '\0';
-- if(!inet_aton(p, &perm->address))
-- return -1;
-- perm->mask.s_addr = 0xffffffffu;
-- }
-- else
-- {
-+
-+ p = get_sep(p);
-+ if(!p)
- return -1;
-- }
-- p = q + 1;
-
- /* fourth token: iport or iport_min-iport_max */
-- while(isspace(*p))
-- p++;
-- if(!isdigit(*p))
-+ p = get_range(p, &perm->iport_min, &perm->iport_max);
-+ if(!p)
- return -1;
-- for(q = p; isdigit(*q); q++);
-- if(*q=='-')
-- {
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->iport_min = (u_short)i;
-- q++;
-- p = q;
-- while(isdigit(*q))
-- q++;
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->iport_max = (u_short)i;
-- if(perm->iport_min > perm->iport_max)
-- return -1;
-- }
-- else if(isspace(*q) || *q == '\0')
-- {
-- *q = '\0';
-- i = atoi(p);
-- if(i > 65535)
-- return -1;
-- perm->iport_min = perm->iport_max = (u_short)i;
-- }
-- else
-- {
-+
-+ if(iseol(*p) || *p == '#')
-+ goto end;
-+ p = get_sep(p);
-+ if(!p)
- return -1;
-- }
-- p = q;
-+ if(iseol(*p) || *p == '#')
-+ goto end;
-
- /* fifth token: (optional) regex */
- p = get_next_token(p, &perm->re, 1);
-@@ -381,6 +388,7 @@ read_permission_line(struct upnpperm * p
- }
- }
-
-+end:
- #ifdef DEBUG
- printf("perm rule added : %s %hu-%hu %08x/%08x %hu-%hu %s\n",
- (perm->type==UPNPPERM_ALLOW) ? "allow" : "deny",
-@@ -427,8 +435,26 @@ write_permlist(int fd, const struct upnp
- write(fd, buf, l);
- if(perm->re)
- {
-- write(fd, " ", 1);
-- write(fd, perm->re, strlen(perm->re));
-+ const char * p;
-+ write(fd, " \"", 2);
-+ for(p = perm->re; *p != '\0'; p++)
-+ {
-+ if(*p == '"')
-+ {
-+ write(fd, "\\\"", 2);
-+ continue;
-+ }
-+
-+ if(*p == '\\')
-+ {
-+ write(fd, p, 1);
-+ p++;
-+ if(*p == '\0')
-+ break;
-+ }
-+ write(fd, p, 1);
-+ }
-+ write(fd, "\"", 1);
- }
- write(fd, "\n", 1);
- }
---- a/upnppermissions.h
-+++ b/upnppermissions.h
-@@ -43,7 +43,7 @@ struct upnpperm {
- * deny 0-65535 0.0.0.0/0 0-65535 */
- int
- read_permission_line(struct upnpperm * perm,
-- char * p);
-+ const char * p);
-
- void
- free_permission_line(struct upnpperm * perm);
-@@ -72,4 +72,3 @@ write_permlist(int fd, const struct upnp
- #endif
-
- #endif
--
diff --git a/miniupnpd/patches/030-allow-private-fix.patch b/miniupnpd/patches/030-allow-private-fix.patch
deleted file mode 100644
index b8a42b2b5..000000000
--- a/miniupnpd/patches/030-allow-private-fix.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-From 9ff3c71bfb6c7f7bf525d6bda447387de7257aff Mon Sep 17 00:00:00 2001
-From: Vlad Starodubtsev
-Date: Wed, 6 Aug 2025 19:04:18 +0300
-Subject: [PATCH] miniupnpd: fix ALLOWPRIVATEIPV4MASK condition
-
-Fixed usage of private/reserved WAN addresses if they are allowed in the configuration.
-
---- a/upnpsoap.c
-+++ b/upnpsoap.c
-@@ -370,7 +370,7 @@ GetExternalIPAddress(struct upnphttp * h
- ext_if_name);
- ext_ip_addr[0] = '\0';
- } else if (addr_is_reserved(&addr)) {
-- if (!GETFLAG(ALLOWPRIVATEIPV4MASK)) {
-+ if (GETFLAG(ALLOWPRIVATEIPV4MASK)) {
- syslog(LOG_WARNING, "IGNORED : private/reserved address %s is not suitable for external IP", ext_ip_addr);
- } else {
- syslog(LOG_NOTICE, "private/reserved address %s is not suitable for external IP", ext_ip_addr);
diff --git a/miniupnpd/patches/040-improve-logging.patch b/miniupnpd/patches/040-improve-logging.patch
deleted file mode 100644
index 998df1cb4..000000000
--- a/miniupnpd/patches/040-improve-logging.patch
+++ /dev/null
@@ -1,450 +0,0 @@
---- a/minissdp.c
-+++ b/minissdp.c
-@@ -1274,7 +1274,7 @@ ProcessSSDPData(int s, const char *bufr,
- else
- snprintf(ver_str, sizeof(ver_str), "%d", known_service_types[i].version);
- #endif
-- syslog(LOG_INFO, "Single search found");
-+ syslog(LOG_DEBUG, "Single search found");
- #ifdef DELAY_MSEARCH_RESPONSE
- delay = random() / (1 + RAND_MAX / (1000 * mx_value));
- #ifdef DEBUG
-@@ -1303,7 +1303,7 @@ ProcessSSDPData(int s, const char *bufr,
- #ifdef DELAY_MSEARCH_RESPONSE
- unsigned int delay_increment = (mx_value * 1000) / 15;
- #endif
-- syslog(LOG_INFO, "ssdp:all found");
-+ syslog(LOG_DEBUG, "ssdp:all found");
- for(i=0; known_service_types[i].s; i++)
- {
- #ifdef DELAY_MSEARCH_RESPONSE
-@@ -1361,7 +1361,7 @@ ProcessSSDPData(int s, const char *bufr,
- #endif
- if(0 == memcmp(st, uuidvalue_igd, l))
- {
-- syslog(LOG_INFO, "ssdp:uuid (IGD) found");
-+ syslog(LOG_DEBUG, "ssdp:uuid (IGD) found");
- SendSSDPResponse(s, sender, st, st_len, "",
- announced_host, http_port,
- #ifdef ENABLE_HTTPS
-@@ -1371,7 +1371,7 @@ ProcessSSDPData(int s, const char *bufr,
- }
- else if(0 == memcmp(st, uuidvalue_wan, l))
- {
-- syslog(LOG_INFO, "ssdp:uuid (WAN) found");
-+ syslog(LOG_DEBUG, "ssdp:uuid (WAN) found");
- SendSSDPResponse(s, sender, st, st_len, "",
- announced_host, http_port,
- #ifdef ENABLE_HTTPS
-@@ -1381,7 +1381,7 @@ ProcessSSDPData(int s, const char *bufr,
- }
- else if(0 == memcmp(st, uuidvalue_wcd, l))
- {
-- syslog(LOG_INFO, "ssdp:uuid (WCD) found");
-+ syslog(LOG_DEBUG, "ssdp:uuid (WCD) found");
- SendSSDPResponse(s, sender, st, st_len, "",
- announced_host, http_port,
- #ifdef ENABLE_HTTPS
-@@ -1646,4 +1646,3 @@ SubmitServicesToMiniSSDPD(const char * h
- syslog(LOG_DEBUG, "%d service submitted to MiniSSDPd", i);
- return 0;
- }
--
---- a/miniupnpd.8
-+++ b/miniupnpd.8
-@@ -42,10 +42,10 @@ and do not filter out low priority messa
- report system uptime instead of daemon uptime to clients.
- .TP
- .B \-S0
--disable "secure" mode so clients can only add mappings to other IPs
-+disable UPnP IGD secure mode, allow adding port maps for non-requesting IP addresses
- .TP
- .B \-N
--enable NAT-PMP and PCP functionality.
-+enable PCP/NAT-PMP protocols.
- .TP
- .BI \-u " uuid"
- set the uuid of the UPnP Internet Gateway Device.
-@@ -83,7 +83,7 @@ examples :
- sets the value of BOOTID.UPNP.ORG SSDP header
- .TP
- .B \-1
--force reporting IGDv1 in rootDesc when compiled as IGDv2 *use with care*
-+force reporting IGDv1 in rootDesc when compiled as IGDv2
- .SH "SEE ALSO"
- minissdpd(1) miniupnpc(3)
- .SH BUGS
---- a/miniupnpd.c
-+++ b/miniupnpd.c
-@@ -859,7 +859,7 @@ set_startup_time(void)
- }
- else
- {
-- syslog(LOG_INFO, "system uptime is %lu seconds", uptime);
-+ syslog(LOG_DEBUG, "system uptime is %lu seconds", uptime);
- }
- fclose(f);
- startup_time -= uptime;
-@@ -2098,6 +2098,22 @@ init(int argc, char * * argv, struct run
- pidfilename = NULL;
- #endif
-
-+syslog(LOG_NOTICE, "MiniUPnP daemon version " MINIUPNPD_VERSION " starting, enabled protocols: %s%s%s, ext_ifname=%s BOOTID=%u",
-+ GETFLAG(ENABLEUPNPMASK) ? "UPnP IGD" : "",
-+#ifdef ENABLE_NATPMP
-+ GETFLAG(ENABLEUPNPMASK) && GETFLAG(ENABLENATPMPMASK) ? " & " : "",
-+#ifdef ENABLE_PCP
-+ GETFLAG(ENABLENATPMPMASK) ? "PCP/NAT-PMP" : "",
-+#else
-+ GETFLAG(ENABLENATPMPMASK) ? "NAT-PMP" : "",
-+#endif
-+#else
-+ "", "",
-+#endif
-+ ext_if_name, upnp_bootid);
-+syslog(LOG_INFO, "More information at https://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/");
-+syslog(LOG_NOTICE, "Extra logging by setting log level to info (-v) or debug (-vv)");
-+
- #ifdef USE_SYSTEMD
- if (systemd_flag) {
- int r = sd_notify(0,
-@@ -2190,14 +2206,14 @@ print_usage:
- #if defined(USE_PF) || defined(USE_IPF)
- "\t-L sets packet log in pf and ipf on.\n"
- #endif
-- "\t-S0 disable \"secure\" mode so clients can add mappings to other ips\n"
-+ "\t-S0 disable UPnP IGD secure mode, allow adding port maps for non-requesting IP addresses\n"
- "\t-U causes miniupnpd to report system uptime instead "
- "of daemon uptime.\n"
- #ifdef ENABLE_NATPMP
- #ifdef ENABLE_PCP
-- "\t-N enables NAT-PMP and PCP functionality.\n"
-+ "\t-N enable PCP/NAT-PMP protocols.\n"
- #else
-- "\t-N enables NAT-PMP functionality.\n"
-+ "\t-N enable NAT-PMP protocol.\n"
- #endif
- #endif
- "\t-B sets bitrates reported by daemon in bits per second.\n"
-@@ -2217,7 +2233,7 @@ print_usage:
- "\t \"deny 0-65535 0.0.0.0/0 0-65535\"\n"
- "\t-b sets the value of BOOTID.UPNP.ORG SSDP header\n"
- #ifdef IGD_V2
-- "\t-1 force reporting IGDv1 in rootDesc *use with care*\n"
-+ "\t-1 force reporting IGDv1 in rootDesc\n"
- #endif
- "\t-v enables LOG_INFO messages, -vv LOG_DEBUG as well (default with -d)\n"
- "\t-h / --help prints this help and quits.\n"
-@@ -2398,21 +2414,9 @@ main(int argc, char * * argv)
- return 0;
- }
-
-- syslog(LOG_INFO, "version " MINIUPNPD_VERSION " starting%s%sext if %s BOOTID=%u",
--#ifdef ENABLE_NATPMP
--#ifdef ENABLE_PCP
-- GETFLAG(ENABLENATPMPMASK) ? " NAT-PMP/PCP " : " ",
--#else
-- GETFLAG(ENABLENATPMPMASK) ? " NAT-PMP " : " ",
--#endif
--#else
-- " ",
--#endif
-- GETFLAG(ENABLEUPNPMASK) ? "UPnP-IGD " : "",
-- ext_if_name, upnp_bootid);
- #ifdef ENABLE_IPV6
- if (strcmp(ext_if_name6, ext_if_name) != 0) {
-- syslog(LOG_INFO, "specific IPv6 ext if %s", ext_if_name6);
-+ syslog(LOG_NOTICE, "ext_ifname6=%s", ext_if_name6);
- }
- #endif
-
-@@ -2456,7 +2460,7 @@ main(int argc, char * * argv)
- return 1;
- }
- v.port = listen_port;
-- syslog(LOG_NOTICE, "HTTP listening on port %d", v.port);
-+ syslog(LOG_NOTICE, "Listening for UPnP IGD (SOAP/HTTP) traffic on port %d/TCP", v.port);
- #if defined(V6SOCKETS_ARE_V6ONLY) && defined(ENABLE_IPV6)
- if(!GETFLAG(IPV6DISABLEDMASK))
- {
-@@ -2482,7 +2486,7 @@ main(int argc, char * * argv)
- return 1;
- }
- v.https_port = listen_port;
-- syslog(LOG_NOTICE, "HTTPS listening on port %d", v.https_port);
-+ syslog(LOG_NOTICE, "Listening for UPnP IGD (SOAP/HTTPS) traffic on port %d/TCP", v.https_port);
- #if defined(V6SOCKETS_ARE_V6ONLY) && defined(ENABLE_IPV6)
- shttpsl_v4 = OpenAndConfHTTPSocket(&listen_port, 0);
- if(shttpsl_v4 < 0)
-@@ -2496,11 +2500,11 @@ main(int argc, char * * argv)
- if(!GETFLAG(IPV6DISABLEDMASK)) {
- if(find_ipv6_addr(lan_addrs.lh_first ? lan_addrs.lh_first->ifname : NULL,
- ipv6_addr_for_http_with_brackets, sizeof(ipv6_addr_for_http_with_brackets)) > 0) {
-- syslog(LOG_NOTICE, "HTTP IPv6 address given to control points : %s",
-+ syslog(LOG_NOTICE, "IPv6 enabled with address: %s",
- ipv6_addr_for_http_with_brackets);
- } else {
- memcpy(ipv6_addr_for_http_with_brackets, "[::1]", 6);
-- syslog(LOG_WARNING, "no HTTP IPv6 address, disabling IPv6");
-+ syslog(LOG_WARNING, "No IPv6 address, disable support");
- SETFLAG(IPV6DISABLEDMASK);
- }
- }
-@@ -2571,22 +2575,22 @@ main(int argc, char * * argv)
- }
-
- #ifdef ENABLE_NATPMP
-- /* open socket for NAT PMP traffic */
-+ /* open socket for NAT-PMP traffic */
- if(GETFLAG(ENABLENATPMPMASK))
- {
- if(OpenAndConfNATPMPSockets(snatpmp) < 0)
- #ifdef ENABLE_PCP
- {
-- syslog(LOG_ERR, "Failed to open sockets for NAT-PMP/PCP.");
-+ syslog(LOG_ERR, "Failed to open sockets for PCP/NAT-PMP.");
- } else {
-- syslog(LOG_NOTICE, "Listening for NAT-PMP/PCP traffic on port %u",
-+ syslog(LOG_NOTICE, "Listening for PCP/NAT-PMP traffic on port %u/UDP",
- NATPMP_PORT);
- }
- #else
- {
-- syslog(LOG_ERR, "Failed to open sockets for NAT PMP.");
-+ syslog(LOG_ERR, "Failed to open sockets for NAT-PMP.");
- } else {
-- syslog(LOG_NOTICE, "Listening for NAT-PMP traffic on port %u",
-+ syslog(LOG_NOTICE, "Listening for NAT-PMP traffic on port %u/UDP",
- NATPMP_PORT);
- }
- #endif
-@@ -2695,6 +2699,24 @@ main(int argc, char * * argv)
- }
- #endif /* HAS_LIBCAP_NG */
-
-+if (GETFLAG(ENABLEUPNPMASK) && !GETFLAG(SECUREMODEMASK))
-+ syslog(LOG_WARNING, "WARNING: secure_mode=no, allow adding port maps for non-requesting IP addresses via UPnP IGD");
-+#ifdef ENABLE_PCP
-+if (GETFLAG(ENABLENATPMPMASK) && GETFLAG(PCP_ALLOWTHIRDPARTYMASK))
-+ syslog(LOG_WARNING, "WARNING: pcp_allow_thirdparty=yes, allow adding port maps for non-requesting IP addresses via PCP");
-+#endif
-+if (GETFLAG(ENABLEUPNPMASK)) {
-+#ifdef IGD_V2
-+ if (GETFLAG(FORCEIGDDESCV1MASK)) {
-+ syslog(LOG_NOTICE, "UPnP IGD compatiblity mode set to IGDv1 (IPv4 only)");
-+ } else {
-+ syslog(LOG_NOTICE, "UPnP IGD compatiblity mode set to IGDv2");
-+ }
-+#else
-+ syslog(LOG_NOTICE, "UPnP IGD compatiblity mode set to IGDv1 (IPv4 only)");
-+#endif
-+}
-+
- #ifdef USE_SYSTEMD
- if (v.systemd_notify) {
- upnp_update_status();
-@@ -3162,7 +3184,7 @@ main(int argc, char * * argv)
- /* process SSDP packets */
- if(sudp >= 0 && FD_ISSET(sudp, &readset))
- {
-- /*syslog(LOG_INFO, "Received UDP Packet");*/
-+ /*syslog(LOG_DEBUG, "Received UDP Packet");*/
- #ifdef ENABLE_HTTPS
- ProcessSSDPRequest(sudp, (unsigned short)v.port, (unsigned short)v.https_port);
- #else
-@@ -3172,7 +3194,7 @@ main(int argc, char * * argv)
- #ifdef ENABLE_IPV6
- if(sudpv6 >= 0 && FD_ISSET(sudpv6, &readset))
- {
-- syslog(LOG_INFO, "Received UDP Packet (IPv6)");
-+ /*syslog(LOG_DEBUG, "Received UDP Packet (IPv6)");*/
- #ifdef ENABLE_HTTPS
- ProcessSSDPRequest(sudpv6, (unsigned short)v.port, (unsigned short)v.https_port);
- #else
---- a/miniupnpd.conf
-+++ b/miniupnpd.conf
-@@ -88,7 +88,8 @@
- # 120s and 86400s (24h) are suggested values from PCP-base
- #min_lifetime=120
- #max_lifetime=86400
--# allow THIRD_PARTY Option for MAP and PEER Opcodes (default is no)
-+# PCP allow third-party mapping option (default no)
-+# Allow adding port maps for non-requesting IP addresses
- #pcp_allow_thirdparty=yes
-
- # table names for netfilter nft. Default is "filter" for both
-@@ -131,8 +132,8 @@
- #bitrate_up=1000000
- #bitrate_down=10000000
-
--# Secure Mode, UPnP clients can only add mappings to their own IP
--# Enabled by default
-+# UPnP IGD secure mode (default yes)
-+# Allow adding port maps for requesting IP addresses only
- #secure_mode=no
-
- # Default presentation URL is HTTP address on port 80
---- a/natpmp.c
-+++ b/natpmp.c
-@@ -231,7 +231,7 @@ void ProcessIncomingNATPMPPacket(int s,
- syslog(LOG_ERR, "inet_ntop(natpmp): %m");
- }
-
-- syslog(LOG_INFO, "NAT-PMP request received from %s:%hu %dbytes",
-+ syslog(LOG_DEBUG, "NAT-PMP request received from %s:%hu %d bytes",
- senderaddrstr, ntohs(senderaddr->sin_port), n);
-
- if(n<2 || ((((req[1]-1)&~1)==0) && n<12)) {
-@@ -260,7 +260,7 @@ void ProcessIncomingNATPMPPacket(int s,
- resp[3] = 1; /* unsupported version */
- } else switch(req[1]) {
- case 0: /* Public address request */
-- syslog(LOG_INFO, "NAT-PMP public address request");
-+ syslog(LOG_DEBUG, "NAT-PMP public address request");
- FillPublicAddressResponse(resp, senderaddr->sin_addr.s_addr);
- resplen = 12;
- break;
-@@ -340,7 +340,7 @@ void ProcessIncomingNATPMPPacket(int s,
- eport_first = eport;
- } else if(eport == eport_first) { /* no eport available */
- if(any_eport_allowed == 0) { /* all eports rejected by permissions */
-- syslog(LOG_ERR, "No allowed eport for NAT-PMP %hu %s->%s:%hu",
-+ syslog(LOG_INFO, "No allowed eport for NAT-PMP %hu %s->%s:%hu",
- eport, proto_itoa(proto), senderaddrstr, iport);
- resp[3] = 2; /* Not Authorized/Refused */
- } else { /* at least one eport allowed (but none available) */
---- a/netfilter_nft/nftnlrdr_misc.c
-+++ b/netfilter_nft/nftnlrdr_misc.c
-@@ -104,7 +104,7 @@ nft_mnl_connect(void)
- return -1;
- }
- mnl_portid = mnl_socket_get_portid(mnl_sock);
-- syslog(LOG_INFO, "mnl_socket bound, port_id=%u", mnl_portid);
-+ syslog(LOG_DEBUG, "mnl_socket bound, port_id=%u", mnl_portid);
- return 0;
- }
-
---- a/netfilter_nft/nftpinhole.c
-+++ b/netfilter_nft/nftpinhole.c
-@@ -159,7 +159,6 @@ find_pinhole(const char * ifname,
- (0 == memcmp(&daddr, &p->daddr6, sizeof(struct in6_addr)))) {
-
- if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
- continue;
- }
-
-@@ -397,7 +396,6 @@ get_pinhole_info(unsigned short uid,
- if (timestamp) {
- int uid_temp;
- if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid_temp, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
- continue;
- }
-
-@@ -461,7 +459,6 @@ clean_pinhole_list(unsigned int * next_t
- continue;
-
- if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
- continue;
- }
-
---- a/pcpserver.c
-+++ b/pcpserver.c
-@@ -1087,7 +1087,7 @@ static void CreatePCPMap(pcp_info_t *pcp
- else
- r = CreatePCPMap_NAT(pcp_msg_info);
- pcp_msg_info->result_code = r;
-- syslog(r == PCP_SUCCESS ? LOG_INFO : LOG_ERR,
-+ syslog(LOG_INFO,
- "PCP MAP: %s mapping %s %hu->%s:%hu '%s'",
- r == PCP_SUCCESS ? "added" : "failed to add",
- proto_itoa(pcp_msg_info->protocol),
---- a/pf/pfpinhole.c
-+++ b/pf/pfpinhole.c
-@@ -246,12 +246,10 @@ int find_pinhole(const char * ifname,
- (0 == memcmp(&daddr, &RULE.dst.addr.v.a.addr.v6, sizeof(struct in6_addr)))) {
- #ifdef USE_LIBPFCTL
- if(sscanf(RULE.label[0], PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);
- continue;
- }
- #else /* USE_LIBPFCTL */
- if(sscanf(RULE.label, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);
- continue;
- }
- #endif /* USE_LIBPFCTL */
-@@ -563,7 +561,6 @@ int clean_pinhole_list(unsigned int * ne
- return -1;
- }
- if(sscanf(RULE.label[0], PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);
- continue;
- }
- #else /* USE_LIBPFCTL */
-@@ -574,7 +571,6 @@ int clean_pinhole_list(unsigned int * ne
- return -1;
- }
- if(sscanf(RULE.label, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
-- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);
- continue;
- }
- #endif /* USE_LIBPFCTL */
---- a/upnphttp.c
-+++ b/upnphttp.c
-@@ -513,7 +513,7 @@ ProcessHTTPPOST_upnphttp(struct upnphttp
- if(h->req_soapActionOff > 0)
- {
- /* we can process the request */
-- syslog(LOG_INFO, "SOAPAction: %.*s",
-+ syslog(LOG_DEBUG, "SOAPAction: %.*s",
- h->req_soapActionLen, h->req_buf + h->req_soapActionOff);
- ExecuteSoapAction(h,
- h->req_buf + h->req_soapActionOff,
-@@ -818,7 +818,7 @@ ProcessHttpQuery_upnphttp(struct upnphtt
- for(i = 0; i<15 && *p != '\r'; i++)
- HttpVer[i] = *(p++);
- HttpVer[i] = '\0';
-- syslog(LOG_INFO, "HTTP REQUEST from %s : %s %s (%s)",
-+ syslog(LOG_DEBUG, "HTTP REQUEST from %s : %s %s (%s)",
- h->clientaddr_str, HttpCommand, HttpUrl, HttpVer);
- ParseHttpHeaders(h);
- if(h->req_HostOff > 0 && h->req_HostLen > 0) {
---- a/upnpredirect.c
-+++ b/upnpredirect.c
-@@ -641,7 +641,7 @@ get_upnp_rules_state_list(int max_rules_
- {
- if(tmp->to_remove)
- {
-- syslog(LOG_NOTICE, "remove port mapping %hu %s because it has expired",
-+ syslog(LOG_INFO, "remove port mapping %hu %s because it has expired",
- tmp->eport, proto_itoa(tmp->proto));
- _upnp_delete_redir(tmp->eport, tmp->proto);
- *p = tmp->next;
---- a/upnpsoap.c
-+++ b/upnpsoap.c
-@@ -847,7 +847,7 @@ GetSpecificPortMappingEntry(struct upnph
- }
- else
- {
-- syslog(LOG_INFO, "%s: rhost='%s' %s %s found => %s:%u desc='%s' duration=%u",
-+ syslog(LOG_DEBUG, "%s: rhost='%s' %s %s found => %s:%u desc='%s' duration=%u",
- action,
- r_host ? r_host : "NULL", ext_port, protocol, int_ip,
- (unsigned int)iport, desc, leaseduration);
-@@ -1112,7 +1112,7 @@ GetGenericPortMappingEntry(struct upnpht
- return;
- }
-
-- syslog(LOG_INFO, "%s: index=%d", action, (int)index);
-+ syslog(LOG_DEBUG, "%s: index=%d", action, (int)index);
-
- rhost[0] = '\0';
- r = upnp_get_redirection_infos_by_index((int)index, &eport, protocol, &iport,
-@@ -2486,4 +2486,3 @@ SoapError(struct upnphttp * h, int errCo
- BuildResp2_upnphttp(h, 500, "Internal Server Error", body, bodylen);
- SendRespAndClose_upnphttp(h);
- }
--
diff --git a/miniupnpd/patches/010-upnp-igdv2-compat.patch b/miniupnpd/patches/10-upnp-igdv2-compat.patch
similarity index 84%
rename from miniupnpd/patches/010-upnp-igdv2-compat.patch
rename to miniupnpd/patches/10-upnp-igdv2-compat.patch
index 597e899c5..2307aeb83 100644
--- a/miniupnpd/patches/010-upnp-igdv2-compat.patch
+++ b/miniupnpd/patches/10-upnp-igdv2-compat.patch
@@ -1,21 +1,26 @@
-From a5fa10bbe0dbb69bbfc47f5865238f352fa71675 Mon Sep 17 00:00:00 2001
+From 38e01919d585b0fd663d2b3249963b336061cbd3 Mon Sep 17 00:00:00 2001
From: Self-Hosting-Group
<155233284+Self-Hosting-Group@users.noreply.github.com>
-Date: Thu, 27 Nov 2025 00:00:00 +0000
+Date: Wed, 25 Mar 2026 00:00:00 +0000
Subject: [PATCH] miniupnpd: UPnP IGDv2 Microsoft/Apple compatibility
-- Add workaround to list port maps with the Windows IGDv2-incompatible
+* Add workaround to list port maps with the Windows IGDv2-incompatible
client by returning an infinite (0) lease duration. To fix listing and
editing via GUI (Explorer/Network), if daemon was compiled with IGDv2
-- Extend detection to older versions of Windows and add Xbox
-- Detect Apple IGDv2-incompatible clients and apply existing workaround,
+* Extend detection to older versions of Windows and add Xbox
+* Detect Apple IGDv2-incompatible clients and apply existing workaround,
that only caused problems if PCP/NAT-PMP (prioritised) was disabled
Link: https://github.com/Self-Hosting-Group/miniupnp/tree/upnp-igdv2-compat
+Link: https://github.com/Self-Hosting-Group/wiki/wiki/Port-Mapping-Protocols-Overview#compatibility-issues
+---
+ upnphttp.c | 19 ++++++++++++++++---
+ upnpsoap.c | 16 ++++++++++++++++
+ 2 files changed, 32 insertions(+), 3 deletions(-)
--- a/upnphttp.c
+++ b/upnphttp.c
-@@ -303,9 +303,22 @@ ParseHttpHeaders(struct upnphttp * h)
+@@ -304,9 +304,22 @@ ParseHttpHeaders(struct upnphttp * h)
}
else if(strncasecmp(line, "user-agent:", 11) == 0)
{
diff --git a/miniupnpd/patches/20-improve-logging.patch b/miniupnpd/patches/20-improve-logging.patch
new file mode 100644
index 000000000..ee0673535
--- /dev/null
+++ b/miniupnpd/patches/20-improve-logging.patch
@@ -0,0 +1,1186 @@
+From 38e01919d585b0fd663d2b3249963b336061cbd3 Mon Sep 17 00:00:00 2001
+From: Self-Hosting-Group
+ <155233284+Self-Hosting-Group@users.noreply.github.com>
+Date: Tue, 12 May 2026 00:00:00 +0000
+Subject: [PATCH] miniupnpd: Improve logging
+
+* Clearer logging of enabled protocols/ports, IPv6 mapping, and UPnP IGD
+ compatibility mode… in start banner
+* Log warnings with an enabled allow third-party mapping option
+* Less verbose logging by changing the log level of many normally
+ occurring or internal messages, or those not relevant to users, to
+ debug or info
+* Comment out log-filling messages when internal interfaces lose link,
+ and for e.g. `rule with label '%s' is not a IGD pinhole`, as normally
+ occurring
+
+Fixes: https://redirect.github.com/openwrt/packages/issues/17601
+Fixes: https://redirect.github.com/openwrt/packages/issues/26483
+Link: https://github.com/Self-Hosting-Group/miniupnp/tree/improve-logging
+---
+ asyncsendto.c | 4 +--
+ getifaddr.c | 4 +--
+ minissdp.c | 24 ++++++-------
+ miniupnpd.c | 20 +++++------
+ natpmp.c | 16 ++++-----
+ netfilter/iptcrdr.c | 10 +++---
+ netfilter/iptpinhole.c | 4 +--
+ netfilter_nft/nftnlrdr.c | 2 +-
+ netfilter_nft/nftnlrdr_misc.c | 8 ++---
+ netfilter_nft/nftpinhole.c | 10 +++---
+ pcpserver.c | 18 +++++-----
+ pf/pfpinhole.c | 8 ++---
+ upnphttp.c | 6 ++--
+ upnppinhole.c | 48 ++++++++++++-------------
+ upnpredirect.c | 20 +++++------
+ upnpsoap.c | 28 +++++++--------
+ 16 files changed, 115 insertions(+), 115 deletions(-)
+
+--- a/asyncsendto.c
++++ b/asyncsendto.c
+@@ -254,9 +254,9 @@ int try_sendto(fd_set * writefds)
+ /* uncatched error */
+ if(sockaddr_to_string(elt->dest_addr, addr_str, sizeof(addr_str)) <= 0)
+ addr_str[0] = '\0';
+- syslog(LOG_ERR, "%s(sock=%d, len=%u, dest=%s): sendto: %m",
++ /*syslog(LOG_DEBUG, "%s(sock=%d, len=%u, dest=%s): sendto: %m",
+ "try_sendto", elt->sockfd, (unsigned)elt->len,
+- addr_str);
++ addr_str);*/
+ ret--;
+ }
+ } else if((int)n != (int)elt->len) {
+--- a/getifaddr.c
++++ b/getifaddr.c
+@@ -74,7 +74,7 @@ getifaddr(const char * ifname, char * bu
+ } else {
+ r = GETIFADDR_IOCTL_ERROR;
+ }
+- syslog(LOG_ERR, "ioctl(s, SIOCGIFADDR, ...): %m");
++ syslog(LOG_DEBUG, "ioctl(s, SIOCGIFADDR, ...): %m");
+ close(s);
+ return r;
+ }
+@@ -149,7 +149,7 @@ getifaddr(const char * ifname, char * bu
+ if(addr) *addr = ((struct sockaddr_in *)candidate->ifa_addr)->sin_addr;
+ if(mask) *mask = ((struct sockaddr_in *)candidate->ifa_netmask)->sin_addr;
+ } else {
+- syslog(LOG_WARNING, "no AF_INET address found for %s", ifname);
++ syslog(LOG_DEBUG, "no AF_INET address found for %s", ifname);
+ freeifaddrs(ifap);
+ return GETIFADDR_NO_ADDRESS;
+ }
+--- a/minissdp.c
++++ b/minissdp.c
+@@ -741,8 +741,8 @@ SendSSDPNotify(int s, const struct socka
+ }
+ n = sendto_or_schedule(s, bufr, l, 0, dest, dest_len);
+ if(n < 0) {
+- syslog(LOG_ERR, "sendto(udp_notify=%d, %s): %m", s,
+- host ? host : "NULL");
++ /*syslog(LOG_DEBUG, "sendto(udp_notify=%d, %s): %m", s,
++ host ? host : "NULL");*/
+ } else if(n != l) {
+ syslog(LOG_NOTICE, "sendto() sent %d out of %d bytes", n, l);
+ }
+@@ -752,8 +752,8 @@ SendSSDPNotify(int s, const struct socka
+ * discovery messages SHOULD NOT be sent more than three times. */
+ n = sendto_schedule(s, bufr, l, 0, dest, dest_len, 250);
+ if(n < 0) {
+- syslog(LOG_ERR, "sendto(udp_notify=%d, %s): %m", s,
+- host ? host : "NULL");
++ /*syslog(LOG_DEBUG, "sendto(udp_notify=%d, %s): %m", s,
++ host ? host : "NULL");*/
+ }
+ }
+
+@@ -1058,7 +1058,7 @@ ProcessSSDPData(int s, const char *bufr,
+ }
+ if(lan_addr == NULL)
+ {
+- syslog(LOG_WARNING, "SSDP packet sender %s (if_index=%d) not from a LAN, ignoring",
++ syslog(LOG_DEBUG, "SSDP packet sender %s (if_index=%d) not from a LAN, ignoring",
+ sender_str, source_if);
+ return;
+ }
+@@ -1161,7 +1161,7 @@ ProcessSSDPData(int s, const char *bufr,
+ sender_str );*/
+ if(st && (st_len > 0))
+ {
+- syslog(LOG_INFO, "SSDP M-SEARCH from %s ST: %.*s",
++ syslog(LOG_DEBUG, "SSDP M-SEARCH from %s ST: %.*s",
+ sender_str, st_len, st);
+ /* find in which sub network the client is */
+ #ifdef ENABLE_IPV6
+@@ -1274,7 +1274,7 @@ ProcessSSDPData(int s, const char *bufr,
+ else
+ snprintf(ver_str, sizeof(ver_str), "%d", known_service_types[i].version);
+ #endif
+- syslog(LOG_INFO, "Single search found");
++ syslog(LOG_DEBUG, "Single search found");
+ #ifdef DELAY_MSEARCH_RESPONSE
+ delay = random() / (1 + RAND_MAX / (1000 * mx_value));
+ #ifdef DEBUG
+@@ -1303,7 +1303,7 @@ ProcessSSDPData(int s, const char *bufr,
+ #ifdef DELAY_MSEARCH_RESPONSE
+ unsigned int delay_increment = (mx_value * 1000) / 15;
+ #endif
+- syslog(LOG_INFO, "ssdp:all found");
++ syslog(LOG_DEBUG, "ssdp:all found");
+ for(i=0; known_service_types[i].s; i++)
+ {
+ #ifdef DELAY_MSEARCH_RESPONSE
+@@ -1361,7 +1361,7 @@ ProcessSSDPData(int s, const char *bufr,
+ #endif
+ if(0 == memcmp(st, uuidvalue_igd, l))
+ {
+- syslog(LOG_INFO, "ssdp:uuid (IGD) found");
++ syslog(LOG_DEBUG, "ssdp:uuid (IGD) found");
+ SendSSDPResponse(s, sender, st, st_len, "",
+ announced_host, http_port,
+ #ifdef ENABLE_HTTPS
+@@ -1371,7 +1371,7 @@ ProcessSSDPData(int s, const char *bufr,
+ }
+ else if(0 == memcmp(st, uuidvalue_wan, l))
+ {
+- syslog(LOG_INFO, "ssdp:uuid (WAN) found");
++ syslog(LOG_DEBUG, "ssdp:uuid (WAN) found");
+ SendSSDPResponse(s, sender, st, st_len, "",
+ announced_host, http_port,
+ #ifdef ENABLE_HTTPS
+@@ -1381,7 +1381,7 @@ ProcessSSDPData(int s, const char *bufr,
+ }
+ else if(0 == memcmp(st, uuidvalue_wcd, l))
+ {
+- syslog(LOG_INFO, "ssdp:uuid (WCD) found");
++ syslog(LOG_DEBUG, "ssdp:uuid (WCD) found");
+ SendSSDPResponse(s, sender, st, st_len, "",
+ announced_host, http_port,
+ #ifdef ENABLE_HTTPS
+@@ -1442,7 +1442,7 @@ SendSSDPbyebye(int s, const struct socka
+ n = sendto_or_schedule(s, bufr, l, 0, dest, destlen);
+ if(n < 0)
+ {
+- syslog(LOG_ERR, "sendto(udp_shutdown=%d) to %s: %m", s, dest_str);
++ syslog(LOG_DEBUG, "sendto(udp_shutdown=%d) to %s: %m", s, dest_str);
+ return -1;
+ }
+ else if(n != l)
+--- a/miniupnpd.c
++++ b/miniupnpd.c
+@@ -489,7 +489,7 @@ ProcessIncomingHTTP(int shttpl, const ch
+ if(get_lan_for_peer((struct sockaddr *)&clientname) == NULL)
+ {
+ /* The peer is not a LAN ! */
+- syslog(LOG_WARNING,
++ syslog(LOG_DEBUG,
+ "%s peer %s is not from a LAN, closing the connection",
+ protocol, addr_str);
+ close(shttp);
+@@ -859,7 +859,7 @@ set_startup_time(void)
+ }
+ else
+ {
+- syslog(LOG_INFO, "system uptime is %lu seconds", uptime);
++ syslog(LOG_DEBUG, "system uptime is %lu seconds", uptime);
+ }
+ fclose(f);
+ startup_time -= uptime;
+@@ -2109,6 +2109,22 @@ init(int argc, char * * argv, struct run
+ pidfilename = NULL;
+ #endif
+
++syslog(LOG_NOTICE, "MiniUPnP daemon " MINIUPNPD_VERSION " starting, enable protocols %s%s%s, ext_ifname=%s BOOTID=%u",
++ GETFLAG(ENABLEUPNPMASK) ? "UPnP IGD" : "",
++#ifdef ENABLE_NATPMP
++ GETFLAG(ENABLEUPNPMASK) && GETFLAG(ENABLENATPMPMASK) ? " & " : "",
++#ifdef ENABLE_PCP
++ GETFLAG(ENABLENATPMPMASK) ? "PCP/NAT-PMP" : "",
++#else
++ GETFLAG(ENABLENATPMPMASK) ? "NAT-PMP" : "",
++#endif
++#else
++ "", "",
++#endif
++ ext_if_name, upnp_bootid);
++syslog(LOG_INFO, "More information at https://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/");
++syslog(LOG_NOTICE, "Extra logging with log level info (-v) or debug (-v -v)");
++
+ #ifdef USE_SYSTEMD
+ if (systemd_flag) {
+ int r = sd_notify(0,
+@@ -2121,7 +2137,7 @@ init(int argc, char * * argv, struct run
+
+ #ifdef ENABLE_LEASEFILE
+ /*remove(lease_file);*/
+- syslog(LOG_INFO, "Reloading rules from lease file");
++ syslog(LOG_INFO, "Reloading port maps from lease file");
+ reload_from_lease_file();
+ #ifdef ENABLE_UPNPPINHOLE
+ reload_from_lease_file6();
+@@ -2409,21 +2425,9 @@ main(int argc, char * * argv)
+ return 0;
+ }
+
+- syslog(LOG_INFO, "version " MINIUPNPD_VERSION " starting%s%sext if %s BOOTID=%u",
+-#ifdef ENABLE_NATPMP
+-#ifdef ENABLE_PCP
+- GETFLAG(ENABLENATPMPMASK) ? " NAT-PMP/PCP " : " ",
+-#else
+- GETFLAG(ENABLENATPMPMASK) ? " NAT-PMP " : " ",
+-#endif
+-#else
+- " ",
+-#endif
+- GETFLAG(ENABLEUPNPMASK) ? "UPnP-IGD " : "",
+- ext_if_name, upnp_bootid);
+ #ifdef ENABLE_IPV6
+ if (strcmp(ext_if_name6, ext_if_name) != 0) {
+- syslog(LOG_INFO, "specific IPv6 ext if %s", ext_if_name6);
++ syslog(LOG_INFO, "Separate ext_ifname6=%s set", ext_if_name6);
+ }
+ #endif
+
+@@ -2467,7 +2471,7 @@ main(int argc, char * * argv)
+ return 1;
+ }
+ v.port = listen_port;
+- syslog(LOG_NOTICE, "HTTP listening on port %d", v.port);
++ syslog(LOG_NOTICE, "Listening for UPnP IGD (SOAP/HTTP) traffic on port %d/TCP, SSDP 1900/UDP", v.port);
+ #if defined(V6SOCKETS_ARE_V6ONLY) && defined(ENABLE_IPV6)
+ if(!GETFLAG(IPV6DISABLEDMASK))
+ {
+@@ -2493,7 +2497,7 @@ main(int argc, char * * argv)
+ return 1;
+ }
+ v.https_port = listen_port;
+- syslog(LOG_NOTICE, "HTTPS listening on port %d", v.https_port);
++ syslog(LOG_NOTICE, "Listening for UPnP IGD (SOAP/HTTPS) traffic on port %d/TCP", v.https_port);
+ #if defined(V6SOCKETS_ARE_V6ONLY) && defined(ENABLE_IPV6)
+ shttpsl_v4 = OpenAndConfHTTPSocket(&listen_port, 0);
+ if(shttpsl_v4 < 0)
+@@ -2507,11 +2511,11 @@ main(int argc, char * * argv)
+ if(!GETFLAG(IPV6DISABLEDMASK)) {
+ if(find_ipv6_addr(lan_addrs.lh_first ? lan_addrs.lh_first->ifname : NULL,
+ ipv6_addr_for_http_with_brackets, sizeof(ipv6_addr_for_http_with_brackets)) > 0) {
+- syslog(LOG_NOTICE, "HTTP IPv6 address given to control points : %s",
++ syslog(LOG_NOTICE, "IPv6 address given to UPnP IGD clients: %s",
+ ipv6_addr_for_http_with_brackets);
+ } else {
+ memcpy(ipv6_addr_for_http_with_brackets, "[::1]", 6);
+- syslog(LOG_WARNING, "no HTTP IPv6 address, disabling IPv6");
++ syslog(LOG_DEBUG, "no HTTP IPv6 address, disabling IPv6");
+ SETFLAG(IPV6DISABLEDMASK);
+ }
+ }
+@@ -2563,7 +2567,7 @@ main(int argc, char * * argv)
+ if(SendSSDPGoodbye(snotify, addr_count * 2) < 0)
+ #endif
+ {
+- syslog(LOG_WARNING, "Failed to broadcast good-bye notifications");
++ syslog(LOG_DEBUG, "Failed to broadcast good-bye notifications");
+ }
+ }
+ #endif /* UPNP_STRICT */
+@@ -2588,16 +2592,16 @@ main(int argc, char * * argv)
+ if(OpenAndConfNATPMPSockets(snatpmp) < 0)
+ #ifdef ENABLE_PCP
+ {
+- syslog(LOG_ERR, "Failed to open sockets for NAT-PMP/PCP.");
++ syslog(LOG_ERR, "Failed to open port 5351/UDP for PCP/NAT-PMP");
+ } else {
+- syslog(LOG_NOTICE, "Listening for NAT-PMP/PCP traffic on port %u",
++ syslog(LOG_NOTICE, "Listening for PCP/NAT-PMP traffic on port %u/UDP",
+ NATPMP_PORT);
+ }
+ #else
+ {
+- syslog(LOG_ERR, "Failed to open sockets for NAT PMP.");
++ syslog(LOG_ERR, "Failed to open port 5351/UDP for NAT-PMP");
+ } else {
+- syslog(LOG_NOTICE, "Listening for NAT-PMP traffic on port %u",
++ syslog(LOG_NOTICE, "Listening for NAT-PMP traffic on port %u/UDP",
+ NATPMP_PORT);
+ }
+ #endif
+@@ -2706,6 +2710,30 @@ main(int argc, char * * argv)
+ }
+ #endif /* HAS_LIBCAP_NG */
+
++if (GETFLAG(ENABLEUPNPMASK) && !GETFLAG(SECUREMODEMASK))
++ syslog(LOG_WARNING, "WARNING: Allow adding port maps for non-requesting IP addresses via UPnP IGD, as secure_mode=no set");
++#ifdef ENABLE_PCP
++if (GETFLAG(ENABLENATPMPMASK) && GETFLAG(PCP_ALLOWTHIRDPARTYMASK))
++ syslog(LOG_WARNING, "WARNING: Allow adding port maps for non-requesting IP addresses via PCP, as pcp_allow_thirdparty=yes set");
++#endif
++#ifdef ENABLE_IPV6
++if (GETFLAG(IPV6DISABLEDMASK))
++ syslog(LOG_NOTICE, "IPv6 mapping disabled");
++#else
++syslog(LOG_NOTICE, "IPv6 mapping disabled");
++#endif
++if (GETFLAG(ENABLEUPNPMASK)) {
++#ifdef IGD_V2
++ if (GETFLAG(FORCEIGDDESCV1MASK)) {
++ syslog(LOG_NOTICE, "UPnP IGD compatibility mode set to IGDv1 (IPv4 only)");
++ } else {
++ syslog(LOG_NOTICE, "UPnP IGD compatibility mode set to IGDv2 (with workarounds)");
++ }
++#else
++ syslog(LOG_NOTICE, "UPnP IGD compatibility mode set to IGDv1 (IPv4 only)");
++#endif
++}
++
+ #ifdef USE_SYSTEMD
+ if (v.systemd_notify) {
+ upnp_update_status();
+@@ -3016,7 +3044,7 @@ main(int argc, char * * argv)
+ }
+ i = try_sendto(&writeset);
+ if(i < 0) {
+- syslog(LOG_ERR, "try_sendto failed to send %d packets", -i);
++ /*syslog(LOG_DEBUG, "try_sendto failed to send %d packets", -i);*/
+ }
+ #ifdef USE_MINIUPNPDCTL
+ for(ectl = ctllisthead.lh_first; ectl;)
+@@ -3116,7 +3144,7 @@ main(int argc, char * * argv)
+ if(lan_addr == NULL) {
+ char sender_str[64];
+ sockaddr_to_string((struct sockaddr *)&senderaddr, sender_str, sizeof(sender_str));
+- syslog(LOG_WARNING, "NAT-PMP packet sender %s not from a LAN, ignoring",
++ syslog(LOG_DEBUG, "NAT-PMP packet sender %s not from a LAN, ignoring",
+ sender_str);
+ continue;
+ }
+@@ -3139,7 +3167,7 @@ main(int argc, char * * argv)
+ if(lan_addr == NULL) {
+ char sender_str[64];
+ sockaddr_to_string((struct sockaddr *)&senderaddr, sender_str, sizeof(sender_str));
+- syslog(LOG_WARNING, "NAT-PMP packet sender %s not from a LAN, ignoring",
++ syslog(LOG_DEBUG, "NAT-PMP packet sender %s not from a LAN, ignoring",
+ sender_str);
+ continue;
+ }
+@@ -3173,7 +3201,7 @@ main(int argc, char * * argv)
+ /* process SSDP packets */
+ if(sudp >= 0 && FD_ISSET(sudp, &readset))
+ {
+- /*syslog(LOG_INFO, "Received UDP Packet");*/
++ /*syslog(LOG_DEBUG, "Received UDP Packet");*/
+ #ifdef ENABLE_HTTPS
+ ProcessSSDPRequest(sudp, (unsigned short)v.port, (unsigned short)v.https_port);
+ #else
+@@ -3183,7 +3211,7 @@ main(int argc, char * * argv)
+ #ifdef ENABLE_IPV6
+ if(sudpv6 >= 0 && FD_ISSET(sudpv6, &readset))
+ {
+- syslog(LOG_INFO, "Received UDP Packet (IPv6)");
++ /*syslog(LOG_DEBUG, "Received UDP Packet (IPv6)");*/
+ #ifdef ENABLE_HTTPS
+ ProcessSSDPRequest(sudpv6, (unsigned short)v.port, (unsigned short)v.https_port);
+ #else
+@@ -3285,7 +3313,7 @@ main(int argc, char * * argv)
+
+ shutdown:
+
+- syslog(LOG_NOTICE, "shutting down MiniUPnPd");
++ syslog(LOG_NOTICE, "Shutting down MiniUPnPd");
+ #ifdef USE_SYSTEMD
+ if (v.systemd_notify) {
+ sd_notify(0,
+@@ -3304,7 +3332,7 @@ shutdown:
+ if(SendSSDPGoodbye(snotify, addr_count * 2) < 0)
+ #endif
+ {
+- syslog(LOG_ERR, "Failed to broadcast good-bye notifications");
++ syslog(LOG_DEBUG, "Failed to broadcast good-bye notifications");
+ }
+ }
+ /* try to send pending packets */
+--- a/natpmp.c
++++ b/natpmp.c
+@@ -106,7 +106,7 @@ static void FillPublicAddressResponse(un
+ resp[3] = 3; /* Network Failure (e.g. NAT box itself
+ * has not obtained a DHCP lease) */
+ } else if(getifaddr(ext_if_name, tmp, INET_ADDRSTRLEN, &addr, NULL) < 0) {
+- syslog(LOG_ERR, "Failed to get IP for interface %s", ext_if_name);
++ syslog(LOG_DEBUG, "Failed to get IP for interface %s", ext_if_name);
+ resp[3] = 3; /* Network Failure (e.g. NAT box itself
+ * has not obtained a DHCP lease) */
+ } else if (!GETFLAG(ALLOWPRIVATEIPV4MASK) && addr_is_reserved(&addr)) {
+@@ -231,7 +231,7 @@ void ProcessIncomingNATPMPPacket(int s,
+ syslog(LOG_ERR, "inet_ntop(natpmp): %m");
+ }
+
+- syslog(LOG_INFO, "NAT-PMP request received from %s:%hu %dbytes",
++ syslog(LOG_DEBUG, "NAT-PMP request received from %s:%hu %d bytes",
+ senderaddrstr, ntohs(senderaddr->sin_port), n);
+
+ if(n<2 || ((((req[1]-1)&~1)==0) && n<12)) {
+@@ -260,7 +260,7 @@ void ProcessIncomingNATPMPPacket(int s,
+ resp[3] = 1; /* unsupported version */
+ } else switch(req[1]) {
+ case 0: /* Public address request */
+- syslog(LOG_INFO, "NAT-PMP public address request");
++ syslog(LOG_DEBUG, "NAT-PMP public address request");
+ FillPublicAddressResponse(resp, senderaddr->sin_addr.s_addr);
+ resplen = 12;
+ break;
+@@ -319,7 +319,7 @@ void ProcessIncomingNATPMPPacket(int s,
+ resp[3] = 2; /* Not Authorized/Refused */
+ break;
+ } else {
+- syslog(LOG_INFO, "NAT-PMP %s port %hu mapping removed",
++ syslog(LOG_DEBUG, "NAT-PMP %s port %hu mapping removed",
+ proto2==IPPROTO_TCP?"TCP":"UDP", eport2);
+ index--;
+ }
+@@ -340,7 +340,7 @@ void ProcessIncomingNATPMPPacket(int s,
+ eport_first = eport;
+ } else if(eport == eport_first) { /* no eport available */
+ if(any_eport_allowed == 0) { /* all eports rejected by permissions */
+- syslog(LOG_ERR, "No allowed eport for NAT-PMP %hu %s->%s:%hu",
++ syslog(LOG_INFO, "No allowed eport for NAT-PMP %hu %s->%s:%hu",
+ eport, proto_itoa(proto), senderaddrstr, iport);
+ resp[3] = 2; /* Not Authorized/Refused */
+ } else { /* at least one eport allowed (but none available) */
+@@ -443,7 +443,7 @@ void SendNATPMPPublicAddressChangeNotifi
+ FillPublicAddressResponse(notif, 0);
+ if(notif[3])
+ {
+- syslog(LOG_WARNING, "%s: cannot get public IP address, stopping",
++ syslog(LOG_DEBUG, "%s: cannot get public IP address, stopping",
+ "SendNATPMPPublicAddressChangeNotification");
+ return;
+ }
+@@ -471,7 +471,7 @@ void SendNATPMPPublicAddressChangeNotifi
+ (struct sockaddr *)&sockname, sizeof(struct sockaddr_in));
+ if(n < 0)
+ {
+- syslog(LOG_ERR, "%s: sendto(s_udp=%d, port=%d): %m",
++ syslog(LOG_DEBUG, "%s: sendto(s_udp=%d, port=%d): %m",
+ "SendNATPMPPublicAddressChangeNotification", sockets[j], NATPMP_PORT);
+ return;
+ }
+@@ -481,7 +481,7 @@ void SendNATPMPPublicAddressChangeNotifi
+ (struct sockaddr *)&sockname, sizeof(struct sockaddr_in));
+ if(n < 0)
+ {
+- syslog(LOG_ERR, "%s: sendto(s_udp=%d, port=%d): %m",
++ syslog(LOG_DEBUG, "%s: sendto(s_udp=%d, port=%d): %m",
+ "SendNATPMPPublicAddressChangeNotification", sockets[j], NATPMP_NOTIF_PORT);
+ return;
+ }
+--- a/netfilter/iptcrdr.c
++++ b/netfilter/iptcrdr.c
+@@ -711,7 +711,7 @@ delete_filter_rule(const char * ifname,
+ continue;
+ }
+ index = i;
+- /*syslog(LOG_INFO, "Trying to delete filter rule at index %u", index);*/
++ /*syslog(LOG_DEBUG, "Trying to delete filter rule at index %u", index);*/
+ r = delete_rule_and_commit(index, h, miniupnpd_forward_chain, "delete_filter_rule");
+ h = NULL;
+ break;
+@@ -804,7 +804,7 @@ delete_redirect_and_filter_rules(unsigne
+ #endif
+ if(r == 0)
+ {
+- syslog(LOG_INFO, "Trying to delete nat rule at index %u", index);
++ syslog(LOG_DEBUG, "Trying to delete nat rule at index %u", index);
+ /* Now delete both rules */
+ /* first delete the nat rule */
+ h = iptc_init("nat");
+@@ -848,7 +848,7 @@ delete_redirect_and_filter_rules(unsigne
+ if(iaddr != e->ip.dst.s_addr)
+ continue;
+ index = i;
+- syslog(LOG_INFO, "Trying to delete filter rule at index %u", index);
++ syslog(LOG_DEBUG, "Trying to delete filter rule at index %u", index);
+ r = delete_rule_and_commit(index, h, miniupnpd_forward_chain, "delete_filter_rule");
+ h = NULL;
+ break;
+@@ -906,7 +906,7 @@ delete_redirect_and_filter_rules(unsigne
+ }
+
+ index = i;
+- syslog(LOG_INFO, "Trying to delete peer rule at index %u", index);
++ syslog(LOG_DEBUG, "Trying to delete peer rule at index %u", index);
+ r2 = delete_rule_and_commit(index, h, miniupnpd_nat_postrouting_chain, "delete_peer_rule");
+ h = NULL;
+ break;
+@@ -958,7 +958,7 @@ delete_redirect_and_filter_rules(unsigne
+ if(iaddr != e->ip.src.s_addr)
+ continue;
+ index = i;
+- syslog(LOG_INFO, "Trying to delete dscp rule at index %u", index);
++ syslog(LOG_DEBUG, "Trying to delete dscp rule at index %u", index);
+ r2 = delete_rule_and_commit(index, h, miniupnpd_nat_chain, "delete_dscp_rule");
+ h = NULL;
+ break;
+--- a/netfilter/iptpinhole.c
++++ b/netfilter/iptpinhole.c
+@@ -295,14 +295,14 @@ find_pinhole(const char * ifname,
+
+ if(rem_host && (rem_host[0] != '\0')) {
+ if (inet_pton(AF_INET6, rem_host, &saddr) < 1) {
+- syslog(LOG_WARNING, "Failed to parse INET6 address \"%s\"", rem_host);
++ syslog(LOG_INFO, "Failed to parse INET6 address \"%s\"", rem_host);
+ memset(&saddr, 0, sizeof(struct in6_addr));
+ }
+ } else {
+ memset(&saddr, 0, sizeof(struct in6_addr));
+ }
+ if (inet_pton(AF_INET6, int_client, &daddr) < 1) {
+- syslog(LOG_WARNING, "Failed to parse INET6 address \"%s\"", int_client);
++ syslog(LOG_INFO, "Failed to parse INET6 address \"%s\"", int_client);
+ memset(&daddr, 0, sizeof(struct in6_addr));
+ }
+ for(p = pinhole_list.lh_first; p != NULL; p = p->entries.le_next) {
+--- a/netfilter_nft/nftnlrdr.c
++++ b/netfilter_nft/nftnlrdr.c
+@@ -353,7 +353,7 @@ delete_redirect_and_filter_rules(unsigne
+ }
+ }
+ } else {
+- syslog(LOG_WARNING, "%s: redirect rule with eport=%hu proto %d NOT FOUND",
++ syslog(LOG_INFO, "%s: redirect rule with eport=%hu proto %d NOT FOUND",
+ "delete_redirect_and_filter_rules", eport, proto);
+ }
+
+--- a/netfilter_nft/nftnlrdr_misc.c
++++ b/netfilter_nft/nftnlrdr_misc.c
+@@ -104,7 +104,7 @@ nft_mnl_connect(void)
+ return -1;
+ }
+ mnl_portid = mnl_socket_get_portid(mnl_sock);
+- syslog(LOG_INFO, "mnl_socket bound, port_id=%u", mnl_portid);
++ syslog(LOG_DEBUG, "mnl_socket bound, port_id=%u", mnl_portid);
+ return 0;
+ }
+
+@@ -745,7 +745,7 @@ refresh_nft_cache(struct rule_list *head
+ errno = 0;
+ ret = mnl_cb_run(buf, n, mnl_seq, mnl_portid, table_cb, &data);
+ if (ret <= -1 /*== MNL_CB_ERROR*/) {
+- syslog(LOG_ERR, "%s: mnl_cb_run returned %d: %m",
++ syslog(LOG_DEBUG, "%s: mnl_cb_run returned %d: %m",
+ "refresh_nft_cache", ret);
+ return -1;
+ }
+@@ -1279,7 +1279,7 @@ nft_send_rule(struct nftnl_rule * rule,
+
+ result = send_batch(batch);
+ if (result < 0) {
+- syslog(LOG_ERR, "%s(%p, %d, %d) send_batch failed %d",
++ syslog(LOG_DEBUG, "%s(%p, %d, %d) send_batch failed %d",
+ "nft_send_rule", rule, (int)cmd, (int)chain_type, result);
+ }
+ }
+@@ -1462,7 +1462,7 @@ send_batch(struct mnl_nlmsg_batch *batch
+ errno = 0;
+ ret = mnl_cb_run(buf, n, 0, mnl_portid, NULL, NULL);
+ if (ret <= -1 /*== MNL_CB_ERROR*/) {
+- syslog(LOG_ERR, "%s: mnl_cb_run returned %d: %m",
++ syslog(LOG_DEBUG, "%s: mnl_cb_run returned %d: %m",
+ "send_batch", ret);
+ return -4;
+ }
+--- a/netfilter_nft/nftpinhole.c
++++ b/netfilter_nft/nftpinhole.c
+@@ -129,7 +129,7 @@ find_pinhole(const char * ifname,
+
+ if (rem_host && rem_host[0] != '\0' && rem_host[0] != '*') {
+ if (inet_pton(AF_INET6, rem_host, &saddr) < 1) {
+- syslog(LOG_WARNING, "Failed to parse INET6 address \"%s\"", rem_host);
++ syslog(LOG_INFO, "Failed to parse INET6 address \"%s\"", rem_host);
+ memset(&saddr, 0, sizeof(struct in6_addr));
+ }
+ } else {
+@@ -137,7 +137,7 @@ find_pinhole(const char * ifname,
+ }
+
+ if (inet_pton(AF_INET6, int_client, &daddr) < 1) {
+- syslog(LOG_WARNING, "Failed to parse INET6 address \"%s\"", int_client);
++ syslog(LOG_INFO, "Failed to parse INET6 address \"%s\"", int_client);
+ memset(&daddr, 0, sizeof(struct in6_addr));
+ }
+
+@@ -159,7 +159,7 @@ find_pinhole(const char * ifname,
+ (0 == memcmp(&daddr, &p->daddr6, sizeof(struct in6_addr)))) {
+
+ if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);*/
+ continue;
+ }
+
+@@ -396,7 +396,7 @@ get_pinhole_info(unsigned short uid,
+ if (timestamp) {
+ int uid_temp;
+ if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid_temp, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);*/
+ continue;
+ }
+
+@@ -460,7 +460,7 @@ clean_pinhole_list(unsigned int * next_t
+ continue;
+
+ if (sscanf(p->desc, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", p->desc);*/
+ continue;
+ }
+
+--- a/pcpserver.c
++++ b/pcpserver.c
+@@ -1086,7 +1086,7 @@ static void CreatePCPMap(pcp_info_t *pcp
+ else
+ r = CreatePCPMap_NAT(pcp_msg_info);
+ pcp_msg_info->result_code = r;
+- syslog(r == PCP_SUCCESS ? LOG_INFO : LOG_ERR,
++ syslog(LOG_INFO,
+ "PCP MAP: %s mapping %s %hu->%s:%hu '%s'",
+ r == PCP_SUCCESS ? "added" : "failed to add",
+ proto_itoa(pcp_msg_info->protocol),
+@@ -1128,7 +1128,7 @@ static void DeletePCPMap(pcp_info_t *pcp
+ if(0 != strcmp(desc, pcp_msg_info->desc)) {
+ /* nonce does not match */
+ pcp_msg_info->result_code = PCP_ERR_NOT_AUTHORIZED;
+- syslog(LOG_ERR, "Unauthorized to remove PCP mapping internal port %hu, protocol %s",
++ syslog(LOG_INFO, "Unauthorized to remove PCP mapping internal port %hu, protocol %s",
+ iport, proto_itoa(pcp_msg_info->protocol));
+ return;
+ } else {
+@@ -1146,14 +1146,14 @@ static void DeletePCPMap(pcp_info_t *pcp
+ desc, sizeof(desc),
+ NULL /* lifetime */);
+ if (uid < 0) {
+- syslog(LOG_ERR, "Failed to find mapping to %s:%hu, protocol %s",
++ syslog(LOG_INFO, "Failed to find mapping to %s:%hu, protocol %s",
+ pcp_msg_info->mapped_str, iport, proto_itoa(pcp_msg_info->protocol));
+ return;
+ } else {
+ if(0 != strcmp(desc, pcp_msg_info->desc)) {
+ /* nonce does not match */
+ pcp_msg_info->result_code = PCP_ERR_NOT_AUTHORIZED;
+- syslog(LOG_ERR, "Unauthorized to remove PCP mapping internal port %hu, protocol %s",
++ syslog(LOG_INFO, "Unauthorized to remove PCP mapping internal port %hu, protocol %s",
+ iport, proto_itoa(pcp_msg_info->protocol));
+ return;
+ } else {
+@@ -1168,7 +1168,7 @@ static void DeletePCPMap(pcp_info_t *pcp
+ syslog(LOG_INFO, "PCP: %s port %hu mapping removed",
+ proto==IPPROTO_TCP?"TCP":"UDP", (pcp_msg_info->is_fw ? iport : eport2));
+ } else {
+- syslog(LOG_ERR, "Failed to remove PCP mapping to %s:%hu %s",
++ syslog(LOG_INFO, "Failed to remove PCP mapping to %s:%hu %s",
+ pcp_msg_info->mapped_str, iport, proto_itoa(proto));
+ pcp_msg_info->result_code = PCP_ERR_NO_RESOURCES;
+ }
+@@ -1391,7 +1391,7 @@ static int processPCPRequest(void * req,
+ CreatePCPMap(pcp_msg_info);
+ }
+ } else {
+- syslog(LOG_ERR, "PCP: Invalid PCP v2 MAP message.");
++ syslog(LOG_DEBUG, "PCP: Invalid PCP v2 MAP message.");
+ return pcp_msg_info->result_code;
+ }
+
+@@ -1601,7 +1601,7 @@ int ProcessIncomingPCPPacket(int s, unsi
+ if (!GETFLAG(PCP_ALLOWTHIRDPARTYMASK)) {
+ lan_addr = get_lan_for_peer(senderaddr);
+ if(lan_addr == NULL) {
+- syslog(LOG_WARNING, "PCP packet sender %s not from a LAN, ignoring",
++ syslog(LOG_DEBUG, "PCP packet sender %s not from a LAN, ignoring",
+ addr_str);
+ return 0;
+ }
+@@ -1722,7 +1722,7 @@ void PCPSendUnsolicitedAnnounce(int * so
+ }
+ len = sendto_or_schedule(sockets[i], buff, PCP_MIN_LEN, 0, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
+ if( len < 0 ) {
+- syslog(LOG_ERR, "PCPSendUnsolicitedAnnounce(sockets[%d]) sendto(): %m", i);
++ syslog(LOG_DEBUG, "PCPSendUnsolicitedAnnounce(sockets[%d]) sendto(): %m", i);
+ }
+ }
+ #ifdef ENABLE_IPV6
+@@ -1733,7 +1733,7 @@ void PCPSendUnsolicitedAnnounce(int * so
+ addr6.sin6_port = htons(5350);
+ len = sendto_or_schedule(socket6, buff, PCP_MIN_LEN, 0, (struct sockaddr *)&addr6, sizeof(struct sockaddr_in6));
+ if( len < 0 ) {
+- syslog(LOG_ERR, "PCPSendUnsolicitedAnnounce() IPv6 sendto(): %m");
++ syslog(LOG_DEBUG, "PCPSendUnsolicitedAnnounce() IPv6 sendto(): %m");
+ }
+ }
+ #endif /* ENABLE_IPV6 */
+--- a/pf/pfpinhole.c
++++ b/pf/pfpinhole.c
+@@ -246,12 +246,12 @@ int find_pinhole(const char * ifname,
+ (0 == memcmp(&daddr, &RULE.dst.addr.v.a.addr.v6, sizeof(struct in6_addr)))) {
+ #ifdef USE_LIBPFCTL
+ if(sscanf(RULE.label[0], PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);*/
+ continue;
+ }
+ #else /* USE_LIBPFCTL */
+ if(sscanf(RULE.label, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);*/
+ continue;
+ }
+ #endif /* USE_LIBPFCTL */
+@@ -565,7 +565,7 @@ int clean_pinhole_list(unsigned int * ne
+ return -1;
+ }
+ if(sscanf(RULE.label[0], PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label[0]);*/
+ continue;
+ }
+ #else /* USE_LIBPFCTL */
+@@ -576,7 +576,7 @@ int clean_pinhole_list(unsigned int * ne
+ return -1;
+ }
+ if(sscanf(RULE.label, PINEHOLE_LABEL_FORMAT_SKIPDESC, &uid, &ts) != 2) {
+- syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);
++ /*syslog(LOG_DEBUG, "rule with label '%s' is not a IGD pinhole", RULE.label);*/
+ continue;
+ }
+ #endif /* USE_LIBPFCTL */
+--- a/upnphttp.c
++++ b/upnphttp.c
+@@ -514,7 +514,7 @@ ProcessHTTPPOST_upnphttp(struct upnphttp
+ if(h->req_soapActionOff > 0)
+ {
+ /* we can process the request */
+- syslog(LOG_INFO, "SOAPAction: %.*s",
++ syslog(LOG_DEBUG, "SOAPAction: %.*s",
+ h->req_soapActionLen, h->req_buf + h->req_soapActionOff);
+ ExecuteSoapAction(h,
+ h->req_buf + h->req_soapActionOff,
+@@ -819,7 +819,7 @@ ProcessHttpQuery_upnphttp(struct upnphtt
+ for(i = 0; i<15 && *p != '\r'; i++)
+ HttpVer[i] = *(p++);
+ HttpVer[i] = '\0';
+- syslog(LOG_INFO, "HTTP REQUEST from %s : %s %s (%s)",
++ syslog(LOG_DEBUG, "HTTP REQUEST from %s : %s %s (%s)",
+ h->clientaddr_str, HttpCommand, HttpUrl, HttpVer);
+ ParseHttpHeaders(h);
+ if(h->req_HostOff > 0 && h->req_HostLen > 0) {
+@@ -899,7 +899,7 @@ ProcessHttpQuery_upnphttp(struct upnphtt
+ return;
+ }
+ #endif
+- syslog(LOG_NOTICE, "%s not found, responding ERROR 404", HttpUrl);
++ syslog(LOG_DEBUG, "%s not found, responding ERROR 404", HttpUrl);
+ Send404(h);
+ }
+ #ifdef ENABLE_EVENTS
+--- a/upnppinhole.c
++++ b/upnppinhole.c
+@@ -110,7 +110,7 @@ lease_file6_add(const char * rem_client,
+
+ fd = fopen( lease_file6, "a");
+ if (fd==NULL) {
+- syslog(LOG_ERR, "could not open lease file: %s", lease_file);
++ syslog(LOG_DEBUG, "could not open lease file: %s", lease_file);
+ return -1;
+ }
+
+@@ -189,13 +189,13 @@ lease_file6_update(int uid, unsigned int
+ proto = line;
+ p = strchr(line, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+@@ -203,13 +203,13 @@ lease_file6_update(int uid, unsigned int
+ int_client = p;
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+@@ -217,20 +217,20 @@ lease_file6_update(int uid, unsigned int
+ rem_client = p;
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+ desc = strchr(p2, ';');
+ uid_rule = atoi(p);
+ if(!desc) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(desc++) = '\0';
+@@ -385,49 +385,49 @@ int lease_file6_expire(void)
+ // Internal Host
+ p = strchr(line, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ // Internal Port
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+ // External Host
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ // External Port
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+ // uid
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ // Timestamp
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+ // descr
+ desc = strchr(p2, ';');
+ if(!desc) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(desc++) = '\0';
+@@ -476,7 +476,7 @@ int reload_from_lease_file6(void)
+ if(!lease_file6) return -1;
+ fd = fopen( lease_file6, "r");
+ if (fd==NULL) {
+- syslog(LOG_ERR, "could not open lease file: %s", lease_file6);
++ syslog(LOG_DEBUG, "could not open lease file: %s", lease_file6);
+ return -1;
+ }
+ if(unlink(lease_file6) < 0) {
+@@ -491,13 +491,13 @@ int reload_from_lease_file6(void)
+ proto = line;
+ p = strchr(line, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+@@ -505,13 +505,13 @@ int reload_from_lease_file6(void)
+ int_client = p;
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+@@ -519,20 +519,20 @@ int reload_from_lease_file6(void)
+ rem_client = p;
+ p = strchr(p2, ';');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ p2 = strchr(p, ';');
+ if(!p2) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p2++) = '\0';
+ desc = strchr(p2, ';');
+ uid = atoi(p);
+ if(!desc) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(desc++) = '\0';
+@@ -549,7 +549,7 @@ int reload_from_lease_file6(void)
+
+ if(timestamp > 0) {
+ if(timestamp <= (unsigned int)current_unix_time) {
+- syslog(LOG_NOTICE, "already expired lease in lease file");
++ syslog(LOG_INFO, "already expired lease in lease file");
+ continue;
+ } else {
+ leaseduration = timestamp - current_unix_time;
+--- a/upnpredirect.c
++++ b/upnpredirect.c
+@@ -66,7 +66,7 @@ lease_file_add(unsigned short eport,
+
+ fd = fopen( lease_file, "a");
+ if (fd==NULL) {
+- syslog(LOG_ERR, "could not open lease file: %s", lease_file);
++ syslog(LOG_DEBUG, "could not open lease file: %s", lease_file);
+ return -1;
+ }
+
+@@ -168,7 +168,7 @@ int reload_from_lease_file(void)
+ if(!lease_file) return -1;
+ fd = fopen( lease_file, "r");
+ if (fd==NULL) {
+- syslog(LOG_ERR, "could not open lease file: %s", lease_file);
++ syslog(LOG_DEBUG, "could not open lease file: %s", lease_file);
+ return -1;
+ }
+ if(unlink(lease_file) < 0) {
+@@ -184,33 +184,33 @@ int reload_from_lease_file(void)
+ proto = line;
+ p = strchr(line, ':');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ iaddr = strchr(p, ':');
+ if(!iaddr) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(iaddr++) = '\0';
+ eport = (unsigned short)atoi(p);
+ p = strchr(iaddr, ':');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ iport = (unsigned short)atoi(p);
+ p = strchr(p, ':');
+ if(!p) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(p++) = '\0';
+ desc = strchr(p, ':');
+ if(!desc) {
+- syslog(LOG_ERR, "unrecognized data in lease file");
++ syslog(LOG_DEBUG, "unrecognized data in lease file");
+ continue;
+ }
+ *(desc++) = '\0';
+@@ -231,7 +231,7 @@ int reload_from_lease_file(void)
+ timestamp += current_time; /* convert to our time */
+ #else
+ if(timestamp <= (unsigned int)current_unix_time) {
+- syslog(LOG_NOTICE, "already expired lease in lease file (%hu=>%s:%hu %s)",
++ syslog(LOG_INFO, "already expired lease in lease file (%hu=>%s:%hu %s)",
+ eport, iaddr, iport, proto);
+ continue;
+ } else {
+@@ -391,7 +391,7 @@ upnp_redirect(const char * rhost, unsign
+ #endif /* CHECK_PORTINUSE */
+ } else {
+ timestamp = (leaseduration > 0) ? upnp_time() + leaseduration : 0;
+- syslog(LOG_INFO, "redirecting port %hu to %s:%hu protocol %s for: %s",
++ syslog(LOG_DEBUG, "redirecting port %hu to %s:%hu protocol %s for: %s",
+ eport, iaddr, iport, protocol, desc);
+ return upnp_redirect_internal(rhost, eport, iaddr, iport, proto,
+ desc, timestamp);
+@@ -641,7 +641,7 @@ get_upnp_rules_state_list(int max_rules_
+ {
+ if(tmp->to_remove)
+ {
+- syslog(LOG_NOTICE, "remove port mapping %hu %s because it has expired",
++ syslog(LOG_INFO, "remove port mapping %hu %s because it has expired",
+ tmp->eport, proto_itoa(tmp->proto));
+ _upnp_delete_redir(tmp->eport, tmp->proto);
+ *p = tmp->next;
+--- a/upnpsoap.c
++++ b/upnpsoap.c
+@@ -491,7 +491,7 @@ AddPortMapping(struct upnphttp * h, cons
+ }
+ else
+ {
+- syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
++ syslog(LOG_INFO, "Failed to convert hostname '%s' to ip address", int_ip);
+ ClearNameValueList(&data);
+ SoapError(h, 402, "Invalid Args");
+ return;
+@@ -690,7 +690,7 @@ AddAnyPortMapping(struct upnphttp * h, c
+ }
+ else
+ {
+- syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
++ syslog(LOG_INFO, "Failed to convert hostname '%s' to ip address", int_ip);
+ ClearNameValueList(&data);
+ SoapError(h, 402, "Invalid Args");
+ return;
+@@ -847,7 +847,7 @@ GetSpecificPortMappingEntry(struct upnph
+ }
+ else
+ {
+- syslog(LOG_INFO, "%s: rhost='%s' %s %s found => %s:%u desc='%s' duration=%u",
++ syslog(LOG_DEBUG, "%s: rhost='%s' %s %s found => %s:%u desc='%s' duration=%u",
+ action,
+ r_host ? r_host : "NULL", ext_port, protocol, int_ip,
+ (unsigned int)iport, desc, leaseduration);
+@@ -931,7 +931,7 @@ DeletePortMapping(struct upnphttp * h, c
+ return;
+ }
+
+- syslog(LOG_INFO, "%s: external port: %hu, protocol: %s",
++ syslog(LOG_DEBUG, "%s: external port: %hu, protocol: %s",
+ action, eport, protocol);
+
+ /* if in secure mode, check the IP
+@@ -1047,7 +1047,7 @@ DeletePortMappingRange(struct upnphttp *
+ for(i = 0; i < number; i++)
+ {
+ r = upnp_delete_redirection(port_list[i], protocol);
+- syslog(LOG_INFO, "%s: deleting external port: %hu, protocol: %s: %s",
++ syslog(LOG_DEBUG, "%s: deleting external port: %hu, protocol: %s: %s",
+ action, port_list[i], protocol, r < 0 ? "failed" : "ok");
+ }
+ free(port_list);
+@@ -1112,7 +1112,7 @@ GetGenericPortMappingEntry(struct upnpht
+ return;
+ }
+
+- syslog(LOG_INFO, "%s: index=%d", action, (int)index);
++ syslog(LOG_DEBUG, "%s: index=%d", action, (int)index);
+
+ rhost[0] = '\0';
+ r = upnp_get_redirection_infos_by_index((int)index, &eport, protocol, &iport,
+@@ -1635,7 +1635,7 @@ PinholeVerification(struct upnphttp * h,
+ int r;
+ struct addrinfo hints, *ai, *p;
+
+- syslog(LOG_INFO, "%s: InternalClient %s is not an IPv6, assume hostname and convert",
++ syslog(LOG_DEBUG, "%s: InternalClient %s is not an IPv6, assume hostname and convert",
+ "PinholeVerification", int_ip);
+
+ memset(&hints, 0, sizeof(hints));
+@@ -1655,8 +1655,8 @@ PinholeVerification(struct upnphttp * h,
+ {
+ result_ip = ((struct sockaddr_in6 *)p->ai_addr)->sin6_addr;
+ if (inet_ntop(AF_INET6, &result_ip, int_ip, sizeof(struct in6_addr)) == NULL)
+- syslog(LOG_WARNING, "%s: inet_ntop(): %m", "PinholeVerification");
+- syslog(LOG_INFO, "%s: InternalClient resolved as %s",
++ syslog(LOG_DEBUG, "%s: inet_ntop(): %m", "PinholeVerification");
++ syslog(LOG_DEBUG, "%s: InternalClient resolved as %s",
+ "PinholeVerification", int_ip);
+ found = 1;
+ }
+@@ -1672,7 +1672,7 @@ PinholeVerification(struct upnphttp * h,
+ freeaddrinfo(ai);
+ if (!found)
+ {
+- syslog(LOG_NOTICE, "%s: No IPv6 address for hostname '%s'",
++ syslog(LOG_INFO, "%s: No IPv6 address for hostname '%s'",
+ "PinholeVerification", int_ip);
+ SoapError(h, 402, "Invalid Args");
+ return -1;
+@@ -1680,7 +1680,7 @@ PinholeVerification(struct upnphttp * h,
+ }
+ else
+ {
+- syslog(LOG_WARNING, "%s: Failed to convert hostname '%s' to IP address : %s",
++ syslog(LOG_INFO, "%s: Failed to convert hostname '%s' to IP address : %s",
+ "PinholeVerification", int_ip, gai_strerror(r));
+ SoapError(h, 402, "Invalid Args");
+ return -1;
+@@ -1813,7 +1813,7 @@ AddPinhole(struct upnphttp * h, const ch
+ inet_ntop(AF_INET6,
+ &(((struct sockaddr_in6 *)p->ai_addr)->sin6_addr),
+ rem_ip, sizeof(rem_ip));
+- syslog(LOG_INFO, "resolved '%s' to '%s'", rem_host, rem_ip);
++ syslog(LOG_DEBUG, "resolved '%s' to '%s'", rem_host, rem_ip);
+ rem_host = rem_ip;
+ break;
+ }
+@@ -1822,7 +1822,7 @@ AddPinhole(struct upnphttp * h, const ch
+ }
+ else
+ {
+- syslog(LOG_WARNING, "AddPinhole : getaddrinfo(%s) : %s",
++ syslog(LOG_INFO, "AddPinhole : getaddrinfo(%s) : %s",
+ rem_host, gai_strerror(err));
+ #if 0
+ SoapError(h, 402, "Invalid Args");
+@@ -2481,7 +2481,7 @@ SoapError(struct upnphttp * h, int errCo
+ char body[2048];
+ int bodylen;
+
+- syslog(LOG_INFO, "Returning UPnPError %d: %s", errCode, errDesc);
++ syslog(LOG_DEBUG, "Returning UPnPError %d: %s", errCode, errDesc);
+ bodylen = snprintf(body, sizeof(body), resp, errCode, errDesc);
+ BuildResp2_upnphttp(h, 500, "Internal Server Error", body, bodylen);
+ SendRespAndClose_upnphttp(h);
diff --git a/miniupnpd/patches/900-miniupnpd-format-xml-to-make-some-app-happy.patch b/miniupnpd/patches/900-miniupnpd-format-xml-to-make-some-app-happy.patch
deleted file mode 100644
index 579d106be..000000000
--- a/miniupnpd/patches/900-miniupnpd-format-xml-to-make-some-app-happy.patch
+++ /dev/null
@@ -1,608 +0,0 @@
-From 7651a23732d234f97137ca160a0c157eaed43ae8 Mon Sep 17 00:00:00 2001
-From: Chen Minqiang
-Date: Wed, 29 Sep 2021 22:29:53 +0800
-Subject: [PATCH] miniupnpd: format xml to make some app happy
-
-Server-U
-
-Signed-off-by: Chen Minqiang
----
- upnpdescgen.c | 6 +
- upnpsoap.c | 302 ++++++++++++++++++++--------------------
- 2 files changed, 157 insertions(+), 151 deletions(-)
-
---- a/upnpdescgen.c
-+++ b/upnpdescgen.c
-@@ -947,6 +947,8 @@ genXML(char * str, int * len, int * tmpl
- str = strcat_char(str, len, tmplen, '<');
- str = strcat_str(str, len, tmplen, eltname);
- str = strcat_char(str, len, tmplen, '>');
-+ str = strcat_char(str, len, tmplen, '\r');
-+ str = strcat_char(str, len, tmplen, '\n');
- }
- #ifdef IGD_V2
- unstack:
-@@ -967,6 +969,8 @@ unstack:
- for(c = *s; c > ' '; c = *(++s))
- str = strcat_char(str, len, tmplen, c);
- str = strcat_char(str, len, tmplen, '>');
-+ str = strcat_char(str, len, tmplen, '\r');
-+ str = strcat_char(str, len, tmplen, '\n');
- top--;
- }
- else
-@@ -996,6 +1000,8 @@ unstack:
- str = strcat_str(str, len, tmplen, configid_str);
- }
- str = strcat_char(str, len, tmplen, '>');
-+ str = strcat_char(str, len, tmplen, '\r');
-+ str = strcat_char(str, len, tmplen, '\n');
- i = k & 0xffff;
- j = i + (k >> 16);
- if(top < (GENXML_STACK_SIZE - 1)) {
---- a/upnpsoap.c
-+++ b/upnpsoap.c
-@@ -75,11 +75,11 @@ BuildSendAndCloseSoapResp(struct upnphtt
- static const char beforebody[] =
- "\r\n"
- ""
-- "";
-+ "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n"
-+ "\r\n";
-
- static const char afterbody[] =
-- ""
-+ "\r\n"
- "\r\n";
-
- int r = BuildHeader_upnphttp(h, 200, "OK", sizeof(beforebody) - 1
-@@ -107,17 +107,17 @@ GetConnectionTypeInfo(struct upnphttp *
- #if 0
- static const char resp[] =
- ""
-- "IP_Routed"
-- "IP_Routed"
-- "";
-+ "xmlns:u=\"" SERVICE_TYPE_WANIPC "\">\r\n"
-+ "IP_Routed\r\n"
-+ "IP_Routed\r\n"
-+ "\r\n";
- #endif
- static const char resp[] =
- ""
-- "IP_Routed"
-- "IP_Routed"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "IP_Routed\r\n"
-+ "IP_Routed\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
-
-@@ -136,9 +136,9 @@ GetTotalBytesSent(struct upnphttp * h, c
-
- static const char resp[] =
- ""
-- "%lu"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%lu\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -162,9 +162,9 @@ GetTotalBytesReceived(struct upnphttp *
-
- static const char resp[] =
- ""
-- "%lu"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%lu\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -193,9 +193,9 @@ GetTotalPacketsSent(struct upnphttp * h,
-
- static const char resp[] =
- ""
-- "%lu"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%lu\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -219,9 +219,9 @@ GetTotalPacketsReceived(struct upnphttp
-
- static const char resp[] =
- ""
-- "%lu"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%lu\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -245,12 +245,12 @@ GetCommonLinkProperties(struct upnphttp
- * DSL, POTS (plain old Telephone service), Cable, Ethernet */
- static const char resp[] =
- ""
-- "%s"
-- "%lu"
-- "%lu"
-- "%s"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "%lu\r\n"
-+ "%lu\r\n"
-+ "%s\r\n"
-+ "\r\n";
-
- char body[2048];
- int bodylen;
-@@ -284,11 +284,11 @@ GetStatusInfo(struct upnphttp * h, const
- {
- static const char resp[] =
- ""
-- "%s"
-- "ERROR_NONE"
-- "%ld"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "ERROR_NONE\r\n"
-+ "%ld\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -312,18 +312,18 @@ GetNATRSIPStatus(struct upnphttp * h, co
- #if 0
- static const char resp[] =
- ""
-- "0"
-- "1"
-- "";
-+ "xmlns:u=\"" SERVICE_TYPE_WANIPC "\">\r\n"
-+ "0\r\n"
-+ "1\r\n"
-+ "\r\n";
- UNUSED(action);
- #endif
- static const char resp[] =
- ""
-- "0"
-- "1"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "0\r\n"
-+ "1\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- /* 2.2.9. RSIPAvailable
-@@ -345,9 +345,9 @@ GetExternalIPAddress(struct upnphttp * h
- {
- static const char resp[] =
- ""
-- "%s"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -417,10 +417,10 @@ AddPortMapping(struct upnphttp * h, cons
-
- /*static const char resp[] =
- "";*/
-+ "xmlns:u=\"" SERVICE_TYPE_WANIPC "\"/>\r\n";*/
- static const char resp[] =
- "";
-+ "xmlns:u=\"%s\"/>\r\n";
-
- char body[512];
- int bodylen;
-@@ -614,9 +614,9 @@ AddAnyPortMapping(struct upnphttp * h, c
- int r;
- static const char resp[] =
- ""
-- "%hu"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%hu\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -780,13 +780,13 @@ GetSpecificPortMappingEntry(struct upnph
-
- static const char resp[] =
- ""
-- "%u"
-- "%s"
-- "1"
-- "%s"
-- "%u"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%u\r\n"
-+ "%s\r\n"
-+ "1\r\n"
-+ "%s\r\n"
-+ "%u\r\n"
-+ "\r\n";
-
- char body[1024];
- int bodylen;
-@@ -871,12 +871,12 @@ DeletePortMapping(struct upnphttp * h, c
-
- /*static const char resp[] =
- ""
-- "";*/
-+ "xmlns:u=\"" SERVICE_TYPE_WANIPC "\">\r\n"
-+ "\r\n";*/
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -981,12 +981,12 @@ DeletePortMappingRange(struct upnphttp *
- int r = -1;
- /*static const char resp[] =
- ""
-- "";*/
-+ "xmlns:u=\"" SERVICE_TYPE_WANIPC "\">\r\n"
-+ "\r\n";*/
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- struct NameValueParserData data;
-@@ -1057,16 +1057,16 @@ GetGenericPortMappingEntry(struct upnpht
-
- static const char resp[] =
- ""
-- "%s"
-- "%u"
-- "%s"
-- "%u"
-- "%s"
-- "1"
-- "%s"
-- "%u"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "%u\r\n"
-+ "%s\r\n"
-+ "%u\r\n"
-+ "%s\r\n"
-+ "1\r\n"
-+ "%s\r\n"
-+ "%u\r\n"
-+ "\r\n";
-
- long int index = 0;
- unsigned short eport, iport;
-@@ -1140,31 +1140,31 @@ GetListOfPortMappings(struct upnphttp *
- {
- static const char resp_start[] =
- ""
-+ "xmlns:u=\"%s\">\r\n"
- ""
-- "";
-+ "]]>\r\n"
-+ "\r\n";
-
- static const char list_start[] =
- "";
-+ " http://www.upnp.org/schemas/gw/WANIPConnection-v2.xsd\">\r\n";
- static const char list_end[] =
-- "";
-+ "\r\n";
-
- static const char entry[] =
-- ""
-- "%s"
-- "%hu"
-- "%s"
-- "%hu"
-- "%s"
-- "1"
-- "%s"
-- "%u"
-- "";
-+ "\r\n"
-+ "%s\r\n"
-+ "%hu\r\n"
-+ "%s\r\n"
-+ "%hu\r\n"
-+ "%s\r\n"
-+ "1\r\n"
-+ "%s\r\n"
-+ "%u\r\n"
-+ "\r\n";
-
- char * body;
- size_t bodyalloc;
-@@ -1322,12 +1322,12 @@ SetDefaultConnectionService(struct upnph
- {
- /*static const char resp[] =
- ""
-- "";*/
-+ "xmlns:u=\"urn:schemas-upnp-org:service:Layer3Forwarding:1\">\r\n"
-+ "\r\n";*/
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- struct NameValueParserData data;
-@@ -1365,14 +1365,14 @@ GetDefaultConnectionService(struct upnph
- {
- static const char resp[] =
- ""
-+ "xmlns:u=\"%s\">\r\n"
- #ifdef IGD_V2
- "%s:WANConnectionDevice:2,"
- #else
- "%s:WANConnectionDevice:1,"
- #endif
-- SERVICE_ID_WANIPC ""
-- "";
-+ SERVICE_ID_WANIPC "\r\n"
-+ "\r\n";
- /* example from UPnP_IGD_Layer3Forwarding 1.0.pdf :
- * uuid:44f5824f-c57d-418c-a131-f22b34e14111:WANConnectionDevice:1,
- * urn:upnp-org:serviceId:WANPPPConn1 */
-@@ -1443,9 +1443,9 @@ QueryStateVariable(struct upnphttp * h,
- {
- static const char resp[] =
- ""
-- "%s"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -1515,10 +1515,10 @@ GetFirewallStatus(struct upnphttp * h, c
- {
- static const char resp[] =
- ""
-- "%d"
-- "%d"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%d\r\n"
-+ "%d\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -1709,9 +1709,9 @@ AddPinhole(struct upnphttp * h, const ch
- int r;
- static const char resp[] =
- ""
-- "%d"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%d\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- struct NameValueParserData data;
-@@ -1885,13 +1885,13 @@ UpdatePinhole(struct upnphttp * h, const
- #if 0
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"urn:schemas-upnp-org:service:WANIPv6FirewallControl:1\">\r\n"
-+ "\r\n";
- #endif
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- struct NameValueParserData data;
-@@ -1963,9 +1963,9 @@ GetOutboundPinholeTimeout(struct upnphtt
-
- static const char resp[] =
- ""
-- "%d"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%d\r\n"
-+ "\r\n";
-
- char body[512];
- int bodylen;
-@@ -2028,13 +2028,13 @@ DeletePinhole(struct upnphttp * h, const
- #if 0
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"urn:schemas-upnp-org:service:WANIPv6FirewallControl:1\">\r\n"
-+ "\r\n";
- #endif
- static const char resp[] =
- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
-
-@@ -2103,9 +2103,9 @@ CheckPinholeWorking(struct upnphttp * h,
- {
- static const char resp[] =
- ""
-- "%d"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%d\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- int r;
-@@ -2163,9 +2163,9 @@ GetPinholePackets(struct upnphttp * h, c
- {
- static const char resp[] =
- ""
-- "%u"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%u\r\n"
-+ "\r\n";
- char body[512];
- int bodylen;
- struct NameValueParserData data;
-@@ -2224,9 +2224,9 @@ SendSetupMessage(struct upnphttp * h, co
- {
- static const char resp[] =
- ""
-- "%s"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "\r\n";
- char body[1024];
- int bodylen;
- struct NameValueParserData data;
-@@ -2265,9 +2265,9 @@ GetSupportedProtocols(struct upnphttp *
- {
- static const char resp[] =
- ""
-- ""
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "\r\n"
-+ "\r\n";
- char body[1024];
- int bodylen;
- const char * ProtocolList =
-@@ -2275,10 +2275,10 @@ GetSupportedProtocols(struct upnphttp *
- ""
-- "WPS"
-- "PKCS5"
-- "";
-+ " http://www.upnp.org/schemas/gw/DeviceProtection-v1.xsd\">\r\n"
-+ "WPS\r\n"
-+ "PKCS5\r\n"
-+ "\r\n";
-
- bodylen = snprintf(body, sizeof(body), resp,
- action, ns/*"urn:schemas-upnp-org:service:DeviceProtection:1"*/,
-@@ -2291,9 +2291,9 @@ GetAssignedRoles(struct upnphttp * h, co
- {
- static const char resp[] =
- ""
-- "%s"
-- "";
-+ "xmlns:u=\"%s\">\r\n"
-+ "%s\r\n"
-+ "\r\n";
- char body[1024];
- int bodylen;
- const char * RoleList = "Public"; /* list of roles separated by spaces */
-@@ -2447,20 +2447,20 @@ SoapError(struct upnphttp * h, int errCo
- static const char resp[] =
- ""
-- ""
-- ""
-- "s:Client"
-- "UPnPError"
-- ""
-- ""
-- "%d"
-- "%s"
-- ""
-- ""
-- ""
-- ""
-- "";
-+ "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n"
-+ "\r\n"
-+ "\r\n"
-+ "s:Client\r\n"
-+ "UPnPError\r\n"
-+ "\r\n"
-+ "\r\n"
-+ "%d\r\n"
-+ "%s\r\n"
-+ "\r\n"
-+ "\r\n"
-+ "\r\n"
-+ "\r\n"
-+ "\r\n";
-
- char body[2048];
- int bodylen;