mtk支持

This commit is contained in:
Nanako 2025-04-26 20:55:19 +08:00
parent 54eb2d0018
commit 73f8d3f699
1499 changed files with 2032436 additions and 0 deletions

View File

@ -0,0 +1,92 @@
#
# Copyright (C) 2019
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=datconf
PKG_REVISION:=6bb733f7
PKG_SOURCE:=$(PKG_NAME)-$(PKG_REVISION).tar.bz2
PKG_RELEASE:=1
PKG_USE_NINJA:=0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_MAINTAINER:=Weijie Gao <weijie.gao@mediatek.com>
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
include $(INCLUDE_DIR)/kernel.mk
define Package/libkvcutil
SECTION:=libs
CATEGORY:=Libraries
TITLE:=C library for Key-value based config files
endef
define Package/kvcedit
SECTION:=util
CATEGORY:=Utilities
DEPENDS:=+libkvcutil
TITLE:=Utility for editing key-value based config files
endef
define Package/datconf
SECTION:=MTK Properties
CATEGORY:=MTK Properties
SUBMENU:=Applications
DEPENDS:=+kvcedit
TITLE:=Utility for editing dat files used by MediaTek Wi-Fi drivers
endef
define Package/datconf-lua
SECTION:=MTK Properties
CATEGORY:=MTK Properties
SUBMENU:=Applications
DEPENDS:=+datconf +liblua
TITLE:=Lua plugin for datconf
endef
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib
CMAKE_OPTIONS = \
-DLUAPATH=/usr/lib/lua
define Package/libkvcutil/install
$(INSTALL_DIR) $(1)/lib
$(CP) $(PKG_BUILD_DIR)/kvcutil/libkvcutil.so* $(1)/lib/
endef
define Package/kvcedit/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/kvcutil/kvcedit $(1)/usr/bin/
endef
define Package/datconf/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/datconf/datconf $(1)/usr/bin/
endef
define Package/datconf-lua/install
$(INSTALL_DIR) $(1)/usr/lib/lua
$(CP) $(PKG_BUILD_DIR)/datconf/lua/datconf.so $(1)/usr/lib/lua/
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/kvcutil/libkvcutil.h $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/datconf/libdatconf.h $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/kvcutil/libkvcutil.so* $(1)/usr/lib
-$(CP) $(PKG_BUILD_DIR)/datconf/libdatconf.a $(1)/usr/lib
endef
$(eval $(call BuildPackage,libkvcutil))
$(eval $(call BuildPackage,kvcedit))
$(eval $(call BuildPackage,datconf))
$(eval $(call BuildPackage,datconf-lua))

View File

@ -0,0 +1,11 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for Easy QoS
LUCI_DEPENDS:=+wget-ssl +tc +kmod-sched-core +kmod-ifb +ebtables-legacy-utils +ebtables-legacy @!PACKAGE_luci-app-eqos
PKG_MAINTAINER:=Jianhui Zhao <jianhuizhao329@gmail.com>
PKG_NAME:=luci-app-eqos-mtk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,96 @@
'use strict';
'require form';
'require network';
'require uci';
'require view';
return view.extend({
load: function() {
return Promise.all([
uci.load('eqos'),
network.getHostHints()
]);
},
render: function(data) {
var m, s, o;
m = new form.Map('eqos', _('EQoS'),
_('Network speed control service.(Compatiable with Mediatek HNAT)'));
s = m.section(form.NamedSection, 'config', 'eqos');
o = s.option(form.Flag, 'enabled', _('Enable'));
o.default = o.disabled;
o.rmempty = false;
o = s.option(form.Value, 'interface', _('Load balance'),
_('Please set a different gateway hop for each network interface before filling in the network interface name. Fill in PPPOE-WAN for dialing and eth1 for DHCP. Leaving it blank to disable it.Please use commas as interface name separators. Example: pppoe-wan,eth1'));
o.rmempty = true;
o = s.option(form.Flag, 'ipv6enabled', _('IPV6Enable'));
o.default = o.disabled;
o.rmempty = false;
o = s.option(form.Flag, 'smarthqos', _('SMART_HWQOS'),
_('Enabling fair queue will automatically perform hardware offloading for every local host'));
o.default = o.disabled;
o.rmempty = false;
o = s.option(form.Value, 'download', _('Download speed (Mbit/s)'),
_('Total download bandwidth.'));
o.datatype = 'and(uinteger,min(1))';
o.rmempty = false;
o = s.option(form.Value, 'upload', _('Upload speed (Mbit/s)'),
_('Total upload bandwidth.'));
o.datatype = 'and(uinteger,min(1))';
o.rmempty = false;
s = m.section(form.TableSection, 'device', _('Speed limit and route choose based on IP address(Auto use hardware QOS)'));
s.addremove = true;
s.anonymous = true;
s.sortable = true;
o = s.option(form.Flag, 'enabled', _('Enable'));
o.default = o.enabled;
o = s.option(form.Value, 'ip', _('IPV4 address'));
o.datatype = 'ip4addr';
for (var i of Object.entries(data[1]?.hosts))
for (var v in i[1].ipaddrs)
if (i[1].ipaddrs[v]) {
var ip_addr = i[1].ipaddrs[v], ip_host = i[1].name;
o.value(ip_addr, ip_host ? String.format('%s (%s)', ip_host, ip_addr) : ip_addr)
}
o.rmempty = true;
var hosts = data[1]?.hosts;
o = s.option(form.Value, 'mac', _('IPV6 host'));
o.datatype = 'macaddr';
Object.keys(hosts).forEach(function(mac) {
var hint = hosts[mac].name || L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0];
o.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
});
o.rmempty = true;
o = s.option(form.Value, 'download', _('Download speed (kbit/s)'));
o.datatype = 'and(uinteger,min(0))';
o.rmempty = false;
o = s.option(form.Value, 'upload', _('Upload speed (kbit/s)'));
o.datatype = 'and(uinteger,min(0))';
o.rmempty = false;
o = s.option(form.Value, 'comment', _('Comment'));
o.rmempty = true;
o = s.option(form.Value, 'interfacename', _('InterfaceName(start from 0)'));
o.datatype = 'and(uinteger,min(0))';
o.rmempty = true;
return m.render();
}
});

View File

@ -0,0 +1,92 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:87
msgid "Comment"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:40
msgid "Download speed (Mbit/s)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:79
msgid "Download speed (kbit/s)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:18
#: package/mtk/applications/luci-app-eqos-mtk/root/usr/share/luci/menu.d/luci-app-eqos.json:3
msgid "EQoS"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:23
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:57
msgid "Enable"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:36
msgid ""
"Enabling fair queue will automatically perform hardware offloading "
"forwarding for every local host "
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/root/usr/share/rpcd/acl.d/luci-app-eqos.json:3
msgid "Grant UCI access for luci-app-eqos"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:60
msgid "IPV4 address"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:71
msgid "IPV6 host"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:31
msgid "IPV6Enable"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:91
msgid "InterfaceName(start from 0)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:27
msgid "Load balance"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:19
msgid "Network speed control service.(Compatiable with Mediatek HNAT)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:28
msgid ""
"Please set a different gateway hop for each network interface before filling "
"in the network interface name. Fill in PPPOE-WAN for dialing and eth1 for "
"DHCP. Leaving it blank to disable it.Please use commas as interface name "
"separators. Example: pppoe-wan,eth1"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:35
msgid "SMART_HWQOS"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:52
msgid ""
"Speed limit and route choose based on IP address(using unique comment less "
"than 32 will enable hardware QOS)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:41
msgid "Total download bandwidth."
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:46
msgid "Total upload bandwidth."
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:45
msgid "Upload speed (Mbit/s)"
msgstr ""
#: package/mtk/applications/luci-app-eqos-mtk/htdocs/luci-static/resources/view/eqos.js:83
msgid "Upload speed (kbit/s)"
msgstr ""

View File

@ -0,0 +1,91 @@
msgid ""
msgstr ""
"Project-Id-Version: LuCi Chinese Translation\n"
"Report-Msgid-Bugs-To: \n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.6\n"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:64
msgid "Comment"
msgstr "编号"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:28
msgid "Download speed (Mbit/s)"
msgstr "下载速度 (Mbit/s)"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:18
#: applications/luci-app-eqos/root/usr/share/luci/menu.d/luci-app-eqos.json:3
msgid "EQoS"
msgstr "网速控制"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:24
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:43
msgid "Enable"
msgstr "启用"
msgid "SMART_HWQOS"
msgstr "智能硬件QOS"
msgid "Enabling fair queue will automatically perform hardware offloading for every local host"
msgstr "启用硬件公平队列,局域网的每台设备将拥有相同的转发优先级,保证设备最低网速(仅对dhcp获得ip地址的设备生效,不兼容固定限速)"
msgid "IPV6Enable"
msgstr "同时作用IPV6"
msgid "Load balance"
msgstr "负载均衡"
msgid "Please set a different gateway hop for each network interface before filling in the network interface name. Fill in PPPOE-WAN for dialing and eth1 for DHCP. Leaving it blank to disable it.Please use commas as interface name separators. Example: pppoe-wan,eth1"
msgstr "请先为每个网络接口设置不同的网关跃点后再填写网络接口名。拨号填写pppoe-wanDHCP则填写eth1。留空则不启用.请使用逗号作为接口名分隔符.例子pppoe-wan, eth1"
#: applications/luci-app-eqos/root/usr/share/rpcd/acl.d/luci-app-eqos.json:3
msgid "Grant UCI access for luci-app-eqos"
msgstr "授予 luci-app-eqos 访问 UCI 配置的权限"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:46
msgid "IPV4 address"
msgstr "IPV4 地址"
msgid "IPV6 host"
msgstr "IPV6 主机"
msgid "Total download bandwidth."
msgstr "总下载带宽。"
msgid "InterfaceName(start from 0)"
msgstr "分流接口序号(从0开始,留空则负载均衡)"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:19
msgid "Network speed control service.(Compatiable with Mediatek HNAT)"
msgstr "网速控制服务(未设置限速主机可正常使用硬件加速)。"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:38
msgid "Speed limit and route choose based on IP address(Auto use hardware QOS)"
msgstr "基于 IP 分流限速(自动启用硬件QOS.速度设置为0则取消限速)"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:29
msgid "Total download bandwidth."
msgstr "总下载带宽。"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:34
msgid "Total upload bandwidth."
msgstr "总上传带宽。"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:33
msgid "Upload speed (Mbit/s)"
msgstr "上传速度 (Mbit/s)"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:56
msgid "Download speed (kbit/s)"
msgstr "下载速度 (kbit/s)"
#: applications/luci-app-eqos/htdocs/luci-static/resources/view/eqos.js:60
msgid "Upload speed (kbit/s)"
msgstr "上传速度 (kbit/s)"

View File

@ -0,0 +1,12 @@
# The bandwidth unit is Mbit/s
config eqos 'config'
option enabled 0
option download 100
option upload 20
# Limiting the bandwidth of a single Device
#config device
# option ip "192.168.1.100"
# option download 10
# option upload 5
# option comment 1

View File

@ -0,0 +1,3 @@
#!/bin/sh
/etc/init.d/eqos start

View File

@ -0,0 +1,103 @@
#!/bin/sh
ACTION=$2
MARK_FILE="/tmp/dhcp_mac_mark_mapping" # 存储MAC和MARK映射关系的文件
LEASE_FILE="/tmp/dhcp.leases" # DHCP leases 文件
MAX_MARK=31 # 限制mark值在1到31之间
# 定义哈希函数将MAC地址转化为一个数值限制在1到31之间
hash_mac() {
MAC=$1
# 将MAC地址中的冒号去掉转化为十六进制数值取模限制在1到31之间
MAC_HEX=$(echo "$MAC" | sed 's/://g')
echo $(( 0x$MAC_HEX % MAX_MARK + 1 ))
}
# 从文件中加载当前的MAC-MARK映射
load_mapping() {
if [ ! -f "$MARK_FILE" ]; then
touch "$MARK_FILE"
fi
cat "$MARK_FILE"
}
# 检查mark是否被占用
is_mark_in_use() {
MARK=$1
grep -q " $MARK$" "$MARK_FILE"
return $?
}
# 分配一个可用的mark
allocate_mark() {
MAC=$1
MARK=$(hash_mac $MAC)
retries=0 # 记录重试次数
max_retries=$((MAX_MARK - 1)) # 允许的最大重试次数
# 循环检查mark是否被占用直到找到可用的mark
while is_mark_in_use $MARK; do
MARK=$((MARK + 1))
retries=$((retries + 1))
if [ "$MARK" -gt $MAX_MARK ]; then
MARK=1
fi
# 如果重试次数达到最大值退出循环表示无法找到可用的MARK
if [ "$retries" -ge "$max_retries" ]; then
MARK=1
break
fi
done
# 返回可用的MARK
echo $MARK
}
# 保存MAC和MARK的映射
save_mapping() {
MAC=$1
MARK=$2
echo "$MAC $MARK" >> "$MARK_FILE"
}
# 删除MAC对应的MARK映射
delete_mapping() {
MAC=$1
sed -i "/^$MAC /d" "$MARK_FILE"
}
# 处理现有的DHCP记录确保已有设备保留其MARK
process_existing_leases() {
while read -r line; do
IP=$(echo "$line" | awk '{print $3}')
MAC=$(echo "$line" | awk '{print $2}')
EXISTING_MARK=$(grep "^$MAC " "$MARK_FILE" | awk '{print $2}')
if [ -z "$EXISTING_MARK" ]; then
# 如果没有记录分配新的MARK
MARK_VALUE=$(allocate_mark $MAC)
save_mapping $MAC $MARK_VALUE
else
# 使用现有的MARK
MARK_VALUE=$EXISTING_MARK
fi
idpair=$((MARK_VALUE+32))
# 添加iptables规则基于MAC和IP地址给这个设备打上MARK
iptables -t mangle -D eqos -s $IP -j DSCP --set-dscp ${MARK_VALUE}
iptables -t mangle -D eqos -d $IP -j DSCP --set-dscp ${idpair}
ip6tables -t mangle -D eqos -m mac --mac-source $MAC -j MARK --set-mark ${MARK_VALUE}
ebtables -t nat -D eqos -p ipv6 -d $MAC -j mark --mark-set ${idpair}
iptables -t mangle -A eqos -s $IP -j DSCP --set-dscp ${MARK_VALUE}
iptables -t mangle -A eqos -d $IP -j DSCP --set-dscp ${idpair}
ip6tables -t mangle -A eqos -m mac --mac-source $MAC -j MARK --set-mark ${MARK_VALUE}
ebtables -t nat -A eqos -A ipv6 -d $MAC -j mark --mark-set ${idpair}
done < "$LEASE_FILE"
}
if [ "$ACTION" = "init" ]; then
rm /tmp/dhcp_mac_mark_mapping
load_mapping
iptables -t mangle -F eqos
ip6tables -t mangle -F eqos
ebtables -t nat -F eqos
process_existing_leases
fi

View File

@ -0,0 +1,102 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=50
USE_PROCD=1
parse_device() {
local cfg="$1"
local enabled
config_get_bool enabled "$cfg" "enabled" "1"
[ "$enabled" -eq "1" ] || return 1
local ip download upload comment mac interfacename
config_get ip "$cfg" ip
config_get download "$cfg" "download"
config_get upload "$cfg" "upload"
config_get comment "$cfg" "comment"
config_get mac "$cfg" "mac"
config_get interfacename "$cfg" "interfacename"
eqos add "$ip" "$download" "$upload" "$comment" "$mac" "$interfacename"
}
start_service() {
config_load "eqos"
local enabled
config_get_bool enabled "config" "enabled" "0"
[ "$enabled" -eq "1" ] || return 1
local download upload comment
config_get download "config" "download"
config_get upload "config" "upload"
config_get comment "config" "comment"
config_get smarthqos "config" "smarthqos"
config_get interface "config" "interface"
eqos start "$download" "$upload" "$comment"
local ipv6enabled
config_get_bool ipv6enabled "config" "ipv6enabled" "0"
ip6tables -t mangle -N eqos
ip6tables -t mangle -F eqos
ebtables -t nat -N eqos
ebtables -t nat -F eqos
if [ "$ipv6enabled" -eq "1" ]; then
ebtables -t nat -D POSTROUTING -j eqos -p ipv6
ebtables -t nat -A POSTROUTING -j eqos -p ipv6
ip6tables -t mangle -D FORWARD -j eqos
ip6tables -t mangle -A FORWARD -j eqos
fi
if [ "$smarthqos" -eq "1" ]; then
for i in $(seq 1 31); do
if [ "$upload" -ne "0" ]; then
echo 2 1 $(($upload*225)) 1 $(($upload*1000)) 4 1 > /sys/kernel/debug/hnat/qdma_txq$i
fi
done
for i in $(seq 33 63); do
if [ "$download" -ne "0" ]; then
echo 3 1 $(($download*200)) 1 $(($download*1000)) 4 1 > /sys/kernel/debug/hnat/qdma_txq$i
fi
done
fi
iptables -t mangle -F PREROUTING
if [ $interface ]; then
bash /usr/sbin/loadbalance "$interface"
fi
config_foreach parse_device "device"
if [ "$smarthqos" -eq "1" ]; then
rm /etc/hotplug.d/dhcp/99-eqos
cat << 'EOF' > /etc/hotplug.d/dhcp/99-eqos
#!/bin/sh
# 只有在新增 DHCP 租约时才执行操作
if [ "$ACTION" = "add" ]; then
# 执行指定的命令
/etc/init.d/dhcp_mark.sh eqos init
fi
EOF
chmod +x /etc/hotplug.d/dhcp/99-eqos
/etc/init.d/dnsmasq restart
/etc/init.d/dhcp_mark.sh eqos init
fi
}
stop_service() {
eqos stop
iptables -t mangle -F PREROUTING
rm /etc/hotplug.d/dhcp/99-eqos
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "eqos"
}

View File

@ -0,0 +1,9 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@eqos[-1]
add ucitrack eqos
EOF
rm -f /tmp/luci-indexcache
exit 0

View File

@ -0,0 +1,187 @@
#!/bin/sh
dev=br-lan
hash_file="/tmp/hash_records.txt"
generate_index() {
local input="$1"
local hash_value=$(echo -n "$input" | md5sum | cut -d' ' -f1)
local decimal_value=$((0x${hash_value:0:8}))
local index=$((decimal_value % 31 + 1))
echo $index
}
find_available_index() {
local base_index=$(generate_index "$1")
local index=$base_index
while true; do
if grep -q "^$index$" "$hash_file"; then
index=$((index % 31 + 1))
if [[ $index -eq $base_index ]]; then
echo "All slots are full. Returning 0."
return 0
fi
else
echo $index >> "$hash_file"
echo $index
return 0
fi
done
}
stop_qos() {
tc qdisc del dev $dev root 2>/dev/null
tc qdisc del dev $dev ingress 2>/dev/null
tc qdisc del dev ${dev}-ifb root 2>/dev/null
ip link del dev ${dev}-ifb 2>/dev/null
}
start_qos() {
local dl=$1
local up=$2
rm /tmp/hash_records.txt
touch "$hash_file"
tc qdisc add dev $dev root handle 1: htb
tc class add dev $dev parent 1: classid 1:1 htb rate ${dl}mbit
ip link add dev ${dev}-ifb name ${dev}-ifb type ifb
ip link set dev ${dev}-ifb up
tc qdisc add dev ${dev}-ifb root handle 1: htb
tc class add dev ${dev}-ifb parent 1: classid 1:1 htb rate ${up}mbit
tc qdisc add dev $dev ingress
tc filter add dev $dev parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ${dev}-ifb
}
iptables_stop() {
iptables -t mangle -D FORWARD -j eqos
ip6tables -t mangle -D FORWARD -j eqos
ebtables -t nat -D POSTROUTING -j eqos -p ipv6
echo 0 > /sys/kernel/debug/hnat/qos_toggle
sed -i '/\/etc\/init.d\/eqos start/d' /etc/firewall.user
iptables -t mangle -D FORWARD -i br-lan -j DSCP --set-dscp 0
iptables -t mangle -D FORWARD -o br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -D FORWARD -i br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -D FORWARD -o br-lan -j DSCP --set-dscp 0
echo "10 0" > /sys/kernel/debug/hnat/hnat_setting
echo "11 30" >/sys/kernel/debug/hnat/hnat_setting
for i in $(seq 0 31); do
echo 0 0 0 0 0 4 4 > /sys/kernel/debug/hnat/qdma_txq$i
done
for i in $(seq 32 63); do
echo 1 0 0 0 0 4 4 > /sys/kernel/debug/hnat/qdma_txq$i
done
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch0
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch1
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch2
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch3
}
iptables_start_prepare() {
iptables -t mangle -D FORWARD -i br-lan -j DSCP --set-dscp 0
iptables -t mangle -D FORWARD -o br-lan -j DSCP --set-dscp 0
iptables -t mangle -A FORWARD -i br-lan -j DSCP --set-dscp 0
iptables -t mangle -A FORWARD -o br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -D FORWARD -i br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -D FORWARD -o br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -A FORWARD -i br-lan -j DSCP --set-dscp 0
ip6tables -t mangle -A FORWARD -o br-lan -j DSCP --set-dscp 0
}
iptables_start_inital() {
iptables -t mangle -N eqos
iptables -t mangle -F eqos
iptables -t mangle -D FORWARD -j eqos
iptables -t mangle -A FORWARD -j eqos
echo 1 > /sys/kernel/debug/hnat/qos_toggle
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch0
echo 0 wrr 25000000 > /sys/kernel/debug/hnat/qdma_sch1
echo 0 0 0 0 0 0 0 > /sys/kernel/debug/hnat/qdma_txq0
echo 1 0 0 0 0 0 0 > /sys/kernel/debug/hnat/qdma_txq32
echo "11 5" >/sys/kernel/debug/hnat/hnat_setting
uci -q set "turboacc.config.fastpath_mh_eth_hnat_bind_rate"="5"
uci -q commit "turboacc"
sed -i '/\/etc\/init.d\/eqos start/d' /etc/firewall.user
echo "/etc/init.d/eqos start" >> /etc/firewall.user
echo "10 1" > /sys/kernel/debug/hnat/hnat_setting
}
case "$1" in
"stop")
stop_qos
iptables_stop
;;
"start")
stop_qos
iptables_start_prepare
start_qos $2 $3
iptables_start_inital
echo 1 wrr $(($3*1000)) > /sys/kernel/debug/hnat/qdma_sch2
echo 1 wrr $(($2*1000)) > /sys/kernel/debug/hnat/qdma_sch3
;;
"add")
ip="$2"
dl="$3"
up="$4"
macaddr="$6"
cnt=$(tc class show dev $dev | wc -l)
interface="$7"
if [ -n "$ip" ]; then
id="$(find_available_index "$ip")"
elif [ -n "$macaddr" ]; then
id="$(find_available_index "$macaddr")"
fi
idpair=$((id+32))
if [ $id -lt 32 ]; then
iptables -t mangle -D eqos -s $ip -j DSCP --set-dscp ${id}
iptables -t mangle -D eqos -d $ip -j DSCP --set-dscp ${idpair}
ip6tables -t mangle -D eqos -m mac --mac-source $macaddr -j MARK --set-mark ${id}
ebtables -t nat -D eqos -p ipv6 -d $macaddr -j mark --mark-set ${idpair}
if [ $up -ne 0 ]; then
echo 2 0 0 1 ${up} 4 1 > /sys/kernel/debug/hnat/qdma_txq${id}
iptables -t mangle -A eqos -s $ip -j DSCP --set-dscp ${id}
ip6tables -t mangle -A eqos -m mac --mac-source $macaddr -j MARK --set-mark ${id}
fi
if [ $dl -ne 0 ]; then
echo 3 0 0 1 ${dl} 4 1 > /sys/kernel/debug/hnat/qdma_txq${idpair}
iptables -t mangle -A eqos -d $ip -j DSCP --set-dscp ${idpair}
ebtables -t nat -A eqos -p ipv6 -d $macaddr -j mark --mark-set ${idpair}
fi
else
iptables -t mangle -D eqos -s $ip -j MARK --set-mark 0x99
iptables -t mangle -D eqos -d $ip -j MARK --set-mark 0x99
if [ $up -ne 0 ]; then
iptables -t mangle -A eqos -s $ip -j MARK --set-mark 0x99
fi
if [ $dl -ne 0 ]; then
iptables -t mangle -A eqos -d $ip -j MARK --set-mark 0x99
fi
fi
if [ $id -gt 31 ]; then
tc class add dev $dev parent 1:1 classid 1:1$cnt htb rate ${dl}kbit ceil ${dl}kbit
tc filter add dev $dev parent 1:0 protocol ip u32 match ip dst $ip flowid 1:1$cnt
tc class add dev ${dev}-ifb parent 1:1 classid 1:1$cnt htb rate ${up}kbit ceil ${up}kbit
tc filter add dev ${dev}-ifb parent 1:0 protocol ip u32 match ip src $ip flowid 1:1$cnt
fi
if [ $interface ]; then
iptables -t mangle -D PREROUTING -s $ip -m conntrack --ctstate NEW -j MARK --set-mark 2"$interface"
iptables -t mangle -A PREROUTING -s $ip -m conntrack --ctstate NEW -j MARK --set-mark 2"$interface"
iptables -t mangle -D PREROUTING -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
fi
;;
*)
echo "Usage: $0 <command> [options]"
echo "Commands:"
echo " start dl_rate up_rate #Total bandwidth (Mbit/s)"
echo " stop"
echo " add ip dl_rate up_rate #Limiting the bandwidth of a single IP (kbit/s)"
echo "Example:"
echo " $0 start 30 20 # Total bandwidth: down 30Mbit/s up 20Mbit/s"
echo " $0 add 192.168.22.12 10 2 # down 10kbit/s up 2kbit/s"
;;
esac

View File

@ -0,0 +1,45 @@
interface=$1
array=(${interface//,/ })
PPP_NUM=0
for var in ${array[@]}
do
let PPP_NUM=PPP_NUM+1
done
i=0
for var in ${array[@]}
do
ipaddr=$(ip route show |grep default | grep $var | awk '{print $3 }')
iptables -t mangle -D PREROUTING -i br-lan -m conntrack --ctstate NEW -m statistic --mode nth --every $PPP_NUM --packet $i -j CONNMARK --set-mark 2"$i"
iptables -t mangle -D PREROUTING -i br-lan -m connmark --mark 2"$i" -j MARK --set-mark 2"$i"
iptables -t mangle -A PREROUTING -i br-lan -m conntrack --ctstate NEW -m statistic --mode nth --every $PPP_NUM --packet $i -j CONNMARK --set-mark 2"$i"
iptables -t mangle -A PREROUTING -i br-lan -m connmark --mark 2"$i" -j MARK --set-mark 2"$i"
ip rule del table 2"$i"0
ip rule add fwmark 2"$i" table 2"$i"0
ip route del default table 2"$i"0
ip route add default via $ipaddr dev $var table 2"$i"0
let i=i+1
done
i=0
for var in ${array[@]}
do
ipaddr=$(ip route show |grep default | grep $var | awk '{print $3 }')
iptables -t mangle -D PREROUTING -m conntrack --ctstate NEW -d $ipaddr/24 -j MARK --set-mark 2"$i"
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -d $ipaddr/24 -j MARK --set-mark 2"$i"
let i=i+1
done
iptables -t mangle -D PREROUTING -p tcp --dport 443 -m conntrack --ctstate NEW -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -p tcp --dport 443 -m conntrack --ctstate NEW -j MARK --set-mark 20
iptables -t mangle -D PREROUTING -p udp --dport 443 -m conntrack --ctstate NEW -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -p udp --dport 443 -m conntrack --ctstate NEW -j MARK --set-mark 20
iptables -t mangle -D POSTROUTING -m conntrack --ctstate NEW -j CONNMARK --save-mark
iptables -t mangle -A POSTROUTING -m conntrack --ctstate NEW -j CONNMARK --save-mark
iptables -t mangle -D PREROUTING -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
ip route flush cache

View File

@ -0,0 +1,13 @@
{
"admin/network/eqos": {
"title": "EQoS",
"action": {
"type": "view",
"path": "eqos"
},
"depends": {
"acl": [ "luci-app-eqos" ],
"uci": { "eqos": true }
}
}
}

View File

@ -0,0 +1,11 @@
{
"luci-app-eqos": {
"description": "Grant UCI access for luci-app-eqos",
"read": {
"uci": [ "eqos" ]
},
"write": {
"uci": [ "eqos" ]
}
}
}

View File

@ -0,0 +1,15 @@
#
# Copyright (C) Hua Shao <nossiac@163.com>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=MediaTek Proprietary Configuration.
LUCI_DEPENDS:=+datconf-lua
LUCI_PKGARCH:=all
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,198 @@
Copyright (C) 2016 Gion Kunz
The MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,67 @@
<%#
File name : mtk_wifi_apply_reboot.htm
This file is used in WebUI based on LuCI to handle the reboot event.
%>
<%+header%>
<h2><a>Reboot Device</a><h2>
<div id="div_reboot_warn">
<p class="alert-message">
As the driver does not support addition or deletion of interfaces on the fly,
the settings which were changed during addition or deletion of interfaces have not been applied yet!
<br /><br />
<strong>
The changed settings will be applied only after reboot of the device.
Please click on the Reboot button.
</strong>
<br /><br />
<strong>Tip:</strong><br />
Add or delete as many interfaces as required before reboot so that you do not have to reboot the device again.<br />
Please follow below instructions to add or delete an interface;</em><br />
1. Go to <a href='<%=luci.dispatcher.build_url("admin", "network", "wifi")%>'>Wireless Overview</a> web-page.<br />
2. Click on Add button to add a new interface or click on Remove button to delete an existing interface.<br />
3. If you are are adding a new interface, then, click on <em>Save</em> button after filling out all the required fields such as SSID etc.<br />
4. Once you are done with addition/deletion of interfaces, then please click on <em>Reload</em> button or
<em>Save and Apply</em> button on any web-page which will redirect to this web-page to perform the reboot of the device.</br>
</p>
<input class="cbi-button cbi-button-apply" type="button" value="Reboot" onclick="init_reboot()" />
</div>
<h4 id="msg_on_reboot" class="alert-message warning" style="display:none">
<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" />
Please wait while the reboot of the device is on progress.
</h4>
<h4 id="unreach_msg" class="alert-message error" style="display:none">Device has not come on-line yet!</h4>
<script type="text/javascript">
function online()
{
location = '<%=controller%>';
}
function ping(numPings)
{
var loadingImg = document.createElement('IMG');
loadingImg.onload = online;
loadingImg.src = '<%=resource%>/icons/loading.gif?' + Math.random();
numPings -= 1;
if(numPings <= 0){
document.getElementById("msg_on_reboot").style.display = 'none';
document.getElementById("unreach_msg").style.display = '';
}
else{
window.setTimeout(ping, 10000, numPings);
}
}
function init_reboot_cb()
{
window.setTimeout(ping, 10000, 18);
}
function init_reboot()
{
document.getElementById('div_reboot_warn').style.display = 'none';
document.getElementById('msg_on_reboot').style.display = '';
(new XHR()).post('<%=controller%>/admin/mtk/wifi/reboot', { token: '<%=token%>' }, init_reboot_cb);
}
</script>
<%+footer%>

View File

@ -0,0 +1,233 @@
<%+header%>
<!--
This module is a demo to configure MTK' proprietary WiFi driver.
Basic idea is to bypass uci and edit wireless profile (mt76xx.dat) directly.
LuCI's WiFi configuration is more logical and elegent, but it's quite tricky to
translate uci into MTK's WiFi profile (like we did in "uci2dat").
Hua Shao <nossiac@163.com>
-->
<%
local disp = require "luci.dispatcher"
-- local request = disp.context.path
local request = disp.context.request
local mtkwifi = require("mtkwifi")
local devname = request[5]
local devs = mtkwifi.get_all_devs()
local dev = {}
for _,v in ipairs(devs) do
if v.devname == devname then
dev = v
end
end
local cfgs = mtkwifi.load_profile(dev.profile)
%>
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-17.250.41546-90ac861"></script>
<script type="text/javascript">
</script>
<form method="post" name="cbi" action="<%=luci.dispatcher.build_url("admin", "network", "wifi", "chip_cfg", devname)%>" enctype="multipart/form-data" onreset="return cbi_validate_reset(this)" onsubmit="return cbi_validate_form(this, '<%:Some fields are invalid, cannot save values!%>') && ValidateAllSettings()" autocomplete="off">
<fieldset class="cbi-section">
<h2><%:Chip Configurations%> - <%=string.split(devname,".")[1]%>
<%local diff = mtkwifi.diff_profile(dev.profile)%>
<%if next(diff) ~= nil then%>
<span style="color:red;">( <a href="javascript:location.href='<%=luci.dispatcher.build_url("admin", "network", "wifi", "reload", dev.devname)%>'"><%:Click here%></a> <%:to apply changes%>)</span>
<%end%>
</h2>
<table id="dev-cfg-basic" class="cbi-section-table">
<tr>
<td><%:Decline BA Request%></td>
<td>
<select style="width:auto" name="HT_BADecline">
<option value="1" <% if cfgs.HT_BADecline == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.HT_BADecline == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:Reverse Direction Grant (RDG)%></td>
<td>
<select style="width:auto" name="HT_RDG">
<option value="1" <% if cfgs.HT_RDG == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.HT_RDG == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:BA Win size%> <% if string.split(cfgs.WirelessMode,";")[1] == "16" or string.split(cfgs.WirelessMode,";")[1] == "17" or string.split(cfgs.WirelessMode,";")[1] == "18" then %>(1-256)<% else %>(1-64)<% end %></td>
<td>
<input name="HT_BAWinSize" id="HT_BAWinSize" value="<%=cfgs.HT_BAWinSize%>"/>
</td>
</tr>
<tr>
<td><%:HT Disallow TKIP%></td>
<td>
<select style="width:auto" name="HT_DisallowTKIP">
<option value="1" <% if cfgs.HT_DisallowTKIP == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.HT_DisallowTKIP == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:Wi-Fi HWNAT%></td>
<td>
<select style="width:auto" name="WHNAT">
<option value="1" <% if cfgs.WHNAT == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.WHNAT ~= "1" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:E2pAccessMode%></td>
<td>
<select style="width:auto" name="E2pAccessMode">
<option value="1" <% if cfgs.E2pAccessMode == "1" then %> selected="selected"<% end%>>EFUSE</option>
<option value="2" <% if cfgs.E2pAccessMode == "2" then %> selected="selected"<% end%>>FLASH</option>
</select>
</td>
</tr>
<tr>
<td><%:Beacon Interval%> (20-999)</td>
<td>
<input name="BeaconPeriod" id="BeaconPeriod" value="<%=cfgs.BeaconPeriod%>" />
</td>
</tr>
<tr>
<td><%:Data Beacon Rate (DTIM)%> (1-255)</td>
<td>
<input name="DtimPeriod" id="DtimPeriod" value="<%=cfgs.DtimPeriod%>" />
</td>
</tr>
<tr>
<td><%:BG Protection Mode%></td>
<td>
<select name="BGProtection" style="width:auto">
<option value="0" <% if cfgs.BGProtection == "0" then %>selected="selected"<% end %>><%:Auto%></option>
<option value="1" <% if cfgs.BGProtection == "1" then %>selected="selected"<% end %>><%:Always On%></option>
<option value="2" <% if cfgs.BGProtection == "2" then %>selected="selected"<% end %>><%:Always Off%></option>
</select>
</td>
</tr>
<tr>
<td><%:Short Preamble%></td>
<td>
<select style="width:auto" name="TxPreamble">
<option value="1" <% if cfgs.TxPreamble == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.TxPreamble == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:TX Burst%></td>
<td>
<select style="width:auto" name="TxBurst">
<option value="1" <% if cfgs.TxBurst == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.TxBurst == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
<tr>
<td><%:Short Slot%></td>
<td>
<select style="width:auto" name="ShortSlot">
<option value="1" <% if cfgs.ShortSlot == "1" then %> selected="selected"<% end%>><%:Enable%></option>
<option value="0" <% if cfgs.ShortSlot == "0" then %> selected="selected"<% end%>><%:Disable%></option>
</select>
</td>
</tr>
</table>
<div class="cbi-page-actions">
<input class="cbi-button cbi-button-apply" name="__apply" value="<%:Save & Apply%>" type="submit">
<input class="cbi-button cbi-button-apply" value="<%:Save%>" type="submit">
<input class="cbi-button cbi-button-reset" value="<%:Reset%>" type="reset">
</div>
</form>
<script type="text/javascript">
function ValidateAdvancedSettings()
{
var tmpVal = document.getElementById("HT_BAWinSize").value;
<% if string.split(cfgs.WirelessMode,";")[1] == "16" or string.split(cfgs.WirelessMode,";")[1] == "17" or string.split(cfgs.WirelessMode,";")[1] == "18" then %>
if(isNaN(tmpVal) || !/^\d{1,3}$/.test(tmpVal) || parseInt(tmpVal) < 1 || parseInt(tmpVal) > 256){
alert("BA Win SIze is incorrect!\nPlease enter an integer number between 1 to 256 inclusive.");
document.getElementById("HT_BAWinSize").focus();
document.getElementById("HT_BAWinSize").select();
return false;
}
<% else %>
if(isNaN(tmpVal) || !/^\d{1,2}$/.test(tmpVal) || parseInt(tmpVal) < 1 || parseInt(tmpVal) > 64){
alert("BA Win Size is incorrect!\nPlease enter an integer number between 1 to 64 inclusive.");
document.getElementById("HT_BAWinSize").focus();
document.getElementById("HT_BAWinSize").select();
return false;
}
<% end %>
tmpVal = document.getElementById("BeaconPeriod").value;
if(isNaN(tmpVal) || !/^\d{2,3}$/.test(tmpVal) || parseInt(tmpVal) < 20 || parseInt(tmpVal) > 999){
alert("Beacon Interval is incorrect!\nPlease enter an integer number between 20 to 999 inclusive.");
document.getElementById("BeaconPeriod").focus();
document.getElementById("BeaconPeriod").select();
return false;
}
tmpVal = document.getElementById("DtimPeriod").value;
if(isNaN(tmpVal) || !/^\d{1,3}$/.test(tmpVal) || parseInt(tmpVal) < 1 || parseInt(tmpVal) > 255){
alert("Data Beacon Rate (DTIM) is incorrect!\nPlease enter an integer number between 1 to 255 inclusive.");
document.getElementById("DtimPeriod").focus();
document.getElementById("DtimPeriod").select();
return false;
}
return true;
}
function ValidateAllSettings(){
if( !ValidateAdvancedSettings() ){
return false;
}
return true;
}
function get_apply_status_cb(rsp)
{
try{
var r = JSON.parse(rsp);
}
catch(e){
return;
}
if(r.status == "ON_PROGRESS"){
var u = confirm("Device is applying the saved settings now!\n" +
"It is recommended to wait until all the saved settings are applied.\n" +
"Please click on 'OK' button to wait for the device.\n" +
"or click on 'Cancel' button to configure the settings available in current web-page.");
if (u == true) {
location = '<%=luci.dispatcher.build_url("admin", "network", "wifi", "loading")%>' + window.location.pathname;
}
}
}
function get_apply_status()
{
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_apply_status")%>', null,
function(x)
{
console.log(x);
get_apply_status_cb(x.response);
}
);
}
window.onload = function() {
get_apply_status();
}
</script>
<%+footer%>

View File

@ -0,0 +1,769 @@
<%+header%>
<!--
This module is a demo to configure MTK' proprietary WiFi driver.
Basic idea is to bypass uci and edit wireless profile (mt76xx.dat) directly.
LuCI's WiFi configuration is more logical and elegent, but it's quite tricky to
translate uci into MTK's WiFi profile (like we did in "uci2dat").
Hua Shao <nossiac@163.com>
-->
<%
local disp = require "luci.dispatcher"
-- local request = disp.context.path
local request = disp.context.request
local mtkwifi = require("mtkwifi")
local devname = request[5]
local devs = mtkwifi.get_all_devs()
local dev = {}
for _,v in ipairs(devs) do
if v.devname == devname then
dev = v
end
end
local cfgs = mtkwifi.load_profile(dev.profile)
local bands = mtkwifi.detect_triband()
%>
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-17.250.41546-90ac861"></script>
<script type="text/javascript">
</script>
<form method="post" name="cbi" action="<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg", devname)%>" enctype="multipart/form-data" onreset="return cbi_validate_reset(this)" onsubmit="return cbi_validate_form(this, '<%:Some fields are invalid, cannot save values!%>') && ValidateAllSettings()" autocomplete="off">
<fieldset class="cbi-section">
<h2><%:Device Configuration%> - <%=devname%>
<%local diff = mtkwifi.diff_profile(dev.profile)%>
<%if next(diff) ~= nil then%>
<span style="color:red;"> (<a href="javascript:location.href='<%=luci.dispatcher.build_url("admin", "network", "wifi", "reload", dev.devname)%>'"><%:Click here%></a> <%:to apply changes%>)</span>
<%end%>
</h2>
<table id="dev-cfg-basic" class="cbi-section-table">
<tr>
<td><%:Enable wireless device%></td>
<td>
<input type="radio" name="DevEnable" value="1" <% if cfgs.DevEnable == "1" then %> checked="checked"<% end %>/><%:Enable%>
<input type="radio" name="DevEnable" value="0" <% if cfgs.DevEnable == "0" then %> checked="checked"<% end %>/><%:Disable%>
</td>
</tr>
<tr>
<td><%:Channel%></td>
<td>
<select style="width:auto; min-width:180px;" name="Channel" id="Channel" onchange="Channel_onchange(this.value)" <% if cfgs.ApCliEnable == "1" then %> disabled="disabled" <% end %>>
</select>
</td>
<td><% if cfgs.ApCliEnable == "1" then %><%:APClient/Repeater Mode.%><% end %></td>
</tr>
<tr id="HT_EXTCHA_TR" style="display:none">
<td><%:40MHz HT Ext Channel%></td>
<td>
<select style="width:auto; min-width:180px;" name="HT_EXTCHA" id="HT_EXTCHA" <% if cfgs.ApCliEnable == "1" or dev.__bw ~= "40" or dev.__bw ~= "60" then %> disabled="disabled" <% end %>>
</select>
</td>
<td><% if cfgs.ApCliEnable == "1" then %><%:APClient/Repeater Mode.%><% end %></td>
</tr>
<tr id="VHT_Sec80_Channel_TR" style="display:none">
<td><%:80MHz Second VHT Channel%></td>
<td>
<select style="width:auto; min-width:180px; " name="VHT_Sec80_Channel" id="VHT_Sec80_Channel" <% if cfgs.ApCliEnable == "1" or dev.__bw ~= "161" then %> disabled="disabled" <% end %>>
</select>
</td>
<td><% if cfgs.ApCliEnable == "1" then %><%:APClient/Repeater Mode.%><% end %></td>
</tr>
<% if string.split(cfgs.WirelessMode,";")[1] == "16" or string.split(cfgs.WirelessMode,";")[1] == "17" or string.split(cfgs.WirelessMode,";")[1] == "18" then %>
<tr>
<td><%:BSS color%></td>
<td>
<input name="BssColor" id="BssColor" value="<%=cfgs.BSSColorValue%>"/>
</td>
</tr>
<tr>
<td><%:TWT Support%></td>
<td>
<select name="TWTSupport" style="width:auto">
<option value="0" <% if cfgs.TWTSupport == "0" then %> selected="selected" <% end %>><%:Disable%></option>
<option value="1" <% if cfgs.TWTSupport == "1" then %> selected="selected" <% end %>><%:Enable%></option>
<option value="2" <% if cfgs.TWTSupport == "2" then %> selected="selected" <% end %>><%:Mandatory%></option>
</select>
</td>
</tr>
<% end %>
<input type="hidden" id="WirelessMode" value="<%=string.split(cfgs.WirelessMode,";")[1]%>">
<tr>
<td><%:Country Code%></td>
<td>
<select name="CountryCode" style="width:auto" id="CountryCode" onchange="CountryCode_onchange()">
<option value="US" id="advCountryCodeUS" <% if cfgs.CountryCode == "US" then %> selected="selected"<% end %>><%:US%></option>
<option value="JP" id="advCountryCodeJP" <% if cfgs.CountryCode == "JP" then %> selected="selected"<% end %>><%:JP%></option>
<option value="FR" id="advCountryCodeFR" <% if cfgs.CountryCode == "FR" then %> selected="selected"<% end %>><%:FR%></option>
<option value="IE" id="advCountryCodeIE" <% if cfgs.CountryCode == "IE" then %> selected="selected"<% end %>><%:IE%></option>
<option value="CN" id="advCountryCodeCN" <% if cfgs.CountryCode == "CN" then %> selected="selected"<% end %>><%:CN%></option>
<option value="NONE" id="advCountryCodeNONE"<% if cfgs.CountryCode == "NONE" then %> selected="selected"<% end %>><%:NONE%></option>
</select>
</td>
</tr>
<tr>
<td><%:Country Region%></td>
<td>
<select style="width:auto; min-width:180px;" name="__cr" id="__cr" onchange="CountryRegion_onchange(this.value)">
</select>
</td>
</tr>
<tr>
<td><%:Channel BandWidth%></td>
<td>
<select style="width:auto" name="__bw" id="__bw" onchange="Bw_onchange(this.options[this.options.selectedIndex].value)">
<option value="20" <% if dev.__bw == "20" then %> selected="selected"<% end%>>20 MHz</option>
<option value="40" <% if dev.__bw == "40" then %> selected="selected"<% end%>>40 MHz</option>
<option value="60" <% if dev.__bw == "60" then %> selected="selected"<% end%>>20/40 MHz</option>
<option value="80" <% if dev.__bw == "80" then %> selected="selected"<% end%>>80 MHz</option>
<option value="160" <% if dev.__bw == "160" then %> selected="selected"<% end%>>160 MHz</option>
<option value="161" <% if dev.__bw == "161" then %> selected="selected"<% end%>>80+80 MHz</option>
</select>
</td>
</tr>
<tr>
<td><%:TX Stream%></td>
<td>
<select name="HT_TxStream" style="width:auto">
<% if dev.maxTxStream then %>
<% for txStreamVal=1,dev.maxTxStream do%>
<option value="<%=txStreamVal%>" <% if tonumber(cfgs.HT_TxStream) == txStreamVal then %>selected="selected"<% end %>><%=txStreamVal%></option>
<% end %>
<% else %>
<option value="1" <% if cfgs.HT_TxStream == "1" then %>selected="selected"<% end %>>1</option>
<option value="2" <% if cfgs.HT_TxStream == "2" then %>selected="selected"<% end %>>2</option>
<option value="3" <% if cfgs.HT_TxStream == "3" then %>selected="selected"<% end %>>3</option>
<option value="4" <% if cfgs.HT_TxStream == "4" then %>selected="selected"<% end %>>4</option>
<% end %>
</select>
</td>
</tr>
<tr>
<td><%:RX Stream%></td>
<td>
<select name="HT_RxStream" style="width:auto">
<% if dev.maxRxStream then %>
<% for rxStreamVal=1,dev.maxRxStream do%>
<option value="<%=rxStreamVal%>" <% if tonumber(cfgs.HT_RxStream) == rxStreamVal then %>selected="selected"<% end %>><%=rxStreamVal%></option>
<% end %>
<% else %>
<option value="1" <% if cfgs.HT_RxStream == "1" then %>selected="selected"<% end %>>1</option>
<option value="2" <% if cfgs.HT_RxStream == "2" then %>selected="selected"<% end %>>2</option>
<option value="3" <% if cfgs.HT_RxStream == "3" then %>selected="selected"<% end %>>3</option>
<option value="4" <% if cfgs.HT_RxStream == "4" then %>selected="selected"<% end %>>4</option>
<% end %>
</select>
</td>
</tr>
<tr>
<td><%:TX Power%> (1-100)</td>
<td>
<input name="TxPower" id="TxPower" value="<%=cfgs.TxPower%>" />
</td>
</tr>
<% if mtkwifi.band(string.split(cfgs.WirelessMode,";")[1]) == "5G" then %>
<tr>
<td>802.11H</td>
<td>
<input type="radio" name="IEEE80211H" value="1" <% if cfgs.IEEE80211H == "1" then %> checked="checked"<% end %>/><%:Enable%>
<input type="radio" name="IEEE80211H" value="0" <% if cfgs.IEEE80211H == "0" then %> checked="checked"<% end %>/><%:Disable%>
</td>
</tr>
<tr>
<td><%:DFS%></td>
<td>
<input type="radio" name="DfsEnable" value="1" <% if cfgs.DfsEnable == "1" then %> checked="checked"<% end %>/><%:Enable%>
<input type="radio" name="DfsEnable" value="0" <% if cfgs.DfsEnable == "0" then %> checked="checked"<% end %>/><%:Disable%>
</td>
</tr>
<% end %>
<% if cfgs.MUTxRxEnable then %>
<tr>
<td><%:Beam Forming and MIMO Setting%></td>
<td>
<select name="__mimo" autocomplete="off" >
<option value="0"<% if tonumber(dev.__mimo) == 0 then %> selected="selected"<% end %>> ETxBF + SU-MIMO </option>
<option value="1"<% if tonumber(dev.__mimo) == 1 then %> selected="selected"<% end %>> ITxBF + SU-MIMO </option>
<option value="2"<% if tonumber(dev.__mimo) == 2 then %> selected="selected"<% end %>> ITxBF + ETxBF + SU-MIMO </option>
<% if not dev.mimoBand or dev.mimoBand == dev.dbdcBandName then %>
<option value="3"<% if tonumber(dev.__mimo) == 3 then %> selected="selected"<% end %>> ETxBF + MU-MIMO </option>
<option value="4"<% if tonumber(dev.__mimo) == 4 then %> selected="selected"<% end %>> ITxBF + ETxBF + MU-MIMO </option>
<% end %>
<option value="5"<% if tonumber(dev.__mimo) == 5 then %> selected="selected"<% end %>> <%:Disable%> TxBF </option>
</select>
</td>
</tr>
<% end %>
<% if string.split(cfgs.WirelessMode,";")[1] == "16" or string.split(cfgs.WirelessMode,";")[1] == "17" or string.split(cfgs.WirelessMode,";")[1] == "18" then %>
<tr>
<td><%:Spatial Reuse%></td>
<td>
<input type="radio" name="SREnable" value="1" <% if cfgs.SREnable == "1" then %> checked="checked"<% end %>/><%:Enable%>
<input type="radio" name="SREnable" value="0" <% if cfgs.SREnable == "0" then %> checked="checked"<% end %>/><%:Disable%>
</td>
</tr>
<% end %>
</table>
</fieldset>
<div class="cbi-page-actions">
<input class="cbi-button cbi-button-apply" name="__apply" value="<%:Save & Apply%>" type="submit">
<input class="cbi-button cbi-button-apply" value="<%:Save%>" type="submit">
<input class="cbi-button cbi-button-reset" value="<%:Reset%>" type="reset">
</div>
</form>
<script type="text/javascript">
function CountryCode_onchange(){
var wMode = document.getElementById('WirelessMode').value;
getCountryRegionList(wMode);
}
function CountryRegion_onchange(country_region) {
var wmode_o = document.getElementById('WirelessMode');
var wmode;
if (wmode_o)
wmode = wmode_o.value;
if (wmode == "")
wmode = "<%=cfgs.WirelessMode%>";
getChannelList(wmode, country_region);
}
function Channel_onchange (ch) {
getBw(null, ch);
}
function Bw_onchange(bw, ch) {
var ch_val;
if (!ch){
var ch_o = document.getElementById('Channel');
if (ch_o)
ch_val = ch_o.value;
if (ch_val == "")
ch_val = "<%=cfgs.Channel%>";
} else {
ch_val = ch
}
get5G2nd80MhzChannelList(bw, ch_val);
getHTExtChannel(bw, ch_val);
}
function disableCountryRegionAsPerCountryCode(){
var wModeSelect = document.getElementById('WirelessMode');
var wMode = wModeSelect.value;
var cCode = document.getElementById('CountryCode').value;
var cRegionSelect = document.getElementById('__cr');
var invalidCR_2G = {
US:[1,3,4,5,7,31,32,33],
JP:[],
FR:[4,5,31,33],
IE:[4,5,31,33],
CN:[4,5,31,33],
NONE:[]
};
var invalidCR_5G = {
US:[1,7,11,15,19,20,21,22,30,31,32,33,36,37],
JP:[0,3,4,5,7,9,10,11,13,14,15,16,17,19,20,21,30,31,32,34,36,37],
FR:[0,3,4,5,7,9,10,11,12,13,14,15,16,17,19,20,21,30,31,32,34,36,37],
IE:[0,3,4,5,7,9,10,11,12,13,14,15,16,17,19,20,21,30,31,32,34,36,37],
CN:[1,7,9,11,12,13,14,15,18,19,20,21,22,30,31,32,33,36,37],
NONE:[]
};
if (is_mode_gband(wMode)){
// Channel 14 should be disabled for all the Countries except JAPAN(JP) and NONE Country Code.
// If WireleeMode is not in 'B only' mode, then Channel 14 should be disabled for Japan and NONE Country Code too.
if(wMode != "1"){
if(cCode == "JP"){
invalidCR_2G["JP"]=[4,5,31,33];
}
else if(cCode == "NONE"){
invalidCR_2G["NONE"]=[4,5,31,33];
}
}
if((cCode == "JP" && invalidCR_2G["JP"].length > 0) ||
(cCode == "NONE" && invalidCR_2G["NONE"].length > 0) ||
((cCode != "JP") && (cCode != "NONE"))){
for(var idx=0; idx < cRegionSelect.length; idx++){
if(invalidCR_2G[cCode] && invalidCR_2G[cCode].indexOf(cRegionSelect.options[idx].value * 1) != -1){
cRegionSelect.options[idx].disabled = true;
cRegionSelect.options[idx].selected = false;
}
}
}
}
else if (is_mode_aband(wMode) && cCode != "NONE"){
for(var idx=0; idx < cRegionSelect.length; idx++){
if(invalidCR_5G[cCode] && invalidCR_5G[cCode].indexOf(cRegionSelect.options[idx].value * 1) != -1){
cRegionSelect.options[idx].disabled = true;
cRegionSelect.options[idx].selected = false;
}
}
}
return cRegionSelect.value;
}
function initCountryRegionList(list, mode){
var select = document.getElementById('__cr');
var cr = {};
if (is_mode_gband(mode))
cr = "<%=cfgs.CountryRegion%>";
else if (is_mode_aband(mode))
cr = "<%=cfgs.CountryRegionABand%>";
var new_cr = initList(select, list, cr, "region");
new_cr = disableCountryRegionAsPerCountryCode();
CountryRegion_onchange(new_cr);
}
function getCountryRegionList(mode) {
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_country_region_list")%>', {mode:mode},
function(x)
{
//console.log(x);
//console.log(x.response);
var json = eval(x.response);
initCountryRegionList(json, mode);
}
);
}
function initChannelList(list) {
/* choose auto select when no matching item in the lis */
var select = document.getElementById('Channel');
var ch = {};
var new_ch = null;
ch.cval = select.value;
ch.oval = "<%=cfgs.Channel%>";
var new_ch = initList(select, list, ch, "channel");
Channel_onchange(new_ch);
}
function getChannelList(mode, country_region) {
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_channel_list")%>', {mode:mode, country_region:country_region},
function(x)
{
//console.log(x);
//console.log(x.response);
var json = eval(x.response);
initChannelList(json);
}
);
}
function GetCountryRegion(mode) {
var cr_o = document.getElementById('__cr');
var cr = "";
if (cr_o) {
cr = cr_o.value;
}
if (cr == "") {
if (is_mode_gband(mode)) {
cr = "<%=cfgs.CountryRegion%>";
} else if (is_mode_aband(mode)) {
cr = "<%=cfgs.CountryRegionABand%>";
} else {
alert("Cannot get valid CountryRegion from invalid WireleeMode");
}
}
return cr;
}
function getBw(mode, ch) {
/* choose bw as wide as possible if modification is needed */
var bw_sel = document.getElementById('__bw');
var wModeSelect,wmode;
wModeSelect = document.getElementById('WirelessMode');
if (!mode) {
wmode = wModeSelect.value*1;
} else {
wmode = mode*1;
}
if( <%=string.split(cfgs.WirelessMode,";")[1]%> != 18 ){
if (is_mode_legacy_only(wmode) || parseInt(ch) >= 165) {
for (var idx=0; idx < bw_sel.length; idx++) {
bw_sel.options[idx].disabled = false;
if (bw_sel.options[idx].value == 20)
bw_sel.options[idx].selected = true;
if (bw_sel.options[idx].value > 20)
bw_sel.options[idx].disabled = true;
}
} else if (is_ch_gband(ch)) {
for (var idx=0; idx < bw_sel.length; idx++) {
bw_sel.options[idx].disabled = false;
if ((bw_sel.options[idx].value == 60) && (bw_sel.selectedIndex > idx))
bw_sel.options[idx].selected = true;
if (bw_sel.options[idx].value > 60)
bw_sel.options[idx].disabled = true;
}
} else if (is_ch_aband(ch)) {
var chosen60 = false;
var bw160 = "<%=cfgs.VHT_BW%>"*1;
if (bw_sel.value == 60)
chosen60 = 1;
for (var idx=0; idx < bw_sel.length; idx++) {
bw_sel.options[idx].disabled = false;
if (bw_sel.options[idx].value == 40 && chosen60 && bw160 == 0) {
bw_sel.options[idx].selected = true;
} else if (bw_sel.options[idx].value == 60) {
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
} else if (wmode == 8 && bw_sel.options[idx].value == 80) {
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
} else if (bw_sel.options[idx].value == 160 && chosen60 && bw160 == 1) {
bw_sel.options[idx].selected = true;
}
}
}
}
var invalidChBwList = '<%=(dev.invalidChBwList and table.concat(dev.invalidChBwList,";"))%>'.split(";");
if(invalidChBwList.length > 0){
for (var idx=0; idx < bw_sel.length; idx++) {
if(invalidChBwList.indexOf(bw_sel.options[idx].value) != -1){
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
}
}
}
if(wmode == 18 ) {
for (var idx=0; idx < bw_sel.length; idx++) {
bw_sel.options[idx].disabled = false;
if(bw_sel.options[idx].value == 40 && ch>229){
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
}
if(bw_sel.options[idx].value == 80 && ch>221){
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
}
if(bw_sel.options[idx].value == 160 && ch>221){
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
}
if(bw_sel.options[idx].value == 161 || bw_sel.options[idx].value == 60){
bw_sel.options[idx].disabled = true;
bw_sel.options[idx].selected = false;
}
}
}
Bw_onchange(bw_sel.value, ch);
}
function init5G2nd80MhzChannelList(list,ch,cr) {
var select = document.getElementById('VHT_Sec80_Channel');
var ch2 = {};
var new_ch2 = null;
ch2.cval = select.value;
ch2.oval = "<%=cfgs.VHT_Sec80_Channel%>";
initList(select, list, ch2, "channel");
if (select.length > 0) {
document.getElementById("VHT_Sec80_Channel_TR").style.display = "";
select.disabled = false;
}
}
function get5G2nd80MhzChannelList(bw, ch) {
document.getElementById("VHT_Sec80_Channel_TR").style.display = "none";
var ch_5g_2nd = document.getElementById('VHT_Sec80_Channel');
ch_5g_2nd.disabled = true;
if (ch == "0")
return;
if (bw != "161" || ch == "0")
return;
var mode = document.getElementById('WirelessMode');
mode = mode.value*1;
var cr = GetCountryRegion(mode);
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_5G_2nd_80Mhz_channel_list")%>', {ch_cur:ch, country_region:cr},
function(x)
{
//console.log(x);
//console.log(x.response);
var json = eval(x.response);
init5G2nd80MhzChannelList(json,ch,cr);
}
);
}
function initHTExtChannelList(list,ch,cr) {
var select = document.getElementById('HT_EXTCHA');
var ch2 = {};
var new_ch2 = null;
ch2.cval = select.value;
ch2.oval = "<%=cfgs.HT_EXTCHA%>";
initList(select, list, ch2, "val");
if (select.length > 0) {
document.getElementById("HT_EXTCHA_TR").style.display = "";
select.disabled = false;
}
}
function getHTExtChannel(bw, ch) {
document.getElementById("HT_EXTCHA_TR").style.display = "none";
var ch_2g_ext = document.getElementById('HT_EXTCHA');
ch_2g_ext.disabled = true;
if (bw != "40" && bw != "60")
return;
var mode = document.getElementById('WirelessMode');
mode = mode.value*1;
// skip auto channel
if(mode==18){
if (ch == "0" || parseInt(ch) > 229)
return;
}
else{
if (ch == "0" || parseInt(ch) >= 165)
return;
}
var cr = GetCountryRegion(mode);
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_HT_ext_channel_list")%>', {mode:mode, ch_cur:ch, country_region:cr},
function(x)
{
//console.log(x);
//console.log(x.response);
var json = eval(x.response);
initHTExtChannelList(json,ch,cr);
}
);
}
function is_mode_legacy_only(mode) {
var imode = mode*1;
return ((imode >= 0) && (imode <= 4));
}
function is_mode_gband(mode) {
var imode = mode*1;
var gband_mode_list = [0,1,4,6,7,9,16];
var i;
for (i = 0; i < gband_mode_list.length; i++){
if( gband_mode_list[i] == imode )
return true;
}
return false;
}
function is_mode_aband(mode) {
var imode = mode*1;
var aband_mode_list = [2,8,11,14,15,17,18];
var i;
for (i = 0; i < aband_mode_list.length; i++){
if( aband_mode_list[i] == imode )
return true;
}
return false;
}
function is_ch_gband(ch) {
ch = ch*1;
if (ch == 0) {
var wmode = document.getElementById('WirelessMode');
return is_mode_gband(wmode.value);
}
return ((ch > 0) && (ch <= 14));
}
function is_ch_aband(ch) {
ch = ch*1;
if (ch == 0) {
var wmode = document.getElementById('WirelessMode');
return is_mode_aband(wmode.value);
}
return ((ch >= 36 ) && (ch <= 165));
}
function initList(selobj, list, selvals, value, text){
var sel = {};
var id = selobj.id;
var noChannelGrp = false;
var only2G = false;
if (typeof(selvals) != "object")
sel[0] = selvals;
else
sel = selvals;
selobj.innerHTML = "";
for (var i in list) {
if (value != "region") {
<% if bands == 3 and mtkwifi.band(string.split(cfgs.WirelessMode,";")[1]) == "5G" then %>
<% if cfgs.ChannelGrp == "0:0:1:1" then %>
if (list[i].channel == 0 || list[i].channel >= 100){
<% elseif cfgs.ChannelGrp == "1:1:0:0" then %>
if (list[i].channel <= 64){
<% else %>
noChannelGrp = true;
if (noChannelGrp){
<% end %>
var opt = document.createElement('option');
if(value)
opt.value = list[i][value];
else
opt.value = list[i].value;
if(text)
opt.text = list[i][text];
else
opt.text = list[i].text;
selobj.appendChild(opt);
}
<% else %>
only2G = true;
<% end %>
}
if (only2G || value == "region"){
var opt = document.createElement('option');
if(value)
opt.value = list[i][value];
else
opt.value = list[i].value;
if(text)
opt.text = list[i][text];
else
opt.text = list[i].text;
selobj.appendChild(opt);
}
}
var selv = null;
for (var k in sel) {
//console.log("[initList][" + id + "] sel[" + k + "]=" + sel[k]);
for (var i=0; i < selobj.length; i++){
if (selobj.options[i].value == sel[k]){
selobj.options[i].selected = true;
selv = sel[k];
//console.log("[initList][" + id + "] found selv=" + selv);
break;
}
}
if (selv) break;
}
if (!selv) {
selv = selobj.value;
//console.log("[initList][" + id + "] !selv, selv=" + selv);
}
return selv;
}
function ValidateAdvancedSettings()
{
var tmpVal = document.getElementById("TxPower").value;
if(isNaN(tmpVal) || !/^\d{1,3}$/.test(tmpVal) || parseInt(tmpVal) < 1 || parseInt(tmpVal) > 100){
alert("TX Power is incorrect!\nPlease enter an integer number between 1 to 100 inclusive.");
document.getElementById("TxPower").focus();
document.getElementById("TxPower").select();
return false;
}
return true;
}
function ValidateAllSettings(){
if( !ValidateAdvancedSettings() ){
return false;
}
return true;
}
function get_apply_status_cb(rsp)
{
try{
var r = JSON.parse(rsp);
}
catch(e){
return;
}
if(r.status == "ON_PROGRESS"){
var u = confirm("Device is applying the saved settings now!\n" +
"It is recommended to wait until all the saved settings are applied.\n" +
"Please click on 'OK' button to wait for the device.\n" +
"or click on 'Cancel' button to configure the settings available in current web-page.");
if (u == true) {
location = '<%=luci.dispatcher.build_url("admin", "network", "wifi", "loading")%>' + window.location.pathname;
}
}
}
function get_apply_status()
{
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_apply_status")%>', null,
function(x)
{
console.log(x);
get_apply_status_cb(x.response);
}
);
}
window.onload = function() {
var mode = '<%=string.split(cfgs.WirelessMode,";")[1]%>'
var cr = GetCountryRegion(mode);
getCountryRegionList(mode, cr);
get_apply_status();
}
</script>
<%+footer%>

View File

@ -0,0 +1,90 @@
<%#
File name : mtk_wifi_loading.htm
This file is used in WebUI based on LuCI to handle the loading event.
%>
<%+header%>
<%
local disp = require "luci.dispatcher"
local request = disp.context.request
local url = "/"..table.concat(request,'/',5)
%>
<h2><%:Wireless%></h2>
<div class="alert-message" id="BusyMsg">
<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" />
<big><strong><%:Please wait while the settings are being applied.%></strong></big>
</div>
<div class="alert-message error" id="TimeoutMsgDiv" style="display:none">
<big><strong id="TimeoutMsg">Device is taking too much time to apply the settings!</strong></big>
</div>
<script type="text/javascript">
function visit_url(url)
{
window.onbeforeunload = function() {};
if(url && url.indexOf('<%=controller%>') != -1){
location = url;
}
else{
location = '<%=luci.dispatcher.build_url("admin", "network", "wifi")%>';
}
}
function get_apply_status_cb(rsp, remNumTries)
{
try{
var r = JSON.parse(rsp);
if(r.status == "DONE"){
visit_url('<%=url%>');
return;
}
else if(r.status == "REBOOT"){
visit_url('<%=luci.dispatcher.build_url("admin", "network", "wifi", "apply_reboot")%>');
return;
}
}
catch(e){}
finally{
remNumTries -= 1;
if(remNumTries > 0){
window.setTimeout(get_apply_status, 5000, remNumTries);
}
else{
show_header();
document.getElementById("TimeoutMsgDiv").style.display = '';
document.getElementById("BusyMsg").style.display = 'none';
}
}
}
function get_apply_status(remNumTries)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_apply_status")%>', null,
function(x)
{
console.log(x);
get_apply_status_cb(x.response, remNumTries);
}
);
}
function show_header()
{
document.getElementsByTagName("HEADER")[0].style.display = "block";
}
function hide_header()
{
document.getElementsByTagName("HEADER")[0].style.display = "none";
}
window.onload = function(){
hide_header();
window.setTimeout(get_apply_status, 5000, 180);
}
window.onbeforeunload = function(evt) {
evt.returnValue = "Saved data have not been applied yet! Are you sure?";
return evt.returnValue;
}
</script>
<%+footer%>

View File

@ -0,0 +1,557 @@
<%+header%>
<!--
This module is a demo to configure MTK' proprietary WiFi driver.
Basic idea is to bypass uci and edit wireless profile (mt76xx.dat) directly.
LuCI's WiFi configuration is more logical and elegent, but it's quite tricky to
translate uci into MTK's WiFi profile (like we did in "uci2dat").
Hua Shao <nossiac@163.com>
-->
<%
local mtkwifi = require("mtkwifi")
local devs = mtkwifi.get_all_devs()
local l1dat, l1 = mtkwifi.__get_l1dat()
local dridx = l1.DEV_RINDEX
local main_ifname
local chipname
%>
<style>
table,td,th
{
border-top:1px solid ;
border-spacing: 0;
border-color:#E0E0E0;
}
</style>
<h2><%:Wireless%></h2>
<% if #devs == 0 then %>
<div class="alert-message">
<big><strong><%:No wireless device found!%></strong></big>
</div>
<% else %>
<fieldset class="cbi-section">
<table class="cbi-section-table" style="empty-cells:hide">
<% for _,dev in ipairs(devs) do %>
<% main_ifname = l1dat and l1dat[dridx][dev.devname].main_ifname or dbdc_prefix[mainidx][subidx].."0" %>
<% if mtkwifi.exists("/sys/class/net/"..main_ifname) then %>
<!-- physical device -->
<tbody>
<% if chipname ~= string.split(dev.devname,".")[1].."."..(dev.mainidx) then %>
<% chipname = string.split(dev.devname,".")[1].."."..(dev.mainidx) %>
<tr style="height:45px">
<td style="padding:15px;">
<img src="/luci-static/resources/icons/wifi_big.png">
</td>
<td colspan="2" style="text-align:left">
<big><strong title="<%=dev.profile%>"> <%=string.split(dev.devname,".")[1]%></strong></big>
<%if not dev.vifs then%>
<span style="color:red;">* <%:FATAL ERROR: Incorrect Profile Settings%></span>
<%end%>
<br>
<%if dev.version then%>
<span> <%:Driver version%>: <%=dev.version%> <br/></span>
<%end%>
</td>
<td style="width:310px;text-align:right">
<div id="ActionBtns_<%=string.split(dev.devname,".")[1]%>">
<button class="cbi-button cbi-button-edit" onclick="visit_url('<%=string.split(dev.devname,".")[1]%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "chip_cfg_view", dev.devname)%>')"><%:CONFIG%></button>
</div>
<div id="BusyText_<%=string.split(dev.devname,".")[1]%>" style="display:none">
<big><strong><%:Processing request.%></strong></big>
</div>
</td>
</tr>
<% end %>
<tr>
<td style="width:56px"></td>
<td colspan="2" style="text-align:left;padding-left:25px;">
<big><strong title="<%=dev.profile%>"><%=dev.devname%></strong></big>
<%local diff = mtkwifi.diff_profile(dev.profile)%>
<%if next(diff) ~= nil then%>
<span style="color:red;">* <%:need reload to apply changes%></span>
<%end%>
<br>
<%local cfgs = mtkwifi.load_profile(dev.profile)%>
<span> <%:Current Band%>: <%=mtkwifi.band(string.split(cfgs.WirelessMode,";")[1])%> <br/> </span>
<% if dev.Enable == "0" then%>
<span style="color:red;"> <%:Wireless device is disabled%> </span>
<%else%>
<span> <%:Work mode%>: <% if dev.ApCliEnable == "1" then %> APCli <% else %> AP <% end %> <br/> </span>
<%local temp = mtkwifi.get_temp(dev.devname)%>
<%if temp then%>
<span> <%:Tempature%>: <%=temp%>&#176;C <br/> </span>
<%end%>
<%local txpwr = mtkwifi.get_txpwr(dev.devname)%>
<%if txpwr then%>
<span> <%:Tx Power%>: <%=txpwr%> dbm <br/> </span>
<%end%>
<%end%>
</td>
<td style="width:310px;text-align:right">
<div id="ActionBtns_<%=dev.devname%>">
<%if not dev.vifs then%>
<button class="cbi-button cbi-button-apply" id="reset" onclick="visit_url('<%=dev.devname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "reset_to_defaults", dev.devname)%>')"><%:Restore Profile to Factory Settings%></button>
<%else%>
<button class="cbi-button cbi-button-reset" onclick="visit_url_confirm('<%:Are you sure to RELOAD%> <%=dev.devname%>?',
'<%=dev.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "reload", dev.devname)%>')"><%:RELOAD%></button>
<button class="cbi-button cbi-button-edit" onclick="visit_url('<%=dev.devname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "dev_cfg_view", dev.devname)%>')"><%:CONFIG%></button>
<button class="cbi-button cbi-button-add" onclick='add_vif("<%=dev.devname%>","<%=dev.vifs.__prefix%>","<%=dev.maxVif%>")'><%:ADD%></button>
<%end%>
</div>
<div id="BusyText_<%=dev.devname%>" style="display:none">
<big><strong><%:Processing request.%></strong></big>
</div>
</td>
</tr>
<!-- /physical device -->
<% if dev.vifs and dev.Enable == "1" then%>
<!-- network list -->
<% for _,vif in ipairs(dev.vifs) do %>
<tr class="cbi-section-table-row cbi-rowstyle-1">
<td></td>
<td class="cbi-value-field" style="width:16px; padding:3px;padding-left:40px;">
<% if vif.state == "up" then %>
<img src="/luci-static/resources/icons/signal-75-100.png">
<% else %>
<img src="/luci-static/resources/icons/signal-none.png">
<% end %>
</td>
<td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px">
<strong><%:Interface%>:</strong> <%=vif.vifname%> |
<strong><%:Type%>:</strong> AP |
<strong>SSID:</strong>
<span id="SSID_<%=vif.vifname%>">
<% if vif.__ssid == "" then %>
<span style="color:red;"><%:Error: value not present in dat file%></span>
<% else %>
<span> <%=vif.__ssid and vif.__ssid:gsub(" ","&nbsp;") or nil%> <% end %> </span>
</span> |
<strong><%:Channel%>:</strong>
<span id="CHANNEL_<%=vif.vifname%>"><%=vif.__channel or dev.Channel%></span>
<br>
<% if vif.state == "up" then %>
<strong>BSSID:</strong> <span id="BSSID_<%=vif.vifname%>"><%=vif.__bssid%></span> | <strong><%:Wireless Mode%>:</strong> <span><%=dev.WirelessModeList[tonumber(vif.__wirelessmode)]%></span>
<% else %>
<%:Wireless is disabled or not associated%>
<% end %>
</td>
<td class="cbi-value-field" style="text-align:right">
<div id="ActionBtns_<%=vif.vifname%>">
<% if not vif.state then %>
<button class="cbi-button cbi-button-apply" onclick="alert('Please click on Reload button of ' + '<%=dev.devname%>' + ' device to enable this interface.')"><%:ENABLE%></button>
<% elseif vif.state == "up" then %>
<button class="cbi-button cbi-button-reset" onclick="visit_url_confirm('<%:Are you sure to DISABLE%> <%=vif.vifname%>?',
'<%=vif.vifname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_disable", vif.vifname)%>')"><%:DISABLE%></button>
<% else %>
<button class="cbi-button cbi-button-apply" onclick="visit_url('<%=vif.vifname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_enable", vif.vifname)%>')"><%:ENABLE%></button>
<% end %>
<button class="cbi-button cbi-button-edit" onclick="visit_url('<%=vif.vifname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_cfg_view", dev.devname, vif.vifname)%>')"><%:CONFIG%></button>
<button class="cbi-button cbi-button-remove" onclick="visit_url_confirm('<%:Are you sure to REMOVE%> <%=vif.vifname%>?',
'<%=vif.vifname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_del", dev.devname, vif.vifname)%>')"><%:REMOVE%></button>
</div>
<div id="BusyText_<%=vif.vifname%>" style="display:none">
<big><strong><%:Processing request.%></strong></big>
</div>
</td>
</tr>
<% end %>
<!-- /network list -->
<!-- apcli list -->
<% if dev.apcli then %>
<tr>
<td></td>
<td class="cbi-value-field" style="width:16px; padding:3px;padding-left:40px;">
<% if dev.apcli.state == "up" then %>
<img src="/luci-static/resources/icons/signal-75-100.png">
<% else %>
<img src="/luci-static/resources/icons/signal-none.png">
<% end %>
</td>
<td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px"><strong><%:Interface%>:</strong> <%=dev.apcli.devname%> | <strong><%:Type%>:</strong> STA | <strong><%:Status%>:</strong> <span id="ConnStatus_<%=dev.apcli.devname%>"><% if dev.ApCliEnable ~= "1" then %> <%:Disconnected%> <% end %></span>
<br>
<div id="LoadingBar_<%=dev.apcli.devname%>" <% if dev.ApCliEnable ~= "1" then %> style="display:none" <% end %>>
<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="width:20px;height:20px;vertical-align:middle;"/> <cite>&nbsp;<%:Loading connection information of%> <%=dev.apcli.devname%></cite>
</div>
<div id="ConnInfo_<%=dev.apcli.devname%>" style="display:none">
<strong>BSSID:</strong> <span id="ApCliBssid_<%=dev.apcli.devname%>"></span> |
<strong>SSID:</strong> <span id="ApCliSsid_<%=dev.apcli.devname%>"></span>
</div>
<span id="DisConnMsg_<%=dev.apcli.devname%>" <% if dev.ApCliEnable == "1" then %> style="display:none" <% end %>><%:Wireless is disabled or not associated%></span>
</td>
<td style="text-align:right">
<div id="ActionBtns_<%=dev.apcli.devname%>">
<% if dev.ApCliEnable ~= "1" then %>
<% if dev.apcli.state == "up" then %>
<button class="cbi-button cbi-button-reset" onclick="visit_url_confirm('<%:Are you sure to DISABLE%> <%=dev.apcli.devname%>?',
'<%=dev.apcli.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_disable", dev.apcli.vifname)%>')"><%:DISABLE%></button>
<button class="cbi-button cbi-button-reload" onclick="visit_url_confirm('<%:Are you sure to RECONNECT%> <%=dev.apcli.devname%>?',
'<%=dev.apcli.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "apcli_connect", dev.devname, dev.apcli.vifname)%>')"><%:RECONNECT%></button>
<% end %>
<button class="cbi-button cbi-button-edit" onclick="visit_url('<%=dev.apcli.devname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "apcli_cfg_view", dev.devname, dev.apcli.vifname)%>')"><%:CONFIG%></button>
<% else %>
<button class="cbi-button cbi-button-reset" style="display:none" id="ApCliDownBtn_<%=dev.apcli.devname%>" onclick="visit_url_confirm('<%:Are you sure to DISABLE%> <%=dev.apcli.devname%>?',
'<%=dev.apcli.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_disable", dev.apcli.vifname)%>')"><%:DISABLE%></button>
<button class="cbi-button cbi-button-apply" style="display:none" id="ApCliUpBtn_<%=dev.apcli.devname%>" onclick="visit_url('<%=dev.apcli.devname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_enable", dev.apcli.vifname)%>')"><%:ENABLE%></button>
<button class="cbi-button cbi-button-remove" style="display:none" id="ApCliDisConnBtn_<%=dev.apcli.devname%>" onclick="visit_url_confirm('<%:Are you sure to DISCONNECT%> <%=dev.apcli.devname%>?',
'<%=dev.apcli.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "apcli_disconnect", dev.devname, dev.apcli.vifname)%>')"><%:DISCONNECT%></button>
<button class="cbi-button cbi-button-reload" style="display:none" id="ApCliConnBtn_<%=dev.apcli.devname%>" onclick="visit_url_confirm('<%:Are you sure to RECONNECT%> <%=dev.apcli.devname%>?',
'<%=dev.apcli.devname%>','<%=luci.dispatcher.build_url("admin", "network", "wifi", "apcli_connect", dev.devname, dev.apcli.vifname)%>')"><%:RECONNECT%></button>
<button class="cbi-button cbi-button-edit" style="display:none" id="ApCliCfgBtn_<%=dev.apcli.devname%>" onclick="visit_url('<%=dev.apcli.devname%>',
'<%=luci.dispatcher.build_url("admin", "network", "wifi", "apcli_cfg_view", dev.devname, dev.apcli.vifname)%>')"><%:CONFIG%></button>
<% end %>
</div>
<div id="BusyText_<%=dev.apcli.devname%>" style="display:none">
<big><strong><%:Processing request.%></strong></big>
</div>
</td>
</tr>
<% end %>
<!-- /apcli list -->
<% end %>
</tbody>
<% end %>
<% end %>
</table>
</fieldset>
<fieldset class="cbi-section">
<h2><%:Station List%></h2>
<table class="cbi-section-table" style="margin: auto" id="iw-assoclist">
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell"><%:Interface%></th>
<th class="cbi-section-table-cell">SSID</th>
<th class="cbi-section-table-cell"><%:MAC-Address%></th>
<th class="cbi-section-table-cell"><%:Hostname%></th>
<th class="cbi-section-table-cell"><%:Security%></th>
<th class="cbi-section-table-cell"><%:Signal%> (dBm)</th>
<th class="cbi-section-table-cell"><%:TX Rate%></th>
<th class="cbi-section-table-cell"><%:RX Rate%></th>
<th class="cbi-section-table-cell"><%:Connected Time%></th>
</tr>
<tr class="cbi-section-table-row cbi-rowstyle-2">
<td class="cbi-value-field" colspan="9">
<em><%:Collecting data...%></em>
</td>
</tr>
</table>
</fieldset>
<% end %>
<script>
function clean_stalist_table()
{
var table = document.getElementById('iw-assoclist');
//console.log("clean_aplist_table.aplist len=" + table.rows.length);
while(table.rows.length > 1)
table.deleteRow(-1);
}
function is_rssi_valid(rssi)
{
if (rssi == "-109" || rssi == "-127")
return false;
return true;
}
function insert_stalist_table(ifname, ssid, sta_list)
{
var i, tr_row, td_cell;
var rssi_str, host_str;
var tableid = document.getElementById('iw-assoclist');
for (i = 0; sta_list[i] ; i++){
//console.log(sta_list[i]);
tr_row = tableid.insertRow(-1);
tr_row.align = "center";
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = ifname;
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = ssid;
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = sta_list[i].MacAddr;
host_str = sta_list[i].hostname
if (sta_list[i].ipv4 != "")
host_str = host_str + ", " + sta_list[i].ipv4
if (sta_list[i].ipv6 != "")
host_str = host_str + "<br>" + sta_list[i].ipv6
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = host_str;
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = sta_list[i].security;
rssi_str = sta_list[i].AvgRssi0;
if (is_rssi_valid(sta_list[i].AvgRssi1))
rssi_str = rssi_str + ", " + sta_list[i].AvgRssi1;
if (is_rssi_valid(sta_list[i].AvgRssi2))
rssi_str = rssi_str + ", " + sta_list[i].AvgRssi2;
if (is_rssi_valid(sta_list[i].AvgRssi3))
rssi_str = rssi_str + ", " + sta_list[i].AvgRssi3;
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = rssi_str;
//TxRate
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = sta_list[i].TxRate + "Mbps," + sta_list[i].Bw+ "MHz" + "<br>" + sta_list[i].PhyMode + ", " + sta_list[i].Mcs + ", " + sta_list[i].Gi;
//RxRate
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = sta_list[i].RxRate + "Mbps," + sta_list[i].LastBw + "MHz" + "<br>" + sta_list[i].LastPhyMode + ", " + sta_list[i].LastMcs + ", " + sta_list[i].LastGi;
td_cell = tr_row.insertCell(-1);
td_cell.innerHTML = sta_list[i].Hr + ":" + sta_list[i].Min + ":" + sta_list[i].Sec;
}
}
function disable_all_buttons()
{
var inp = document.getElementsByTagName("BUTTON");
for(var idx=0; idx < inp.length; idx++){
inp[idx].disabled = true;
}
}
function enable_all_buttons()
{
var inp = document.getElementsByTagName("BUTTON");
for(var idx=0; idx < inp.length; idx++){
inp[idx].disabled = false;
}
}
function visit_url(idSuffix,to)
{
//disable_all_buttons();
//document.getElementById("ActionBtns_"+idSuffix).style.display = "none";
//document.getElementById("BusyText_"+idSuffix).style.display = "";
location.href = to;
}
function visit_url_confirm(msg, idSuffix, to) {
var i = confirm(msg);
if (i)
visit_url(idSuffix,to);
}
function add_vif(devName, vifPrefix, maxVif)
{
if (!confirm('<%:Are you sure to ADD wireless interface?%>'))
return;
disable_all_buttons();
document.getElementById("ActionBtns_"+devName).style.display = "none";
document.getElementById("BusyText_"+devName).style.display = "";
if(isNaN(maxVif) || !/^\d{1,}$/.test(maxVif)){
alert("Failed to add a new interface!\nERROR: Incorrect maximum supported VIF setting!\nmaxVif = " + maxVif);
location.reload(true);
return;
}
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_bssid_num")%>/' + devName, null,
function(x)
{
try{
var resp = JSON.parse(x.response);
if(resp["status"] == "SUCCESS"){
if(isNaN(resp["bssidNum"]) || !/^\d{1,}$/.test(resp["bssidNum"]) || parseInt(resp["bssidNum"]) > parseInt(maxVif)){
alert("Failed to add a new interface!\nERROR: Device settings have been corrupted!\nBssidNum in Response is: " + resp["bssidNum"]);
location.reload(true);
}
else if(parseInt(resp["bssidNum"]) == parseInt(maxVif)){
alert("As the Device " + devName + " supports maximum " + maxVif + " virtual interfaces, no more virtual interfaces can be added!");
}
else{
location.href = '<%=luci.dispatcher.build_url("admin", "network", "wifi", "vif_add_view")%>/' + devName + '/' + vifPrefix;
}
}
else{
alert("Failed to add a new interface!\nERROR: " + resp["status"]);
}
}
catch(e){
alert("Failed to add a new interface!\nERROR: Incorrect response received!");
console.log("Failed to add a new interface!\nERROR: [" + e.name + "] " + e.message);
}
finally{
enable_all_buttons();
document.getElementById("ActionBtns_"+devName).style.display = "";
document.getElementById("BusyText_"+devName).style.display = "none";
}
}
);
}
var stainfo = [];
var stainfo_inited = 0;
function staInfoHandler()
{
for (var i=0; stainfo[i]; i++) {
//console.log(stainfo[i].ifname);
XHR.poll(3, "<%=luci.dispatcher.build_url("admin", "network", "wifi", "sta_info")%>/" + stainfo[i].ifname, null,
function(x)
{
try{
stainfo_inited = 1;
//console.log(x.responseText);
var response = JSON.parse(x.responseText);
for (var j=0; stainfo[j]; j++) {
if (response[0].ifname == stainfo[j].ifname) {
response.shift(); //delete first item
stainfo[j].sta = response;
}
}
}
catch(e){}
}
);
}
}
function printstainfo()
{
if (stainfo.length == 0) {
clean_stalist_table();
return;
}
if (stainfo_inited) {
//console.log(stainfo);
clean_stalist_table();
var stabuf = stainfo;
for (var i=0; stabuf[i]; i++) {
insert_stalist_table(stabuf[i].ifname, stabuf[i].ssid, stabuf[i].sta);
}
}
setTimeout(printstainfo, 2000);
}
function apcliInfoTimerHandler(vifNameList,idx,remSec)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_apcli_conn_info")%>/' + vifNameList[idx], null,
function(x)
{
try{
updateApCliInfoCb(vifNameList,idx,remSec,JSON.parse(x.response));
}
catch(e){
var y={conn_state:"Disconnected"};
updateApCliInfoCb(vifNameList,idx,0,y);
}
}
);
}
function updateApCliInfoCb(vifNameList,idx,remSec,connInfo)
{
var vifName = vifNameList[idx];
if(connInfo.hasOwnProperty("conn_state") && connInfo["conn_state"] == "Connected"){
document.getElementById("ConnStatus_"+vifName).innerHTML = "<%:Connected%>";
document.getElementById("ApCliBssid_"+vifName).innerHTML = (connInfo.hasOwnProperty("bssid")) ? connInfo["bssid"] : "?";
document.getElementById("ApCliSsid_"+vifName).innerHTML = (connInfo.hasOwnProperty("ssid")) ? connInfo["ssid"].replace(/ /g,"&nbsp;") : "";
document.getElementById("LoadingBar_"+vifName).style.display = "none";
document.getElementById("ApCliDownBtn_"+vifName).style.display = "";
document.getElementById("ApCliDisConnBtn_"+vifName).style.display = "";
document.getElementById("ApCliCfgBtn_"+vifName).style.display = "";
document.getElementById("ConnInfo_"+vifName).style.display = "";
if(idx < vifNameList.length - 1){
setTimeout(apcliInfoTimerHandler,1000,vifNameList,idx+1,5);
}
}
else{
if(remSec > 1){
setTimeout(apcliInfoTimerHandler,1000,vifNameList,idx,remSec - 1);
}
else{
if (connInfo.hasOwnProperty("conn_state") && (connInfo["conn_state"] == "Connected")) {
document.getElementById("ConnStatus_"+vifName).innerHTML = "<%:Connected%>";
} else {
document.getElementById("ConnStatus_"+vifName).innerHTML = "<%:Disconnected%>";
}
document.getElementById("LoadingBar_"+vifName).style.display = "none";
document.getElementById("DisConnMsg_"+vifName).style.display = "";
if (connInfo.hasOwnProperty("infc_state") && connInfo["infc_state"] == "up"){
document.getElementById("ApCliDownBtn_"+vifName).style.display = "";
}
else{
document.getElementById("ApCliUpBtn_"+vifName).style.display = "";
}
document.getElementById("ApCliConnBtn_"+vifName).style.display = "";
document.getElementById("ApCliCfgBtn_"+vifName).style.display = "";
if(idx < vifNameList.length - 1){
setTimeout(apcliInfoTimerHandler,1000,vifNameList,idx+1,5);
}
}
}
}
function updateApCliInfo()
{
var apCliInfcList=[];
<% for _,dev in ipairs(devs) do %>
<% if dev.apcli and dev.ApCliEnable == "1" then %>
apCliInfcList.push("<%=dev.apcli.devname%>");
<% end %>
<% end %>
if (apCliInfcList.length >= 1 ){
setTimeout(apcliInfoTimerHandler,1000,apCliInfcList,0,3);
}
}
function get_apply_status_cb(rsp)
{
try{
var r = JSON.parse(rsp);
}
catch(e){
return;
}
if(r.status == "ON_PROGRESS"){
var u = confirm("Device is applying the saved settings now!\n" +
"It is recommended to wait until all the saved settings are applied.\n" +
"Please click on 'OK' button to wait for the device.\n" +
"or click on 'Cancel' button to configure the settings available in current web-page.");
if (u == true) {
location = '<%=luci.dispatcher.build_url("admin", "network", "wifi", "loading")%>' + window.location.pathname;
}
}
}
function get_apply_status()
{
XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_apply_status")%>', null,
function(x)
{
console.log(x);
get_apply_status_cb(x.response);
}
);
}
window.onload = function(){
get_apply_status();
updateApCliInfo();
<% for _,dev in ipairs(devs) do %>
<% if dev.vifs then%>
<% for _,vif in ipairs(dev.vifs) do %>
<% if vif.state == "up" then %>
stainfo.push({"ifname": "<%=vif.vifname%>", "ssid": "<%=vif.__ssid%>", "sta": ""});
<% end %>
<% end %>
<% end %>
<% end %>
staInfoHandler(stainfo);
printstainfo();
}
</script>
<%+footer%>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,515 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Auto"
msgstr "自动"
msgid "Disable"
msgstr "禁用"
msgid "US"
msgstr "US (美国)"
msgid "JP"
msgstr "JP (日本)"
msgid "FR"
msgstr "FR (法国)"
msgid "IE"
msgstr "IE (爱尔兰)"
msgid "CN"
msgstr "CN (中国)"
msgid "NONE"
msgstr "无"
msgid "Short"
msgstr "Short (短)"
msgid "long"
msgstr "Long (长)"
msgid "Enable"
msgstr "启用"
msgid "Mandatory"
msgstr "强制"
msgid "Always On"
msgstr "始终开启"
msgid "Always Off"
msgstr "始终关闭"
msgid "Tempature"
msgstr "温度"
msgid "Tx Power"
msgstr "发射功率"
msgid "Driver version"
msgstr "驱动版本"
msgid "Current Band"
msgstr "当前频段"
msgid "Work mode"
msgstr "工作模式"
msgid "CONFIG"
msgstr "配置"
msgid "RELOAD"
msgstr "重载"
msgid "ADD"
msgstr "添加"
msgid "RECONNECT"
msgstr "重连"
msgid "DISABLE"
msgstr "禁用"
msgid "ENABLE"
msgstr "启用"
msgid "REMOVE"
msgstr "移除"
msgid "Station List"
msgstr "已连接站点"
msgid "Interface"
msgstr "接口"
msgid "MAC-Address"
msgstr "MAC地址"
msgid "Signal"
msgstr "信号强度"
msgid "TX Rate"
msgstr "发射速率"
msgid "Rx Rate"
msgstr "接收速率"
msgid "Connected Time"
msgstr "已连接时间"
msgid "Channel"
msgstr "信道"
msgid "Security Mode"
msgstr "加密方式"
msgid "Action"
msgstr "动作"
msgid "Choose This"
msgstr "选择"
msgid "40MHz HT Ext Channel"
msgstr "HT 40MHz 扩展信道"
msgid "80MHz Second VHT Channel"
msgstr "VHT 80MHz 第二信道"
msgid "Type"
msgstr "接口类型"
msgid "Status"
msgstr "状态"
msgid "DISCONNECT"
msgstr "断开"
msgid "Connected"
msgstr "已连接"
msgid "Disconnected"
msgstr "未连接"
msgid "FATAL ERROR: Incorrect Profile Settings"
msgstr "严重错误: 配置文件设置不正确"
msgid "Error: value not present in dat file"
msgstr "错误dat文件中未指定SSID值"
msgid "Wireless is disabled or not associated"
msgstr "无线已禁用或未关联"
msgid "Processing request."
msgstr "正在处理请求..."
msgid "need reload to apply changes"
msgstr "请重启无线以应用设置"
msgid "Click here"
msgstr "点击此处"
msgid "to apply changes"
msgstr "以应用设置"
msgid "Wireless Mode"
msgstr "无线模式"
msgid "Chip Configurations"
msgstr "无线芯片设置"
msgid "Device Configuration"
msgstr "无线设备设置"
msgid "Interface Configurations"
msgstr "无线接口设置"
msgid "ApCli Configurations"
msgstr "ApCli设置"
msgid "Loading connection information of"
msgstr "正在加载连接信息"
msgid "ApCli Available Wireless Networks"
msgstr "ApCli可用无线网络列表"
msgid "ApCli Connection Configurations"
msgstr "ApCli连接设置"
msgid "Decline BA Request"
msgstr "拒绝BlockAck请求"
msgid "Reverse Direction Grant (RDG)"
msgstr "HT反向授权(RDG)"
msgid "BA Win size"
msgstr "Block Ack窗口大小"
msgid "HT Disallow TKIP"
msgstr "不允许HT TKIP"
msgid "Wi-Fi HWNAT"
msgstr "启用Wi-Fi硬件加速"
msgid "E2pAccessMode"
msgstr "EEPROM访问方式"
msgid "Beacon Interval"
msgstr "Beacon间隔"
msgid "Data Beacon Rate (DTIM)"
msgstr "DTIM周期"
msgid "BG Protection Mode"
msgstr "BG保护模式"
msgid "Short Preamble"
msgstr "启用短前导码"
msgid "TX Burst"
msgstr "启用突发传输"
msgid "Short Slot"
msgstr "启用短时槽"
msgid "Channel Auto"
msgstr "自动信道"
msgid "BSS color"
msgstr "BSS颜色代码"
msgid "TWT Support"
msgstr "TWT节能机制"
msgid "Country Code"
msgstr "国家代码"
msgid "Country Region"
msgstr "国家区域"
msgid "Channel BandWidth"
msgstr "信道宽度"
msgid "TX Stream"
msgstr "发射空间流"
msgid "RX Stream"
msgstr "接收空间流"
msgid "TX Power"
msgstr "发射功率"
msgid "DFS"
msgstr "动态频率选择(DFS)"
msgid "Beam Forming and MIMO Setting"
msgstr "波束成形与MU-MIMO设置"
msgid "Spatial Reuse"
msgstr "空间复用"
msgid "Auth Mode"
msgstr "认证模式"
msgid "Encryption"
msgstr "加密方式"
msgid "Key Renewal Interval"
msgstr "组密钥更新周期"
msgid "Key"
msgstr "密码"
msgid "MFPC"
msgstr "兼容保护管理帧(MFPC)"
msgid "MFPR"
msgstr "强制保护管理帧(MFPR)"
msgid "Hidden SSID"
msgstr "隐藏SSID"
msgid "AP Isolation"
msgstr "启用AP隔离"
msgid "WMM Capable"
msgstr "启用WMM"
msgid "Fixed TX Rate"
msgstr "固定发射速率"
msgid "HT STBC"
msgstr "启用HT STBC"
msgid "HT LDPC"
msgstr "启用HT LDPC"
msgid "VHT STBC"
msgstr "启用VHT STBC"
msgid "VHT LDPC"
msgstr "启用VHT LDPC"
msgid "DLS Capable"
msgstr "启用终端直通(DLS)"
msgid "802.11k RRM"
msgstr "启用 802.11k"
msgid "802.11r FT"
msgstr "启用 802.11r"
msgid "APSD Capable"
msgstr "启用节能模式(APSD)"
msgid "Fragment Threshold"
msgstr "分片阈值"
msgid "RTS Threshold"
msgstr "RTS阈值"
msgid "VHT Short GI"
msgstr "VHT保护间隔(GI)"
msgid "VHT BW Signaling"
msgstr "VHT动态频宽信令"
msgid "Dynamic"
msgstr "动态"
msgid "HT Protection"
msgstr "HT保护模式"
msgid "HT Guard Interval"
msgstr "HT保护间隔(GI)"
msgid "HT Operating Mode"
msgstr "HT操作模式"
msgid "HT Mixed Mode"
msgstr "HT混合模式(Mixed)"
msgid "HT Green Field"
msgstr "HT绿野模式(Green Field)"
msgid "Auto Block ACK"
msgstr "自动块确认(BlockAck)"
msgid "Access Control"
msgstr "访问控制"
msgid "Access Policy"
msgstr "访问控制策略"
msgid "Access control MAC address list"
msgstr "访问控制MAC地址列表"
msgid "White List"
msgstr "白名单模式"
msgid "Black List"
msgstr "黑名单模式"
msgid "Basic Settings"
msgstr "基本设置"
msgid "HE Settings"
msgstr "HE设置"
msgid "DL OFDMA"
msgstr "下行OFDMA"
msgid "UL OFDMA"
msgstr "上行OFDMA"
msgid "DL MU-MIMO"
msgstr "下行MU-MIMO"
msgid "UL MU-MIMO"
msgstr "上行MU-MIMO"
msgid "Scan Wireless Network"
msgstr "扫描无线网络"
msgid "ApClient Mode"
msgstr "AP客户端模式"
msgid "APClient/Repeater Mode."
msgstr "AP客户端中继模式。"
msgid "MAC Repeater Mode"
msgstr "启用MAC中继模式"
msgid "Root AP SSID"
msgstr "上级AP SSID"
msgid "Root AP Channel"
msgstr "上级AP信道"
msgid "Root AP Authentication Mode"
msgstr "上级AP认证方式"
msgid "Root AP Encryption"
msgstr "上级AP加密方式"
msgid "Root AP WPA Key"
msgstr "上级AP WPA密钥"
msgid "ApCli MFPC"
msgstr "ApCli兼容保护管理帧(MFPC)"
msgid "ApCli MFPR"
msgstr "ApCli强制保护管理帧(MFPR)"
msgid "ApCli MFPSHA256"
msgstr "ApCli启用SHA256保护管理帧"
msgid "WEP Default Key"
msgstr "WEP默认密钥ID"
msgid "Root AP WEP Key"
msgstr "上级AP WEP密钥"
msgid "Length"
msgstr "长度"
msgid "WEP Key"
msgstr "WEP密钥"
msgid "WEP Key Type"
msgstr "WEP密钥类型"
msgid "PMK Cache Period"
msgstr "PMK缓存周期"
msgid "WEP for 8021X"
msgstr "启用8021X WEP"
msgid "Pre-Authentication"
msgstr "启用预认证"
msgid "Radius Server IP"
msgstr "Radius认证服务器IP"
msgid "Radius Server Port"
msgstr "Radius认证服务器端口"
msgid "Radius Key"
msgstr "Radius密钥"
msgid "Radius Session Timeout"
msgstr "Radius会话超时时间"
msgid "Radius Idle Timeout"
msgstr "Radius空闲超时时间"
msgid "MFPSHA256"
msgstr "启用SHA256保护管理帧"
msgid "Please wait while the settings are being applied."
msgstr "正在应用设置,请稍候。"
msgid "Please wait while the request is being processed."
msgstr "正在处理请求,请稍候。"
msgid "No wireless device found!"
msgstr "未找到无线设备!"
msgid "Please input a valid radius server port number."
msgstr "请输入有效的Radius服务器端口号。"
msgid "The radius shared secret contains invalid characters."
msgstr "Radius密钥包含无效字符。"
msgid "Please input a valid session timeout number or u may have left it empty."
msgstr "请输入有效的Radius会话超时时间。"
msgid "Radius session time out is empty."
msgstr "Radius会话超时时间为空。"
msgid "Please input a valid idle timeout number or u may have left it empty."
msgstr "请输入有效的Radius空闲超时时间。"
msgid "Radius idle time out is empty."
msgstr "Radius空闲超时时间为空。"
msgid "IGMP Snooping"
msgstr "IGMP 侦听"
msgid "Security"
msgstr "安全性"
msgid "Restore Profile to Factory Settings"
msgstr "恢复无线配置文件为出厂设置"
msgid "Are you sure to RELOAD"
msgstr "你确认要重载"
msgid "Are you sure to DISABLE"
msgstr "你确认要禁用"
msgid "Are you sure to REMOVE"
msgstr "你确认要移除"
msgid "Are you sure to RECONNECT"
msgstr "你确认要重新连接"
msgid "Are you sure to DISCONNECT"
msgstr "你确认要断开"
msgid "Are you sure to ADD wireless interface?"
msgstr "你确认要新增无线接口?"
msgid "Enable wireless device"
msgstr "启用此无线设备"
msgid "Wireless device is disabled"
msgstr "无线设备已禁用"
msgid "Kick STA Threshold"
msgstr "弱信号剔除阈值"
msgid "STA Assoc Threshold"
msgstr "弱信号接入阈值"

View File

@ -0,0 +1,177 @@
#!/usr/bin/lua
-- Constant Definition
local FW_PATH = "/lib/firmware/"
local MTD_PATH = "/dev/"
local MTD_TABLE = "/proc/mtd"
local E2P_PART_NAME = "Factory"
local E2P_FILE_NAME = "e2p"
function show_usage()
print("Usage: l1dat genconfig | dbg | idx2if idx | if2zone ifname | if2dat ifname | zone2if zone | if2dbdcidx ifname")
end
function print_err(msg)
io.stderr:write("[ERR][l1dat] "..msg)
end
if not pcall(require, "l1dat_parser") then
if arg[1] == "dbg" then
print_err("Load l1dat_parser module failed\n")
end
return
end
local l1parser = require("l1dat_parser")
local l1dat = l1parser.load_l1_profile(l1parser.L1_DAT_PATH)
if not l1dat then
if arg[1] == "dbg" then
print_err("l1profile.dat is ivalid\n")
end
return
end
function read_pipe(pipe)
local fp = io.popen(pipe)
local txt = fp:read("*a")
fp:close()
return txt
end
function eeprom_extract(part, offset, size, bin_name)
local part_name = part or E2P_PART_NAME
local dump_name = bin_name or E2P_FILE_NAME
if not offset or not size or tonumber(offset) < 0 or tonumber(size) < 0 then
print_err("Invalid offset or size value")
return
end
local offset_decimal = string.format("%d", offset)
local size_decimal = string.format("%d", size)
local cmd = "cat "..MTD_TABLE.." | grep "..part_name
local mtd = read_pipe(cmd)
if not mtd or mtd == "" then
print_err("mtd partition "..part_name.." not found")
return
end
cmd = "[ -e "..FW_PATH.." ] || mkdir "..FW_PATH
os.execute(cmd)
local mtd_node = "/dev/"..string.match(mtd, "(mtd[%d]+)")
cmd = "dd if="..mtd_node.." of="..FW_PATH..dump_name.." bs=1 skip="..offset_decimal.." count="..size_decimal.." seek="..offset_decimal.." conv=notrunc 2>/dev/null"
os.execute(cmd)
end
local action0 = {
["dbg"] = function()
show_usage()
end,
["genconfig"] = function()
local seen = {}
local dridx = l1parser.DEV_RINDEX
local cmd = ""
local dir = ""
for name, dev in pairs(l1dat[dridx]) do
if not seen[dev] then
seen[dev] = true
dir = string.match(dev["profile_path"], "^(.+)/")
--print("mkdir -p "..dir)
os.execute("mkdir -p "..dir)
cmd = "ralink_init gen "..dev["nvram_zone"].." "..dev["profile_path"]
--print(cmd)
os.execute(cmd)
eeprom_extract(E2P_PART_NAME, dev.EEPROM_offset, dev.EEPROM_size, dev.EEPROM_name)
end
end
end,
["if2zone"] = function(ifname)
if not ifname then return end
local zone = l1parser.l1_ifname_to_zone(ifname) or ""
print(zone);
end,
["if2dat"] = function(ifname)
if not ifname then return end
local dat_path = l1parser.l1_ifname_to_datpath(ifname) or ""
print(dat_path)
end,
["zone2if"] = function(zone)
if not zone then return end
local main_if, ext_if, apcli, wds, mesh = l1parser.l1_zone_to_ifname(zone)
if main_if then
print(main_if.." "..ext_if.." "..apcli.." "..wds.." "..mesh)
end
end,
["idx2if"] = function(idx)
if not idx then return end
idx = tonumber(idx)
local band_num = l1parser.MAX_NUM_DBDC_BAND
local dbdc_if
local count = 0
for k, v in pairs(l1dat) do
-- check if last dbdc exists
dbdc_if = l1parser.token_get(v.main_ifname, band_num, nil)
if dbdc_if then
count = count + band_num;
else
count = count + 1
end
if not dbdc_if and count == idx then
print(v.main_ifname)
break
end
if count >= idx then -- dbdc case
local token_num = band_num - ( count - idx )
print(l1parser.token_get(v.main_ifname, token_num, nil))
break
end
end
end,
["if2dbdcidx"] = function(ifname)
if not ifname then return end
local ridx = l1parser.IF_RINDEX
if not l1dat[ridx][ifname] then return end
print(l1dat[ridx][ifname]["subidx"] or "0")
end
}
if #arg == 0 then
show_usage()
return
end
if action0[arg[1]] then
if #arg == 1 then
--print("#arg == 1", arg[1])
action0[arg[1]]()
elseif #arg == 2 then
--print("#arg == 1", arg[1], arg[2])
action0[arg[1]](arg[2])
end
else
print_err("invalid arg \""..arg[1].."\"\n");
end

View File

@ -0,0 +1,337 @@
local _tl_compat; if (tonumber((_VERSION or ''):match('[%d.]*$')) or 0) < 5.3 then local p, m = pcall(require, 'compat53.module'); if p then _tl_compat = m end end; local math = _tl_compat and _tl_compat.math or math; local string = _tl_compat and _tl_compat.string or string; local table = _tl_compat and _tl_compat.table or table
local inspect = {Options = {}, }
inspect._VERSION = 'inspect.lua 3.1.0'
inspect._URL = 'http://github.com/kikito/inspect.lua'
inspect._DESCRIPTION = 'human-readable representations of tables'
inspect._LICENSE = [[
MIT LICENSE
Copyright (c) 2022 Enrique García Cota
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
]]
inspect.KEY = setmetatable({}, { __tostring = function() return 'inspect.KEY' end })
inspect.METATABLE = setmetatable({}, { __tostring = function() return 'inspect.METATABLE' end })
local tostring = tostring
local rep = string.rep
local match = string.match
local char = string.char
local gsub = string.gsub
local fmt = string.format
local function rawpairs(t)
return next, t, nil
end
local function smartQuote(str)
if match(str, '"') and not match(str, "'") then
return "'" .. str .. "'"
end
return '"' .. gsub(str, '"', '\\"') .. '"'
end
local shortControlCharEscapes = {
["\a"] = "\\a", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n",
["\r"] = "\\r", ["\t"] = "\\t", ["\v"] = "\\v", ["\127"] = "\\127",
}
local longControlCharEscapes = { ["\127"] = "\127" }
for i = 0, 31 do
local ch = char(i)
if not shortControlCharEscapes[ch] then
shortControlCharEscapes[ch] = "\\" .. i
longControlCharEscapes[ch] = fmt("\\%03d", i)
end
end
local function escape(str)
return (gsub(gsub(gsub(str, "\\", "\\\\"),
"(%c)%f[0-9]", longControlCharEscapes),
"%c", shortControlCharEscapes))
end
local function isIdentifier(str)
return type(str) == "string" and not not str:match("^[_%a][_%a%d]*$")
end
local flr = math.floor
local function isSequenceKey(k, sequenceLength)
return type(k) == "number" and
flr(k) == k and
1 <= (k) and
k <= sequenceLength
end
local defaultTypeOrders = {
['number'] = 1, ['boolean'] = 2, ['string'] = 3, ['table'] = 4,
['function'] = 5, ['userdata'] = 6, ['thread'] = 7,
}
local function sortKeys(a, b)
local ta, tb = type(a), type(b)
if ta == tb and (ta == 'string' or ta == 'number') then
return (a) < (b)
end
local dta = defaultTypeOrders[ta] or 100
local dtb = defaultTypeOrders[tb] or 100
return dta == dtb and ta < tb or dta < dtb
end
local function getKeys(t)
local seqLen = 1
while rawget(t, seqLen) ~= nil do
seqLen = seqLen + 1
end
seqLen = seqLen - 1
local keys, keysLen = {}, 0
for k in rawpairs(t) do
if not isSequenceKey(k, seqLen) then
keysLen = keysLen + 1
keys[keysLen] = k
end
end
table.sort(keys, sortKeys)
return keys, keysLen, seqLen
end
local function countCycles(x, cycles)
if type(x) == "table" then
if cycles[x] then
cycles[x] = cycles[x] + 1
else
cycles[x] = 1
for k, v in rawpairs(x) do
countCycles(k, cycles)
countCycles(v, cycles)
end
countCycles(getmetatable(x), cycles)
end
end
end
local function makePath(path, a, b)
local newPath = {}
local len = #path
for i = 1, len do newPath[i] = path[i] end
newPath[len + 1] = a
newPath[len + 2] = b
return newPath
end
local function processRecursive(process,
item,
path,
visited)
if item == nil then return nil end
if visited[item] then return visited[item] end
local processed = process(item, path)
if type(processed) == "table" then
local processedCopy = {}
visited[item] = processedCopy
local processedKey
for k, v in rawpairs(processed) do
processedKey = processRecursive(process, k, makePath(path, k, inspect.KEY), visited)
if processedKey ~= nil then
processedCopy[processedKey] = processRecursive(process, v, makePath(path, processedKey), visited)
end
end
local mt = processRecursive(process, getmetatable(processed), makePath(path, inspect.METATABLE), visited)
if type(mt) ~= 'table' then mt = nil end
setmetatable(processedCopy, mt)
processed = processedCopy
end
return processed
end
local function puts(buf, str)
buf.n = buf.n + 1
buf[buf.n] = str
end
local Inspector = {}
local Inspector_mt = { __index = Inspector }
local function tabify(inspector)
puts(inspector.buf, inspector.newline .. rep(inspector.indent, inspector.level))
end
function Inspector:getId(v)
local id = self.ids[v]
local ids = self.ids
if not id then
local tv = type(v)
id = (ids[tv] or 0) + 1
ids[v], ids[tv] = id, id
end
return tostring(id)
end
function Inspector:putValue(v)
local buf = self.buf
local tv = type(v)
if tv == 'string' then
puts(buf, smartQuote(escape(v)))
elseif tv == 'number' or tv == 'boolean' or tv == 'nil' or
tv == 'cdata' or tv == 'ctype' then
puts(buf, tostring(v))
elseif tv == 'table' and not self.ids[v] then
local t = v
if t == inspect.KEY or t == inspect.METATABLE then
puts(buf, tostring(t))
elseif self.level >= self.depth then
puts(buf, '{...}')
else
if self.cycles[t] > 1 then puts(buf, fmt('<%d>', self:getId(t))) end
local keys, keysLen, seqLen = getKeys(t)
puts(buf, '{')
self.level = self.level + 1
for i = 1, seqLen + keysLen do
if i > 1 then puts(buf, ',') end
if i <= seqLen then
puts(buf, ' ')
self:putValue(t[i])
else
local k = keys[i - seqLen]
tabify(self)
if isIdentifier(k) then
puts(buf, k)
else
puts(buf, "[")
self:putValue(k)
puts(buf, "]")
end
puts(buf, ' = ')
self:putValue(t[k])
end
end
local mt = getmetatable(t)
if type(mt) == 'table' then
if seqLen + keysLen > 0 then puts(buf, ',') end
tabify(self)
puts(buf, '<metatable> = ')
self:putValue(mt)
end
self.level = self.level - 1
if keysLen > 0 or type(mt) == 'table' then
tabify(self)
elseif seqLen > 0 then
puts(buf, ' ')
end
puts(buf, '}')
end
else
puts(buf, fmt('<%s %d>', tv, self:getId(v)))
end
end
function inspect.inspect(root, options)
options = options or {}
local depth = options.depth or (math.huge)
local newline = options.newline or '\n'
local indent = options.indent or ' '
local process = options.process
if process then
root = processRecursive(process, root, {}, {})
end
local cycles = {}
countCycles(root, cycles)
local inspector = setmetatable({
buf = { n = 0 },
ids = {},
cycles = cycles,
depth = depth,
level = 0,
newline = newline,
indent = indent,
}, Inspector_mt)
inspector:putValue(root)
return table.concat(inspector.buf)
end
setmetatable(inspect, {
__call = function(_, root, options)
return inspect.inspect(root, options)
end,
})
return inspect

View File

@ -0,0 +1,349 @@
#!/usr/bin/env lua
--[[
* A lua library to manipulate mtk's wifi driver. used in luci-app-mtk.
*
* Copyright (C) 2016 MTK <support@mediatek.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
]]
local l1dat_parser = {
L1_DAT_PATH = "/etc/wireless/l1profile.dat",
IF_RINDEX = "ifname_ridx",
DEV_RINDEX = "devname_ridx",
MAX_NUM_APCLI = 1,
MAX_NUM_WDS = 4,
MAX_NUM_MESH = 1,
MAX_NUM_EXTIF = 16,
MAX_NUM_DBDC_BAND = 2,
}
local l1cfg_options = {
ext_ifname="",
apcli_ifname="apcli",
wds_ifname="wds",
mesh_ifname="mesh"
}
function l1dat_parser.__trim(s)
if s then return (s:gsub("^%s*(.-)%s*$", "%1")) end
end
function l1dat_parser.__cfg2list(str)
-- delimeter == ";"
local i = 1
local list = {}
for k in string.gmatch(str, "([^;]+)") do
list[i] = k
i = i + 1
end
return list
end
function l1dat_parser.token_get(str, n, v)
-- n starts from 1
-- v is the backup in case token n is nil
if not str then return v end
local tmp = l1dat_parser.__cfg2list(str)
return tmp[tonumber(n)] or v
end
function l1dat_parser.add_default_value(l1cfg)
for k, v in ipairs(l1cfg) do
for opt, default in pairs(l1cfg_options) do
if ( opt == "ext_ifname" ) then
v[opt] = v[opt] or v["main_ifname"].."_"
else
v[opt] = v[opt] or default..k.."_"
end
end
end
return l1cfg
end
function l1dat_parser.get_value_by_idx(devidx, mainidx, subidx, key)
--print("Enter l1dat_parser.get_value_by_idx("..devidx..","..mainidx..", "..subidx..", "..key..")<br>")
if not devidx or not mainidx or not key then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
local dev_ridx = l1dat_parser.DEV_RINDEX
local sidx = subidx or 1
local devname1 = devidx.."."..mainidx
local devname2 = devidx.."."..mainidx.."."..sidx
--print("devnam1=", devname1, "devname2=", devname2, "<br>")
return devs[dev_ridx][devname2] and devs[dev_ridx][devname2][key]
or devs[dev_ridx][devname1] and devs[dev_ridx][devname1][key]
end
-- path to zone is 1 to 1 mapping
function l1dat_parser.l1_path_to_zone(path)
--print("Enter l1dat_parser.l1_path_to_zone("..path..")<br>")
if not path then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
for _, dev in pairs(devs[l1dat_parser.IF_RINDEX]) do
if dev.profile_path == path then
return dev.nvram_zone
end
end
return
end
-- zone to path is 1 to n mapping
function l1dat_parser.l1_zone_to_path(zone)
if not zone then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
local plist = {}
for _, dev in pairs(devs[l1dat_parser.IF_RINDEX]) do
if dev.nvram_zone == zone then
if not next(plist) then
table.insert(plist,dev.profile_path)
else
local plist_str = table.concat(plist)
if not plist_str:match(dev.profile_path) then
table.insert(plist,dev.profile_path)
end
end
end
end
return next(plist) and plist or nil
end
function l1dat_parser.l1_ifname_to_datpath(ifname)
if not ifname then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
local ridx = l1dat_parser.IF_RINDEX
return devs[ridx][ifname] and devs[ridx][ifname].profile_path
end
function l1dat_parser.l1_ifname_to_zone(ifname)
if not ifname then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
local ridx = l1dat_parser.IF_RINDEX
return devs[ridx][ifname] and devs[ridx][ifname].nvram_zone
end
function l1dat_parser.l1_zone_to_ifname(zone)
if not zone then return end
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
if not devs then return end
local zone_dev
for _, dev in pairs(devs[l1dat_parser.DEV_RINDEX]) do
if dev.nvram_zone == zone then
zone_dev = dev
end
end
if not zone_dev then
return nil
else
return zone_dev.main_ifname, zone_dev.ext_ifname, zone_dev.apcli_ifname, zone_dev.wds_ifname, zone_dev.mesh_ifname
end
end
-- input: L1 profile path.
-- output A table, devs, contains
-- 1. devs[%d] = table of each INDEX# in the L1 profile
-- 2. devs.ifname_ridx[ifname]
-- = table of each ifname and point to relevant contain in dev[$d]
-- 3. devs.devname_ridx[devname] similar to devs.ifnameridx, but use devname.
-- devname = INDEX#_value.mainidx(.subidx)
-- Using *_ridx do not need to handle name=k1;k2 case of DBDC card.
function l1dat_parser.load_l1_profile(path)
local devs = setmetatable({}, {__index=
function(tbl, key)
local util = require("luci.util")
--print("metatable function:", util.serialize_data(tbl), key)
--print("-----------------------------------------------")
if ( string.match(key, "^%d+")) then
tbl[key] = {}
return tbl[key]
end
end
})
local nixio = require("nixio")
local chipset_num = {}
local dir = io.popen("ls /etc/wireless/")
if not dir then return end
local fd = io.open(path, "r")
if not fd then return end
-- convert l1 profile into lua table
for line in fd:lines() do
line = l1dat_parser.__trim(line)
if string.byte(line) ~= string.byte("#") then
local i = string.find(line, "=")
if i then
local k, v, k1, k2
k = l1dat_parser.__trim( string.sub(line, 1, i-1) )
v = l1dat_parser.__trim( string.sub(line, i+1) )
k1, k2 = string.match(k, "INDEX(%d+)_(.+)")
if k1 then
k1 = tonumber(k1) + 1
if devs[k1][k2] then
nixio.syslog("warning", "skip repeated key"..line)
end
devs[k1][k2] = v or ""
else
k1 = string.match(k, "INDEX(%d+)")
k1 = tonumber(k1) + 1
devs[k1]["INDEX"] = v
chipset_num[v] = (not chipset_num[v] and 1) or chipset_num[v] + 1
devs[k1]["mainidx"] = chipset_num[v]
end
--else
-- nixio.syslog("warning", "skip line without '=' "..line)
end
--else
-- nixio.syslog("warning", "skip comment line "..line)
end
end
l1dat_parser.add_default_value(devs)
--local util = require("luci.util")
--local seen2 = {}
-- print("Before setup ridx", util.serialize_data(devs, seen2))
-- Force to setup reverse indice for quick search.
-- Benifit:
-- 1. O(1) search with ifname, devname
-- 2. Seperate DBDC name=k1;k2 format in the L1 profile into each
-- ifname, devname.
local dbdc_if = {}
local ridx = l1dat_parser.IF_RINDEX
local dridx = l1dat_parser.DEV_RINDEX
local band_num = l1dat_parser.MAX_NUM_DBDC_BAND
local k, v, dev, i , j, last
local devname
devs[ridx] = {}
devs[dridx] = {}
for _, dev in ipairs(devs) do
dbdc_if[band_num] = l1dat_parser.token_get(dev.main_ifname, band_num, nil)
if dbdc_if[band_num] then
for i = 1, band_num - 1 do
dbdc_if[i] = l1dat_parser.token_get(dev.main_ifname, i, nil)
end
for i = 1, band_num do
devs[ridx][dbdc_if[i]] = {}
devs[ridx][dbdc_if[i]]["subidx"] = i
for k, v in pairs(dev) do
if k == "INDEX" or k == "EEPROM_offset" or k == "EEPROM_size"
or k == "mainidx" then
devs[ridx][dbdc_if[i]][k] = v
else
devs[ridx][dbdc_if[i]][k] = l1dat_parser.token_get(v, i, "")
end
end
devname = dev.INDEX.."."..dev.mainidx.."."..devs[ridx][dbdc_if[i]]["subidx"]
devs[dridx][devname] = devs[ridx][dbdc_if[i]]
end
local apcli_if, wds_if, ext_if, mesh_if = {}, {}, {}, {}
for i = 1, band_num do
ext_if[i] = l1dat_parser.token_get(dev.ext_ifname, i, nil)
apcli_if[i] = l1dat_parser.token_get(dev.apcli_ifname, i, nil)
wds_if[i] = l1dat_parser.token_get(dev.wds_ifname, i, nil)
mesh_if[i] = l1dat_parser.token_get(dev.mesh_ifname, i, nil)
end
for i = 1, l1dat_parser.MAX_NUM_EXTIF - 1 do -- ifname idx is from 0
for j = 1, band_num do
devs[ridx][ext_if[j]..i] = devs[ridx][dbdc_if[j]]
end
end
for i = 0, l1dat_parser.MAX_NUM_APCLI - 1 do
for j = 1, band_num do
devs[ridx][apcli_if[j]..i] = devs[ridx][dbdc_if[j]]
end
end
for i = 0, l1dat_parser.MAX_NUM_WDS - 1 do
for j = 1, band_num do
devs[ridx][wds_if[j]..i] = devs[ridx][dbdc_if[j]]
end
end
for i = 0, l1dat_parser.MAX_NUM_MESH - 1 do
for j = 1, band_num do
if mesh_if[j] then
devs[ridx][mesh_if[j]..i] = devs[ridx][dbdc_if[j]]
end
end
end
else
devs[ridx][dev.main_ifname] = dev
devname = dev.INDEX.."."..dev.mainidx
devs[dridx][devname] = dev
for i = 1, l1dat_parser.MAX_NUM_EXTIF - 1 do -- ifname idx is from 0
devs[ridx][dev.ext_ifname..i] = dev
end
for i = 0, l1dat_parser.MAX_NUM_APCLI - 1 do -- ifname idx is from 0
devs[ridx][dev.apcli_ifname..i] = dev
end
for i = 0, l1dat_parser.MAX_NUM_WDS - 1 do -- ifname idx is from 0
devs[ridx][dev.wds_ifname..i] = dev
end
for i = 0, l1dat_parser.MAX_NUM_MESH - 1 do -- ifname idx is from 0
devs[ridx][dev.mesh_ifname..i] = dev
end
end
end
fd:close()
return devs
end
function l1dat_parser.creat_link_for_nvram( )
local devs = l1dat_parser.load_l1_profile(l1dat_parser.L1_DAT_PATH)
for devname, dev in pairs(devs.devname_ridx) do
local dev = devs.devname_ridx[devname]
profile = dev.profile_path
os.execute("mkdir -p /tmp/mtk/wifi/")
if dev.nvram_zone == "dev1" then
os.execute("ln -sf " ..profile.." /tmp/mtk/wifi/2860")
elseif dev.nvram_zone == "dev2" then
os.execute("ln -sf " ..profile.." /tmp/mtk/wifi/rtdev")
elseif dev.nvram_zone == "dev3" then
os.execute("ln -sf " ..profile.." /tmp/mtk/wifi/wifi3")
end
end
end
return l1dat_parser

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
#!/usr/bin/env lua
--[[
* A pure lua library to translate between:
* lua table <--> uci config
*
* For UCI: http://wiki.openwrt.org/doc/techref/uci
* http://wiki.openwrt.org/doc/uci
*
* Copyright (C) 2015 Hua Shao <nossiac@163.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
]]
local shuci = {}
function shuci.decode(path)
function file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
local function linebreaker(str)
local i,_ = string.find(str, "([^%s])")
if not i then return nil end
if string.find(str, "config%s+%w+") then
local i,j,k,v = string.find(str, "config%s+([%w-_]+)%s*['\"]*([^%s\'\"]*)")
return "section", k, v
elseif string.find(str, "option%s+%w+") then
local i,j,k,v = string.find(str, "option%s+([%w-_]+)%s*['\"]([^'\"]+)['\"]")
if not k or not v then
i,j,k,v = string.find(str, "option%s+([%w-_]+)%s*['\"]*([^%s\'\"]*)")
end
return "option", k, v
elseif string.find(str, "list%s+%w+") then
local i,j,k,v = string.find(str, "list%s+([%w-_]+)%s*['\"]([^'\"]+)['\"]")
if not k or not v then
i,j,k,v = string.find(str, "list%s+([%w-_]+)%s*['\"]*([^%s\'\"]*)")
end
return "list", k, v
end
end
if not file_exists(path) then
return
end
local _sect_ = nil
local t = {}
for line in io.lines(path) do
local _type, _name, _value = linebreaker(line)
if _type == "section" then
if not t[_name] then
t[_name] = {}
end
t[_name][#t[_name]+1] = {}
_sect_ = t[_name][#t[_name]]
if _value then
_sect_[".name"] = _value
end
end
if _type == "option" then
if _name and _value then
_sect_[_name] = _value
end
end
if _type == "list" and _name and _value then
local idx
if not _sect_[_name] then
_sect_[_name] = {}
_sect_[_name][1] = _value
else
idx = #_sect_[_name]
_sect_[_name][idx+1] = _value
end
end
end
return t
end
function shuci.encode(t, path)
local dump = io.write
if path then
local fp = io.open(path, "w")
dump = function(str) fp:write(str) end
end
for stype,ss in pairs(t) do
if #ss > 0 then
for _,s in ipairs(ss) do
dump(string.format("config\t%s\t'%s'\n", stype, s[".name"] or ""))
for k,v in pairs(s) do
if type(v) == "table" then
for _,vv in ipairs(v) do
dump(string.format("\tlist\t%s\t'%s'\n",k,vv))
end
elseif type(v) == "string" and k ~= ".name" then
dump(string.format("\toption\t%s\t'%s'\n",k,v))
elseif type(v) == "number" and k ~= ".name" then
dump(string.format("\toption\t%s\t'%s'\n",k,tonumber(v)))
end
end
dump("\n")
end
else
dump(string.format("config\t%s\t'%s'\n", stype, ss[".name"] or ""))
for k,v in pairs(ss) do
if type(v) == "table" then
for _,vv in ipairs(v) do
dump(string.format("\tlist\t%s\t'%s'\n",k,vv))
end
elseif type(v) == "string" and k ~= ".name" then
dump(string.format("\toption\t%s\t'%s'\n",k,v))
elseif type(v) == "number" and k ~= ".name" then
dump(string.format("\toption\t%s\t'%s'\n",k,tonumber(v)))
end
end
end
end
end
return shuci

View File

@ -0,0 +1,24 @@
OBJ_IOCTL = ioctl_helper.o rate_calc.o security.o
CFLAGS += -I.
CFLAGS += -I$(ROOTDIR)/user/luci/lua-5.1.5/src
CFLAGS += -Wall -shared -fPIC
LUCI_APP_MTK_TARGET = ioctl_helper
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
all: $(LUCI_APP_MTK_TARGET)
ioctl_helper: $(OBJ_IOCTL)
$(CC) -o $@.so $^ $(CFLAGS)
compile: $(LUCI_APP_MTK_TARGET)
install: compile
mkdir -p $(DESTDIR)/usr/lib/lua
cp -pR ioctl_helper.so $(DESTDIR)/usr/lib/lua/
clean:
rm -f *.o *.so
romfs:

View File

@ -0,0 +1,629 @@
#include <arpa/inet.h>
#include <ctype.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <unistd.h>
#include <linux/wireless.h>
#include "mtwifi.h"
int luaopen_ioctl_helper(lua_State *L)
{
lua_register(L,"c_get_macaddr",get_macaddr);
lua_register(L,"c_convert_string_display",convert_string_display);
lua_register(L,"c_StaInfo",StaInfo);
lua_register(L,"c_getWMode",getWMOde);
lua_register(L,"c_getTempature",getTempature);
lua_register(L,"c_scanResult",scanResult);
lua_register(L,"c_getTxPower",getTxPower);
lua_register(L,"c_getChannel",getChannel);
return 0;
}
int scanResult(lua_State *L)
{
int socket_id;
const char *interface = luaL_checkstring(L, 1);
const char *tmp_idx = luaL_checkstring(L, 2);
struct iwreq wrq;
char *data = NULL;
unsigned int data_len = 5000;
if((data = (char *)malloc(data_len)) == NULL){
fprintf(stderr, "%s: malloc failed\n", __func__);
return -1;
}
memset(data, 0, data_len);
socket_id = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_id < 0) {
perror("socket() failed");
free(data);
return socket_id;
}
snprintf(wrq.ifr_name, sizeof(wrq.ifr_name), "%s", interface);
snprintf(data, data_len, "%s", tmp_idx);
wrq.u.data.length = data_len;
wrq.u.data.pointer = data;
wrq.u.data.flags = 0;
if (ioctl(socket_id, RTPRIV_IOCTL_GSITESURVEY, &wrq) < 0) {
fprintf(stderr, "ioctl -> RTPRIV_IOCTL_GSITESURVEY Fail !");
close(socket_id);
free(data);
return -1;
}
lua_newtable(L);
lua_pushstring(L, "scanresult"); /* push key */
lua_pushstring(L, data); /* push value */
lua_settable(L, -3);
close(socket_id);
free(data);
return 1;
}
static unsigned int get_temp(const char *interface)
{
int socket_id;
struct iwreq wrq;
unsigned int tempature = 0;
socket_id = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_id < 0) {
perror("socket() failed");
return socket_id;
}
snprintf(wrq.ifr_name, sizeof(wrq.ifr_name), "%s", interface);
wrq.u.data.length = sizeof(tempature);
wrq.u.data.pointer = &tempature;
wrq.u.data.flags = OID_GET_CPU_TEMPERATURE;
if( ioctl(socket_id, RT_PRIV_IOCTL, &wrq) == -1)
fprintf(stderr, "%s: ioctl fail\n", __func__);
close(socket_id);
return tempature;
}
int getTempature(lua_State *L)
{
char tempstr[5] = {0};
const char *interface = luaL_checkstring(L, 1);
snprintf(tempstr, sizeof(tempstr), "%d", get_temp(interface));
lua_newtable(L);
lua_pushstring(L, "tempature"); /* push key */
lua_pushstring(L, tempstr); /* push value */
lua_settable(L, -3);
/* Returning one table which is already on top of Lua stack. */
return 1;
}
static unsigned int get_txpower(const char *interface)
{
int socket_id;
struct iwreq wrq;
int txpower = 0;
socket_id = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_id < 0) {
perror("socket() failed");
return socket_id;
}
snprintf(wrq.ifr_name, sizeof(wrq.ifr_name), "%s", interface);
wrq.u.txpower.flags = 0;
if(ioctl(socket_id, SIOCGIWTXPOW, &wrq) >= 0) {
txpower = wrq.u.txpower.value;
} else {
fprintf(stderr, "%s: ioctl fail\n", __func__);
}
close(socket_id);
return txpower;
}
int getTxPower(lua_State *L)
{
char tempstr[5] = {0};
const char *interface = luaL_checkstring(L, 1);
snprintf(tempstr, sizeof(tempstr), "%d", get_txpower(interface));
lua_newtable(L);
lua_pushstring(L, "txpower"); /* push key */
lua_pushstring(L, tempstr); /* push value */
lua_settable(L, -3);
/* Returning one table which is already on top of Lua stack. */
return 1;
}
static unsigned int get_w_mode(const char *interface)
{
int socket_id;
struct iwreq wrq;
unsigned char data = 0;
socket_id = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_id < 0) {
perror("socket() failed");
return socket_id;
}
snprintf(wrq.ifr_name, sizeof(wrq.ifr_name), "%s", interface);
wrq.u.data.length = sizeof(data);
wrq.u.data.pointer = &data;
wrq.u.data.flags = OID_GET_WMODE;
if( ioctl(socket_id, RT_PRIV_IOCTL, &wrq) == -1)
fprintf(stderr, "%s: ioctl fail\n", __func__);
close(socket_id);
return data;
}
int get_macaddr(lua_State *L)
{
const char *ifname = luaL_checkstring(L, 1);
struct ifreq ifr;
char *ptr;
int skfd;
static char if_hw[18] = {0};
if((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
//printf(stderr, "%s: open socket error\n", __func__);
return skfd;
}
snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", ifname);
if(ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
close(skfd);
fprintf(stderr, "%s: ioctl fail\n", __func__);
return -1;
}
ptr = (char *)&ifr.ifr_addr.sa_data;
sprintf(if_hw, "%02X:%02X:%02X:%02X:%02X:%02X",
(ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
(ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377));
close(skfd);
lua_newtable(L);
lua_pushstring(L, "macaddr"); /* push key */
lua_pushstring(L, if_hw); /* push value */
lua_settable(L, -3);
/* Returning one table which is already on top of Lua stack. */
return 1;
}
static int get_channel(const char *interface)
{
int socket_id;
struct iwreq wrq;
int channel = -1;
socket_id = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_id < 0) {
perror("socket() failed");
return socket_id;
}
snprintf(wrq.ifr_name, sizeof(wrq.ifr_name), "%s", interface);
if(ioctl(socket_id, SIOCGIWFREQ, &wrq) >= 0) {
channel = wrq.u.freq.m;
} else {
fprintf(stderr, "%s: ioctl fail\n", __func__);
}
close(socket_id);
return channel;
}
int getChannel(lua_State *L)
{
char tempstr[5] = {0};
const char *interface = luaL_checkstring(L, 1);
snprintf(tempstr, sizeof(tempstr), "%d", get_channel(interface));
lua_newtable(L);
lua_pushstring(L, "channel"); /* push key */
lua_pushstring(L, tempstr); /* push value */
lua_settable(L, -3);
/* Returning one table which is already on top of Lua stack. */
return 1;
}
int getWMOde(lua_State *L)
{
char w_mode[5];
const char *interface = luaL_checkstring(L, 1);
snprintf(w_mode, sizeof(w_mode), "%d", get_w_mode(interface));
lua_newtable(L);
lua_pushstring(L, "getwmode"); /* push key */
lua_pushstring(L, w_mode); /* push value */
lua_settable(L, -3);
/* Returning one table which is already on top of Lua stack. */
return 1;
}
int convert_string_display(lua_State *L)
{
#define BUF_SIZE 256
int len, i;
char buffer[BUF_SIZE]; // 33(characters in SSID) * 6(maximum length of a HTML entity) = 198 + 1(null character) = 199
char *pOut,*pBufLimit;
const char *str = luaL_checkstring(L, 1);
memset(buffer,0,BUF_SIZE);
len = strlen(str);
pOut = &buffer[0];
pBufLimit = &buffer[BUF_SIZE - 1];
for (i = 0; i < len && (pBufLimit - pOut) >=7; i++) { // 6(maximum length of a HTML entity) + 1(null character) = 7
switch (str[i]) {
case 38:
sprintf(pOut, "&amp;"); // '&'
pOut += 5;
break;
case 60:
sprintf(pOut, "&lt;"); // '<'
pOut += 4;
break;
case 62:
sprintf(pOut, "&gt;"); // '>'
pOut += 4;
break;
case 34:
sprintf(pOut, "&#34;"); // '"'
pOut += 5;
break;
case 39:
sprintf(pOut, "&#39;"); // '''
pOut += 5;
break;
case 32:
sprintf(pOut, "&nbsp;"); // ' '
pOut += 6;
break;
default:
if ((str[i]>=0) && (str[i]<=31)) {
//Device Control Characters
sprintf(pOut, "&#%02d;", str[i]);
pOut += 5;
} else if ((str[i]==39) || (str[i]==47) || (str[i]==59) || (str[i]==92)) {
// ' / ; (backslash)
sprintf(pOut, "&#%02d;", str[i]);
pOut += 5;
} else if (str[i]>=127) {
//Device Control Characters
sprintf(pOut, "&#%03d;", str[i]);
pOut += 6;
} else {
*pOut = str[i];
pOut++;
}
break;
}
}
*pOut = '\0';
lua_newtable(L);
lua_pushstring(L, "output"); /* push key */
lua_pushstring(L, buffer); /* push value */
lua_settable(L, -3);
return 1;
}
int StaInfo(lua_State *L)
{
int i, s;
struct iwreq iwr;
RT_802_11_MAC_TABLE_FIX *table;
char tmpBuff[128] = {0};
char *phyMode[12] = {"CCK", "OFDM", "MM", "GF", "VHT", "HE",
"HE5G", "HE2G", "HE_SU", "HE_EXT_SU", "HE_TRIG", "HE_MU"};
const char *interface = luaL_checkstring(L, 1);
table = (RT_802_11_MAC_TABLE_FIX *)malloc(sizeof(RT_802_11_MAC_TABLE_FIX));
if (!table)
return -ENOMEM;
memset(table, 0, sizeof(RT_802_11_MAC_TABLE_FIX));
s = socket(AF_INET, SOCK_DGRAM, 0);
snprintf(iwr.ifr_name, IFNAMSIZ, "%s", interface);
iwr.u.data.pointer = table;
if (s < 0) {
free(table);
return 0;
}
if (ioctl(s, RTPRIV_IOCTL_GET_MAC_TABLE_STRUCT, &iwr) < 0) {
free(table);
close(s);
return 0;
}
close(s);
/* Creates parent table of size table.Num array elements: */
lua_createtable(L, table->Num, 0);
for (i = 0; i < table->Num; i++) {
lua_pushnumber(L, i);
RT_802_11_MAC_ENTRY_FIX *pe = &(table->Entry[i]);
HTTRANSMIT_SETTING_FIX RxRate;
HTTRANSMIT_SETTING_FIX TxRate;
RxRate.word = pe->LastRxRate.word;
TxRate.word = pe->TxRate.word;
unsigned int mcs = TxRate.field.MCS;
unsigned int nss = 0;
unsigned long DataRate = 0;
unsigned int mcs_r = RxRate.field.MCS;
unsigned int nss_r = 0;
unsigned long DataRate_r = 0;
int hr, min, sec;
hr = pe->ConnectedTime/3600;
min = (pe->ConnectedTime % 3600)/60;
sec = pe->ConnectedTime - hr*3600 - min*60;
/* Creates first child table of size 34 non-array elements: */
lua_createtable(L, 0, 34);
// MAC Address
snprintf(tmpBuff, sizeof(tmpBuff), "%02X:%02X:%02X:%02X:%02X:%02X", pe->Addr[0], pe->Addr[1], pe->Addr[2], pe->Addr[3],
pe->Addr[4], pe->Addr[5]);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "MacAddr");
// AID, Power Save mode, MIMO Power Save
snprintf(tmpBuff, sizeof(tmpBuff), "%d", pe->Aid);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Aid");
snprintf(tmpBuff, sizeof(tmpBuff), "%d", pe->Psm);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Psm");
snprintf(tmpBuff, sizeof(tmpBuff), "%d", pe->MimoPs);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "MimoPs");
// TX Rate NSS-MCS
if (TxRate.field.MODE >= MODE_VHT) {
nss = ((mcs & (0x3 << 4)) >> 4) + 1;
mcs = mcs & 0xF;
snprintf(tmpBuff, sizeof(tmpBuff), "%dSS-MCS%d", nss, mcs);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Mcs");
} else {
mcs = mcs & 0x3f;
snprintf(tmpBuff, sizeof(tmpBuff), "MCS%d", mcs);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Mcs");
}
// TX BW
if (TxRate.field.BW == BW_20) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 20);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Bw");
} else if (TxRate.field.BW == BW_40) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 40);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Bw");
} else if (TxRate.field.BW == BW_80) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 80);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Bw");
} else if (TxRate.field.BW == BW_160) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 160);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Bw");
}
//TX SGI
if (TxRate.field.MODE < MODE_HTMIX) {
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "LGI");
} else if (TxRate.field.MODE >= MODE_HE) {
if (TxRate.field.ShortGI == 0)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "SGI");
else if (TxRate.field.ShortGI == 1)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "MGI");
else if (TxRate.field.ShortGI == 2)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "LGI");
} else {
snprintf(tmpBuff, sizeof(tmpBuff), "%s", TxRate.field.ShortGI ? "SGI" : "LGI");
}
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Gi");
//TX phy mode
snprintf(tmpBuff, sizeof(tmpBuff), "%s", phyMode[TxRate.field.MODE]);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "PhyMode");
//TX STBC
snprintf(tmpBuff, sizeof(tmpBuff), "%s", TxRate.field.STBC? "STBC": " ");
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Stbc");
// TxBF configuration
snprintf(tmpBuff, sizeof(tmpBuff), "%c", TxRate.field.iTxBF ? 'I': '-');
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "iTxBF");
snprintf(tmpBuff, sizeof(tmpBuff), "%c", TxRate.field.eTxBF ? 'E': '-');
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "eTxBF");
// RSSI
snprintf(tmpBuff, sizeof(tmpBuff), "%d", (int)(pe->AvgRssi0));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "AvgRssi0");
snprintf(tmpBuff, sizeof(tmpBuff), "%d", (int)(pe->AvgRssi1));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "AvgRssi1");
snprintf(tmpBuff, sizeof(tmpBuff), "%d", (int)(pe->AvgRssi2));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "AvgRssi2");
snprintf(tmpBuff, sizeof(tmpBuff), "%d", (int)(pe->AvgRssi3));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "AvgRssi3");
// Per Stream SNR
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->StreamSnr[0]*0.25);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "StreamSnr0");
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->StreamSnr[1]*0.25); //mcs>7? pe->StreamSnr[1]*0.25: 0.0);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "StreamSnr1");
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->StreamSnr[2]*0.25); //mcs>15? pe->StreamSnr[2]*0.25: 0.0);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "StreamSnr2");
// Sounding Response SNR
if (TxRate.field.eTxBF) {
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->SoundingRespSnr[0]*0.25);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "SoundingRespSnr0");
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->SoundingRespSnr[1]*0.25);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "SoundingRespSnr1");
snprintf(tmpBuff, sizeof(tmpBuff), "%0.1f", pe->SoundingRespSnr[2]*0.25);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "SoundingRespSnr2");
}
// Last RX NSS-MCS
if (RxRate.field.MODE >= MODE_VHT) {
nss_r = (((mcs_r & (0x3 << 4)) >> 4) + 1) / (RxRate.field.STBC + 1);
mcs_r = mcs_r & 0xF;
snprintf(tmpBuff, sizeof(tmpBuff), "%dSS-MCS%d", nss_r, mcs_r);
} else if (RxRate.field.MODE >= MODE_HTMIX) {
mcs_r = mcs_r & 0x3f;
snprintf(tmpBuff, sizeof(tmpBuff), "MCS%d", mcs_r);
} else if (RxRate.field.MODE == MODE_OFDM) {
mcs_r = mcs_r & 0xf;
snprintf(tmpBuff, sizeof(tmpBuff), "MCS%d", mcs_r);
RxRate.field.MCS = mcs_r;
} else if (RxRate.field.MODE == MODE_CCK) {
mcs_r = cck_to_mcs(mcs_r & 0x7);
snprintf(tmpBuff, sizeof(tmpBuff), "MCS%d", mcs_r);
RxRate.field.MCS = mcs_r;
}
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastMcs");
if (RxRate.field.BW == BW_20) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 20);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastBw");
} else if (RxRate.field.BW == BW_40) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 40);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastBw");
} else if (RxRate.field.BW == BW_80) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 80);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastBw");
} else if (RxRate.field.BW == BW_160) {
snprintf(tmpBuff, sizeof(tmpBuff), "%d", 160);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastBw");
}
if (RxRate.field.MODE < MODE_HTMIX) {
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "LGI");
} else if (RxRate.field.MODE >= MODE_HE) {
if (RxRate.field.ShortGI == 0)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "SGI");
else if (RxRate.field.ShortGI == 1)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "MGI");
else if (RxRate.field.ShortGI == 2)
snprintf(tmpBuff, sizeof(tmpBuff), "%s", "LGI");
} else {
snprintf(tmpBuff, sizeof(tmpBuff), "%s", RxRate.field.ShortGI ? "SGI" : "LGI");
}
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastGi");
snprintf(tmpBuff, sizeof(tmpBuff), "%s", phyMode[RxRate.field.MODE]);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastPhyMode");
snprintf(tmpBuff, sizeof(tmpBuff), "%s", RxRate.field.STBC ? "STBC": " ");
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "LastStbc");
// Connect time
snprintf(tmpBuff, sizeof(tmpBuff), "%02d", hr);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Hr");
snprintf(tmpBuff, sizeof(tmpBuff), "%02d", min);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Min");
snprintf(tmpBuff, sizeof(tmpBuff), "%02d", sec);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "Sec");
if (TxRate.field.MODE >= MODE_HE) {
get_rate_he((mcs & 0xf), TxRate.field.BW, nss, 0, &DataRate);
if (TxRate.field.ShortGI == 1)
DataRate = (DataRate * 967) >> 10;
else if (TxRate.field.ShortGI == 2)
DataRate = (DataRate * 870) >> 10;
} else {
getRate(TxRate, &DataRate);
}
snprintf(tmpBuff, sizeof(tmpBuff), "%ld", DataRate);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "TxRate");
if (RxRate.field.MODE >= MODE_HE) {
get_rate_he((mcs_r & 0xf), RxRate.field.BW, nss_r, 0, &DataRate_r);
if (RxRate.field.ShortGI == 1)
DataRate_r = (DataRate_r * 967) >> 10;
else if (RxRate.field.ShortGI == 2)
DataRate_r = (DataRate_r * 870) >> 10;
} else {
getRate(RxRate, &DataRate_r);
}
snprintf(tmpBuff, sizeof(tmpBuff), "%ld", DataRate_r);
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "RxRate");
snprintf(tmpBuff, sizeof(tmpBuff), "%s", GetEncryModeStr(pe->EncryMode));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "EncryptMode");
snprintf(tmpBuff, sizeof(tmpBuff), "%s", GetAuthModeStr(pe->AuthMode));
lua_pushstring(L, tmpBuff);
lua_setfield(L, -2, "AuthMode");
lua_settable(L, -3);
}
free(table);
return 1;
}

View File

@ -0,0 +1,221 @@
#ifndef __MTWIFI_H
#define __MTWIFI_H
#define USHORT unsigned short
#define UCHAR unsigned char
#define ULONG unsigned long
#define UINT8 unsigned char
#define UINT16 unsigned short
#define UINT32 unsigned int
#define INT32 int
#define INT int
#include <lua.h> /* Always include this */
#include <lauxlib.h> /* Always include this */
#include <lualib.h> /* Always include this */
typedef union _HTTRANSMIT_SETTING_FIX {
struct {
USHORT MCS:6;
USHORT ldpc:1;
USHORT BW:2;
USHORT ShortGI:2;
USHORT STBC:1;
USHORT eTxBF:1;
USHORT iTxBF:1;
USHORT MODE:4;
} field;
UINT32 word;
} HTTRANSMIT_SETTING_FIX, *PHTTRANSMIT_SETTING_FIX;
typedef struct _RT_802_11_MAC_ENTRY_FIX {
unsigned char ApIdx;
unsigned char Addr[6];
unsigned short Aid;
unsigned char Psm; // 0:PWR_ACTIVE, 1:PWR_SAVE
unsigned char MimoPs; // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled
signed char AvgRssi0;
signed char AvgRssi1;
signed char AvgRssi2;
signed char AvgRssi3;
unsigned int ConnectedTime;
HTTRANSMIT_SETTING_FIX TxRate;
HTTRANSMIT_SETTING_FIX LastRxRate;
short StreamSnr[3];
short SoundingRespSnr[3];
UINT32 EncryMode;
UINT32 AuthMode;
} RT_802_11_MAC_ENTRY_FIX;
#define MAX_NUMBER_OF_MAC 544
typedef struct _RT_802_11_MAC_TABLE {
unsigned long Num;
RT_802_11_MAC_ENTRY_FIX Entry[MAX_NUMBER_OF_MAC];
} RT_802_11_MAC_TABLE_FIX;
#define IF_NAMESIZE 16
#define SIOCIWFIRSTPRIV 0x8BE0
#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x0E)
#define RTPRIV_IOCTL_GET_MAC_TABLE_STRUCT (SIOCIWFIRSTPRIV + 0x1F)
#define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D)
#define OID_GET_WMODE 0x099E
#define OID_GET_CPU_TEMPERATURE 0x09A1
#define MODE_CCK 0
#define MODE_OFDM 1
#define MODE_HTMIX 2
#define MODE_HTGREENFIELD 3
#define MODE_VHT 4
#define MODE_HE 5
#define MODE_HE_5G 6
#define MODE_HE_24G 7
#define MODE_HE_SU 8
#define MODE_HE_EXT_SU 9
#define MODE_HE_TRIG 10
#define MODE_HE_MU 11
#define TMI_TX_RATE_OFDM_6M 11
#define TMI_TX_RATE_OFDM_9M 15
#define TMI_TX_RATE_OFDM_12M 10
#define TMI_TX_RATE_OFDM_18M 14
#define TMI_TX_RATE_OFDM_24M 9
#define TMI_TX_RATE_OFDM_36M 13
#define TMI_TX_RATE_OFDM_48M 8
#define TMI_TX_RATE_OFDM_54M 12
#define TMI_TX_RATE_CCK_1M_LP 0
#define TMI_TX_RATE_CCK_2M_LP 1
#define TMI_TX_RATE_CCK_5M_LP 2
#define TMI_TX_RATE_CCK_11M_LP 3
#define TMI_TX_RATE_CCK_2M_SP 5
#define TMI_TX_RATE_CCK_5M_SP 6
#define TMI_TX_RATE_CCK_11M_SP 7
enum oid_bw {
BAND_WIDTH_20,
BAND_WIDTH_40,
BAND_WIDTH_80,
BAND_WIDTH_160,
BAND_WIDTH_10,
BAND_WIDTH_5,
BAND_WIDTH_8080,
BAND_WIDTH_BOTH,
BAND_WIDTH_25,
BAND_WIDTH_20_242TONE,
BAND_WIDTH_NUM
};
#define BW_20 BAND_WIDTH_20
#define BW_40 BAND_WIDTH_40
#define BW_80 BAND_WIDTH_80
#define BW_160 BAND_WIDTH_160
#define BW_10 BAND_WIDTH_10
#define BW_5 BAND_WIDTH_5
#define BW_8080 BAND_WIDTH_8080
#define BW_25 BAND_WIDTH_25
#define BW_20_242TONE BAND_WIDTH_20_242TONE
#define BW_NUM BAND_WIDTH_NUM
typedef enum _SEC_CIPHER_MODE {
SEC_CIPHER_NONE,
SEC_CIPHER_WEP40,
SEC_CIPHER_WEP104,
SEC_CIPHER_WEP128,
SEC_CIPHER_TKIP,
SEC_CIPHER_CCMP128,
SEC_CIPHER_CCMP256,
SEC_CIPHER_GCMP128,
SEC_CIPHER_GCMP256,
SEC_CIPHER_BIP_CMAC128,
SEC_CIPHER_BIP_CMAC256,
SEC_CIPHER_BIP_GMAC128,
SEC_CIPHER_BIP_GMAC256,
SEC_CIPHER_WPI_SMS4, /* WPI SMS4 support */
SEC_CIPHER_MAX /* Not a real mode, defined as upper bound */
} SEC_CIPHER_MODE;
#define IS_CIPHER_NONE(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_NONE)) > 0)
#define IS_CIPHER_WEP40(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_WEP40)) > 0)
#define IS_CIPHER_WEP104(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_WEP104)) > 0)
#define IS_CIPHER_WEP128(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_WEP128)) > 0)
#define IS_CIPHER_WEP(_Cipher) (((_Cipher) & ((1 << SEC_CIPHER_WEP40) | (1 << SEC_CIPHER_WEP104) | (1 << SEC_CIPHER_WEP128))) > 0)
#define IS_CIPHER_TKIP(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_TKIP)) > 0)
#define IS_CIPHER_WEP_TKIP_ONLY(_Cipher) ((IS_CIPHER_WEP(_Cipher) || IS_CIPHER_TKIP(_Cipher)) && (_Cipher < (1 << SEC_CIPHER_CCMP128)))
#define IS_CIPHER_CCMP128(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_CCMP128)) > 0)
#define IS_CIPHER_CCMP256(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_CCMP256)) > 0)
#define IS_CIPHER_GCMP128(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_GCMP128)) > 0)
#define IS_CIPHER_GCMP256(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_GCMP256)) > 0)
#define IS_CIPHER_BIP_CMAC128(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_BIP_CMAC128)) > 0)
#define IS_CIPHER_BIP_CMAC256(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_BIP_CMAC256)) > 0)
#define IS_CIPHER_BIP_GMAC128(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_BIP_GMAC128)) > 0)
#define IS_CIPHER_BIP_GMAC256(_Cipher) (((_Cipher) & (1 << SEC_CIPHER_BIP_GMAC256)) > 0)
/* 802.11 authentication and key management */
typedef enum _SEC_AKM_MODE {
SEC_AKM_OPEN,
SEC_AKM_SHARED,
SEC_AKM_AUTOSWITCH,
SEC_AKM_WPA1, /* Enterprise security over 802.1x */
SEC_AKM_WPA1PSK,
SEC_AKM_WPANone, /* For Win IBSS, directly PTK, no handshark */
SEC_AKM_WPA2, /* Enterprise security over 802.1x */
SEC_AKM_WPA2PSK,
SEC_AKM_FT_WPA2,
SEC_AKM_FT_WPA2PSK,
SEC_AKM_WPA2_SHA256,
SEC_AKM_WPA2PSK_SHA256,
SEC_AKM_TDLS,
SEC_AKM_SAE_SHA256,
SEC_AKM_FT_SAE_SHA256,
SEC_AKM_SUITEB_SHA256,
SEC_AKM_SUITEB_SHA384,
SEC_AKM_FT_WPA2_SHA384,
SEC_AKM_WAICERT, /* WAI certificate authentication */
SEC_AKM_WAIPSK, /* WAI pre-shared key */
SEC_AKM_OWE,
SEC_AKM_FILS_SHA256,
SEC_AKM_FILS_SHA384,
SEC_AKM_WPA3, /* WPA3(ent) = WPA2(ent) + PMF MFPR=1 => WPA3 code flow is same as WPA2, the usage of SEC_AKM_WPA3 is to force pmf on */
SEC_AKM_MAX /* Not a real mode, defined as upper bound */
} SEC_AKM_MODE;
#define IS_AKM_OPEN(_AKMMap) ((_AKMMap & (1 << SEC_AKM_OPEN)) > 0)
#define IS_AKM_SHARED(_AKMMap) ((_AKMMap & (1 << SEC_AKM_SHARED)) > 0)
#define IS_AKM_AUTOSWITCH(_AKMMap) ((_AKMMap & (1 << SEC_AKM_AUTOSWITCH)) > 0)
#define IS_AKM_WPA1(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA1)) > 0)
#define IS_AKM_WPA1PSK(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA1PSK)) > 0)
#define IS_AKM_WPANONE(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPANone)) > 0)
#define IS_AKM_WPA2(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA2)) > 0)
#define IS_AKM_WPA2PSK(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA2PSK)) > 0)
#define IS_AKM_FT_WPA2(_AKMMap) ((_AKMMap & (1 << SEC_AKM_FT_WPA2)) > 0)
#define IS_AKM_FT_WPA2PSK(_AKMMap) ((_AKMMap & (1 << SEC_AKM_FT_WPA2PSK)) > 0)
#define IS_AKM_WPA2_SHA256(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA2_SHA256)) > 0)
#define IS_AKM_WPA2PSK_SHA256(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA2PSK_SHA256)) > 0)
#define IS_AKM_TDLS(_AKMMap) ((_AKMMap & (1 << SEC_AKM_TDLS)) > 0)
#define IS_AKM_SAE_SHA256(_AKMMap) ((_AKMMap & (1 << SEC_AKM_SAE_SHA256)) > 0)
#define IS_AKM_FT_SAE_SHA256(_AKMMap) ((_AKMMap & (1 << SEC_AKM_FT_SAE_SHA256)) > 0)
#define IS_AKM_SUITEB_SHA256(_AKMMap) ((_AKMMap & (1 << SEC_AKM_SUITEB_SHA256)) > 0)
#define IS_AKM_SUITEB_SHA384(_AKMMap) ((_AKMMap & (1 << SEC_AKM_SUITEB_SHA384)) > 0)
#define IS_AKM_FT_WPA2_SHA384(_AKMMap) ((_AKMMap & (1 << SEC_AKM_FT_WPA2_SHA384)) > 0)
#define IS_AKM_WPA3(_AKMMap) ((_AKMMap & (1 << SEC_AKM_WPA3)) > 0)
#define IS_AKM_WPA3PSK(_AKMMap) (IS_AKM_SAE_SHA256(_AKMMap))
#define IS_AKM_WPA3_192BIT(_AKMMap) (IS_AKM_SUITEB_SHA384(_AKMMap))
#define IS_AKM_OWE(_AKMMap) ((_AKMMap & (1 << SEC_AKM_OWE)) > 0)
int get_macaddr(lua_State *L);
int convert_string_display(lua_State *L);
int StaInfo(lua_State *L);
int getWMOde(lua_State *L);
int getTxPower(lua_State *L);
int getTempature(lua_State *L);
int getChannel(lua_State *L);
int scanResult(lua_State *L);
void getRate(HTTRANSMIT_SETTING_FIX HTSetting, ULONG *fLastTxRxRate);
void get_rate_he(UINT8 mcs, UINT8 bw, UINT8 nss, UINT8 dcm, ULONG *last_tx_rate);
UINT32 cck_to_mcs(UINT32 mcs);
const char *GetEncryModeStr(UINT32 encryMode);
const char *GetAuthModeStr(UINT32 authMode);
#endif

View File

@ -0,0 +1,479 @@
#include "mtwifi.h"
#define MAX_NUM_HE_BANDWIDTHS 4
#define MAX_NUM_HE_SPATIAL_STREAMS 4
#define MAX_NUM_HE_MCS_ENTRIES 12
UINT32 cck_to_mcs(UINT32 mcs) {
UINT32 ret = 0;
if (mcs == TMI_TX_RATE_CCK_1M_LP)
ret = 0;
else if (mcs == TMI_TX_RATE_CCK_2M_LP)
ret = 1;
else if (mcs == TMI_TX_RATE_CCK_5M_LP)
ret = 2;
else if (mcs == TMI_TX_RATE_CCK_11M_LP)
ret = 3;
else if (mcs == TMI_TX_RATE_CCK_2M_SP)
ret = 1;
else if (mcs == TMI_TX_RATE_CCK_5M_SP)
ret = 2;
else if (mcs == TMI_TX_RATE_CCK_11M_SP)
ret = 3;
return ret;
}
static UINT16 he_mcs_phyrate_mapping_table[MAX_NUM_HE_BANDWIDTHS][MAX_NUM_HE_SPATIAL_STREAMS][MAX_NUM_HE_MCS_ENTRIES] = {
{ /*20 Mhz*/
/* 1 SS */
{
/* DCM 0*/
8,
17,
25,
34,
51,
68,
77,
86,
103,
114,
129,
143
},
/* 2 SS */
{
/* DCM 0 */
17,
34,
51,
68,
103,
137,
154,
172,
206,
229,
258,
286
},
/* 3 SS */
{
/* DCM 0 */
25,
51,
77,
103,
154,
206,
232,
258,
309,
344,
387,
430
},
/* 4 SS */
{
/* DCM 0 */
34,
68,
103,
137,
206,
275,
309,
344,
412,
458,
516,
573
}
},
{ /*40 Mhz*/
/* 1 SS */
{
/* DCM 0*/
17,
34,
51,
68,
103,
137,
154,
172,
206,
229,
258,
286
},
/* 2 SS */
{
/* DCM 0 */
34,
68,
103,
137,
206,
275,
309,
344,
412,
458,
516,
573
},
/* 3 SS */
{
/* DCM 0 */
51,
103,
154,
206,
309,
412,
464,
516,
619,
688,
774,
860
},
/* 4 SS */
{
/* DCM 0 */
68,
137,
206,
275,
412,
550,
619,
688,
825,
917,
1032,
1147
}
},
{ /*80 Mhz*/
/* 1 SS */
{
/* DCM 0*/
36,
72,
108,
144,
216,
288,
324,
360,
432,
480,
540,
600
},
/* 2 SS */
{
/* DCM 0 */
72,
144,
216,
288,
432,
576,
648,
720,
864,
960,
1080,
1201
},
/* 3 SS */
{
/* DCM 0 */
108,
216,
324,
432,
648,
864,
972,
1080,
1297,
1441,
1621,
1801
},
/* 4 SS */
{
/* DCM 0 */
144,
288,
432,
576,
864,
1152,
1297,
1141,
1729,
1921,
2161,
2401
}
},
{ /*160 Mhz*/
/* 1 SS */
{
/* DCM 0*/
72,
144,
216,
288,
432,
576,
648,
720,
864,
960,
1080,
1201
},
/* 2 SS */
{
/* DCM 0 */
144,
288,
432,
576,
864,
1152,
1297,
1441,
1729,
1921,
2161,
2401
},
/* 3 SS */
{
/* DCM 0 */
216,
432,
648,
864,
1297,
1729,
1945,
2161,
2594,
2882,
3242,
3602
},
/* 4 SS */
{
/* DCM 0 */
288,
576,
864,
1152,
1729,
2305,
2594,
2882,
3458,
3843,
4323,
4803
},
}
};
void get_rate_he(UINT8 mcs, UINT8 bw, UINT8 nss, UINT8 dcm, ULONG *last_tx_rate)
{
ULONG value = 0;
if (nss == 0)
nss = 1;
if (mcs >= MAX_NUM_HE_MCS_ENTRIES)
mcs = MAX_NUM_HE_MCS_ENTRIES - 1;
if (nss > MAX_NUM_HE_SPATIAL_STREAMS)
nss = MAX_NUM_HE_SPATIAL_STREAMS;
if (bw >= MAX_NUM_HE_BANDWIDTHS)
bw = MAX_NUM_HE_BANDWIDTHS - 1;
nss--;
value = he_mcs_phyrate_mapping_table[bw][nss][mcs];
/*In spec data rate when DCM =1 is half of the data rate when DCM = 0*/
if (dcm && value)
value = value / 2 ;
*last_tx_rate = (ULONG)value;
return;
}
static INT32 getLegacyOFDMMCSIndex(UINT8 MCS)
{
INT32 mcs_index = MCS;
if (MCS == 0xb)
mcs_index = 0;
else if (MCS == 0xf)
mcs_index = 1;
else if (MCS == 0xa)
mcs_index = 2;
else if (MCS == 0xe)
mcs_index = 3;
else if (MCS == 0x9)
mcs_index = 4;
else if (MCS == 0xd)
mcs_index = 5;
else if (MCS == 0x8)
mcs_index = 6;
else if (MCS == 0xc)
mcs_index = 7;
return mcs_index;
}
static INT MCSMappingRateTable[] = {
2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 109, 110, 111, 112,/* CCK and OFDM */
13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260,
39, 78, 117, 156, 234, 312, 351, 390, /* BW 20, 800ns GI, MCS 0~23 */
27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540,
81, 162, 243, 324, 486, 648, 729, 810, /* BW 40, 800ns GI, MCS 0~23 */
14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288,
43, 87, 130, 173, 260, 317, 390, 433, /* BW 20, 400ns GI, MCS 0~23 */
30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600,
90, 180, 270, 360, 540, 720, 810, 900, /* BW 40, 400ns GI, MCS 0~23 */
/*for 11ac:20 Mhz 800ns GI*/
6, 13, 19, 26, 39, 52, 58, 65, 78, 90, /*1ss mcs 0~8*/
13, 26, 39, 52, 78, 104, 117, 130, 156, 180, /*2ss mcs 0~8*/
19, 39, 58, 78, 117, 156, 175, 195, 234, 260, /*3ss mcs 0~9*/
26, 52, 78, 104, 156, 208, 234, 260, 312, 360, /*4ss mcs 0~8*/
/*for 11ac:40 Mhz 800ns GI*/
13, 27, 40, 54, 81, 108, 121, 135, 162, 180, /*1ss mcs 0~9*/
27, 54, 81, 108, 162, 216, 243, 270, 324, 360, /*2ss mcs 0~9*/
40, 81, 121, 162, 243, 324, 364, 405, 486, 540, /*3ss mcs 0~9*/
54, 108, 162, 216, 324, 432, 486, 540, 648, 720, /*4ss mcs 0~9*/
/*for 11ac:80 Mhz 800ns GI*/
29, 58, 87, 117, 175, 234, 263, 292, 351, 390, /*1ss mcs 0~9*/
58, 117, 175, 243, 351, 468, 526, 585, 702, 780, /*2ss mcs 0~9*/
87, 175, 263, 351, 526, 702, 0, 877, 1053, 1170, /*3ss mcs 0~9*/
117, 234, 351, 468, 702, 936, 1053, 1170, 1404, 1560, /*4ss mcs 0~9*/
/*for 11ac:160 Mhz 800ns GI*/
58, 117, 175, 234, 351, 468, 526, 585, 702, 780, /*1ss mcs 0~9*/
117, 234, 351, 468, 702, 936, 1053, 1170, 1404, 1560, /*2ss mcs 0~9*/
175, 351, 526, 702, 1053, 1404, 1579, 1755, 2160, 0, /*3ss mcs 0~8*/
234, 468, 702, 936, 1404, 1872, 2106, 2340, 2808, 3120, /*4ss mcs 0~9*/
/*for 11ac:20 Mhz 400ns GI*/
7, 14, 21, 28, 43, 57, 65, 72, 86, 100, /*1ss mcs 0~8*/
14, 28, 43, 57, 86, 115, 130, 144, 173, 200, /*2ss mcs 0~8*/
21, 43, 65, 86, 130, 173, 195, 216, 260, 288, /*3ss mcs 0~9*/
28, 57, 86, 115, 173, 231, 260, 288, 346, 400, /*4ss mcs 0~8*/
/*for 11ac:40 Mhz 400ns GI*/
15, 30, 45, 60, 90, 120, 135, 150, 180, 200, /*1ss mcs 0~9*/
30, 60, 90, 120, 180, 240, 270, 300, 360, 400, /*2ss mcs 0~9*/
45, 90, 135, 180, 270, 360, 405, 450, 540, 600, /*3ss mcs 0~9*/
60, 120, 180, 240, 360, 480, 540, 600, 720, 800, /*4ss mcs 0~9*/
/*for 11ac:80 Mhz 400ns GI*/
32, 65, 97, 130, 195, 260, 292, 325, 390, 433, /*1ss mcs 0~9*/
65, 130, 195, 260, 390, 520, 585, 650, 780, 866, /*2ss mcs 0~9*/
97, 195, 292, 390, 585, 780, 0, 975, 1170, 1300, /*3ss mcs 0~9*/
130, 260, 390, 520, 780, 1040, 1170, 1300, 1560, 1733, /*4ss mcs 0~9*/
/*for 11ac:160 Mhz 400ns GI*/
65, 130, 195, 260, 390, 520, 585, 650, 780, 866, /*1ss mcs 0~9*/
130, 260, 390, 520, 780, 1040, 1170, 1300, 1560, 1733, /*2ss mcs 0~9*/
195, 390, 585, 780, 1170, 1560, 1755, 1950, 2340, 0, /*3ss mcs 0~8*/
260, 520, 780, 1040, 1560, 2080, 2340, 2600, 3120, 3466, /*4ss mcs 0~9*/
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37
}; /* 3*3 */
void getRate(HTTRANSMIT_SETTING_FIX HTSetting, ULONG *fLastTxRxRate)
{
UINT8 Antenna = 0;
UINT8 MCS = HTSetting.field.MCS;
int rate_count = sizeof(MCSMappingRateTable) / sizeof(int);
int rate_index = 0;
int value = 0;
if (HTSetting.field.MODE >= MODE_VHT) {
MCS = HTSetting.field.MCS & 0xf;
Antenna = (HTSetting.field.MCS >> 4) + 1;
if (HTSetting.field.BW == BW_20) {
rate_index = 112 + ((Antenna - 1) * 10) +
((UCHAR)HTSetting.field.ShortGI * 160) +
((UCHAR)MCS);
} else if (HTSetting.field.BW == BW_40) {
rate_index = 152 + ((Antenna - 1) * 10) +
((UCHAR)HTSetting.field.ShortGI * 160) +
((UCHAR)MCS);
} else if (HTSetting.field.BW == BW_80) {
rate_index = 192 + ((Antenna - 1) * 10) +
((UCHAR)HTSetting.field.ShortGI * 160) +
((UCHAR)MCS);
} else if (HTSetting.field.BW == BW_160) {
rate_index = 232 + ((Antenna - 1) * 10) +
((UCHAR)HTSetting.field.ShortGI * 160) +
((UCHAR)MCS);
}
} else {
if (HTSetting.field.MODE >= MODE_HTMIX) {
MCS = HTSetting.field.MCS;
if ((HTSetting.field.MODE == MODE_HTMIX)
|| (HTSetting.field.MODE == MODE_HTGREENFIELD))
Antenna = (MCS >> 3) + 1;
/* map back to 1SS MCS , multiply by antenna numbers later */
if (MCS > 7)
MCS %= 8;
rate_index = 16 + ((UCHAR)HTSetting.field.BW * 24) + ((UCHAR)HTSetting.field.ShortGI * 48) + ((UCHAR)MCS);
} else {
if (HTSetting.field.MODE == MODE_OFDM)
rate_index = getLegacyOFDMMCSIndex(HTSetting.field.MCS) + 4;
else if (HTSetting.field.MODE == MODE_CCK)
rate_index = (UCHAR)(HTSetting.field.MCS);
}
}
if (rate_index < 0)
rate_index = 0;
if (rate_index >= rate_count)
rate_index = rate_count - 1;
if (HTSetting.field.MODE < MODE_VHT)
value = (MCSMappingRateTable[rate_index] * 5) / 10;
else
value = MCSMappingRateTable[rate_index];
if (HTSetting.field.MODE >= MODE_HTMIX && HTSetting.field.MODE < MODE_VHT)
value *= Antenna;
*fLastTxRxRate = (ULONG)value;
return;
}

View File

@ -0,0 +1,79 @@
#include "mtwifi.h"
const char *GetEncryModeStr(UINT32 encryMode)
{
if (IS_CIPHER_NONE(encryMode))
return "NONE";
else if (IS_CIPHER_WEP(encryMode))
return "WEP";
else if (IS_CIPHER_TKIP(encryMode) && IS_CIPHER_CCMP128(encryMode))
return "TKIPAES";
else if (IS_CIPHER_TKIP(encryMode))
return "TKIP";
else if (IS_CIPHER_CCMP128(encryMode))
return "AES";
else if (IS_CIPHER_CCMP256(encryMode))
return "CCMP256";
else if (IS_CIPHER_GCMP128(encryMode))
return "GCMP128";
else if (IS_CIPHER_GCMP256(encryMode))
return "GCMP256";
else if (IS_CIPHER_BIP_CMAC128(encryMode))
return "BIP-CMAC128";
else if (IS_CIPHER_BIP_CMAC256(encryMode))
return "BIP-CMAC256";
else if (IS_CIPHER_BIP_GMAC128(encryMode))
return "BIP-GMAC128";
else if (IS_CIPHER_BIP_GMAC256(encryMode))
return "BIP-GMAC256";
else
return "Unknown";
}
const char *GetAuthModeStr(UINT32 authMode)
{
if (IS_AKM_OPEN(authMode))
return "OPEN";
else if (IS_AKM_SHARED(authMode))
return "SHARED";
else if (IS_AKM_AUTOSWITCH(authMode))
return "WEPAUTO";
else if (IS_AKM_WPANONE(authMode))
return "WPANONE";
else if (IS_AKM_FT_WPA2PSK(authMode) && IS_AKM_FT_SAE_SHA256(authMode))
return "FT-WPA2PSKWPA3PSK";
else if (IS_AKM_WPA1(authMode) && IS_AKM_WPA2(authMode))
return "WPA1WPA2";
else if (IS_AKM_WPA1PSK(authMode) && IS_AKM_WPA2PSK(authMode))
return "WPAPSKWPA2PSK";
else if (IS_AKM_WPA2PSK(authMode) && IS_AKM_WPA3PSK(authMode))
return "WPA2PSKWPA3PSK";
else if (IS_AKM_WPA2PSK(authMode) && IS_AKM_WPA2PSK_SHA256(authMode) && IS_AKM_WPA3PSK(authMode))
return "WPA2PSKMIXWPA3PSK";
else if (IS_AKM_FT_SAE_SHA256(authMode))
return "FT-SAE";
else if (IS_AKM_WPA3PSK(authMode))
return "WPA3PSK";
else if (IS_AKM_WPA1(authMode))
return "WPA";
else if (IS_AKM_WPA1PSK(authMode))
return "WPAPSK";
else if (IS_AKM_FT_WPA2(authMode))
return "FT-WPA2";
else if (IS_AKM_FT_WPA2PSK(authMode))
return "FT-WPA2PSK";
else if (IS_AKM_WPA3(authMode)) /* WPA3 will be always accompanied by WPA2, so it should put before the WPA2 */
return "WPA3";
else if (IS_AKM_WPA2(authMode))
return "WPA2";
else if (IS_AKM_WPA2(authMode) && IS_AKM_WPA2_SHA256(authMode))
return "WPA2MIX";
else if (IS_AKM_WPA2PSK(authMode))
return "WPA2PSK";
else if (IS_AKM_WPA3_192BIT(authMode))
return "WPA3-192";
else if (IS_AKM_OWE(authMode))
return "OWE";
else
return "Unknown";
}

View File

@ -0,0 +1,17 @@
#
# Copyright (C) hanwckf <hanwckf@vip.qq.com>
#
# This is free software, licensed under the GNU General Public License v2.
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for mtwifi-cfg
LUCI_DEPENDS:=+mtwifi-cfg
LUCI_PKGARCH:=all
PKG_VERSION:=1
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,57 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Target Wake Time"
msgstr "目标唤醒时间TWT"
msgid "MU-MIMO DL"
msgstr "下行 MU-MIMO"
msgid "MU-MIMO UL"
msgstr "上行 MU-MIMO"
msgid "OFDMA DL"
msgstr "下行 OFDMA"
msgid "OFDMA UL"
msgstr "上行 OFDMA"
msgid "A-MSDU"
msgstr "MSDU聚合A-MSDU"
msgid "Auto Block ACK"
msgstr "自动块确认"
msgid "U-APSD"
msgstr "U-APSD 省电模式"
msgid "Kick low RSSI station threshold"
msgstr "弱信号剔除阈值"
msgid "Station associate threshold"
msgstr "弱信号接入阈值"
msgid "802.11V roam steering threshold"
msgstr "802.11V漫游引导阈值"
msgid "802.11V roam target bssid"
msgstr "802.11V漫游引导目标BSSID"
msgid "only supports mt_wifi driver"
msgstr "仅支持MTK闭源驱动漫游域相关参数自动生成无需设置.确认路由器自身lan ip均在同一网段"
msgid "Wireless HWNAT"
msgstr "无线硬件加速"
msgid "Band Steering"
msgstr "引导已连接的强信号双频2.4G设备至5G频段"
msgid "Wireless configuration error"
msgstr "无线网络设置错误"
msgid "At least one MBSSID needs to be reserved"
msgstr "至少需要保留1个MBSSID"

View File

@ -0,0 +1,17 @@
#!/bin/sh
if [ -d /www/luci-static/resources/view/network ]; then
mv -f /usr/share/luci-app-mtwifi-cfg/wireless-mtk.js /www/luci-static/resources/view/network/wireless.js
fi
if [ -d /usr/share/luci/menu.d ]; then
mv -f /usr/share/luci-app-mtwifi-cfg/luci-mod-status.json /usr/share/luci/menu.d/luci-mod-status.json
fi
luci_network_js="/www/luci-static/resources/network.js"
if [ -f $luci_network_js ]; then
if ! grep -sq 'ra\[xiyez\]' $luci_network_js ; then
sed -i 's#/^wlan\\d+/,#/^wlan\\d+/,/^ra[xiyez]?\\d+/,/^apcli[xiyez]?\\d+/,#' $luci_network_js
fi
fi

View File

@ -0,0 +1,143 @@
{
"admin/status/overview": {
"title": "Overview",
"order": 1,
"action": {
"type": "template",
"path": "admin_status/index"
},
"depends": {
"acl": [ "luci-mod-status-index" ]
}
},
"admin/status/iptables": {
"title": "Firewall",
"order": 2,
"action": {
"type": "view",
"path": "status/iptables"
},
"depends": {
"acl": [ "luci-mod-status-firewall" ]
}
},
"admin/status/routes": {
"title": "Routing",
"order": 3,
"action": {
"type": "view",
"path": "status/routes"
},
"depends": {
"acl": [ "luci-mod-status-routes" ]
}
},
"admin/status/logs": {
"title": "System Log",
"order": 4,
"action": {
"type": "alias",
"path": "admin/status/logs/syslog"
},
"depends": {
"acl": [ "luci-mod-status-logs" ]
}
},
"admin/status/logs/syslog": {
"title": "System Log",
"order": 1,
"action": {
"type": "view",
"path": "status/syslog"
}
},
"admin/status/logs/dmesg": {
"title": "Kernel Log",
"order": 2,
"action": {
"type": "view",
"path": "status/dmesg"
}
},
"admin/status/processes": {
"title": "Processes",
"order": 6,
"action": {
"type": "view",
"path": "status/processes"
},
"depends": {
"acl": [ "luci-mod-status-processes" ]
}
},
"admin/status/channel_analysis": {
"title": "Channel Analysis",
"order": 7,
"action": {
"type": "view",
"path": "status/channel_analysis"
},
"depends": {
"acl": [ "luci-mod-status-channel_analysis" ],
"uci": { "wireless": { "@wifi-device": { "type": "mac80211" } } }
}
},
"admin/status/realtime": {
"title": "Realtime Graphs",
"order": 7,
"action": {
"type": "alias",
"path": "admin/status/realtime/load"
},
"depends": {
"acl": [ "luci-mod-status-realtime" ]
}
},
"admin/status/realtime/load": {
"title": "Load",
"order": 1,
"action": {
"type": "view",
"path": "status/load"
}
},
"admin/status/realtime/bandwidth": {
"title": "Traffic",
"order": 2,
"action": {
"type": "view",
"path": "status/bandwidth"
}
},
"admin/status/realtime/wireless": {
"title": "Wireless",
"order": 3,
"action": {
"type": "view",
"path": "status/wireless"
},
"depends": {
"uci": { "wireless": { "@wifi-device": true } }
}
},
"admin/status/realtime/connections": {
"title": "Connections",
"order": 4,
"action": {
"type": "view",
"path": "status/connections"
}
}
}

View File

@ -0,0 +1,19 @@
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for MWAN3 Helper chinaroute
LUCI_DEPENDS:= dnsmasq-full +ipset
LUCI_PKGARCH:=all
PKG_VERSION:=1
PKG_RELEASE:=3
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,28 @@
-- Licensed to the public under the GNU General Public License v3.
module("luci.controller.mwan3helper", package.seeall)
function index()
if not nixio.fs.access("/etc/config/mwan3helper") then
return
end
local page = entry({"admin", "services", "mwan3helper"},alias("admin", "services", "mwan3helper", "client"),_("MWAN3 Helper"), 300)
page.dependent = true
page.acl_depends = { "luci-app-mwan3helper" }
entry({"admin", "services", "mwan3helper", "client"},cbi("mwan3helper/client"),_("Settings"), 10).leaf = true
entry({"admin", "services", "mwan3helper", "lists"},cbi("mwan3helper/list"),_("IPSet Lists"), 20).leaf = true
entry({"admin","services","mwan3helper","status"},call("act_status")).leaf=true
end
function act_status()
local e={}
e.running=luci.sys.call("pgrep mwan3dns >/dev/null")==0
luci.http.prepare_content("application/json")
luci.http.write_json(e)
end

View File

@ -0,0 +1,23 @@
m = Map("mwan3helper")
m.title = translate("MWAN3 Helper")
s = m:section(TypedSection, "mwan3helper")
s.addremove = false
s.anonymous = true
o = s:option(Flag, "enabled", translate("启用转发"))
o.rmempty = false
o = s:option(ListValue, "mode", translate("转发流量模式"))
o:value("0", translate("国外流量"))
o:value("1", translate("GFWLIST流量"))
o = s:option(Value, "dns", translate("转发流量至IP"))
o = s:option(Value, "dev", translate("设备"))
o = s:option(Flag, "dnsen", translate("启用 DNS 防污染"))
o.rmempty = false
o = s:option(Value, "dnsserver", translate("Anti-pollution DNS Server"))
return m

View File

@ -0,0 +1,37 @@
m = Map("mwan3helper")
m.title = translate("MWAN3 IPSets")
s = m:section(TypedSection, "mwan3helper")
s.addremove = false
s.anonymous = true
o = s:option(DummyValue, "gfwlist", translate("GFW列表"))
o.description = translate("GFW列表数据 5207 条IPSET 名称为 gfwlist")
o = s:option(DummyValue, "all_cn", translate("中国所有IP地址"))
o.description = translate("中国所有IP地址路由表数据 8304 条, IPSET 名称为 cn")
o = s:option(DummyValue, "chinatelecom", translate("中国电信"))
o.description = translate("中国电信路由表数据: 1948 条, IPSET 名称为 ct")
o = s:option(DummyValue, "unicom_cnc", translate("中国联通/网通"))
o.description = translate("中国联通/网通路由表数据: 895 条, IPSET 名称为 cnc")
o = s:option(DummyValue, "cmcc", translate("中国移动"))
o.description = translate("中国移动路由表数据: 55 条, IPSET 名称为 cmcc")
o = s:option(DummyValue, "crtc", translate("中国铁通"))
o.description = translate("中国铁通路由表数据: 16 条, IPSET 名称为 crtc")
o = s:option(DummyValue, "cernet", translate("中国教育网"))
o.description = translate("中国教育网路由表数据: 162 条, IPSET 名称为 cernet")
o = s:option(DummyValue, "gwbn", translate("长城宽带/鹏博士"))
o.description = translate("长城宽带/鹏博士: 94 条, IPSET 名称为 gwbn")
o = s:option(DummyValue, "othernet", translate("中国其他ISP"))
o.description = translate("中国其他ISP 5134 条, IPSET 名称为 othernet")
return m

View File

@ -0,0 +1,22 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(3, '<%=url([[admin]], [[services]], [[mwan3helper]], [[status]])%>', null,
function(x, data) {
var tb = document.getElementById('mwan3helper_status');
if (data && tb) {
if (data.running) {
var links = '<em><b><font color=green>MWAN3 Helper <%:RUNNING%></font></b></em>';
tb.innerHTML = links;
} else {
tb.innerHTML = '<em><b><font color=red>MWAN3 Helper <%:NOT RUNNING%></font></b></em>';
}
}
}
);
//]]>
</script>
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
<fieldset class="cbi-section">
<p id="mwan3helper_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View File

@ -0,0 +1,24 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "MWAN3 Helper"
msgstr "MWAN3 分流助手"
msgid "Settings"
msgstr "设置"
msgid "IPSet Lists"
msgstr "IPSet列表"
msgid "MWAN3 Helper generate IPSets"
msgstr "自动生成中国地址段和各大ISP运营商的 IPSet 地址段并解决国外域名的污染问题帮助MWAN3分流 ISP/WireGuard 等"
msgid "Enable GFW IPSet"
msgstr "启用 GFW IPSet"

View File

@ -0,0 +1,6 @@
config mwan3helper 'config'
option dns '192.168.6.2'
option dev 'br-lan'
option enabled '0'

View File

@ -0,0 +1,84 @@
#!/bin/sh /etc/rc.common
# Copyright (c) 2011-2015 OpenWrt.org
START=60
USE_PROCD=1
start_service(){
/etc/mwan3helper/genipset.sh cn '/etc/mwan3helper/all_cn.txt'
/etc/mwan3helper/genipset.sh ct '/etc/mwan3helper/chinatelecom.txt'
/etc/mwan3helper/genipset.sh cnc '/etc/mwan3helper/unicom_cnc.txt'
/etc/mwan3helper/genipset.sh cmcc '/etc/mwan3helper/cmcc.txt'
/etc/mwan3helper/genipset.sh crtc '/etc/mwan3helper/crtc.txt'
/etc/mwan3helper/genipset.sh cernet '/etc/mwan3helper/cernet.txt'
/etc/mwan3helper/genipset.sh gwbn '/etc/mwan3helper/gwbn.txt'
/etc/mwan3helper/genipset.sh othernet '/etc/mwan3helper/othernet.txt'
en=$(uci get mwan3helper.config.enabled 2>/dev/null)
dns=$(uci get mwan3helper.config.dns 2>/dev/null)
dev=$(uci get mwan3helper.config.dev 2>/dev/null)
dnsen=$(uci get mwan3helper.config.dnsen 2>/dev/null)
mode=$(uci get mwan3helper.config.mode 2>/dev/null)
dnsserver=$(uci get mwan3helper.config.dnsserver 2>/dev/null)
if [ $en -eq 1 ]; then
mkdir -p /tmp/etc/dnsmasq-mwan3.d
ipset -N gfwlist hash:net 2>/dev/null
if [ $dnsen -eq 1 ]; then
awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"gfwlist"'\n",$0)}' /etc/mwan3helper/gfw.txt > /tmp/etc/dnsmasq-mwan3.d/mwan3_gfwlist.conf
awk '!/^$/&&!/^#/{printf("server=/.%s/'"$dnsserver#53"'\n",$0)}' /etc/mwan3helper/gfw.txt >> /tmp/etc/dnsmasq-mwan3.d/mwan3_gfwlist.conf
cat > /tmp/dnsmasq.d/dnsmasq-mwan3.conf <<EOF
conf-dir=/var/etc/dnsmasq-mwan3.d
EOF
fi
/etc/init.d/dnsmasq restart
ip route del default table 200
ip route add default via $dns dev $dev table 200
ip rule del table 200
ip rule add table 200 fwmark 200
iptables -t mangle -D PREROUTING -i br-lan -j MARK --set-mark 200
iptables -t mangle -D PREROUTING -i br-lan -m set --match-set cn dst -j MARK --set-mark 0
iptables -t mangle -D PREROUTING -s $dns -j MARK --set-mark 0
iptables -t mangle -D PREROUTING -i br-lan -m set --match-set gfwlist dst -j MARK --set-mark 200
if [ $mode -eq 0 ]; then
iptables -t mangle -A PREROUTING -i br-lan -j MARK --set-mark 200
iptables -t mangle -A PREROUTING -i br-lan -m set --match-set cn dst -j MARK --set-mark 0
fi
iptables -t mangle -A PREROUTING -i br-lan -m set --match-set gfwlist dst -j MARK --set-mark 200
iptables -t mangle -A PREROUTING -s $dns -j MARK --set-mark 0
sed -i '/\/etc\/init.d\/mwan3helper start/d' /etc/firewall.user
echo "/etc/init.d/mwan3helper start" >> /etc/firewall.user
ipset add gfwlist 91.108.4.0/22
ipset add gfwlist 91.108.8.0/22
ipset add gfwlist 91.108.56.0/22
ipset add gfwlist 95.161.64.0/20
ipset add gfwlist 149.154.160.0/22
ipset add gfwlist 149.154.164.0/22
fi
}
stop_service(){
rm -f /tmp/dnsmasq.d/dnsmasq-mwan3.conf
/etc/init.d/dnsmasq restart
dns=$(uci get mwan3helper.config.dns 2>/dev/null)
dev=$(uci get mwan3helper.config.dev 2>/dev/null)
ip route del default table 200
ip rule del table 200
iptables -t mangle -D PREROUTING -i br-lan -j MARK --set-mark 200
iptables -t mangle -D PREROUTING -i br-lan -m set --match-set cn dst -j MARK --set-mark 0
iptables -t mangle -D PREROUTING -s $dns -j MARK --set-mark 0
iptables -t mangle -D PREROUTING -i br-lan -m set --match-set gfwlist dst -j MARK --set-mark 200
sed -i '/\/etc\/init.d\/mwan3helper start/d' /etc/firewall.user
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "mwan3helper"
}

View File

@ -0,0 +1,171 @@
1.51.0.0/16
1.184.0.0/15
42.244.0.0/14
43.252.48.0/22
49.52.0.0/14
49.120.0.0/14
49.140.0.0/15
49.208.0.0/15
58.154.0.0/15
58.192.0.0/15
58.194.0.0/15
58.196.0.0/15
58.198.0.0/15
58.200.0.0/13
59.64.0.0/14
59.68.0.0/14
59.72.0.0/15
59.74.0.0/15
59.76.0.0/16
59.77.0.0/16
59.78.0.0/15
101.4.0.0/14
101.76.0.0/15
103.81.200.0/22
103.87.20.0/22
103.115.120.0/22
103.137.60.0/24
103.165.110.0/23
103.205.162.0/24
103.226.80.0/22
110.64.0.0/15
111.114.0.0/15
111.116.0.0/15
111.186.0.0/15
113.54.0.0/15
114.212.0.0/15
114.214.0.0/16
115.24.0.0/14
115.154.0.0/15
115.156.0.0/15
115.158.0.0/16
116.13.0.0/16
116.56.0.0/15
118.202.0.0/15
118.228.0.0/15
118.230.0.0/16
120.94.0.0/16
120.95.0.0/16
121.48.0.0/15
121.52.160.0/19
121.192.0.0/16
121.193.0.0/16
121.194.0.0/15
121.248.0.0/14
122.204.0.0/14
125.216.0.0/15
125.218.0.0/16
125.219.0.0/16
125.220.0.0/15
125.222.0.0/15
175.185.0.0/16
175.186.0.0/15
180.84.0.0/15
180.201.0.0/16
180.208.0.0/15
183.168.0.0/15
183.170.0.0/16
183.172.0.0/14
192.124.154.0/24
202.4.128.0/19
202.38.2.0/23
202.38.64.0/19
202.38.96.0/19
202.38.140.0/23
202.38.146.0/23
202.38.184.0/21
202.38.192.0/18
202.112.0.0/16
202.113.0.0/20
202.113.16.0/20
202.113.32.0/19
202.113.64.0/18
202.113.128.0/18
202.113.192.0/19
202.113.224.0/20
202.113.240.0/20
202.114.0.0/19
202.114.32.0/19
202.114.64.0/18
202.114.128.0/17
202.115.0.0/19
202.115.128.0/17
202.116.0.0/19
202.116.32.0/20
202.116.48.0/20
202.116.64.0/19
202.116.96.0/19
202.116.128.0/17
202.117.0.0/18
202.117.64.0/18
202.117.128.0/17
202.118.0.0/19
202.118.32.0/19
202.118.64.0/18
202.118.128.0/17
202.119.0.0/19
202.119.32.0/19
202.119.64.0/20
202.119.80.0/20
202.119.96.0/19
202.119.128.0/17
202.120.0.0/18
202.120.64.0/18
202.120.128.0/17
202.121.0.0/16
202.127.216.0/21
202.127.224.0/19
202.179.240.0/20
202.192.0.0/13
202.200.0.0/14
202.204.0.0/14
203.91.120.0/21
210.25.0.0/16
210.26.0.0/15
210.28.0.0/14
210.32.0.0/14
210.36.0.0/14
210.40.0.0/13
211.64.0.0/14
211.68.0.0/15
211.70.0.0/15
211.80.0.0/16
211.81.0.0/16
211.82.0.0/16
211.83.0.0/16
211.84.0.0/15
211.86.0.0/15
218.192.0.0/16
218.193.0.0/16
218.194.0.0/16
218.195.0.0/16
218.196.0.0/14
219.216.0.0/15
219.218.0.0/15
219.220.0.0/16
219.221.0.0/16
219.222.0.0/15
219.224.0.0/15
219.226.0.0/16
219.227.0.0/16
219.228.0.0/15
219.230.0.0/15
219.242.0.0/15
219.244.0.0/14
222.16.0.0/15
222.18.0.0/15
222.20.0.0/15
222.22.0.0/16
222.23.0.0/16
222.24.0.0/15
222.26.0.0/15
222.28.0.0/14
222.192.0.0/14
222.196.0.0/15
222.198.0.0/16
222.199.0.0/16
222.200.0.0/14
222.204.0.0/15
222.206.0.0/15
223.2.0.0/15
223.128.0.0/15

View File

@ -0,0 +1,55 @@
36.128.0.0/10
39.128.0.0/10
43.239.172.0/22
43.251.244.0/22
45.121.68.0/22
45.121.72.0/22
45.121.172.0/22
45.121.176.0/22
45.122.96.0/21
45.123.152.0/22
45.124.36.0/22
45.125.24.0/22
45.253.72.0/22
61.14.240.0/22
61.14.244.0/22
103.20.112.0/22
103.21.176.0/22
103.35.104.0/22
103.61.156.0/22
103.61.160.0/22
103.62.24.0/22
103.62.204.0/22
103.62.208.0/22
103.192.0.0/22
103.192.144.0/22
103.193.140.0/22
103.203.164.0/22
103.205.108.0/22
103.205.116.0/22
103.222.196.0/22
111.0.0.0/10
112.0.0.0/10
117.128.0.0/10
120.192.0.0/10
175.176.188.0/22
183.192.0.0/10
211.103.0.0/17
211.136.0.0/14
211.140.0.0/15
211.142.0.0/17
211.142.128.0/17
211.143.0.0/16
218.200.0.0/14
218.204.0.0/15
218.206.0.0/15
221.130.0.0/15
221.176.0.0/13
223.64.0.0/11
223.96.0.0/12
223.112.0.0/14
223.116.0.0/15
223.120.128.0/17
223.121.128.0/17
223.123.128.0/17
223.124.0.0/14

View File

@ -0,0 +1,16 @@
36.192.0.0/11
43.247.240.0/22
61.232.0.0/14
61.236.0.0/15
101.144.0.0/12
103.3.128.0/22
110.96.0.0/11
110.192.0.0/11
115.180.0.0/15
118.204.0.0/14
120.90.0.0/15
122.64.0.0/11
123.64.0.0/11
211.98.0.0/16
221.172.0.0/14
222.32.0.0/11

View File

@ -0,0 +1,7 @@
ipset -N $1 hash:net 2>/dev/null
echo "create $1 hash:net family inet hashsize 1024 maxelem 65536" > /tmp/mwan3.ipset
cat $2 | sed -e "s/^/add $1 /" >> /tmp/mwan3.ipset
ipset -! flush $1
ipset -! restore < /tmp/mwan3.ipset 2>/dev/null
rm -f /tmp/mwan3.ipset

View File

@ -0,0 +1,290 @@
1.94.0.0/15
14.1.24.0/22
14.103.0.0/16
14.196.0.0/15
42.196.0.0/14
43.242.56.0/22
43.242.144.0/22
43.243.144.0/22
43.243.148.0/22
43.247.200.0/22
43.247.204.0/22
43.247.208.0/22
43.247.224.0/22
43.250.16.0/22
43.250.20.0/22
45.121.240.0/22
45.121.244.0/22
45.121.248.0/22
45.121.252.0/22
45.122.4.0/22
45.122.8.0/22
45.122.12.0/22
45.122.16.0/22
45.122.20.0/22
45.122.24.0/22
45.122.28.0/22
45.122.32.0/22
45.122.36.0/22
45.122.40.0/22
45.122.192.0/22
45.122.196.0/22
45.122.200.0/22
45.122.204.0/22
45.122.208.0/22
45.122.212.0/22
45.122.216.0/22
45.123.28.0/22
45.123.32.0/22
45.123.36.0/22
45.123.76.0/22
45.123.80.0/22
45.123.84.0/22
45.123.88.0/22
45.123.204.0/22
45.123.212.0/22
45.123.224.0/22
45.123.228.0/22
45.123.232.0/22
45.123.236.0/22
45.123.240.0/22
45.123.244.0/22
45.123.248.0/22
45.123.252.0/22
45.124.0.0/22
45.124.100.0/22
45.252.152.0/22
45.252.200.0/22
45.252.204.0/22
45.252.208.0/22
45.252.212.0/22
45.252.216.0/22
45.252.220.0/22
45.252.224.0/22
45.253.0.0/22
45.253.4.0/22
45.253.8.0/22
45.253.12.0/22
45.253.16.0/22
45.253.20.0/22
45.253.28.0/22
45.253.36.0/22
45.253.40.0/22
45.253.56.0/22
45.253.76.0/22
45.253.80.0/22
45.253.84.0/22
45.253.92.0/22
45.254.28.0/22
45.254.56.0/22
45.254.96.0/22
45.254.132.0/22
45.254.152.0/22
45.254.180.0/22
45.254.200.0/22
45.254.204.0/22
45.254.208.0/22
45.254.212.0/22
45.254.216.0/22
45.254.220.0/22
45.254.224.0/22
45.254.228.0/22
49.220.0.0/14
59.152.16.0/22
59.152.20.0/22
59.152.24.0/22
59.152.28.0/22
59.152.64.0/22
59.152.68.0/22
59.152.72.0/22
59.152.76.0/22
59.152.112.0/22
59.152.116.0/22
60.194.0.0/15
60.206.0.0/15
61.14.212.0/22
61.14.216.0/22
61.14.220.0/22
101.38.0.0/15
101.40.0.0/15
101.104.0.0/14
101.130.0.0/15
103.23.56.0/22
103.24.184.0/22
103.38.0.0/22
103.38.228.0/22
103.38.232.0/22
103.41.148.0/22
103.41.152.0/22
103.62.72.0/22
103.62.76.0/22
103.62.80.0/22
103.62.84.0/22
103.62.96.0/22
103.62.100.0/22
103.62.104.0/22
103.62.108.0/22
103.62.112.0/22
103.62.116.0/22
103.62.120.0/22
103.62.124.0/22
103.62.128.0/22
103.62.132.0/22
103.63.64.0/22
103.63.68.0/22
103.63.72.0/22
103.63.76.0/22
103.63.80.0/22
103.63.84.0/22
103.63.88.0/22
103.63.140.0/22
103.63.144.0/22
103.63.152.0/22
103.63.196.0/22
103.63.200.0/22
103.63.204.0/22
103.63.208.0/22
103.192.48.0/22
103.192.52.0/22
103.192.56.0/22
103.192.84.0/22
103.192.88.0/22
103.192.92.0/22
103.192.96.0/22
103.192.100.0/22
103.192.104.0/22
103.192.108.0/22
103.192.112.0/22
103.192.216.0/22
103.202.152.0/22
103.202.156.0/22
103.202.160.0/22
103.202.164.0/22
103.202.168.0/22
103.202.172.0/22
103.202.176.0/22
103.202.180.0/22
103.202.184.0/22
103.202.188.0/22
103.202.192.0/22
103.202.196.0/22
103.202.200.0/21
103.202.228.0/22
103.202.236.0/22
103.202.240.0/22
103.202.244.0/22
103.202.248.0/22
103.202.252.0/22
103.203.0.0/22
103.203.4.0/22
103.203.8.0/22
103.203.12.0/22
103.203.16.0/22
103.203.20.0/22
103.203.24.0/22
103.203.28.0/22
103.203.32.0/22
103.203.104.0/22
103.203.108.0/22
103.203.112.0/22
103.203.116.0/22
103.203.120.0/22
103.203.124.0/22
103.203.128.0/22
103.204.88.0/22
103.204.112.0/22
103.204.148.0/22
103.204.152.0/22
103.221.88.0/22
103.221.132.0/22
103.221.156.0/22
103.221.180.0/22
103.221.184.0/22
103.221.188.0/22
103.221.192.0/22
103.221.196.0/22
103.222.0.0/22
103.222.4.0/22
103.222.8.0/22
103.222.12.0/22
103.222.16.0/22
103.222.24.0/22
103.222.28.0/22
103.222.36.0/22
103.222.44.0/22
103.222.48.0/22
103.222.56.0/22
103.222.60.0/22
103.222.64.0/22
103.222.68.0/22
103.222.72.0/22
103.222.76.0/22
103.222.80.0/22
103.222.84.0/22
103.222.88.0/22
103.222.92.0/22
103.222.96.0/22
103.222.100.0/22
103.222.104.0/22
103.222.108.0/22
103.222.200.0/22
103.222.204.0/22
103.222.208.0/22
103.222.212.0/22
103.238.20.0/22
103.238.24.0/22
103.238.40.0/22
115.31.72.0/22
115.31.76.0/22
115.47.0.0/16
115.182.0.0/16
115.183.0.0/16
115.187.0.0/22
115.187.4.0/22
115.187.8.0/22
115.187.12.0/22
115.190.0.0/15
116.199.128.0/19
117.58.0.0/17
117.120.64.0/18
118.28.0.0/15
124.14.0.0/15
124.192.0.0/15
124.200.0.0/13
124.254.0.0/18
175.188.0.0/14
180.88.0.0/14
180.235.112.0/22
202.4.252.0/22
202.160.156.0/22
202.168.136.0/22
202.168.140.0/22
203.78.156.0/22
203.82.112.0/22
203.82.116.0/22
203.82.120.0/22
203.82.124.0/22
203.82.224.0/22
203.82.228.0/22
203.82.232.0/22
203.82.236.0/22
203.86.64.0/20
203.114.80.0/22
203.114.84.0/22
203.114.88.0/22
203.114.92.0/22
203.207.92.0/22
203.207.112.0/20
203.207.192.0/21
203.207.208.0/20
211.101.0.0/18
211.103.128.0/17
211.164.0.0/14
218.249.0.0/16
219.90.68.0/22
219.90.72.0/22
219.90.76.0/22
219.238.0.0/15
220.112.0.0/14
223.208.0.0/14
223.255.0.0/17

View File

@ -0,0 +1,887 @@
1.24.0.0/13
1.56.0.0/13
1.188.0.0/14
14.204.0.0/15
27.0.128.0/22
27.8.0.0/13
27.36.0.0/14
27.40.0.0/13
27.50.128.0/17
27.54.192.0/18
27.98.224.0/19
27.112.0.0/18
27.115.0.0/17
27.192.0.0/11
36.32.0.0/14
36.248.0.0/14
39.64.0.0/11
42.4.0.0/14
42.48.0.0/15
42.51.0.0/16
42.52.0.0/14
42.56.0.0/14
42.63.0.0/16
42.84.0.0/14
42.176.0.0/13
42.224.0.0/12
43.224.12.0/22
43.224.24.0/22
43.224.52.0/22
43.224.56.0/22
43.224.80.0/22
43.224.160.0/22
43.224.208.0/22
43.225.120.0/22
43.226.80.0/22
43.226.84.0/22
43.226.88.0/22
43.226.92.0/22
43.226.96.0/22
43.226.100.0/22
43.226.104.0/22
43.226.108.0/22
43.226.116.0/22
43.226.120.0/22
43.226.160.0/22
43.226.164.0/22
43.226.236.0/22
43.227.104.0/22
43.229.168.0/22
43.229.172.0/22
43.229.176.0/22
43.229.180.0/22
43.229.236.0/22
43.239.120.0/22
43.240.0.0/22
43.240.72.0/22
43.240.132.0/22
43.240.204.0/22
43.240.216.0/22
43.241.48.0/22
43.241.92.0/22
43.241.184.0/22
43.242.64.0/22
43.242.148.0/22
43.242.152.0/22
43.242.156.0/22
43.242.164.0/22
43.242.180.0/22
43.243.4.0/22
43.243.16.0/22
43.243.88.0/22
43.243.128.0/22
43.243.156.0/22
43.243.180.0/22
43.243.228.0/22
43.246.112.0/22
43.246.228.0/22
43.247.88.0/22
43.247.92.0/22
43.247.100.0/22
43.247.212.0/22
43.247.216.0/22
43.248.4.0/22
43.248.20.0/22
43.248.48.0/22
43.248.80.0/22
43.248.84.0/22
43.248.88.0/22
43.248.92.0/22
43.248.108.0/22
43.248.148.0/22
43.248.176.0/22
43.248.180.0/22
43.248.184.0/22
43.248.188.0/22
43.248.192.0/22
43.248.196.0/22
43.248.200.0/22
43.248.204.0/22
43.248.244.0/22
43.249.4.0/22
43.249.136.0/22
43.249.192.0/22
43.249.236.0/22
43.250.4.0/22
43.250.96.0/22
43.250.112.0/22
43.250.128.0/22
43.250.144.0/22
43.250.168.0/22
43.250.200.0/22
43.250.212.0/22
43.250.244.0/22
43.251.4.0/22
43.251.36.0/22
43.251.232.0/22
43.254.44.0/22
43.254.100.0/22
43.254.104.0/22
43.254.116.0/22
43.254.136.0/22
43.254.144.0/22
43.254.148.0/22
43.254.220.0/22
43.255.84.0/22
43.255.204.0/22
43.255.244.0/22
45.112.228.0/22
45.112.232.0/22
45.113.24.0/22
45.113.28.0/22
45.113.200.0/22
45.113.240.0/22
45.113.252.0/22
45.115.144.0/22
45.115.156.0/22
45.115.164.0/22
45.115.200.0/22
45.115.248.0/22
45.117.8.0/22
45.117.124.0/22
45.119.64.0/22
45.119.68.0/22
45.120.100.0/22
45.121.52.0/22
45.123.156.0/22
45.124.20.0/22
45.124.68.0/22
45.124.80.0/22
45.125.44.0/22
45.126.108.0/22
45.248.8.0/22
45.248.96.0/22
45.249.112.0/22
45.250.28.0/22
45.250.32.0/22
45.250.36.0/22
45.250.40.0/22
45.251.16.0/22
45.251.84.0/22
45.251.88.0/22
45.252.104.0/22
45.253.24.0/22
45.253.32.0/22
45.253.64.0/22
58.16.0.0/16
58.17.0.0/17
58.17.128.0/17
58.18.0.0/16
58.19.0.0/16
58.20.0.0/16
58.21.0.0/16
58.22.0.0/15
58.144.0.0/16
58.240.0.0/15
58.242.0.0/15
58.244.0.0/15
58.246.0.0/15
58.248.0.0/13
59.80.0.0/15
60.0.0.0/13
60.8.0.0/15
60.10.0.0/16
60.11.0.0/16
60.12.0.0/16
60.13.0.0/18
60.13.64.0/18
60.13.128.0/17
60.14.0.0/15
60.16.0.0/13
60.24.0.0/14
60.28.0.0/15
60.30.0.0/16
60.31.0.0/16
60.208.0.0/13
60.216.0.0/15
60.218.0.0/15
60.220.0.0/14
60.255.0.0/16
61.45.128.0/18
61.48.0.0/14
61.52.0.0/15
61.54.0.0/16
61.55.0.0/16
61.133.0.0/17
61.134.96.0/19
61.134.128.0/18
61.134.192.0/18
61.135.0.0/16
61.136.0.0/18
61.136.64.0/18
61.137.128.0/17
61.138.0.0/18
61.138.64.0/18
61.138.128.0/18
61.139.128.0/18
61.148.0.0/15
61.156.0.0/16
61.158.0.0/17
61.158.128.0/17
61.159.0.0/18
61.161.0.0/18
61.161.128.0/17
61.162.0.0/16
61.163.0.0/16
61.167.0.0/16
61.168.0.0/16
61.176.0.0/16
61.179.0.0/16
61.180.128.0/17
61.181.0.0/16
61.182.0.0/16
61.189.0.0/17
61.240.0.0/14
101.16.0.0/12
101.64.0.0/13
101.72.0.0/14
101.204.0.0/14
101.232.0.0/15
103.3.96.0/22
103.3.100.0/22
103.3.104.0/22
103.3.108.0/22
103.3.112.0/22
103.3.116.0/22
103.3.120.0/22
103.3.124.0/22
103.3.132.0/22
103.3.136.0/22
103.3.140.0/22
103.3.148.0/22
103.3.152.0/22
103.3.156.0/22
103.5.56.0/22
103.5.168.0/22
103.5.252.0/22
103.7.212.0/22
103.8.32.0/22
103.9.248.0/22
103.9.252.0/22
103.14.84.0/22
103.18.224.0/22
103.22.188.0/22
103.25.40.0/22
103.27.4.0/22
103.27.240.0/22
103.28.204.0/22
103.31.200.0/22
103.35.220.0/22
103.36.208.0/22
103.37.44.0/22
103.37.100.0/22
103.38.32.0/22
103.38.40.0/22
103.39.88.0/22
103.40.12.0/22
103.40.192.0/22
103.40.212.0/22
103.43.100.0/22
103.43.192.0/22
103.44.80.0/22
103.45.72.0/22
103.45.76.0/22
103.45.160.0/22
103.45.168.0/22
103.45.224.0/22
103.48.216.0/22
103.48.220.0/22
103.48.224.0/22
103.48.228.0/22
103.48.232.0/22
103.52.96.0/22
103.52.100.0/22
103.52.176.0/22
103.52.184.0/22
103.53.124.0/22
103.53.204.0/22
103.55.172.0/22
103.55.204.0/22
103.55.208.0/22
103.55.228.0/22
103.56.32.0/22
103.56.60.0/22
103.57.196.0/22
103.59.116.0/22
103.59.124.0/22
103.60.164.0/22
103.67.192.0/22
103.68.128.0/22
103.70.148.0/22
103.72.224.0/22
103.72.228.0/22
103.72.232.0/22
103.72.236.0/22
103.72.240.0/22
103.72.244.0/22
103.72.248.0/22
103.72.252.0/22
103.73.0.0/22
103.73.4.0/22
103.73.8.0/22
103.73.12.0/22
103.73.16.0/22
103.73.20.0/22
103.73.24.0/22
103.73.28.0/22
103.73.144.0/22
103.78.64.0/22
103.79.228.0/23
103.85.84.0/22
103.90.92.0/22
103.90.188.0/22
103.91.108.0/22
103.91.176.0/22
103.91.208.0/22
103.91.252.0/22
103.92.0.0/22
103.92.4.0/22
103.92.8.0/22
103.92.12.0/22
103.92.48.0/22
103.92.132.0/22
103.93.180.0/22
103.95.220.0/22
103.97.8.0/22
103.97.16.0/20
103.97.72.0/22
103.98.44.0/22
103.98.168.0/22
103.98.220.0/22
103.107.44.0/22
103.107.188.0/22
103.107.212.0/22
103.108.244.0/22
103.110.132.0/22
103.110.156.0/22
103.117.188.0/22
103.120.224.0/22
103.123.56.0/22
103.141.242.0/23
103.142.128.0/23
103.158.8.0/23
103.166.138.0/23
103.192.4.0/22
103.192.132.0/22
103.192.188.0/22
103.192.212.0/22
103.197.0.0/22
103.203.168.0/22
103.204.72.0/22
103.204.136.0/22
103.205.4.0/22
103.205.192.0/22
103.205.252.0/22
103.207.184.0/22
103.207.228.0/22
103.207.232.0/22
103.210.184.0/22
103.211.44.0/22
103.211.96.0/22
103.211.220.0/22
103.213.96.0/22
103.213.132.0/22
103.214.48.0/22
103.215.36.0/22
103.216.152.0/22
103.216.240.0/22
103.219.24.0/22
103.219.28.0/22
103.219.32.0/22
103.219.36.0/22
103.220.48.0/22
103.220.52.0/22
103.221.140.0/22
103.222.32.0/22
103.222.40.0/22
103.222.164.0/22
103.222.172.0/22
103.223.140.0/22
103.223.188.0/22
103.224.228.0/22
103.224.232.0/22
103.227.120.0/22
103.227.136.0/22
103.228.204.0/22
103.229.148.0/22
103.229.212.0/22
103.230.196.0/22
103.230.236.0/22
103.233.228.0/22
103.234.56.0/22
103.234.244.0/22
103.236.120.0/22
103.236.240.0/22
103.238.28.0/22
103.238.32.0/22
103.238.144.0/22
103.238.160.0/22
103.239.152.0/22
103.239.224.0/22
103.239.244.0/22
103.240.36.0/22
103.240.72.0/22
103.240.84.0/22
103.240.124.0/22
103.240.172.0/22
103.243.136.0/22
103.246.8.0/22
103.246.152.0/22
103.248.100.0/22
103.250.32.0/22
103.250.104.0/22
103.250.124.0/22
103.250.180.0/22
103.250.192.0/22
103.250.216.0/22
103.250.248.0/22
103.251.32.0/22
103.251.96.0/22
103.251.124.0/22
103.251.160.0/22
103.251.240.0/22
103.252.204.0/22
103.252.208.0/22
103.252.232.0/22
103.252.248.0/22
103.253.60.0/22
103.255.88.0/22
103.255.200.0/22
106.48.0.0/15
106.74.0.0/16
110.6.0.0/15
110.16.0.0/14
110.44.12.0/22
110.52.0.0/15
110.72.0.0/15
110.228.0.0/14
110.236.0.0/15
110.240.0.0/12
111.85.0.0/16
111.160.0.0/13
111.192.0.0/12
111.223.12.0/22
112.64.0.0/15
112.80.0.0/13
112.88.0.0/13
112.96.0.0/15
112.109.128.0/17
112.111.0.0/16
112.122.0.0/15
112.132.0.0/16
112.192.0.0/14
112.224.0.0/11
113.0.0.0/13
113.8.0.0/15
113.18.0.0/16
113.56.0.0/15
113.58.0.0/16
113.59.0.0/17
113.194.0.0/15
113.200.0.0/15
113.204.0.0/14
113.213.0.0/17
113.224.0.0/12
114.54.0.0/15
114.119.0.0/17
114.119.224.0/19
114.240.0.0/12
115.46.0.0/16
115.48.0.0/12
115.85.192.0/18
115.172.0.0/14
116.2.0.0/15
116.60.0.0/14
116.78.0.0/15
116.95.0.0/16
116.112.0.0/14
116.116.0.0/15
116.128.0.0/10
116.194.0.0/15
116.199.0.0/17
116.214.32.0/19
116.216.0.0/14
116.242.0.0/15
116.244.0.0/15
116.255.128.0/17
117.8.0.0/13
117.74.64.0/20
117.121.128.0/18
118.26.48.0/21
118.72.0.0/13
118.80.0.0/15
118.88.32.0/19
118.88.64.0/18
118.88.128.0/17
118.103.168.0/22
118.144.0.0/14
118.212.0.0/16
118.224.0.0/14
118.244.0.0/14
119.4.0.0/14
119.27.64.0/18
119.32.0.0/14
119.36.0.0/16
119.37.0.0/17
119.37.128.0/18
119.38.0.0/17
119.39.0.0/16
119.40.128.0/17
119.42.0.0/19
119.42.224.0/19
119.44.0.0/15
119.48.0.0/13
119.59.128.0/17
119.62.0.0/16
119.108.0.0/15
119.112.0.0/13
119.148.160.0/20
119.162.0.0/15
119.164.0.0/14
119.176.0.0/12
119.233.128.0/17
119.248.0.0/14
119.252.240.0/20
120.0.0.0/12
120.52.0.0/16
120.72.32.0/19
120.80.0.0/13
120.128.0.0/14
121.16.0.0/13
121.24.0.0/14
121.28.0.0/15
121.30.0.0/16
121.31.0.0/16
121.52.224.0/19
121.55.0.0/18
121.100.128.0/17
121.201.0.0/16
122.13.0.0/16
122.96.0.0/15
122.102.64.0/20
122.136.0.0/13
122.156.0.0/14
122.188.0.0/14
122.192.0.0/14
123.4.0.0/14
123.8.0.0/13
123.58.240.0/20
123.98.0.0/17
123.112.0.0/12
123.128.0.0/13
123.138.0.0/15
123.144.0.0/14
123.148.0.0/16
123.152.0.0/13
123.176.80.0/20
123.188.0.0/14
123.196.0.0/15
123.232.0.0/14
124.6.64.0/18
124.20.0.0/16
124.21.0.0/20
124.21.16.0/20
124.21.32.0/19
124.21.64.0/18
124.21.128.0/17
124.42.128.0/17
124.64.0.0/15
124.66.0.0/17
124.67.0.0/16
124.68.0.0/15
124.88.0.0/16
124.89.0.0/17
124.89.128.0/17
124.90.0.0/15
124.92.0.0/14
124.128.0.0/13
124.152.0.0/16
124.160.0.0/16
124.161.0.0/16
124.162.0.0/16
124.163.0.0/16
124.164.0.0/14
124.240.128.0/18
125.32.0.0/16
125.33.0.0/16
125.34.0.0/16
125.35.0.0/17
125.35.128.0/17
125.36.0.0/14
125.40.0.0/13
125.211.0.0/16
125.214.96.0/19
139.170.0.0/16
139.208.0.0/13
139.226.0.0/15
140.206.0.0/15
144.48.64.0/22
146.196.56.0/22
146.196.68.0/22
150.129.136.0/22
150.242.8.0/22
150.242.152.0/22
150.242.232.0/22
150.255.0.0/16
153.0.0.0/16
153.3.0.0/16
153.34.0.0/15
153.36.0.0/15
153.99.0.0/16
153.101.0.0/16
157.0.0.0/16
157.18.0.0/16
157.61.0.0/16
157.122.0.0/16
157.148.0.0/16
157.156.0.0/16
157.255.0.0/16
160.19.212.0/22
160.202.60.0/22
160.202.148.0/22
160.202.152.0/22
160.202.212.0/22
163.0.0.0/16
163.53.48.0/22
163.53.52.0/22
163.53.168.0/22
163.125.0.0/16
163.142.0.0/16
163.177.0.0/16
163.179.0.0/16
163.204.0.0/16
171.34.0.0/15
171.36.0.0/14
171.116.0.0/14
171.120.0.0/13
175.16.0.0/13
175.42.0.0/15
175.44.0.0/16
175.106.128.0/17
175.146.0.0/15
175.148.0.0/14
175.152.0.0/14
175.160.0.0/12
175.184.128.0/18
180.77.0.0/16
180.95.128.0/17
180.129.128.0/17
180.130.0.0/16
180.188.0.0/17
180.189.148.0/22
182.54.0.0/17
182.88.0.0/14
182.112.0.0/12
182.174.0.0/15
183.92.0.0/14
183.184.0.0/13
192.140.208.0/22
192.140.212.0/22
202.74.8.0/21
202.75.208.0/20
202.89.96.0/22
202.96.0.0/18
202.96.64.0/21
202.96.72.0/21
202.96.80.0/20
202.97.128.0/18
202.97.192.0/19
202.97.224.0/21
202.97.232.0/21
202.97.240.0/20
202.98.0.0/21
202.98.8.0/21
202.98.16.0/20
202.99.0.0/18
202.99.64.0/19
202.99.96.0/21
202.99.104.0/21
202.99.112.0/20
202.99.128.0/19
202.99.160.0/21
202.99.168.0/21
202.99.176.0/20
202.99.192.0/21
202.99.200.0/21
202.99.208.0/20
202.99.224.0/21
202.99.232.0/21
202.99.240.0/20
202.101.128.0/18
202.102.128.0/21
202.102.136.0/21
202.102.144.0/20
202.102.160.0/19
202.102.224.0/21
202.102.232.0/21
202.102.240.0/20
202.106.0.0/16
202.107.0.0/17
202.108.0.0/16
202.110.0.0/18
202.110.64.0/18
202.110.192.0/18
202.111.128.0/19
202.111.160.0/19
202.127.112.0/20
202.130.224.0/19
202.160.140.0/22
202.170.128.0/19
203.76.240.0/22
203.93.0.0/22
203.93.4.0/22
203.93.8.0/24
203.93.9.0/24
203.93.10.0/23
203.93.12.0/22
203.93.16.0/20
203.93.32.0/19
203.93.64.0/18
203.93.128.0/21
203.93.136.0/22
203.93.140.0/24
203.93.141.0/24
203.93.142.0/23
203.93.144.0/20
203.93.160.0/19
203.93.192.0/18
203.166.160.0/19
210.5.128.0/20
210.12.0.0/18
210.12.64.0/18
210.12.128.0/18
210.12.192.0/18
210.13.0.0/18
210.13.64.0/18
210.13.128.0/17
210.14.160.0/19
210.14.192.0/19
210.14.224.0/19
210.15.0.0/19
210.15.32.0/19
210.15.64.0/19
210.15.96.0/19
210.15.128.0/18
210.21.0.0/17
210.21.128.0/17
210.22.0.0/16
210.51.0.0/16
210.52.0.0/18
210.52.64.0/18
210.52.128.0/17
210.53.0.0/17
210.53.128.0/17
210.74.64.0/19
210.74.96.0/19
210.74.128.0/19
210.78.0.0/19
210.78.160.0/19
210.78.192.0/18
210.79.64.0/18
210.82.0.0/15
211.90.0.0/15
211.92.0.0/15
211.94.0.0/15
211.96.0.0/15
211.144.0.0/15
211.158.0.0/15
218.7.0.0/16
218.8.0.0/15
218.10.0.0/16
218.11.0.0/16
218.12.0.0/16
218.21.128.0/17
218.24.0.0/15
218.26.0.0/16
218.27.0.0/16
218.28.0.0/15
218.56.0.0/14
218.60.0.0/15
218.62.0.0/17
218.67.128.0/17
218.68.0.0/15
218.98.0.0/17
218.104.0.0/17
218.104.128.0/19
218.104.160.0/19
218.104.192.0/21
218.104.200.0/21
218.104.208.0/20
218.104.224.0/19
218.105.0.0/16
218.106.0.0/15
219.154.0.0/15
219.156.0.0/15
219.158.0.0/17
219.158.128.0/17
219.159.0.0/18
219.232.0.0/14
220.152.128.0/17
220.158.240.0/22
220.192.0.0/15
220.194.0.0/15
220.196.0.0/14
220.200.0.0/13
220.231.0.0/18
220.248.0.0/14
220.252.0.0/16
221.0.0.0/15
221.2.0.0/16
221.3.0.0/17
221.3.128.0/17
221.4.0.0/16
221.5.0.0/17
221.5.128.0/17
221.6.0.0/16
221.7.0.0/19
221.7.32.0/19
221.7.64.0/19
221.7.96.0/19
221.7.128.0/17
221.8.0.0/15
221.10.0.0/16
221.11.0.0/17
221.11.128.0/18
221.11.192.0/19
221.11.224.0/19
221.12.0.0/17
221.12.128.0/18
221.13.0.0/18
221.13.64.0/19
221.13.96.0/19
221.13.128.0/17
221.14.0.0/15
221.192.0.0/15
221.194.0.0/16
221.195.0.0/16
221.196.0.0/15
221.198.0.0/16
221.199.0.0/19
221.199.32.0/20
221.199.48.0/20
221.199.64.0/18
221.199.128.0/18
221.199.192.0/20
221.199.224.0/19
221.200.0.0/14
221.204.0.0/15
221.206.0.0/16
221.207.0.0/18
221.207.64.0/18
221.207.128.0/17
221.208.0.0/14
221.212.0.0/16
221.213.0.0/16
221.214.0.0/15
221.216.0.0/13
222.128.0.0/14
222.132.0.0/14
222.136.0.0/13
222.160.0.0/15
222.162.0.0/16
222.163.0.0/19
222.163.32.0/19
222.163.64.0/18
222.163.128.0/17
223.27.184.0/22
223.166.0.0/15

View File

@ -0,0 +1,11 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@mwan3helper[-1]
add ucitrack mwan3helper
set ucitrack.@mwan3helper[-1].init=mwan3helper
commit ucitrack
EOF
rm -f /tmp/luci*
exit 0

View File

@ -0,0 +1,11 @@
{
"luci-app-mwan3helper": {
"description": "Grant UCI access for luci-app-mwan3helper",
"read": {
"uci": [ "mwan3helper" ]
},
"write": {
"uci": [ "mwan3helper" ]
}
}
}

View File

@ -0,0 +1,16 @@
# SPDX-Identifier-License: GPL-3.0-only
#
# Copyright (C) 2018 Lean <coolsnowwolf@gmail.com>
# Copyright (C) 2019-2022 ImmortalWrt.org
include $(TOPDIR)/rules.mk
PKG_LICENSE:=GPL-3.0-only
LUCI_TITLE:=LuCI support for MTK HNAT
LUCI_DEPENDS:=+kmod-tcp-bbr @!PACKAGE_luci-app-turboacc
LUCI_PKGARCH:=all
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,258 @@
/* Copyright (C) 2022 ImmortalWrt.org */
'use strict';
'require form';
'require fs';
'require poll';
'require rpc';
'require uci';
'require view';
var getSystemFeatures = rpc.declare({
object: 'luci.turboacc',
method: 'getSystemFeatures',
expect: { '': {} }
});
var getFastPathStat = rpc.declare({
object: 'luci.turboacc',
method: 'getFastPathStat',
expect: { '': {} }
});
var getFullConeStat = rpc.declare({
object: 'luci.turboacc',
method: 'getFullConeStat',
expect: { '': {} }
});
var getTCPCCAStat = rpc.declare({
object: 'luci.turboacc',
method: 'getTCPCCAStat',
expect: { '': {} }
});
var getMTKPPEStat = rpc.declare({
object: 'luci.turboacc',
method: 'getMTKPPEStat',
expect: { '': {} }
});
function getServiceStatus() {
return Promise.all([
L.resolveDefault(getFastPathStat(), {}),
L.resolveDefault(getFullConeStat(), {}),
L.resolveDefault(getTCPCCAStat(), {})
]);
}
function getMTKPPEStatus() {
return Promise.all([
L.resolveDefault(getMTKPPEStat(), {})
]);
}
function progressbar(value, max, byte) {
var vn = parseInt(value) || 0,
mn = parseInt(max) || 100,
fv = byte ? String.format('%1024.2mB', value) : value,
fm = byte ? String.format('%1024.2mB', max) : max,
pc = Math.floor((100 / mn) * vn);
return E('div', {
'class': 'cbi-progressbar',
'title': '%s / %s (%d%%)'.format(fv, fm, pc)
}, E('div', { 'style': 'width:%.2f%%'.format(pc) }));
}
function renderStatus(stats) {
var spanTemp = '<em><span style="color:%s"><strong>%s</strong></span></em>';
var renderHTML = [];
for (var stat of stats)
if (stat.type) {
if (stat.type.includes(' / ')) {
var types = stat.type.split(' / ');
var inner = spanTemp.format('green', types[0]);
for (var i of types.slice(1))
inner += spanTemp.format('none', ' / ') + spanTemp.format('red', i);
renderHTML.push(inner);
} else
renderHTML.push(spanTemp.format('green', stat.type));
} else
renderHTML.push(spanTemp.format('red', _('Disabled')));
return renderHTML;
}
return view.extend({
load: function() {
return Promise.all([
uci.load('turboacc'),
L.resolveDefault(getSystemFeatures(), {}),
L.resolveDefault(getMTKPPEStat(), {})
]);
},
render: function(data) {
var m, s, o;
var features = data[1];
var ppe_stats = data[2];
m = new form.Map('turboacc', _('TurboACC settings'),
_('Open source flow offloading engine (fast path or hardware NAT).'));
s = m.section(form.TypedSection);
s.anonymous = true;
s.render = function () {
poll.add(function () {
return L.resolveDefault(getServiceStatus()).then(function (res) {
var stats = renderStatus(res);
var tds = [ 'fastpath_state', 'fullcone_state', 'tcpcca_state' ];
for (var i in tds) {
var view = document.getElementById(tds[i]);
view.innerHTML = stats[i];
}
});
});
var acc_status = E('table', { 'class': 'table', 'width': '100%', 'cellspacing': '10' }, [
E('tr', {}, [
E('td', { 'width': '33%' }, _('FastPath Engine')),
E('td', { 'id': 'fastpath_state' }, E('em', {}, _('Collecting data...')))
]),
E('tr', {}, [
E('td', { 'width': '33%' }, _('Full Cone NAT')),
E('td', { 'id': 'fullcone_state' }, E('em', {}, _('Collecting data...')))
]),
E('tr', {}, [
E('td', { 'width': '33%' }, _('TCP CCA')),
E('td', { 'id': 'tcpcca_state' }, E('em', {}, _('Collecting data...')))
])
]);
if (ppe_stats.hasOwnProperty('PPE_NUM')) {
poll.add(function () {
return L.resolveDefault(getMTKPPEStatus()).then(function (res) {
var ppe_num = parseInt(res[0].PPE_NUM);
for (var i=0; i<ppe_num; i++) {
var ppe_bar = document.getElementById(`ppe${i}_entry`);
ppe_bar.innerHTML = E('td', {},
progressbar(res[0][`BIND_PPE${i}`], res[0][`ALL_PPE${i}`])).innerHTML;
}
});
}, 3);
var ppe_num = parseInt(ppe_stats.PPE_NUM);
for (var i=0; i<ppe_num; i++) {
acc_status.appendChild(E('tr', {}, [
E('td', { 'width': '33%' }, `PPE${i} ` + _('Bind Entrys')),
E('td', {'id': `ppe${i}_entry` },
progressbar(ppe_stats[`BIND_PPE${i}`], ppe_stats[`ALL_PPE${i}`]))
]));
}
}
return E('fieldset', { 'class': 'cbi-section' }, [
E('legend', {}, _('Acceleration Status')),
acc_status
]);
}
s = m.section(form.NamedSection, 'config', 'turboacc');
o = s.option(form.ListValue, 'fastpath', _('Fastpath engine'),
_('The offloading engine for routing/NAT.'));
o.value('disabled', _('Disable'));
if (features.hasFLOWOFFLOADING)
o.value('flow_offloading', _('Flow offloading'));
if (features.hasFASTCLASSIFIER)
o.value('fast_classifier', _('Fast classifier'));
if (features.hasSHORTCUTFECM)
o.value('shortcut_fe_cm', _('SFE connection manager'));
if (features.hasMEDIATEKHNAT)
o.value('mediatek_hnat', _('MediaTek HNAT'));
o.default = 'disabled';
o.rmempty = false;
o.onchange = function(ev, section_id, value) {
var desc = ev.target.nextElementSibling;
if (value === 'flow_offloading')
desc.innerHTML = _('Software based offloading for routing/NAT.');
else if (value === 'fast_classifier')
desc.innerHTML = _('Fast classifier connection manager for the shortcut forwarding engine.');
else if (value === 'shortcut_fe_cm')
desc.innerHTML = _('Simple connection manager for the shortcut forwarding engine.');
else if (value === 'mediatek_hnat')
desc.innerHTML = _('MediaTek\'s open source hardware offloading engine.');
else
desc.innerHTML = _('The offloading engine for routing/NAT.');
}
o = s.option(form.Flag, 'fastpath_fo_hw', _('Hardware flow offloading'),
_('Requires hardware NAT support. Implemented at least for mt7621.'));
o.default = o.disabled;
o.rmempty = false;
o.depends('fastpath', 'flow_offloading');
o = s.option(form.Flag, 'fastpath_fc_br', _('Bridge Acceleration'),
_('Enable bridge acceleration (may be functional conflict with bridge-mode VPN server).'));
o.default = o.disabled;
o.rmempty = false;
o.depends('fastpath', 'fast_classifier');
if (features.hasIPV6) {
o = s.option(form.Flag, 'fastpath_fc_ipv6', _('IPv6 acceleration'),
_('Enable IPv6 Acceleration.'));
o.default = o.disabled;
o.rmempty = false;
o.depends('fastpath', 'fast_classifier');
}
o = s.option(form.Flag, 'fastpath_mh_eth_hnat', _('Enable ethernet HNAT'),
_('Enable hardware offloading for wired connections.'));
o.default = o.enabled;
o.rmempty = false;
o.depends('fastpath', 'mediatek_hnat');
o = s.option(form.Flag, 'fastpath_mh_eth_hnat_v6', _('Enable ethernet IPv6 HNAT'),
_('Enable hardware offloading for wired IPv6 connections.'));
o.default = o.enabled;
o.rmempty = false;
o.depends('fastpath_mh_eth_hnat', '1');
o = s.option(form.Value, 'fastpath_mh_eth_hnat_ap', _('Enable AP Mode'),
_('Fill in ip to enable AP Mode(reboot needed)'));
o.optional = true;
o.depends('fastpath_mh_eth_hnat', '1');
o = s.option(form.Value, 'fastpath_mh_eth_hnat_bind_rate', _('HNAT bind rate threshold (pps)'),
_('The smaller the threshold, the easier it is for the connection to be accelerated.'));
o.optional = true;
o.datatype = 'range(1,30)';
o.placeholder = 30;
o.depends('fastpath_mh_eth_hnat', '1');
o = s.option(form.ListValue, 'fastpath_mh_eth_hnat_ppenum', _('Number of HNAT PPE'),
_('Apply this setting after reboot.'));
o.rmempty = false;
o.value(1);
o.value(2);
o.default = 2;
o.depends('fastpath_mh_eth_hnat', '1');
o = s.option(form.ListValue, 'fullcone', _('Full cone NAT'),
_('Full cone NAT (NAT1) can improve gaming performance effectively.'));
o.value('0', _('Disable'))
o.value('2', _('Boardcom_FULLCONE_NAT'));
o.default = '0';
o.rmempty = false;
o = s.option(form.ListValue, 'tcpcca', _('TCP CCA'),
_('TCP congestion control algorithm.'));
for (var i of features.hasTCPCCA.split(' ').sort())
o.value(i);
o.default = 'cubic';
o.rmempty = false;
return m.render();
}
});

View File

@ -0,0 +1,185 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:91
msgid "Acceleration Status"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:191
msgid "Boardcom_FULLCONE_NAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:151
msgid "Bridge Acceleration"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:95
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:99
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:103
msgid "Collecting data..."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:120
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:188
msgid "Disable"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:57
msgid "Disabled"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:159
msgid "Enable IPv6 Acceleration."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:177
msgid "Enable AP Mode"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:178
msgid "Fill in ip to enable AP Mode(reboot needed)"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:183
msgid "HNAT bind rate threshold (pps)"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:184
msgid "The smaller the threshold, the easier it is for the connection to be accelerated."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:152
msgid ""
"Enable bridge acceleration (may be functional conflict with bridge-mode VPN "
"server)."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:165
msgid "Enable ethernet HNAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:171
msgid "Enable ethernet IPv6 HNAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:172
msgid "Enable hardware offloading for wired IPv6 connections."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:166
msgid "Enable hardware offloading for wired connections."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:178
msgid "Enable hardware offloading for wireless connections."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:177
msgid "Enable wireless HNAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:124
msgid "Fast classifier"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:136
msgid "Fast classifier connection manager for the shortcut forwarding engine."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:94
msgid "FastPath Engine"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:118
msgid "Fastpath engine"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:122
msgid "Flow offloading"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:98
msgid "Full Cone NAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:186
msgid "Full cone NAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:187
msgid "Full cone NAT (NAT1) can improve gaming performance effectively."
msgstr ""
#: applications/luci-app-turboacc/root/usr/share/rpcd/acl.d/luci-app-turboacc.json:3
msgid "Grant UCI access for luci-app-turboacc"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:145
msgid "Hardware flow offloading"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:158
msgid "IPv6 acceleration"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:128
msgid "MediaTek HNAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:140
msgid "MediaTek's open source hardware offloading engine."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:74
msgid "Open source flow offloading engine (fast path or hardware NAT)."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:179
msgid "Redirect to wireless settings"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:146
msgid "Requires hardware NAT support. Implemented at least for mt7621."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:126
msgid "SFE connection manager"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:138
msgid "Simple connection manager for the shortcut forwarding engine."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:134
msgid "Software based offloading for routing/NAT."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:102
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:195
msgid "TCP CCA"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:196
msgid "TCP congestion control algorithm."
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:119
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:142
msgid "The offloading engine for routing/NAT."
msgstr ""
#: applications/luci-app-turboacc/root/usr/share/luci/menu.d/luci-app-turboacc.json:3
msgid "TurboACC"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:73
msgid "TurboACC settings"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:190
msgid "XT_FULLCONE_NAT"
msgstr ""
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:191
msgid "Boardcom_FULLCONE_NAT"
msgstr ""

View File

@ -0,0 +1,200 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh-Hans\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:91
msgid "Acceleration Status"
msgstr "加速状态"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:191
msgid "Boardcom_FULLCONE_NAT"
msgstr "Boardcom_FULLCONE_NAT(更低的CPU占用)"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:151
msgid "Bridge Acceleration"
msgstr "桥接加速"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:95
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:99
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:103
msgid "Collecting data..."
msgstr "正在收集数据…"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:120
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:188
msgid "Disable"
msgstr "禁用"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:57
msgid "Disabled"
msgstr "已禁用"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:159
msgid "Enable IPv6 Acceleration."
msgstr "启用 IPv6 加速。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:152
msgid ""
"Enable bridge acceleration (may be functional conflict with bridge-mode VPN "
"server)."
msgstr "启用桥接加速(可能会与桥接模式的 VPN 服务器冲突)。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:165
msgid "Enable ethernet HNAT"
msgstr "启用以太网 HNAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:171
msgid "Enable ethernet IPv6 HNAT"
msgstr "启用以太网 IPv6 HNAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:172
msgid "Enable hardware offloading for wired IPv6 connections."
msgstr "为有线 IPv6 连接启用硬件加速。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:177
msgid "Enable AP Mode"
msgstr "启用AP模式"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:178
msgid "Fill in ip to enable AP Mode(reboot needed)"
msgstr "填写IP将启动AP模式同网段不重复ip,需重启后生效.对于无线桥接请桥接完成后再启用AP模式)"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:183
msgid "HNAT bind rate threshold (pps)"
msgstr "HNAT连接速率绑定阈值(pps)"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:184
msgid "The smaller the threshold, the easier it is for the connection to be accelerated."
msgstr "阈值越小,连接越容易被加速。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:166
msgid "Enable hardware offloading for wired connections."
msgstr "为有线连接启用硬件加速。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:178
msgid "Enable hardware offloading for wireless connections."
msgstr "为无线连接启用硬件加速。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:177
msgid "Enable wireless HNAT"
msgstr "启用无线 HNAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:124
msgid "Fast classifier"
msgstr "Fast classifier"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:136
msgid "Fast classifier connection manager for the shortcut forwarding engine."
msgstr "快速转发引擎SFE的 fast classifier 连接管理器。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:94
msgid "FastPath Engine"
msgstr "快速转发引擎"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:118
msgid "Fastpath engine"
msgstr "快速转发引擎"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:122
msgid "Flow offloading"
msgstr "Flow offloading"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:98
msgid "Full Cone NAT"
msgstr "全锥形 NAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:186
msgid "Full cone NAT"
msgstr "全锥形 NAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:187
msgid "Full cone NAT (NAT1) can improve gaming performance effectively."
msgstr "Full cone NATNAT1可以有效提升游戏体验。"
#: applications/luci-app-turboacc/root/usr/share/rpcd/acl.d/luci-app-turboacc.json:3
msgid "Grant UCI access for luci-app-turboacc"
msgstr "授予 luci-app-turboacc 访问 UCI 配置的权限。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:145
msgid "Hardware flow offloading"
msgstr "硬件流量分载"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:158
msgid "IPv6 acceleration"
msgstr "IPv6 加速"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:128
msgid "MediaTek HNAT"
msgstr "MediaTek HNAT"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:140
msgid "MediaTek's open source hardware offloading engine."
msgstr "由联发科实现的开源硬件流量分载引擎。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:74
msgid "Open source flow offloading engine (fast path or hardware NAT)."
msgstr "开源流量分载引擎(快速转发或硬件 NAT。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:179
msgid "Redirect to wireless settings"
msgstr "跳转到无线设置"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:146
msgid "Requires hardware NAT support. Implemented at least for mt7621."
msgstr "需要硬件 NAT 支持。目前 mt7621 已实现。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:126
msgid "SFE connection manager"
msgstr "SFE connection manager"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:138
msgid "Simple connection manager for the shortcut forwarding engine."
msgstr "快速转发引擎SFE的简单连接管理器。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:134
msgid "Software based offloading for routing/NAT."
msgstr "基于软件的 路由/NAT 分载。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:102
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:195
msgid "TCP CCA"
msgstr "TCP 拥塞控制算法"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:196
msgid "TCP congestion control algorithm."
msgstr "TCP 拥塞控制算法。"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:119
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:142
msgid "The offloading engine for routing/NAT."
msgstr "用于 路由/NAT 的分载引擎。"
#: applications/luci-app-turboacc/root/usr/share/luci/menu.d/luci-app-turboacc.json:3
msgid "TurboACC"
msgstr "网络加速"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:73
msgid "TurboACC settings"
msgstr "网络加速设置"
#: applications/luci-app-turboacc/htdocs/luci-static/resources/view/turboacc.js:190
msgid "XT_FULLCONE_NAT"
msgstr "XT_FULLCONE_NAT(更佳的兼容性)"
msgid "Apply this setting after reboot."
msgstr "重启后应用此项设置。"
msgid "Number of HNAT PPE"
msgstr "HNAT PPE数量"
msgid "Bind Entrys"
msgstr "已绑定连接数"

View File

@ -0,0 +1,2 @@
config turboacc 'config'

View File

@ -0,0 +1,127 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2018 Lean <coolsnowwolf@gmail.com>
# Copyright (C) 2019-2022 Tianling Shen <cnsztl@immortalwrt.org>
START=90
STOP=10
USE_PROCD=1
start_service() {
config_load "turboacc"
local fastpath
config_get fastpath "config" "fastpath"
if [ "$fastpath" != "fast_classifier" ] && lsmod | grep -q "fast_classifier"; then
echo "0" > "/sys/fast_classifier/skip_to_bridge_ingress" 2>"/dev/null"
rm -f "/dev/sfe_ipv6"
rmmod "fast_classifier" 2>"/dev/null"
fi
if [ "$fastpath" != "shortcut_fe_cm" ] && lsmod | grep -q "shortcut_fe_cm"; then
rmmod "shortcut_fe_cm" 2>"/dev/null"
fi
if [ "$fastpath" != "mediatek_hnat" ] && lsmod | grep -q "mtkhnat"; then
echo "0" > "/sys/kernel/debug/hnat/hook_toggle" 2>"/dev/null"
fi
case "$fastpath" in
"fast_classifier")
local fastpath_fc_br fastpath_fc_ipv6
config_get_bool fastpath_fc_br "config" "fastpath_fc_br" "0"
config_get_bool fastpath_fc_ipv6 "config" "fastpath_fc_ipv6" "0"
lsmod | grep -q "fast_classifier" || modprobe "fast_classifier" 2>"/dev/null"
echo "$fastpath_fc_br" > "/sys/fast_classifier/skip_to_bridge_ingress" 2>"/dev/null"
if [ "$fastpath_fc_ipv6" -eq "1" ]; then
[ -e "/dev/sfe_ipv6" ] || mknod "/dev/sfe_ipv6" "c" "$(cat "/sys/sfe_ipv6/debug_dev")" "0"
else
[ ! -e "/dev/sfe_ipv6" ] || rm -f "/dev/sfe_ipv6"
fi
;;
"shortcut_fe_cm")
lsmod |grep -q "shortcut_fe_cm" || modprobe "shortcut_fe_cm" 2>"/dev/null"
;;
"mediatek_hnat")
local fastpath_mh_eth_hnat
local hnat_path="/sys/kernel/debug/hnat"
config_get_bool "fastpath_mh_eth_hnat" "config" "fastpath_mh_eth_hnat" "1"
echo "$fastpath_mh_eth_hnat" > "$hnat_path/hook_toggle"
if [ "$fastpath_mh_eth_hnat" -eq "1" ]; then
local fastpath_mh_eth_hnat_v6 fastpath_mh_eth_hnat_ap fastpath_mh_eth_hnat_bind_rate
config_get_bool "fastpath_mh_eth_hnat_v6" "config" "fastpath_mh_eth_hnat_v6" "1"
echo "8 $fastpath_mh_eth_hnat_v6" > "$hnat_path/hnat_setting"
config_get "fastpath_mh_eth_hnat_bind_rate" "config" "fastpath_mh_eth_hnat_bind_rate" "30"
echo "11 $fastpath_mh_eth_hnat_bind_rate" > "$hnat_path/hnat_setting"
config_get "fastpath_mh_eth_hnat_ap" "config" "fastpath_mh_eth_hnat_ap" ""
fi
;;
esac
local fullcone
config_get "fullcone" "config" "fullcone" "2"
echo "$fullcone" > /proc/sys/net/netfilter/nf_conntrack_nat_mode
local tcpcca
config_get "tcpcca" "config" "tcpcca" "cubic"
sysctl -w net.ipv4.tcp_congestion_control="$tcpcca" >"/dev/null"
uci -q commit "firewall"
/etc/init.d/firewall restart >"/dev/null" 2>&1
available_interfaces=""
for iface in eth0 eth1 wan; do
if ifconfig $iface 2>&1 | grep -qv "error fetching interface information"; then
echo "$iface interface detected."
available_interfaces="$available_interfaces $iface"
else
echo "$iface interface not found."
fi
done
if echo "$fastpath_mh_eth_hnat_ap" | grep -qE '^([0-9]{1,3}\.){3}[0-9]{1,3}$'; then
echo "Valid IPv4 address detected: $fastpath_mh_eth_hnat_ap"
uci delete network.wan
uci delete network.wwan
uci delete network.wan6
current_ports=$(uci get network.@device[0].ports)
echo "Current bridge ports: $current_ports"
new_ports="$current_ports"
for port in $available_interfaces; do
if echo "$current_ports" | grep -qw "$port"; then
echo "Port $port is already part of the bridge"
else
echo "Adding port $port to the bridge"
new_ports="$new_ports $port"
fi
done
uci set network.@device[0].ports="$new_ports"
uci set dhcp.lan.ignore=1
uci set network.lan.ipaddr="$fastpath_mh_eth_hnat_ap"
uci set wireless.wifinet1.network='lan'
uci set wireless.wifinet2.network='lan'
echo "Committing changes"
uci commit
else
echo "Invalid IPv4 address: $fastpath_mh_eth_hnat_ap"
fi
}
reload_service() {
start
}
stop_service() {
stop
}
service_triggers() {
procd_add_reload_trigger "turboacc"
}

View File

@ -0,0 +1,37 @@
#!/bin/sh
kernel_ver="$(uname -r)"
if [ -e "/lib/modules/$kernel_ver/mtkhnat.ko" ]; then
uci -q set "turboacc.config.fastpath"="mediatek_hnat"
uci -q set "turboacc.config.fastpath_mh_eth_hnat"="1"
uci -q set "turboacc.config.fastpath_mh_eth_hnat_v6"="1"
uci -q set "turboacc.config.fastpath_mh_eth_hnat_macvlan"="0"
uci -q set "turboacc.config.fastpath_mh_eth_hnat_bind_rate"="30"
uci -q set "turboacc.config.fastpath_mh_eth_hnat_ppenum"="2"
elif [ -e "/lib/modules/$kernel_ver/fast-classifier.ko" ]; then
uci -q set "turboacc.config.fastpath"="fast_classifier"
uci -q set "turboacc.config.fastpath_fc_br"="1"
if [ -d "/proc/sys/net/ipv6" ]; then
uci -q set "turboacc.config.fastpath_fc_ipv6"="1"
else
uci -q set "turboacc.config.fastpath_fc_ipv6"="0"
fi
elif [ -e "/lib/modules/$kernel_ver/shortcut-fe-cm.ko" ]; then
uci -q set "turboacc.config.fastpath"="shortcut_fe_cm"
else
uci -q set "turboacc.config.fastpath"="none"
fi
uci -q set "turboacc.config.fullcone"="1"
uci -q commit "turboacc"
uci -q batch <<-EOF >"/dev/null"
delete ucitrack.@turboacc[-1]
add ucitrack turboacc
EOF
rm -f /tmp/luci-indexcache
exit 0

View File

@ -0,0 +1,155 @@
#!/usr/bin/env lua
-- Copyright (C) 2022 ImmortalWrt.org
local json = require "luci.jsonc"
local fs = require "nixio.fs"
local util = require "luci.util"
local sys = require "luci.sys"
string.trim = util.trim
local function readfile(path)
local s = fs.readfile(path)
return s and (s:gsub("^%s+", ""):gsub("%s+$", ""))
end
local methods = {
getSystemFeatures = {
call = function()
local boardinfo = util.ubus("system", "board") or {}
local features = {
hasIPV6 = fs.access("/proc/net/ipv6_route"),
-- disable FLOWOFFLOADING for mt798x
hasFLOWOFFLOADING = false,
hasFASTCLASSIFIER = fs.access("/lib/modules/" .. boardinfo.kernel .. "/fast-classifier.ko"),
hasSHORTCUTFECM = fs.access("/lib/modules/" .. boardinfo.kernel .. "/shortcut-fe-cm.ko"),
hasMEDIATEKHNAT = fs.access("/lib/modules/" .. boardinfo.kernel .. "/mtkhnat.ko"),
hasXTFULLCONENAT = fs.access("/lib/modules/" .. boardinfo.kernel .. "/xt_FULLCONENAT.ko"),
hasTCPCCA = readfile("/proc/sys/net/ipv4/tcp_available_congestion_control")
}
print(json.stringify(features))
end
},
getFastPathStat = {
call = function()
local fptype
if fs.access("/sys/module/xt_FLOWOFFLOAD/refcnt") and
(readfile("/sys/module/xt_FLOWOFFLOAD/refcnt") or "0") ~= "0" then
fptype = "Flow offloading"
elseif fs.stat("/sys/module/fast_classifier", "type") == "dir" then
fptype = "Fast classifier"
elseif fs.stat("/sys/module/shortcut_fe_cm", "type") == "dir" then
fptype = "Shortcut-FE CM"
elseif fs.stat("/sys/kernel/debug/hnat", "type") == "dir" then
local ethernet_hnat = readfile("/sys/kernel/debug/hnat/hook_toggle")
ethernet_hnat = (ethernet_hnat ~= "enabled") and " / Ethernet HNAT Disabled" or ""
local wireless_hnat = (sys.call("grep -q 'WHNAT=1' '/etc/wireless/mediatek/'*_card*.dat") ~= 0) and " / Wireless HNAT Disabled" or ""
if (ethernet_hnat == "") or (wireless_hnat == "") then
fptype = "MediaTek HNAT" .. ethernet_hnat .. wireless_hnat
end
end
print(json.stringify({ type = fptype }))
end
},
getFullConeStat = {
call = function()
local fctype
if fs.access("/sys/module/xt_FULLCONENAT/refcnt") and
(readfile("/sys/module/xt_FULLCONENAT/refcnt") or "0") ~= "0" then
fctype = "xt_FULLCONENAT"
elseif fs.access("/proc/sys/net/netfilter/nf_conntrack_nat_mode") and
(readfile("/proc/sys/net/netfilter/nf_conntrack_nat_mode") or "0") ~= "0" then
fctype = "Boardcom Fullcone"
end
print(json.stringify({ type = fctype }))
end
},
getTCPCCAStat = {
call = function()
local ccatype = readfile("/proc/sys/net/ipv4/tcp_congestion_control")
ccatype = ccatype and ccatype:upper() or nil
print(json.stringify({ type = ccatype }))
end
},
getMTKPPEStat = {
call = function()
local ppe_stat = {}
local ppe_path = "/sys/kernel/debug/hnat/hnat_stats"
local fd = io.open(ppe_path, 'r')
if fd then
for line in fd:lines() do
local i = string.find(line, "=")
if i then
ppe_stat[string.sub(line,1,i-1)] = string.sub(line,i+1)
end
end
fd:close()
end
print(json.stringify(ppe_stat))
end
}
}
local function parseInput()
local parse = json.new()
local done, err
while true do
local chunk = io.read(4096)
if not chunk then
break
elseif not done and not err then
done, err = parse:parse(chunk)
end
end
if not done then
print(json.stringify({ error = err or "Incomplete input" }))
os.exit(1)
end
return parse:get()
end
local function validateArgs(func, uargs)
local method = methods[func]
if not method then
print(json.stringify({ error = "Method not found" }))
os.exit(1)
end
if type(uargs) ~= "table" then
print(json.stringify({ error = "Invalid arguments" }))
os.exit(1)
end
uargs.ubus_rpc_session = nil
local k, v
local margs = method.args or {}
for k, v in pairs(uargs) do
if margs[k] == nil or
(v ~= nil and type(v) ~= type(margs[k]))
then
print(json.stringify({ error = "Invalid arguments" }))
os.exit(1)
end
end
return method
end
if arg[1] == "list" then
local _, method, rv = nil, nil, {}
for _, method in pairs(methods) do rv[_] = method.args or {} end
print((json.stringify(rv):gsub(":%[%]", ":{}")))
elseif arg[1] == "call" then
local args = parseInput()
local method = validateArgs(arg[2], args)
local result, code = method.call(args)
print((json.stringify(result):gsub("^%[%]$", "{}")))
os.exit(code or 0)
end

View File

@ -0,0 +1,13 @@
{
"admin/network/turboacc": {
"title": "TurboACC",
"action": {
"type": "view",
"path": "turboacc"
},
"depends": {
"acl": [ "luci-app-turboacc" ],
"uci": { "turboacc": true }
}
}
}

View File

@ -0,0 +1,14 @@
{
"luci-app-turboacc": {
"description": "Grant UCI access for luci-app-turboacc",
"read": {
"ubus": {
"luci.turboacc": [ "getSystemFeatures", "getFastPathStat", "getFullConeStat", "getTCPCCAStat", "getMTKPPEStat" ]
},
"uci": [ "turboacc" ]
},
"write": {
"uci": [ "turboacc" ]
}
}
}

View File

@ -0,0 +1,14 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=Universal Plug & Play configuration module
LUCI_DEPENDS:=+miniupnpd-mtk-adjust +rpcd-mod-ucode
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,74 @@
'use strict';
'require baseclass';
'require dom';
'require rpc';
'require uci';
var callUpnpGetStatus, callUpnpDeleteRule, handleDelRule;
callUpnpGetStatus = rpc.declare({
object: 'luci.upnp',
method: 'get_status',
expect: { }
});
callUpnpDeleteRule = rpc.declare({
object: 'luci.upnp',
method: 'delete_rule',
params: [ 'token' ],
expect: { result : "OK" },
});
handleDelRule = function(num, ev) {
dom.parent(ev.currentTarget, '.tr').style.opacity = 0.5;
ev.currentTarget.classList.add('spinning');
ev.currentTarget.disabled = true;
ev.currentTarget.blur();
callUpnpDeleteRule(num);
};
return baseclass.extend({
title: _('Active UPnP Redirects'),
load: function() {
return Promise.all([
callUpnpGetStatus(),
]);
},
render: function(data) {
var table = E('table', { 'class': 'table', 'id': 'upnp_status_table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Protocol')),
E('th', { 'class': 'th' }, _('External Port')),
E('th', { 'class': 'th' }, _('Client Address')),
E('th', { 'class': 'th' }, _('Host')),
E('th', { 'class': 'th' }, _('Client Port')),
E('th', { 'class': 'th' }, _('Description')),
E('th', { 'class': 'th cbi-section-actions' }, '')
])
]);
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(table, rows, E('em', _('There are no active redirects.')));
return table;
}
});

View File

@ -0,0 +1,215 @@
'use strict';
'require view';
'require dom';
'require poll';
'require uci';
'require rpc';
'require form';
var callInitAction, callUpnpGetStatus, callUpnpDeleteRule, handleDelRule;
callInitAction = rpc.declare({
object: 'luci',
method: 'setInitAction',
params: [ 'name', 'action' ],
expect: { result: false }
});
callUpnpGetStatus = rpc.declare({
object: 'luci.upnp',
method: 'get_status',
expect: { }
});
callUpnpDeleteRule = rpc.declare({
object: 'luci.upnp',
method: 'delete_rule',
params: [ 'token' ],
expect: { result : "OK" },
});
handleDelRule = function(num, ev) {
dom.parent(ev.currentTarget, '.tr').style.opacity = 0.5;
ev.currentTarget.classList.add('spinning');
ev.currentTarget.disabled = true;
ev.currentTarget.blur();
callUpnpDeleteRule(num);
};
return view.extend({
load: function() {
return Promise.all([
callUpnpGetStatus(),
uci.load('upnpd')
]);
},
poll_status: function(nodes, data) {
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(nodes.querySelector('#upnp_status_table'), rows, E('em', _('There are no active redirects.')));
return;
},
render: function(data) {
var m, s, o;
m = new form.Map('upnpd', [_('Universal Plug & Play')],
_('UPnP allows clients in the local network to automatically configure the router.'));
s = m.section(form.GridSection, '_active_rules');
s.render = L.bind(function(view, section_id) {
var table = E('table', { 'class': 'table cbi-section-table', 'id': 'upnp_status_table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Protocol')),
E('th', { 'class': 'th' }, _('External Port')),
E('th', { 'class': 'th' }, _('Client Address')),
E('th', { 'class': 'th' }, _('Host')),
E('th', { 'class': 'th' }, _('Client Port')),
E('th', { 'class': 'th' }, _('Description')),
E('th', { 'class': 'th cbi-section-actions' }, '')
])
]);
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(table, rows, E('em', _('There are no active redirects.')));
return E('div', { 'class': 'cbi-section cbi-tblsection' }, [
E('h3', _('Active UPnP Redirects')), table ]);
}, o, this);
s = m.section(form.NamedSection, 'config', 'upnpd', _('MiniUPnP settings'));
s.addremove = false;
s.tab('general', _('General Settings'));
s.tab('advanced', _('Advanced Settings'));
o = s.taboption('general', form.Flag, 'enabled', _('Start UPnP and NAT-PMP service'));
o.rmempty = false;
s.taboption('general', form.Flag, 'enable_upnp', _('Enable UPnP functionality')).default = '1'
s.taboption('general', form.Flag, 'enable_natpmp', _('Enable NAT-PMP functionality')).default = '1'
s.taboption('general', form.Flag, 'secure_mode', _('Enable secure mode'),
_('Allow adding forwards only to requesting ip addresses')).default = '1'
s.taboption('general', form.Flag, 'igdv1', _('Enable IGDv1 mode'),
_('Advertise as IGDv1 device instead of IGDv2')).default = '0'
s.taboption('general', form.Flag, 'log_output', _('Enable additional logging'),
_('Puts extra debugging information into the system log'))
s.taboption('general', form.Value, 'download', _('Downlink'),
_('Value in KByte/s, informational only')).rmempty = true
s.taboption('general', form.Value, 'upload', _('Uplink'),
_('Value in KByte/s, informational only')).rmempty = true
o = s.taboption('general', form.Value, 'port', _('Port'))
o.datatype = 'port'
o.default = 5000
s.taboption('advanced', form.Flag, 'system_uptime', _('Report system instead of daemon uptime')).default = '1'
s.taboption('advanced', form.Value, 'uuid', _('Device UUID'))
s.taboption('advanced', form.Value, 'serial_number', _('Announced serial number'))
s.taboption('advanced', form.Value, 'model_number', _('Announced model number'))
o = s.taboption('advanced', form.Value, 'notify_interval', _('Notify interval'))
o.datatype = 'uinteger'
o.placeholder = 30
o = s.taboption('advanced', form.Value, 'clean_ruleset_threshold', _('Clean rules threshold'))
o.datatype = 'uinteger'
o.placeholder = 20
o = s.taboption('advanced', form.Value, 'clean_ruleset_interval', _('Clean rules interval'))
o.datatype = 'uinteger'
o.placeholder = 600
o = s.taboption('advanced', form.Value, 'presentation_url', _('Presentation URL'))
o.placeholder = 'http://192.168.1.1/'
o = s.taboption('advanced', form.Value, 'upnp_lease_file', _('UPnP lease file'))
o.placeholder = '/var/run/miniupnpd.leases'
s.taboption('advanced', form.Flag, 'use_stun', _('Use STUN'))
o = s.taboption('advanced', form.Value, 'stun_host', _('STUN Host'))
o.depends('use_stun', '1');
o.datatype = 'host'
o = s.taboption('advanced', form.Value, 'stun_port', _('STUN Port'))
o.depends('use_stun', '1');
o.datatype = 'port'
o.placeholder = '0-65535'
s = m.section(form.GridSection, 'perm_rule', _('MiniUPnP ACLs'),
_('ACLs specify which external ports may be redirected to which internal addresses and ports'))
s.sortable = true
s.anonymous = true
s.addremove = true
s.option(form.Value, 'comment', _('Comment'))
o = s.option(form.Value, 'ext_ports', _('External ports'))
o.datatype = 'portrange'
o.placeholder = '0-65535'
o = s.option(form.Value, 'int_addr', _('Internal addresses'))
o.datatype = 'ip4addr'
o.placeholder = '0.0.0.0/0'
o = s.option(form.Value, 'int_ports', _('Internal ports'))
o.datatype = 'portrange'
o.placeholder = '0-65535'
o = s.option(form.ListValue, 'action', _('Action'))
o.value('allow', _('Allow'));
o.value('deny', _('Deny'));
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);
return nodes;
}, this, m));
}
});

View File

@ -0,0 +1,238 @@
msgid ""
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: 2024-07-16 16:41+0000\n"
"Last-Translator: Rex_sa <rex.sa@pm.me>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ar/>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.7-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "إجراء"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "إعدادات متقدمة"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr "احدف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "الوصف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "الاعدادات العامة"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "ضيف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "المنفذ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "البروتوكول"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "مجهول"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,237 @@
msgid ""
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: 2024-02-28 14:29+0000\n"
"Last-Translator: Boyan Alexiev <nneauu@gmail.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/bg/>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.5-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Действие"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Разширени настройки"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr "Изтрий"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Описание"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Общи настройки"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "Хост"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Порт"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "Протокол"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Неизвестно"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,237 @@
msgid ""
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: 2021-10-08 18:54+0000\n"
"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/bn_BD/>\n"
"Language: bn_BD\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "উন্নত সেটিংস"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "বর্ণনা"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "সাধারণ সেটিংস"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "পোর্ট"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "প্রোটোকল"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "অজানা"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,243 @@
# upnp.pot
# generated from ./applications/luci-upnp/luasrc/i18n/upnp.en.lua
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
"PO-Revision-Date: 2021-09-17 06:52+0000\n"
"Last-Translator: Roger Pueyo Centelles <weblate@rogerpueyo.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ca/>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Els ACL especifiquen quins ports externs es poden redirigir a quines adreces "
"i ports interns"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acció"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redireccions UPnP actives"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configuració avançada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
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:150
msgid "Announced model number"
msgstr "Número de model anunciat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de sèrie anunciat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval de neteja de regles"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Llindar de neteja de regles"
#: 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:85
msgid "Client Address"
msgstr "Adreça de client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port de client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commentari"
#: 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:106
msgid "Delete"
msgstr "Suprimeix"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descripció"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID de dispositiu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Enllaç de baixada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Habilita la funcionalitat NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Habilita la funcionalitat UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Habilita el registre addicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Habilita mode segur"
#: 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:84
msgid "External Port"
msgstr "Port extern"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ports externs"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Paràmetres generals"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "Amfitrió"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adreces internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Ports interns"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs de MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Ajusts de MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval de notificació"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "Protocol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Reporta el temps actiu del sistema en lloc del del dimoni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Inicia el servei UPnP i NAP-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "No hi ha redireccions actives."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permet als clients de la xarxa local configurar automàticament el "
"router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fitxer d'arrendament UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconegut"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Enllaç de pujada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor en KByte/s, només per informació"

View File

@ -0,0 +1,238 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2024-07-08 22:10+0000\n"
"Last-Translator: Milan <cirhanmilan@seznam.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/cs/>\n"
"Language: cs\n"
"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>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.7-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL stanovují, které vnější porty by měly být přesměrovány na které vnitřní "
"adresy a porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Akce"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktivní přesměrování UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Pokročilé možnosti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Inzerovat jako IGDv1 zařízení místo IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Povolit přesměrování pouze na dotazující ip adresy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Oznámené číslo modelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Oznámené sériové číslo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval čištění pravidel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Práh čištění pravidel"
#: 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:85
msgid "Client Address"
msgstr "Adresa klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentář"
#: 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:106
msgid "Delete"
msgstr "Odstranit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Popis"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID zařízení"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Povolit režim IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Povolit funkčnost NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Povolit funkčnost UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Povolit přídavné logování"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Povolit bezpečný režim"
#: 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:84
msgid "External Port"
msgstr "Vnější port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Vnější porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Obecná nastavení"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Udělit oprávnění k procedůrám upnp"
#: 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:86
msgid "Host"
msgstr "Hostitel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Vnitřní adresy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Vnitřní porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL listy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Nastavení MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval oznamování"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Prezentační URL"
#: 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:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Vypisovat extra ladící informace do systémového záznamu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Hlásit uptime systému namísto uptime daemonu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN Hostitel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Spustit službu UPnP a NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Neexistují žádná aktivní přesměrování."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP umožňuje klientům v místní síti automaticky nakonfigurovat router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Soubor UPnP výpůjček"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Univerzální Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Neznámé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Použít STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Pouze informační hodnoty (v KByte/s)"

View File

@ -0,0 +1,241 @@
msgid ""
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: 2021-11-13 08:12+0000\n"
"Last-Translator: drax red <drax@outlook.dk>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/da/>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL'er angiver, hvilke eksterne porte der kan omdirigeres til hvilke interne "
"adresser og porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Handling"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP-omdirigeringer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Avancerede indstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
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:150
msgid "Announced model number"
msgstr "Annonceret modelnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Annonceret serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval for rene regler"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Tærskel for rene regler"
#: 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:85
msgid "Client Address"
msgstr "Klient adresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Klient port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: 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:106
msgid "Delete"
msgstr "Slet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beskrivelse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Enhedens UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Aktiver IGDv1-tilstand"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Aktiver NAT-PMP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Aktiver UPnP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Aktiver yderligere logning"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Aktiver sikker tilstand"
#: 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:84
msgid "External Port"
msgstr "Ekstern port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Eksterne porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Generelle indstillinger"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Giv adgang til upnp-procedurer"
#: 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:86
msgid "Host"
msgstr "Vært"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne adresser"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL'er"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-indstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Underretningsinterval"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL til præsentation"
#: 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:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Rapportere system i stedet for dæmonens oppetid"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN vært"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Start UPnP- og NAT-PMP-tjenesten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Der er ingen aktive omdirigeringer."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP gør det muligt for klienter i det lokale netværk at konfigurere "
"routeren automatisk."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP-lease-fil"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universelt plug &play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Ukendt"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Brug STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Værdi i KByte/s, kun til information"

View File

@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 17:57+0200\n"
"PO-Revision-Date: 2024-02-09 17:28+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.4-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACLs definieren, welche externen Ports zu welchen internen Adressen und "
"Ports weitergeleitet werden dürfen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Aktion"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP-Weiterleitungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr "Erlauben"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Nur Weiterleitungen zurück zum anfordernden Client zulassen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Angekündigte Modellnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Angekündigte Seriennummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Aufräumintervall für Weiterleitungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Aufräumschwellenwert für Weiterleitungen"
#: 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:85
msgid "Client Address"
msgstr "Clientadresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Clientport"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: 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:106
msgid "Delete"
msgstr "Löschen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Ablehnen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beschreibung"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Geräte-UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Download-Bandbreite"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 Modus aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP Funktionalität aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP Funktionalität aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Erweiterte Protokollierung aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Sicheren Modus aktivieren"
#: 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:84
msgid "External Port"
msgstr "Externer Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Externe Ports"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Allgemeine Einstellungen"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Zugriff auf UPNP-Prozeduren gewähren"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne Adressen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne Ports"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs der MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-Einstellungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Benachrichtigungsintervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Präsentations-URL"
#: 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:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Systemlaufzeit statt Prozesslaufzeit melden"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN-Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN-Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP und NAT-PMP Dienst starten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Es gibt keine aktiven Weiterleitungen."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP erlaubt es Clients im lokalen Netzwerk automatisch Port-Weiterleitungen "
"auf diesem Router einzurichten."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP Lease-Datei"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Unbekannt"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "STUN verwenden"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Wert in Kilobyte/s, nur informativ"

View File

@ -0,0 +1,237 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-28 02:08+0200\n"
"PO-Revision-Date: 2022-10-03 08:34+0000\n"
"Last-Translator: TakissX <pxatzidakis@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/el/>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Δράση"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Ρυθμίσεις για προχωρημένους"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Περιγραφή"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Γενικές ρυθμίσεις"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Θύρα"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "Πρωτόκολλο"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,237 @@
msgid ""
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: 2023-11-30 14:34+0000\n"
"Last-Translator: rygle <pittos@post.com>\n"
"Language-Team: English <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/en/>\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:41+0200\n"
"PO-Revision-Date: 2024-07-24 18:07+0000\n"
"Last-Translator: brodrigueznu <brodrigueznu@hotmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Los ACL especifican qué puertos externos pueden ser redirigidos hacia qué "
"direcciones y puertos internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acción"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecciones UPnP activas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Ajustes Avanzados"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Anunciarse como dispositivo IGDv1 en lugar de IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr "Permitir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permitir añadir redirecciones sólo a IPs que lo soliciten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número de modelo anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de serie anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalo de borrado de reglas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Umbral de borrado de reglas"
#: 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:85
msgid "Client Address"
msgstr "Dirección del cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Puerto del cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentario"
#: 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:106
msgid "Delete"
msgstr "Eliminar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Denegar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descripción"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID del dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Enlace descendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activar modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activar la funcionalidad NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activar la funcionalidad UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activar registro adicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activar modo seguro"
#: 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:84
msgid "External Port"
msgstr "Puerto externo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Puertos externos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Ajustes generales"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceder acceso a los procedimientos de upnp"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Direcciones internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Puertos internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Configuración MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de notificación"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Puerto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de presentación"
#: 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:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Informar del tiempo activo del sistema en vez de el del demonio"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Puerto STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Iniciar servicio UPnP y NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Sin redirecciones activas."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite a los clientes en la red local configurar automáticamente el "
"enrutador."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Tiempo de conexión UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconocido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Enlace ascendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilizar STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor en KBytes/s, sólo informativo"

View File

@ -0,0 +1,237 @@
msgid ""
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: 2022-04-21 23:00+0000\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/fi/>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Toiminta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktiivise UPnP-uudelleenohjaukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Lisäasetukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentti"
#: 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:106
msgid "Delete"
msgstr "Poista"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Kuvaus"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Laitteen UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Käytä IGDv1-tilaa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Käytä NAT-PMP-toiminnallisuutta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Käytä UPnP-toiminnallisuutta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr "Ulkoinen portti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ulkoiset portit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Yleiset asetukset"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "Palvelin"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Sisäiset osoitteet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Sisäiset portit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-asetukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Ilmoitusväli"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Portti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "Protokolla"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Käynnistä UPnP- ja NAT-PMP-palvelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Ei aktiivisia uudelleenohjauksia."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP-lainatiedosto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Tuntematon"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Lähetysyhteys"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Käytä STUN:ia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,244 @@
msgid ""
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: 2024-02-01 22:49+0000\n"
"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.4-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Les ACLs définissent quels ports externes peuvent être redirigés, vers "
"quelles adresses et ports internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Action"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirections UPnP actives"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Paramètres avancés"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
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:150
msgid "Announced model number"
msgstr "Numéro de modèle annoncé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Numéro de série annoncé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalle des règles de nettoyage"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Niveau des règles de nettoyage"
#: 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:85
msgid "Client Address"
msgstr "Adresse du client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port du client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commentaire"
#: 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:106
msgid "Delete"
msgstr "Effacer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Description"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID du périphérique"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Liaison descendante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activer le mode IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activer la fonctionnalité NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activer la fonctionnalité UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activer la journalisation additionnelle"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activer le mode sécurisé"
#: 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:84
msgid "External Port"
msgstr "Port externe"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ports externes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Réglages généraux"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Accorder l'accès aux procédures de upnp"
#: 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:86
msgid "Host"
msgstr "Hôte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adresses internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Ports internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Paramètres MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalle de notification"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de présentation"
#: 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:83
msgid "Protocol"
msgstr "Protocole"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon 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:172
msgid "STUN Host"
msgstr "Hôte STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Port STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Démarrer les services UPnP et NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Il n'y a pas de redirections actives."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permet à des clients du réseau local de configurer automatiquement le "
"routeur."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fichier des baux UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Inconnue"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Liaison montante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utiliser STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valeur en Ko/s, pour information seulement"

View File

@ -0,0 +1,235 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2023-09-07 02:50+0000\n"
"Last-Translator: Oren Bahar <shavitbit@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/he/>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "פעולה"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "הגדרות מתקדמות"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "תיאור"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "פתחה"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,237 @@
msgid ""
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: 2024-07-06 11:32+0000\n"
"Last-Translator: Sathvic <sathvic.p@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/hi/>\n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "उन्नत सेटिंग्स"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "अज्ञात"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2024-08-20 16:40+0000\n"
"Last-Translator: hmzs <hmzs@1szer1.hu>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/hu/>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.7\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
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"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Művelet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktív UPnP átirányítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Haladó beállítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Kizárólag a kérést küldő IP címre történő továbbítás hozzáadásának "
"engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Bejelentett modellszám"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Bejelentett sorozatszám"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Szabály törlési időköz"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Szabály törlési küszöbérték"
#: 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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Megjegyzés"
#: 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:106
msgid "Delete"
msgstr "Törlés"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Leírás"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Eszköz UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Befelé jövő kapcsolat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 mód engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP funkció engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP funkció engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
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:127
msgid "Enable secure mode"
msgstr "Biztonságos mód engedélyezése"
#: 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:84
msgid "External Port"
msgstr "Külső port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Külső portok"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Általános beállítások"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "Gép"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Belső címek"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Belső portok"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL-ek"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP beállítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Értesítési időköz"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Bemutató URL"
#: 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:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon 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:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP és NAT-PMP szolgáltatás elindítása"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nincsenek aktív átírányítások."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"Az UPnP lehetővé teszi a hálózatban lévő ügyfelek számára hogy automatikusan "
"beállítsák a routert."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP bérlet fájl"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Univerzális Plug and Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Ismeretlen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Kifelé menő kapcsolat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Érték KByte/s-ban, csak tájékoztató jellegű"

View File

@ -0,0 +1,241 @@
msgid ""
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: 2024-08-02 19:09+0000\n"
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/it/>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Le ACL specificano quali porte esterne possono essere redirezionate a quali "
"indirizzi e porte interni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Azione"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Attiva reindirizzamento UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Impostazioni avanzate"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Pubblicizza come dispositivo IGDv1 anziché IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr "Permetti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permetti l'aggiunta della mappatura solo agli indirizzi IP richiedenti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Numero modello annunciato"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Numero seriale annunciato"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Cancella le regole"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Pulisci le regole degli eventi"
#: 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:85
msgid "Client Address"
msgstr "Indirizzo IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commento"
#: 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:106
msgid "Delete"
msgstr "Elimina"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Nega"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrizione"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID del dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Abilita modalità IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Abilita il protocollo NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Abilita il protocollo UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Abilita log addizionale"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Abilita la modalità sicura"
#: 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:84
msgid "External Port"
msgstr "Porta Esterna"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porte Esterne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Impostazioni Generali"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Concedere l'accesso alle procedure upnp"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Indirizzi Interni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porte Interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACL MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Opzioni di MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervallo di notifica"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL di presentazione"
#: 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:83
msgid "Protocol"
msgstr "Protocollo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Mostra l'uptime del sistema invece del demone"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Avvia il servizo UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Non ci sono mappature attive."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permette ai dispositivi nella rete locale di configurare "
"automaticamente il router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "File di leasing UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universale"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Sconosciuto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Usa STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valori in KByte/s (informativo)"

View File

@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2024-03-28 23:40+0000\n"
"Last-Translator: Ioroi Kouhei <kouhei@ioroi.org>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ja/>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.5-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"アクセス制御リストACLは、どの外部ポートからどの内部アドレス及びポートへリ"
"ダイレクトするかを設定します。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "アクション"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "稼働中のUPnPリダイレクト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "詳細設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "IGDv2 ではなく IGDv1 デバイスとしてアドバタイズ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr "許可"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "要求元IPアドレスへの転送のみ、追加を許可します。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "通知するモデル番号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "通知するシリアル番号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "ルール消去間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr "クライアント・アドレス"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "クライアント・ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr "削除"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "拒否"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "説明"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "デバイス UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "ダウンリンク"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 モードを有効化"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "ログ機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr "外部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "外部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "一般設定"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "upnp プロシージャへのアクセスを許可"
#: 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:86
msgid "Host"
msgstr "ホスト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "内部アドレス"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "内部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnPアクセス制御リストACL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP 設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "通知間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "プレゼンテーションURL"
#: 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:83
msgid "Protocol"
msgstr "プロトコル"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "追加のデバッグ情報をシステムログへ挿入する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "サービスの起動時間の代わりにシステムの起動時間を使用する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN ホスト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP及びNAT-PMPサービスを開始する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "有効なリダイレクトはありません。"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータを"
"構成することができます。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP リースファイル"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "ユニバーサル プラグ & プレイ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "不明"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "アップリンク"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "STUN を使用"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "クライアントへの情報提供のみに使用される、KByte/sの値です"

View File

@ -0,0 +1,237 @@
msgid ""
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: 2023-10-04 03:38+0000\n"
"Last-Translator: Wonchul Kang <teshi85@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ko/>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "액션"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "고급 설정"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr "삭제"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "설명"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "기본 설정"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "호스트"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "포트"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "프로토콜"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,236 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2024-08-07 18:30+0000\n"
"Last-Translator: Džiugas Januševičius <dziugas1959@hotmail.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/lt/>\n"
"Language: lt\n"
"MIME-Version: 1.0\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%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.7-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Veiksmas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Pažangūs nustatymai"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr "Leisti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Paskelbtas modelio numeris"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Paskelbtas serijos numeris"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Išvalyti taisyklių intervalus"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Išvalyti taisyklių slenksčius"
#: 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:85
msgid "Client Address"
msgstr "Kliento adresas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Kliento prievadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentuoti"
#: 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:106
msgid "Delete"
msgstr "Ištrinti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Atmesti/Neprileisti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Aprašas/-ymas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Įrenginio „UUID“"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Įjungti „IGDv1“ režimą"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Įgalinti „NAT-PMP“ funkcionalumą"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Įgalinti „UPnP“ funkcionalumą"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Įjungti papildomą žurnalinimą"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Įjungti „saugųjį režimą“"
#: 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:84
msgid "External Port"
msgstr "Išorinis prievadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Išoriniai prievadai"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Bendri nustatymai"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Duoti prieigą prie „upnp procedures“"
#: 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:86
msgid "Host"
msgstr "Skleidėjas/Vedėjas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Vidiniai adresai"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Vidiniai prievadai"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "„MiniUPnP ACLs“"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "„MiniUPnP“ nustatymai"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Pranešimo intervalas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Prievadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Pateikties „URL“ saitas"
#: 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:83
msgid "Protocol"
msgstr "Protokolas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "„STUN“ skleidėjas/vedėjas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "„STUN“ prievadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Paleisti „UPnP“ ir „NAT-PMP“ tarnybą"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "„UPnP“"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Nežinoma/-s/-i"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Naudoti „STUN“"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Reikšmė kilobaitais per sekundę (KB/s), tik informacinis"

View File

@ -0,0 +1,237 @@
msgid ""
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: 2020-02-07 09:18+0000\n"
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/mr/>\n"
"Language: mr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "प्रगत सेटिंग्ज"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
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:106
msgid "Delete"
msgstr "हटवा"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "वर्णन"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "सामान्य सेटिंग्ज"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "पोर्ट"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "प्रोटोकॉल"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "अज्ञात"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "अपलिंक"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,235 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2024-01-22 09:21+0000\n"
"Last-Translator: Abdul Muizz Bin Abdul Jalil <abmuizz@gmail.com>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ms/>\n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Tindakan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Tetapan Lanjutan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
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:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Ulasan"
#: 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:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Keterangan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
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:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
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:86
msgid "Host"
msgstr "Hos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
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:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,238 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2024-01-01 08:05+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/nb_NO/>\n"
"Language: nb_NO\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.4-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL angir hvilke eksterne porter som kan bli viderekoblet, og til hvilke "
"interne adresser og porter."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Handling"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP Viderekoblinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Avanserte innstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Annonser som IGDv1-enhet istedenfor IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Tillat videkobling kun til IP adresser som ber om det"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Annonsert modellnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Annonsert serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Nullstill UPnP Viderekoblinger intervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Nullstill UPnP terskel"
#: 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:85
msgid "Client Address"
msgstr "Klient adresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Klient port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: 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:106
msgid "Delete"
msgstr "Slett"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beskrivelse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Enhet UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Nedlinje"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Skru på IGDv1-modus"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Aktiver NAT-PMP funksjonalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Aktiver UPnP funksjonalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Aktiver tilleggs logging"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Aktiver sikker modus"
#: 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:84
msgid "External Port"
msgstr "Ekstern port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Eksterne porter"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Generelle innstillinger"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
#, fuzzy
msgid "Grant access to upnp procedures"
msgstr "Innvilg tilgang til UPnP-muligheter"
#: 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:86
msgid "Host"
msgstr "Vert"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne adresser"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne porter"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL'er"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP Innstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Informasjons intervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Presentasjon URL"
#: 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:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Rapporter systemets oppetid istedenfor daemon oppetid"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN-vert"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN-port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Start UPnP og NAT-PMP tjenesten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Det finnes ingen aktive viderekoblinger"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP gjør at klientene i det lokale nettverket automatisk kan konfigurere "
"ruteren."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP leie fil"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Ukjent"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Opplinje"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Bruk STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Verdi i KByte/sek, kun for informasjon"

View File

@ -0,0 +1,240 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2024-03-10 22:01+0000\n"
"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/pl/>\n"
"Language: pl\n"
"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%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.5-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Listy kontroli dostępu (ang. ACL) określają jakie porty mogą być "
"przekierowane do jakich wewnętrznych adresów i portów"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Akcja"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktywne przekierowania UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Ustawienia zaawansowane"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Rozgłaszanie jako urządzenie IGDv1 zamiast jako IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:203
msgid "Allow"
msgstr "Zezwól"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Zezwól na dodawanie przekazywań tylko do odpytujących adresów IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Rozgłaszany numer modelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Rozgłaszany numer seryjny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interwał czyszczenia reguł"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Próg czyszczenia reguł"
#: 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:85
msgid "Client Address"
msgstr "Adres klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentarz"
#: 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:106
msgid "Delete"
msgstr "Usuń"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Odmów"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Opis"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID urządzenia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Pobieranie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Włącz tryb IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Włącz funkcjonalność NATPMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Włącz funkcjonalność UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Włącz dodatkowe rejestrowanie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Włącz tryb bezpieczny"
#: 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:84
msgid "External Port"
msgstr "Port zewnętrzny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porty zewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Ustawienia główne"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Udziel dostępu do procedur UPnP"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adresy wewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porty wewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Listy kontroli dostępu MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Ustawienia MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interwał powiadamiania"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Adres URL prezentacji"
#: 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:83
msgid "Protocol"
msgstr "Protokół"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Zgłaszaj czas pracy systemu zamiast czas pracy usługi"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Port STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Uruchom usługi UPnP i NATPMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nie ma aktywnych przekierowań."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP umożliwia klientom w sieci lokalnej automatyczne konfigurowanie routera."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Plik dzierżawy UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Nieznany"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Wysyłanie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Użyj STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Wartość w KB/s, tylko informacyjna"

View File

@ -0,0 +1,242 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 19:03+0200\n"
"PO-Revision-Date: 2024-07-20 20:09+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Os ACL especificam quais as portas externas que podem ser redirecionadas "
"para que endereços internos e portas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Ação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecionamentos ativos da UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configurações avançadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr "Permitir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
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:150
msgid "Announced model number"
msgstr "Número modelo anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Limpar intervalo de regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limpar limiar de regras"
#: 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:85
msgid "Client Address"
msgstr "Endereço do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentário"
#: 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:106
msgid "Delete"
msgstr "Apagar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Negar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrição"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID do aparelho"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Ativar o modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Ativar a funcionalidade NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Ativar a funcionalidade UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Ativar log adicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Ativar o modo seguro"
#: 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:84
msgid "External Port"
msgstr "Porta externa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Portas externas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Configurações gerais"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceder acesso UCI aos procedimentos upnp"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Endereços internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Portas internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Definições MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de Notificação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de apresentaçã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:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Relata uptime do sistema ao invés da do daemon"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Iniciar serviço UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Não há redirecionamentos ativos."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite que os clientes da rede local configurem o router "
"automaticamente."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Ficheiro de concessão UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play Universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconhecido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Ligação ascendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilizar STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor em KByte/s, apenas informativo"

View File

@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:41+0200\n"
"PO-Revision-Date: 2024-07-19 19:31+0000\n"
"Last-Translator: Janderson Vieira Santos <jandersonvs79@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACLs especificam quais portas externas podem ser redirecionadas para quais "
"endereços e portas internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Ação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecionamentos UPnP Ativos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configurações avançadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr "Permitir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Permite adicionar encaminhamento apenas para o endereço IP requisitante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número do modelo anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalo de limpeza das regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limiar de limpeza das regras"
#: 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:85
msgid "Client Address"
msgstr "Endereço do cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentário"
#: 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:106
msgid "Delete"
msgstr "Apagar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr "Negar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrição"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID do Dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Velocidade de recebimento do enlace (downlink)"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Habilitar o modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Habilite a função NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Habilite a função UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Habilite registros adicionais"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Habilite modo seguro"
#: 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:84
msgid "External Port"
msgstr "Porta externa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Portas Externas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Configurações gerais"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceda acesso UCI aos procedimentos upnp"
#: 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:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Endereços internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Portas internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs do MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Configurações do MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de notificação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de Apresentaçã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:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon 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:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Dispare os serviços de UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Não existe redirecionamentos ativos."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite os clientes da rede local configurem automaticamente o roteador."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Arquivo de concessão do UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play Universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconhecido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Velocidade de envio do enlace (uplink)"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Use o STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valores em KByte/s, apenas informativas"

View File

@ -0,0 +1,239 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2022-01-25 22:56+0000\n"
"Last-Translator: CRISTIAN ANDREI <cristianvdr@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ro/>\n"
"Language: ro\n"
"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"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL-urile specifica porturile externe care pot fi redirectate si spre ce "
"adrese si porturi interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acțiune"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecturi active UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Setări avansate"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 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:203
msgid "Allow"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permite adaugarea forward-urilor doar catre adresele ip solicitante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Numărul modelului anunțat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Număr de serie anunțat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalul de curatare reguli"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limita de curatare reguli"
#: 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:85
msgid "Client Address"
msgstr "Adresa client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentariu"
#: 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:106
msgid "Delete"
msgstr "Ștergeți"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:204
msgid "Deny"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descriere"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID al dispozitivului"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Link în jos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activează modul IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activeaza functionalitatea NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activeaza functionalitatea UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activeaza log-area aditionala"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activeaza modul securizat"
#: 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:84
msgid "External Port"
msgstr "Port extern"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porturi externe"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Setări generale"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Acordarea accesului la procedurile upnp"
#: 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:86
msgid "Host"
msgstr "Gazdă"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adrese interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porturi interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Liste de acces mini UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Setari mini UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval de notificare"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Adresa de prezentare"
#: 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:83
msgid "Protocol"
msgstr "Protocol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
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:146
msgid "Report system instead of daemon uptime"
msgstr "Raporteaza timpul de functionare de sistem in loc de serviciu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Gazda STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Portul STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Porniți UPnP și serviciul NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nu exista redirecturi active."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPNP permite clientulor din reteaua locala sa configureze automat routerul."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fisierul de conexiuni UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Necunoscut"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Legătură ascendentă"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilizați STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valorea in KOcteti/s , doar informational"

Some files were not shown because too many files have changed in this diff Show More