From 490014b201660b9b35a9a4af767d04f855a696e2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 1 Nov 2020 09:35:03 +0100 Subject: [PATCH 001/289] Redirect all ports should not be used in most case --- .../luasrc/view/openmptcprouter/settings.htm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index c853a3c3a..da7e9f494 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -51,6 +51,10 @@
checked<% end %>> +
+
+ <%:You shouldn't do that and you should redirect only needed ports%> +
From f28714ac4507c1949f4982d295fc30dae67d9acc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 1 Nov 2020 09:36:32 +0100 Subject: [PATCH 002/289] Add v2ray to help text in wizard --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 8605f16d3..a0dc7d88e 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -336,7 +336,7 @@ end
- <%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%> <%:All VPN available here can do aggregation over MPTCP or using own internal method.%> <%:OpenVPN can't be used in multi VPS configuration.%> + <%:Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), for all traffic if proxy is disabled.%> <%:All VPN available here can do aggregation over MPTCP or using own internal method.%> <%:OpenVPN can't be used in multi VPS configuration.%>
From 02e8eef12daf13249767da4b2886e233fc4f7e74 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 1 Nov 2020 10:03:03 +0100 Subject: [PATCH 003/289] Add an IPv6 prefix if none defined, some fixes --- omr-6in4/files/etc/init.d/omr-6in4 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 49cf17976..a6cab1eac 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -17,6 +17,7 @@ set_shadowsocks_address() { set_ipv6_state() { local disable_ipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)" [ -z "$disable_ipv6" ] && disable_ipv6="1" + previous=$(sysctl -qn net.ipv6.conf.all.disable_ipv6 | tr -d "\n") sysctl -qw net.ipv6.conf.all.disable_ipv6=$disable_ipv6 sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$disable_ipv6:" /etc/sysctl.d/zzz_openmptcprouter.conf @@ -47,9 +48,22 @@ set_ipv6_state() { set dhcp.lan.ra_default="1" set dhcp.lan.ra_preference="high" set dhcp.lan.ra_management="1" + set dhcp.lan.ra_flags='managed-config' + set dhcp.lan.ra_slaac='1' + add_list dhcp.lan.ra_flags='other-config' set network.lan.ipv6="1" set network.lan.delegate="0" EOF + if [ "$(network.lan.ip6assign)" = "" ]; then + uci -q set network.lan.ip6assign='60' + fi + if [ "$(uci -q get network.globals.ula_prefix)" = "" ]; then + r1=$(dd if=/dev/urandom bs=1 count=1 |hexdump -e '1/1 "%02x"') + r2=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"') + r3=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"') + uci -q set network.globals.ula_prefix=fd$r1:$r2:$r3::/48 + fi + config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "::" fi @@ -59,6 +73,9 @@ set_ipv6_state() { commit shadowsocks-libev EOF /etc/init.d/odhcpd restart + if [ "$previous" != "$disable_ipv6" ]; then + env -i /bin/ubus call network reload + fi } From 6c5df8d2733f4c4c9b644462082e84e515a0db4e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 1 Nov 2020 10:03:47 +0100 Subject: [PATCH 004/289] Fix firewall zone from some update --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index a76ef9bea..267891fd3 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -151,6 +151,13 @@ if [ "$(uci -q get firewall.blockquicproxy)" = "" ]; then EOF fi +# Fix firewall config from some old config +allintf=$(uci -q get firewall.@zone[1].network) +uci -q del firewall.@zone[1].network +for intf in $allintf; do + uci -q add_list firewall.@zone[1].network=$intf +done + uci -q batch <<-EOF >/dev/null set firewall.@zone[0].mtu_fix='1' set firewall.zone_vpn.mtu_fix='1' From 112b69bf877fffb76b161ba8beb81a198ad2b450 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 15:34:08 +0100 Subject: [PATCH 005/289] Update RPI4 firmware --- bcm27xx-eeprom/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bcm27xx-eeprom/Makefile b/bcm27xx-eeprom/Makefile index fe77996c8..e69260e1e 100644 --- a/bcm27xx-eeprom/Makefile +++ b/bcm27xx-eeprom/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=bcm27xx-eeprom -PKG_VERSION:=1a099a5a9de4cbd71a68afaa6421fd3b9cf3ef2e -PKG_RELEASE:=2 +PKG_VERSION:=16bb29427f96dc8276a7102c0526154a1084bffd +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)? -PKG_HASH:=c991a69fb92f60fb03cb0d0d482dafd162ae1ad0fb279509d9e2489055891ac3 +PKG_HASH:=9bf42edbcd5ce38538750860c3c788af435206aa441b7d78cf88d094631dbb14 PKG_LICENSE:=BSD-3-Clause Custom PKG_LICENSE_FILES:=LICENSE From 15f8de953f7c2ab18f26f887914c6ce9ee6bf2a7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:31:49 +0100 Subject: [PATCH 006/289] Fix display of conntrack helpers --- .../htdocs/luci-static/resources/view/firewall/zones.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index ad7710579..5e2b6cd81 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -235,7 +235,8 @@ return view.extend({ o.depends('auto_helper', '0'); o.modalonly = true; for (var i = 0; i < ctHelpers.length; i++) - o.value(ctHelpers[i].name, '%s (%s)%s'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase(), ctHelpers[i].name.toUpperCase())); + //o.value(ctHelpers[i].name, '%s (%s)%s'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase(), ctHelpers[i].name.toUpperCase())); + o.value(ctHelpers[i].name, '%s (%s)'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase())); o = s.taboption('advanced', form.Flag, 'log', _('Enable logging on this zone')); o.modalonly = true; From 18b04d32184598f6168deeece18cb7c731a08e83 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:32:40 +0100 Subject: [PATCH 007/289] Update openmptcprouter translation template --- .../po/templates/openmptcprouter.pot | 254 +++++++++--------- 1 file changed, 129 insertions(+), 125 deletions(-) diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 65bd5e101..45d05b5e7 100644 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -14,7 +14,7 @@ msgstr "" msgid "API username to retrieve personnalized settings from the server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "" @@ -22,7 +22,7 @@ msgstr "" msgid "Add a new server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "" @@ -51,12 +51,12 @@ msgid "" "processor." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "" @@ -65,7 +65,7 @@ msgstr "" msgid "Backup on server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "" @@ -77,7 +77,7 @@ msgstr "" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "" @@ -90,7 +90,7 @@ msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "" @@ -110,15 +110,15 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "" @@ -131,7 +131,7 @@ msgid "Core temp:" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "" @@ -139,7 +139,7 @@ msgstr "" msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "" @@ -152,49 +152,49 @@ msgid "Default VPN" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 msgid "Disable default gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" @@ -203,54 +203,54 @@ msgstr "" msgid "Disable server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 msgid "Disable tracebox test" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 msgid "Enable TCP Low Latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "" @@ -274,7 +274,7 @@ msgstr "" msgid "Force retrieve settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "" @@ -296,49 +296,49 @@ msgstr "" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 msgid "IPv4 TCP SYN retries1" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 msgid "IPv4 TCP SYN retries2" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "" @@ -363,7 +363,7 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "" @@ -386,17 +386,17 @@ msgstr "" msgid "LAN interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "" @@ -431,40 +431,40 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "" @@ -472,8 +472,8 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "" @@ -494,11 +494,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "" @@ -512,7 +512,7 @@ msgstr "" msgid "Network overview" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "" @@ -538,7 +538,7 @@ msgstr "" msgid "No available backup on server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "" @@ -568,29 +568,29 @@ msgstr "" msgid "None" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "" @@ -607,59 +607,59 @@ msgstr "" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "Other" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 msgid "Other settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "PAP/CHAP password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "Physical interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "" @@ -675,7 +675,7 @@ msgstr "" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "" @@ -691,24 +691,24 @@ msgstr "" msgid "Retrieve settings from server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "" @@ -739,15 +739,15 @@ msgstr "" msgid "Server username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "Service Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "" @@ -763,16 +763,16 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -799,7 +799,7 @@ msgid "Show all settings" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "" @@ -807,11 +807,11 @@ msgstr "" msgid "Status" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -824,14 +824,14 @@ msgid "" "the processor, you should use chacha20." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " "to the network layer." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -841,7 +841,7 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "" @@ -854,7 +854,7 @@ msgstr "" msgid "UBOND password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "" @@ -874,7 +874,7 @@ msgstr "" msgid "Update server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "" @@ -883,8 +883,8 @@ msgstr "" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" @@ -933,7 +933,7 @@ msgstr "" msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -948,7 +948,7 @@ msgstr "" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" @@ -956,7 +956,7 @@ msgstr "" msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -966,7 +966,7 @@ msgstr "" msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" @@ -974,10 +974,14 @@ msgstr "" msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "" @@ -986,7 +990,7 @@ msgstr "" msgid "address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "" From 18565f869f35d22933dab5c6551ab9c844b395c5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:33:09 +0100 Subject: [PATCH 008/289] Fix rename interfaces --- .../root/etc/hotplug.d/net/99-omr-rename | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename index 17d68498c..0d8c6a7cf 100644 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -16,22 +16,23 @@ _set_intf_name() { config_get ifname $intfname ifname [ -n "$modalias" ] && { if [ -f /sys/class/net/${INTERFACE}/device/uevent ]; then - #chk_modalias="$(cat /sys/class/net/${INTERFACE}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" chk_modalias=$MODALIAS - logger -t "OMR-Rename" "dir: $i - modalias: $modalias - chk_modalias: $chk_modalias - ifname: $ifname - INTERFACE: $INTERFACE" - if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then - logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" - existif=0 - ip link set ${INTERFACE} down - [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { - ip link set ${ifname} name ${ifname}tmp - existif=1 - } - ip link set ${INTERFACE} name ${ifname} - ip link set ${ifname} up - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} - fi - elif [ -f /dev/${DEVICE_NAME} ] && [ "$modalias" = "$MODALIAS" ]; then + [ -z "$chk_modalias" ] && chk_modalias="$(cat /sys/class/net/${INTERFACE}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" + if [ -n "$chk_modalias" ]; then + logger -t "OMR-Rename" "dir: $i - modalias: $modalias - chk_modalias: $chk_modalias - ifname: $ifname - INTERFACE: $INTERFACE" + if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then + logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" + existif=0 + ip link set ${INTERFACE} down + [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { + ip link set ${ifname} name ${ifname}tmp + existif=1 + } + ip link set ${INTERFACE} name ${ifname} + ip link set ${ifname} up + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} + fi + elif [ -f /dev/${DEVICE_NAME} ] && [ -n "$MODALIAS" ] && [ "$modalias" = "$MODALIAS" ]; then if [ "$device" != "/dev/${DEVICE_NAME}" ]; then ln -s /dev/${DEVICE_NAME} /dev/$intfname uci -q set network.${intfname}.device="/dev/${intfname}" From f8495c7cf14a6795e374d08e2a480b9c2f37eeb9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:34:44 +0100 Subject: [PATCH 009/289] Check if omr-bypass rules are set, if not restart --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 1a07d20c0..70a6d1b0f 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -848,6 +848,11 @@ if [ -n "$(logread | tail -n 2 | grep 'Ring expansion failed')" ]; then echo 1 > /sys/bus/pci/rescan fi +if [ "$(iptables-save | grep omr-bypass)" = "" ]; then + _log "Can't find omr-bypass rules, restart omr-bypass..." + /etc/init.d/omr-bypass +fi + if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]); then /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 sleep 5 From 39c850f1ee9d4a444be8586ef1524341b0198cb9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:35:16 +0100 Subject: [PATCH 010/289] Force multipath off on 6in4 interface --- omr-6in4/files/etc/init.d/omr-6in4 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index a6cab1eac..413113c2f 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -85,7 +85,8 @@ start_service() { ifdown omr6in4 return } - ifup omr6in4 + [ "$(ifstatus omr6in4 | jsonfilter -e '@.up' | tr -d '\n')" != "true" ] && ifup omr6in4 + multipath 6in4-omr6in4 off 2>&1 >/dev/null procd_open_instance # shellcheck disable=SC2086 procd_set_param command /bin/omr-6in4 From b49945767a9d6db7fdcaee8ebe5b9a9928986352 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:35:55 +0100 Subject: [PATCH 011/289] Set v2ray userid on server if needed --- .../files/etc/init.d/openmptcprouter-vps | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 33383f44e..1a4472421 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -126,8 +126,8 @@ _get_ss_redir() { _get_ss_server() { config_get cf_obfs $1 obfs [ "$cf_obfs" = "1" ] && obfs="true" - config_get obfs_plugin $1 obfs_plugin - config_get obfs_type $1 obfs_type + config_get obfs_plugin $1 obfs_plugin "v2ray" + config_get obfs_type $1 obfs_type "http" } _set_ss_server_vps() { @@ -170,6 +170,22 @@ _set_ss_server_vps() { fi } +_set_v2ray_server_vps() { + enabled=$(uci -q get v2ray.main.enabled) + [ "$enabled" != "1" ] && return + userid=$(uci -q get v2ray.omrout.s_vless_user_id) + [ -z "$userid" ] && return + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + current_userid="$(echo "$vps_config" | jsonfilter -q -e '@.v2ray.config.key')" + + if [ "$current_userid" != "$userid" ]; then + local settings + settings='{"userid": "'$userid'"}' + echo $(_set_json "v2ray" "$settings") + fi +} + _get_vps_config() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -1524,6 +1540,7 @@ _config_service() { if [ "$user_permission" != "ro" ]; then config_load shadowsocks-libev config_foreach _set_ss_server_vps server + _set_v2ray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 _set_vps_firewall From 530449f6abe51106c4309cd8549b2d703c161e4e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 3 Nov 2020 21:36:24 +0100 Subject: [PATCH 012/289] Make v2ray init less verbose --- v2ray-core/files/etc/init.d/v2ray | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index aa7e56304..4441a1055 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -1794,12 +1794,12 @@ init_transparent_proxy() { setup_transparent_proxy() { if [ -z "$TRANSPARENT_PROXY_PORT" ] ; then - _info "Transparent proxy disabled." + #_info "Transparent proxy disabled." return 0 fi if [ "x$TRANSPARENT_PROXY_EXPECTED" != "x1" ] ; then - _info "No v2ray instance enabled, skip transparent proxy." + #_info "No v2ray instance enabled, skip transparent proxy." return 0 fi @@ -1944,7 +1944,7 @@ start_instance() { fi if [ "x$enabled" != "x1" ] ; then - _info "Service disabled: $section" + #_info "Service disabled: $section" return 0 fi From d4e1b25343aeda8a591d30baa4e15a112ecf9fb7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:18:00 +0100 Subject: [PATCH 013/289] Add wait test after error support --- .../luasrc/model/cbi/omr-tracker.lua | 24 ++++ .../po/templates/omr-tracker.pot | 111 +++++++++++++++++- 2 files changed, 131 insertions(+), 4 deletions(-) diff --git a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua index 50b82fca9..f00afe5fd 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -35,6 +35,12 @@ o.default = "2" o.datatype = "range(1, 100)" o.rmempty = false +o = s:option(Value, "wait_test", translate("Wait after a failed test (s)")) +o.placeholder = "0" +o.default = "0" +o.datatype = "range(0, 100)" +o.rmempty = false + o = s:option(DynamicList, "hosts", translate("Hosts"), translate("IPs or domains must be available over http")) o.placeholder = "bing.com" o.default = { "bing.com", "google.com" } @@ -72,6 +78,12 @@ o.default = "2" o.datatype = "range(1, 100)" o.rmempty = false +o = s:option(Value, "wait_test", translate("Wait after a failed test (s)")) +o.placeholder = "0" +o.default = "0" +o.datatype = "range(0, 100)" +o.rmempty = false + s = m:section(TypedSection, "defaults", translate("Defaults Settings"), translate("OMR-Tracker create needed routes and detect when a connection is down or up")) s.anonymous = true @@ -96,6 +108,12 @@ o.default = "2" o.datatype = "range(1, 100)" o.rmempty = false +o = s:option(Value, "wait_test", translate("Wait after a failed test (s)")) +o.placeholder = "0" +o.default = "0" +o.datatype = "range(0, 100)" +o.rmempty = false + o = s:option(ListValue, "type", translate("Type"), translate("Always ping gateway, then test connection by ping, httping or dns. None mode only ping gateway.")) o:value("ping","ping") o:value("httping","httping") @@ -146,6 +164,12 @@ o.default = "2" o.datatype = "range(1, 100)" o.rmempty = false +o = s:option(Value, "wait_test", translate("Wait after a failed test (s)")) +o.placeholder = "0" +o.default = "0" +o.datatype = "range(0, 100)" +o.rmempty = false + o = s:option(ListValue, "type", translate("Type"), translate("Always ping gateway, then test connection by ping, httping or dns. None mode only ping gateway.")) o:value("ping","ping") o:value("httping","httping") diff --git a/luci-app-omr-tracker/po/templates/omr-tracker.pot b/luci-app-omr-tracker/po/templates/omr-tracker.pot index 49e4ca635..f71762609 100644 --- a/luci-app-omr-tracker/po/templates/omr-tracker.pot +++ b/luci-app-omr-tracker/po/templates/omr-tracker.pot @@ -1,31 +1,134 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -msgid "" -"Always ping gateway, then test connection by ping or dns. None mode only " -"ping gateway." +#: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:8 +msgid "Add" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:117 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:173 +msgid "" +"Always ping gateway, then test connection by ping, httping or dns. None mode " +"only ping gateway." +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:87 msgid "Defaults Settings" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:7 +msgid "Detect if Proxy is down and stop traffic redirection over it." +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:50 +msgid "Detect if Server is down and use defined backup server in this case." +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:17 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:60 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:90 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:146 +msgid "Enable" +msgstr "" + +#: luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json:3 +msgid "Grant UCI access for luci-app-omr-tracker" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:44 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:130 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:187 msgid "Hosts" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:44 +msgid "IPs or domains must be available over http" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:135 +msgid "Interfaces" +msgstr "" + +#: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:9 +msgid "Invalid" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:123 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:179 +msgid "Mail alert" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:130 +msgid "Must be IPs and not domains" +msgstr "" + +#: luci-app-omr-tracker/luasrc/controller/omr-tracker.lua:5 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:5 +#: luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json:3 msgid "OMR-Tracker" msgstr "" -msgid "OMR-Tracker detect when a connection is down" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:87 +msgid "" +"OMR-Tracker create needed routes and detect when a connection is down or up" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:7 +msgid "Proxy tracker Settings" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:32 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:75 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:105 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:161 msgid "Retry interval (s)" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:123 +msgid "Send a mail when connection state change" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:179 +msgid "" +"Send a mail when connection status change. You need to configure e-mail " +"settings here." +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:50 +msgid "Server tracker Settings" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:20 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:63 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:93 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:149 msgid "Timeout (s)" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:26 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:69 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:99 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:155 msgid "Tries" msgstr "" +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:117 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:173 msgid "Type" msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:38 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:81 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:111 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:167 +msgid "Wait after a failed test (s)" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:17 +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:90 +msgid "When tracker is disabled, connection failover is also disabled" +msgstr "" + +#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:60 +msgid "When tracker is disabled, server failover is also disabled" +msgstr "" From f2588e7cf2447ccd47519b4022f0c9e7c9e2d768 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:18:31 +0100 Subject: [PATCH 014/289] Fix disable server if only one server --- .../luasrc/controller/openmptcprouter.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 1bb28c3b1..6d2ef238b 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -441,10 +441,10 @@ function wizard_add() -- Get Proxy set by default local default_proxy = luci.http.formvalue("default_proxy") or "shadowsocks" - if default_proxy == "shadowsocks" and serversnb > 0 then + if default_proxy == "shadowsocks" and serversnb > 0 and serversnb > disablednb then ucic:set("shadowsocks-libev","sss0","disabled","0") ucic:set("v2ray","main","enabled","0") - elseif default_proxy == "v2ray" and serversnb > 0 then + elseif default_proxy == "v2ray" and serversnb > 0 and serversnb > disablednb then ucic:set("shadowsocks-libev","sss0","disabled","1") ucic:set("v2ray","main","enabled","1") else From 36fe1b2d4f864f8afaa6be811b9d23cc486663dd Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:18:57 +0100 Subject: [PATCH 015/289] Clean unused code in wizard --- .../luasrc/view/openmptcprouter/wizard.htm | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index a0dc7d88e..4e0829df6 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -7,30 +7,19 @@ local sys = require "luci.sys" local ut = require "luci.util" local ifaces = sys.net:devices() - local servers_ip = {} - local server_ip = uci:get("shadowsocks-libev","sss0","server") - if server_ip == '127.0.0.1' then - local upstreams = uci:get("nginx-ha","ShadowSocks","upstreams") - for _, up in pairs(upstreams) do - local a = up:match("^([^:]+):") - table.insert(servers_ip,a) - end - else - table.insert(servers_ip,server_ip) - end -function device_notvirtual(dev) - for _, iface in ipairs(net:get_networks()) do - local ifacen = iface:name() - local ifacename = uci:get("network",ifacen,"ifname") - local ifacetype = uci:get("network",ifacen,"type") or "" - local ifaceproto = uci:get("network",ifacen,"proto") or "" - if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then - return false + function device_notvirtual(dev) + for _, iface in ipairs(net:get_networks()) do + local ifacen = iface:name() + local ifacename = uci:get("network",ifacen,"ifname") + local ifacetype = uci:get("network",ifacen,"type") or "" + local ifaceproto = uci:get("network",ifacen,"proto") or "" + if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then + return false + end end + return true end - return true -end %> From e4ed52ab02584a1cdf97e1eecd4b23d0e6facf9d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:19:17 +0100 Subject: [PATCH 016/289] Restart v2ray in restart all --- luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index deadffa10..b8ca0ee74 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -408,6 +408,7 @@ function restart_all() luci.sys.call("/etc/init.d/mptcp restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") os.execute("sleep 2") + luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") From dfe2eea5afaee28d2184ee77300d8a7b5015bc62 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:19:37 +0100 Subject: [PATCH 017/289] Force multipath off on VPN interface --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 1 + 1 file changed, 1 insertion(+) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 70a6d1b0f..551f6dc96 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -276,6 +276,7 @@ dns_flush() { # Get the current multipath status multipath_status="off" +[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then case "$(multipath "$OMR_TRACKER_DEVICE")" in *default*) multipath_status="on" ;; From f5b2e0f0e15a8c3b57a254cb140105cd9bb70661 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:20:03 +0100 Subject: [PATCH 018/289] Fix IPv6 with v2ray --- omr-6in4/files/etc/init.d/omr-6in4 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 413113c2f..dbd61b3a1 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -37,6 +37,8 @@ set_ipv6_state() { delete dhcp.lan.ra_default delete dhcp.lan.ra_management delete dhcp.lan.ra_preference + del_list v2ray.main.inbounds="omr6" + commit v2ray EOF config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "0.0.0.0" @@ -54,6 +56,13 @@ set_ipv6_state() { set network.lan.ipv6="1" set network.lan.delegate="0" EOF + if [ "$(uci -q get v2ray.main.inbounds | grep omr6)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list v2ray.main.inbounds="omr6" + commit v2ray + EOF + fi + if [ "$(network.lan.ip6assign)" = "" ]; then uci -q set network.lan.ip6assign='60' fi From 1dbe35a996db7c3da3cc280f1e8ffd1500c31358 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:21:14 +0100 Subject: [PATCH 019/289] Add wait after test error in omr-tracker --- omr-tracker/files/bin/omr-tracker | 2 + omr-tracker/files/bin/omr-tracker-server | 64 ++++++++++--------- omr-tracker/files/bin/omr-tracker-ss | 2 + omr-tracker/files/bin/omr-tracker-v2ray | 2 + omr-tracker/files/etc/config/omr-tracker | 3 + omr-tracker/files/etc/init.d/omr-tracker | 16 +++-- .../files/etc/uci-defaults/omr-tracker | 11 ++++ 7 files changed, 65 insertions(+), 35 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 4e963633d..b0a90246d 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -24,6 +24,7 @@ export OMR_TRACKER_DEVICE_GATEWAY dscp=56 # set DSCP CS7 (56) in outgoing packets initial_hosts="$OMR_TRACKER_HOSTS" initial_timeout="$OMR_TRACKER_TIMEOUT" +wait_test=${OMR_TRACKER_WAIT_TEST:-0} # set constants for rto updating # we've changed the default values of the RFC to K=3 and beta=0.25 instead of K=4 and beta=0.125 @@ -315,6 +316,7 @@ while true; do #[ "$OMR_TRACKER_STATUS" = "ERROR" ] && _restart #[ "$OMR_TRACKER_STATUS" != "$OMR_TRACKER_PREV_STATUS" ] && _post_tracking _post_tracking + [ "$OMR_TRACKER_STATUS" = "ERROR" ] && sleep $wait_test OMR_TRACKER_PREV_STATUS="$OMR_TRACKER_STATUS" _restart diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index a7f5c0af6..7b652c26d 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -42,7 +42,8 @@ _check_master() { config_get master $1 master config_get ip $1 ip config_get port $1 port "65500" - [ "$master" = "1" ] && [ -n "$ip" ] && { + config_get disabled $1 disabled + [ "$master" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { #_ping_server $ip _check_server $ip $port [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { @@ -81,37 +82,39 @@ _check_backup() { config_get backup $1 backup config_get ip $1 ip config_get port $1 port - [ "$backup" = "1" ] && [ -n "$ip" ] && { + config_get disabled $1 disabled + [ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { #_ping_server $ip _check_server $ip $port - } - [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break - [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { - logger -t "OMR-Tracker-Server" "User backup server $1 ($ip)" - uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.sss0.server=$ip - commit shadowsocks-libev - set v2ray.omrout.s_vmess_address=$ip - set v2ray.omrout.s_vless_address=$ip - commit v2ray - set glorytun.vpn.host=$ip - commit glorytun - set dsvpn.vpn.host=$ip - commit dsvpn - set mlvpn.general.host=$ip - commit mlvpn - del openvpn.omr.remote - add_list openvpn.omr.remote=$ip - commit openvpn - EOF - /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null - /etc/init.d/v2ray restart >/dev/null 2>/dev/null - /etc/init.d/glorytun restart >/dev/null 2>/dev/null - /etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null - /etc/init.d/mlvpn restart >/dev/null 2>/dev/null - /etc/init.d/openvpn restart >/dev/null 2>/dev/null - /etc/init.d/dsvpn restart >/dev/null 2>/dev/null - break + [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break + [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { + logger -t "OMR-Tracker-Server" "User backup server $1 ($ip)" + uci -q batch <<-EOF >/dev/null + set shadowsocks-libev.sss0.server=$ip + commit shadowsocks-libev + set v2ray.omrout.s_vmess_address=$ip + set v2ray.omrout.s_vless_address=$ip + commit v2ray + set glorytun.vpn.host=$ip + commit glorytun + set dsvpn.vpn.host=$ip + commit dsvpn + set mlvpn.general.host=$ip + commit mlvpn + del openvpn.omr.remote + add_list openvpn.omr.remote=$ip + commit openvpn + EOF + /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null + /etc/init.d/v2ray restart >/dev/null 2>/dev/null + /etc/init.d/glorytun restart >/dev/null 2>/dev/null + /etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null + /etc/init.d/mlvpn restart >/dev/null 2>/dev/null + /etc/init.d/openvpn restart >/dev/null 2>/dev/null + /etc/init.d/dsvpn restart >/dev/null 2>/dev/null + sleep $waittest + break + } } } @@ -121,6 +124,7 @@ timeout=${OMR_TRACKER_TIMEOUT:-5} interval=${OMR_TRACKER_INTERVAL:-10} intervaltries=${OMR_TRACKER_INTERVAL_TRIES:-2} retry=${OMR_TRACKER_TRIES:-4} +waittest=${OMR_TRACKER_WAIT_TEST:-0} while true; do server_ping=false diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index f5011ca46..33405601b 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -44,6 +44,7 @@ interval=${OMR_TRACKER_INTERVAL:-10} retry=${OMR_TRACKER_TRIES:-4} proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} +wait_test=${OMR_TRACKER_WAIT_TEST:-0} nodns=0 @@ -88,6 +89,7 @@ while true; do if [ "$server_ping" = false ]; then _log "Server ($server) seems down, no answer to ping" fi + sleep $wait_test fi } fi diff --git a/omr-tracker/files/bin/omr-tracker-v2ray b/omr-tracker/files/bin/omr-tracker-v2ray index d8c275b24..b7456c23c 100755 --- a/omr-tracker/files/bin/omr-tracker-v2ray +++ b/omr-tracker/files/bin/omr-tracker-v2ray @@ -44,6 +44,7 @@ interval=${OMR_TRACKER_INTERVAL:-10} retry=${OMR_TRACKER_TRIES:-4} proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} +wait_test=${OMR_TRACKER_WAIT_TEST:-0} nodns=0 @@ -88,6 +89,7 @@ while true; do if [ "$server_ping" = false ]; then _log "Server ($server) seems down, no answer to ping" fi + sleep $wait_test fi } fi diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index cc0aed0cc..bf64d41d1 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -16,6 +16,7 @@ config defaults 'defaults' option interval '2' option interval_tries '1' option type 'ping' + option wait_test '0' option options '' config proxy 'proxy' @@ -30,6 +31,7 @@ config proxy 'proxy' list hosts '176.103.130.130' option timeout '10' option tries '3' + option wait_test '0' option interval_tries '1' option interval '5' @@ -37,4 +39,5 @@ config server 'server' option enabled '1' option tries '3' option timeout '10' + option wait_test '0' option interval '5' \ No newline at end of file diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 6c24cd762..5d470808b 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -13,7 +13,7 @@ _validate_section() { local tmp_hosts=$hosts tmp_timeout=$timeout tmp_tries=$tries - local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled + local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled tmp_wait_test=$wait_test uci_validate_section omr-tracker "$1" "$2" \ 'hosts:list(host)' \ @@ -21,6 +21,7 @@ _validate_section() { 'tries:uinteger' \ 'interval:uinteger' \ 'interval_tries:uinteger' \ + 'wait_test:uinteger' \ 'type:string:undef' \ 'enabled:bool:1' \ 'options:string' @@ -30,6 +31,7 @@ _validate_section() { [ -z "$tries" ] && tries=$tmp_tries [ -z "$interval" ] && interval=$tmp_interval [ -z "$interval_tries" ] && interval_tries=$tmp_interval_tries + [ -z "$wait_test" ] && wait_test=$tmp_wait_test [ -z "$options" ] && options=$tmp_options [ "$type" = "undef" ] && type=${tmp_type:-ping} [ -z "$enabled" ] && enabled=$tmp_enabled @@ -40,7 +42,7 @@ _launch_tracker() { loopback|lan*|if0*) return;; esac - local hosts timeout tries interval interval_tries options type enabled + local hosts timeout tries interval interval_tries options type enabled wait_test _validate_section "defaults" "defaults" _validate_section "interface" "$1" @@ -71,6 +73,7 @@ _launch_tracker() { procd_append_param env "OMR_TRACKER_DEVICE=$ifname" procd_append_param env "OMR_TRACKER_DEVICE_GATEWAY=$gateway" procd_append_param env "OMR_TRACKER_TYPE=$type" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -78,7 +81,7 @@ _launch_tracker() { } _launch_server_tracker() { - local hosts timeout tries interval interval_tries options type enabled + local hosts timeout tries interval interval_tries options type enabled wait_test _validate_section "defaults" "defaults" _validate_section "server" "server" @@ -92,6 +95,7 @@ _launch_server_tracker() { procd_append_param env "OMR_TRACKER_TRIES=$tries" procd_append_param env "OMR_TRACKER_INTERVAL=$interval" procd_append_param env "OMR_TRACKER_INTERVAL_TRIES=$interval_tries" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -139,7 +143,7 @@ _initialize_shadowsocks_tracker() { } _launch_shadowsocks_tracker() { - local hosts timeout tries interval local_port enabled server + local hosts timeout tries interval local_port enabled server wait_test [ "$1" = "tracker" ] || return @@ -161,6 +165,7 @@ _launch_shadowsocks_tracker() { procd_append_param env "OMR_TRACKER_TRIES=$tries" procd_append_param env "OMR_TRACKER_INTERVAL=$interval" procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -168,7 +173,7 @@ _launch_shadowsocks_tracker() { } _launch_v2ray_tracker() { - local hosts timeout tries interval local_port enabled server + local hosts timeout tries interval local_port enabled server wait_test _validate_section "proxy" "proxy" [ "$enabled" = "0" ] || [ -z "$hosts" ] && return @@ -181,6 +186,7 @@ _launch_v2ray_tracker() { procd_append_param env "OMR_TRACKER_TRIES=$tries" procd_append_param env "OMR_TRACKER_INTERVAL=$interval" procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:1111" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index 3bbab839e..30aec42b9 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -47,6 +47,7 @@ if [ "$(uci -q get omr-tracker.proxy.hosts | grep '23.96.52.53')" != "" ]; then add_list omr-tracker.proxy.hosts='104.16.1.1' add_list omr-tracker.proxy.hosts='198.27.92.1' add_list omr-tracker.proxy.hosts='151.101.129.164' + commit omr-tracker EOF fi if [ "$(uci -q get omr-tracker.proxy.hosts | grep '103.224.182.242')" != "" ]; then @@ -55,6 +56,16 @@ if [ "$(uci -q get omr-tracker.proxy.hosts | grep '103.224.182.242')" != "" ]; t del_list omr-tracker.proxy.hosts='198.191.250.176' add_list omr-tracker.proxy.hosts='74.82.42.42' add_list omr-tracker.proxy.hosts='176.103.130.130' + commit omr-tracker + EOF +fi + +if [ "$(uci -q get omr-tracker.defaults.wait_test)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set omr-tracker.defaults.wait_test=1 + set omr-tracker.proxy.wait_test=1 + set omr-tracker.server.wait_test=1 + commit omr-tracker EOF fi From 35bd06522552469d92785814e5534c9c1e06b644 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:21:50 +0100 Subject: [PATCH 020/289] Fix v2ray log font case --- v2ray-core/files/etc/init.d/v2ray | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index 4441a1055..513058ce0 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -416,7 +416,7 @@ add_v2ray_redirect_rules() { v2ray-rules -l ${port} -L ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward v2ray-rules6 -l $((port+1)) -L $((port+1)) --rule-name def --src-default forward --dst-default forward --local-default forward [ -f /etc/init.d/omr-bypass ] && { - logger -t "V2Ray" "Reload omr-bypass rules" + logger -t "v2ray" "Reload omr-bypass rules" /etc/init.d/omr-bypass reload_rules } } @@ -2089,13 +2089,13 @@ rules_up() { [ "$enabled" = "0" ] && return OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vless_address)" TRANSPARENT_PROXY_PORT="$(uci -q get v2ray.omr.port)" - logger -t "V2Ray" "Rules UP" + logger -t "v2ray" "Rules UP" add_v2ray_redirect_rules } rules_down() { rules_exist || return 0 - logger -t "V2Ray" "Rules DOWN" + logger -t "v2ray" "Rules DOWN" local bin="/usr/bin/v2ray-rules" [ -x "$bin" ] && { "$bin" -f >/dev/null 2>&1 From 39e00b5e54afb387a57a99cd3d9358914ebde2b1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:22:12 +0100 Subject: [PATCH 021/289] Fix v2ray when IPv6 disabled --- v2ray-core/files/etc/uci-defaults/3010-omr-v2ray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index 3388a1663..fe629d8ff 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -87,7 +87,7 @@ if [ -z "$(uci -q get v2ray.main)" ]; then EOF fi uci -q batch <<-EOF >/dev/null - set v2ray.omr.listen='::' + set v2ray.omr.listen='0.0.0.0' commit v2ray EOF From 6643dfd880d59a0c912ca7bd7a2264bd238e1330 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 10:22:53 +0100 Subject: [PATCH 022/289] V2Ray IPv6 disabled by default --- v2ray-core/files/etc/uci-defaults/3010-omr-v2ray | 1 - 1 file changed, 1 deletion(-) diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index fe629d8ff..18a3cc65d 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -12,7 +12,6 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.main.enabled='0' set v2ray.main.outbounds='omrout' set v2ray.main.inbounds='omr' - add_list v2ray.main.inbounds='omr6' add_list v2ray.main.inbounds='omrtest' set v2ray.main_dns=dns set v2ray.main_dns.hosts='example.com|127.0.0.1' From d8b639e1747d99b08ae4005149c7e06f5cc27549 Mon Sep 17 00:00:00 2001 From: antrouter Date: Thu, 22 Oct 2020 09:29:49 +0000 Subject: [PATCH 023/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (238 of 238 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index de32bb86f..c0dedccf9 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-13 09:11+0000\n" +"PO-Revision-Date: 2020-10-23 09:37+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -629,10 +629,8 @@ msgid "Other" msgstr "其他" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 -#, fuzzy -#| msgid "Server settings" msgid "Other settings" -msgstr "蚂蚁聚合服务器设定" +msgstr "蚂蚁聚合其他设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "PAP" From 8305ca29c2d7ea9a238b39bb1a8a5090ffec346c Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 5 Nov 2020 11:19:13 +0000 Subject: [PATCH 024/289] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/ --- .../po/de/openmptcprouter.po | 258 +++++++++--------- .../po/fr/openmptcprouter.po | 258 +++++++++--------- .../po/it/openmptcprouter.po | 258 +++++++++--------- .../po/oc/openmptcprouter.po | 258 +++++++++--------- .../po/zh_Hans/openmptcprouter.po | 258 +++++++++--------- 5 files changed, 665 insertions(+), 625 deletions(-) diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index e19dbca7c..67b7e314c 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -23,7 +23,7 @@ msgstr "Schlüssel 'Dead Simple VPN'" msgid "API username to retrieve personnalized settings from the server." msgstr "API Benutzername zum Download der Settings vom Server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "" @@ -31,7 +31,7 @@ msgstr "" msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "Interface hinzufügen" @@ -63,12 +63,12 @@ msgid "" msgstr "" "Die CPU beherrscht AES-NI-Befehle zur Beschleunigung der Verschlüsselung." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "Authentifizierungs Methode" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "Backup" @@ -77,7 +77,7 @@ msgstr "Backup" msgid "Backup on server" msgstr "Backup der Router-Einstellungen auf den Server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "" @@ -89,7 +89,7 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "" @@ -108,7 +108,7 @@ msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "" @@ -128,15 +128,15 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "" @@ -149,7 +149,7 @@ msgid "Core temp:" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "DHCP" @@ -157,7 +157,7 @@ msgstr "DHCP" msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "" @@ -172,52 +172,52 @@ msgid "Default VPN" msgstr "Standard VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "Löschen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "TCP-Fast-Open aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "" "Abschalten von TCP-Fast-Open für Linux und die ShadowsSocks-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 #, fuzzy #| msgid "Disable gateway ping" msgid "Disable default gateway" msgstr "Gateway-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "Gateway-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "Gateway-Ping Statusüberprüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" @@ -228,58 +228,58 @@ msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" msgid "Disable server" msgstr "Server-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "Server-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "Server-Ping Status-Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 #, fuzzy #| msgid "Disable external check" msgid "Disable tracebox test" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "Download-Geschwindigkeit (kBits/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "Dynamische Anpassung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "IPv6 aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "SQM aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "Shadowsocks-Verschleierung aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 #, fuzzy #| msgid "Disable TCP Fast Open" msgid "Enable TCP Low Latency" msgstr "TCP-Fast-Open aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "Aktiv" @@ -309,7 +309,7 @@ msgstr "API Benutzername zum Download der Settings vom Server." msgid "Force retrieve settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "" @@ -331,53 +331,53 @@ msgstr "Glorytun Schlüssel" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "IPv4 TCP FIN Wartezeit" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast-Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP Verbindungs-Haltezeit" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "IPv4-Netzmaske" @@ -404,7 +404,7 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "Schnittstellen-Einstellungen" @@ -430,17 +430,17 @@ msgstr "" msgid "LAN interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "Bezeichnung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "Bezeichnung der Schnittstelle" @@ -479,40 +479,40 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "MPTCP über VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "Primäre Schnittstelle:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "Maximaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "Minimaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "" @@ -520,8 +520,8 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "" @@ -542,11 +542,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "" @@ -560,7 +560,7 @@ msgstr "" msgid "Network overview" msgstr "Netzwerk-Übersicht" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "Netzwerk-Einstellungen" @@ -586,7 +586,7 @@ msgstr "" msgid "No available backup on server." msgstr "Keine Konfigurations-Sicherung des Routers auf dem Server verfügbar." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "Keine Änderungen" @@ -618,29 +618,29 @@ msgstr "Allgemeine Servereinstellungen" msgid "None" msgstr "Keine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "Verschleierungs-Modul" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "Verschleierungs-Typ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "Die Verschleierung wird auf beiden Seiten aktiviert." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "Bei Änderungen mittels des Assistenten" @@ -657,66 +657,66 @@ msgstr "OpenMPTCProuter" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 #, fuzzy msgid "Other" msgstr "Andere" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 #, fuzzy #| msgid "Server settings" msgid "Other settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "Protokoll" @@ -734,7 +734,7 @@ msgstr "VPN-Einstellungen" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "" @@ -752,24 +752,24 @@ msgstr "Parameter-Sicherung auf den Router wiederherstellen" msgid "Retrieve settings from server" msgstr "API Benutzername zum Download der Settings vom Server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "Speichern und Anwenden" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "vnstat-Daten fortlaufend auf Datenträger schreiben" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "Speichern der vnstat-Daten" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "Methode der CPU-Taktung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "Schnittstelle auswählen für diese Verbindung" @@ -804,17 +804,17 @@ msgstr "Server-Einstellungen" msgid "Server username" msgstr "Server-Benutzername" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 #, fuzzy #| msgid "Server key" msgid "Service Type" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "IP-Adresse im gleichen Subnetz wie das Modem angeben" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "IPv4 des Modems" @@ -835,21 +835,25 @@ msgstr "" "Andernfalls auch für TCP)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#, fuzzy +#| msgid "" +#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " +#| "for all traffic if ShadowSocks is disabled." msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" "Auswahl des VPNs für UDP und ICMP (Sofern ShadowSocks für TCP aktiv ist. " "Andernfalls auch für TCP)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Wert von etwa 80-95% der Downstream-Bandbreite; '0' zum Abschalten von SQM/" "QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -880,7 +884,7 @@ msgid "Show all settings" msgstr "Alle Einstellungen anzeigen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "Statische Adresse" @@ -888,11 +892,11 @@ msgstr "Statische Adresse" msgid "Status" msgstr "Status" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "System-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -907,14 +911,14 @@ msgstr "" "Die CPU beherrscht keine AES-NI-Befehle für hardwarebeschleunigte " "Verschlüsselung. Sinnvollerweise stattdessen 'chacha20' nutzen!" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " "to the network layer." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -924,7 +928,7 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "" @@ -939,7 +943,7 @@ msgstr "" msgid "UBOND password" msgstr "UBOND Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "" @@ -959,7 +963,7 @@ msgstr "automatische Aktualiserung des Servers" msgid "Update server" msgstr "Aktualisierung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "Upstream-Bandbreite (kBit/s)" @@ -968,8 +972,8 @@ msgstr "Upstream-Bandbreite (kBit/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Nutzung durch Glorytun für UDP und SQM/QoS, sofern aktiv. '0' für den " @@ -1024,7 +1028,7 @@ msgstr "" msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -1039,7 +1043,7 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "'MPTCP over VPN' kann genutzt werden für Anschlüsse auf denen der Anbieter " @@ -1049,7 +1053,7 @@ msgstr "" msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1061,7 +1065,7 @@ msgstr "" msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "'DHCP' muss für diese Modems abgeschaltet und die IP-Adresse in ein andere " @@ -1073,12 +1077,16 @@ msgstr "" "Server benötigt nutzbares IPv6. Andernfalls mit diesem Schalter die Nutzung " "sperren." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "SQM sollte abgeschaltet werden für LTE und andere Verbindungen mit " "variierender Geschwindigkeit." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "" @@ -1089,7 +1097,7 @@ msgstr "" msgid "address:" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 4b51e33cc..4e2cf44c5 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -28,7 +28,7 @@ msgstr "" "Nom d'utilisateur pour récupérer la configuration personnalisée depuis le " "serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "APN" @@ -36,7 +36,7 @@ msgstr "APN" msgid "Add a new server" msgstr "Ajouter un serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "Ajouter une interface" @@ -67,12 +67,12 @@ msgid "" "processor." msgstr "Les instruction AES sont intégrées dans le processeur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "Type d'authentification" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "Sauvegarder" @@ -81,7 +81,7 @@ msgstr "Sauvegarder" msgid "Backup on server" msgstr "Sauvegarde sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "Équilibrage" @@ -93,7 +93,7 @@ msgstr "Bêta" msgid "Big time difference between the server and the router" msgstr "Grande différence de temps entre le serveur et le routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "Passerelle" @@ -107,7 +107,7 @@ msgid "" msgstr "" "Par défaut, le proxy est utilisé pour tout trafic TCP (et UDP pour V2Ray)." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "CHAP" @@ -127,7 +127,7 @@ msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" msgid "Can\\'t ping server" msgstr "Pas de réponse du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -135,9 +135,9 @@ msgstr "" "Choisissez MacVLAN si vous souhaitez créer une interface virtuelle basée sur " "une interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "Choisissez l'interface physique." @@ -150,7 +150,7 @@ msgid "Core temp:" msgstr "Température du cœur :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "DHCP" @@ -158,7 +158,7 @@ msgstr "DHCP" msgid "DNS issue: can\\'t resolve hostname" msgstr "Soucis DNS : impossible de résoudre le domaine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "Débugger" @@ -171,52 +171,52 @@ msgid "Default VPN" msgstr "VPN par défaut" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "Supprimer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "Appareil" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "Désactiver TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "" "Désactivation de TCP Fast Open pour Linux et dans la configuration de " "Shadowsocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 msgid "Disable default gateway" msgstr "Désactiver la passerelle par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "" "Désactivez la passerelle par défaut, pas d'Internet si les VPS sont en panne" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "Désactiver les tests externes" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "Désactiver le ping vers la passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "Désactiver le test ping de la passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "Désactiver le test multipath à l'aide de tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" @@ -227,54 +227,54 @@ msgstr "" msgid "Disable server" msgstr "Désactiver le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "Désactiver le ping vers le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "Désactiver le test ping vers le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 msgid "Disable tracebox test" msgstr "Désactiver le test de tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "Désactiver" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "Vitesse de téléchargement (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "Changement dynamique" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "Activer IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "Active SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "Activer le brouillage pour ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 msgid "Enable TCP Low Latency" msgstr "Activer la faible latence TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "Activer les journaux de débogage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "Activer" @@ -300,7 +300,7 @@ msgstr "Forcer la récupération de toutes les clés du serveur." msgid "Force retrieve settings" msgstr "Forcer la récupération des paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "seulement GPRS" @@ -322,51 +322,51 @@ msgstr "Clef Glorytun" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "Accorder l'accès UCI pour luci-app-openmptcprouter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" "Fréquence à laquelle TCP envoie des messages keepalive lorsque keepalive est " "activé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "TTL par défaut IPv4 IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "Délai d'expiration IPv4 TCP FIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "Temps de maintien TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "Tentatives TCP SYN IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN retries1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "Masque de sous-réseau IPv4" @@ -391,7 +391,7 @@ msgstr "Le tunnel IPv6 ne répond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "Paramètres des interfaces" @@ -416,17 +416,17 @@ msgstr "" msgid "LAN interfaces settings" msgstr "Paramètres des interfaces LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "LTE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "Étiquette" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "Étiquette pour l'interface" @@ -461,40 +461,40 @@ msgstr "MPTCP n'est pas activé sur le serveur" msgid "MPTCP may not be enabled on the server" msgstr "MPTCP semble ne pas être activé sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "MPTCP sur VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "Master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "Sélection de l'interface maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "Fréquence maximale du processeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "Fréquence minimale du processeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "Modem par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "ModemManager" @@ -502,8 +502,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "Plus d\\'un VPN par défaut est activé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -524,11 +524,11 @@ msgstr "Maître multipath déjà défini" msgid "Multipath seems to be blocked on the connection" msgstr "Multipath semble bloquer sur la connexion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "AUCUN" @@ -542,7 +542,7 @@ msgstr "Interface réseau dupliquée" msgid "Network overview" msgstr "Aperçu réseau" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "Paramètres réseaux" @@ -568,7 +568,7 @@ msgstr "Aucune adresse IP WAN détectée en moins d'une seconde" msgid "No available backup on server." msgstr "Aucune sauvegarde disponible sur le serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "Pas de changement" @@ -598,11 +598,11 @@ msgstr "Aucun serveur défini" msgid "None" msgstr "Aucun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "Normal" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." @@ -610,19 +610,19 @@ msgstr "" "Nombre de fois que les SYN initiales pour une tentative de connexion TCP " "active seront retransmises." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "Plugin de brouillage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "Type de brouillage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "Le brouillage sera activé des deux côtés" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "En cas de changements dans l'assistant" @@ -640,59 +640,59 @@ msgstr "OpenMPTCProuter" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN ne peut pas être utilisé dans une configuration multi VPS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "Optimiser la latence au lieu de la bande passante" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "Other" msgstr "Autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 msgid "Other settings" msgstr "Autres paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "PAP/CHAP password" msgstr "Mot de passe PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "Identifiant PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "Code PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "PPPoE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "Physical interface" msgstr "l'interface physique," -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "Préférer LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "Préférer l'UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "Protocole" @@ -708,7 +708,7 @@ msgstr "Paramètres du Proxy" msgid "Proxy traffic:" msgstr "Trafic proxy :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "QMI" @@ -724,24 +724,24 @@ msgstr "Restauration de la sauvegarde" msgid "Retrieve settings from server" msgstr "Récupérer les paramètres du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "Sauvegarder et Appliquer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "Sauvegarder les statistiques de vnstats sur le disque" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "Sauvegarder les statistiques de vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "Régulateur de mise à l'échelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "Sélectionnez le périphérique pour l'interface." @@ -772,15 +772,15 @@ msgstr "Paramètres du serveur" msgid "Server username" msgstr "Nom d'utilisateur sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "Service Type" msgstr "Type du service" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "Mettez une IP dans le même réseau que le modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" @@ -797,21 +797,25 @@ msgstr "" "activé, pour TCP et UDP lorsque V2Ray est activé." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#, fuzzy +#| msgid "" +#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " +#| "for all traffic if ShadowSocks is disabled." msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" "Configure le VPN utilisé par défaut pour UDP et ICMP quand ShadowSocks est " "activé, pour tout le trafic quand ShadowSocks est désactivé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Réglez une valeur entre 80-95% de la vitesse de téléchargement maximale. 0 " "pour désactiver SQM/QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -840,7 +844,7 @@ msgid "Show all settings" msgstr "Voir tous les paramètres" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "Adresse statique" @@ -848,11 +852,11 @@ msgstr "Adresse statique" msgid "Status" msgstr "État" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "Paramètres systèmes" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -870,7 +874,7 @@ msgstr "" "Les instructions AES ne sont pas intégrées au processeur, vous devriez " "utiliser chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -880,7 +884,7 @@ msgstr "" "ne va pas en raison de retransmissions RTO non acquittées, et signale cette " "suspicion à la couche réseau." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -892,7 +896,7 @@ msgstr "" msgid "Total traffic:" msgstr "Trafic total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "Type" @@ -905,7 +909,7 @@ msgstr "UBOND peut remplacer Glorytun par des connexions avec la même latence" msgid "UBOND password" msgstr "Mot de passe UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -925,7 +929,7 @@ msgstr "Met à jour le serveur à la dernière version quand c'est nécessaire." msgid "Update server" msgstr "Mise à jour du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "Vitesse d'envoi (Kb/s)" @@ -934,8 +938,8 @@ msgstr "Vitesse d'envoi (Kb/s)" msgid "Uptime:" msgstr "Durée de fonctionnement :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Utilisé par Glorytun UDP et SQM/QoS si activé. 0 pour utiliser la valeur par " @@ -986,7 +990,7 @@ msgstr "Version" msgid "Wan IP and gateway are identical" msgstr "La passerelle et l'adresse IP du WAN sont identiques" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -1001,7 +1005,7 @@ msgstr "Assistant" msgid "You" msgstr "Vous" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "Vous pouvez utiliser MTPCP over VPN si votre fournisseur filtre Multipath " @@ -1012,7 +1016,7 @@ msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" "Vous pouvez utiliser DHCP si vous avez plusieurs ports Ethernet physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1027,7 +1031,7 @@ msgstr "" "Vous ne pouvez utiliser un préfixe IPv6 public que si vous ne définissez " "qu'un seul serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des " @@ -1037,12 +1041,16 @@ msgstr "" msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Vous devriez désactiver IPv6 ici si le serveur ne supporte pas IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "Vous devriez désactiver SQM pour la 4G ou toute interface avec une vitesse " "très instable." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "Votre IP n'a pas été attribuée par ce routeur" @@ -1051,7 +1059,7 @@ msgstr "Votre IP n'a pas été attribuée par ce routeur" msgid "address:" msgstr "adresse :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "auto" diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index fbd460a42..88df66661 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -24,7 +24,7 @@ msgid "API username to retrieve personnalized settings from the server." msgstr "" "Nome utente API per recuperare le impostazioni personalizzate dal server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "APN" @@ -32,7 +32,7 @@ msgstr "APN" msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "Aggiungi un'interfaccia" @@ -65,12 +65,12 @@ msgstr "" "Un set di istruzioni Advanced Encryption Standard (AES) è integrato nel " "processore." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "Backup" @@ -79,7 +79,7 @@ msgstr "Backup" msgid "Backup on server" msgstr "Backup su server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "Bilanciamento" @@ -91,7 +91,7 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "Grande differenza di fuso orario tra il server e il router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "Ponte" @@ -108,7 +108,7 @@ msgstr "" "Per impostazione predefinita, il proxy viene utilizzato per qualsiasi " "traffico che sia TCP (e UDP per V2Ray)." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "CHAP" @@ -128,7 +128,7 @@ msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" msgid "Can\\'t ping server" msgstr "Impossibile eseguire il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -136,9 +136,9 @@ msgstr "" "Scegli MacVLAN se desideri creare un'interfaccia virtuale basata su " "un'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "Scegli l'interfaccia fisica." @@ -151,7 +151,7 @@ msgid "Core temp:" msgstr "Temp. Nucleo:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "DHCP" @@ -159,7 +159,7 @@ msgstr "DHCP" msgid "DNS issue: can\\'t resolve hostname" msgstr "Problema DNS: impossibile risolvere il nome host" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "Debug" @@ -172,50 +172,50 @@ msgid "Default VPN" msgstr "VPN predefinita" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "Elimina" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "Dispositivo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "Disabilita TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "Disabilita TCP Fast Open su Linux e configurazione Shadowsocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 msgid "Disable default gateway" msgstr "Disabilita il gateway predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "" "Disabilita il gateway predefinito, niente Internet se i VPS sono inattivi" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "Disabilita controllo esterno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "Disabilita il ping del gateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "Disabilitare il controllo dello stato del ping del gateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "Disabilita il test multipath usando tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" @@ -226,54 +226,54 @@ msgstr "" msgid "Disable server" msgstr "Disabilita il server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "Disabilita il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "Disabilitare il controllo dello stato del ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 msgid "Disable tracebox test" msgstr "Disabilita il test Tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "Disabilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "Velocità di download (Kb / s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "Cambiamento dinamico" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "Abilita IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "Abilita MQ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "Abilita l'offuscamento di ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 msgid "Enable TCP Low Latency" msgstr "Abilita TCP bassa latenza" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "Abilita registro di debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "Abilitato" @@ -299,7 +299,7 @@ msgstr "Forza il recupero di tutte le chiavi dal server." msgid "Force retrieve settings" msgstr "Forza il recupero delle impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "Solo GPRS" @@ -322,51 +322,51 @@ msgstr "Chiave Glorytun" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "Concedi l'accesso UCI per luci-app-openmptcprouter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" "La frequenza con cui TCP invia messaggi keepalive quando keepalive è " "abilitato." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "IPv4 IP predefinito TTL" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "Timeout FIN TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP Keepalive time" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "Riprova IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN retries1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "Netmask IPv4" @@ -391,7 +391,7 @@ msgstr "Tunnel IPv6 GIÙ" msgid "IPv6:" msgstr "IPv6:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "Impostazioni delle interfacce" @@ -418,17 +418,17 @@ msgstr "" msgid "LAN interfaces settings" msgstr "Impostazioni delle interfacce LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "LTE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "Etichetta" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "Etichetta per l'interfaccia" @@ -463,40 +463,40 @@ msgstr "MPTCP non è abilitato sul server" msgid "MPTCP may not be enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "MPTCP su VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "Principale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "Selezione dell'interfaccia principale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "Frequenza CPU di ridimensionamento massima" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "Frequenza CPU con ridimensionamento minimo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "Impostazione predefinita del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "Timeout inizializzazione modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "ModemManager" @@ -504,8 +504,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "È abilitata più di una VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -526,11 +526,11 @@ msgstr "Multipath master già definito" msgid "Multipath seems to be blocked on the connection" msgstr "Multipath sembra essere bloccato sulla connessione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "NESSUNO" @@ -544,7 +544,7 @@ msgstr "Interfaccia di rete duplicata" msgid "Network overview" msgstr "Panoramica della rete" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "Impostazioni reti" @@ -570,7 +570,7 @@ msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo" msgid "No available backup on server." msgstr "Nessun backup disponibile sul server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "Nessun cambiamento" @@ -600,11 +600,11 @@ msgstr "Nessun server definito" msgid "None" msgstr "Nessuno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "Normale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." @@ -612,19 +612,19 @@ msgstr "" "Numero di volte in cui i SYN iniziali per un tentativo di connessione TCP " "attivo verranno ritrasmessi." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "Plugin offuscante" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "Tipo di offuscamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "L'offuscamento sarà abilitato su entrambi i lati" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "Al cambio della procedura guidata" @@ -643,59 +643,59 @@ msgstr "OpenMPTCProuter" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN non può essere utilizzato nella configurazione multi VPS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "Ottimizza per la latenza invece che per la larghezza di banda" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "Other" msgstr "Altro" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 msgid "Other settings" msgstr "Altre impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "PAP/CHAP password" msgstr "PAP/CHAP password" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "Nome utente PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "Codice PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "PPPoE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "Physical interface" msgstr "Interfaccia fisica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "Preferisci LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "Preferisci UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "Protocollo" @@ -711,7 +711,7 @@ msgstr "Impostazioni Proxy" msgid "Proxy traffic:" msgstr "Traffico proxy:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "QMI" @@ -727,24 +727,24 @@ msgstr "Ripristina backup" msgid "Retrieve settings from server" msgstr "Recupera le impostazioni dal server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "Salva e applica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "Salva le statistiche di vnstats su disco" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "Salva le statistiche di vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "Governatore in scala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." @@ -775,15 +775,15 @@ msgstr "Impostazioni server" msgid "Server username" msgstr "Nome utente del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "Service Type" msgstr "Tipo di servizio" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "Imposta un IP nella stessa rete del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "Imposta qui l'IP del modem" @@ -800,21 +800,25 @@ msgstr "" "abilitato, per TCP e UDP quando V2Ray è abilitato." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#, fuzzy +#| msgid "" +#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " +#| "for all traffic if ShadowSocks is disabled." msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" "Imposta la VPN predefinita utilizzata per UDP e ICMP quando ShadowSocks è " "abilitato, per tutto il traffico se ShadowSocks è disabilitato." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Impostare il valore tra l'80 e il 95% della velocità massima di download " "del collegamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -843,7 +847,7 @@ msgid "Show all settings" msgstr "Mostra tutte le impostazioni" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "Indirizzo statico" @@ -851,11 +855,11 @@ msgstr "Indirizzo statico" msgid "Status" msgstr "Stato proprietà" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "Impostazioni di sistema" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -873,7 +877,7 @@ msgstr "" "Non esiste un set di istruzioni Advanced Encryption Standard (AES) integrato " "nel processore, dovresti usare chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -883,7 +887,7 @@ msgstr "" "qualcosa non va a causa di ritrasmissioni RTO non riconosciute e segnala " "questo sospetto al livello di rete." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -895,7 +899,7 @@ msgstr "" msgid "Total traffic:" msgstr "Traffico globale:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "Tipo" @@ -908,7 +912,7 @@ msgstr "UBOND può sostituire Glorytun con connessioni con la stessa latenza" msgid "UBOND password" msgstr "Password UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -929,7 +933,7 @@ msgstr "" msgid "Update server" msgstr "Aggiorna server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "Velocità di caricamento (Kb / s)" @@ -938,8 +942,8 @@ msgstr "Velocità di caricamento (Kb / s)" msgid "Uptime:" msgstr "Tempo di funzionamento:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "Utilizzato da Glorytun UDP e SQM / QoS se abilitato." @@ -988,7 +992,7 @@ msgstr "Versione" msgid "Wan IP and gateway are identical" msgstr "IP Wan e gateway sono identici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -1005,7 +1009,7 @@ msgstr "Mago" msgid "You" msgstr "Ti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "Puoi abilitare MPTCP su VPN se il tuo provider filtra Multipath TCP." @@ -1013,7 +1017,7 @@ msgstr "Puoi abilitare MPTCP su VPN se il tuo provider filtra Multipath TCP." msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "Puoi usare DHCP se hai più porte ethernet reali." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1025,7 +1029,7 @@ msgstr "" "È possibile utilizzare un prefisso IPv6 pubblico solo se si imposta un solo " "server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "È necessario disabilitare il DHCP sui modem e impostare l'IP in reti " @@ -1035,12 +1039,16 @@ msgstr "" msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Dovresti disabilitare IPv6 qui se il server non fornisce IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "È necessario disabilitare SQM per LTE o qualsiasi interfaccia con velocità " "variabile." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "Il tuo IP non è stato affittato da questo router" @@ -1049,7 +1057,7 @@ msgstr "Il tuo IP non è stato affittato da questo router" msgid "address:" msgstr "Indirizzo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "Auto" diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po index b10a54aea..365648390 100644 --- a/luci-app-openmptcprouter/po/oc/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po @@ -25,7 +25,7 @@ msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "APN" @@ -35,7 +35,7 @@ msgstr "APN" msgid "Add a new server" msgstr "Ajustar un servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "Ajustar una interfàcia" @@ -66,12 +66,12 @@ msgid "" "processor." msgstr "Las instruccions AES son integradas al processor." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "Tipe d’autentificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "Salvagarda" @@ -80,7 +80,7 @@ msgstr "Salvagarda" msgid "Backup on server" msgstr "Salvagarda sul servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "Equilibratge" @@ -92,7 +92,7 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "Granda diferéncia de temps entre lo servidor e lo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "Pont" @@ -107,7 +107,7 @@ msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "Per defaut lo VPN es utilizat pel trafic qu’es pas TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "CHAP" @@ -127,15 +127,15 @@ msgstr "" msgid "Can\\'t ping server" msgstr "Cap de responsa del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "Causissètz l’interfàcia fisica." @@ -148,7 +148,7 @@ msgid "Core temp:" msgstr "Temperatura del còr :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "DHCP" @@ -156,7 +156,7 @@ msgstr "DHCP" msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "Desbugatge" @@ -171,53 +171,53 @@ msgid "Default VPN" msgstr "VPN per defaut" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "Suprimir" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "Periferic" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "Desactivar TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "" "Desactivacion de TCP Fast Open per Lunix e dins la configuracion de " "Shadowsocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 #, fuzzy #| msgid "Disable gateway ping" msgid "Disable default gateway" msgstr "Desactivar lo ping cap a la palanca" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "Desactivar las pròvas extèrnas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "Desactivar lo ping cap a la palanca" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "Desactiva la pròva ping de la palanca" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" @@ -230,58 +230,58 @@ msgstr "" msgid "Disable server" msgstr "Desactivar lo ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "Desactivar lo ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "Desactivar la pròva ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 #, fuzzy #| msgid "Disable external check" msgid "Disable tracebox test" msgstr "Desactivar las pròvas extèrnas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "Desactivat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "Velocitat de telecargament (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "Cambiament dinamic" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "Activar l’IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "Active SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "Activar las interferéncias per ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 #, fuzzy #| msgid "Disable TCP Fast Open" msgid "Enable TCP Low Latency" msgstr "Desactivar TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "Activat" @@ -313,7 +313,7 @@ msgstr "" msgid "Force retrieve settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "solament GPRS" @@ -335,53 +335,53 @@ msgstr "Clau Glorytun" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "TTL per defaut IPv4 IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "Relambi d’expiracion IPv4 TCP FIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "Temps de manten TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries1" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries2" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "Masqueta ret IPv4" @@ -408,7 +408,7 @@ msgstr "Lo tunèl IPv6 respond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "Paramètres interfàcias" @@ -435,17 +435,17 @@ msgstr "" msgid "LAN interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "LTE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "Etiqueta" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "Etiqueta per l’interfàcia" @@ -481,40 +481,40 @@ msgstr "MPTCP es pas activat sul servidor" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "MPTCP over VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "Principal" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "Seleccion de l’interfàcia màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "Frequéncia maximala del processor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "Frequéncia minimala del processor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "Modem per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "ModemManager" @@ -522,8 +522,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -544,11 +544,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "CAP" @@ -562,7 +562,7 @@ msgstr "Interfàcia ret doblada" msgid "Network overview" msgstr "Vista ret" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "Paramètres ret" @@ -588,7 +588,7 @@ msgstr "" msgid "No available backup on server." msgstr "Cap de salvagarda pas disponibla sul servidor." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "Cap de modificacion" @@ -620,29 +620,29 @@ msgstr "Paramètres dels servidors" msgid "None" msgstr "Cap" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "Normala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "Modul d’interferéncia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "Tipe d’interferéncia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "Las interferéncias seràn activadas dels dos costats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "En modificant dins l’assistent" @@ -661,65 +661,65 @@ msgstr "OpenMPTCProuter" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "Other" msgstr "Autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 #, fuzzy #| msgid "Server settings" msgid "Other settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "Identificant PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "Còdi PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "PPPoE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "Preferir LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "Preferir UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "Protocòl" @@ -737,7 +737,7 @@ msgstr "Paramètres del VPN" msgid "Proxy traffic:" msgstr "Trafic mandatari :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "QMI" @@ -753,24 +753,24 @@ msgstr "Restaurar salvagarda" msgid "Retrieve settings from server" msgstr "Recuperar la configuracion personalizada del servidor estant" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "Salvagardar e aplicar" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "Salvagardar las estatisticas de vnstats sul disc" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "Salvagardar las estatisticas de vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "Regulator a l’escala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "Seleccionatz lo periferic per l’interfàcia." @@ -804,15 +804,15 @@ msgstr "Paramètres servidor" msgid "Server username" msgstr "Lo nom d'utilizaire servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "Service Type" msgstr "Tipe de servici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "Botatz una IP dins lo meteis ret que lo modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "Botatz l’IP del modem aquí" @@ -833,21 +833,25 @@ msgstr "" "activat, per tot lo trafic quand ShadowSocks es desactivat." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#, fuzzy +#| msgid "" +#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " +#| "for all traffic if ShadowSocks is disabled." msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" "Configura lo VPN utilizat per defaut per l’UDP e l’ICMP quand ShadowSocks es " "activat, per tot lo trafic quand ShadowSocks es desactivat." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Reglatz una valor entre 80-95% de la velocitat de telecargament maximala. 0 " "per desactivar SQM/QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -878,7 +882,7 @@ msgid "Show all settings" msgstr "Veire totes los paramètres" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "Adreça estatica" @@ -886,11 +890,11 @@ msgstr "Adreça estatica" msgid "Status" msgstr "Estatut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "Paramètres sistèma" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -905,14 +909,14 @@ msgstr "" "Las instruccions AES son pas integradas al processor, deuriatz utilizar " "chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " "to the network layer." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -922,7 +926,7 @@ msgstr "" msgid "Total traffic:" msgstr "Tradif total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "Tipe" @@ -936,7 +940,7 @@ msgstr "" msgid "UBOND password" msgstr "Senhal UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -956,7 +960,7 @@ msgstr "Met a jorn lo servidor amb la darrièra version quand cal." msgid "Update server" msgstr "Mesa a jorn del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "Velocitat de mandadís (Kb/s)" @@ -965,8 +969,8 @@ msgstr "Velocitat de mandadís (Kb/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Utilizat per Glorytun UDP e SQM/QoS se activat. 0 per utilizar la valor per " @@ -1021,7 +1025,7 @@ msgstr "" msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -1037,7 +1041,7 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "Podètz utilizar MTPCP over VPN se vòstre provesidor filtra Multipath TCP." @@ -1046,7 +1050,7 @@ msgstr "" msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1058,7 +1062,7 @@ msgstr "" msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "Vos cal desactivar lo DHCP sus vòstres modems e configurar lor IP dins de " @@ -1068,12 +1072,16 @@ msgstr "" msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Deuriatz desactivar IPv6 aquí se lo servidor es pas compatible IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "Vos cal desactivar SQM per la 4G o tota interfàcia amb una velocitat fòrça " "instabla." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "" @@ -1082,7 +1090,7 @@ msgstr "" msgid "address:" msgstr "Adreça IPv4 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "auto" diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index c0dedccf9..892c42a0e 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -26,7 +26,7 @@ msgstr "简单VPN" msgid "API username to retrieve personnalized settings from the server." msgstr "API用户名,以从蚂蚁聚合服务器检索个性化设置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "APN" msgstr "APN" @@ -34,7 +34,7 @@ msgstr "APN" msgid "Add a new server" msgstr "添加一个新蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:815 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "Add an interface" msgstr "添加网卡" @@ -63,12 +63,12 @@ msgid "" "processor." msgstr "处理器中集成了高级加密标准(AES)指令集." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Authentication Type" msgstr "认证类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 msgid "Backup" msgstr "备份" @@ -77,7 +77,7 @@ msgstr "备份" msgid "Backup on server" msgstr "在服务器上备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "均衡" @@ -89,7 +89,7 @@ msgstr "测试版" msgid "Big time difference between the server and the router" msgstr "服务器和路由器之间的时间差距很大" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:470 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 msgid "Bridge" msgstr "桥接" @@ -102,7 +102,7 @@ msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "默认情况下,代理用于任何TCP(对于V2Ray是UDP)流量。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "CHAP" msgstr "CHAP" @@ -122,15 +122,15 @@ msgstr "无法从ShadowSocks获取公共蚂蚁聚合IP地址" msgid "Can\\'t ping server" msgstr "无法ping蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "如果要基于物理接口创建虚拟接口,请选择MacVLAN。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:408 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:540 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "Choose physical interface." msgstr "选择物理接口。" @@ -143,7 +143,7 @@ msgid "Core temp:" msgstr "核心温度:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 msgid "DHCP" msgstr "DHCP" @@ -151,7 +151,7 @@ msgstr "DHCP" msgid "DNS issue: can\\'t resolve hostname" msgstr "DNS问题:无法解析主机名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:272 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "调试模式" @@ -164,49 +164,49 @@ msgid "Default VPN" msgstr "默认VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Delete" msgstr "删除" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:620 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 msgid "Device" msgstr "设备" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "禁用TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "在Linux和Shadowsocks配置上禁用TCP快速打开" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:242 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 msgid "Disable default gateway" msgstr "关闭默认网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 msgid "Disable default gateway, no internet if VPS are down" msgstr "禁用默认网关,如果VPS关闭,则没办法链接互联网" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "禁用外部检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "禁用网关ping" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:237 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "禁用网关ping状态检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "禁止使用tracebox多路径测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向" @@ -215,54 +215,54 @@ msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向 msgid "Disable server" msgstr "关闭禁用聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "禁用服务器ping" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "禁用服务器ping状态检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 msgid "Disable tracebox test" msgstr "禁用跟蚂蚁跟踪测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Disabled" msgstr "关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:766 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "Download speed (Kb/s)" msgstr "下载速度 (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "动态变化" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "Enable IPv6" msgstr "开启 IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Enable SQM" msgstr "开启 SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "启用ShadowSocks混淆" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 msgid "Enable TCP Low Latency" msgstr "启用TCP低延迟" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "启用调试日志" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:707 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:719 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Enabled" msgstr "开启" @@ -286,7 +286,7 @@ msgstr "强制从服务器检索所有密钥。" msgid "Force retrieve settings" msgstr "强制检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "GPRS only" msgstr "仅GPRS" @@ -308,49 +308,49 @@ msgstr "Glorytun密钥" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "授予UCI访问luci-app-openmptcprouter的权限" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "启用keepalive时,TCP多久发送一次keepalive消息." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "IPv4 IP默认TTL" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "IPv4 TCP FIN超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP快速打开" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP保持时间" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "IPv4 TCP SYN重试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN重试1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:159 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN重试2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 msgid "IPv4 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:556 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 netmask" msgstr "IPv4网络掩码" @@ -375,7 +375,7 @@ msgstr "IPv6隧道DOWN" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:435 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 msgid "Interfaces settings" msgstr "接口设置" @@ -398,17 +398,17 @@ msgstr "用于服务器配置密钥以及设置的密钥." msgid "LAN interfaces settings" msgstr "局域网接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 msgid "LTE" msgstr "LTE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Label" msgstr "标签" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:460 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Label for the interface" msgstr "接口标签" @@ -443,40 +443,40 @@ msgstr "服务器上未启用MPTCP" msgid "MPTCP may not be enabled on the server" msgstr "服务器上可能未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:746 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "MPTCP over VPN" msgstr "通过MPTCP的VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 msgid "MacVLAN" msgstr "Macvlan" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 msgid "Master" msgstr "主" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:282 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "主网卡选择" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "最大扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "最小扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:661 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "Modem default" msgstr "调制解调器默认" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 msgid "Modem init timeout" msgstr "调制解调器初始化超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:506 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "ModemManager" msgstr "调制解调器管理器" @@ -484,8 +484,8 @@ msgstr "调制解调器管理器" msgid "More than one default VPN is enabled" msgstr "启用了多个默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:704 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 msgid "Multipath TCP" msgstr "多路径TCP" @@ -506,11 +506,11 @@ msgstr "已定义多路径主机" msgid "Multipath seems to be blocked on the connection" msgstr "多路径似乎在连接上被阻止" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 msgid "NONE" msgstr "无" @@ -524,7 +524,7 @@ msgstr "网络接口重复" msgid "Network overview" msgstr "网络概述" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "网络设置" @@ -550,7 +550,7 @@ msgstr "不到1秒内未检测到WAN IP地址" msgid "No available backup on server." msgstr "服务器上没有可用的备份." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:287 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "没变" @@ -580,29 +580,29 @@ msgstr "未定义蚂蚁聚合服务器" msgid "None" msgstr "没有" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "Normal" msgstr "正常" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "活动TCP连接尝试的初始SYN的次数将被重新传输." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "混淆插件" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "混淆类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 msgid "Obfuscating will be enabled on both side" msgstr "双方都将启用混淆" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "更换向导时" @@ -619,59 +619,59 @@ msgstr "蚂蚁聚合路由器" msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN不能用于多VPS配置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 msgid "Optimize for latency instead of bandwidth" msgstr "优化延迟而不是带宽" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "Other" msgstr "其他" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:219 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 msgid "Other settings" msgstr "蚂蚁聚合其他设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "PAP/CHAP password" msgstr "PAP/CHAP 密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP username" msgstr "PAP/CHAP 账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:652 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "PIN code" msgstr "PIN码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 msgid "PPPoE" msgstr "PPPoE拨号" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "Physical interface" msgstr "物理接口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Prefer LTE" msgstr "首选LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 msgid "Prefer UMTS" msgstr "首选 UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Protocol" msgstr "协议" @@ -687,7 +687,7 @@ msgstr "代理设置" msgid "Proxy traffic:" msgstr "代理流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "QMI" msgstr "QMI" @@ -703,24 +703,24 @@ msgstr "恢复备份" msgid "Retrieve settings from server" msgstr "从服务器检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:824 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 msgid "Save & Apply" msgstr "保存&应用" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "将vnstats统计信息保存在磁盘上" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:222 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "保存vnstats统计信息" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "超频" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:818 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 msgid "Select the device you want to base the interface on." msgstr "选择要作为基础的接口." @@ -751,15 +751,15 @@ msgstr "蚂蚁聚合服务器设定" msgid "Server username" msgstr "服务器用户名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "Service Type" msgstr "服务类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "Set an IP in the same network as the modem" msgstr "在与调制解调器相同的网络中设置IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:567 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 msgid "Set here IP of the modem" msgstr "在此处设置调制解调器的IP" @@ -776,19 +776,23 @@ msgstr "" "理." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#, fuzzy +#| msgid "" +#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " +#| "for all traffic if ShadowSocks is disabled." msgid "" -"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for " -"all traffic if ShadowSocks is disabled." +"Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " +"for all traffic if proxy is disabled." msgstr "" "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" "ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "设置最大下载速度链接的80-95%之间的值。 0禁用SQM / QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / QoS." @@ -815,7 +819,7 @@ msgid "Show all settings" msgstr "显示所有设定" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Static address" msgstr "静态地址" @@ -823,11 +827,11 @@ msgstr "静态地址" msgid "Status" msgstr "状态" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "系统设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 msgid "" "The length of time an orphaned (no longer referenced by any application) " "connection will remain in the FIN_WAIT_2 state before it is aborted at the " @@ -842,7 +846,7 @@ msgid "" "the processor, you should use chacha20." msgstr "CPU系统设置中没有集成高级加密标准(AES)指令集,您应该使用chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -851,7 +855,7 @@ msgstr "" "此值会影响延时,在此时间之前,TCP决定由于未确认的RTO重传而出了问题,并将这种" "错误报告给网络层。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:164 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -861,7 +865,7 @@ msgstr "当未确认RTO重传时,此值会影响有效TCP连接的超时。" msgid "Total traffic:" msgstr "总流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:465 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 msgid "Type" msgstr "类型" @@ -874,7 +878,7 @@ msgstr "UBOND可以用具有相同延迟的连接替换Glorytun" msgid "UBOND password" msgstr "UBOND密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -894,7 +898,7 @@ msgstr "在需要时,将服务器远程更新到最新版本." msgid "Update server" msgstr "更新服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "Upload speed (Kb/s)" msgstr "上传速度 (Kb/s)" @@ -903,8 +907,8 @@ msgstr "上传速度 (Kb/s)" msgid "Uptime:" msgstr "运行时间:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:771 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:787 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." @@ -953,7 +957,7 @@ msgstr "版本" msgid "Wan IP and gateway are identical" msgstr "WAN IP和网关相同" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -968,7 +972,7 @@ msgstr "蚂蚁聚合向导" msgid "You" msgstr "你" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "如果提供商过滤多路径TCP,则可以启用VPN上的MPTCP." @@ -976,7 +980,7 @@ msgstr "如果提供商过滤多路径TCP,则可以启用VPN上的MPTCP." msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "如果您有多个真实的以太网端口,则可以使用DHCP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -988,7 +992,7 @@ msgstr "" msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "仅当您仅设置一台服务器时,才能使用公共IPv6前缀。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "您必须在调制解调器上禁用DHCP并在其他网络中设置IP." @@ -996,10 +1000,14 @@ msgstr "您必须在调制解调器上禁用DHCP并在其他网络中设置IP." msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "您应该为LTE或任何变速接口禁用SQM." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +msgid "You shouldn't do that and you should redirect only needed ports" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "您的IP未通过此路由器" @@ -1008,7 +1016,7 @@ msgstr "您的IP未通过此路由器" msgid "address:" msgstr "地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "auto" msgstr "自动" From 9d26801f08a85356d84cc90263dce67a4baf0986 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Thu, 5 Nov 2020 11:20:21 +0000 Subject: [PATCH 025/289] Translated using Weblate (French) Currently translated at 100.0% (239 of 239 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/fr/ --- luci-app-openmptcprouter/po/fr/openmptcprouter.po | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 4e2cf44c5..da23457a2 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-21 12:55+0000\n" +"PO-Revision-Date: 2020-11-05 11:21+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -797,16 +797,12 @@ msgstr "" "activé, pour TCP et UDP lorsque V2Ray est activé." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 -#, fuzzy -#| msgid "" -#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " -#| "for all traffic if ShadowSocks is disabled." msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." msgstr "" -"Configure le VPN utilisé par défaut pour UDP et ICMP quand ShadowSocks est " -"activé, pour tout le trafic quand ShadowSocks est désactivé." +"Configure le VPN utilisé par défaut pour ICMP (et UDP si le proxy est " +"ShadowSocks), pour tout le trafic quand le proxy est désactivé." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 msgid "" @@ -1050,6 +1046,8 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "" +"Vous ne devriez pas faire cela et vous ne devriez rediriger que les ports " +"nécessaires" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" From 14cf13dc185ed2d47ffbf23ec325f05c6afb5219 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 14:16:51 +0100 Subject: [PATCH 026/289] Fix issue with glorytun MTU --- .../share/omr/post-tracking.d/post-tracking | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 551f6dc96..d837d2623 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -433,27 +433,31 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om fi uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE="interface" uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then - mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then - if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) - #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } + if [ "$(uci -q get glorytun.vpn.enable)" != "1" ]; then + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu + ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") + elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then + if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then + local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) + #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) + [ -n "$mtu" ] && { + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu + ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") + } + else + local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + [ -n "$mtu" ] && { + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu + ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") + } + fi else - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) - [ -n "$mtu" ] && { - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu - ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") - } + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") fi else uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") From 82ae4046a3a9140f15b4b399f4c92c104a66022d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 5 Nov 2020 15:28:41 +0100 Subject: [PATCH 027/289] Fix typo error --- .../luasrc/view/openmptcprouter/wizard.htm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 4e0829df6..c48fc1f70 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -531,7 +531,7 @@ <% end end - if iffinf == 0 and uci:get("network",ifname,"ifname") ~= nil then + if iffind == 0 and uci:get("network",ifname,"ifname") ~= nil then %> <% @@ -589,7 +589,7 @@ <% end - if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then + if iffind == 0 and uci:get("network",ifname,"device") ~= nil then %> <% @@ -610,7 +610,7 @@ <% end - if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then + if iffind == 0 and uci:get("network",ifname,"device") ~= nil then %> <% @@ -636,7 +636,7 @@ <% end end - if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then + if iffind == 0 and uci:get("network",ifname,"device") ~= nil then %> <% From 59510d2ad3a0d8c5e512e4d31602787e80901f3b Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 5 Nov 2020 23:23:37 +0800 Subject: [PATCH 028/289] updagecss logo --- .../resources/status/css/wanstatus.css | 2 +- .../luci-static/openmptcprouter/favicon.png | Bin 535 -> 8175 bytes .../openmptcprouter/omr-logo-apple.png | Bin 15855 -> 8175 bytes .../openmptcprouter/images/omr-logo.png | Bin 143852 -> 8175 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css b/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css index 38b1d6e26..cc056af3f 100644 --- a/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css +++ b/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css @@ -296,7 +296,7 @@ Thanks :)*/ .network-node .info .title i { font-weight: lighter; - font-size: 8em; + font-size: 0.8em; text-transform: uppercase; } diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/favicon.png b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/favicon.png index 7c3f3acb1f0c7c142d0dbd3f42a4926b07f8eb38..7ee7779108d5a958e17f305962fef3f5715fbafd 100644 GIT binary patch literal 8175 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 FV1l>8OPc@y diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/omr-logo.png b/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/omr-logo.png index befc11cb5306874c7d482561f8f2044565bc3fa6..7ee7779108d5a958e17f305962fef3f5715fbafd 100644 GIT binary patch literal 8175 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 z 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 Date: Sat, 7 Nov 2020 18:48:54 +0100 Subject: [PATCH 029/289] Fix IPv6 support by not using sysctl --- omr-6in4/files/etc/init.d/omr-6in4 | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index dbd61b3a1..3785c2031 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -17,9 +17,11 @@ set_shadowsocks_address() { set_ipv6_state() { local disable_ipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)" [ -z "$disable_ipv6" ] && disable_ipv6="1" - previous=$(sysctl -qn net.ipv6.conf.all.disable_ipv6 | tr -d "\n") - sysctl -qw net.ipv6.conf.all.disable_ipv6=$disable_ipv6 - sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$disable_ipv6:" /etc/sysctl.d/zzz_openmptcprouter.conf + #previous=$(sysctl -qn net.ipv6.conf.all.disable_ipv6 | tr -d "\n") + previous="$(uci get network.lan.ipv6)" + #sysctl -qw net.ipv6.conf.all.disable_ipv6=$disable_ipv6 + #sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$disable_ipv6:" /etc/sysctl.d/zzz_openmptcprouter.conf + sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*::" /etc/sysctl.d/zzz_openmptcprouter.conf uci -q batch <<-EOF >/dev/null set firewall.@defaults[0].disable_ipv6=$disable_ipv6 @@ -82,14 +84,14 @@ set_ipv6_state() { commit shadowsocks-libev EOF /etc/init.d/odhcpd restart - if [ "$previous" != "$disable_ipv6" ]; then + if [ "$previous" != "1" ]; then env -i /bin/ubus call network reload fi } start_service() { - [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "$(sysctl -n net.ipv6.conf.all.disable_ipv6)" ] && set_ipv6_state + [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get network.lan.ipv6)" != "1" ] && set_ipv6_state [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" = "1" ] && { ifdown omr6in4 return From f979ebc643d48693ac08871e275a29a85107dfdc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 7 Nov 2020 18:57:47 +0100 Subject: [PATCH 030/289] Remove saved proxy IP if proxy down --- omr-tracker/files/bin/omr-tracker-ss | 4 ++++ omr-tracker/files/bin/omr-tracker-v2ray | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 33405601b..525c4a979 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -30,9 +30,13 @@ _get_ip() { uci -q set openmptcprouter.omr.detected_public_ipv4="$(curl -s -4 -m 3 $check_ipv4_website)" if [ "$(uci -q get openmptcprouter.omr.shadowsocks)" != "down" ]; then uci -q set openmptcprouter.omr.detected_ss_ipv4="$(curl -s -4 --socks5 "${proxy}" --max-time 3 $check_ipv4_website)" + else + uci -q del openmptcprouter.omr.detected_ss_ipv4 fi if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ]; then uci -q set openmptcprouter.omr.detected_public_ipv6="$(curl -s -6 -m 3 $check_ipv6_website)" + else + uci -q del openmptcprouter.omr.detected_public_ipv6 # uci -q set openmptcprouter.omr.detected_ss_ipv6=$(curl -s -6 --socks5 ":::1111" --max-time 3 http://ip.openmptcprouter.com) fi fi diff --git a/omr-tracker/files/bin/omr-tracker-v2ray b/omr-tracker/files/bin/omr-tracker-v2ray index b7456c23c..32ef73c6b 100755 --- a/omr-tracker/files/bin/omr-tracker-v2ray +++ b/omr-tracker/files/bin/omr-tracker-v2ray @@ -28,11 +28,15 @@ _get_ip() { check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" [ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com" uci -q set openmptcprouter.omr.detected_public_ipv4="$(curl -s -4 -m 3 $check_ipv4_website)" - if [ "$(uci -q get openmptcprouter.omr.shadowsocks)" != "down" ]; then + if [ "$(uci -q get openmptcprouter.omr.v2ray)" != "down" ]; then uci -q set openmptcprouter.omr.detected_ss_ipv4="$(curl -s -4 --socks5 "${proxy}" --max-time 3 $check_ipv4_website)" + else + uci -q del openmptcprouter.omr.detected_ss_ipv4 fi if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ]; then uci -q set openmptcprouter.omr.detected_public_ipv6="$(curl -s -6 -m 3 $check_ipv6_website)" + else + uci -q del openmptcprouter.omr.detected_public_ipv6 # uci -q set openmptcprouter.omr.detected_ss_ipv6=$(curl -s -6 --socks5 ":::1111" --max-time 3 http://ip.openmptcprouter.com) fi fi From 566ae2d4b6de24270baa1f95d9f6c7ccd163d9f4 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 7 Nov 2020 18:58:10 +0100 Subject: [PATCH 031/289] Check FS before mount by default --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index d350e3c00..67bd16809 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -8,6 +8,8 @@ uci -q batch <<-EOF >/dev/null commit rpcd luci.apply.timeout='20' commit luci + fstab.@global[0].check_fs='1' + commit fstab EOF [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep raspberry)" ] && [ "$(uci -q get openmptcprouter.settings.scaling_governor)" != "performance" ] && { From 3690d4c21bdf1800ff27cc3aba52f465afacd57d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 7 Nov 2020 18:58:37 +0100 Subject: [PATCH 032/289] No disable IPv6 via sysctl --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 1a4472421..c34a0bf8e 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1291,7 +1291,7 @@ _set_config_from_vps() { uci -q batch <<-EOF >/dev/null set openmptcprouter.settings.disable_ipv6=1 EOF - sysctl -qw net.ipv6.conf.all.disable_ipv6=1 + #sysctl -qw net.ipv6.conf.all.disable_ipv6=1 else uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.ipv6=$vps_ipv6_addr From 447190ff0c785c5766aa3a18b92467fdd384ff3f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 7 Nov 2020 18:59:00 +0100 Subject: [PATCH 033/289] remove log from v2ray about dnsmasq --- v2ray-core/files/etc/init.d/v2ray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index 513058ce0..3e4b38c64 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -1882,7 +1882,7 @@ setup_transparent_proxy() { ext_args="--dport 0:1023 $ext_args" fi - if [ -n "$(cat "$FILE_V2RAY_DNSMASQ_CACHE" | grep -v "^$" | grep -v "^#")" ] ; then + if [ -f $FILE_V2RAY_DNSMASQ_CACHE ] && [ -n "$(cat "$FILE_V2RAY_DNSMASQ_CACHE" | grep -v "^$" | grep -v "^#")" ] ; then local dir="$(dirname "$FILE_V2RAY_DNSMASQ")" test -d "$dir" || mkdir -p "$dir" cat "$FILE_V2RAY_DNSMASQ_CACHE" >"$FILE_V2RAY_DNSMASQ" 2>/dev/null From e9ed54111c69cf0f0b1c18dfb1ffbbc2d1b9ac4d Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 8 Nov 2020 22:47:06 +0800 Subject: [PATCH 034/289] Update omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 119 ++++++++++++++++++----- 1 file changed, 93 insertions(+), 26 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index bf64d41d1..ddd1085a4 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -1,27 +1,37 @@ config defaults 'defaults' option enabled '1' - list hosts '4.2.2.1' - list hosts '8.8.8.8' - list hosts '80.67.169.12' - list hosts '8.8.4.4' - list hosts '9.9.9.9' - list hosts '1.0.0.1' - list hosts '114.114.115.115' - list hosts '1.2.4.8' - list hosts '80.67.169.40' - list hosts '114.114.114.114' - list hosts '1.1.1.1' - option timeout '2' - option tries '3' - option interval '2' - option interval_tries '1' - option type 'ping' - option wait_test '0' - option options '' + option tries '3' + option interval_tries '1' + option type 'ping' + option mail_alert '0' + option wait_test '1' + option timeout '20' + option interval '5' + list hosts '4.2.2.1' + list hosts '8.8.8.8' + list hosts '80.67.169.12' + list hosts '8.8.4.4' + list hosts '9.9.9.9' + list hosts '114.114.115.115' + list hosts '1.2.4.8' + list hosts '80.67.169.40' + list hosts '114.114.114.114' + list hosts '1.1.1.1' + list hosts '223.5.5.5' + list hosts '210.2.4.8' + list hosts '9.9.9.9' + list hosts '180.76.76.76' + list hosts '114.114.115.115' + list hosts '119.29.29.29' + list hosts '182.254.116.116' config proxy 'proxy' option enabled '1' - list hosts '1.0.0.1' + option tries '3' + option interval_tries '1' + option interval '5' + option timeout '20' + option wait_test '2' list hosts '212.27.48.10' list hosts '198.27.92.1' list hosts '151.101.129.164' @@ -29,15 +39,72 @@ config proxy 'proxy' list hosts '1.1.1.1' list hosts '74.82.42.42' list hosts '176.103.130.130' - option timeout '10' - option tries '3' - option wait_test '0' - option interval_tries '1' - option interval '5' + list hosts '114.114.114.114' + list hosts '223.5.5.5' + list hosts '106.11.249.99' + list hosts '106.11.172.51' + list hosts '106.11.248.144' + list hosts '140.205.135.3' + list hosts '140.205.60.46' + list hosts '106.11.172.9' + list hosts '106.11.253.86' + list hosts '106.11.172.56' + list hosts '106.11.253.83' + list hosts '106.11.248.146' + list hosts '140.205.94.189' + list hosts '140.205.220.96' + list hosts '180.149.153.187' + list hosts '180.149.138.57' + list hosts '61.129.7.47' + list hosts '183.3.226.35' + list hosts '123.151.137.18' + list hosts '13.107.21.200' + list hosts '204.79.197.200' + list hosts '123.58.180.7' + list hosts '123.58.180.8' + list hosts '123.126.55.41' + list hosts '211.159.191.18' + list hosts '4.2.2.1' + list hosts '8.8.8.8' + list hosts '80.67.169.12' + list hosts '8.8.4.4' + list hosts '9.9.9.9' + list hosts '114.114.115.115' + list hosts '1.2.4.8' + list hosts '80.67.169.40' + list hosts '114.114.114.114' + list hosts '1.1.1.1' + list hosts '223.5.5.5' + list hosts '210.2.4.8' + list hosts '9.9.9.9' + list hosts '180.76.76.76' + list hosts '114.114.115.115' + list hosts '119.29.29.29' + list hosts '182.254.116.116' config server 'server' option enabled '1' option tries '3' - option timeout '10' + option interval '5' + option timeout '20' + option wait_test '2' + +config interface 'omrvpn' + option type 'none' + option interval '4' + option mail_alert '0' + option enabled '1' option wait_test '0' - option interval '5' \ No newline at end of file + option timeout '20' + option tries '3' + list hosts '4.2.2.1' + list hosts '8.8.8.8' + list hosts '223.5.5.5' + list hosts '223.6.6.6' + list hosts '180.76.76.76' + list hosts '114.114.115.115' + list hosts '119.29.29.29' + list hosts '182.254.116.116' + list hosts '1.2.4.8' + list hosts '210.2.4.8' + list hosts '9.9.9.9' From 3781075d23967965094b64218b7de6555f6a3c10 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 8 Nov 2020 19:45:32 +0100 Subject: [PATCH 035/289] Add notice that v2ray doesn't support multi ip for now --- .../luasrc/view/openmptcprouter/wizard.htm | 1 + .../po/templates/openmptcprouter.pot | 302 +++++++++--------- 2 files changed, 154 insertions(+), 149 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index c48fc1f70..c0a380416 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -178,6 +178,7 @@

diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 45d05b5e7..44d2aae48 100644 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -1,28 +1,28 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "" @@ -31,11 +31,11 @@ msgstr "" msgid "Advanced Settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -45,18 +45,18 @@ msgstr "" msgid "All router settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "" @@ -77,20 +77,20 @@ msgstr "" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "" @@ -110,19 +110,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "" @@ -130,8 +130,8 @@ msgstr "" msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "" @@ -143,22 +143,22 @@ msgstr "" msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "Default Proxy" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "" @@ -199,7 +199,7 @@ msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 msgid "Disable server" msgstr "" @@ -215,12 +215,12 @@ msgstr "" msgid "Disable tracebox test" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "" @@ -229,11 +229,11 @@ msgid "Dynamic change" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "" @@ -249,16 +249,16 @@ msgstr "" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" @@ -266,15 +266,15 @@ msgstr "" msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 msgid "Force retrieve all keys from server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "" @@ -283,12 +283,12 @@ msgstr "" msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "" @@ -328,21 +328,21 @@ msgstr "" msgid "IPv4 TCP SYN retries2" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "" @@ -351,7 +351,7 @@ msgstr "" msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "IPv6 settings" msgstr "" @@ -363,40 +363,40 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "LAN interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "" @@ -414,12 +414,12 @@ msgstr "" msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "" @@ -431,16 +431,16 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "" @@ -456,15 +456,15 @@ msgstr "" msgid "Minimum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "" @@ -472,8 +472,8 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "" @@ -494,11 +494,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "" @@ -564,11 +564,11 @@ msgstr "" msgid "No server defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "" @@ -594,7 +594,11 @@ msgstr "" msgid "On wizard change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "" @@ -603,7 +607,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -611,8 +615,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "" @@ -620,46 +624,46 @@ msgstr "" msgid "Other settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 msgid "PAP/CHAP password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Physical interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "" @@ -667,7 +671,7 @@ msgstr "" msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 msgid "Proxy settings" msgstr "" @@ -675,7 +679,7 @@ msgstr "" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "" @@ -687,12 +691,12 @@ msgstr "" msgid "Restore backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "" @@ -708,7 +712,7 @@ msgstr "" msgid "Scaling governor" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "" @@ -716,63 +720,63 @@ msgstr "" msgid "Send backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 msgid "Server IP will be set for proxy and VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -785,12 +789,12 @@ msgstr "" msgid "ShadowSocks is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "" @@ -798,8 +802,8 @@ msgstr "" msgid "Show all settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "" @@ -818,7 +822,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -841,20 +845,20 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "" @@ -874,7 +878,7 @@ msgstr "" msgid "Update server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "" @@ -883,8 +887,8 @@ msgstr "" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" @@ -892,15 +896,15 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "V2Ray is used for TCP and UDP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "" @@ -908,7 +912,7 @@ msgstr "" msgid "VPN is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "" @@ -939,7 +943,7 @@ msgid "" "used to go outside." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "" @@ -948,33 +952,33 @@ msgstr "" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" @@ -990,7 +994,7 @@ msgstr "" msgid "address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "" @@ -1022,7 +1026,7 @@ msgstr "" msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "" From af535aa74bc621e0426268c6dc01de20d95046b7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 8 Nov 2020 19:58:04 +0100 Subject: [PATCH 036/289] Fix IPv6 support --- omr-6in4/files/bin/omr-6in4 | 2 +- omr-6in4/files/etc/init.d/omr-6in4 | 33 +++++++++++++++++++----------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 index 2905f8969..b11355cfb 100755 --- a/omr-6in4/files/bin/omr-6in4 +++ b/omr-6in4/files/bin/omr-6in4 @@ -22,7 +22,7 @@ while true; do [ -z "$peer" ] && peer=$(ip -4 r list dev $iface | grep via | grep -v default | grep -v metric | grep -v / | awk '{print $1; exit}' | tr -d "\n") [ -z "$peer" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") [ -n "$addr" ] && [ -n "$peer" ] && { - if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ] || [ "$(ip -6 route show default)" = "" ]; then + if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ] || [ "$(ip -6 route show default | grep via)" = "" ]; then logger -t "omr6in4" "Set network for OMR 6in4 to local $addr peer $peer" uci -q batch <<-EOF set network.omr6in4.ipaddr=$addr diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 3785c2031..e9898170c 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -44,6 +44,11 @@ set_ipv6_state() { EOF config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "0.0.0.0" + uci -q batch <<-EOF >/dev/null + commit network + commit dhcp + commit shadowsocks-libev + EOF else logger -t "omr-6in4" "Enable IPv6" uci -q batch <<-EOF >/dev/null @@ -57,14 +62,9 @@ set_ipv6_state() { add_list dhcp.lan.ra_flags='other-config' set network.lan.ipv6="1" set network.lan.delegate="0" + set network.omr6in4.force_link=1 + delete network.omr6in4.auto EOF - if [ "$(uci -q get v2ray.main.inbounds | grep omr6)" = "" ]; then - uci -q batch <<-EOF >/dev/null - add_list v2ray.main.inbounds="omr6" - commit v2ray - EOF - fi - if [ "$(network.lan.ip6assign)" = "" ]; then uci -q set network.lan.ip6assign='60' fi @@ -77,12 +77,20 @@ set_ipv6_state() { config_load shadowsocks-libev config_foreach set_shadowsocks_address ss_redir "::" + uci -q batch <<-EOF >/dev/null + commit network + commit dhcp + commit shadowsocks-libev + EOF + /etc/init.d/shadowsocks-libev restart + if [ "$(uci -q get v2ray.main.inbounds | grep omr6)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list v2ray.main.inbounds="omr6" + commit v2ray + EOF + /etc/init.d/v2ray restart + fi fi - uci -q batch <<-EOF >/dev/null - commit network - commit dhcp - commit shadowsocks-libev - EOF /etc/init.d/odhcpd restart if [ "$previous" != "1" ]; then env -i /bin/ubus call network reload @@ -98,6 +106,7 @@ start_service() { } [ "$(ifstatus omr6in4 | jsonfilter -e '@.up' | tr -d '\n')" != "true" ] && ifup omr6in4 multipath 6in4-omr6in4 off 2>&1 >/dev/null + procd_open_instance # shellcheck disable=SC2086 procd_set_param command /bin/omr-6in4 From 4e91d51a291f10e5608bf0b2fc09c1e77159f950 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Mon, 9 Nov 2020 13:44:09 +0800 Subject: [PATCH 037/289] Update header.htm --- .../luasrc/view/themes/openmptcprouter/header.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm index ca793822e..1b43a578e 100644 --- a/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm +++ b/luci-theme-openmptcprouter/luasrc/view/themes/openmptcprouter/header.htm @@ -67,7 +67,7 @@ <%- if current_omr_version ~= "" and latest_omr_version ~= "" and current_omr_version < latest_omr_version then -%> <%- end -%> From ebb7e19cfb3ff4586ba91c7bfd209ccb1e7827b5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 9 Nov 2020 10:57:33 +0100 Subject: [PATCH 038/289] Add a ttl for 6in4 tunnel --- omr-6in4/files/bin/omr-6in4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 index b11355cfb..b721f89a9 100755 --- a/omr-6in4/files/bin/omr-6in4 +++ b/omr-6in4/files/bin/omr-6in4 @@ -30,7 +30,7 @@ while true; do commit network EOF if [ -n "$(ip tunnel | grep omr6in4)" ]; then - ip tunnel change "6in4-omr6in4" mode sit local ${addr} remote ${peer} > /dev/null 2>&1 + ip tunnel change "6in4-omr6in4" mode sit local ${addr} remote ${peer} ttl 64 > /dev/null 2>&1 else ifup omr6in4 > /dev/null 2>&1 fi From 9842ac863333b1313431894a9961d97c53d89c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC?= Date: Fri, 6 Nov 2020 06:19:15 +0000 Subject: [PATCH 039/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 99.5% (238 of 239 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 892c42a0e..ee03fb92d 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-23 09:37+0000\n" -"Last-Translator: antrouter \n" +"PO-Revision-Date: 2020-11-06 06:58+0000\n" +"Last-Translator: 马 \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -1006,7 +1006,7 @@ msgstr "您应该为LTE或任何变速接口禁用SQM." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 msgid "You shouldn't do that and you should redirect only needed ports" -msgstr "" +msgstr "错了亲,试试重定向端口" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" From 4f81b56ef60313d39e6fcc67961a6297b5d7b7f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC?= Date: Fri, 6 Nov 2020 06:24:40 +0000 Subject: [PATCH 040/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (55 of 55 strings) Translation: OpenMPTCProuter/LuCI/applications/mptcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmptcp/zh_Hans/ --- luci-app-mptcp/po/zh_Hans/mptcp.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po index 6768bd908..91de029d0 100644 --- a/luci-app-mptcp/po/zh_Hans/mptcp.po +++ b/luci-app-mptcp/po/zh_Hans/mptcp.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" -"Last-Translator: antrouter \n" +"PO-Revision-Date: 2020-11-06 06:58+0000\n" +"Last-Translator: 马 \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -154,7 +154,7 @@ msgstr "" #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56 msgid "One interface must be set as master" -msgstr "蚂蚁提醒你设置一个网卡必须为主接口" +msgstr "蚂蚁提醒您必须设置一个网卡为主接口" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:803 msgid "Outbound:" From fbc787c5c9a2579d25ad56cce929ea9f0f0f09e6 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 9 Nov 2020 10:03:32 +0000 Subject: [PATCH 041/289] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/ --- .../po/de/openmptcprouter.po | 302 +++++++++--------- .../po/fr/openmptcprouter.po | 302 +++++++++--------- .../po/it/openmptcprouter.po | 302 +++++++++--------- .../po/oc/openmptcprouter.po | 302 +++++++++--------- .../po/zh_Hans/openmptcprouter.po | 302 +++++++++--------- 5 files changed, 765 insertions(+), 745 deletions(-) diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index 67b7e314c..608f807a4 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -10,28 +10,28 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "'Dead Simple VPN' ist ein TCP VPN das 'Glorytun TCP' ersetzen kann" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "Schlüssel 'Dead Simple VPN'" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "API Benutzername zum Download der Settings vom Server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "Interface hinzufügen" @@ -40,11 +40,11 @@ msgstr "Interface hinzufügen" msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -56,19 +56,19 @@ msgstr "" msgid "All router settings" msgstr "Alle Router-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "" "Die CPU beherrscht AES-NI-Befehle zur Beschleunigung der Verschlüsselung." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "Authentifizierungs Methode" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "Backup" @@ -89,17 +89,17 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 #, fuzzy #| msgid "By default VPN is used for any traffic that is not TCP." msgid "" @@ -108,7 +108,7 @@ msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "" @@ -128,19 +128,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "Allgemeine Servereinstellungen" @@ -148,8 +148,8 @@ msgstr "Allgemeine Servereinstellungen" msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "DHCP" @@ -161,24 +161,24 @@ msgstr "" msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "Löschen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "" @@ -222,7 +222,7 @@ msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -242,12 +242,12 @@ msgstr "Server-Ping Status-Prüfung aus" msgid "Disable tracebox test" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "Download-Geschwindigkeit (kBits/s)" @@ -256,11 +256,11 @@ msgid "Dynamic change" msgstr "Dynamische Anpassung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "IPv6 aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "SQM aktiv" @@ -278,16 +278,16 @@ msgstr "TCP-Fast-Open aus" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "Aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "Verschlüsselung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -297,19 +297,19 @@ msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Force retrieve all keys from server." msgstr "API Benutzername zum Download der Settings vom Server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "" @@ -318,12 +318,12 @@ msgstr "" msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun-TCP wird standardmäßig für UDP und ICMP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "Glorytun Schlüssel" @@ -367,21 +367,21 @@ msgstr "IPv4 TCP SYN Wiederholversuche" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "IPv4-Netzmaske" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "" @@ -390,7 +390,7 @@ msgstr "" msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -404,43 +404,43 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "Schnittstellen-Einstellungen" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." msgstr "" "API-Schlüssel für die automatische Provisionierung der Schlüssel vom Server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "Bezeichnung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "Bezeichnung der Schnittstelle" @@ -460,14 +460,14 @@ msgstr "Aktuellstes auf dem Server verfügbares Backup:" msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" "MLVPN kann Glorytun auf Verbindungen mit identischer Latenz ('ping') " "ersetzen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "MLVPN Schlüssel" @@ -479,16 +479,16 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "MPTCP über VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "" @@ -504,15 +504,15 @@ msgstr "Maximaler CPU-Takt" msgid "Minimum scaling CPU frequency" msgstr "Minimaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "" @@ -520,8 +520,8 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "" @@ -542,11 +542,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "" @@ -614,11 +614,11 @@ msgstr "" msgid "No server defined" msgstr "Allgemeine Servereinstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "Keine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "" @@ -644,7 +644,11 @@ msgstr "Die Verschleierung wird auf beiden Seiten aktiviert." msgid "On wizard change" msgstr "Bei Änderungen mittels des Assistenten" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "Nur eine Verbindung kann als 'primär' definiert werden." @@ -653,7 +657,7 @@ msgstr "Nur eine Verbindung kann als 'primär' definiert werden." msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -661,8 +665,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 #, fuzzy msgid "Other" msgstr "Andere" @@ -673,50 +677,50 @@ msgstr "Andere" msgid "Other settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "Protokoll" @@ -724,7 +728,7 @@ msgstr "Protokoll" msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" @@ -734,7 +738,7 @@ msgstr "VPN-Einstellungen" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "" @@ -746,14 +750,14 @@ msgstr "Weiterleitung aller Ports vom Server auf den Router" msgid "Restore backup" msgstr "Parameter-Sicherung auf den Router wiederherstellen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Retrieve settings from server" msgstr "API Benutzername zum Download der Settings vom Server." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "Speichern und Anwenden" @@ -769,7 +773,7 @@ msgstr "Speichern der vnstat-Daten" msgid "Scaling governor" msgstr "Methode der CPU-Taktung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "Schnittstelle auswählen für diese Verbindung" @@ -777,12 +781,12 @@ msgstr "Schnittstelle auswählen für diese Verbindung" msgid "Send backup" msgstr "Parameter-Sicherung vom Router auf den Server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 #, fuzzy #| msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgid "Server IP will be set for proxy and VPN" @@ -790,39 +794,39 @@ msgstr "" "Die Server-IP wird für die Protokolle ShadowSockes, Glorytun, OpenVPN und " "MLVPN verwendet." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "Server-Benutzername" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 #, fuzzy #| msgid "Server key" msgid "Service Type" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "IP-Adresse im gleichen Subnetz wie das Modem angeben" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "IPv4 des Modems" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "Server als 'primär' definieren" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -834,7 +838,7 @@ msgstr "" "Auswahl des VPNs für UDP und ICMP (Sofern ShadowSocks für TCP aktiv ist. " "Andernfalls auch für TCP)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -846,14 +850,14 @@ msgstr "" "Auswahl des VPNs für UDP und ICMP (Sofern ShadowSocks für TCP aktiv ist. " "Andernfalls auch für TCP)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Wert von etwa 80-95% der Downstream-Bandbreite; '0' zum Abschalten von SQM/" "QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -870,12 +874,12 @@ msgstr "Parametrierungs-Assistent" msgid "ShadowSocks is not running" msgstr "Einstellungen ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "SchadowSocks wird für TCP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "ShadowSocks Schlüssel" @@ -883,8 +887,8 @@ msgstr "ShadowSocks Schlüssel" msgid "Show all settings" msgstr "Alle Einstellungen anzeigen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "Statische Adresse" @@ -903,7 +907,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -928,22 +932,22 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "" "UBOND kann ersatzweise für Glorytun genutzt werden, sofern die Verbindungen " "über identische Latenz verfügen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "UBOND Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "" @@ -963,7 +967,7 @@ msgstr "automatische Aktualiserung des Servers" msgid "Update server" msgstr "Aktualisierung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "Upstream-Bandbreite (kBit/s)" @@ -972,8 +976,8 @@ msgstr "Upstream-Bandbreite (kBit/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Nutzung durch Glorytun für UDP und SQM/QoS, sofern aktiv. '0' für den " @@ -983,17 +987,17 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 #, fuzzy #| msgid "ShadowSocks is used for TCP." msgid "V2Ray is used for TCP and UDP." msgstr "SchadowSocks wird für TCP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "" @@ -1003,7 +1007,7 @@ msgstr "" msgid "VPN is not running" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "VPN-Einstellungen" @@ -1034,7 +1038,7 @@ msgid "" "used to go outside." msgstr "Externe Prüfung der IP-Adressen der WAN-Adapter und der Server-IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "Assistent" @@ -1043,17 +1047,17 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "'MPTCP over VPN' kann genutzt werden für Anschlüsse auf denen der Anbieter " "Multipath-TCP filtert." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1061,23 +1065,23 @@ msgstr "" "'DHCPclient' kann auf auf unabhängigen Schnittstellen genutzt werden. Andere " "Protokolle sind unter 'Netzwerk'/'Schnittstellen' einstellbar." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "'DHCP' muss für diese Modems abgeschaltet und die IP-Adresse in ein andere " "Subnetz geändert werden." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "" "Server benötigt nutzbares IPv6. Andernfalls mit diesem Schalter die Nutzung " "sperren." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "SQM sollte abgeschaltet werden für LTE und andere Verbindungen mit " @@ -1097,7 +1101,7 @@ msgstr "" msgid "address:" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "" @@ -1131,7 +1135,7 @@ msgstr "" msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "andere" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index da23457a2..070cf5f05 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -13,30 +13,30 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "Dead Simple VPN est un VPN sur TCP qui peut remplacer Glorytun TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "Clef Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "" "Nom d'utilisateur pour récupérer la configuration personnalisée depuis le " "serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "Ajouter un serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "Ajouter une interface" @@ -45,11 +45,11 @@ msgstr "Ajouter une interface" msgid "Advanced Settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -61,18 +61,18 @@ msgstr "" msgid "All router settings" msgstr "Tous les paramètres du routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "Les instruction AES sont intégrées dans le processeur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "Type d'authentification" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "Sauvegarder" @@ -93,21 +93,21 @@ msgstr "Bêta" msgid "Big time difference between the server and the router" msgstr "Grande différence de temps entre le serveur et le routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "Passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "Par défaut le VPN est utilisé pour le trafic n'étant pas du TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "" "Par défaut, le proxy est utilisé pour tout trafic TCP (et UDP pour V2Ray)." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "CHAP" @@ -127,7 +127,7 @@ msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" msgid "Can\\'t ping server" msgstr "Pas de réponse du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -135,13 +135,13 @@ msgstr "" "Choisissez MacVLAN si vous souhaitez créer une interface virtuelle basée sur " "une interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "Choisissez l'interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "Paramètres des serveurs" @@ -149,8 +149,8 @@ msgstr "Paramètres des serveurs" msgid "Core temp:" msgstr "Température du cœur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "DHCP" @@ -162,22 +162,22 @@ msgstr "Soucis DNS : impossible de résoudre le domaine" msgid "Debug" msgstr "Débugger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "Default Proxy" msgstr "Proxy par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "VPN par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "Supprimer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "Appareil" @@ -223,7 +223,7 @@ msgstr "" "Désactiver les redirections de ports définies dans la partie pare-feu du " "serveur vers ce routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 msgid "Disable server" msgstr "Désactiver le serveur" @@ -239,12 +239,12 @@ msgstr "Désactiver le test ping vers le serveur" msgid "Disable tracebox test" msgstr "Désactiver le test de tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "Désactiver" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "Vitesse de téléchargement (Kb/s)" @@ -253,11 +253,11 @@ msgid "Dynamic change" msgstr "Changement dynamique" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "Activer IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "Active SQM" @@ -273,16 +273,16 @@ msgstr "Activer la faible latence TCP" msgid "Enable debug logs" msgstr "Activer les journaux de débogage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "Activer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "Chiffrement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" "La méthode de chiffrement est utilisée pour Shadowsocks, V2Ray, Glorytun et " @@ -292,15 +292,15 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Système de fichiers en lecture seule" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 msgid "Force retrieve all keys from server." msgstr "Forcer la récupération de toutes les clés du serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" msgstr "Forcer la récupération des paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "seulement GPRS" @@ -309,12 +309,12 @@ msgstr "seulement GPRS" msgid "Gateway DOWN" msgstr "La passerelle ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun est utilisé par défaut pour UDP et ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "Clef Glorytun" @@ -356,21 +356,21 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "Masque de sous-réseau IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "Préfixe IPv6" @@ -379,7 +379,7 @@ msgstr "Préfixe IPv6" msgid "IPv6 route received" msgstr "Route IPv6 reçue" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "IPv6 settings" msgstr "Paramètres IPv6" @@ -391,20 +391,20 @@ msgstr "Le tunnel IPv6 ne répond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "Paramètres des interfaces" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "La clé est récupérée de l'API du serveur par défaut." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -412,21 +412,21 @@ msgstr "" "Clef pour configurer et récupérer les autres clefs ainsi que les paramètres " "depuis le serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "LAN interfaces settings" msgstr "Paramètres des interfaces LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "Étiquette" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "Étiquette pour l'interface" @@ -444,12 +444,12 @@ msgstr "Dernière version disponible" msgid "Load:" msgstr "Charge :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN peut remplacer Glorytun pour les connexions avec la même latence" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "Mot de passe MLVPN" @@ -461,16 +461,16 @@ msgstr "MPTCP n'est pas activé sur le serveur" msgid "MPTCP may not be enabled on the server" msgstr "MPTCP semble ne pas être activé sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "MPTCP sur VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "Master" @@ -486,15 +486,15 @@ msgstr "Fréquence maximale du processeur" msgid "Minimum scaling CPU frequency" msgstr "Fréquence minimale du processeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "Modem par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "ModemManager" @@ -502,8 +502,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "Plus d\\'un VPN par défaut est activé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -524,11 +524,11 @@ msgstr "Maître multipath déjà défini" msgid "Multipath seems to be blocked on the connection" msgstr "Multipath semble bloquer sur la connexion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "AUCUN" @@ -594,11 +594,11 @@ msgstr "Pas d'adresse IP du serveur, pas d'adresse IP WAN" msgid "No server defined" msgstr "Aucun serveur défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "Aucun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "Normal" @@ -626,7 +626,11 @@ msgstr "Le brouillage sera activé des deux côtés" msgid "On wizard change" msgstr "En cas de changements dans l'assistant" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "" "Uniquement un serveur peut être maître, les autres sont définis en secours." @@ -636,7 +640,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN ne peut pas être utilisé dans une configuration multi VPS." @@ -644,8 +648,8 @@ msgstr "OpenVPN ne peut pas être utilisé dans une configuration multi VPS." msgid "Optimize for latency instead of bandwidth" msgstr "Optimiser la latence au lieu de la bande passante" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "Autre" @@ -653,46 +657,46 @@ msgstr "Autre" msgid "Other settings" msgstr "Autres paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 msgid "PAP/CHAP password" msgstr "Mot de passe PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "Identifiant PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "Code PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Physical interface" msgstr "l'interface physique," -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "Préférer LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "Préférer l'UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "Protocole" @@ -700,7 +704,7 @@ msgstr "Protocole" msgid "Proxy is DISABLED" msgstr "Le proxy est DÉSACTIVÉ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 msgid "Proxy settings" msgstr "Paramètres du Proxy" @@ -708,7 +712,7 @@ msgstr "Paramètres du Proxy" msgid "Proxy traffic:" msgstr "Trafic proxy :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "QMI" @@ -720,12 +724,12 @@ msgstr "Rediriger tous les ports du serveur vers ce routeur" msgid "Restore backup" msgstr "Restauration de la sauvegarde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "Récupérer les paramètres du serveur" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "Sauvegarder et Appliquer" @@ -741,7 +745,7 @@ msgstr "Sauvegarder les statistiques de vnstats" msgid "Scaling governor" msgstr "Régulateur de mise à l'échelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "Sélectionnez le périphérique pour l'interface." @@ -749,46 +753,46 @@ msgstr "Sélectionnez le périphérique pour l'interface." msgid "Send backup" msgstr "Envoyer la sauvegarde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 msgid "Server IP will be set for proxy and VPN" msgstr "L'adresse IP du serveur sera définie pour le proxy et le VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "Clef du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "Paramètres du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "Nom d'utilisateur sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "Type du service" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "Mettez une IP dans le même réseau que le modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "Configurer le serveur en tant que maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -796,7 +800,7 @@ msgstr "" "Définissez le proxy par défaut utilisé pour TCP lorsque ShadowSocks est " "activé, pour TCP et UDP lorsque V2Ray est activé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -804,14 +808,14 @@ msgstr "" "Configure le VPN utilisé par défaut pour ICMP (et UDP si le proxy est " "ShadowSocks), pour tout le trafic quand le proxy est désactivé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Réglez une valeur entre 80-95% de la vitesse de téléchargement maximale. 0 " "pour désactiver SQM/QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -826,12 +830,12 @@ msgstr "Assistant de configuration" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks est utilisé pour le TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "Clef de ShadowSocks" @@ -839,8 +843,8 @@ msgstr "Clef de ShadowSocks" msgid "Show all settings" msgstr "Voir tous les paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "Adresse statique" @@ -862,7 +866,7 @@ msgstr "" "référencée par aucune application) restera dans l'état FIN_WAIT_2 avant " "d'être abandonnée à l'extrémité locale." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -892,20 +896,20 @@ msgstr "" msgid "Total traffic:" msgstr "Trafic total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "Type" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND peut remplacer Glorytun par des connexions avec la même latence" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "Mot de passe UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -925,7 +929,7 @@ msgstr "Met à jour le serveur à la dernière version quand c'est nécessaire." msgid "Update server" msgstr "Mise à jour du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "Vitesse d'envoi (Kb/s)" @@ -934,8 +938,8 @@ msgstr "Vitesse d'envoi (Kb/s)" msgid "Uptime:" msgstr "Durée de fonctionnement :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Utilisé par Glorytun UDP et SQM/QoS si activé. 0 pour utiliser la valeur par " @@ -945,15 +949,15 @@ msgstr "" msgid "V2Ray is not running" msgstr "V2Ray n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray est utilisé pour TCP et UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "Utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "ID utilisateur V2Ray" @@ -961,7 +965,7 @@ msgstr "ID utilisateur V2Ray" msgid "VPN is not running" msgstr "Le VPN n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "Paramètres du VPN" @@ -992,7 +996,7 @@ msgid "" "used to go outside." msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "Assistant" @@ -1001,18 +1005,18 @@ msgstr "Assistant" msgid "You" msgstr "Vous" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "Vous pouvez utiliser MTPCP over VPN si votre fournisseur filtre Multipath " "TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" "Vous pouvez utiliser DHCP si vous avez plusieurs ports Ethernet physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1021,23 +1025,23 @@ msgstr "" "Choisissez autre si vous utilisez un autre protocole dans la page Réseau " "Interfaces." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" "Vous ne pouvez utiliser un préfixe IPv6 public que si vous ne définissez " "qu'un seul serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des " "réseaux différents." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Vous devriez désactiver IPv6 ici si le serveur ne supporte pas IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "Vous devriez désactiver SQM pour la 4G ou toute interface avec une vitesse " @@ -1057,7 +1061,7 @@ msgstr "Votre IP n'a pas été attribuée par ce routeur" msgid "address:" msgstr "adresse :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "auto" @@ -1089,7 +1093,7 @@ msgstr "multipath :" msgid "operator:" msgstr "opérateur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "autre" diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index 88df66661..0a900f075 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -10,29 +10,29 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "Una Dead Simple VPN è una VPN TCP che può sostituire Glorytun TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "Chiave Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "" "Nome utente API per recuperare le impostazioni personalizzate dal server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "Aggiungi un'interfaccia" @@ -41,11 +41,11 @@ msgstr "Aggiungi un'interfaccia" msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -57,7 +57,7 @@ msgstr "" msgid "All router settings" msgstr "Impostazioni del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." @@ -65,12 +65,12 @@ msgstr "" "Un set di istruzioni Advanced Encryption Standard (AES) è integrato nel " "processore." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "Backup" @@ -91,24 +91,24 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "Grande differenza di fuso orario tra il server e il router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "Ponte" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "" "Per impostazione predefinita, la VPN viene utilizzata per qualsiasi traffico " "che non sia TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "" "Per impostazione predefinita, il proxy viene utilizzato per qualsiasi " "traffico che sia TCP (e UDP per V2Ray)." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "CHAP" @@ -128,7 +128,7 @@ msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" msgid "Can\\'t ping server" msgstr "Impossibile eseguire il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -136,13 +136,13 @@ msgstr "" "Scegli MacVLAN se desideri creare un'interfaccia virtuale basata su " "un'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "Scegli l'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "Impostazioni comuni del server" @@ -150,8 +150,8 @@ msgstr "Impostazioni comuni del server" msgid "Core temp:" msgstr "Temp. Nucleo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "DHCP" @@ -163,22 +163,22 @@ msgstr "Problema DNS: impossibile risolvere il nome host" msgid "Debug" msgstr "Debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "Default Proxy" msgstr "Proxy predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "Elimina" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "Dispositivo" @@ -222,7 +222,7 @@ msgstr "" "Disabilita il reindirizzamento delle porte definito nel firewall dal server " "a questo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 msgid "Disable server" msgstr "Disabilita il server" @@ -238,12 +238,12 @@ msgstr "Disabilitare il controllo dello stato del ping del server" msgid "Disable tracebox test" msgstr "Disabilita il test Tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "Disabilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "Velocità di download (Kb / s)" @@ -252,11 +252,11 @@ msgid "Dynamic change" msgstr "Cambiamento dinamico" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "Abilita IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "Abilita MQ" @@ -272,16 +272,16 @@ msgstr "Abilita TCP bassa latenza" msgid "Enable debug logs" msgstr "Abilita registro di debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "Abilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "Crittografia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" "Il metodo di crittografia viene utilizzato per Shadowsocks, V2Ray, Glorytun " @@ -291,15 +291,15 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Il filesystem è di sola lettura" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 msgid "Force retrieve all keys from server." msgstr "Forza il recupero di tutte le chiavi dal server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" msgstr "Forza il recupero delle impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "Solo GPRS" @@ -308,13 +308,13 @@ msgstr "Solo GPRS" msgid "Gateway DOWN" msgstr "Tipi di pagamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "" "Glorytun TCP viene utilizzato per impostazione predefinita per UDP e ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "Chiave Glorytun" @@ -356,21 +356,21 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "Netmask IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "Prefisso IPv6" @@ -379,7 +379,7 @@ msgstr "Prefisso IPv6" msgid "IPv6 route received" msgstr "Instradamento IPv6 ricevuto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "IPv6 settings" msgstr "Impostazioni IPv6" @@ -391,22 +391,22 @@ msgstr "Tunnel IPv6 GIÙ" msgid "IPv6:" msgstr "IPv6:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "Impostazioni delle interfacce" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "" "La chiave viene recuperata dall'API del server per impostazione " "predefinita." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -414,21 +414,21 @@ msgstr "" "Tasto per configurare e recuperare altre chiavi dal server e per impostare " "le impostazioni del server da OpenMPTCProuter." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "LAN interfaces settings" msgstr "Impostazioni delle interfacce LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "Etichetta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "Etichetta per l'interfaccia" @@ -446,12 +446,12 @@ msgstr "Ultima versione disponibile" msgid "Load:" msgstr "Carico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN può sostituire Glorytun con connessioni con la stessa latenza" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "Password MLVPN" @@ -463,16 +463,16 @@ msgstr "MPTCP non è abilitato sul server" msgid "MPTCP may not be enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "MPTCP su VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "Principale" @@ -488,15 +488,15 @@ msgstr "Frequenza CPU di ridimensionamento massima" msgid "Minimum scaling CPU frequency" msgstr "Frequenza CPU con ridimensionamento minimo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "Impostazione predefinita del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "Timeout inizializzazione modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "ModemManager" @@ -504,8 +504,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "È abilitata più di una VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -526,11 +526,11 @@ msgstr "Multipath master già definito" msgid "Multipath seems to be blocked on the connection" msgstr "Multipath sembra essere bloccato sulla connessione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "NESSUNO" @@ -596,11 +596,11 @@ msgstr "Nessun indirizzo IP del server, nessun indirizzo IP WAN" msgid "No server defined" msgstr "Nessun server definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "Nessuno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "Normale" @@ -628,7 +628,11 @@ msgstr "L'offuscamento sarà abilitato su entrambi i lati" msgid "On wizard change" msgstr "Al cambio della procedura guidata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "" "Solo un server può essere master, altrimenti tutti i server sono impostati " @@ -639,7 +643,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN non può essere utilizzato nella configurazione multi VPS." @@ -647,8 +651,8 @@ msgstr "OpenVPN non può essere utilizzato nella configurazione multi VPS." msgid "Optimize for latency instead of bandwidth" msgstr "Ottimizza per la latenza invece che per la larghezza di banda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "Altro" @@ -656,46 +660,46 @@ msgstr "Altro" msgid "Other settings" msgstr "Altre impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 msgid "PAP/CHAP password" msgstr "PAP/CHAP password" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "Nome utente PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "Codice PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Physical interface" msgstr "Interfaccia fisica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "Preferisci LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "Preferisci UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "Protocollo" @@ -703,7 +707,7 @@ msgstr "Protocollo" msgid "Proxy is DISABLED" msgstr "Il proxy è DISABILITATO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 msgid "Proxy settings" msgstr "Impostazioni Proxy" @@ -711,7 +715,7 @@ msgstr "Impostazioni Proxy" msgid "Proxy traffic:" msgstr "Traffico proxy:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "QMI" @@ -723,12 +727,12 @@ msgstr "Reindirizza tutte le porte dal server a questo router" msgid "Restore backup" msgstr "Ripristina backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "Recupera le impostazioni dal server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "Salva e applica" @@ -744,7 +748,7 @@ msgstr "Salva le statistiche di vnstats" msgid "Scaling governor" msgstr "Governatore in scala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." @@ -752,46 +756,46 @@ msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." msgid "Send backup" msgstr "Invia backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 msgid "Server IP will be set for proxy and VPN" msgstr "L'IP del server verrà impostato per proxy e VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "Chiave server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "Impostazioni server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "Nome utente del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "Tipo di servizio" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "Imposta un IP nella stessa rete del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "Imposta qui l'IP del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "Imposta server come master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -799,7 +803,7 @@ msgstr "" "Imposta il proxy predefinito utilizzato per TCP quando ShadowSocks è " "abilitato, per TCP e UDP quando V2Ray è abilitato." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -811,14 +815,14 @@ msgstr "" "Imposta la VPN predefinita utilizzata per UDP e ICMP quando ShadowSocks è " "abilitato, per tutto il traffico se ShadowSocks è disabilitato." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Impostare il valore tra l'80 e il 95% della velocità massima di download " "del collegamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -833,12 +837,12 @@ msgstr "Configurazione guidata" msgid "ShadowSocks is not running" msgstr "ShadowSocks non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks viene utilizzato per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "Chiave ShadowSocks" @@ -846,8 +850,8 @@ msgstr "Chiave ShadowSocks" msgid "Show all settings" msgstr "Mostra tutte le impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "Indirizzo statico" @@ -869,7 +873,7 @@ msgstr "" "alcuna applicazione) rimarrà nello stato FIN_WAIT_2 prima che venga " "interrotta all'estremità locale." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -899,20 +903,20 @@ msgstr "" msgid "Total traffic:" msgstr "Traffico globale:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "Tipo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND può sostituire Glorytun con connessioni con la stessa latenza" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "Password UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -933,7 +937,7 @@ msgstr "" msgid "Update server" msgstr "Aggiorna server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "Velocità di caricamento (Kb / s)" @@ -942,8 +946,8 @@ msgstr "Velocità di caricamento (Kb / s)" msgid "Uptime:" msgstr "Tempo di funzionamento:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "Utilizzato da Glorytun UDP e SQM / QoS se abilitato." @@ -951,15 +955,15 @@ msgstr "Utilizzato da Glorytun UDP e SQM / QoS se abilitato." msgid "V2Ray is not running" msgstr "V2Ray non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray è utilizzato per TCP e UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "Utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "ID utente V2Ray" @@ -967,7 +971,7 @@ msgstr "ID utente V2Ray" msgid "VPN is not running" msgstr "VPN non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "Impostazioni VPN" @@ -1000,7 +1004,7 @@ msgstr "" "Quando si abilita il controllo viene eseguito su siti esterni per ottenere " "ogni IP WAN e l'IP utilizzato per uscire." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "Mago" @@ -1009,37 +1013,37 @@ msgstr "Mago" msgid "You" msgstr "Ti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "Puoi abilitare MPTCP su VPN se il tuo provider filtra Multipath TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "Puoi usare DHCP se hai più porte ethernet reali." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." msgstr "Puoi usare DHCP se hai una WAN per ogni interfaccia." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" "È possibile utilizzare un prefisso IPv6 pubblico solo se si imposta un solo " "server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "È necessario disabilitare il DHCP sui modem e impostare l'IP in reti " "diverse." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Dovresti disabilitare IPv6 qui se il server non fornisce IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "È necessario disabilitare SQM per LTE o qualsiasi interfaccia con velocità " @@ -1057,7 +1061,7 @@ msgstr "Il tuo IP non è stato affittato da questo router" msgid "address:" msgstr "Indirizzo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "Auto" @@ -1089,7 +1093,7 @@ msgstr "multipath:" msgid "operator:" msgstr "operatore:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "Altro" diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po index 365648390..a84441840 100644 --- a/luci-app-openmptcprouter/po/oc/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po @@ -10,32 +10,32 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "A Dead Simple VPN es un VPN TCP que pòt remplaçat Glorytun TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "Clau Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 #, fuzzy #| msgid "Add server" msgid "Add a new server" msgstr "Ajustar un servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "Ajustar una interfàcia" @@ -44,11 +44,11 @@ msgstr "Ajustar una interfàcia" msgid "Advanced Settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -60,18 +60,18 @@ msgstr "" msgid "All router settings" msgstr "Totes los paramètres del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "Las instruccions AES son integradas al processor." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "Tipe d’autentificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "Salvagarda" @@ -92,22 +92,22 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "Granda diferéncia de temps entre lo servidor e lo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "Pont" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "Per defaut lo VPN es utilizat pel trafic qu’es pas TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 #, fuzzy #| msgid "By default VPN is used for any traffic that is not TCP." msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "Per defaut lo VPN es utilizat pel trafic qu’es pas TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "CHAP" @@ -127,19 +127,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "Cap de responsa del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "Causissètz l’interfàcia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "Paramètres dels servidors" @@ -147,8 +147,8 @@ msgstr "Paramètres dels servidors" msgid "Core temp:" msgstr "Temperatura del còr :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "DHCP" @@ -160,24 +160,24 @@ msgstr "" msgid "Debug" msgstr "Desbugatge" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "Suprimir" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "Periferic" @@ -224,7 +224,7 @@ msgstr "" "Desactivar las redireccions de pòrts definits dins la part para-fuòc del " "servidor cap a aqueste router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -244,12 +244,12 @@ msgstr "Desactivar la pròva ping cap al servidor" msgid "Disable tracebox test" msgstr "Desactivar las pròvas extèrnas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "Desactivat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "Velocitat de telecargament (Kb/s)" @@ -258,11 +258,11 @@ msgid "Dynamic change" msgstr "Cambiament dinamic" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "Activar l’IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "Active SQM" @@ -280,16 +280,16 @@ msgstr "Desactivar TCP Fast Open" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "Activat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "Chiframent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -299,7 +299,7 @@ msgstr "Metòde de chiframent utilizat per Glorytun." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Force retrieve all keys from server." @@ -307,13 +307,13 @@ msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "solament GPRS" @@ -322,12 +322,12 @@ msgstr "solament GPRS" msgid "Gateway DOWN" msgstr "La palanca respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun TCP es utilizat per defaut per UDP e ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "Clau Glorytun" @@ -371,21 +371,21 @@ msgstr "Ensages IPv4 TCP SYN" msgid "IPv4 TCP SYN retries2" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "Masqueta ret IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "Prefix IPv6" @@ -394,7 +394,7 @@ msgstr "Prefix IPv6" msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -408,20 +408,20 @@ msgstr "Lo tunèl IPv6 respond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "Paramètres interfàcias" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -429,23 +429,23 @@ msgstr "" "Clau per configurar e recuperar las autras claus e tanban los paramètres del " "servidor estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "Etiqueta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "Etiqueta per l’interfàcia" @@ -463,13 +463,13 @@ msgstr "Darrièra salvagarda disponibla sul servidor" msgid "Load:" msgstr "Carga :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" "MLVPN pòt remplaçar Glorytun per las connexions amb la meteissa laténcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "Senhal MLVPN" @@ -481,16 +481,16 @@ msgstr "MPTCP es pas activat sul servidor" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "MPTCP over VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "Principal" @@ -506,15 +506,15 @@ msgstr "Frequéncia maximala del processor" msgid "Minimum scaling CPU frequency" msgstr "Frequéncia minimala del processor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "Modem per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "ModemManager" @@ -522,8 +522,8 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "Multipath TCP" @@ -544,11 +544,11 @@ msgstr "" msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "CAP" @@ -616,11 +616,11 @@ msgstr "" msgid "No server defined" msgstr "Paramètres dels servidors" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "Cap" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "Normala" @@ -646,7 +646,11 @@ msgstr "Las interferéncias seràn activadas dels dos costats" msgid "On wizard change" msgstr "En modificant dins l’assistent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "" "Pas qu’un servidor pòt pas qu’èsser lo servidor màger, los autres son pel " @@ -657,7 +661,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -665,8 +669,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "Autre" @@ -676,50 +680,50 @@ msgstr "Autre" msgid "Other settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "Identificant PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "Còdi PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "Preferir LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "Preferir UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "Protocòl" @@ -727,7 +731,7 @@ msgstr "Protocòl" msgid "Proxy is DISABLED" msgstr "Lo servidor mandatari es DESACTIVAT" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" @@ -737,7 +741,7 @@ msgstr "Paramètres del VPN" msgid "Proxy traffic:" msgstr "Trafic mandatari :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "QMI" @@ -749,12 +753,12 @@ msgstr "Redigir totes los pòrts del servidor cap a aqueste router" msgid "Restore backup" msgstr "Restaurar salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "Recuperar la configuracion personalizada del servidor estant" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "Salvagardar e aplicar" @@ -770,7 +774,7 @@ msgstr "Salvagardar las estatisticas de vnstats" msgid "Scaling governor" msgstr "Regulator a l’escala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "Seleccionatz lo periferic per l’interfàcia." @@ -778,49 +782,49 @@ msgstr "Seleccionatz lo periferic per l’interfàcia." msgid "Send backup" msgstr "Enviar la salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 #, fuzzy #| msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgid "Server IP will be set for proxy and VPN" msgstr "" "L’IP del servidor serà configurada per ShadowSocks, Glorytun, OpenVPN e MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "Clau servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "Lo nom d'utilizaire servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "Tipe de servici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "Botatz una IP dins lo meteis ret que lo modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "Botatz l’IP del modem aquí" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "Configurar lo servidor coma servidor màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -832,7 +836,7 @@ msgstr "" "Configura lo VPN utilizat per defaut per l’UDP e l’ICMP quand ShadowSocks es " "activat, per tot lo trafic quand ShadowSocks es desactivat." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -844,14 +848,14 @@ msgstr "" "Configura lo VPN utilizat per defaut per l’UDP e l’ICMP quand ShadowSocks es " "activat, per tot lo trafic quand ShadowSocks es desactivat." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "" "Reglatz una valor entre 80-95% de la velocitat de telecargament maximala. 0 " "per desactivar SQM/QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -868,12 +872,12 @@ msgstr "Assistent de configuracion" msgid "ShadowSocks is not running" msgstr "Paramètres ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks es utilizat per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "Clau de ShadowSocks" @@ -881,8 +885,8 @@ msgstr "Clau de ShadowSocks" msgid "Show all settings" msgstr "Veire totes los paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "Adreça estatica" @@ -901,7 +905,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -926,21 +930,21 @@ msgstr "" msgid "Total traffic:" msgstr "Tradif total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "Tipe" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "" "UBOND pòt remplaçar Glorytun per de connexions amb la meteissa laténcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "Senhal UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -960,7 +964,7 @@ msgstr "Met a jorn lo servidor amb la darrièra version quand cal." msgid "Update server" msgstr "Mesa a jorn del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "Velocitat de mandadís (Kb/s)" @@ -969,8 +973,8 @@ msgstr "Velocitat de mandadís (Kb/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" "Utilizat per Glorytun UDP e SQM/QoS se activat. 0 per utilizar la valor per " @@ -980,17 +984,17 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 #, fuzzy #| msgid "ShadowSocks is used for TCP." msgid "V2Ray is used for TCP and UDP." msgstr "ShadowSocks es utilizat per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "" @@ -1000,7 +1004,7 @@ msgstr "" msgid "VPN is not running" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "Paramètres del VPN" @@ -1032,7 +1036,7 @@ msgid "" msgstr "" "Utiliza de sites extèrns per obténer d’adreças IP extèrnas quand activat." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "Assistent" @@ -1041,16 +1045,16 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" "Podètz utilizar MTPCP over VPN se vòstre provesidor filtra Multipath TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -1058,21 +1062,21 @@ msgstr "" "Podètz utilizar DHCP s’avètz mantuns pòrts ret fisics. Causissètz autre " "s’utilizatz un autre protocòl dins la pagina Interfàcias Ret." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" "Vos cal desactivar lo DHCP sus vòstres modems e configurar lor IP dins de " "rets diferents." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "Deuriatz desactivar IPv6 aquí se lo servidor es pas compatible IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "Vos cal desactivar SQM per la 4G o tota interfàcia amb una velocitat fòrça " @@ -1090,7 +1094,7 @@ msgstr "" msgid "address:" msgstr "Adreça IPv4 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "auto" @@ -1122,7 +1126,7 @@ msgstr "" msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "autre" diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index ee03fb92d..78070d388 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -13,28 +13,28 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "A Dead Simple VPN 是可以替代Glorytun TCP的TCP VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:260 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 msgid "A Dead Simple VPN key" msgstr "简单VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 msgid "API username to retrieve personnalized settings from the server." msgstr "API用户名,以从蚂蚁聚合服务器检索个性化设置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "添加一个新蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "添加网卡" @@ -43,11 +43,11 @@ msgstr "添加网卡" msgid "Advanced Settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -57,18 +57,18 @@ msgstr "这里可用的所有VPN都可以通过MPTCP或使用自己的内部进 msgid "All router settings" msgstr "所有路由器设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "处理器中集成了高级加密标准(AES)指令集." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "认证类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:736 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "备份" @@ -89,20 +89,20 @@ msgstr "测试版" msgid "Big time difference between the server and the router" msgstr "服务器和路由器之间的时间差距很大" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:484 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "桥接" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "By default VPN is used for any traffic that is not TCP." msgstr "默认情况下,VPN用于非TCP的任何流量." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "默认情况下,代理用于任何TCP(对于V2Ray是UDP)流量。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "CHAP" @@ -122,19 +122,19 @@ msgstr "无法从ShadowSocks获取公共蚂蚁聚合IP地址" msgid "Can\\'t ping server" msgstr "无法ping蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:488 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "如果要基于物理接口创建虚拟接口,请选择MacVLAN。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:422 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:412 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 msgid "Choose physical interface." msgstr "选择物理接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "通用蚂蚁聚合服务器设置" @@ -142,8 +142,8 @@ msgstr "通用蚂蚁聚合服务器设置" msgid "Core temp:" msgstr "核心温度:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "DHCP" @@ -155,22 +155,22 @@ msgstr "DNS问题:无法解析主机名" msgid "Debug" msgstr "调试模式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "Default Proxy" msgstr "默认代理" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 msgid "Delete" msgstr "删除" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:586 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:603 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "Device" msgstr "设备" @@ -211,7 +211,7 @@ msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:116 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 msgid "Disable server" msgstr "关闭禁用聚合服务器" @@ -227,12 +227,12 @@ msgstr "禁用服务器ping状态检查" msgid "Disable tracebox test" msgstr "禁用跟蚂蚁跟踪测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 msgid "Disabled" msgstr "关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "下载速度 (Kb/s)" @@ -241,11 +241,11 @@ msgid "Dynamic change" msgstr "动态变化" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "开启 IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "开启 SQM" @@ -261,16 +261,16 @@ msgstr "启用TCP低延迟" msgid "Enable debug logs" msgstr "启用调试日志" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:721 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 msgid "Enabled" msgstr "开启" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "加密" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" @@ -278,15 +278,15 @@ msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" msgid "Filesystem is readonly" msgstr "Système de fichiers en lecture seule" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 msgid "Force retrieve all keys from server." msgstr "强制从服务器检索所有密钥。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" msgstr "强制检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "仅GPRS" @@ -295,12 +295,12 @@ msgstr "仅GPRS" msgid "Gateway DOWN" msgstr "网关不通" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun TCP默认用于UDP和ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "Glorytun密钥" @@ -340,21 +340,21 @@ msgstr "IPv4 TCP SYN重试1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN重试2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 msgid "IPv4 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:576 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:436 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "IPv4 netmask" msgstr "IPv4网络掩码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "IPv6前缀" @@ -363,7 +363,7 @@ msgstr "IPv6前缀" msgid "IPv6 route received" msgstr "经过的IPv6路由" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "IPv6 settings" msgstr "IPv6设置" @@ -375,40 +375,40 @@ msgstr "IPv6隧道DOWN" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "接口设置" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "Key is retrieved from server API by default." msgstr "默认情况下,密钥是从服务器API检索的." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." msgstr "用于服务器配置密钥以及设置的密钥." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:347 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "LAN interfaces settings" msgstr "局域网接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:678 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 msgid "Label" msgstr "标签" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "接口标签" @@ -426,12 +426,12 @@ msgstr "Dernière version disponible" msgid "Load:" msgstr "负载:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "MLVPN密码" @@ -443,16 +443,16 @@ msgstr "服务器上未启用MPTCP" msgid "MPTCP may not be enabled on the server" msgstr "服务器上可能未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "通过MPTCP的VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "Macvlan" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:735 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "主" @@ -468,15 +468,15 @@ msgstr "最大扩展CPU频率" msgid "Minimum scaling CPU frequency" msgstr "最小扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "调制解调器默认" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:709 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "调制解调器初始化超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "调制解调器管理器" @@ -484,8 +484,8 @@ msgstr "调制解调器管理器" msgid "More than one default VPN is enabled" msgstr "启用了多个默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "多路径TCP" @@ -506,11 +506,11 @@ msgstr "已定义多路径主机" msgid "Multipath seems to be blocked on the connection" msgstr "多路径似乎在连接上被阻止" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:521 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:689 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "无" @@ -576,11 +576,11 @@ msgstr "没有服务器IP地址,没有WAN IP地址" msgid "No server defined" msgstr "未定义蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "没有" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "正常" @@ -606,7 +606,11 @@ msgstr "双方都将启用混淆" msgid "On wizard change" msgstr "更换向导时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +msgid "Only ShadowSocks is supported with server multiple IPs for now." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "只能将一台服务器作为主服务器,否则将所有服务器都设置为备用服务器." @@ -615,7 +619,7 @@ msgstr "只能将一台服务器作为主服务器,否则将所有服务器都 msgid "OpenMPTCProuter" msgstr "蚂蚁聚合路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN不能用于多VPS配置." @@ -623,8 +627,8 @@ msgstr "OpenVPN不能用于多VPS配置." msgid "Optimize for latency instead of bandwidth" msgstr "优化延迟而不是带宽" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:375 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "其他" @@ -632,46 +636,46 @@ msgstr "其他" msgid "Other settings" msgstr "蚂蚁聚合其他设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:690 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 msgid "PAP/CHAP password" msgstr "PAP/CHAP 密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "PAP/CHAP 账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "PIN码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "PPPoE拨号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:377 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Physical interface" msgstr "物理接口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "首选LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:677 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "首选 UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "协议" @@ -679,7 +683,7 @@ msgstr "协议" msgid "Proxy is DISABLED" msgstr "代理已禁用" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 msgid "Proxy settings" msgstr "代理设置" @@ -687,7 +691,7 @@ msgstr "代理设置" msgid "Proxy traffic:" msgstr "代理流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "QMI" @@ -699,12 +703,12 @@ msgstr "将所有端口从服务器重定向到此路由器" msgid "Restore backup" msgstr "恢复备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "从服务器检索设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "保存&应用" @@ -720,7 +724,7 @@ msgstr "保存vnstats统计信息" msgid "Scaling governor" msgstr "超频" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:832 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "选择要作为基础的接口." @@ -728,46 +732,46 @@ msgstr "选择要作为基础的接口." msgid "Send backup" msgstr "发送备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 msgid "Server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 msgid "Server IP will be set for proxy and VPN" msgstr "将为代理和VPN设置服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 msgid "Server key" msgstr "服务器密钥" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" msgstr "蚂蚁聚合服务器设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "服务器用户名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "服务类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Set an IP in the same network as the modem" msgstr "在与调制解调器相同的网络中设置IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:581 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 msgid "Set here IP of the modem" msgstr "在此处设置调制解调器的IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "将服务器设置为主服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -775,7 +779,7 @@ msgstr "" "设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代" "理." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -787,12 +791,12 @@ msgstr "" "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" "ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" "Set value between 80-95% of max download speed link. 0 to disable SQM/QoS." msgstr "设置最大下载速度链接的80-95%之间的值。 0禁用SQM / QoS." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / QoS." @@ -805,12 +809,12 @@ msgstr "蚂蚁聚合设置向导" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks用于TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "ShadowSocks密钥" @@ -818,8 +822,8 @@ msgstr "ShadowSocks密钥" msgid "Show all settings" msgstr "显示所有设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "静态地址" @@ -840,7 +844,7 @@ msgstr "" "孤立的(不再被任何应用程序引用)连接在本地端中止之前将保持FIN_WAIT_2状态的时" "间。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -865,20 +869,20 @@ msgstr "当未确认RTO重传时,此值会影响有效TCP连接的超时。" msgid "Total traffic:" msgstr "总流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 msgid "UBOND password" msgstr "UBOND密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -898,7 +902,7 @@ msgstr "在需要时,将服务器远程更新到最新版本." msgid "Update server" msgstr "更新服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "上传速度 (Kb/s)" @@ -907,8 +911,8 @@ msgstr "上传速度 (Kb/s)" msgid "Uptime:" msgstr "运行时间:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:785 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:801 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." @@ -916,15 +920,15 @@ msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." msgid "V2Ray is not running" msgstr "V2Ray没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray用于TCP和UDP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "V2Ray用户" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "V2Ray用户ID" @@ -932,7 +936,7 @@ msgstr "V2Ray用户ID" msgid "VPN is not running" msgstr "Le VPN n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "VPN设置" @@ -963,7 +967,7 @@ msgid "" "used to go outside." msgstr "启用后,将在外部站点上进行检查,以获取每个WAN IP和用于外出的IP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "蚂蚁聚合向导" @@ -972,15 +976,15 @@ msgstr "蚂蚁聚合向导" msgid "You" msgstr "你" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "如果提供商过滤多路径TCP,则可以启用VPN上的MPTCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "如果您有多个真实的以太网端口,则可以使用DHCP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:528 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "" "You can use DHCP if you have multiple real ethernet ports. Select other if " "you want to use another protocol available in Network Interfaces page." @@ -988,19 +992,19 @@ msgstr "" "如果您有多个真实的以太网端口,则可以使用DHCP。 如果要使用“网络接口”页面中可用" "的其他协议,请选择“其他”." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "仅当您仅设置一台服务器时,才能使用公共IPv6前缀。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:450 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "您必须在调制解调器上禁用DHCP并在其他网络中设置IP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "您应该为LTE或任何变速接口禁用SQM." @@ -1016,7 +1020,7 @@ msgstr "您的IP未通过此路由器" msgid "address:" msgstr "地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "自动" @@ -1048,7 +1052,7 @@ msgstr "多路径:" msgid "operator:" msgstr "操作者:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" msgstr "其他" From 3d663f0078a026f815960106a1d4fb56322d3c25 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Mon, 9 Nov 2020 10:04:56 +0000 Subject: [PATCH 042/289] Translated using Weblate (French) Currently translated at 100.0% (240 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/fr/ --- luci-app-openmptcprouter/po/fr/openmptcprouter.po | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 070cf5f05..ed3454669 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-11-05 11:21+0000\n" +"PO-Revision-Date: 2020-11-09 10:05+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -629,6 +629,8 @@ msgstr "En cas de changements dans l'assistant" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" +"Seul ShadowSocks est pris en charge pour la gestion d'un serveur ayant " +"plusieurs adresses IP pour le moment." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." From 2e2a18dca4393582c37c11e7bc33ca88052c27ed Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 9 Nov 2020 15:18:59 +0100 Subject: [PATCH 043/289] Fix device in wizard for qmi, ncm and modemmanager --- .../luasrc/controller/openmptcprouter.lua | 12 +++++++++--- .../luasrc/view/openmptcprouter/wizard.htm | 12 ++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 6d2ef238b..d6d4001ad 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -218,7 +218,9 @@ function wizard_add() local typeintf = luci.http.formvalue("cbid.network.%s.type" % intf) or "" local masterintf = luci.http.formvalue("cbid.network.%s.masterintf" % intf) or "" local ifname = luci.http.formvalue("cbid.network.%s.intf" % intf) or "" - local device = luci.http.formvalue("cbid.network.%s.device" % intf) or "" + local device_ncm = luci.http.formvalue("cbid.network.%s.device.ncm" % intf) or "" + local device_qmi = luci.http.formvalue("cbid.network.%s.device.qmi" % intf) or "" + local device_modemmanager = luci.http.formvalue("cbid.network.%s.device.modemmanager" % intf) or "" local ipaddr = luci.http.formvalue("cbid.network.%s.ipaddr" % intf) or "" local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or "" local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or "" @@ -243,8 +245,12 @@ function wizard_add() ucic:set("network",intf,"masterintf",masterintf) elseif typeintf == "" and ifname ~= "" and (proto == "static" or proto == "dhcp" ) then ucic:set("network",intf,"ifname",ifname) - elseif typeintf == "" and device ~= "" and (proto == "ncm" or proto == "qmi" or proto == "modemmanager") then - ucic:set("network",intf,"device",device) + elseif typeintf == "" and device ~= "" and proto == "ncm" then + ucic:set("network",intf,"device",device_ncm) + elseif typeintf == "" and device ~= "" and proto == "qmi" then + ucic:set("network",intf,"device",device_qmi) + elseif typeintf == "" and device ~= "" and proto == "modemmanager" then + ucic:set("network",intf,"device",device_manager) end if proto ~= "other" then ucic:set("network",intf,"proto",proto) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index c0a380416..0ee9ad9a2 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -572,10 +572,10 @@ -
+
- <% iffind=0 iftty = nixio.fs.glob("/dev/ttyUSB*") @@ -599,10 +599,10 @@
-
+
- <% iffind=0 iftty = nixio.fs.glob("/dev/cdc-wdm*") @@ -620,10 +620,10 @@
-
+
- <% iffind=0 iftty = luci.sys.exec("/usr/bin/mmcli -L") From c11158807896d8ebd093624201fdfd5b7095e438 Mon Sep 17 00:00:00 2001 From: antrouter Date: Mon, 9 Nov 2020 13:04:24 +0000 Subject: [PATCH 044/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (240 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- .../po/zh_Hans/openmptcprouter.po | 56 +++++++++---------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 78070d388..52972d6ef 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-11-06 06:58+0000\n" -"Last-Translator: 马 \n" +"PO-Revision-Date: 2020-11-09 14:26+0000\n" +"Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -75,7 +75,7 @@ msgstr "备份" #: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 msgid "Backup on server" -msgstr "在服务器上备份" +msgstr "备份到服务器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" @@ -116,7 +116,7 @@ msgstr "无法联系蚂蚁聚合服务器管理脚本" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t get public IP address from ShadowSocks" -msgstr "无法从ShadowSocks获取公共蚂蚁聚合IP地址" +msgstr "无法通过蚂蚁聚合服务器ShadowSocks获取公网IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 msgid "Can\\'t ping server" @@ -136,7 +136,7 @@ msgstr "选择物理接口。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" -msgstr "通用蚂蚁聚合服务器设置" +msgstr "通用蚂蚁聚合服务器设置聚合" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 msgid "Core temp:" @@ -276,11 +276,11 @@ msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 msgid "Filesystem is readonly" -msgstr "Système de fichiers en lecture seule" +msgstr "文件系统处于只读状态/重新刷机吧" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 msgid "Force retrieve all keys from server." -msgstr "强制从服务器检索所有密钥。" +msgstr "强制从服务器检索并应用所有密钥。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" @@ -400,7 +400,7 @@ msgstr "局域网接口设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" -msgstr "LTE" +msgstr "4G LTE" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 @@ -419,7 +419,7 @@ msgstr "服务器上的上次可用备份:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 msgid "Latest available version" -msgstr "Dernière version disponible" +msgstr "最新可用的版本" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 @@ -522,7 +522,7 @@ msgstr "网络接口重复" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "Network overview" -msgstr "网络概述" +msgstr "网络概览" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" @@ -531,7 +531,7 @@ msgstr "网络设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "No IP defined" -msgstr "未定义IP" +msgstr "没有定义IP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 msgid "No IPv6 access" @@ -552,7 +552,7 @@ msgstr "服务器上没有可用的备份." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" -msgstr "没变" +msgstr "没有改变" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "No data" @@ -566,7 +566,7 @@ msgstr "未定义网关" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 msgid "No output" -msgstr "无输出" +msgstr "无网络输出" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 msgid "No server IP address, No WAN IP address" @@ -604,11 +604,11 @@ msgstr "双方都将启用混淆" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" -msgstr "更换向导时" +msgstr "通过向导更改" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "Only ShadowSocks is supported with server multiple IPs for now." -msgstr "" +msgstr "目前服务器如果有多个公网IP仅支持ShadowSocks." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." @@ -710,7 +710,7 @@ msgstr "从服务器检索设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" -msgstr "保存&应用" +msgstr "保存并且应用设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" @@ -780,16 +780,10 @@ msgstr "" "理." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 -#, fuzzy -#| msgid "" -#| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " -#| "for all traffic if ShadowSocks is disabled." msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." -msgstr "" -"启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" -"ShadowSocks." +msgstr "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用ShadowSocks." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" @@ -922,19 +916,19 @@ msgstr "V2Ray没有运行" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "V2Ray is used for TCP and UDP." -msgstr "V2Ray用于TCP和UDP。" +msgstr "V2Ray用于TCP和UDP传输." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" -msgstr "V2Ray用户" +msgstr "V2Ray账号" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" -msgstr "V2Ray用户ID" +msgstr "V2Ray账号ID" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 msgid "VPN is not running" -msgstr "Le VPN n'est pas lancé" +msgstr "VPN没有运行" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" @@ -1006,7 +1000,7 @@ msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." -msgstr "您应该为LTE或任何变速接口禁用SQM." +msgstr "您应该为LTE或任何网速不稳的接口禁用SQM." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 msgid "You shouldn't do that and you should redirect only needed ports" @@ -1014,7 +1008,7 @@ msgstr "错了亲,试试重定向端口" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" -msgstr "您的IP未通过此路由器" +msgstr "您访问的IP来源未通过此路由器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 msgid "address:" @@ -1036,7 +1030,7 @@ msgstr "IP地址:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 msgid "latency:" -msgstr "延迟:" +msgstr "时延:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 @@ -1050,7 +1044,7 @@ msgstr "多路径:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 msgid "operator:" -msgstr "操作者:" +msgstr "运营商:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 msgid "other" From c1ec7bceda32da5b0bf5643eae5380ee48520017 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 9 Nov 2020 14:26:45 +0000 Subject: [PATCH 045/289] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 52972d6ef..0cb8549f8 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -783,7 +783,9 @@ msgstr "" msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." -msgstr "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用ShadowSocks." +msgstr "" +"启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" +"ShadowSocks." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 msgid "" From 24964ba719cd93df036bdf344b7be9b178e6cdc2 Mon Sep 17 00:00:00 2001 From: antrouter Date: Mon, 9 Nov 2020 14:27:04 +0000 Subject: [PATCH 046/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (240 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 0cb8549f8..d24b7169d 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-11-09 14:26+0000\n" +"PO-Revision-Date: 2020-11-09 14:31+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -1058,7 +1058,7 @@ msgstr "电话号码:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 msgid "range:" -msgstr "范围:" +msgstr "漫游:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "state:" From 62a29f8ff0805844b5631cb4337d5b0d8e1a5d91 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:54:52 +0000 Subject: [PATCH 047/289] parallel digs --- .../root/etc/init.d/omr-bypass | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index b5bd902a0..1682c565a 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,21 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` - if [ -n "tlds" ]; then - i=0 - for tld in $tlds; do - i=$((i+1)) - tld="$(echo $tld | awk '{print tolower($0)}')" - if [ "$i" -gt "11" ] && [ "$(dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer ${domain}${tld})" != "" ]; then - _bypass_domain ${domain}${tld} $intf - fi - done - fi + domainlist="" + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From dee7b381cc317d0d64a9a6e2434209519f90600d Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:56:59 +0000 Subject: [PATCH 048/289] add CLA --- contributors/cr3ative.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 contributors/cr3ative.md diff --git a/contributors/cr3ative.md b/contributors/cr3ative.md new file mode 100644 index 000000000..b0c58c54e --- /dev/null +++ b/contributors/cr3ative.md @@ -0,0 +1,9 @@ +2020-11-10 + +I hereby agree to the terms of the "OpenMPTCProuter Individual Contributor License Agreement", with MD5 checksum bc827a07eb93611d793ddb7c75083c00. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Paul Curry https://github.com/cr3ative From 08174a265099604d975b0e2ea31b87b655bb9e1f Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:15 +0000 Subject: [PATCH 049/289] fix indentation --- .../root/etc/init.d/omr-bypass | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 1682c565a..2dec8e79f 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,32 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then domainlist="" - # construct list of domains to query - for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" - done - domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate - for validdomain in $domainlist; do - _bypass_domain $validdomain $intf - done + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From 43da6c6e1e26f21abac1aaeeb3ea68a8569eb4d2 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:55 +0000 Subject: [PATCH 050/289] ugh --- .../root/etc/init.d/omr-bypass | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 2dec8e79f..61e99753c 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -339,21 +339,21 @@ _bypass_proto() { domainlist="" # construct list of domains to query for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf done From d74fb4941856063f23fa5b66268d848d5d601f6b Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 14:13:39 +0000 Subject: [PATCH 051/289] Remove threading --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 61e99753c..40007e410 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,7 +349,7 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + | xargs -n8 `# xargs sends 8 arguments at a time to` \ dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ From 0ba98632620535aade4ae05553350fd9525c6fea Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 10 Nov 2020 17:01:41 +0100 Subject: [PATCH 052/289] Use threading and only use wanted domain --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 40007e410..8e5a0c5bd 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,10 +349,11 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 `# xargs sends 8 arguments at a time to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time to` \ + dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` to \ + | grep $domain `# grep, only keep wanted domain` \ | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf From 4ced9399853b851231f28950c44c9925333c5600 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 10 Nov 2020 17:02:37 +0100 Subject: [PATCH 053/289] Stop odhcp when IPv6 disabled --- omr-6in4/files/etc/init.d/omr-6in4 | 1 + 1 file changed, 1 insertion(+) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index e9898170c..87c04c89d 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -102,6 +102,7 @@ start_service() { [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get network.lan.ipv6)" != "1" ] && set_ipv6_state [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" = "1" ] && { ifdown omr6in4 + /etc/init.d/odhcpd stop return } [ "$(ifstatus omr6in4 | jsonfilter -e '@.up' | tr -d '\n')" != "true" ] && ifup omr6in4 From fcddc353579554d31937b951321eb51907794380 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:54:52 +0000 Subject: [PATCH 054/289] parallel digs --- .../root/etc/init.d/omr-bypass | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index b5bd902a0..1682c565a 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,21 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` - if [ -n "tlds" ]; then - i=0 - for tld in $tlds; do - i=$((i+1)) - tld="$(echo $tld | awk '{print tolower($0)}')" - if [ "$i" -gt "11" ] && [ "$(dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer ${domain}${tld})" != "" ]; then - _bypass_domain ${domain}${tld} $intf - fi - done - fi + domainlist="" + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From eb10bc4ecb99e1f52a298a93eef8f3b302a58d18 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:56:59 +0000 Subject: [PATCH 055/289] add CLA --- contributors/cr3ative.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 contributors/cr3ative.md diff --git a/contributors/cr3ative.md b/contributors/cr3ative.md new file mode 100644 index 000000000..b0c58c54e --- /dev/null +++ b/contributors/cr3ative.md @@ -0,0 +1,9 @@ +2020-11-10 + +I hereby agree to the terms of the "OpenMPTCProuter Individual Contributor License Agreement", with MD5 checksum bc827a07eb93611d793ddb7c75083c00. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Paul Curry https://github.com/cr3ative From 402d51ae142ee63692ae17244cd41d5161126955 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:15 +0000 Subject: [PATCH 056/289] fix indentation --- .../root/etc/init.d/omr-bypass | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 1682c565a..2dec8e79f 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,32 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then domainlist="" - # construct list of domains to query - for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" - done - domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate - for validdomain in $domainlist; do - _bypass_domain $validdomain $intf - done + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From 4abe0ab8af79c73ac0fac47fba72da2789055c84 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:55 +0000 Subject: [PATCH 057/289] ugh --- .../root/etc/init.d/omr-bypass | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 2dec8e79f..61e99753c 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -339,21 +339,21 @@ _bypass_proto() { domainlist="" # construct list of domains to query for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf done From 6f4685b003c4c66a5b5830dc7a813d1dd64df1a0 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 14:13:39 +0000 Subject: [PATCH 058/289] Remove threading --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 61e99753c..40007e410 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,7 +349,7 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + | xargs -n8 `# xargs sends 8 arguments at a time to` \ dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ From ec3cbfa8ad50e41029e5c8a372397b3a2c7ead6a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 10 Nov 2020 17:01:41 +0100 Subject: [PATCH 059/289] Use threading and only use wanted domain --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 40007e410..8e5a0c5bd 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,10 +349,11 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 `# xargs sends 8 arguments at a time to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time to` \ + dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` to \ + | grep $domain `# grep, only keep wanted domain` \ | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf From e9edfcb8b9338a9aa430964ad3361c2119adcc28 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:54:52 +0000 Subject: [PATCH 060/289] parallel digs --- .../root/etc/init.d/omr-bypass | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index b5bd902a0..1682c565a 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,21 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` - if [ -n "tlds" ]; then - i=0 - for tld in $tlds; do - i=$((i+1)) - tld="$(echo $tld | awk '{print tolower($0)}')" - if [ "$i" -gt "11" ] && [ "$(dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer ${domain}${tld})" != "" ]; then - _bypass_domain ${domain}${tld} $intf - fi - done - fi + domainlist="" + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From 2f39a064f4d084dafe82079c04d4e7657eb5531e Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:56:59 +0000 Subject: [PATCH 061/289] add CLA --- contributors/cr3ative.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 contributors/cr3ative.md diff --git a/contributors/cr3ative.md b/contributors/cr3ative.md new file mode 100644 index 000000000..b0c58c54e --- /dev/null +++ b/contributors/cr3ative.md @@ -0,0 +1,9 @@ +2020-11-10 + +I hereby agree to the terms of the "OpenMPTCProuter Individual Contributor License Agreement", with MD5 checksum bc827a07eb93611d793ddb7c75083c00. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Paul Curry https://github.com/cr3ative From bac34494d9cd4ac08503993b9274629f5012cc97 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:15 +0000 Subject: [PATCH 062/289] fix indentation --- .../root/etc/init.d/omr-bypass | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 1682c565a..2dec8e79f 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -331,32 +331,32 @@ _bypass_proto() { local domains domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')" if [ -n "$domains" ]; then - tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` for domain in $domains; do if [ -n "$domain" ]; then domain="$(echo $domain | sed 's/^\.//')" if [ "$(echo $domain | grep '\.$')" != "" ]; then domainlist="" - # construct list of domains to query - for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" - done - domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate - for validdomain in $domainlist; do - _bypass_domain $validdomain $intf - done + # construct list of domains to query + for tld in $tlds; do + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" + done + domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + for validdomain in $domainlist; do + _bypass_domain $validdomain $intf + done else _bypass_domain $domain $intf fi From 325915ac5fdf8db0aa0cea999fe9ba7f92f2d5c1 Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 13:59:55 +0000 Subject: [PATCH 063/289] ugh --- .../root/etc/init.d/omr-bypass | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 2dec8e79f..61e99753c 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -339,21 +339,21 @@ _bypass_proto() { domainlist="" # construct list of domains to query for tld in $tlds; do - i=$((i+1)) - # trim off header - if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then - continue - fi - # add to command - domainlist="${domainlist} ${domain}${tld}" + i=$((i+1)) + # trim off header + if [ "$i" -lt "12" ] || [ "$i" -gt "50" ]; then + continue + fi + # add to command + domainlist="${domainlist} ${domain}${tld}" done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ - | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ - | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ - | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate + | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | awk '{print $1}' `# awk, which outputs queried domain to` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf done From 45567216c0e7ea9cd7315188d0a71217ca13384f Mon Sep 17 00:00:00 2001 From: Paul Curry Date: Tue, 10 Nov 2020 14:13:39 +0000 Subject: [PATCH 064/289] Remove threading --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 61e99753c..40007e410 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,7 +349,7 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 -P12 `# xargs sends 8 arguments at a time across 12 threads to` \ + | xargs -n8 `# xargs sends 8 arguments at a time to` \ dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ From 540e2e105bbe70c8d030b883f749a62e498989d9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 10 Nov 2020 17:01:41 +0100 Subject: [PATCH 065/289] Use threading and only use wanted domain --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 40007e410..8e5a0c5bd 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -349,10 +349,11 @@ _bypass_proto() { done domainlist="$(echo $domainlist `# Get the list of valid domains, pass it to awk` \ | awk '{print tolower($0)}' `# awk lowercases the whole string and passes it to ` \ - | xargs -n8 `# xargs sends 8 arguments at a time to` \ - dig a +nocmd +noall +answer `# dig, which passes results (if any) to` \ + | xargs -n8 -P12 `# xargs sends 8 arguments at a time to` \ + dig a +timeout=1 +tries=1 +retry=1 +nocmd +noall +answer `# dig, which passes results (if any) to` \ | awk '{print $1}' `# awk, which outputs queried domain to` \ - | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` \ + | sed -e 's/.$//' `# sed, which trims off the trailing dot (google.com. -> google.com)` to \ + | grep $domain `# grep, only keep wanted domain` \ | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}')" # deduplicate for validdomain in $domainlist; do _bypass_domain $validdomain $intf From 3720847421bec7166af1c36d85fd2eee1e0703a7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 12 Nov 2020 13:58:48 +0100 Subject: [PATCH 066/289] New router logo --- .../luci-static/resources/openmptcprouter.png | Bin 0 -> 10733 bytes .../htdocs/luci-static/resources/overthebox.png | Bin 1677 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png delete mode 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/overthebox.png diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png new file mode 100644 index 0000000000000000000000000000000000000000..f4683f2c532cf5306c9ed7c8b5af8945309fc203 GIT binary patch literal 10733 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 literal 0 HcmV?d00001 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/overthebox.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/overthebox.png deleted file mode 100644 index 7b578c01f1beb4684acae5a2046589196ac19f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 zcmV;826Fj{P)600006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w78F5+&Ep>ZAYw02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00s3)L_t(|+U=cdh*eb-$A4>@ zQBy;$oDwIMEYwIRB*93{%pz(?dl_VrJs>hP`_PLZB9e*-sm$z)Mf5bI#8ga;WUvpK zh?z+B1uC1y5% zRw%g%Gn<5cGa72-Z5J^eZfyr2LK-==+>aB2=D_iI5t>r1g=!oA8mF~nuv%1 zOMvSGGaV`O^VB%YOw`gwUG;sVkmadIAbz_QT_)JxBFhsnN<`kVa%*!A0CQAzeSs#n zmp2lfnBE`l@O}g0SoSOy&PH(_)JN#iu*av%ve8w#Ap2u*K&SZ@^Dt zdRw%jNlo#Gz;mWSn{!xIcchrgRFZB*Z2+(+)D$NTo*GnjtLbpsrZV-orMXkx09~vp zKEp6!O<2Q(HBLL_dHrJ|auzTYxB}=0oP)Fc>;^UhD^+!m37Z{32LX=(cT(6acU(kP z05eo|feBl>g7ySn0q#rL#gqZp0;5G_xT>zQKDP8k9fez0zP}a!N&H0LYHW##Iv!`H z>ll0MA7BBn4A=(j#JSh@1%?B+0Rw^6z!!P!XG884vohi)at+SgBl_DLarV|8DL&sF zkPN%Y3=Zk1s@bivB65MRsU0HGzX7+Z>e^IywCY|P6_*~b0vATEcK{<*)x1BlI(QP1 z!N5I{s79Q#^!7H$yGlfsi^wJsxyx#7ahc*rvrW8~)clIb*}zz!Kd=W_p{m;oBp-2xV-IQ>%Qb#X%cz5?H8 z!nPCpW7iddG`mygwJRaM(o6Sg>Ph+U5e^pk%9 zFP|cx&A{xy!0R%auj6hoVT;2`+{r0T-0tVLab64w=h+0*sOtU{1FBjRwg{-|K457i zsy8q(knWhOJ_1~Y+itiB=Lr8GP_3#z2Wo3qU~<%$0n8(#WNz6Gx6?lQdw&PcYlD1W zkLCMSR+sIv>Orv(h`O@$@|L6yt<6wGCgN<+(c1caR%>e}h4s6+C)3=nI|f)FB0X9m z>chahF-z5KRsG(CExx#GfTv^8Hvp?ePFF-p6m?-nb>akf?{fL1SbdM9qz`UfiX) zvm2%WTT*`PAnv%qA*%X}sy61OJaV<^VrV-vucH&f;N}vHd=Ql6m@#qQTPg;TGBK!n&j0#%@d~5}i z=}-p@3_Zo840s7UMm~#SEzmFcc$SF3)xf7X?>sBC(hbLfHNZnad0aIF zD%>8HyK(ziTEZl6?J-VfDgj5l0vzz=dCWJvTMF5=%L`a<4&l}%*Lk6bw&KTssj7dQ zhQW%{(n@kfRX=MFTk$;H*8a2$2lXauLEfWf&gdIkbmQ1F+VhDWxo5%}Caht?8tucs X;o;M8_(@hl00000NkvXXu0mjfbF&e- From 9740e28234f26fa92354a888aced833ee8b0fc9b Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 12 Nov 2020 21:13:58 +0800 Subject: [PATCH 067/289] fixbug --- .../resources/status/css/wanstatus.css | 2 +- luci-app-status/luasrc/controller/status.lua | 153 ++++++++++++++---- .../luasrc/view/status/wanstatus.htm | 121 +++++++++----- 3 files changed, 202 insertions(+), 74 deletions(-) diff --git a/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css b/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css index cc056af3f..81aa8dfcf 100644 --- a/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css +++ b/luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css @@ -296,7 +296,7 @@ Thanks :)*/ .network-node .info .title i { font-weight: lighter; - font-size: 0.8em; + font-size: 1em; text-transform: uppercase; } diff --git a/luci-app-status/luasrc/controller/status.lua b/luci-app-status/luasrc/controller/status.lua index 551385277..02cdbbebc 100644 --- a/luci-app-status/luasrc/controller/status.lua +++ b/luci-app-status/luasrc/controller/status.lua @@ -269,40 +269,131 @@ function interface_bandwidth(iface) end end -function multipath_bandwidth() - local result = { }; - local uci = luci.model.uci.cursor() - - uci:foreach("network", "interface", function(s) - local intname = s[".name"] - local dev = get_device(intname) - if dev == "" then - dev = get_device(s["ifname"]) +function string.split(input, delimiter) + input = tostring(input) + delimiter = tostring(delimiter) + if (delimiter=='') then return false end + local pos,arr = 0, {} + -- for each divider found + for st,sp in function() return string.find(input, delimiter, pos, true) end do + table.insert(arr, string.sub(input, pos, st - 1)) + pos = sp + 1 end - local multipath = s["multipath"] or "" - if dev ~= "lo" and dev ~= "" then - if multipath == "" then - multipath = uci:get("openmptcprouter", intname, "multipath") or "" - end - if multipath == "" then - multipath = "off" - end - if multipath == "on" or multipath == "master" or multipath == "backup" or multipath == "handover" then - local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or "" - if bwc ~= nil then - --result[dev] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]" - result[intname] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]" - else - result[dev] = "[]" - end - end - end - end) - - luci.http.prepare_content("application/json") - luci.http.write_json(result) + table.insert(arr, string.sub(input, pos)) + return arr end +function multipath_bandwidth() + local result = { }; + local uci = luci.model.uci.cursor() + local res={ }; + local str=""; + local tmpstr=""; + + uci:foreach("network", "interface", function(s) + local intname = s[".name"] + local label = s["label"] + local dev = get_device(intname) + if dev == "" then + dev = get_device(s["ifname"]) + end + local multipath = s["multipath"] or "" + if dev ~= "lo" and dev ~= "" then + if multipath == "" then + multipath = uci:get("openmptcprouter", intname, "multipath") or "" + end + if multipath == "" then + multipath = "off" + end + if multipath == "on" or multipath == "master" or multipath == "backup" or multipath == "handover" then + local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or "" + local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or "" + if bwc ~= nil then + --result[dev] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]" + if label ~= nil then + result[intname .. " (" .. label .. ")" ] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]" + else + result[intname] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]" + end + else + if label ~= nil then + result[intname .. " (" .. label .. ")" ] = "[]" + else + result[intname] = "[]" + end + end + end + end + end) + + res["total"]={ }; + for i=1,60 do + res["total"][i]={} + for j=1,5 do + res["total"][i][j]=0 + end + end + + for key,value in pairs(result) do + res[key]={} + value=(string.gsub(value, "^%[%[", "")) + value=(string.gsub(value, "%]%]", "")) + local temp1 = string.split(value, "],") + if temp1[2] ~= nil then + res[key][1]=temp1[1] + for i=2,60 do + res[key][i]={} + if temp1[i] ~= nil then + res[key][i]=(string.gsub(temp1[i], "%[", " ")) + end + end + for i=1,60 do + res[key][i] = string.split(res[key][i], ",") + for j=1,5 do + if "string"== type(res[key][i][j]) then + res[key][i][j]= tonumber(res[key][i][j]) + end + if "string"==type(res["total"][i][j]) then + res["total"][i][j]= tonumber(res["total"][i][j]) + end + if j ==1 then + if res[key][i][j] ~= nil then + res["total"][i][j] = res[key][i][j] + else + res["total"][i][j] = 0 + end + else + if res[key][i][j] ~= nil then + res["total"][i][j] = res["total"][i][j] + res[key][i][j] + end + end + end + end + end + end + for i=1,60 do + for j=1,5 do + if "number"== type(res["total"][i][j]) then + res["total"][i][j]= tostring(res["total"][i][j]) + end + end + end + for i=1,60 do + if i == 60 then + tmpstr = "["..table.concat(res["total"][i], ",") + else + tmpstr = "["..table.concat(res["total"][i], ",").."]," + end + str = str..tmpstr + end + str = "["..str.."]]" + result["total"]=str + + luci.http.prepare_content("application/json") + luci.http.write_json(result) +end + + function get_device(interface) local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) if dump ~= nil then diff --git a/luci-app-status/luasrc/view/status/wanstatus.htm b/luci-app-status/luasrc/view/status/wanstatus.htm index e1403e2a1..492b9a6f6 100644 --- a/luci-app-status/luasrc/view/status/wanstatus.htm +++ b/luci-app-status/luasrc/view/status/wanstatus.htm @@ -1,5 +1,5 @@ <% --- Copyright 2015 OVH1 (OverTheBox@ovh.net) +-- Copyright 2015 OVH (OverTheBox@ovh.net) -- Simon Lelievre (simon.lelievre@corp.ovh.com) -- Sebastien Duponcheel (sebastien.duponcheel@ovh.net) -- @@ -19,7 +19,7 @@ -- along with OverTheBox. If not, see (http://www.gnu.org/licenses/) -%> <% --- Copyright 2018 Ycarus (Yannick Chabanois) ycarus@zugaina.org +-- Copyright 2018-2020 Ycarus (Yannick Chabanois) ycarus@zugaina.org -- -- Small changes to make this work with OpenMPTCProuter -- New features: @@ -55,6 +55,8 @@ end local curifname = luci.http.formvalue("dev") or "all" + local bandwidthtotalurl = "admin/system/status/multipath_bandwidth" + local bandwidthintfurl = "admin/system/status/interface_bandwidth" -%> <%+header%> @@ -789,21 +791,23 @@ -<%+footer%> +<%+footer%> \ No newline at end of file diff --git a/luci-app-shadowsocks-libev/.DS_Store b/luci-app-shadowsocks-libev/.DS_Store index 267ce486b9dac0cbca9f3aa4e5da6aaaefe30dca..8941bd955106f01ba87acec7804f636264f91f67 100644 GIT binary patch delta 52 tcmZoMXffE}!OUh=wTUTr%Va-hF&Hz8*^f=U4lKHlSqjSBe2-a81OU?n5#|5@ delta 49 zcmZoMXffE}!OX^fWSODV+R1**VlZYFvmYA+LqlnA@8o^VQj>F-xHms$RulmMkj4+^ diff --git a/luci-app-shutdown/.DS_Store b/luci-app-shutdown/.DS_Store index 62557add9490c6a4df95707b45ca8187da06ee0b..88032e645960e14d40043f2b826d69d387c8e70d 100644 GIT binary patch delta 47 xcmZoMXffDufJtd~(7z(xXe&$?IA}71_maE0*3tD{1lg@octsp ip93N{`4N+!TErE&G8Tp+hI}9_K~@Tp-yFugP6Pmn$|7?B diff --git a/luci-app-status/.DS_Store b/luci-app-status/.DS_Store index 5deb2d04ddaa200d930ce5b11d76085312c9fa55..902feabedcd348c3bbcc2205874151a014c59193 100644 GIT binary patch delta 142 zcmZoMXffEp&&p)hI$4laMoVwjIp^Fhha4Fg7}yvx7)lsY81fmC8H#iBQ(TgA@{@q# z91t~=!&&8-7#3`SRGy8Lero1-g-&4>>Y0Ft9OXFqAN)Fyu2NGZg3Mr?@2LJ0t> delta 27 ecmZoMXfc?ugYARVazm-L6ZeThSsQO@i30$hY70OB diff --git a/luci-theme-openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/.DS_Store index 41ffb54dc7aed12e8ba5f360849dd4e85a8b5d64..1619033377546152d8a6c0f7e8b3c956f00c75db 100644 GIT binary patch delta 30 gcmZp1XmQvODadvz?!0sEmdWvga!}^xX2C{20KdfyTmS$7 delta 30 hcmZp1XmQvODadx_#OG&cHcpNgl!G!iHw!lM0RZbH4|)Iq diff --git a/mptcp/.DS_Store b/mptcp/.DS_Store index 43eac7c3629e652631c4ca8c82b5bc1ab8d827da..35ba99406d1803d7f0e8304742aeb1f998b60ee6 100644 GIT binary patch delta 43 tcmZoMXffEp&CHa(donMx6r0G!^Uk?jChIcGz?lBba*PW$=P^$c0RTD34wV1^ delta 43 tcmZoMXffEp&CHbTHkp@Mif!kY&(F?moUF?%17rF#%Q0@)oX0#(1OR#W5()qS diff --git a/omr-6in4/.DS_Store b/omr-6in4/.DS_Store index 7d2fead81b825e6d415a77db0955d5bd10a0e89a..71502e3bf61a58f6efd69a81c0ac5b9caaa5836c 100644 GIT binary patch delta 30 gcmZoMXffE}!pJ5lyqPI?%VaM`87Ome4&w|l0E;*YCIA2c delta 30 gcmZoMXffE}!pOF;Wrd;C+R0vwGEnB`9L5=90H$#YyZ`_I diff --git a/omr-tracker/.DS_Store b/omr-tracker/.DS_Store index 80442797812b5bcf42cfd1adf46eb610d3c75802..6f47fe36611efaeaf268e25a6601963510d2c3b6 100644 GIT binary patch delta 36 ncmZoMXffEp!_4?#GB2|f+aHk&&beDA>oUtgnVbEYw~7D&<;)ES delta 36 ncmZoMXffEp!_0VnGB2|fn~V9EXJYL#efsb(v+L%+3DHTSWlL;tPoY diff --git a/v2ray-core/.DS_Store b/v2ray-core/.DS_Store index c0391c0f16ede3d88b5c08b92369cdc6773458b9..583dafd10a51956a0e20f4fdab1d272e48fe64c8 100644 GIT binary patch delta 30 gcmZoMXffE}!pP=ryqPI?%VaM`87Ome4&w|l0G5&o+5i9m delta 30 gcmZoMXffE}!pJuN;tE5lwUfOVWuVN>IgB&J0Iz}zQUCw| From 3b65d32818f8e037893f067a303ed47bc88c49ee Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 22 Nov 2020 19:47:09 +0800 Subject: [PATCH 106/289] fix wizard.htm misprint --- luci-app-openmptcprouter/.DS_Store | Bin 6148 -> 8196 bytes .../luasrc/view/openmptcprouter/wizard.htm | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/.DS_Store b/luci-app-openmptcprouter/.DS_Store index 0d8e5c5abe407468abf59b870070a3d334fe98c5..913a413a485d8c45b87cdaea49a23e80ca6d7235 100644 GIT binary patch delta 379 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aKKC<&4W@);PC8Hzn~@{>0vtY+S< z!10H9F*^sx#0C~!kP0@242BYh6o!15s-&F!B#<#c>G?1J# zxteWxAP0jlP+vAfDnlAWCeV~rRGS!O(QIO3C}7A(Q`3#CX0kkci4>ZGp9lq$TiF{n yKM_%2p4h-6$P5$*0ts#);R*`E&4L`?nJ4p$cuw}`;oty$6epDz7i>&e&CDpW z*+O6z9qDa|tzYN>o>ynwje;m`}LAY>orby9d sRt_c(L1v(7Kp?;kBwRtZY%KiFJegm{6J#d?6U2UylNdI~^UPre0HO*ZQ~&?~ diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 221f4b22c..ad41a924f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -470,7 +470,7 @@
From b08b63d4278fb699dcdc6ff5d5dfc44485c88ea2 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 22 Nov 2020 19:49:16 +0800 Subject: [PATCH 107/289] fix wizard.htm misprint --- .DS_Store | Bin 26628 -> 26628 bytes luci-app-openmptcprouter/.DS_Store | Bin 6148 -> 8196 bytes .../luasrc/view/openmptcprouter/wizard.htm | 4 ++-- luci-app-status/.DS_Store | Bin 6148 -> 6148 bytes luci-theme-openmptcprouter/.DS_Store | Bin 6148 -> 8196 bytes mptcp/.DS_Store | Bin 6148 -> 6148 bytes omr-tracker/.DS_Store | Bin 6148 -> 6148 bytes openmptcprouter/.DS_Store | Bin 6148 -> 6148 bytes 8 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 219147c872f5ab045d520759d8779069dc729854..ac5ab8316e3f4e24082faba5210f2e9325d8ab81 100644 GIT binary patch delta 2392 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 delta 366 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50C@2Jy2a6>$6epDz7i>&e&CDpY z*+PJYktwTVvYlWWBg5pSg1TWj>4w3{`MCu^4GauSymNpg8$%95DMKPdF+&kUa&Eqh zOHxjL5>TAu)Rtw2Qfm)6Vya0&Q#098Sb;HM@+o0mrPdvAO-u|04EeeF2*nV&$&w;! zlhZ}`W4-_lW&v874}>Mi7T?(oHv>r?VGcI=f(#^&F<#hM$i=vror6P=8E6R*2yg=l fS5S~`Ed0(qnP0{e6o3p&kiZ0mFT>_|o;l0_Y3o&M diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index e044221e0..ad41a924f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -470,7 +470,7 @@
@@ -830,4 +830,4 @@
-<%+footer%> +<%+footer%> \ No newline at end of file diff --git a/luci-app-status/.DS_Store b/luci-app-status/.DS_Store index 65c9b2afcd89fa123d3f50a7463c8f28df68342b..3ed1d5e6f111ab54e4af9d17437013845fdf0312 100644 GIT binary patch literal 6148 zcmeHKF^|(Q6n^f7k`^I4oJ0qPENm6JfT->Uq|%mw4Jil)KzB(~u91>BYEmjFMOhg5 z1&Ev2_yh0<*jQj>V&`Y@p6zRsHYYZOPJWgBIqyCD+22d-8UR>-=Gy=*05Gu-8cnP! zgzQwdq^2~xh)j$zg4CO*i5GHj%Udfn1Db*VjRE?0>o9=~eBe<2e!qE17^KZZ=E%?(_*gJ#e#$r`iuW4_9s1dlZc4hppWKk25!j$5YWc z@W<%#^l=dTeBS4?*iXecjx?BN!)zS3+Ka`_{r!%0`(W9z7Pf8Q>R1Qe?sC~MuU@zB z+&_w5zFNFqzWE?oWw;3mxuWnCPOwp0WO!^lBOWEvq5F2z9`WH&ZDQt)lkbD*^VhrE zKK@^Ql1VYnM+#S(#|vi~hde$;J6>~5!(HwtSITm}5 z^IO@9@qS(hO(@&J_d97&^l~E=irOTZ^N!*1~dxg@pWa niJ}Wu>Npk+I*Qv^grLo$24YWPE)g{-`j3F1L06iAf6Blgn(qpj delta 244 zcmZoMXfc=|#>B)qu~2NHo}#D#0|Nsi0|SssW+=`{Hw;eB&n?(kxSWwuVDd*68?E?F zwLM4H9&!XKV`Io*C}Bup$OkFS%};Sj%E?axigQ5JOb%yNpIpx-!OUp$a`G%T8MceB zXE|BRbA-qm FW&k?|Nh$yU diff --git a/luci-theme-openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/.DS_Store index 25181bc599bb2a02183fd3ac39170b5d7c5a0ca4..10f679b68f6e89948b30fc07e5d7faeae80e890b 100644 GIT binary patch delta 396 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aKKC<2lP@);PC8Hzn~@{>0vtY+S< z!10H9F*^sx#0C~!kP0@242BYh6o!15s-&F!B#<#c>miUP6hm|KQ(T~iazNBf4ri5TVwy0y zf>l=rb${G&PeggdHbe6fT=sT(Fp(gF}!Rs1*nVxPgQ#$X6Q+zcWwfm+=I7i-8GZHYf-f KHplbKVFmy}#6Bhf diff --git a/mptcp/.DS_Store b/mptcp/.DS_Store index 7f3055402f743cf1c348f508bb878894f6f038cc..62192371c05c02f0722cd9693c2ef4206a23791c 100644 GIT binary patch delta 43 zcmZoMXffEp&CHacF`1WHip^+t;d1A#lXaP8*hDU#ch221*`HaCalz(1=4m1TAX*K` delta 43 tcmZoMXffEp&CHbUIhmJPiY;l%neeA;C+jlHz?lBba*P``=P^$c0RTa74_N>J diff --git a/omr-tracker/.DS_Store b/omr-tracker/.DS_Store index 0706c24e11dfa7954a97dfe3b9f59653a31e0e28..3f60c36cf1471e468f2d11a76b084deca94e29b0 100644 GIT binary patch delta 37 tcmZoMXffEp&CE1&{$yTeDYh2gqUFw8C+jlHu>BFa;GDZ Date: Sun, 22 Nov 2020 20:15:26 +0800 Subject: [PATCH 108/289] del ds_store --- .DS_Store | Bin 26628 -> 26628 bytes luci-app-dsvpn/.DS_Store | Bin 6148 -> 0 bytes luci-app-firewall/.DS_Store | Bin 6148 -> 0 bytes luci-app-glorytun/.DS_Store | Bin 6148 -> 0 bytes luci-app-iperf/.DS_Store | Bin 6148 -> 0 bytes luci-app-mail/.DS_Store | Bin 6148 -> 0 bytes luci-app-mlvpn/.DS_Store | Bin 6148 -> 0 bytes luci-app-mptcp/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-bypass/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-dscp/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-quota/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-tracker/.DS_Store | Bin 6148 -> 0 bytes luci-app-openmptcprouter/.DS_Store | Bin 8196 -> 8196 bytes luci-app-shadowsocks-libev/.DS_Store | Bin 6148 -> 0 bytes luci-app-shutdown/.DS_Store | Bin 6148 -> 0 bytes luci-app-snmpd/.DS_Store | Bin 6148 -> 0 bytes luci-app-status/.DS_Store | Bin 6148 -> 6148 bytes luci-app-status/luasrc/.DS_Store | Bin 6148 -> 0 bytes luci-app-status/po/.DS_Store | Bin 6148 -> 0 bytes luci-base/.DS_Store | Bin 6148 -> 0 bytes luci-theme-openmptcprouter/.DS_Store | Bin 8196 -> 8196 bytes luci-theme-openmptcprouter/htdocs/.DS_Store | Bin 6148 -> 0 bytes .../htdocs/luci-static/.DS_Store | Bin 6148 -> 0 bytes .../htdocs/luci-static/resources/.DS_Store | Bin 6148 -> 0 bytes .../resources/openmptcprouter/.DS_Store | Bin 6148 -> 0 bytes mptcp/.DS_Store | Bin 6148 -> 6148 bytes mptcp/files/.DS_Store | Bin 6148 -> 0 bytes mptcp/files/usr/.DS_Store | Bin 6148 -> 0 bytes mptcp/files/usr/share/.DS_Store | Bin 6148 -> 0 bytes omr-6in4/.DS_Store | Bin 6148 -> 0 bytes omr-tracker/.DS_Store | Bin 6148 -> 6148 bytes omr-tracker/files/.DS_Store | Bin 6148 -> 0 bytes openmptcprouter/.DS_Store | Bin 6148 -> 0 bytes v2ray-core/.DS_Store | Bin 6148 -> 0 bytes 34 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 luci-app-dsvpn/.DS_Store delete mode 100644 luci-app-firewall/.DS_Store delete mode 100644 luci-app-glorytun/.DS_Store delete mode 100644 luci-app-iperf/.DS_Store delete mode 100644 luci-app-mail/.DS_Store delete mode 100644 luci-app-mlvpn/.DS_Store delete mode 100644 luci-app-mptcp/.DS_Store delete mode 100644 luci-app-omr-bypass/.DS_Store delete mode 100644 luci-app-omr-dscp/.DS_Store delete mode 100644 luci-app-omr-quota/.DS_Store delete mode 100644 luci-app-omr-tracker/.DS_Store delete mode 100644 luci-app-shadowsocks-libev/.DS_Store delete mode 100644 luci-app-shutdown/.DS_Store delete mode 100644 luci-app-snmpd/.DS_Store delete mode 100644 luci-app-status/luasrc/.DS_Store delete mode 100644 luci-app-status/po/.DS_Store delete mode 100644 luci-base/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store delete mode 100644 mptcp/files/.DS_Store delete mode 100644 mptcp/files/usr/.DS_Store delete mode 100644 mptcp/files/usr/share/.DS_Store delete mode 100644 omr-6in4/.DS_Store delete mode 100644 omr-tracker/files/.DS_Store delete mode 100644 openmptcprouter/.DS_Store delete mode 100644 v2ray-core/.DS_Store diff --git a/.DS_Store b/.DS_Store index ac5ab8316e3f4e24082faba5210f2e9325d8ab81..601c6b21a5ac0465114a08bad16d526e4b7a3343 100644 GIT binary patch delta 2462 zcmcgtZ%k8H6o2oweLl+TDx>9Hk?-kn;KJVM_{?0w; z+aLvl%zxo(4M7kT3~^3=6n(>@->*YWstNiyh9*@P z#0?@bo;r_sRI5U=K|UqzUpdm8f?jPtsC*1{ar2kh2|m(Vpi3LKbWkCjh|oc*HWR`+ zE&oJYD@RKXLXkd~wm$tr%2cG+K$l)gNd$bTH`Ah;|N zGSMYJXq=HD-2>>)%c2f8h&#^Z>E~c1&p>+l=Xo+@zH%SOqVVy$iB4hzv7Oiwf5=7M zLg_$bF;G$HvgBgdH!NB?Qn$k7vN9McWauaFOP3Le>G_1y$|5fTLskvEY4xJM0EQ;| z?9pghhpf7^*uCRu4Jd6aN${Dr97H+Z74!lgyN#CM)fz}axhe5AAqd=$ll5AdwX0#w z&Y`pG#bsA83iOP?VJO{Wc2mQS%dUCF+5H40JV??B~0RFCG(U7F4b#65jx;b>t zA|{=1$E$MOc~Vg2wA%uA-3;||=|CI-lO79jo>pYPgJA*u>`_v#VR8Rmk0S;P;A{s= zj$#$+V4a(WOVug}Rj)!mJ>0JDr04!*tVFG7f7_b{18XRFP*V((D_DNa8zj-#L#)6u z@sECwB+rXI5eVUrP9PrDiZ>H%*1FS3*9S(Q3)DU(HK7<5?vms4$Dj+&XjL*gMJPo+ z-0^Y9C_K*mw0LPjhafHSX>xUPi1?D>P(4E}K;Nim$w5)_&+6OI`R$?<`u*{WdPVnn zOi}&*3_5{$R-Xjpeip4KAf>^?&-&{~q>~Fc;q&i4Oh_fb1~}Tl&5; z6Ns5c7UANBn#^EtYC*f?7~1KFDj^dNA8N{nyG=?;BH&q5DMFL5p?N9qZ{ABHbt#0F zmn5Vc(+L6+T$h)CtA(Kxh)@d)_p%fKE!}ANCJeTi!Lov(Uwj??v;|`QeB#IoR!}P* z_gGFlQCcg8F6if!ijfT2c|RQEUVn)y0nd0D3Q60ob!vX!N|HnwXJCJ87PYfatl;rh z{Tv)^HIN*CueE?g-f2i~&r;aJSY=Sqo=u790xWMgkUe~7dz&16^#lC0I*anJ6~j!e z*5^r3oVN;L%;9;wo!FBwJ;)v~1>2DEIh+V;;80LWX>W=1?^w_@2d@Rqc>X;O<|1@V m2A4aspa(IuZ9J+HfpB`~5qrEUL`3+*Yl{B=M(~sC%=CXM6?9$z delta 2453 zcmcguZA?>V6u$Q@TrcHvTM%feEfg%+AT8yqwuM4V3!|V|ff0*ez)ai+6~vi2$ymwU z;uZy#GZQuHShh?zcmC+W0_`40Dt&3ow6)(n;&!Uy|>tw@O%HB_j%uQ z-t(UG+;i^MAh|V24wob3x(Nn;A9)-6RdhjbE zmS$=QUqmP&QIQ72N(FaUQ5l1Z1|VOpr6(*eVk7K0U!4kmwUiPGcuTFL1+!RU6O=Dj zz=--5>U$IVG|FUur`z4$(b5$1SVz1EAF!PB7nQlXWwu;g`Zsv3LRknH>2D8)2R_;Nz1nI_a zVOJE6u9N5>+KBbUy2u#MZss!wsrqy(1Z{dP*~P8UD`L=sW|&-93vEInv4_Q$i599G_Gv;HgOlV`7APzLu3yr}05!OK8lBDCa4sf@iLdp!hlnDEj}dLh5a0Lewo$hjL#MR~BRh@tn~ z4XKYOuFWKr#ViUEaNVhZisCI2N%HX!*1%LTL*Jl6#^M1DSW0Fg10^gOgzFY1^qAvd zxTF?sJq;#v7Nnb{)ag%!aE)doEkc~Q!IGJYn<1FD(8Fc&VD zOR3hNaDKep9EQ1YxP>Jru@056#!kcc6$uciXhtiwaIK<)o^HxmoC;z8HHS(<%6a`2 z!{kzy8*}(b^vgYAjhl4rwVUg4b0JGqAa`j1cj+0-ok|uBi{=K`=g2e&nQj}%+)_$Q zRr0UNa94++4Gt(0B(#Z7Mh^Vy_983)f#xJd%Ii^rV8~a&>xzM(J05maG1M&dg(?;f zTGQZuRU`VbTaZG3b)=>|DZDG8Q7E9lI)#oR?pMXZrD_%h2$0ugaZjsVB&uO}9M%0F zv~`Me3U9!k8itM{f;BAJ3KKQ&qJJ;KphpS49x2tnLU=;IM@Neghv4v}LeP_d;^Z*l z=|Q_IVbY_Ix~TTi5hO&5H(;cep`(Z=wJgGk3)JbrR9BC-(-@lQii%JZ4b`%T>RH^)2I@DWlRv{?y$(iL2rYK`ul`13Vm z^a`GMu%s!S400V!jWOu#NjS4yMWsCy++1I-&K9B2vSRrehiCD6Vsq5!AO|7K*NCit z!pFW;*x{2>%l{D^@AG9%!*f0zo}0h*$bAhfo0ZT5?4QFD<8;_O7 zO%Xd(p_$5l&U`%bid(g!0+yqDr)JTUTF0GCgr}pc15wQ+!A`e6zyiSy&n6lfAwh|hxf!{3reUV7vG9~!3tx)i%cb}d!wdA57r;DV SCkPEh{|I;*bW#TXl!0#!_g+>2 diff --git a/luci-app-firewall/.DS_Store b/luci-app-firewall/.DS_Store deleted file mode 100644 index 75395d38a900626a24c08ef893572e9ad8fb2267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-veG47N)_MKE*&I^DnvB-RyIanqC!GE0UOW4 z=eui2nj$t-AzSi&iGR+zFHsy55f5+kgs4wMJ*Z%37t0zEzi3N3(XtO@zsH1bW>?8* zVvDjBt%glxK%U(WO=(U!Sz3L5-2Ytl7dFerGdqU8cX7WsetTG)v}5vLW6EjmJ>fHK zK^-c|Hr}73$GfGyUiahuIT^h8x<03{-}P2~jXDD-b-Hwovs#)rYSH#n-B+)7aQ?bH zXO&y8xz69HOGfIdC76p54E!qwxSNf#A&wM#YwK{*YYp@gDk5<%V3mRk--;0{ dt@se?1$HABz%-%@2n$4i1UwD8CS5T1=eDhl=}p7!7am^X+eUPb5&)V5F$2?=WMd4ax!;L$hmB!VyD(TlI( z$!~VnG}~0XNs*bd`)%fDhyAi-Iz(hf^*kXO643yIG1|klLDUpbT8yVntw@W$IbVaw+dw=#~-CmSgHqFZ^^n5Am`*ZsKt?%ajczZ~WA6;G-Q$WhDyOuG|S>ksW<~saDuGZGgcmMQq@+#-- z*jG6>*~7e-d_EOrKp9X5wuJ%IY?i^kpw7yGGN25!4Dk2CVlbv28$tK!z~ov0U<|br zthtxq80#_h*a*S`F%k-tP~%$+BjM0n@0WUP1SOn|Z$6CAYw|1e0OlmTVnUol|fY@Cg7Bwt&5hvQmnF(w!+?AHjkAy~Ll3|}tA cM;K0^x4ZzR9veYuAo@qZ(V&wu@TUxX0YtE3(f|Me diff --git a/luci-app-iperf/.DS_Store b/luci-app-iperf/.DS_Store deleted file mode 100644 index 7b5151159f9bb681166b1633b06a747b39fdb6f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S=v^B!VI(f@TX2fO`sKnG@s!A&Ha}wrl~e*@iO5pyU!1a3C(go1Mkj zaS$Df&`h-Z*7MoXKCe6(A~IRCOo%2#G{Rtv#+Y^p+j$Hm3Yrt3@q66SqF5!7EAf&mL{t%PP<3MKy;Wm%=rh&Fl5hXZfp7z3$$VOKd?A)l~KG zPj>#L@8-SwcuvkT;p}u*3I|$^mg$s=WJuUId|Fn zdHwk~w~8{L3@8KpzyNAC%jj58XJtScPzG8C`1@cn7}J1G(0@8G`4#{eL+u4??j<3xA*gN}|9q=0*H65h-# zi8l_SLlK&ZX5V@~JKE=!Crd>>mF?z)uIobKp}TJLZFZPQ?V9s|5 z&hY`$fVCn#5T~g?O?Bal;WQm~AL7!0wW6kzlgd~pRCeKp;-ot4Uc$+xiZ&Vp#z4%# zo<8=u|6l)n|BsXG$rvyO{uKkRlZ~?xwiJ46YjfOdJ@gjJ!g00YDg_g1#farrJb;S8 Y?s)=C1J;VLKS5T1=eDiz5^5Knv1yLp3H;$7$qXj{-jN`jhuUZAhxLGb1ic+dy(1^i}b zNRy`GO^VEv*>5vHJM5Pw(6RX8@czcEJj)6>^bSAFYxo4$UXYpxSxpCx`z{aTKlt*=|}=!>0p7xB>uUn1f)R@C4`; zGsQ*_9*C1vprkszVmL{M-D_N?*a%8GIlX*1t?cxM;zD(-??X7bOwdMSz!>N=uqTfR z_y4P(@BjTIdol)$fq%t-i}Ptd!IreQ4mQWV)AAio5D2_`+raK>Yh}uNdLSt;~q1#{_=T@^u@Nlv5V+?3o zTy=T_H=fk8)$tb<;Cr`ABbw2W9M$gM$^CkK?DD){xIX;+P|O#L*Ry)g@W-6VD1J^d z41swRG^b0N(hUvL=jiEkJs!{F;rOm|_!#C9jWKqsd2Gu`=kdn#XwZaQ%Ky^+_Q$** zrxmZSiTT!JDbG9eG;y5{zgfyVWb>> z8}hP%rJ$6P@yr+}Fq^PLF`gZM>(j|(g4(MBsz9p1j-0l6{XgHn|4)nbOchWC{*?lz znfG%3gCnf1wTt7m)}mdYv2k80Se4+wFU82^rT75N8~m0JfLXv&5FVI*2zVK^Qw4ri FfiJt*fgu0@ diff --git a/luci-app-omr-bypass/.DS_Store b/luci-app-omr-bypass/.DS_Store deleted file mode 100644 index ab36f815f39505a924387033256a507d0eaf0ed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKF;2rk5Zp5sGJ+x{K@?Z;0sp{6<^^deqr?&^VqHWGwLd^ZOHYTy6A(=v!XK!a zy*-Q_C!#|U+LiX^ytjKJk1d~xcKteopag&T`&t+zGj$KrM-`ze{)Y28*(ct|Zzi-ahwkQ^rUBHh+;o9~3?P3^H{uJTJ_XV4oJh`NN@yXx5U8I-(ce>Sm3jG=QAN` zir7$v?yB>1&UZff#me=F$V{4LMl>d(5tK36$FMXCW*yElS`%;CHu2B{g(S4>WjxquurO$`!@DbaU8oDSWe9y zoLzj`yLpeEU$T?ekT=9s?mOT5T0hT>^Q1VZ!|$=5%iML>y7{uFkJEQKXB*qixoN$h z*K%GJWk4BF2DXI()NGc~fuN4cfHI&Av<&d~!9p4Hh+Z&!IxvJ50GPrY1as~sIL1cI zBYHusK#YU}CDg&nHu~iey`Y4XiOq+JnN93aOvsM?ZEz=(3+kv0C4cI0u) z_5bSU{=XljPs)HY@UIv!X)!G(I8v;wgTryHwa^)qh5fu>8-htF#qi})d<+c&yX6Tm UkLU$qf#@HBK!Xm-z@IYk37XPg6aWAK diff --git a/luci-app-omr-tracker/.DS_Store b/luci-app-omr-tracker/.DS_Store deleted file mode 100644 index 68034362b31c3f0f9127d23eef587417f71673a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-ve05I%v!V?sBXe+_c$Pv&z4*=pBSlD=pF7Q}v$IO0>sqeby#9|3bs3sSm zpA+|O@76tgY3oW(@OzAFC6}nx`nvV5mY>HT&$7>se^qmnKdyVq z`%_T{lmTU6TNpskX36$F>ZlAT1Ij?l0Dm8HD5DM7c$7~E2Dt(NQwv$n*0E(U z?uaqpN7^@hKYi_+$#e?9jJC5OFaXeJ6D-cy9WaSYYgrLJQf&MfQ>+&c!|~KESFLPy z{6z)i-koBO4Q8-t-M_Ki_$gd#v$@ zY5p7)AN%oq9{8R|GRD%T^EjN7&qL%uffa1V-+g`l@~6DL_ow0Ii(kL5N%{6;8Bebg zo(|V(`P*b%=w791yli5piw~H4<(ym z710IsuMT$p2te%6?Ty#|8;V$pgIGm$0qLQcP)ZD?CLS?ND5t-Sc~wLgFqFf1W{wk? zO+29(&rW~o(_yNB+N%PpK(4?^_&bpO|Mutee_o{jQ~_1sUnyWZ^|&5!NpWv&El&2@ tlI@O7O!8d7ri2%MD`u{2#TRVe=r84hSVeRJ>7nU|fR{l#Rp6)!d;$TPdawWh diff --git a/luci-app-shutdown/.DS_Store b/luci-app-shutdown/.DS_Store deleted file mode 100644 index 62557add9490c6a4df95707b45ca8187da06ee0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKu};G<5Iu(o1;Nk-33c+oz`&B3B~)QxL+THpHc~sZas)-J;RE;$Ha>ur1qptN zcV`pgricwy=uSGnAv~a=VG2K=1J)WYjw1Wxy(a%uFH3F)~>Uy?Q(9K zk9jTgs;L61fGV&p3ZQ4RW&0j=R0UK4RiIUXzYiA9SOjc5%BKT^907nS!eY3Ve>tG# z0I&$yctiwdd@0bEnsCH0z8rBI@``|sM_*1xnDLyzY{Ch}2s`3d(#aGabyNjZfmneZ ze>>p*fARDAKQ7WcRX`Q^R|=T49G4?3DfHIf;<(pZ_%)o3^BRwB2`;1+BbQt85nK#$ X%NM{RVB--HnEnWe3_7R+f2zPIo`qmd diff --git a/luci-app-snmpd/.DS_Store b/luci-app-snmpd/.DS_Store deleted file mode 100644 index e2117360ddc16045923e48262104b57e4d2ecfbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLOHRWu5FM8Y6~Q7)1PgKiB$OM3D(sQEfF-n*V3EiXki9QZiBquS65IfZi*N(p z*h7e$R_suPW-9wR^YK$&+_)|gnMu3IiBcjOqcM*5(5*3!a~s%5JO@DI=Xjubb(c@) zwr&R5>exmF_}T4JMJ?UZBMqM4>E~*^wq-f1>eqpVS5pO4fvr&hdp6s6KcM!ifGVI0bPDkMAwy#<1YJP?>Okj@0Kf!pZy2XM0A_-P zpbLly%!E>4C^d4#Frgg&O!5jr7ci8Qk;8`(W+NvQGY{N>J*ceBYuS@+o#85JfovKvcFurM$%FfkM`wckJTF zvCH%I{sWq%gl^~p@78T|Y@d^L-}-po4({$>ALDrH+@ky*!zO>DU%b^O#(*(k4D^rz z-QCjN9?s3CWDFPszhi*+2M=Woij`p8I#9$b05E|$3hI29;2f_Q6e~e^AWl+&lIrw| z;Upb)uW>=K5|nguv1hcSJv+UjxY#@FK8BMEf>s&>#z2#SEqNUB`G4Gf|8FMQlQCcn z^ojwOWYdiQMA5UgH90GlvZ?TNTkBTlt1847#SGZ_$4Nu&sIoD zA~7LAw&Z&kpM7!OMR80-JiT8`h{i;eKm`XQ3>_ltqAeMiMHV^kv8F4!qa|(DH!W{B z{6+@k>_+j-aw@5Dev{dCk(ZkC{!6!4US!#PUCgnXoV^_$KR>;m^m#76=~=FtcMjN& zcIkmubV28MyKd#(YI+>Jw>_G9Z652qzU-41pE>n=b>t&Cxi|yPfHUxy89>bzN%jO1!@za4JwgA8(%uz6xUP5AmVQN?@VgOyJwKEx{ z>>k_ok9z0((si3%*&wgkFJIf`+xzXIrZ3xzd&AT5dHeIXlcfSwfC^9nD)9dlK+iU7 zt^*mV02QDD-wN3GA;ArE#WB!79SA-G0PQ#44bMJH0Fx2GTyYEp1Jfu4Myb{jL!%sg zs(HEM7#QWEelyOgH*1|x)Nco$JY6&gGExC5aH_ynEEm@Q@8B2a|I;F_r~noCQwr$3 zTX!qGQthpim$P1*;P>!@A=lFpycGkz6=Pwo_~s}t*)#TY#WB#!!FxH7KLVx;jSBpR F0$(=$C zW0tcmGk{!=vCI;dG7mf)V^hOhQ~>vGjzz4`ny_b&_pj*>lCB>q9~i&vqBU_@k8;4+g1ZN_0oP)_j=#3w&$g7-^O2*iXLLm{~ERi2c?B=6{lVpw|Y7` z3|c_>z8}Vc8q`%k4iY_%YdVA|h{8c>X*gW{yi$?N>(x<34r{B`^@`kBTN{lEqWr10 zxqH|-IUSyj&M%F~9Da}5K3cqoD+ng6H#(}hP1WgYD!(XCW_DDgVU-cn^S}3RuYYd6 z#18&~-EBXf#SKno!hDb2UL2|T2pIRPMK&2JKnjoouPb0r4KepRl^CP|De#{ufaik* zM|3P^2KCVag?<76=Al^|#Q2uL9BI+9m>Gl~Fm6%-O)9rf3~th)U0R-FF*9h=8MluQ zZoka!3x(^i!}wCu8Fvg)NeYkxPZgLl)e_$SJCoo4Pm`!d3XlTtN&%j4xQ#k2$=={Z*|!9t?s15#@0r6 ztHW+@ZcZjmdg+>V=l((b?D_a;^5R4hP4HZjvZnDXyhLTezN16S8SprjE@buNVvm^j z`sk(D;<)n-EkA!xs& z{f7QTk3IIniDSQ@KhPQ5AW)#GIG_qV()i8V^StZl$j$%&YY&1ZKn(ymI$^1T%{@lr z6Fq(K@~&^tfVgZ?x)Sb7NyX zuJEOm=GObe-s#!se0=dmi_P$NscgaEHGIWj%DUs@rh6oNsiw4kPiORGr(=}ji&sDQ zetrAC{V%NG5v;U(`|BL~$SLbNakC_r$uVYLt3oVmRspNPOH{y|0{qoWT)bVgRlq9n zR|V*N5a@)C!9t@tI=!1_F<5BS zbYQ0VVCK!tR47cn9p@J+9hjrhwpIbFz+DAq^ka?g|9219|946D$tqwKcvcFqa>wno zaY^QGomd>*wF3PRos9AdjW-kw)K!eRbQLe7E5m+40it8D(1<-~_K$#)!8TTbCsp7N D2iJ-( diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store deleted file mode 100644 index b27391782c25c7f2947c34963ae61f1481d58592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!A=`75Vb=ZoS>>XR1{A5(p!)cwGeSY+NSA&Tct(xP!Q~PqhzJcI?8Su(KOY5 z2Ydjh{z4BGr~Uw+!7ngl8`LErP9Q)t()f+XGxqxJ%HCm&@zyA4Fji%Z2~fmB8JZge z$5CgbU_B*3uIK2m#2+UEKT`foG&vq41NiPrEM$G=u`bKMzkmK93X`;6KjVeD;)~L} z5EW5*S=n=YYV4+7I!apJ@GJH{duh+N_O?>dmF@XEVQ0Kwef?3zsTanbp-v8i4utG} z3FAPGTWS;siJr$b145KVdB3_mnXJ8gUz4lN`m`n|jkS8SCO6jCr_-`{^R}_MbNebOsy{FRE9ck8`>NfxU$Iy`IsJ3``|pR@nBdNs zLGS-{BrcbGj_>X;j#S(Q|K+n|3<)tn3=jkN%YZ#`#KQe9L$ebD#K03|0M7>ris)F( z4CT delta 42 ycmZoMXffEp&CHacF`1WHiq&X#;d1B6I?S?cA{Wm)=Wdzo&n(BdU~?YxG!Xy_RSgmV diff --git a/mptcp/files/.DS_Store b/mptcp/files/.DS_Store deleted file mode 100644 index f177d78c795a48c68463c14667725aa3227793ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKv2GJV5Z$#6tc?&Zkcd)kL+8Q=N|Y2xhcN|Rq(h{DD7nj7@k!@f%Xh{CV{{)u z13y5M{6sn=dOA9O12MBZj&0dcA_Ozi?3~ax zj=Cll@-zS?*6@N;GZ?PTW5?gi0KU7b=!rs{rf19V@8H`aGBDk4l$r=UYUliuw|#N> zXgM1HCOYgdSG6BURg6V0M$sf6Qq|AVFirBJ-To>o)!Mb|H3o0mz{Xwzb2On(SUQ9Vh;*rd zE>%*CAzeE7HO=!0ONTC9NNPSLtt_cSk#=>cukCapeTO_U1I)lG16B9f#QXorulxVi zBz|HBn1O$a0a@z?-41Mt?$))<;a#giPe4&{Ug_{E1q^!?!(6NVP^v;;Kohwo;T6 zw|#)|9rzNvP1+st0e0sj@Sg2$iCQ=!#Qdb^-^=@B$G=#13;?V<4mto$0N|*El{z*H zgyN)gQZb$eBBMS!?gtqU=kl!M-(`TlT@`!?A&HKQ-*0*QE)vUL&yS>!9$X0dm$S2r ztztCzLv%PO_DbsvmLP=zcrb##KS_tC=SzPWg=yAqe`l3yZRx>7&Ktb3+&FLta^hxQ zHcq?V=si8{c-g==_O6uCt?l{m!v5s2`Q)`sGA~T}BUKy*eN5Tk3zI-jx^kQZsp`ko z0nY2Ze%M@{PG7FKTjJHmtR<$M_WFyK*jQVe&FXyRS!eU@QG9Yb{WSZ0PIJH&k4s+3 zV}m#F6^+6a%e4M@T8wIm`g|TDykCn Y3o;NLgSkfZpx7S)MT2cD1Amo)U)UjrrvLx| diff --git a/mptcp/files/usr/share/.DS_Store b/mptcp/files/usr/share/.DS_Store deleted file mode 100644 index 509554931aaada76cda32135e3714f4be3f2e967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-piJ5Z<*NvUU{31(FffHtAgWh=QPqbU02yhjdX=BoW+k7Cz~GYuRV4#Bp>l zkpf`}5su_f`lY+vC_1qAr9`popa^6n_zn zqb^8^JS%__`xp(P)I?CbiUtd<*|Cfa;I}IaBl=<(P3FH}nvC*R>spq|l_x7tm8z-Q z^V*l7XC^@&=HpR29Dc&uUYPeHvfmq%-q~UFA?Z%`>#J`~mWN5!9opn1?n0B#ACoLL zleQUW@yPZQxPVesRo$&}PP^29l`q#F( zkiJ7MnE__tJ_BV}t>gXw?%(hK`$=452AF~WiUC>a1f4c4iSE{g#o=A6K@UJtuwCKs lE(HvG6+>IRiq}A`fM25l=o1zW!2`lS0+t3Yn1M%S;5X<>YmWc` diff --git a/omr-6in4/.DS_Store b/omr-6in4/.DS_Store deleted file mode 100644 index 7c7a4bd74769f7526935bcc6c03c1b2fb8ffc444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~O-chn5QVEW!hoAB#f^Og=Kz5=j3>wiBu0%eVFKcQ7GA`i8!zF>e6On%Cl0s^ z5~`s4^-opL%m>rmB_cY1UezK~5vfq9%EpLscy#K>ohMK&Ydp0N_2RbMY)6*)pF@22 z6Sr(^w8+(ol#)IlH!3<(@tcgpks8o$hFl0OWIUJwWZ z2Sz|A&7zs(qx@|B^?5vN6Uq$=jeb2FFti7k0Cc#IoRvwNPi(_4yY{ABh2te08W({A KB&r~=2LhjcwoCi*fmvH8`!mZiF4&yMJWT`uBh(G; delta 42 ycmZoMXffEp&CE1&{$yTeDb^O=qUFw$b(m$@{)k*~&fPNEpIMIaz~(&WX(9j~=ncyN diff --git a/omr-tracker/files/.DS_Store b/omr-tracker/files/.DS_Store deleted file mode 100644 index 5d05dc450cab0ab55a5354e8452d94c779518910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy^hmB5Z+A!Y=RIjkT_9oLzf~x;B;3YnGgyj3MBJW0J_-c=wiw7Mu|fNA;=Ov zJv6iwcTaHLbvyyDLdneT+$B*0B|S;su=hAB`Z3v0jLFXJD1Mgqru*Kt`z9}m73|ihQo!hq;k!3o?$FKg4W1`d2GB67|*Q2X+1~@Ox_c|QqnaK~qbM|x?Wnl)G z0cKzW1GG)3%Nt_sVg{Ij|C<5aA2cXpKv+7oTL(1u3IJFGw-vDQE`c?gFd!@)LIgy* zQb1QK>53s;Iruf@1%#zTS1u%7J|xX7>4qZh>@dEz=|Tn$xn%~JfmH^ouIu6X|KQj6 z|J5SyF$2uNKgEEob;3>?mPBXk+T!r6)u3Ha6wE6fo|k}Ok7CHhqj(F{3ive|fB|9Y S5Ii9KBVcLZh8g&y4EzMXgMmr_ diff --git a/openmptcprouter/.DS_Store b/openmptcprouter/.DS_Store deleted file mode 100644 index c037b11b5cc390094a3b58b677037c302dec9a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}(1u5Z+A!-K0X~P^la^?4`FH5}^DXD!FMma6>X`4=oBdc8Mj&8^uneHVyJ? zz(a7MPtY4L0I$Q$?h+*ph+EWFGt%rgJ3F%zf3|irj4|FE1P#Wjj4=Uvz0REG;d+5TYU~ zE0trnqlRwgWrMWo^*`h6(91f$wU3mFC${H*jKX2N`s#y9GA~NPzD|yU5JJ9uijqJL zn`)2*souvm3qq7dxm{fwjW&0;YI0-e?YJgKdmHtd+}hk8kIUlqo5s6?lkWE)qo3pR z3&SjjPf*LM#Rs?qW9kv(vxa-Bx;?$jZ?9%oyQr7QB z=2&Q|{x`Ru#40%h@53*~2ohp|7$61~$bdb5#LETNq*BBHG4O9Nfaik*MRY9Y2KCVa zgKhx;OW@W5Hue&jBP}`>bAzw~!c8imN#(Z1;3ggX(#AO!bAu+Gaoc=wTbbJqh3o3D zztrK3I|gYa28e-K28w1{#ruE%>HdEp{0v@@u9x*d-0-WbeJ~IV)C}y~aL)Vx48P1|kzc38C>RI^ zc8md?^~-*NP5IsWZF{_H6WRqDg>jh*1bX!dz<}q-QE{3-QAb?om<>4#?Ij%;4}n5R Kbiu$cFz^Pe!z-l# From c1c89133bc73f25f1402494a68f58c06d2d1353e Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 22 Nov 2020 20:19:35 +0800 Subject: [PATCH 109/289] deletds_store --- .DS_Store | Bin 26628 -> 26628 bytes .gitignore | 29 --------------------------- luci-app-openmptcprouter/.DS_Store | Bin 8196 -> 0 bytes luci-app-status/.DS_Store | Bin 6148 -> 0 bytes luci-theme-openmptcprouter/.DS_Store | Bin 8196 -> 0 bytes mptcp/.DS_Store | Bin 6148 -> 0 bytes omr-tracker/.DS_Store | Bin 6148 -> 0 bytes 7 files changed, 29 deletions(-) delete mode 100644 .gitignore delete mode 100644 luci-app-openmptcprouter/.DS_Store delete mode 100644 luci-app-status/.DS_Store delete mode 100644 luci-theme-openmptcprouter/.DS_Store delete mode 100644 mptcp/.DS_Store delete mode 100644 omr-tracker/.DS_Store diff --git a/.DS_Store b/.DS_Store index 601c6b21a5ac0465114a08bad16d526e4b7a3343..d02c15fe67507710f330aa2f52b69258b29a66df 100644 GIT binary patch delta 193 zcmZp>8A3B;$?g`*wJ*oRO*?lsjsnlcvXW7Z81<^%bI`J_DFo2YA z)^!$UWny5MEa0IuImM%jkzwpJsqt`6*DV$ygsnL9*^WwRjbmdTnSau9}hhyr84=A4ju>`X2HC-04t Unq0udGubF6j&Z~0i8008041wLc>n+a delta 195 zcmZp?$-2(`o2vu+n3xQax>6;I;nY3luiyt_z%)IHm_a<+Czck590f1BowgpfC z00SG-a|f`SBFxU(grww55jDYhfEM^`E^Rek+MMv#6B+@HfJQ(gpb^jr{0#`;J)4O! zk8Cvetj!?75B~l*^wcmL=*zbZHD!%1wRiRDbz;XMCN80_akt+0 zTY0+cu)s;Pti|c1J;e>7 z%p{GGssN&pmYUy6+T)~M{gmFm_(qZz11e71EFXom6hB9lJQAcCa0w~918uks4ieZ_ zi6h4_&p2@@=mAamJeuaC>^J@4EBf%*_&$sM*QxF{->06mm$G@OoWQ*tZa1iAcv+v|K&93A}K7zjgBf45N0((FpEqn{C{=YE${r?_T z)UFxybFQ0ak09*fy{+VSZzwc?fpA97oL`6;MZi7~30K}79P$)o{^4ao=wK&>4|jV0S>#SRgKATN9c z5S{oC5fAOpalRnHjY*k zyEVe?ysb!0X*Lmwct;=dV3KD+%z_nfqc98@2L3k&__te!Arue-1O5B`8f0;l7u(xE zNo~WrRKIN7O}lxu`NA8riC6f=IPdzSXZ-1rUkn2^e#}@rAN#?RXfQcwZSJ$Q@S}7v z62Vb8K$quFqcmibE*qy|F5crwgKanL#zAXqI=#KK)24TKXKgxl9Oq7(?sht}S;M}5 z)7g7?n7n#DeKULeQL;*K6B2Sw;Tas`KwD&dSNRUs8ihYrDon6mM#o|S$J{SASLS;sV0mFb{Krq1f2a1iOtFV+PwhrvX z6#&sfwGbThy9AG+3SEVzM6{p~8Hy-FiMnDC8IF3Y{9J{lL>Uf5T|S7)Ow0OyFbwDnY{7B(ShqkMqqDl8?U2F3g%AZRe1Vc?%K@CRhP4bA`n diff --git a/luci-theme-openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/.DS_Store deleted file mode 100644 index f76438aa166dc9d82a52cd4d127f52b3c9c54b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM&59F25U$R~brKbGSTG2}T)YLz?BbF=2r?x^ucy1Jd+Mu6cWMFvtT6~2fHDAB zSOk_%VYNWSxF~ay(>-g54DA70knBXfZhyu5qGJn&O-)dtlm>=@f%0 za~!vYI$~YpM4>VVrp$rqm6^^^m|Pw0Y^e^cu8?YCfEbu(K;-VL(18>J;4}HV_$pn+ za_NT@X>92F!=$Hk{m*_c3X`;2{lao9`4g)rEvsl1&lDfH9X@nZFC8QeuYXTm-SpCq zuiLjdkEU(UzZ15HyQQ^jJWjnZZug~e7_?F4{@pMR_^`nTagfM)Ts2@>1*@=IDvw6% zwOYl#yfv=aBgb(zD)!dq=6GDN&Ruk_?Cf zRfu2!9wg9*R_3LPF#LeU3|dC_hy`tXcpYSkR3o99zuu#Y@2~&7tlT%xI6}z<0qZbd%jH1^c%jT z-gJ(v&)7dWJd{3X#(zDei^fe~@j1iCkj{T(ii8+Ajts1*n=Xs||N8Rx|Hsiax@Tg5 z82Cd5Sib2t8>lRPS1uB9%G+4>um}-)6NS?mO6mg3H%}C=n9?y8PZ&!APF~)1%pvqW@F(yC}a|IawBe;$_ zB{}O^0OWd)#P20-KT`fwEID2$1NiRd**ObY#2Re;{r&RWQJAEa${(Ja%g-+?3Q-ir zrQ#2_sd{eerQM|Fb-v;3*h`zfwLdErjcm{V5;l4#rImdZr(PI0IyyNF8W8gRYZwQr zS5w_MNc29gSrDQi3MZwtet%=TQkI)LgR<;bE8CySa%XF6Fer%CkJa6y)7I5>|7LJ| zZf!LNm7u4fC>WO+ m9HoGvuVRSBt9T7m3-~1(fR4q?Ab3FNkAS9u24Y~Q4EzOi%Wif6 diff --git a/omr-tracker/.DS_Store b/omr-tracker/.DS_Store deleted file mode 100644 index 2a19d55d361703c3c539663cc5d10e1d2d88ee9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!EO^V5Ve!Eb%H7)REZpY=`Du@)TlimZPS3n4QWw(XsdLW4arKIb(Gx@K^nCD z1QKxJ!YA+p-1q_{zJ?jwiIS#OZxO9#r12Y%XFS=rD?7s&A`I6E zuA{C<&U!Whx!xo3$H~Btl)n;7j{lPZe0Lk{Eel!1I&AU%{q_e@n54DZAD+t>Ha53} zD2dW`>D=w9v7377C~11bQ=Gl>(w=Ya*Gffm+w+gZ&bVFPIZ|=zg>h%7lf$3`A!jFH z9H?3*#$_YS62IjPt7pH$^RqcNQp#pB)jvzHhB_a7#g z(~n;avm8D_Ee|cu;42slj~I39?id;Ew8YphA7hyh~YZZLr7g9Jr%EM^Av z(E)>Q0RRi&)&e&65||?`Iuaf4m;fy;5X(R@Sfn^5rW?IJk|M|`R|8f$|hyh~YUNOK6Ew|N#N3wV8%ERGZD?u+n qQ7|quI8OmXU&RoMS8)YY3-~1(fR4q?Ab3FNkAS9u24Y~X4EzH^h;QTo From c4d86a66155c6dfc9ecf695876df3b62281690a2 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 22 Nov 2020 20:32:17 +0800 Subject: [PATCH 110/289] fix ds --- .DS_Store | Bin 26628 -> 0 bytes luci-app-dsvpn/.DS_Store | Bin 6148 -> 0 bytes luci-app-firewall/.DS_Store | Bin 6148 -> 0 bytes luci-app-glorytun/.DS_Store | Bin 6148 -> 0 bytes luci-app-iperf/.DS_Store | Bin 6148 -> 0 bytes luci-app-mail/.DS_Store | Bin 6148 -> 0 bytes luci-app-mlvpn/.DS_Store | Bin 6148 -> 0 bytes luci-app-mptcp/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-bypass/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-dscp/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-quota/.DS_Store | Bin 6148 -> 0 bytes luci-app-omr-tracker/.DS_Store | Bin 6148 -> 0 bytes luci-app-openmptcprouter/.DS_Store | Bin 8196 -> 0 bytes luci-app-shadowsocks-libev/.DS_Store | Bin 6148 -> 0 bytes luci-app-shutdown/.DS_Store | Bin 6148 -> 0 bytes luci-app-snmpd/.DS_Store | Bin 6148 -> 0 bytes luci-app-status/.DS_Store | Bin 6148 -> 0 bytes luci-app-status/luasrc/.DS_Store | Bin 6148 -> 0 bytes luci-app-status/po/.DS_Store | Bin 6148 -> 0 bytes luci-base/.DS_Store | Bin 6148 -> 0 bytes luci-theme-openmptcprouter/.DS_Store | Bin 8196 -> 0 bytes luci-theme-openmptcprouter/htdocs/.DS_Store | Bin 6148 -> 0 bytes .../htdocs/luci-static/.DS_Store | Bin 8196 -> 0 bytes .../htdocs/luci-static/resources/.DS_Store | Bin 6148 -> 0 bytes .../resources/openmptcprouter/.DS_Store | Bin 6148 -> 0 bytes mptcp/.DS_Store | Bin 6148 -> 0 bytes mptcp/files/.DS_Store | Bin 6148 -> 0 bytes mptcp/files/usr/.DS_Store | Bin 6148 -> 0 bytes mptcp/files/usr/share/.DS_Store | Bin 6148 -> 0 bytes omr-6in4/.DS_Store | Bin 6148 -> 0 bytes omr-tracker/.DS_Store | Bin 6148 -> 0 bytes omr-tracker/files/.DS_Store | Bin 6148 -> 0 bytes openmptcprouter/.DS_Store | Bin 6148 -> 0 bytes v2ray-core/.DS_Store | Bin 6148 -> 0 bytes 34 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 luci-app-dsvpn/.DS_Store delete mode 100644 luci-app-firewall/.DS_Store delete mode 100644 luci-app-glorytun/.DS_Store delete mode 100644 luci-app-iperf/.DS_Store delete mode 100644 luci-app-mail/.DS_Store delete mode 100644 luci-app-mlvpn/.DS_Store delete mode 100644 luci-app-mptcp/.DS_Store delete mode 100644 luci-app-omr-bypass/.DS_Store delete mode 100644 luci-app-omr-dscp/.DS_Store delete mode 100644 luci-app-omr-quota/.DS_Store delete mode 100644 luci-app-omr-tracker/.DS_Store delete mode 100644 luci-app-openmptcprouter/.DS_Store delete mode 100644 luci-app-shadowsocks-libev/.DS_Store delete mode 100644 luci-app-shutdown/.DS_Store delete mode 100644 luci-app-snmpd/.DS_Store delete mode 100644 luci-app-status/.DS_Store delete mode 100644 luci-app-status/luasrc/.DS_Store delete mode 100644 luci-app-status/po/.DS_Store delete mode 100644 luci-base/.DS_Store delete mode 100644 luci-theme-openmptcprouter/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/.DS_Store delete mode 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store delete mode 100644 mptcp/.DS_Store delete mode 100644 mptcp/files/.DS_Store delete mode 100644 mptcp/files/usr/.DS_Store delete mode 100644 mptcp/files/usr/share/.DS_Store delete mode 100644 omr-6in4/.DS_Store delete mode 100644 omr-tracker/.DS_Store delete mode 100644 omr-tracker/files/.DS_Store delete mode 100644 openmptcprouter/.DS_Store delete mode 100644 v2ray-core/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index db9ad6e09fe094e9183e1f4ff81ab43678b5be78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26628 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 diff --git a/luci-app-glorytun/.DS_Store b/luci-app-glorytun/.DS_Store deleted file mode 100644 index 51d4dfddf2f90b2448410eebf51c9a67ba4454ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S=v^3Id6glzRlyQJToK2q_l`NhDI(vIV5~g(#3X0X27^fHP1~@n&am zym1g6iqK57`_}W>(LS#{86tAy)nY_6B%%QZV{(9Li?E$XPZHG}0bSVRmgdFHXfm(L zy60_*U1WgY-98nxqHDUN-uv^HoA$EG^I1{NpdXyQJ|^YU^LgKA@vBe0?B0_pwxEP+ zs^a@|`u?r&=6!f;^M;tRTIbue#d*TDOmWT%zxz1X@h5V%wr;+ck2YV&zRtPL9_PK{ z^O+a}#(*)fD-57!vkVReZ8ips0b`(LfWHqOgE3QV1jDBTQ)mHzDbzu*=3athyke%< z2*Lt!5(<=1r!9t)aOl1IWr~fUgpw)PIkwbo-yF<98I5o|-S2&EXlT#8RHfS5T1=eQ}j>}MD((cVBa8y_yoOptZl&_5)#zj^Gu>I;FI~y&KR>z#hVnF zDYIWPKl`y?LbgjpuGp?;L{lQl;Ec%x!ye;2`^XZFoB>^!ULCZfkRY) zpWQK4w511nrqT2BC%gH&Da&QmED_J{&tH@J?c;V_v;MWF-3;H88%#k7wbaD#PjUSf zAM(Cm^t_>`Zoc_;b1~0?c~Y#i!S5yJnrw!-AzyaY^Yy($&VBiqH>{7j%}fDPz!W$H z1+ZtcWv7BRngXVPDbOpx-vu7Pj*LwH@&c=0}VBdm^uoa`0x8h59FvLAy0CUAo5D}RD5ePEa JU<&-H0-tYwU335d diff --git a/luci-app-mail/.DS_Store b/luci-app-mail/.DS_Store deleted file mode 100644 index 0a303633087c12b7e880e927b24db65be006da7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHRWu5FLk51p!hwNG!cTV%-~rD(sPZ0cb0gMIuK)_dXNq2{;BT#7THFHfh`x zu|pM_sqE*>$4`E-;+lxebiJGqjftp0W6Vy_?Jz_0OoLuVa#_4uCWozh&~`9FcV6F zq141Hh6&~H+n85I^Z`RT8DYjek=eu>iV=4Bt)!DF18T1dr~;`1N8xeI=l|``_y4p= zpHu-=;9n_V@@iI1v7~sm4i?8}twp;>W8*v@uq(kpj$-8UQGAIe2EXM2u#D&f!UNMk N0wRNUs=%Kr@C7H5VEh08 diff --git a/luci-app-mlvpn/.DS_Store b/luci-app-mlvpn/.DS_Store deleted file mode 100644 index 9dcab1943e30f35f2de7af68f4d3b882a2a56f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S=j=G75zoB+4zIqJVUiCNe!zE&xd+C~VmR()$8jgc5NA3OETT-~zna z9XWO!M28|YW6i$xe0H?Ymd8s(JXtQrL@5y^P{C*q!v+z*=s+U1>;u`aaZmH&c08R| zWj%;C!!|M?&u*6rTG9)XXJX7OuGeb;?Y&aebU zR8!S|e-31AZ|~MUKW*!(Z&h#I*ROLWbzy^b|({H Urq~381!6w}o(3C?fj?#78%LXAfB*mh diff --git a/luci-app-mptcp/.DS_Store b/luci-app-mptcp/.DS_Store deleted file mode 100644 index d565ff7e1eb7c7d40d1bd1dfabf07c3eae523907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLJx;?g6n+jBYQ@r#(E}GKL+4P16Z8VmR-!_UT+wz#xj=8hz=%+129{ofBe1aZ zJwFrdrWG4P=)KDRlK11!`4Yu(iO39AlO9o*h}vk3SqI%7<2bj5Wx>P6#*ZVn6LQqJfBnbZcJgvrPPEihLLjkZOF?5 zR)SJa#xrA_z-+<}#dvo3txqSD3u>RP-U|oU(zZ4^vm*P`2Z}3|_0OkQJL3m*LA>d`uP8Il71wH}3 Cb$}ZH diff --git a/luci-app-omr-bypass/.DS_Store b/luci-app-omr-bypass/.DS_Store deleted file mode 100644 index a0f76203d50212a2eb1f5a77570bae5a25d28554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-LJD5T1=eB3c|)+HG+!aBmQgC|F-(DR%*{xUfMZSmp(6Y<&q4A3$vGL3{^m zzu6sQeopMeAtE!q%_l@7B1+(l(H@2k#_Q|@izIRYG=7f--K?%A zvxO_lLAD0AQ2~B-yR@W=a&k0ye#h_q^}=P@eC6hdCl`VEV>CgRtw@9y40af5%DPZDkmQ8U>a<&d`j?Y>Pzl5`KULCM0!NecM$mOH>2<{DW X%M)NKSO-J|rauB+1|3v^KULrptqfzx diff --git a/luci-app-omr-dscp/.DS_Store b/luci-app-omr-dscp/.DS_Store deleted file mode 100644 index 09f07cb6529ebf31afde6d7d111469c01edc3b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHRWu5FLjI1;L{1So#Q5;sBuvOC+RnfYL^VMIuK)_c;k?K!_8t-~uc;0N3D+ z$Aq{kVuva;Q;nZ9A3xkzV+o~azPzc0aYMYU`H-Ty#Js5 zeEyG{^hy;_1^$%+CM~AL1h*9S*1^s3UTfhqI2+fsf?W$Hek(>TZ^cJ&Z-`r-0P}#Y SAR;jRBj9DwK^6E@1wH}N5@Un_ diff --git a/luci-app-omr-quota/.DS_Store b/luci-app-omr-quota/.DS_Store deleted file mode 100644 index cb6676845a40b9db01751775cf5e300e51cb75b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-veG4EBY9f?(*#cmrZ46Kkl_C+Nh0RN6`~BwPe^kHpN&AfA8)9)m~W^PLH~ zricwy$gX@};-9nbOBB~cWX7vyPBbE-49b}7W7#0=XB|i)mP4TNd)(2Yy3VHyS2u%b zHEbgT{OtCqq7_}yJq?~;w!7}HU0Kd6H-|l&Ts$ZB%j@|tX8CJObJKrMPO$|g)R2qc zpOdpMd%y0-Wmnhd)b6|9x-YIX<2otM>F|4qYnj`=uU{{Jd_R7B^5^Vw`!zTDfHJTx44`MTWCsCtRR)v+WuRk#zYiA5SO~TO{ig$q9|3?V%wBNKvjpc@!9uVN z2oJ=BRA5LoGGdsJ4!f1OLa+@O(#gp1VWhH=3B~y8*x&kaGDSdLl>ucSW?(1Wj=29% zexCp1B)wAxl!1T6fJw_~ImVHsw+;@+z1Bi!P!^7B19mC6@U0lJ+=`E&USPL;0W1XD SfUrRHkASB^7iHj28TbTL?_i7o diff --git a/luci-app-omr-tracker/.DS_Store b/luci-app-omr-tracker/.DS_Store deleted file mode 100644 index a88014b86b0df8109413180231af1a6788c84832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHRWu5FLjI1;L_A#L8m9n%=-v;RHouOFt?gC2|CGpEDs&z@E!+0^WE`8aGAk zP=#hH`#JORlV7a3CL%LgFULe9A}Y`rvmHfL! z-~K-D?W*GqHMQUHZO2lcuq|_})8qG&a%DH*>SBGq&&Q6h7vFI1il@AnygoHmKow90 z_C*1l*=)tJp!TYODxeB<3h?*AqA|LNtzh_cpbJ+3U=DXMjQK9XH8!G)*a{*7Gg1na zQWLKjM#|y0G0#P81*M!!V8%R=*~A-)3GDFOkWR)4YOe~Y0;vKA@;Ku2|N7_qe_EtZ zs(>o+uM{wOIV~qxQaoD+i{rD_qTQjfab7Ffm0%E#V&w8se2Nwfe#--(i`WXn1JgeO MK?dzqfj?E?3(^H)q5uE@ diff --git a/luci-app-openmptcprouter/.DS_Store b/luci-app-openmptcprouter/.DS_Store deleted file mode 100644 index 913a413a485d8c45b87cdaea49a23e80ca6d7235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMPm9w)6o1p!npVUjg4+cl9=u4E#&x^&Akdjg?+S zyn0a2-b4_;fF2dZoA?F9ui#1F{4twJTY6I$=arc^nfKo0&F_~ceJKEt`pB^WRsg`j z#&qEjc5{T;S(}lRoGGFv7!S|}f77MymP=bR-g-hKpb^jrXaqC@8i9WS0eogNF%~@c zg;n<&0gb?ai2%DlnAn)ENj(*s-#W14B>?ISPIJLA)&V@ml)5JMRA?TGYl`ZD$WS6n z3?jnOZZdb&HL0gUi*O(!9EdzKkrfKzXU8~`y922St$U4tMqm~JR=a1R3jsJl6ZJd$ zDqX~O_9qt}toXLZ{y^6HA6f&q=LhBT7m`Y64rC7+M&8ID&fl`TbZiIBVC2`E!yD{q zs~L1#a(tCiHySrv*Lt1tcH!71>IKc7*BSEQp3^~>o7a1uL&tSG@*JP9V+(^}Q zp%{kiYv)VmnT_(KWQNvyd81@jE0xJ4XB1(6YuvSmo=d%5 zoM*Xb!G#et!G|HVV{cs;Yp=1Xti^m|tbP33tgVLOxyl-{W>u@4Hp{}Jd9*QFP!`hm z0*wkJ3T>&QVbUI_?Op#(s{dBf7K18I+ae!@w$v6&QpqDhn*mplv^&s&+t5P_J1TYL z1jfgyOThqW!sqckA7#JkPv6jo$Hw5m<&mS~#q*`v3Cc_y5b5(RPi1 zMqnQ!Kr#)xQO6DZ{z;tN3#+wFY&+PPFu$qLJOn#lj-%#36i`Qh7~c6tQ%JF$Z9vD^sY#33>r&E774*BHAtt$QS56m=PNrXW{_7&o;qs zir5fB-&ff${eJxHmne<_nDJ&l0)_wvY=YS_yFDgxX&uXgM~aObV}{l8ZZw(IRny5< z$6r)H?%g34SYwVFo%=VD8=u6hx-6&5dP+ZIcC+2SU3GKjKjt)x_&Kp0f;>xXaElf0 zF-xDL?0q+$&I4cbh{mYucpm$6(s_s+$k3op`1`LmhKo#JgEjBpusJ$wn3aA3D0`h*y z*#wJ#)}woMuyaQMVvlZTymsGE#9SQ2BB1q156$>eqAxY!h+%v={dveM0$Pv09L6zo zoWN|t3B@>e`g4~KQ+U)~6;K6I1rGe*q3r+H-=F`}BK@Zdr~>~=0n;ld<(NwfduwNL vve)KpH*8{(XFawhyl`7Fb7d<&V{=A-E*Hcip!G-(O+N&j4BDvzzpB6okLG)( diff --git a/luci-app-shutdown/.DS_Store b/luci-app-shutdown/.DS_Store deleted file mode 100644 index 88032e645960e14d40043f2b826d69d387c8e70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKu}Z{15S@)dB3fJ{h}9Mr7B*Mg#3L4V!u^2U9eBls4SM#`-Y@Vk#KzV}@T+_? zv&Q6dVkd{p!0bzAXY$yWC6gs0H@ce*i3UWJ!5Nbs3~P+%*?X46$R5ziGp2OAxE_wD zp{#n@7T81u_}y*OoR&1BK)v^uo~+K7p(rMcFhM-K*#9_se|$UZ=gfZ1spjo{!uyXB zswi~#&*AG=yv_Uc@SKz{!Yegp_~u)k>+)POPf9mfYoKM9%iXu<+I+{S%{rUfHs`we zF0W@^GgH76FadBj>#J{=h32mnkG7Q?mt%K<$H zfO*7P5fPZvQlOT)c*Jm8j<}C`dBj>#%gG5do)ei}JfS#YN8C#~xm?jkQ@|AHDzK%u z1MdIlKcD}*MRsQjm;(Pw0hbozVuU5d-r8Fn_gW9Xg0pd6t=N>{LRv9$xfLJ4#Sr&= W0n8)Tiip7MM?hq-!4&vY1wH|o=wNXG diff --git a/luci-app-snmpd/.DS_Store b/luci-app-snmpd/.DS_Store deleted file mode 100644 index c516f663d768d7a61e147261f7530ea7306b1f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHL%}T>S5T1=eB6`SC@UjmeNbvMpYWjS5cQ~0xo`kuKUl)8K$6w z8mi;x=Y0Rm-{(Dk?07>>Re$rX#$ujl=1H;68lStE>*$~#>+`)mb$nfIpL1P2=C!W_ z3vXr$m;xK40QPLQY*)~FQ@|831v&-z{ov6U3&mD2ygJZ@BLFakI~c|}4}e~=P;3Pe zfjKD!N~zN$hLdvmz2+5)t)P^X)5C{TW~V0<7uYes59#CzLF-KcQy^AgOD=QX|4)BD z|HnmkWeS)A|4IRumXmUfCF$NeSRC)Q9_<2+jq_T;t^|Xy6(g6oV*cMI82p|Gz(TPV Rga>9n1cD6KnF4>Rz$bfdVp{+J diff --git a/luci-app-status/.DS_Store b/luci-app-status/.DS_Store deleted file mode 100644 index 902feabedcd348c3bbcc2205874151a014c59193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKKX21O6n~eR^b&-cp;9|AcwviB4I*l#BDrZ8*pQ510MyuV)L628QS1;w2=c;b zKy*NS0wxA#HWnE928fBzz`H+5d`T-dgsOYh-S7PV+&lkXeAfd2(jJEnKm!0MHjY*u zyK{uwd0Uf;(rhCVF-H%wV3G}km<4OzMqwB*4E%2l@Nc&Y1IQr+2Kx8=H5kTGmhbKT zAe9a4N_CUcI;~%;Kl27`;^lrm&f5Oy34eOv=Yv3vA2Jp%#(wZ9>Q7D@+s7=;{V45^ zL~s=L(dFsmC=J=9&Bke%iFrI}ptMG7Cym|d^w$1<)4p>sYuZ!Cac(#5gH~%ctI?es z&fWXn+nj)W}>agmQ!2-3wgI@v3QsK5}Iwl+BWj4?uAUem{|@ADsrvMtxLYSY#LVht7+ zn&Drr=OS-0*TPoL_v`v1U&+4Ad7fR*Yva^P)aOF4&J_j?1BL;^fMS5}4>mTAuEIj1 z*gCKiR{%r{)k1L0?-D%5R_H1$B%%d{$WTNXO4JpD$Z*u#%Fk6;NR;6~L}r{vWhUx| zLPU1d+rk})E7A0Z0mFdKz=nKm@bmxP#rJDa&t=Df<4hK;xBeZ{w25B-Z zwzt2rwRPvl%?-|7?%r|V1U*>>MOci6?J$2uPtU@l7n$~RDbuHH@1Qq5zE7{Q@IB9iJWFMEhIY!)fpbW3vn^M3vg!n9C+K^7I{E2Ix%;`E zlsdLAe@(<9`waQ|)2U;BBOHfaAu-E@-&&!ZY$}!k%fR1Zfc6K0h0r%xX;fPWR_Y3X z=%88&w&^ZGF~Xp4u+oSY6sAKFbtp4e45q_TFN~jWu+pf*fvJ(PA2TvDHx#BuN4-$) zzQB*s(ug8o6Mg2dhr07@%5BqS2BFy)6>7!gxHih+sevneTQ zBqjvNmVEExvoFrOD2|DUC-?I)(U6D|s9K@~O5Z#=y!i%L^Ic;4<+lvy^*%NbUa$Jf#52dhh_Gsp{+B^Qp>&rex`I%F<*Oq)FCl_bH8E^*vG6SgDBFVm@ zkIsNI;0&x8kncl)3Z{m&V*GSqh%ErH4|5dErI(PHV3-=#idccLh5|K|t;Jvshdr2I zYFI03II%S!YHMlyFH) z0b|LY+gW>8H^uoZBD#FsEJWra(!vep$->lZ-+W?CWoAINGww=1IM=?vO|nlDR@=xR zWqZF^{it`oFI~6ZmNoL)m(S;>-@RV%Yx=S|yEi->p7(M3cCu7}3Qz$mKn4Dv0_fRh z?PVY%6`%rC;9CLvJ|wtdt~dtzrvt%90HFQGyW!bq31Bh;m@AHfU|<@hz$n!^VrZ0u zPc<)B90Q|V)NjT)^=7RTiu&!~lc$U3Kt?J+1&$TCh~?b+{|)@i{C`};6&0WYe@X$J zb*pZPSE{{r@^aQ|6Z{swH{^Ocg12Izw_+@;6<;0XC40txt~dsIIe0Gz@<+gQp;3X~ GP~Z!*w<*H_ diff --git a/luci-theme-openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/.DS_Store deleted file mode 100644 index 1619033377546152d8a6c0f7e8b3c956f00c75db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMJCD;q5T3mY!3jd7IEe^^*>Sj7=Xj&oA%YN; z9-SztprfKfH2eZOXeep<3;Y6@eJFVI5J*VqPRvBR-+Fgu*ZX~ropAtwH3oqLPzC@C zi@?$;tQMFU7iG>?bk76eel4`jxG$=1$~KT2|32o-W>ZJACM-UOGq`UjME*y5XfA zU$<{@9!=Yxe>-dscS~#AJWjnZZuezy7_`yl-kmTG_^`nTagfM)Ts2@>1*@=IDvw6% zwOYl#yfv=aBgb(zD)!dq=6GDN&R%q`?Cfmpq=ZtfMYGrSDx`HxJI5d+7OfmL`tpzsgbxKM0cdwH@iEt_B?rayZ|8Df0 zvHe2p^wJKamq~AO)LeP0vm#8g-pB+eaSvS%UL{$qCv82>;@qqg*a<1?vVPQDn@%5Y zZ@1LromopwJ|AF_gfAuXs(#uq=dm4`GHI0mjWuxPtYs{hZb z@Bi0>T+cD!82GOk5VcOwX=6%UTj!FaTB}fxQAxZAfPR3hUE#1^5th^ifsObA0aBqJE0YU9LeEZIIQu^S)+`9rY4 z#wS29GqEADBSsd!03QI}{ZSP+E*1=k!h6!)?|k=uzPsO@eR&Q5uue9x0a^fHVUpNf z#jM0+yG#qVWNOYMGUNk9kU$E3%ts5}R6z=m0;B*bKnjooe}e*eW=pe9IQMlc<)i>9 z@Lwt*-wzy%AbYPke%=FAmgu+zs$m7Z#n4^($Qh*d#R6xe=7eHXd?n7LN-vwkC%lk0e2}R!v zg@>N<;kt?G>UU*Ws$_eUabnmXyd(_9>H7L7wzOP3b9TkD8dl?6W7i#uiJSJ)Y~1OM z9>}XZy>#fA@?9aqqjJx?7xjPwryW)^X<*e*{p6|ykg(j*^eGSnLeF8d!Z%<%)Dz*prXC3 zo_2U(yL}NQipW;KR5K#c?HZx1=Z`L5diVCdl)7SZA~E<4Rx+F)9hZZw=;zQK#i57~ z&{L{X#}7O{jB(>+SnA92v2F4iz2>(`3FBYg8YNRLYzNrgD3@@43%vUL?d!)kY73Oy zZ+_W-?pauBe9X&xKDNBlOD{Ax=orj3swV?8bqXWW`H#Agkpiblfn`0|mW=;zpZxv* zG);-dN(ztyzo-DKb=__UN$ONDA*99<>HF_>$_ R8Z`P4pk$zo6!@bG`~aTH7_$HX diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/resources/.DS_Store b/luci-theme-openmptcprouter/htdocs/luci-static/resources/.DS_Store deleted file mode 100644 index 3ac84a3eeb4a5c4f9124934866588adf14e24942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2G~`5T0!V-2|cLfYcuM!Yz~0GYIHJVf94rVJy1)u}z;k~w~2zyCdUFe-AB`%{o7aZzq=er8L{jVo7I zIB)UR_0|h-AV*&5msQdAhtH_C@0WwX#E+#+e#Cz8B#uT0?Hju?EB!c&hKd}A5e|9& zG|oaf>dGn$3pJ0YJ2-Fh=0SUXJifEN-4XY8CLJ+$9OrIF>}+jKCQZI}(|NFWn7(>F zelt0Ft7HL&Tcom8gXi!LgE^ulM~>H*X|5^v&*n2y+3Ojh`0X!eUr#@Lqz^SGPb$Md zVC949r*r8c=j1u|hFK!BBOH0I3bCv$Q~@JBzqZhLG0Cv*+g8r9Z; zg}MSDHn3S4#`IG_9AVHkSZl-{G^VMDn##--gK0Xp3p36&SZmaDVCM3{OlD?oC`@I? z`Gpz|%++X1tAJJDq5{jh+NSgW(Xa3S7fH5e6|f5YR|>F3&+B#ZmCV^X^Kx|73iLyC qG8$KFR1_@CajXJ5ir3MVVV|G?(KT3W#1=IBBcNokg;ijo3Va95fUe~L diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store b/luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/.DS_Store deleted file mode 100644 index edc8e149861ee38cdd85f8c8d56e18f2407b4b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!EO^V5FMwXbpnVSklGs-h+BlZAgcC&w1jZz4QUY^0JXc_C|PND9c4F-+K_5L zfFEc-gEJ>?d;y=qC%}w7tyls=>H(q3BaPp9JY%n)Eqe_BqBo5_fDQmiRKi9Ji{A*f zlP*bvJ!^=<^f7>9H`NDGs-vZ7=lCBPptW0t1TqL=2=(=&P4N`CZY`+UedKQ#nIW2nO}=_>*;A87p9-UHb~i$t-a31eEx8IyQ?1WEV^p$dETS0 z+S%G#ELw8?zV~EzKRY^}zh9i3nrVQ*4Qu2U<2jt6QJZ8s^nwGOjcvf4Z@;!@y5DCK zWf;Rm&QjTKu87qs}f+B1xqD>Y2#1J+e z{fgs!#>%2i2f>dI!6OTPp$IcN_ODDh2;ZVB9RrSmIs+@V+M)aZ`Jdna^(0qw3^)d^ z6a%8!5Bfcv65p*$lcT#jtl)p zI`t#EWy_YS=#<~d9mxcC-5{IM7I(n$9glZB>q#Jej4|GvL@r}h#+U#_EIBazL2w;) zMM~DQ1<3UtSvbu`VWPs7SaSTG4B)%lWTz}<3G1=N_jetRk~qs7jT>ItC~s~(5uze0 zJC%?AKu!HT$R}Ad7{ABan;;*A);>`xxwnJxZQPr7smE>0sg zZK_EcWqKdqEC}HUr&HaX&0Zcf>T>UJUY9esaqyxp5BK-yb4NUT?!G$i4!@ku&gWk* z46__QK`l=$-oZC879KI_yZ$FN9O-4=zg%7&s&?Ccz@ql+XKVQ5>ge}~=#hxgV6nn? zEVNMnvp-G~mG;4V_lq%tgcu+Oh=DaSV2>ZMy~dhUiWndU{tX83e2}1sp2fnTK008~ zEdXE{+*-iKUIKHZMbBbk5LQ6ANd+{i+_o6pq=R4DIL~5X(4;eNn-6X)bK9YCT^;t9 zI-GIOAdSQTF|f?QhM89J{(t>&|G%6>Gh%=k_^%k?<+k5$!Xw$cb>-pku9cu&P!x@1o z;00*7f>)qJqUQ~G0UiKmb|;ra36u!IjI{fW=Wny0t=)_eLUzWnCqz>SpM(5( z^y65Q3RxO}5^H$Du^9~4;@I%_GJx-{Dte+2$LY!P`+In{@C;118>J=!i`x0{-n)MG z>CUn@{*8CoU#@CDj;a`oT#TYgKBTIjqhXrlMZ5h~R;slN7cVK*P>m~%=Rx00f+8%& zc_$n_#is{h(T_-fWK4RlhtcDtH#uxxyKAx{OtRj{CMR(ZLY_TIve-;IW}L;jtrIwh zQgu~7Y;I4dxAxjCy|X`S>8aP=yV=tFySuYlU2Wa)4(=ZfUY<^0&0fESZG%Yo+^t+C zoWna%XnQMkO7UjlS*G*$kMG~Ud?Y$8Ed#TlbKSc_r_@k%zTS&ql%*y+0n7Z?p_hdj zUC?Fi<7O&!M7*@cpQ33P` TONU?q;XeYF2A-IKKgz&Q)!Kz{ diff --git a/mptcp/files/usr/.DS_Store b/mptcp/files/usr/.DS_Store deleted file mode 100644 index 5d49eab18809e4247b991da99b7a0ffd73c85904..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPjAyO6n}0zaEm5-K-wfOzQC!67R0n2CS|2a<2ET1JFsa>NVP^v;;Kohwo;T6 zw|#)|9rzNvP1+st0e0sj@Sg2$iCQ=!#Qdb^-^=@B$G=#13;?V<4mto$0N|*El{z*H zgyN)gQZb$eBBMS!?gtqU=kl!M-(`TlT@`!?A&HKQ-*0*QE)vUL&yS>!9$X0dm$S2r ztztCzLv%PO_DbsvmLP=zcrb##KS_tC=SzPWg=yAqe`l3yZRx>7&Ktb3+&FLta^hxQ zHcq?V=si8{c-g==_O6uCt?l{m!v5s2`Q)`sGA~T}BUKy*eN5Tk3zI-jx^kQZsp`ko z0nY2Ze%M@{PG7FKTjJHmtR<$M_WFyK*jQVe&FXyRS!eU@QG9Yb{WSZ0PIJH&k4s+3 zV}m#F6^+6a%e4M@T8wIm`g|TDykCn Y3o;NLgSkfZpx7S)MT2cD1Amo)U)UjrrvLx| diff --git a/mptcp/files/usr/share/.DS_Store b/mptcp/files/usr/share/.DS_Store deleted file mode 100644 index 509554931aaada76cda32135e3714f4be3f2e967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-piJ5Z<*NvUU{31(FffHtAgWh=QPqbU02yhjdX=BoW+k7Cz~GYuRV4#Bp>l zkpf`}5su_f`lY+vC_1qAr9`popa^6n_zn zqb^8^JS%__`xp(P)I?CbiUtd<*|Cfa;I}IaBl=<(P3FH}nvC*R>spq|l_x7tm8z-Q z^V*l7XC^@&=HpR29Dc&uUYPeHvfmq%-q~UFA?Z%`>#J`~mWN5!9opn1?n0B#ACoLL zleQUW@yPZQxPVesRo$&}PP^29l`q#F( zkiJ7MnE__tJ_BV}t>gXw?%(hK`$=452AF~WiUC>a1f4c4iSE{g#o=A6K@UJtuwCKs lE(HvG6+>IRiq}A`fM25l=o1zW!2`lS0+t3Yn1M%S;5X<>YmWc` diff --git a/omr-6in4/.DS_Store b/omr-6in4/.DS_Store deleted file mode 100644 index 71502e3bf61a58f6efd69a81c0ac5b9caaa5836c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~O-chn5QVE^gn?`#Zrs^NFgKWl@dUYm#P|m@OhDZCCMVJpcrxGXD#eKd?t(}a zbie+o>Y4dqy1PU~S1;Rz$XrA!6soc@VjLcwnz-{6s%4Gm_F=KU?YrH`GJkW3?|v%x z@+7U?$-(i2m(Ris046k z)2f+i)IlH!1c5IC+#eDOwRX*>W$QpyQUEBg(Z$eaF2R`OTDxXb%)rz_p%$v1VyJ~< zJh@-(noTWS)RPbOCx0d{TAq&eQ*jrqO`{G1L10MW#JY2y|JV3sMw9$uNc4h05cp>V zblR+&6+X(()*qk8vo@jJpwQ@-*?^%vxCEfXedMA{+I(Ugezj{h4h9}S4cj;NVQX203lnH}!C%PvC*p_R5*CL~V?VW1LISs1<$xh{1`QpPh5 zNYx&Z+liWPAl#u?bo@>ROWY%dy;4?!c~# zjvYI3JE}OXJvrNQ;<{_>Z6SgW+i`dNTIVo7vo6Be@xxk6CHr0tLiTt4&=Z}CXop^; z_ObN>V_B9x%on=dh2>I_FRt{8yjw0U&lma1(o(ONWwUeT)y<>E`9=4#cXh3qrSJ(V znKt+iH(>NVVsKivk42-Ymv3JNR~w>QH6Jj0oq1Ys+&!#)j_`hnXx95H+(UYQ{WH52 z1|mEK@B1&75h%z2GJp(>kO6c2u*nhD#8SurGVnJTkmmyjm1r4EG^(Qm2Gs%pX27ik zY}rf59B$Aum}rC*5UNuFbt*M22G!}{=O)fFm}u1Lgqr4qn#$C4C{$I4{kaM!)Y6C} zGJp&WGLY8OyuAN6zVH7BlW>L%AOru30h+1W)e1b4xm$-GPTsW~^axanj7v0rq=2EW hVu+PjaRF2b__;IyErW?h@PObS0Yw82$iPS$cmsMeaH{|S diff --git a/omr-tracker/files/.DS_Store b/omr-tracker/files/.DS_Store deleted file mode 100644 index bfad9b5b9a76ef5a205f75472dfe1637fbb8b6aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJCD;q5Z+A!Y=RIekT_9oLzf~x;B;3Y854x)kj$e1bg|FT#ggNV5{C#vkSj`h zXlQBfH=K0c{Q~|DGrMznD1j0on2~0`*?H`GKU=$AA%qMji6=x;2%$g`D|KkL2*y!2 zq(Ytspu{n}@W>2?8+q*bdl|rYR~4~HMV=k6zQ5<+mXU$!bmGj!;8CZ+r^mNW&K|5r zlix&#{nb&sPzLk$L?Mpi>3B$^p2x#19T)BP4_T?!E?vH&R6{kcHQt1MGYyNVn2dvH z^a^`VqoN;^{mhtbVMpXsP0m;q+s|7HO92Mvno6P6C`)&Y&Z0sz*)Z3S$+OJI#A^a)Fc5CM^{6wsAQ zx?)II4t`B}K4Iz5l?zFi4@omix}iurJB+Vwx{$s@ZkYjQV4Z=g>o)QHfAs77|9TPk zm;q+spJG7PI$X`4=oBdc8Mj&8^uneHVyJ4 zaD~^PPtY4L0I$Q$?h+*ph+EWFGt%rgJ3F%zf3|irj4|FE1P#Wjj4=Uvz0REG;d+5TYU~ zE0trnqlRwgWrMWo^*`h6(91f$wU3mFC${H*jKX2N`s#y9GA~NPzD|yU5JJ9uijqJL zn`)2*souvm3qq7dxm{fwjW&0;YI0-e?YJgKdmHtd+}hk8kIUlqo5s6?lkWE)qo3pR zOT#ROPf*LM#Rs?oW9kv(vxa-Bx;?$jZ!cz7yQr7QB z=2&Q|{x`Ru#40%h@53*~2ohp|7$61~$bdb5#LETNq*BBHG4O9Nfaik*MRY9Y2KCVa zgKhx;OW@W5Hue&jBP}`>bAzw~!c8imN#(Z1;3ggX(#AO!bAu+Gaoc=wTbbJqh3o3D zztrK3I|gYa28e-K28w1{#ruE%>HdEc)y=kOYO0#D|9sZxwKxDy?! zAbFMgB%KGHq(nqlkK3ilLPQ!gqEeXznhrmZ<_e+hjJtL z(#f^d->;`nwYMMIcGC?TSeuKJ=UM;qdiFJ9`$NR;?h`}$e~7|9LxO=|AQ%V+_JaZ3 z*_7tUF#2F17zhSF7~uJk(1_V_G%QC4x>5oF`HU_CowWpWl4Eup4dH>Pr2;Kgy~I#U zhdp^*b{q{YUDS&Y^_Aa?7cHw}{#3$6vtjhXKrm1A-jh6hfj4 I27ZBoH_DPKY5)KL From 1b6ddbdee3f14fa235e16f13a38a57798da7f480 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 22 Nov 2020 20:35:00 +0800 Subject: [PATCH 111/289] fix --- .DS_Store | Bin 26628 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index d02c15fe67507710f330aa2f52b69258b29a66df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26628 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 Date: Mon, 16 Nov 2020 01:40:44 +0000 Subject: [PATCH 112/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (240 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index d24b7169d..29b08d3cb 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-11-09 14:31+0000\n" +"PO-Revision-Date: 2020-11-16 04:25+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -1042,7 +1042,7 @@ msgstr "mtu :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 msgid "multipath:" -msgstr "多路径:" +msgstr "多路聚合:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 msgid "operator:" @@ -1062,7 +1062,7 @@ msgstr "漫游:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "state:" -msgstr "位置:" +msgstr "状态:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 From 72b8e2080fafc3ec7217cd27100d9ef6fb07e3bd Mon Sep 17 00:00:00 2001 From: antrouter Date: Mon, 16 Nov 2020 01:40:44 +0000 Subject: [PATCH 113/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (240 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index d24b7169d..29b08d3cb 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-11-09 14:31+0000\n" +"PO-Revision-Date: 2020-11-16 04:25+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -1042,7 +1042,7 @@ msgstr "mtu :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 msgid "multipath:" -msgstr "多路径:" +msgstr "多路聚合:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 msgid "operator:" @@ -1062,7 +1062,7 @@ msgstr "漫游:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "state:" -msgstr "位置:" +msgstr "状态:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 From 937872e05c38fd9afdb751b82364f2eb7dcaa848 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 15:51:31 +0100 Subject: [PATCH 114/289] Menu name via setting and typo fix --- .../luasrc/controller/openmptcprouter.lua | 38 ++++++++++--------- .../luasrc/view/openmptcprouter/backup.htm | 4 +- .../luasrc/view/openmptcprouter/settings.htm | 6 ++- .../luasrc/view/openmptcprouter/wanstatus.htm | 8 +++- .../luasrc/view/openmptcprouter/wizard.htm | 6 +-- .../root/etc/uci-defaults/openmptcprouter | 6 +++ 6 files changed, 42 insertions(+), 26 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 9af857553..b01d7a126 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -8,20 +8,19 @@ local ipc = require "luci.ip" module("luci.controller.openmptcprouter", package.seeall) function index() --- entry({"admin", "openmptcprouter"}, firstchild(), _("OpenMPTCProuter"), 19).index = true --- entry({"admin", "openmptcprouter", "wizard"}, template("openmptcprouter/wizard"), _("Wizard"), 1).leaf = true --- entry({"admin", "openmptcprouter", "wizard_add"}, post("wizard_add")).leaf = true - entry({"admin", "system", "openmptcprouter"}, alias("admin", "system", "openmptcprouter", "wizard"), _("OpenMPTCProuter"), 1) - entry({"admin", "system", "openmptcprouter", "wizard"}, template("openmptcprouter/wizard"), _("Settings Wizard"), 1) - entry({"admin", "system", "openmptcprouter", "wizard_add"}, post("wizard_add")) - entry({"admin", "system", "openmptcprouter", "status"}, template("openmptcprouter/wanstatus"), _("Status"), 2).leaf = true - entry({"admin", "system", "openmptcprouter", "interfaces_status"}, call("interfaces_status")).leaf = true - entry({"admin", "system", "openmptcprouter", "settings"}, template("openmptcprouter/settings"), _("Advanced Settings"), 3).leaf = true - entry({"admin", "system", "openmptcprouter", "settings_add"}, post("settings_add")) - entry({"admin", "system", "openmptcprouter", "update_vps"}, post("update_vps")) - entry({"admin", "system", "openmptcprouter", "backup"}, template("openmptcprouter/backup"), _("Backup on server"), 3).leaf = true - entry({"admin", "system", "openmptcprouter", "backupgr"}, post("backupgr")) - entry({"admin", "system", "openmptcprouter", "debug"}, template("openmptcprouter/debug"), _("Show all settings"), 5).leaf = true + local ucic = luci.model.uci.cursor() + menuentry = ucic:get("openmptcprouter","settings","menu") pr "OpenMPTCProuter" + entry({"admin", "system", menuentry:lower()}, alias("admin", "system", menuentry:lower(), "wizard"), _(menuentry), 1) + entry({"admin", "system", menuentry:lower(), "wizard"}, template("openmptcprouter/wizard"), _("Settings Wizard"), 1) + entry({"admin", "system", menuentry:lower(), "wizard_add"}, post("wizard_add")) + entry({"admin", "system", menuentry:lower(), "status"}, template("openmptcprouter/wanstatus"), _("Status"), 2).leaf = true + entry({"admin", "system", menuentry:lower(), "interfaces_status"}, call("interfaces_status")).leaf = true + entry({"admin", "system", menuentry:lower(), "settings"}, template("openmptcprouter/settings"), _("Advanced Settings"), 3).leaf = true + entry({"admin", "system", menuentry:lower(), "settings_add"}, post("settings_add")) + entry({"admin", "system", menuentry:lower(), "update_vps"}, post("update_vps")) + entry({"admin", "system", menuentry:lower(), "backup"}, template("openmptcprouter/backup"), _("Backup on server"), 3).leaf = true + entry({"admin", "system", menuentry:lower(), "backupgr"}, post("backupgr")) + entry({"admin", "system", menuentry:lower(), "debug"}, template("openmptcprouter/debug"), _("Show all settings"), 5).leaf = true end function interface_from_device(dev) @@ -730,6 +729,7 @@ function wizard_add() ucic:commit("openmptcprouter") -- Restart all + menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" if gostatus == true then luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") @@ -751,9 +751,9 @@ function wizard_add() luci.sys.call("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) + luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/status")) else - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/wizard")) + luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/wizard")) end return end @@ -914,7 +914,8 @@ function settings_add() luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") -- Done, redirect - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/settings")) + menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" + luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/settings")) return end @@ -937,7 +938,8 @@ function backupgr() if send_backup ~= "" then luci.sys.call("/etc/init.d/openmptcprouter-vps backup_send >/dev/null 2>/dev/null") end - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/backup")) + menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" + luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/backup")) return end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm index 174e7cda1..f7ebf5bb0 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm @@ -1,9 +1,11 @@ <%+header%> <% luci.sys.call("/etc/init.d/openmptcprouter-vps backup_list >/dev/null 2>/dev/null") +local ucic = luci.model.uci.cursor() +menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" %> <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> -
+

<%:Backup on server%>

diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index da7e9f494..fbc61a7a9 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -3,6 +3,8 @@ <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> <% local latest_omr_version=luci.model.uci.cursor():get("openmptcprouter","latest_versions","vps") + local ucic = luci.model.uci.cursor() + menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" omr_test = false uci:foreach("openmptcprouter","server", function(s) servername = s[".name"] @@ -13,7 +15,7 @@ end) if omr_test == true then %> - +

<%:Update VPS%>

@@ -34,7 +36,7 @@ %>
- +

<%:Advanced Settings%>

diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index e02083b86..f4836fecf 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -31,6 +31,10 @@ -- * Many tests -%> <%+header%> +<% +local ucic = luci.model.uci.cursor() +menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" +%> @@ -48,7 +52,7 @@ } } function formatBytes(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]} - XHR.poll(20, '<%=build_url("admin/system/openmptcprouter/interfaces_status")%>', null, + XHR.poll(20, '<%=build_url("admin/system/" .. menuentry:lower() .. "/interfaces_status")%>', null, function(x, mArray) { var status = document.getElementById('openmptcprouter_status'); @@ -218,7 +222,7 @@ temp += ''; temp += '
'; temp += ''; - temp += '
'; + temp += ''; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; var equipmentIcon = ''; content = ""; diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index e044221e0..2fb57a315 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -7,7 +7,7 @@ local sys = require "luci.sys" local ut = require "luci.util" local ifaces = sys.net:devices() - + menuentry = uci:get("openmptcprouter","settings","menu") or "openmptcprouter" function device_notvirtual(dev) for _, iface in ipairs(net:get_networks()) do local ifacen = iface:name() @@ -35,7 +35,7 @@ } <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> - +

<%:Wizard%>

@@ -470,7 +470,7 @@
diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 9fae15302..24cbccb20 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -107,6 +107,12 @@ if [ "$(uci -q get openmptcprouter.settings.scaling_governor)" = "" ]; then commit openmptcprouter EOF fi +if [ "$(uci -q get openmptcprouter.settings.menu)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set openmptcprouter.settings.menu='OpenMPTCProuter' + commit openmptcprouter + EOF +fi sed -i 's/net.ipv4.tcp_retries2=3$/net.ipv4.tcp_retries2=15/' /etc/sysctl.d/zzz_openmptcprouter.conf From db9577ba164505ed8c1efc644916ef3878530644 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 15:51:56 +0100 Subject: [PATCH 115/289] rename interface only if not bridge or tunnel --- luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename index 0928e0140..ad256bae9 100644 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -14,6 +14,10 @@ _set_intf_name() { config_get device $intfname device config_get modalias $intfname modalias config_get ifname $intfname ifname + config_get type $intfname ifname + if [ "$type" = "tunnel" ] || [ "$type" = "bridge" ]; then + return + fi [ -n "$modalias" ] && { if [ -f /sys/class/net/${INTERFACE}/device/uevent ]; then chk_modalias=$MODALIAS From 6364c3675030aa6b01d11e5aa8e661d03a36265b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 15:52:37 +0100 Subject: [PATCH 116/289] Add another IP check for proxy --- luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter | 3 +++ 1 file changed, 3 insertions(+) diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 67a4160bd..5df98b004 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -703,6 +703,9 @@ function interfaces_status() local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") if mArray.openmptcprouter["external_check"] ~= false then mArray.openmptcprouter["ss_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website)) + if mArray.openmptcprouter["ss_addr"] == "" then + mArray.openmptcprouter["ss_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.co")) + end --mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com") end end From 0799528687691f28c85a321cc6d7d2b54d24953b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 17:20:27 +0100 Subject: [PATCH 117/289] Fix MPTCP init script --- mptcp/files/etc/init.d/mptcp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 57e4fa63d..95c9a4fb9 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -470,7 +470,7 @@ reload_service() { return 0 } -service_triggers_load_interface() { is_supported_interface "$1" && ifaces="${ifaces}${1} "; } +service_triggers_load_interface() { ifaces="${ifaces}${1} "; } service_triggers() { local ifaces n From 5a8bad2672de3ac033c951c47ea666f4b230d855 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 18:18:57 +0100 Subject: [PATCH 118/289] Fix typo --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b01d7a126..3a07d144d 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -9,7 +9,7 @@ module("luci.controller.openmptcprouter", package.seeall) function index() local ucic = luci.model.uci.cursor() - menuentry = ucic:get("openmptcprouter","settings","menu") pr "OpenMPTCProuter" + menuentry = ucic:get("openmptcprouter","settings","menu") or "OpenMPTCProuter" entry({"admin", "system", menuentry:lower()}, alias("admin", "system", menuentry:lower(), "wizard"), _(menuentry), 1) entry({"admin", "system", menuentry:lower(), "wizard"}, template("openmptcprouter/wizard"), _("Settings Wizard"), 1) entry({"admin", "system", menuentry:lower(), "wizard_add"}, post("wizard_add")) From 0283885db41c3805364f0263ca2f6ab09770a93d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 17:20:27 +0100 Subject: [PATCH 119/289] Fix MPTCP init script --- mptcp/files/etc/init.d/mptcp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 57e4fa63d..95c9a4fb9 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -470,7 +470,7 @@ reload_service() { return 0 } -service_triggers_load_interface() { is_supported_interface "$1" && ifaces="${ifaces}${1} "; } +service_triggers_load_interface() { ifaces="${ifaces}${1} "; } service_triggers() { local ifaces n From 8186a375b9ee3be3511595ea424b7cd9c49b247e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 22 Nov 2020 18:18:57 +0100 Subject: [PATCH 120/289] Fix typo --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b01d7a126..3a07d144d 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -9,7 +9,7 @@ module("luci.controller.openmptcprouter", package.seeall) function index() local ucic = luci.model.uci.cursor() - menuentry = ucic:get("openmptcprouter","settings","menu") pr "OpenMPTCProuter" + menuentry = ucic:get("openmptcprouter","settings","menu") or "OpenMPTCProuter" entry({"admin", "system", menuentry:lower()}, alias("admin", "system", menuentry:lower(), "wizard"), _(menuentry), 1) entry({"admin", "system", menuentry:lower(), "wizard"}, template("openmptcprouter/wizard"), _("Settings Wizard"), 1) entry({"admin", "system", menuentry:lower(), "wizard_add"}, post("wizard_add")) From 24eafaf6939bec93a4ba1611bfced81df932ec68 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:19:04 +0100 Subject: [PATCH 121/289] Fix omr-test-speed, bind it to an interface if requested --- openmptcprouter/files/bin/omr-test-speed | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index fb433b625..b01279773 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -29,6 +29,6 @@ else domain=$(echo $HOST | awk -F/ '{print $3}') hostip=$(dig +nocmd +noall +answer A $domain | grep -v CNAME | awk '{print $5}' | tr -d "\n") ipset add ss_rules_dst_bypass_all $hostip - curl -4 $HOST >/dev/null || echo + curl -4 --interface $INTERFACE $HOST >/dev/null || echo ipset del ss_rules_dst_bypass_all $hostip fi From d6012f881b7cf62a21189e2f12e3dc731b80f02c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:19:49 +0100 Subject: [PATCH 122/289] Fix omr-iperf use with arguments --- openmptcprouter/files/bin/omr-iperf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/bin/omr-iperf b/openmptcprouter/files/bin/omr-iperf index aec04c761..dcacabcae 100755 --- a/openmptcprouter/files/bin/omr-iperf +++ b/openmptcprouter/files/bin/omr-iperf @@ -1,5 +1,6 @@ #!/bin/sh SERVER=$1 +shift [ -z "$SERVER" ] && SERVER="vps" KEY=$(uci -q get iperf.$SERVER.key) USER=$(uci -q get iperf.$SERVER.user) @@ -9,7 +10,7 @@ PORTS=$(uci -q get iperf.$SERVER.ports | sed 's/,/ /g') PORT="${PORTS%% *}" echo $KEY | base64 -d > /tmp/iperf.pem if [ -n "$PASSWORD" ] && [ -n "$USER" ] && [ -n "$KEY" ]; then - IPERF3_PASSWORD=$PASSWORD iperf3 --username $USER --rsa-public-key-path /tmp/iperf.pem -c $HOST -p $PORT ${@:2} + IPERF3_PASSWORD=$PASSWORD iperf3 --username $USER --rsa-public-key-path /tmp/iperf.pem -c $HOST -p $PORT ${@} else - iperf3 -c $HOST -p $PORT ${@:2} + iperf3 -c $HOST -p $PORT ${@} fi From c9e66e4d0c974a3f0d9459c66dda0696dffc9d04 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:20:14 +0100 Subject: [PATCH 123/289] Commit changes for system --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 67bd16809..2308efa62 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -17,6 +17,7 @@ EOF uci -q set openmptcprouter.settings.scaling_min_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") uci -q set openmptcprouter.settings.scaling_max_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") uci -q set openmptcprouter.settings.scaling_governor='performance' + uci -q commit openmptcprouter } exit 0 \ No newline at end of file From fb145bf53e5c13f1e240e0fa1d890c7856404a15 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:19:04 +0100 Subject: [PATCH 124/289] Fix omr-test-speed, bind it to an interface if requested --- openmptcprouter/files/bin/omr-test-speed | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index fb433b625..b01279773 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -29,6 +29,6 @@ else domain=$(echo $HOST | awk -F/ '{print $3}') hostip=$(dig +nocmd +noall +answer A $domain | grep -v CNAME | awk '{print $5}' | tr -d "\n") ipset add ss_rules_dst_bypass_all $hostip - curl -4 $HOST >/dev/null || echo + curl -4 --interface $INTERFACE $HOST >/dev/null || echo ipset del ss_rules_dst_bypass_all $hostip fi From f3937d0b27f71a08e5f5713012132890b0a00519 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:19:49 +0100 Subject: [PATCH 125/289] Fix omr-iperf use with arguments --- openmptcprouter/files/bin/omr-iperf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/bin/omr-iperf b/openmptcprouter/files/bin/omr-iperf index aec04c761..dcacabcae 100755 --- a/openmptcprouter/files/bin/omr-iperf +++ b/openmptcprouter/files/bin/omr-iperf @@ -1,5 +1,6 @@ #!/bin/sh SERVER=$1 +shift [ -z "$SERVER" ] && SERVER="vps" KEY=$(uci -q get iperf.$SERVER.key) USER=$(uci -q get iperf.$SERVER.user) @@ -9,7 +10,7 @@ PORTS=$(uci -q get iperf.$SERVER.ports | sed 's/,/ /g') PORT="${PORTS%% *}" echo $KEY | base64 -d > /tmp/iperf.pem if [ -n "$PASSWORD" ] && [ -n "$USER" ] && [ -n "$KEY" ]; then - IPERF3_PASSWORD=$PASSWORD iperf3 --username $USER --rsa-public-key-path /tmp/iperf.pem -c $HOST -p $PORT ${@:2} + IPERF3_PASSWORD=$PASSWORD iperf3 --username $USER --rsa-public-key-path /tmp/iperf.pem -c $HOST -p $PORT ${@} else - iperf3 -c $HOST -p $PORT ${@:2} + iperf3 -c $HOST -p $PORT ${@} fi From b84cd5abaf5775b78b2f5cd5721c170cad5c5ef3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 23 Nov 2020 20:20:14 +0100 Subject: [PATCH 126/289] Commit changes for system --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 67bd16809..2308efa62 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -17,6 +17,7 @@ EOF uci -q set openmptcprouter.settings.scaling_min_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") uci -q set openmptcprouter.settings.scaling_max_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") uci -q set openmptcprouter.settings.scaling_governor='performance' + uci -q commit openmptcprouter } exit 0 \ No newline at end of file From bc5e2f79f43afa1ac1c024a2846522f31a1c42e6 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 24 Nov 2020 17:33:08 +0800 Subject: [PATCH 127/289] Create .gitignore --- .gitignore | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..2d93d2114 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +*.o +.DS_Store +.*.swp +/env +/dl +/.config +/.config.old +/bin +/build_dir +/staging_dir +/tmp +/logs +/feeds +/feeds.conf +/files +/overlay +/package/feeds +/package/openwrt-packages +key-build* +*.orig +*.rej +*~ +.#* +*# +.emacs.desktop* +TAGS*~ +git-src +.git-credentials +/*.log From 3e92bbfbcbadaf271df93157d6bd377cc2f9c0c6 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 24 Nov 2020 17:33:34 +0800 Subject: [PATCH 128/289] Create .gitignore --- .gitignore | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..2d93d2114 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +*.o +.DS_Store +.*.swp +/env +/dl +/.config +/.config.old +/bin +/build_dir +/staging_dir +/tmp +/logs +/feeds +/feeds.conf +/files +/overlay +/package/feeds +/package/openwrt-packages +key-build* +*.orig +*.rej +*~ +.#* +*# +.emacs.desktop* +TAGS*~ +git-src +.git-credentials +/*.log From dd255dff4680aa3fca082c0f661e89d9be9c2931 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:26:48 +0100 Subject: [PATCH 129/289] Fix path --- luci-app-mptcp/luasrc/view/mptcp/multipath.htm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm index 3e72fa34b..8d375c359 100644 --- a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm +++ b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm @@ -906,13 +906,13 @@ window.setTimeout(function() <% if curifname == "all" then %> <%:Download:%> - +
-
<%:Upload:%> - +
-
@@ -920,7 +920,7 @@ window.setTimeout(function() <% else %> - +
-

From bd542abb0226ef61a2c2b9512a8c01c112815da6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:27:14 +0100 Subject: [PATCH 130/289] Use 9 instead of 09 for init --- omr-update/files/etc/init.d/omr-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 3c18cb745..0199bb214 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -2,7 +2,7 @@ # Copyright (C) 2018 Ycarus (Yannick Chabanois) # Released under GPL 3. See LICENSE for the full terms. -START=09 +START=9 STOP=98 boot() { From 374d25abcec0bc270500828574f8ea455a2c951d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:28:01 +0100 Subject: [PATCH 131/289] Fix system settings --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 2308efa62..3b578e3fc 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -6,9 +6,9 @@ uci -q batch <<-EOF >/dev/null commit system set rpcd.@rpcd[0].timeout=120 commit rpcd - luci.apply.timeout='20' + set luci.apply.timeout='20' commit luci - fstab.@global[0].check_fs='1' + set fstab.@global[0].check_fs='1' commit fstab EOF From 564a93000bc33e8e3692d1c01a04e1953f244be0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 21:24:46 +0100 Subject: [PATCH 132/289] Restart rpcd if needed --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index bb686c9fa..e7cd3f311 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -815,6 +815,12 @@ if [ "$(pgrep v2ray)" = "" ] && [ "$(uci -q get v2ray.main.enabled)" = "1" ] && sleep 5 fi +if [ "$(pgrep rpcd)" = "" ] && [ -f /etc/init.d/rpcd ]; then + _log "Can't find rpcd, restart it..." + /etc/init.d/rpcd restart + sleep 5 +fi + if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -f /etc/init.d/v2ray ] && [ "$(pgrep -f omr-tracker-v2ray)" = "" ]; then _log "Can't find omr-tracker-v2ray, restart omr-tracker..." /etc/init.d/omr-tracker restart From c5460c667c79c587da47fdc840439597063b7dc2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 11:13:52 +0100 Subject: [PATCH 133/289] Continue if v2ray ip rule already set --- v2ray-core/files/usr/bin/v2ray-rules | 4 ++-- v2ray-core/files/usr/bin/v2ray-rules6 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/v2ray-core/files/usr/bin/v2ray-rules b/v2ray-core/files/usr/bin/v2ray-rules index b37c8a3ae..2d6642274 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules +++ b/v2ray-core/files/usr/bin/v2ray-rules @@ -229,8 +229,8 @@ v2r_rules_iptchains_init_() { fi ;; udp) - ip rule add fwmark 1 lookup 100 - ip route add local default dev lo table 100 + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true forward_rules="-A v2r_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac diff --git a/v2ray-core/files/usr/bin/v2ray-rules6 b/v2ray-core/files/usr/bin/v2ray-rules6 index 31a00da24..14f51e5dd 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules6 +++ b/v2ray-core/files/usr/bin/v2ray-rules6 @@ -215,8 +215,8 @@ v2ray_rules6_iptchains_init_() { fi ;; udp) - ip -f inet6 rule add fwmark 1 lookup 100 - ip -f inet6 route add local default dev lo table 100 + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true forward_rules=" -A v2r6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 -A v2r6_${rule}_forward -p tcp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 From c0ebeeee018ca482331282f9a40a7273cfa3dd22 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 11:14:05 +0100 Subject: [PATCH 134/289] Continue if shadowsocks ip rule already set --- shadowsocks-libev/files/ss-rules | 4 ++-- shadowsocks-libev/files/ss-rules6 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shadowsocks-libev/files/ss-rules b/shadowsocks-libev/files/ss-rules index 5cb75dd57..732d9d620 100755 --- a/shadowsocks-libev/files/ss-rules +++ b/shadowsocks-libev/files/ss-rules @@ -229,8 +229,8 @@ ss_rules_iptchains_init_() { fi ;; udp) - ip rule add fwmark 1 lookup 100 - ip route add local default dev lo table 100 + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true forward_rules="-A ssr_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index 729f496c3..1c25b43bf 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -211,8 +211,8 @@ ss_rules6_iptchains_init_() { fi ;; udp) - ip -f inet6 rule add fwmark 1 lookup 100 - ip -f inet6 route add local default dev lo table 100 + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true forward_rules="-A ssr6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac From 59c42c34b5af6ff837c78fba7058651dd47f6a20 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:26:48 +0100 Subject: [PATCH 135/289] Fix path --- luci-app-mptcp/luasrc/view/mptcp/multipath.htm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm index 3e72fa34b..8d375c359 100644 --- a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm +++ b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm @@ -906,13 +906,13 @@ window.setTimeout(function() <% if curifname == "all" then %> <%:Download:%> - +
-
<%:Upload:%> - +
-
@@ -920,7 +920,7 @@ window.setTimeout(function() <% else %> - +
-

From 3981d2c0653724822184fb13d55403cc8cd5ab28 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:27:14 +0100 Subject: [PATCH 136/289] Use 9 instead of 09 for init --- omr-update/files/etc/init.d/omr-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 3c18cb745..0199bb214 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -2,7 +2,7 @@ # Copyright (C) 2018 Ycarus (Yannick Chabanois) # Released under GPL 3. See LICENSE for the full terms. -START=09 +START=9 STOP=98 boot() { From d8e8ce3bb012dd569d38216f546c34598c936e4f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 17:28:01 +0100 Subject: [PATCH 137/289] Fix system settings --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 2308efa62..3b578e3fc 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -6,9 +6,9 @@ uci -q batch <<-EOF >/dev/null commit system set rpcd.@rpcd[0].timeout=120 commit rpcd - luci.apply.timeout='20' + set luci.apply.timeout='20' commit luci - fstab.@global[0].check_fs='1' + set fstab.@global[0].check_fs='1' commit fstab EOF From 3548693eee036886800791264b829af18ad630fc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 25 Nov 2020 21:24:46 +0100 Subject: [PATCH 138/289] Restart rpcd if needed --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index bb686c9fa..e7cd3f311 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -815,6 +815,12 @@ if [ "$(pgrep v2ray)" = "" ] && [ "$(uci -q get v2ray.main.enabled)" = "1" ] && sleep 5 fi +if [ "$(pgrep rpcd)" = "" ] && [ -f /etc/init.d/rpcd ]; then + _log "Can't find rpcd, restart it..." + /etc/init.d/rpcd restart + sleep 5 +fi + if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -f /etc/init.d/v2ray ] && [ "$(pgrep -f omr-tracker-v2ray)" = "" ]; then _log "Can't find omr-tracker-v2ray, restart omr-tracker..." /etc/init.d/omr-tracker restart From 92aba34441fd78ec775de9e07905210907f13938 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:27:37 +0100 Subject: [PATCH 139/289] Status logo in settings --- .../luasrc/view/openmptcprouter/wanstatus.htm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index f4836fecf..b35f3344f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -32,8 +32,9 @@ -%> <%+header%> <% -local ucic = luci.model.uci.cursor() -menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" +local ucic = luci.model.uci.cursor() +local menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" +local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openmptcprouter.png" %> @@ -107,7 +108,7 @@ menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" } } temp += '
'; - var equipmentIcon = ''; + var equipmentIcon = ''; var title = String.format("%s (%s)", mArray.openmptcprouter.hostname, mArray.openmptcprouter.local_addr); var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; From 9c4b42a310516b2e45747d287972f7b8138806ee Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:28:21 +0100 Subject: [PATCH 140/289] Remove getting speed from SQM --- .../luasrc/view/openmptcprouter/wizard.htm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 2fb57a315..59aaf2f0f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -737,15 +737,15 @@ local upload = "0" download = uci:get("network",ifname,"downloadspeed") or "0" upload = uci:get("network",ifname,"uploadspeed") or "0" - if download == "0" or upload == "0" then - if nixio.fs.access("/etc/init.d/sqm") then - download = uci:get("sqm",ifname,"download") - upload = uci:get("sqm",ifname,"upload") - else - download = uci:get("qos",ifname,"download") - upload = uci:get("qos",ifname,"upload") - end - end + --if download == "0" or upload == "0" then + -- if nixio.fs.access("/etc/init.d/sqm") then + -- download = uci:get("sqm",ifname,"download") + -- upload = uci:get("sqm",ifname,"upload") + -- else + -- download = uci:get("qos",ifname,"download") + -- upload = uci:get("qos",ifname,"upload") + -- end + --end %>
From 75fa539abb78ce682a0cda7a7c124d44124e3416 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:31:13 +0100 Subject: [PATCH 141/289] Add server name in log and openvpn update key function --- .../files/etc/init.d/openmptcprouter-vps | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index c34a0bf8e..3c94e42e0 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -6,7 +6,7 @@ START=99 USE_PROCD=1 -EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall" +EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key" _parse_result() { result=$("echo $1 | jsonfilter -q -e '@.result'") @@ -114,6 +114,27 @@ _set_openvpn_vps() { fi } +get_openvpn_key() { + servername=$2 + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + openvpn_client_key="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_key')" + [ -n "$openvpn_client_key" ] && { + echo $openvpn_client_key | base64 -d > /etc/luci-uploads/client.key + } + openvpn_client_crt="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_crt')" + [ -n "$openvpn_client_crt" ] && { + echo $openvpn_client_crt | base64 -d > /etc/luci-uploads/client.crt + } + openvpn_client_ca="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_ca')" + [ -n "$openvpn_client_ca" ] && { + echo $openvpn_client_ca | base64 -d > /etc/luci-uploads/ca.crt + } + [ -n "$openvpn_client_key" ] && [ -n "$openvpn_client_crt" ] && [ -n "$openvpn_client_ca" ] && { + /etc/init.d/openvpn restart + } +} + _get_ss_redir() { config_get cf_ebpf $1 ebpf [ "$cf_ebpf" = "1" ] && ebpf="true" @@ -166,7 +187,7 @@ _set_ss_server_vps() { if [ "$current_obfs_plugin" != "$obfs_plugin" ] || [ "$current_obfs_type" != "$obfs_type" ] || [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_key" != "$key" ] || [ "$current_ebpf" != "$ebpf" ] || [ "$current_obfs" != "$obfs" ] || [ "$current_fast_open" != "$fast_open" ] || [ "$current_no_delay" != "$no_delay" ]; then local settings settings='{"port": '$port',"method":"'$method'","fast_open":'$fast_open',"reuse_port":true,"no_delay":'$no_delay',"mptcp":true,"key":"'$key'","ebpf":'$ebpf',"obfs":'$obfs',"obfs_plugin":"'$obfs_plugin'","obfs_type":"'$obfs_type'"}' - echo $(_set_json "shadowsocks" "$settings") + _set_json "shadowsocks" "$settings" fi } @@ -906,7 +927,7 @@ _set_vps_firewall() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${fwservername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${fwservername}.admin_error=1 EOF @@ -967,7 +988,7 @@ _set_config_from_vps() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return - logger -t "OMR-VPS" "Get config from VPS..." + logger -t "OMR-VPS" "Get config from server ${servername}..." noerror=1 # get VPS ip vpsip="$(uci -q get openmptcprouter.${servername}.ip)" @@ -1371,7 +1392,7 @@ _backup_send() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1412,7 +1433,7 @@ _backup_get_and_apply() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1446,7 +1467,7 @@ _backup_list() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1483,6 +1504,7 @@ _config_service() { [ -z "$(uci -q get openmptcprouter.${servername}.password)" ] && return [ -z "$(uci -q get openmptcprouter.${servername}.port)" ] && return [ -z "$(uci -q get openmptcprouter.${servername}.ip)" ] && return + [ "$(uci -q get openmptcprouter.${servername}.disabled)" = "1" ] && return token="" vps_config="" _login @@ -1491,9 +1513,9 @@ _config_service() { _ping_server status=$? if $(exit $status); then - reason="can ping server" + reason="can ping server ${servername}" else - reason="can't ping server" + reason="can't ping server ${servername}" fi port="$(uci -q get openmptcprouter.${servername}.port)" server="$(uci -q get openmptcprouter.${servername}.ip)" @@ -1505,19 +1527,21 @@ _config_service() { if [ "$(uci -q get openmptcprouter.${servername}.username)" != "openmptcprouter" ]; then reason="$reason, custom username" fi - logger -t "OMR-VPS" "Can't get token, try later ($reason)" + logger -t "OMR-VPS" "Can't get ${servername} token, try later ($reason)" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF return } error=0 - [ "$(uci -q get openmptcprouter.${servername}.get_config)" = "1" ] && { + [ "$(uci -q get openmptcprouter.${servername}.get_config)" = "1" ] && [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { _set_config_from_vps _get_gre_tunnel } - _get_vps_config + [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { + _get_vps_config + } [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return user_permission="$(echo "$vps_config" | jsonfilter -q -e '@.user.permission')" From dd6e5d07f83574a5b7ff02fd34ae9c4c6d9de174 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:31:36 +0100 Subject: [PATCH 142/289] Update OpenVPN key when server change --- omr-tracker/files/bin/omr-tracker-server | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index 7b652c26d..e7c759b16 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -65,6 +65,7 @@ _check_master() { add_list openvpn.omr.remote=$ip commit openvpn EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/glorytun restart >/dev/null 2>/dev/null @@ -88,7 +89,7 @@ _check_backup() { _check_server $ip $port [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { - logger -t "OMR-Tracker-Server" "User backup server $1 ($ip)" + logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" uci -q batch <<-EOF >/dev/null set shadowsocks-libev.sss0.server=$ip commit shadowsocks-libev @@ -105,6 +106,7 @@ _check_backup() { add_list openvpn.omr.remote=$ip commit openvpn EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/glorytun restart >/dev/null 2>/dev/null From 9abe48ca8fbd5e369a1ac6d52d69eedc105225ee Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:32:15 +0100 Subject: [PATCH 143/289] Add BBR2 dependency --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 8afa8bbcb..0d060fa9a 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -78,7 +78,7 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd \ kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ - luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt igmpproxy ss iptraf-ng \ + luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ hwinfo (TARGET_x86||TARGET_x86_64):dmidecode # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status From 943a33a4e04fa71a3afd0e3dbd2cbb20b0957898 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 11:13:52 +0100 Subject: [PATCH 144/289] Continue if v2ray ip rule already set --- v2ray-core/files/usr/bin/v2ray-rules | 4 ++-- v2ray-core/files/usr/bin/v2ray-rules6 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/v2ray-core/files/usr/bin/v2ray-rules b/v2ray-core/files/usr/bin/v2ray-rules index b37c8a3ae..2d6642274 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules +++ b/v2ray-core/files/usr/bin/v2ray-rules @@ -229,8 +229,8 @@ v2r_rules_iptchains_init_() { fi ;; udp) - ip rule add fwmark 1 lookup 100 - ip route add local default dev lo table 100 + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true forward_rules="-A v2r_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac diff --git a/v2ray-core/files/usr/bin/v2ray-rules6 b/v2ray-core/files/usr/bin/v2ray-rules6 index 31a00da24..14f51e5dd 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules6 +++ b/v2ray-core/files/usr/bin/v2ray-rules6 @@ -215,8 +215,8 @@ v2ray_rules6_iptchains_init_() { fi ;; udp) - ip -f inet6 rule add fwmark 1 lookup 100 - ip -f inet6 route add local default dev lo table 100 + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true forward_rules=" -A v2r6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 -A v2r6_${rule}_forward -p tcp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 From cda0689ee634cd3c0b052059b247b4f4b6f91e62 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 11:14:05 +0100 Subject: [PATCH 145/289] Continue if shadowsocks ip rule already set --- shadowsocks-libev/files/ss-rules | 4 ++-- shadowsocks-libev/files/ss-rules6 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shadowsocks-libev/files/ss-rules b/shadowsocks-libev/files/ss-rules index 5cb75dd57..732d9d620 100755 --- a/shadowsocks-libev/files/ss-rules +++ b/shadowsocks-libev/files/ss-rules @@ -229,8 +229,8 @@ ss_rules_iptchains_init_() { fi ;; udp) - ip rule add fwmark 1 lookup 100 - ip route add local default dev lo table 100 + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true forward_rules="-A ssr_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index 729f496c3..1c25b43bf 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -211,8 +211,8 @@ ss_rules6_iptchains_init_() { fi ;; udp) - ip -f inet6 rule add fwmark 1 lookup 100 - ip -f inet6 route add local default dev lo table 100 + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true forward_rules="-A ssr6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" ;; esac From 2420f841fe1943918b1a04ae679d16013f7041e6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:27:37 +0100 Subject: [PATCH 146/289] Status logo in settings --- .../luasrc/view/openmptcprouter/wanstatus.htm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index f4836fecf..b35f3344f 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -32,8 +32,9 @@ -%> <%+header%> <% -local ucic = luci.model.uci.cursor() -menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" +local ucic = luci.model.uci.cursor() +local menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" +local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openmptcprouter.png" %> @@ -107,7 +108,7 @@ menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" } } temp += ''; - var equipmentIcon = ''; + var equipmentIcon = ''; var title = String.format("%s (%s)", mArray.openmptcprouter.hostname, mArray.openmptcprouter.local_addr); var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; From c180f6f3a3f306c3765b1a096ff35d36e7f6826a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:28:21 +0100 Subject: [PATCH 147/289] Remove getting speed from SQM --- .../luasrc/view/openmptcprouter/wizard.htm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index eecac2bb7..817255650 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -737,15 +737,15 @@ local upload = "0" download = uci:get("network",ifname,"downloadspeed") or "0" upload = uci:get("network",ifname,"uploadspeed") or "0" - if download == "0" or upload == "0" then - if nixio.fs.access("/etc/init.d/sqm") then - download = uci:get("sqm",ifname,"download") - upload = uci:get("sqm",ifname,"upload") - else - download = uci:get("qos",ifname,"download") - upload = uci:get("qos",ifname,"upload") - end - end + --if download == "0" or upload == "0" then + -- if nixio.fs.access("/etc/init.d/sqm") then + -- download = uci:get("sqm",ifname,"download") + -- upload = uci:get("sqm",ifname,"upload") + -- else + -- download = uci:get("qos",ifname,"download") + -- upload = uci:get("qos",ifname,"upload") + -- end + --end %>
From 1c68d183801855a9eccb7496947921cd23d79306 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:31:13 +0100 Subject: [PATCH 148/289] Add server name in log and openvpn update key function --- .../files/etc/init.d/openmptcprouter-vps | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index c34a0bf8e..3c94e42e0 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -6,7 +6,7 @@ START=99 USE_PROCD=1 -EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall" +EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key" _parse_result() { result=$("echo $1 | jsonfilter -q -e '@.result'") @@ -114,6 +114,27 @@ _set_openvpn_vps() { fi } +get_openvpn_key() { + servername=$2 + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + openvpn_client_key="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_key')" + [ -n "$openvpn_client_key" ] && { + echo $openvpn_client_key | base64 -d > /etc/luci-uploads/client.key + } + openvpn_client_crt="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_crt')" + [ -n "$openvpn_client_crt" ] && { + echo $openvpn_client_crt | base64 -d > /etc/luci-uploads/client.crt + } + openvpn_client_ca="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_ca')" + [ -n "$openvpn_client_ca" ] && { + echo $openvpn_client_ca | base64 -d > /etc/luci-uploads/ca.crt + } + [ -n "$openvpn_client_key" ] && [ -n "$openvpn_client_crt" ] && [ -n "$openvpn_client_ca" ] && { + /etc/init.d/openvpn restart + } +} + _get_ss_redir() { config_get cf_ebpf $1 ebpf [ "$cf_ebpf" = "1" ] && ebpf="true" @@ -166,7 +187,7 @@ _set_ss_server_vps() { if [ "$current_obfs_plugin" != "$obfs_plugin" ] || [ "$current_obfs_type" != "$obfs_type" ] || [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_key" != "$key" ] || [ "$current_ebpf" != "$ebpf" ] || [ "$current_obfs" != "$obfs" ] || [ "$current_fast_open" != "$fast_open" ] || [ "$current_no_delay" != "$no_delay" ]; then local settings settings='{"port": '$port',"method":"'$method'","fast_open":'$fast_open',"reuse_port":true,"no_delay":'$no_delay',"mptcp":true,"key":"'$key'","ebpf":'$ebpf',"obfs":'$obfs',"obfs_plugin":"'$obfs_plugin'","obfs_type":"'$obfs_type'"}' - echo $(_set_json "shadowsocks" "$settings") + _set_json "shadowsocks" "$settings" fi } @@ -906,7 +927,7 @@ _set_vps_firewall() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${fwservername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${fwservername}.admin_error=1 EOF @@ -967,7 +988,7 @@ _set_config_from_vps() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return - logger -t "OMR-VPS" "Get config from VPS..." + logger -t "OMR-VPS" "Get config from server ${servername}..." noerror=1 # get VPS ip vpsip="$(uci -q get openmptcprouter.${servername}.ip)" @@ -1371,7 +1392,7 @@ _backup_send() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1412,7 +1433,7 @@ _backup_get_and_apply() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1446,7 +1467,7 @@ _backup_list() { vps_config="" _login [ -z "$token" ] && { - logger -t "OMR-VPS" "Can't get token, try later" + logger -t "OMR-VPS" "Can't get ${servername} token, try later" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF @@ -1483,6 +1504,7 @@ _config_service() { [ -z "$(uci -q get openmptcprouter.${servername}.password)" ] && return [ -z "$(uci -q get openmptcprouter.${servername}.port)" ] && return [ -z "$(uci -q get openmptcprouter.${servername}.ip)" ] && return + [ "$(uci -q get openmptcprouter.${servername}.disabled)" = "1" ] && return token="" vps_config="" _login @@ -1491,9 +1513,9 @@ _config_service() { _ping_server status=$? if $(exit $status); then - reason="can ping server" + reason="can ping server ${servername}" else - reason="can't ping server" + reason="can't ping server ${servername}" fi port="$(uci -q get openmptcprouter.${servername}.port)" server="$(uci -q get openmptcprouter.${servername}.ip)" @@ -1505,19 +1527,21 @@ _config_service() { if [ "$(uci -q get openmptcprouter.${servername}.username)" != "openmptcprouter" ]; then reason="$reason, custom username" fi - logger -t "OMR-VPS" "Can't get token, try later ($reason)" + logger -t "OMR-VPS" "Can't get ${servername} token, try later ($reason)" uci -q batch <<-EOF >/dev/null set openmptcprouter.${servername}.admin_error=1 EOF return } error=0 - [ "$(uci -q get openmptcprouter.${servername}.get_config)" = "1" ] && { + [ "$(uci -q get openmptcprouter.${servername}.get_config)" = "1" ] && [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { _set_config_from_vps _get_gre_tunnel } - _get_vps_config + [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { + _get_vps_config + } [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return user_permission="$(echo "$vps_config" | jsonfilter -q -e '@.user.permission')" From 21c53f2420ac60b3895aceff38a2881c0964bb67 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:31:36 +0100 Subject: [PATCH 149/289] Update OpenVPN key when server change --- omr-tracker/files/bin/omr-tracker-server | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index 7b652c26d..e7c759b16 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -65,6 +65,7 @@ _check_master() { add_list openvpn.omr.remote=$ip commit openvpn EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/glorytun restart >/dev/null 2>/dev/null @@ -88,7 +89,7 @@ _check_backup() { _check_server $ip $port [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { - logger -t "OMR-Tracker-Server" "User backup server $1 ($ip)" + logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" uci -q batch <<-EOF >/dev/null set shadowsocks-libev.sss0.server=$ip commit shadowsocks-libev @@ -105,6 +106,7 @@ _check_backup() { add_list openvpn.omr.remote=$ip commit openvpn EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/glorytun restart >/dev/null 2>/dev/null From 9521458d674bdfd9ff814384cd3505ac2dc761ff Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 26 Nov 2020 16:32:15 +0100 Subject: [PATCH 150/289] Add BBR2 dependency --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 8afa8bbcb..0d060fa9a 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -78,7 +78,7 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd \ kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ - luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt igmpproxy ss iptraf-ng \ + luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ hwinfo (TARGET_x86||TARGET_x86_64):dmidecode # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status From 4e6ba9a587fb03d1d221133a2b4866c43e2f0e10 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:12:10 +0100 Subject: [PATCH 151/289] Fix typo --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 59aaf2f0f..0973622ab 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -470,7 +470,7 @@
From 9b30f42277f1d40a482011137705539e93327c96 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:12:31 +0100 Subject: [PATCH 152/289] Update firewall app to upstream --- .../htdocs/luci-static/resources/view/firewall/rules.js | 1 + .../htdocs/luci-static/resources/view/firewall/zones.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js index 8cb1a1242..bacbbd704 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js @@ -308,6 +308,7 @@ return view.extend({ o.value('network-redirect'); o.value('network-unknown'); o.value('network-unreachable'); + o.value('packet-too-big'); o.value('parameter-problem'); o.value('port-unreachable'); o.value('precedence-cutoff'); diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index 5e2b6cd81..00e272677 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -177,9 +177,11 @@ return view.extend({ } return Promise.all(tasks).then(function(zone_networks) { - if (zone_networks[0]) + if (zone_networks[0]) { + zone_networks[0].clearNetworks(); for (var i = 1; i < zone_networks.length; i++) zone_networks[0].addNetwork(zone_networks[i].getName()); + } }); }; From a445cba3c7dec1b05dc4b10c6ec5269cbb6f53d5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:04 +0100 Subject: [PATCH 153/289] Update wireless from upstream --- luci-mod-network/Makefile | 2 +- .../resources/view/network/wireless.js | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile index 962817219..7a043dc40 100644 --- a/luci-mod-network/Makefile +++ b/luci-mod-network/Makefile @@ -4,7 +4,7 @@ # # This is free software, licensed under the Apache License, Version 2.0 . # -# From https://github.com/openwrt/luci/commit/5ca328440b3a41ab6d415ec96f9db4339715de67 +# From https://github.com/openwrt/luci/commit/83c912716e482000e92443cffc3202726314f480 include $(TOPDIR)/rules.mk diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index dc75c9509..bb9877217 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -1634,7 +1634,7 @@ return view.extend({ o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.')); add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); - if (L.hasSystemFeature('hostapd', 'cli') && L.hasSystemFeature('wpasupplicant')) { + if (L.hasSystemFeature('hostapd', 'wps') && L.hasSystemFeature('wpasupplicant')) { o = ss.taboption('encryption', form.Flag, 'wps_pushbutton', _('Enable WPS pushbutton, requires WPA(2)-PSK/WPA3-SAE')) o.enabled = '1'; o.disabled = '0'; @@ -1742,7 +1742,7 @@ return view.extend({ E('span', { 'style': s }, '%h'.format(network.formatWifiEncryption(res.encryption))), E('div', { 'class': 'right' }, E('button', { 'class': 'cbi-button cbi-button-action important', - 'click': L.bind(this.handleJoin, this, radioDev, res) + 'click': ui.createHandlerFn(this, 'handleJoin', radioDev, res) }, _('Join Network'))) ]); @@ -1790,17 +1790,19 @@ return view.extend({ s.handleJoinConfirm = function(radioDev, bss, form, ev) { var nameopt = L.toArray(form.lookupOption('name', '_new_'))[0], passopt = L.toArray(form.lookupOption('password', '_new_'))[0], + ssidopt = L.toArray(form.lookupOption('ssid', '_new_'))[0], bssidopt = L.toArray(form.lookupOption('bssid', '_new_'))[0], zoneopt = L.toArray(form.lookupOption('zone', '_new_'))[0], replopt = L.toArray(form.lookupOption('replace', '_new_'))[0], nameval = (nameopt && nameopt.isValid('_new_')) ? nameopt.formvalue('_new_') : null, passval = (passopt && passopt.isValid('_new_')) ? passopt.formvalue('_new_') : null, + ssidval = (ssidopt && ssidopt.isValid('_new_')) ? ssidopt.formvalue('_new_') : null, bssidval = (bssidopt && bssidopt.isValid('_new_')) ? bssidopt.formvalue('_new_') : null, zoneval = zoneopt ? zoneopt.formvalue('_new_') : null, enc = L.isObject(bss.encryption) ? bss.encryption : null, is_wep = (enc && Array.isArray(enc.wep)), - is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' })), - is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' })); + is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' }).length > 0), + is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' }).length > 0); if (nameval == null || (passopt && passval == null)) return; @@ -1841,6 +1843,9 @@ return view.extend({ uci.set('wireless', section_id, 'bssid', bss.bssid); } + if (ssidval != null) + uci.set('wireless', section_id, 'ssid', ssidval); + if (is_sae) { uci.set('wireless', section_id, 'encryption', 'sae'); uci.set('wireless', section_id, 'key', passval); @@ -1886,7 +1891,7 @@ return view.extend({ }; s.handleJoin = function(radioDev, bss, ev) { - this.handleScanAbort(ev); + poll.remove(this.pollFn); var m2 = new form.Map('wireless'), s2 = m2.section(form.NamedSection, '_new_'), @@ -1911,6 +1916,11 @@ return view.extend({ ]).then(this.renderContents.bind(this)); }; + if (bss.ssid == null) { + name = s2.option(form.Value, 'ssid', _('Network SSID'), _('The correct SSID must be manually specified when joining a hidden wireless network')); + name.rmempty = false; + }; + replace = s2.option(form.Flag, 'replace', _('Replace wireless configuration'), _('Check this option to delete the existing networks from this radio.')); name = s2.option(form.Value, 'name', _('Name of the new network'), _('The allowed characters are: A-Z, a-z, 0-9 and _')); From 284fda5ec7406c5f1dd1e139fdb321b4b284f295 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:36 +0100 Subject: [PATCH 154/289] Fix firewall from update --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 267891fd3..e6f918796 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -157,6 +157,11 @@ uci -q del firewall.@zone[1].network for intf in $allintf; do uci -q add_list firewall.@zone[1].network=$intf done +allintf=$(uci -q get firewall.zone_vpn.network) +uci -q del firewall.zone_vpn.network +for intf in $allintf; do + uci -q add_list firewall.zone_vpn.network=$intf +done uci -q batch <<-EOF >/dev/null set firewall.@zone[0].mtu_fix='1' From eac6cc6ab1b6a46aae06317e38a7887cc968d1a7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 19:59:28 +0100 Subject: [PATCH 155/289] Fix omr-rename when not needed --- luci-app-openmptcprouter/root/etc/init.d/openmptcprouter | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index c49866fd5..63d4d3a3a 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -45,14 +45,15 @@ omr_intf_set() { if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then devicepath=$(readlink -f /sys/class/net/${ifname}) - if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ]; then + if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" - elif [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" != "" ]; then + elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then uci -q delete network.$1.device uci -q delete network.$1.modalias + uci -q delete network.$1.product fi - elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ]; then + elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then uci -q set network.$1.modalias="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" fi From 30fa24b9160ec9cae644426c2f8573f22134167d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:30:52 +0100 Subject: [PATCH 156/289] Fix glorytun UDP init script --- glorytun-udp/init | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 638736017..b9a18c526 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -62,10 +62,10 @@ start_instance() { procd_open_instance procd_set_param command ${PROG} \ - ${bind:+bind "$bind"} \ - ${bindport:+ "$bindport"} \ - ${host:+to "$host"} \ - ${port:+ "$port"} \ + ${bind:+bind from "$bind"} \ + ${bindport:+port "$bindport"} \ + ${host:+to addr "$host"} \ + ${port:+port "$port"} \ ${dev:+dev "$dev"} \ keyfile /tmp/${PROG_NAME}-${1}.key \ persist From 0bf0bee341ed90fd2efbf8ec98b9f28d4c2aa973 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:58:14 +0100 Subject: [PATCH 157/289] Fix shadowsocks config from router --- .../files/etc/init.d/openmptcprouter-vps | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 3c94e42e0..8db25ea42 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -153,14 +153,15 @@ _get_ss_server() { _set_ss_server_vps() { local disabled port key method - config_get disabled $1 disabled + config_load shadowsocks-libev + config_get disabled sss0 disabled [ "$disabled" = "1" ] && return - config_get port $1 server_port + config_get port sss0 server_port #config_get server $1 server - config_get key $1 key + config_get key sss0 key key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" [ -z "$key" ] && return - config_get method $1 method + config_get method sss0 method local current_port current_key current_method [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -1562,8 +1563,9 @@ _config_service() { [ -n "$vps_config" ] && uci -q set openmptcprouter.settings.firstboot=0 fi if [ "$user_permission" != "ro" ]; then - config_load shadowsocks-libev - config_foreach _set_ss_server_vps server + #config_load shadowsocks-libev + #config_foreach _set_ss_server_vps server + _set_ss_server_vps _set_v2ray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 From 70d0a7548b3df18815e4505461c0611f11e411dc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:12:31 +0100 Subject: [PATCH 158/289] Update firewall app to upstream --- .../htdocs/luci-static/resources/view/firewall/rules.js | 1 + .../htdocs/luci-static/resources/view/firewall/zones.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js index 8cb1a1242..bacbbd704 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js @@ -308,6 +308,7 @@ return view.extend({ o.value('network-redirect'); o.value('network-unknown'); o.value('network-unreachable'); + o.value('packet-too-big'); o.value('parameter-problem'); o.value('port-unreachable'); o.value('precedence-cutoff'); diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index 5e2b6cd81..00e272677 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -177,9 +177,11 @@ return view.extend({ } return Promise.all(tasks).then(function(zone_networks) { - if (zone_networks[0]) + if (zone_networks[0]) { + zone_networks[0].clearNetworks(); for (var i = 1; i < zone_networks.length; i++) zone_networks[0].addNetwork(zone_networks[i].getName()); + } }); }; From 538f85411278d49b75802a333b1f30ffddfb2553 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:04 +0100 Subject: [PATCH 159/289] Update wireless from upstream --- luci-mod-network/Makefile | 2 +- .../resources/view/network/wireless.js | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile index 962817219..7a043dc40 100644 --- a/luci-mod-network/Makefile +++ b/luci-mod-network/Makefile @@ -4,7 +4,7 @@ # # This is free software, licensed under the Apache License, Version 2.0 . # -# From https://github.com/openwrt/luci/commit/5ca328440b3a41ab6d415ec96f9db4339715de67 +# From https://github.com/openwrt/luci/commit/83c912716e482000e92443cffc3202726314f480 include $(TOPDIR)/rules.mk diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index dc75c9509..bb9877217 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -1634,7 +1634,7 @@ return view.extend({ o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.')); add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); - if (L.hasSystemFeature('hostapd', 'cli') && L.hasSystemFeature('wpasupplicant')) { + if (L.hasSystemFeature('hostapd', 'wps') && L.hasSystemFeature('wpasupplicant')) { o = ss.taboption('encryption', form.Flag, 'wps_pushbutton', _('Enable WPS pushbutton, requires WPA(2)-PSK/WPA3-SAE')) o.enabled = '1'; o.disabled = '0'; @@ -1742,7 +1742,7 @@ return view.extend({ E('span', { 'style': s }, '%h'.format(network.formatWifiEncryption(res.encryption))), E('div', { 'class': 'right' }, E('button', { 'class': 'cbi-button cbi-button-action important', - 'click': L.bind(this.handleJoin, this, radioDev, res) + 'click': ui.createHandlerFn(this, 'handleJoin', radioDev, res) }, _('Join Network'))) ]); @@ -1790,17 +1790,19 @@ return view.extend({ s.handleJoinConfirm = function(radioDev, bss, form, ev) { var nameopt = L.toArray(form.lookupOption('name', '_new_'))[0], passopt = L.toArray(form.lookupOption('password', '_new_'))[0], + ssidopt = L.toArray(form.lookupOption('ssid', '_new_'))[0], bssidopt = L.toArray(form.lookupOption('bssid', '_new_'))[0], zoneopt = L.toArray(form.lookupOption('zone', '_new_'))[0], replopt = L.toArray(form.lookupOption('replace', '_new_'))[0], nameval = (nameopt && nameopt.isValid('_new_')) ? nameopt.formvalue('_new_') : null, passval = (passopt && passopt.isValid('_new_')) ? passopt.formvalue('_new_') : null, + ssidval = (ssidopt && ssidopt.isValid('_new_')) ? ssidopt.formvalue('_new_') : null, bssidval = (bssidopt && bssidopt.isValid('_new_')) ? bssidopt.formvalue('_new_') : null, zoneval = zoneopt ? zoneopt.formvalue('_new_') : null, enc = L.isObject(bss.encryption) ? bss.encryption : null, is_wep = (enc && Array.isArray(enc.wep)), - is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' })), - is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' })); + is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' }).length > 0), + is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' }).length > 0); if (nameval == null || (passopt && passval == null)) return; @@ -1841,6 +1843,9 @@ return view.extend({ uci.set('wireless', section_id, 'bssid', bss.bssid); } + if (ssidval != null) + uci.set('wireless', section_id, 'ssid', ssidval); + if (is_sae) { uci.set('wireless', section_id, 'encryption', 'sae'); uci.set('wireless', section_id, 'key', passval); @@ -1886,7 +1891,7 @@ return view.extend({ }; s.handleJoin = function(radioDev, bss, ev) { - this.handleScanAbort(ev); + poll.remove(this.pollFn); var m2 = new form.Map('wireless'), s2 = m2.section(form.NamedSection, '_new_'), @@ -1911,6 +1916,11 @@ return view.extend({ ]).then(this.renderContents.bind(this)); }; + if (bss.ssid == null) { + name = s2.option(form.Value, 'ssid', _('Network SSID'), _('The correct SSID must be manually specified when joining a hidden wireless network')); + name.rmempty = false; + }; + replace = s2.option(form.Flag, 'replace', _('Replace wireless configuration'), _('Check this option to delete the existing networks from this radio.')); name = s2.option(form.Value, 'name', _('Name of the new network'), _('The allowed characters are: A-Z, a-z, 0-9 and _')); From 557476b7ccf3389d0cbc2140fae2762ee3c55cc9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:36 +0100 Subject: [PATCH 160/289] Fix firewall from update --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 267891fd3..e6f918796 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -157,6 +157,11 @@ uci -q del firewall.@zone[1].network for intf in $allintf; do uci -q add_list firewall.@zone[1].network=$intf done +allintf=$(uci -q get firewall.zone_vpn.network) +uci -q del firewall.zone_vpn.network +for intf in $allintf; do + uci -q add_list firewall.zone_vpn.network=$intf +done uci -q batch <<-EOF >/dev/null set firewall.@zone[0].mtu_fix='1' From 944ee96a24442e9c28c810a644b8e6880ee9431c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 19:59:28 +0100 Subject: [PATCH 161/289] Fix omr-rename when not needed --- luci-app-openmptcprouter/root/etc/init.d/openmptcprouter | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index c49866fd5..63d4d3a3a 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -45,14 +45,15 @@ omr_intf_set() { if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then devicepath=$(readlink -f /sys/class/net/${ifname}) - if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ]; then + if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" - elif [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" != "" ]; then + elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then uci -q delete network.$1.device uci -q delete network.$1.modalias + uci -q delete network.$1.product fi - elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ]; then + elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then uci -q set network.$1.modalias="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" fi From eca7ddd0e22ad4bfd5f670f4a9d56c2e814a4ed5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:30:52 +0100 Subject: [PATCH 162/289] Fix glorytun UDP init script --- glorytun-udp/init | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 638736017..b9a18c526 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -62,10 +62,10 @@ start_instance() { procd_open_instance procd_set_param command ${PROG} \ - ${bind:+bind "$bind"} \ - ${bindport:+ "$bindport"} \ - ${host:+to "$host"} \ - ${port:+ "$port"} \ + ${bind:+bind from "$bind"} \ + ${bindport:+port "$bindport"} \ + ${host:+to addr "$host"} \ + ${port:+port "$port"} \ ${dev:+dev "$dev"} \ keyfile /tmp/${PROG_NAME}-${1}.key \ persist From d39cfbf25594dbbef7efb200cb4039dbe504d778 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:58:14 +0100 Subject: [PATCH 163/289] Fix shadowsocks config from router --- .../files/etc/init.d/openmptcprouter-vps | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 3c94e42e0..8db25ea42 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -153,14 +153,15 @@ _get_ss_server() { _set_ss_server_vps() { local disabled port key method - config_get disabled $1 disabled + config_load shadowsocks-libev + config_get disabled sss0 disabled [ "$disabled" = "1" ] && return - config_get port $1 server_port + config_get port sss0 server_port #config_get server $1 server - config_get key $1 key + config_get key sss0 key key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" [ -z "$key" ] && return - config_get method $1 method + config_get method sss0 method local current_port current_key current_method [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -1562,8 +1563,9 @@ _config_service() { [ -n "$vps_config" ] && uci -q set openmptcprouter.settings.firstboot=0 fi if [ "$user_permission" != "ro" ]; then - config_load shadowsocks-libev - config_foreach _set_ss_server_vps server + #config_load shadowsocks-libev + #config_foreach _set_ss_server_vps server + _set_ss_server_vps _set_v2ray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 From de06c503103e242a254fca1fa532aba174b947e8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:12:31 +0100 Subject: [PATCH 164/289] Update firewall app to upstream --- .../htdocs/luci-static/resources/view/firewall/rules.js | 1 + .../htdocs/luci-static/resources/view/firewall/zones.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js index 8cb1a1242..bacbbd704 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js @@ -308,6 +308,7 @@ return view.extend({ o.value('network-redirect'); o.value('network-unknown'); o.value('network-unreachable'); + o.value('packet-too-big'); o.value('parameter-problem'); o.value('port-unreachable'); o.value('precedence-cutoff'); diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index 5e2b6cd81..00e272677 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -177,9 +177,11 @@ return view.extend({ } return Promise.all(tasks).then(function(zone_networks) { - if (zone_networks[0]) + if (zone_networks[0]) { + zone_networks[0].clearNetworks(); for (var i = 1; i < zone_networks.length; i++) zone_networks[0].addNetwork(zone_networks[i].getName()); + } }); }; From 5d52e7b297cab5473587e192bf04f4732cfc6155 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:04 +0100 Subject: [PATCH 165/289] Update wireless from upstream --- luci-mod-network/Makefile | 2 +- .../resources/view/network/wireless.js | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile index 962817219..7a043dc40 100644 --- a/luci-mod-network/Makefile +++ b/luci-mod-network/Makefile @@ -4,7 +4,7 @@ # # This is free software, licensed under the Apache License, Version 2.0 . # -# From https://github.com/openwrt/luci/commit/5ca328440b3a41ab6d415ec96f9db4339715de67 +# From https://github.com/openwrt/luci/commit/83c912716e482000e92443cffc3202726314f480 include $(TOPDIR)/rules.mk diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index dc75c9509..bb9877217 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -1634,7 +1634,7 @@ return view.extend({ o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.')); add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); - if (L.hasSystemFeature('hostapd', 'cli') && L.hasSystemFeature('wpasupplicant')) { + if (L.hasSystemFeature('hostapd', 'wps') && L.hasSystemFeature('wpasupplicant')) { o = ss.taboption('encryption', form.Flag, 'wps_pushbutton', _('Enable WPS pushbutton, requires WPA(2)-PSK/WPA3-SAE')) o.enabled = '1'; o.disabled = '0'; @@ -1742,7 +1742,7 @@ return view.extend({ E('span', { 'style': s }, '%h'.format(network.formatWifiEncryption(res.encryption))), E('div', { 'class': 'right' }, E('button', { 'class': 'cbi-button cbi-button-action important', - 'click': L.bind(this.handleJoin, this, radioDev, res) + 'click': ui.createHandlerFn(this, 'handleJoin', radioDev, res) }, _('Join Network'))) ]); @@ -1790,17 +1790,19 @@ return view.extend({ s.handleJoinConfirm = function(radioDev, bss, form, ev) { var nameopt = L.toArray(form.lookupOption('name', '_new_'))[0], passopt = L.toArray(form.lookupOption('password', '_new_'))[0], + ssidopt = L.toArray(form.lookupOption('ssid', '_new_'))[0], bssidopt = L.toArray(form.lookupOption('bssid', '_new_'))[0], zoneopt = L.toArray(form.lookupOption('zone', '_new_'))[0], replopt = L.toArray(form.lookupOption('replace', '_new_'))[0], nameval = (nameopt && nameopt.isValid('_new_')) ? nameopt.formvalue('_new_') : null, passval = (passopt && passopt.isValid('_new_')) ? passopt.formvalue('_new_') : null, + ssidval = (ssidopt && ssidopt.isValid('_new_')) ? ssidopt.formvalue('_new_') : null, bssidval = (bssidopt && bssidopt.isValid('_new_')) ? bssidopt.formvalue('_new_') : null, zoneval = zoneopt ? zoneopt.formvalue('_new_') : null, enc = L.isObject(bss.encryption) ? bss.encryption : null, is_wep = (enc && Array.isArray(enc.wep)), - is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' })), - is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' })); + is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' }).length > 0), + is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' }).length > 0); if (nameval == null || (passopt && passval == null)) return; @@ -1841,6 +1843,9 @@ return view.extend({ uci.set('wireless', section_id, 'bssid', bss.bssid); } + if (ssidval != null) + uci.set('wireless', section_id, 'ssid', ssidval); + if (is_sae) { uci.set('wireless', section_id, 'encryption', 'sae'); uci.set('wireless', section_id, 'key', passval); @@ -1886,7 +1891,7 @@ return view.extend({ }; s.handleJoin = function(radioDev, bss, ev) { - this.handleScanAbort(ev); + poll.remove(this.pollFn); var m2 = new form.Map('wireless'), s2 = m2.section(form.NamedSection, '_new_'), @@ -1911,6 +1916,11 @@ return view.extend({ ]).then(this.renderContents.bind(this)); }; + if (bss.ssid == null) { + name = s2.option(form.Value, 'ssid', _('Network SSID'), _('The correct SSID must be manually specified when joining a hidden wireless network')); + name.rmempty = false; + }; + replace = s2.option(form.Flag, 'replace', _('Replace wireless configuration'), _('Check this option to delete the existing networks from this radio.')); name = s2.option(form.Value, 'name', _('Name of the new network'), _('The allowed characters are: A-Z, a-z, 0-9 and _')); From ce18efe89e3dd493af46a0ac8f4f38a4c8d33d86 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 18:13:36 +0100 Subject: [PATCH 166/289] Fix firewall from update --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 267891fd3..e6f918796 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -157,6 +157,11 @@ uci -q del firewall.@zone[1].network for intf in $allintf; do uci -q add_list firewall.@zone[1].network=$intf done +allintf=$(uci -q get firewall.zone_vpn.network) +uci -q del firewall.zone_vpn.network +for intf in $allintf; do + uci -q add_list firewall.zone_vpn.network=$intf +done uci -q batch <<-EOF >/dev/null set firewall.@zone[0].mtu_fix='1' From 0a3e528fa69ad221b7d37f7d7fb4646d74e905b4 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 27 Nov 2020 19:59:28 +0100 Subject: [PATCH 167/289] Fix omr-rename when not needed --- luci-app-openmptcprouter/root/etc/init.d/openmptcprouter | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index c49866fd5..63d4d3a3a 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -45,14 +45,15 @@ omr_intf_set() { if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then devicepath=$(readlink -f /sys/class/net/${ifname}) - if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ]; then + if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" - elif [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" != "" ]; then + elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then uci -q delete network.$1.device uci -q delete network.$1.modalias + uci -q delete network.$1.product fi - elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ]; then + elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then uci -q set network.$1.modalias="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" fi From c0d0fa3d3d210c1c607a52dbc7708d585fe7bf96 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:30:52 +0100 Subject: [PATCH 168/289] Fix glorytun UDP init script --- glorytun-udp/init | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 638736017..b9a18c526 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -62,10 +62,10 @@ start_instance() { procd_open_instance procd_set_param command ${PROG} \ - ${bind:+bind "$bind"} \ - ${bindport:+ "$bindport"} \ - ${host:+to "$host"} \ - ${port:+ "$port"} \ + ${bind:+bind from "$bind"} \ + ${bindport:+port "$bindport"} \ + ${host:+to addr "$host"} \ + ${port:+port "$port"} \ ${dev:+dev "$dev"} \ keyfile /tmp/${PROG_NAME}-${1}.key \ persist From 16e9927d3753ff6c6b849e1fbafeaa49b4ad1152 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 28 Nov 2020 20:58:14 +0100 Subject: [PATCH 169/289] Fix shadowsocks config from router --- .../files/etc/init.d/openmptcprouter-vps | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 3c94e42e0..8db25ea42 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -153,14 +153,15 @@ _get_ss_server() { _set_ss_server_vps() { local disabled port key method - config_get disabled $1 disabled + config_load shadowsocks-libev + config_get disabled sss0 disabled [ "$disabled" = "1" ] && return - config_get port $1 server_port + config_get port sss0 server_port #config_get server $1 server - config_get key $1 key + config_get key sss0 key key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" [ -z "$key" ] && return - config_get method $1 method + config_get method sss0 method local current_port current_key current_method [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -1562,8 +1563,9 @@ _config_service() { [ -n "$vps_config" ] && uci -q set openmptcprouter.settings.firstboot=0 fi if [ "$user_permission" != "ro" ]; then - config_load shadowsocks-libev - config_foreach _set_ss_server_vps server + #config_load shadowsocks-libev + #config_foreach _set_ss_server_vps server + _set_ss_server_vps _set_v2ray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 From 1bc14fdbde06814d3d2f2ddba2043aa127bf1349 Mon Sep 17 00:00:00 2001 From: Giuseppe Dipierro Date: Tue, 1 Dec 2020 10:21:17 +0000 Subject: [PATCH 170/289] Translated using Weblate (Italian) Currently translated at 98.7% (237 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/it/ --- luci-app-openmptcprouter/po/it/openmptcprouter.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index 0a900f075..e11809c0e 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-10-21 12:55+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-12-01 10:49+0000\n" +"Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" "Language: it\n" @@ -981,7 +981,7 @@ msgstr "Traffico VPN:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 msgid "VPN tunnel DOWN" -msgstr "Tunnel VPN GIÙ" +msgstr "Tunnel VPN non stabilito" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "VPS settings" From d1e4d0f73948f6483d28b881c322daab364ac1e3 Mon Sep 17 00:00:00 2001 From: Giuseppe Dipierro Date: Tue, 1 Dec 2020 10:12:14 +0000 Subject: [PATCH 171/289] Translated using Weblate (Italian) Currently translated at 100.0% (6 of 6 strings) Translation: OpenMPTCProuter/LuCI/applications/shutdown Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsshutdown/it/ --- luci-app-shutdown/po/it/shutdown.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-shutdown/po/it/shutdown.po b/luci-app-shutdown/po/it/shutdown.po index 500e9eba6..03ca58813 100644 --- a/luci-app-shutdown/po/it/shutdown.po +++ b/luci-app-shutdown/po/it/shutdown.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-09-15 11:36+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-12-01 10:49+0000\n" +"Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" "Language: it\n" @@ -21,11 +21,11 @@ msgstr "Eseguire l'arresto" #: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:9 #: luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json:3 msgid "Shutdown" -msgstr "Spegnimento" +msgstr "Spegni" #: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:10 msgid "Shutdown the operating system of your device" -msgstr "Arresta il sistema operativo del tuo dispositivo" +msgstr "Arresta il dispositivo" #: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:31 msgid "The poweroff command failed with code %d" From 07a3b6e4c3790fb0ab0015f518c20ad2002459ef Mon Sep 17 00:00:00 2001 From: Giuseppe Dipierro Date: Tue, 1 Dec 2020 10:13:33 +0000 Subject: [PATCH 172/289] Translated using Weblate (Italian) Currently translated at 100.0% (11 of 11 strings) Translation: OpenMPTCProuter/LuCI/applications/mail Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmail/it/ --- luci-app-mail/po/it/mail.po | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/luci-app-mail/po/it/mail.po b/luci-app-mail/po/it/mail.po index 524ba6ee2..fd43053e7 100644 --- a/luci-app-mail/po/it/mail.po +++ b/luci-app-mail/po/it/mail.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-09-21 12:51+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-12-01 10:49+0000\n" +"Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" "Language: it\n" @@ -14,7 +14,7 @@ msgid "From" msgstr "Da" msgid "Mail settings" -msgstr "Impostazioni mail" +msgstr "Configurazione mail" msgid "Password" msgstr "Password" @@ -32,9 +32,7 @@ msgid "Server" msgstr "Server" msgid "Set mail settings for services that need to send mails." -msgstr "" -"Configurare le impostazioni di posta per i servizi che devono inviare " -"messaggi di posta elettronica." +msgstr "Configurazione del server mail da utilizzare per inviare alert." msgid "TLS" msgstr "TLS" From 1f3ebf9fd77c373f4166ddeca4b724a1ee89c85f Mon Sep 17 00:00:00 2001 From: Giuseppe Dipierro Date: Tue, 1 Dec 2020 10:19:07 +0000 Subject: [PATCH 173/289] Translated using Weblate (Italian) Currently translated at 96.4% (54 of 56 strings) Translation: OpenMPTCProuter/LuCI/applications/mptcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmptcp/it/ --- luci-app-mptcp/po/it/mptcp.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-mptcp/po/it/mptcp.po b/luci-app-mptcp/po/it/mptcp.po index 9302b4a4c..272ac94dc 100644 --- a/luci-app-mptcp/po/it/mptcp.po +++ b/luci-app-mptcp/po/it/mptcp.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-10-02 08:44+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-12-01 10:49+0000\n" +"Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" "Language: it\n" @@ -164,7 +164,7 @@ msgstr "Un'interfaccia deve essere impostata come master" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:939 msgid "Outbound:" -msgstr "In uscita:" +msgstr "Upload:" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:323 #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326 @@ -193,7 +193,7 @@ msgstr "Test" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914 msgid "Upload:" -msgstr "Carica:" +msgstr "Upload:" #: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:21 #: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:21 From f13bdd001f1b8aa97c5957471a9a2592da99b966 Mon Sep 17 00:00:00 2001 From: Giuseppe Dipierro Date: Tue, 1 Dec 2020 16:35:42 +0000 Subject: [PATCH 174/289] Translated using Weblate (Italian) Currently translated at 98.7% (237 of 240 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/it/ --- luci-app-openmptcprouter/po/it/openmptcprouter.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index e11809c0e..9cdcf0e42 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-12-01 10:49+0000\n" +"PO-Revision-Date: 2020-12-01 17:19+0000\n" "Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" @@ -1006,7 +1006,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" -msgstr "Mago" +msgstr "Wizard" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 From 2df8bdf0529e68686d0262653d07fade83dc65e7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:21:43 +0100 Subject: [PATCH 175/289] New interface for dsvpn VPN --- dsvpn/files/init | 14 ++-- luci-app-dsvpn/Makefile | 4 +- .../resources/view/services/dsvpn.js | 66 +++++++++++++++++++ luci-app-dsvpn/luasrc/controller/dsvpn.lua | 7 -- luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua | 44 ------------- luci-app-dsvpn/po/de/dsvpn.po | 50 -------------- luci-app-dsvpn/po/fr/dsvpn.po | 53 --------------- luci-app-dsvpn/po/it/dsvpn.po | 50 -------------- luci-app-dsvpn/po/oc/dsvpn.po | 50 -------------- luci-app-dsvpn/po/templates/dsvpn.pot | 41 ------------ luci-app-dsvpn/po/zh_Hans/dsvpn.po | 50 -------------- luci-app-dsvpn/po/zh_Hant/dsvpn.po | 50 -------------- .../usr/share/luci/menu.d/luci-app-dsvpn.json | 6 +- .../usr/share/rpcd/acl.d/luci-app-dsvpn.json | 2 +- 14 files changed, 81 insertions(+), 406 deletions(-) create mode 100644 luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js delete mode 100644 luci-app-dsvpn/luasrc/controller/dsvpn.lua delete mode 100644 luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua delete mode 100644 luci-app-dsvpn/po/de/dsvpn.po delete mode 100644 luci-app-dsvpn/po/fr/dsvpn.po delete mode 100644 luci-app-dsvpn/po/it/dsvpn.po delete mode 100644 luci-app-dsvpn/po/oc/dsvpn.po delete mode 100644 luci-app-dsvpn/po/templates/dsvpn.pot delete mode 100644 luci-app-dsvpn/po/zh_Hans/dsvpn.po delete mode 100644 luci-app-dsvpn/po/zh_Hant/dsvpn.po diff --git a/dsvpn/files/init b/dsvpn/files/init index 73a3457a3..250c409df 100755 --- a/dsvpn/files/init +++ b/dsvpn/files/init @@ -24,7 +24,9 @@ validate_section() { 'port:port' \ 'dev:string' \ 'localip:host' \ - 'remoteip:host' + 'remoteip:host' \ + 'mode:string:client' \ + 'externalip:string:auto' } start_instance() { @@ -39,7 +41,8 @@ start_instance() { [ -n "${key}" ] || return 1 [ "${key}" != "secretkey" ] || return 1 - [ -n "${port}" ] || return 1 + [ -z "${host}" ] && host="auto" + [ -z "${port}" ] && port="auto" [ -n "${dev}" ] || return 1 echo "${key}" > /tmp/${PROG_NAME}-${1}.key @@ -57,14 +60,15 @@ start_instance() { procd_open_instance - procd_set_param command ${PROG} client \ + procd_set_param command ${PROG} ${mode} \ /tmp/${PROG_NAME}-${1}.key \ $host \ $port \ $dev \ ${localip:+$localip} \ - ${remoteip:+$remoteip} \ - $(ip r get $host | awk '{print $3}' | tr -d "\n") + ${remoteip:+$remoteip} + [ "$mode" = "client" ] && procd_append_param command $(ip r get $host | awk '{print $3}' | tr -d "\n") + [ "$mode" = "server" ] && procd_append_param command externalip procd_set_param respawn 0 30 5 diff --git a/luci-app-dsvpn/Makefile b/luci-app-dsvpn/Makefile index d78150d98..cc5052f9d 100644 --- a/luci-app-dsvpn/Makefile +++ b/luci-app-dsvpn/Makefile @@ -1,11 +1,11 @@ # -# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) # # include $(TOPDIR)/rules.mk -LUCI_TITLE:=LuCI Support for DSVPN +LUCI_TITLE:=LuCI Interface to DSVPN LUCI_DEPENDS:=+dsvpn PKG_LICENSE:=GPLv3 diff --git a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js new file mode 100644 index 000000000..2f737b571 --- /dev/null +++ b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js @@ -0,0 +1,66 @@ +'use strict'; +'require rpc'; +'require form'; +'require fs'; +'require uci'; +'require tools.widgets as widgets'; + +var callHostHints; + +return L.view.extend({ + callHostHints: rpc.declare({ + object: 'luci-rpc', + method: 'getHostHints', + expect: { '': {} } + }), + + load: function() { + return this.callHostHints(); + }, + + render: function(hosts) { + var m, s, o; + + m = new form.Map('dsvpn', _('DSVPN')); + + s = m.section(form.GridSection, 'dsvpn', _('Instances')); + s.addremove = true; + s.anonymous = true; + s.nodescriptions = true; + + o = s.option(form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; + + o = s.option(form.ListValue, 'mode', _('Mode')); + o.value('client',_('Client')); + o.value('server',_('Server')); + o.modalonly = true; + + o = s.option(form.Value, 'host', _('Host')); + o.rmempty = false; + + o = s.option(form.Value, 'port', _('Port')); + o.rmempty = false; + + o = s.option(form.Value, 'key', _('Key')); + o.rmempty = false; + o.modalonly = true; + + o = s.option(form.Value, 'dev', _('Interface name')); + o.rmempty = false; + o.modalonly = true; + + o = s.option(form.Value, 'localip', _('Local IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.option(form.Value, 'remoteip', _('Remote IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.option(form.Value, 'label', _('Label')); + o.rmempty = true; + + return m.render(); + } +}); diff --git a/luci-app-dsvpn/luasrc/controller/dsvpn.lua b/luci-app-dsvpn/luasrc/controller/dsvpn.lua deleted file mode 100644 index 99793584a..000000000 --- a/luci-app-dsvpn/luasrc/controller/dsvpn.lua +++ /dev/null @@ -1,7 +0,0 @@ -module("luci.controller.dsvpn", package.seeall) - -function index() - --entry({"admin", "openmptcprouter", "mlvpn"}, cbi("mlvpn"), _("DSVPN")) - --entry({"admin", "services", "dsvpn"}, cbi("dsvpn"), _("DSVPN")) - entry({"admin", "vpn", "dsvpn"}, cbi("dsvpn"), _("DSVPN")) -end diff --git a/luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua b/luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua deleted file mode 100644 index d0c6a3141..000000000 --- a/luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua +++ /dev/null @@ -1,44 +0,0 @@ -local net = require "luci.model.network".init() -local sys = require "luci.sys" -local ifaces = sys.net:devices() -local m, s, o - -m = Map("dsvpn", translate("DSVPN")) - -s = m:section(TypedSection, "dsvpn", translate("Settings")) -s.anonymous = true -s.addremove = false - -o = s:option(Flag, "enable", translate("Enable")) -o.rmempty = false - -o = s:option(Value, "host", translate("Remote host")) -o.placeholder = "128.128.128.128" -o.default = "128.128.128.128" -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "port", translate("Remote port")) -o.placeholder = "65011" -o.default = "65011" -o.datatype = "port" - -o = s:option(Value, "key", translate("Key")) -o.password = true -o.rmempty = false - - -o = s:option(Value, "localip", translate("Tunnel local IP")) -o.default = "10.255.251.2" -o.datatype = "host" - -o = s:option(Value, "remoteip", translate("Tunnel remote IP")) -o.default = "10.255.251.1" -o.datatype = "host" - -o = s:option(Value, "dev", translate("Interface name")) -o.placeholder = "tun0" -o.default = "tun0" -o.rmempty = false - -return m diff --git a/luci-app-dsvpn/po/de/dsvpn.po b/luci-app-dsvpn/po/de/dsvpn.po deleted file mode 100644 index 4bea475af..000000000 --- a/luci-app-dsvpn/po/de/dsvpn.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-10-05 12:39+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: German \n" -"Language: de\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.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DSVPN" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "Aktivieren" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "Name der Verbindung" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "Schlüssel" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "Gegenstelle (FQDN oder IP-Adresse)" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "Port der Gegenstelle" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "Einstellungen" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "Lokale Tunnel-IP" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "Gegenstellen-Tunnel-IP" diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po deleted file mode 100644 index 8f06d0390..000000000 --- a/luci-app-dsvpn/po/fr/dsvpn.po +++ /dev/null @@ -1,53 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-30 08:50+0000\n" -"Last-Translator: Anonymous \n" -"Language-Team: French \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 4.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DSVPN" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "Activer" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "Nom de l'interface" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "Clé" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "Nom de l'hôte distant ou adresse IP" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "Port distant" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "Paramètres" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "Adresse IP locale du tunnel" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "Adresse IP distance du tunnel" diff --git a/luci-app-dsvpn/po/it/dsvpn.po b/luci-app-dsvpn/po/it/dsvpn.po deleted file mode 100644 index dd2cd86a2..000000000 --- a/luci-app-dsvpn/po/it/dsvpn.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-09-21 12:51+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: Italian \n" -"Language: it\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.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DSVPN" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "Attivare" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "Nome interfaccia" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "Key" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "Rimuovi server" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "Porta remota" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "Impostazioni" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "IP locale del tunnel" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "IP remoto del tunnel" diff --git a/luci-app-dsvpn/po/oc/dsvpn.po b/luci-app-dsvpn/po/oc/dsvpn.po deleted file mode 100644 index 4a806fe56..000000000 --- a/luci-app-dsvpn/po/oc/dsvpn.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-08-18 17:37+0000\n" -"Last-Translator: Quentin PAGÈS \n" -"Language-Team: Occitan \n" -"Language: oc\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.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DSVPN" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "Activat" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "Nom de l’interfàcia" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "Clau" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "Nom de l’òste distant o adreça IP" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "Pòrt distant" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "Paramètres" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "Adreça IP locala del tunèl" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "Adreça IP distanta del tunèl" diff --git a/luci-app-dsvpn/po/templates/dsvpn.pot b/luci-app-dsvpn/po/templates/dsvpn.pot deleted file mode 100644 index bc26ff694..000000000 --- a/luci-app-dsvpn/po/templates/dsvpn.pot +++ /dev/null @@ -1,41 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "" diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po deleted file mode 100644 index f847c0504..000000000 --- a/luci-app-dsvpn/po/zh_Hans/dsvpn.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-06-11 16:36+0000\n" -"Last-Translator: antrouter \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DS虚拟专网" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "开启" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "网卡名称" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "秘钥" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "远程主机" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "远程端口" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "设置" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "隧道本地IP" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "隧道远程IP" diff --git a/luci-app-dsvpn/po/zh_Hant/dsvpn.po b/luci-app-dsvpn/po/zh_Hant/dsvpn.po deleted file mode 100644 index 858741a28..000000000 --- a/luci-app-dsvpn/po/zh_Hant/dsvpn.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-07-09 07:31+0000\n" -"Last-Translator: antrouter \n" -"Language-Team: Chinese (Traditional) \n" -"Language: zh_Hant\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" - -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5 -#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6 -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6 -msgid "DSVPN" -msgstr "DS虛擬專用網" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12 -msgid "Enable" -msgstr "啟用" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39 -msgid "Interface name" -msgstr "接口名稱" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26 -msgid "Key" -msgstr "秘鑰" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15 -msgid "Remote host" -msgstr "遠程主機" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21 -msgid "Remote port" -msgstr "遠端埠" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8 -msgid "Settings" -msgstr "設定" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31 -msgid "Tunnel local IP" -msgstr "隧道本地IP" - -#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35 -msgid "Tunnel remote IP" -msgstr "隧道遠程IP" diff --git a/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json b/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json index 257a29fab..49ebec311 100644 --- a/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json +++ b/luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json @@ -1,10 +1,10 @@ { "admin/vpn/dsvpn": { "title": "DSVPN", - "order": 10, + "order": 60, "action": { - "type": "cbi", - "path": "dsvpn" + "type": "view", + "path": "services/dsvpn" }, "depends": { "acl": [ "luci-app-dsvpn" ] diff --git a/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json b/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json index c4c7f00c9..e11c9127c 100644 --- a/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json +++ b/luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json @@ -1,6 +1,6 @@ { "luci-app-dsvpn": { - "description": "Grant UCI access for luci-app-dsvpn", + "description": "Grant access to DSVPN", "read": { "uci": [ "dsvpn" ] }, From 4a825c5650fffe9fddce96c264fefac6152f3cd9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:22:39 +0100 Subject: [PATCH 176/289] New interface for mlvpn VPN --- luci-app-mlvpn/Makefile | 6 +- .../resources/view/services/mlvpn.js | 83 +++++++++++++++++++ luci-app-mlvpn/luasrc/controller/mlvpn.lua | 7 -- luci-app-mlvpn/luasrc/model/cbi/mlvpn.lua | 77 ----------------- .../luasrc/view/mlvpn/cbi-select-add.htm | 10 --- luci-app-mlvpn/po/de/mlvpn.po | 59 ------------- luci-app-mlvpn/po/fr/mlvpn.po | 62 -------------- luci-app-mlvpn/po/it/mlvpn.po | 59 ------------- luci-app-mlvpn/po/templates/mlvpn.pot | 50 ----------- luci-app-mlvpn/po/zh_Hans/mlvpn.po | 59 ------------- .../usr/share/luci/menu.d/luci-app-mlvpn.json | 4 +- 11 files changed, 88 insertions(+), 388 deletions(-) create mode 100644 luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js delete mode 100644 luci-app-mlvpn/luasrc/controller/mlvpn.lua delete mode 100644 luci-app-mlvpn/luasrc/model/cbi/mlvpn.lua delete mode 100644 luci-app-mlvpn/luasrc/view/mlvpn/cbi-select-add.htm delete mode 100644 luci-app-mlvpn/po/de/mlvpn.po delete mode 100644 luci-app-mlvpn/po/fr/mlvpn.po delete mode 100644 luci-app-mlvpn/po/it/mlvpn.po delete mode 100644 luci-app-mlvpn/po/templates/mlvpn.pot delete mode 100644 luci-app-mlvpn/po/zh_Hans/mlvpn.po diff --git a/luci-app-mlvpn/Makefile b/luci-app-mlvpn/Makefile index 33548c8e9..80d97c856 100644 --- a/luci-app-mlvpn/Makefile +++ b/luci-app-mlvpn/Makefile @@ -1,12 +1,12 @@ # -# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) # # include $(TOPDIR)/rules.mk -LUCI_TITLE:=LuCI Support for MLVPN -LUCI_DEPENDS:=+mlvpn +LUCI_TITLE:=LuCI Interface to Glorytun TCP +LUCI_DEPENDS:=+glorytun PKG_LICENSE:=GPLv3 diff --git a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js new file mode 100644 index 000000000..8dcfb422b --- /dev/null +++ b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js @@ -0,0 +1,83 @@ +'use strict'; +'require rpc'; +'require form'; +'require fs'; +'require uci'; +'require tools.widgets as widgets'; + +var callHostHints; + +return L.view.extend({ + callHostHints: rpc.declare({ + object: 'luci-rpc', + method: 'getHostHints', + expect: { '': {} } + }), + + load: function() { + return this.callHostHints(); + }, + + render: function(hosts) { + var m, s, o; + + m = new form.Map('mlvpn', _('MLVPN')); + + s = m.section(form.GridSection, 'mlvpn', _('Instances')); + s.addremove = true; + s.anonymous = true; + s.nodescriptions = true; + + s.tab('general', _('General Settings')); + s.tab('advanced', _('Advanced Settings')); + + o = s.taboption('general', form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; + + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); + o.value('client',_('Client')); + o.value('server',_('Server')); + o.modalonly = true; + + o = s.taboption('general', form.Value, 'host', _('Host')); + o.rmempty = false; + + o = s.taboption('general', form.Value, 'firstport', _('First Port')); + o.default = "65201" + o.datatype = "port" + o.rmempty = false; + + o = s.taboption('general', form.Value, 'password', _('Password')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general', form.Value, 'interface_name', _('Interface name')); + o.default = "mlvpn0" + o.placeholder = "mlvpn0" + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'timeout', _('Timeout (s)')); + o.default = '30'; + o.datatype = "uinteger" + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'reorder_buffer_size', _('Reorder buffer size')); + o.default = '128'; + o.datatype = "uinteger" + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'loss_tolerance', _('Loss tolerance')); + o.default = '50'; + o.datatype = "uinteger" + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + + return m.render(); + } +}); diff --git a/luci-app-mlvpn/luasrc/controller/mlvpn.lua b/luci-app-mlvpn/luasrc/controller/mlvpn.lua deleted file mode 100644 index 154222265..000000000 --- a/luci-app-mlvpn/luasrc/controller/mlvpn.lua +++ /dev/null @@ -1,7 +0,0 @@ -module("luci.controller.mlvpn", package.seeall) - -function index() - --entry({"admin", "openmptcprouter", "mlvpn"}, cbi("mlvpn"), _("MLVPN")) - --entry({"admin", "services", "mlvpn"}, cbi("mlvpn"), _("MLVPN")) - entry({"admin", "vpn", "mlvpn"}, cbi("mlvpn"), _("MLVPN")) -end diff --git a/luci-app-mlvpn/luasrc/model/cbi/mlvpn.lua b/luci-app-mlvpn/luasrc/model/cbi/mlvpn.lua deleted file mode 100644 index eaef23d7e..000000000 --- a/luci-app-mlvpn/luasrc/model/cbi/mlvpn.lua +++ /dev/null @@ -1,77 +0,0 @@ -local net = require "luci.model.network".init() -local sys = require "luci.sys" -local ifaces = sys.net:devices() -local m, s, o - -m = Map("mlvpn", translate("MLVPN")) - -s = m:section(TypedSection, "mlvpn", translate("Settings")) -s.anonymous = true -s.addremove = false - -o = s:option(Flag, "enable", translate("Enable")) -o.rmempty = false - -o = s:option(Value, "timeout", translate("Timeout (s)")) -o.placeholder = "30" -o.default = "30" -o.datatype = "uinteger" -o.rmempty = false - -o = s:option(Value, "reorder_buffer_size", translate("Reorder buffer size")) -o.placeholder = "64" -o.default = "64" -o.datatype = "uinteger" -o.rmempty = false - -o = s:option(Value, "loss_tolerance", translate("Loss tolerance")) -o.placeholder = "50" -o.default = "50" -o.datatype = "uinteger" -o.rmempty = false - -o = s:option(Value, "host", translate("Remote host")) -o.placeholder = "128.128.128.128" -o.default = "128.128.128.128" -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "firstport", translate("First remote port"),translate("Interface will increase port used beginning with this")) -o.default = "65201" -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = false - - -o = s:option(Value, "interface_name", translate("Interface name")) -o.placeholder = "mlvpn0" -o.default = "mlvpn0" -o.rmempty = false - ---o = s:option(Value, "mode", translate("Mode")) ---o:value("client") ---o:value("server") ---o.default = "client" ---o.rmempty = false - - ---s = m:section(TypedSection, "interface", translate("Interfaces")) ---s.template_addremove = "mlvpn/cbi-select-add" ---s.addremove = true ---s.add_select_options = { } ---s.add_select_options[''] = '' ---for _, iface in ipairs(ifaces) do --- if not (iface == "lo" or iface:match("^ifb.*")) then --- s.add_select_options[iface] = iface --- end ---end - ---o = s:option(Value, "port", translate("Remote/Bind port")) ---o.placeholder = "65201" ---o.default = "65201" ---o.datatype = "port" - -return m diff --git a/luci-app-mlvpn/luasrc/view/mlvpn/cbi-select-add.htm b/luci-app-mlvpn/luasrc/view/mlvpn/cbi-select-add.htm deleted file mode 100644 index 97ee647d2..000000000 --- a/luci-app-mlvpn/luasrc/view/mlvpn/cbi-select-add.htm +++ /dev/null @@ -1,10 +0,0 @@ -
- <% if self.invalid_cts then -%>
<% end %> - - - <% if self.invalid_cts then %>
<%:Invalid%>
<% end %> -
diff --git a/luci-app-mlvpn/po/de/mlvpn.po b/luci-app-mlvpn/po/de/mlvpn.po deleted file mode 100644 index f60844ce4..000000000 --- a/luci-app-mlvpn/po/de/mlvpn.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-10-05 12:39+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: German \n" -"Language: de\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.0.4\n" - -msgid "Add" -msgstr "Hinzufügen" - -msgid "Enable" -msgstr "Aktivieren" - -msgid "First remote port" -msgstr "Erster Gegenstellen-Port" - -msgid "Interface name" -msgstr "Name der Verbindung" - -msgid "Interface will increase port used beginning with this" -msgstr "Der Anschluss wird die Pornummern nutzen beginnend mit diesem Wert" - -msgid "Interfaces" -msgstr "Anschlüsse" - -msgid "Invalid" -msgstr "Ungültig" - -msgid "Loss tolerance" -msgstr "Verlust-Toleranz" - -msgid "MLVPN" -msgstr "MLVPN" - -msgid "Mode" -msgstr "Betriebsmodus" - -msgid "Password" -msgstr "Schlüssel" - -msgid "Remote host" -msgstr "Gegenstelle (FQDN oder IP-Adresse)" - -msgid "Remote/Bind port" -msgstr "Portnummer der Gegenstelle" - -msgid "Reorder buffer size" -msgstr "Größe des Sortierpuffers" - -msgid "Settings" -msgstr "Einstellungen" - -msgid "Timeout (s)" -msgstr "Wartezeit (in Sekunden)" diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po deleted file mode 100644 index af2708373..000000000 --- a/luci-app-mlvpn/po/fr/mlvpn.po +++ /dev/null @@ -1,62 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-07 10:57+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: French \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 4.0.4\n" - -msgid "Add" -msgstr "Ajouter" - -msgid "Enable" -msgstr "Activer" - -msgid "First remote port" -msgstr "Premier port distant" - -msgid "Interface name" -msgstr "Nom de l'interface" - -msgid "Interface will increase port used beginning with this" -msgstr "L'interface augmentera le port utilisé à partir de celui ci" - -msgid "Interfaces" -msgstr "Interfaces" - -msgid "Invalid" -msgstr "Invalide" - -msgid "Loss tolerance" -msgstr "Tolérance aux pertes" - -msgid "MLVPN" -msgstr "MLVPN" - -msgid "Mode" -msgstr "Mode" - -msgid "Password" -msgstr "Mot de passe" - -msgid "Remote host" -msgstr "Nom de l'hôte distant ou adresse IP" - -msgid "Remote/Bind port" -msgstr "Port de connexion distant" - -msgid "Reorder buffer size" -msgstr "Taille du tampon de réordonnancement" - -msgid "Settings" -msgstr "Paramètres" - -msgid "Timeout (s)" -msgstr "Délais d'attente (s)" diff --git a/luci-app-mlvpn/po/it/mlvpn.po b/luci-app-mlvpn/po/it/mlvpn.po deleted file mode 100644 index f7c495c5c..000000000 --- a/luci-app-mlvpn/po/it/mlvpn.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-09-21 12:51+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: Italian \n" -"Language: it\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.0.4\n" - -msgid "Add" -msgstr "Aggiungi" - -msgid "Enable" -msgstr "Attivare" - -msgid "First remote port" -msgstr "Prima porta remota" - -msgid "Interface name" -msgstr "Nome interfaccia" - -msgid "Interface will increase port used beginning with this" -msgstr "L'interfaccia aumenterà la porta utilizzata a partire da questa" - -msgid "Interfaces" -msgstr "Interfaccia" - -msgid "Invalid" -msgstr "Non valido" - -msgid "Loss tolerance" -msgstr "Tolleranza alla perdita" - -msgid "MLVPN" -msgstr "MLVPN" - -msgid "Mode" -msgstr "Modo" - -msgid "Password" -msgstr "Password" - -msgid "Remote host" -msgstr "Rimuovi server" - -msgid "Remote/Bind port" -msgstr "Porta remota / Bind" - -msgid "Reorder buffer size" -msgstr "" - -msgid "Settings" -msgstr "Impostazioni" - -msgid "Timeout (s)" -msgstr "" diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot deleted file mode 100644 index 0eecd2f65..000000000 --- a/luci-app-mlvpn/po/templates/mlvpn.pot +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -msgid "Add" -msgstr "" - -msgid "Enable" -msgstr "" - -msgid "First remote port" -msgstr "" - -msgid "Interface name" -msgstr "" - -msgid "Interface will increase port used beginning with this" -msgstr "" - -msgid "Interfaces" -msgstr "" - -msgid "Invalid" -msgstr "" - -msgid "Loss tolerance" -msgstr "" - -msgid "MLVPN" -msgstr "" - -msgid "Mode" -msgstr "" - -msgid "Password" -msgstr "" - -msgid "Remote host" -msgstr "" - -msgid "Remote/Bind port" -msgstr "" - -msgid "Reorder buffer size" -msgstr "" - -msgid "Settings" -msgstr "" - -msgid "Timeout (s)" -msgstr "" diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po deleted file mode 100644 index eca37c59d..000000000 --- a/luci-app-mlvpn/po/zh_Hans/mlvpn.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-06-11 16:36+0000\n" -"Last-Translator: antrouter \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" - -msgid "Add" -msgstr "添加" - -msgid "Enable" -msgstr "开启" - -msgid "First remote port" -msgstr "第一个远程端口" - -msgid "Interface name" -msgstr "网卡名称" - -msgid "Interface will increase port used beginning with this" -msgstr "接口将从此开始增加使用的端口" - -msgid "Interfaces" -msgstr "网卡" - -msgid "Invalid" -msgstr "无效" - -msgid "Loss tolerance" -msgstr "损失容忍" - -msgid "MLVPN" -msgstr "MLVPN设置" - -msgid "Mode" -msgstr "模式" - -msgid "Password" -msgstr "密码" - -msgid "Remote host" -msgstr "远程主机" - -msgid "Remote/Bind port" -msgstr "远程/绑定端口" - -msgid "Reorder buffer size" -msgstr "重新排序缓冲区大小" - -msgid "Settings" -msgstr "设置" - -msgid "Timeout (s)" -msgstr "超时 (秒)" diff --git a/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json b/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json index 085d95305..90afc4494 100644 --- a/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json +++ b/luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json @@ -3,8 +3,8 @@ "title": "MLVPN", "order": 30, "action": { - "type": "cbi", - "path": "mlvpn" + "type": "view", + "path": "services/mlvpn" }, "depends": { "acl": [ "luci-app-mlvpn" ] From 9ceaa526a56020e77c5b8fb34e154d1c9c697419 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:23:34 +0100 Subject: [PATCH 177/289] New interface for Glorytun TCP VPN --- glorytun/glorytun.config | 3 +- glorytun/init | 9 +- luci-app-glorytun-tcp/Makefile | 16 ++ .../resources/view/services/glorytun-tcp.js | 87 +++++++++++ .../root/etc/hotplug.d/iface/30-glorytun | 0 .../root/etc/uci-defaults/1200-luci-glorytun | 0 .../luci/menu.d/luci-app-glorytun-tcp.json | 13 ++ .../rpcd/acl.d/luci-app-glorytun-tcp.json | 4 +- luci-app-glorytun/Makefile | 21 --- .../luasrc/controller/glorytun.lua | 14 -- .../luasrc/model/cbi/glorytun-settings.lua | 83 ---------- .../luasrc/model/cbi/glorytun.lua | 147 ------------------ .../view/glorytun/cbi-select-input-add.htm | 11 -- .../luasrc/view/glorytun/pageswitch.htm | 13 -- luci-app-glorytun/po/de/glorytun.po | 104 ------------- luci-app-glorytun/po/fr/glorytun.po | 104 ------------- luci-app-glorytun/po/it/glorytun.po | 104 ------------- luci-app-glorytun/po/oc/glorytun.po | 103 ------------ luci-app-glorytun/po/templates/glorytun.pot | 93 ----------- luci-app-glorytun/po/zh_Hans/glorytun.po | 102 ------------ luci-app-glorytun/po/zh_Hant/glorytun.po | 102 ------------ .../root/etc/config/glorytun_recipes | 50 ------ .../share/luci/menu.d/luci-app-glorytun.json | 13 -- 23 files changed, 125 insertions(+), 1071 deletions(-) create mode 100644 luci-app-glorytun-tcp/Makefile create mode 100644 luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js rename {luci-app-glorytun => luci-app-glorytun-tcp}/root/etc/hotplug.d/iface/30-glorytun (100%) rename {luci-app-glorytun => luci-app-glorytun-tcp}/root/etc/uci-defaults/1200-luci-glorytun (100%) create mode 100644 luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json rename luci-app-glorytun/root/usr/share/rpcd/acl.d/luci-app-glorytun.json => luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json (51%) delete mode 100644 luci-app-glorytun/Makefile delete mode 100644 luci-app-glorytun/luasrc/controller/glorytun.lua delete mode 100644 luci-app-glorytun/luasrc/model/cbi/glorytun-settings.lua delete mode 100644 luci-app-glorytun/luasrc/model/cbi/glorytun.lua delete mode 100644 luci-app-glorytun/luasrc/view/glorytun/cbi-select-input-add.htm delete mode 100644 luci-app-glorytun/luasrc/view/glorytun/pageswitch.htm delete mode 100644 luci-app-glorytun/po/de/glorytun.po delete mode 100644 luci-app-glorytun/po/fr/glorytun.po delete mode 100644 luci-app-glorytun/po/it/glorytun.po delete mode 100644 luci-app-glorytun/po/oc/glorytun.po delete mode 100644 luci-app-glorytun/po/templates/glorytun.pot delete mode 100644 luci-app-glorytun/po/zh_Hans/glorytun.po delete mode 100644 luci-app-glorytun/po/zh_Hant/glorytun.po delete mode 100644 luci-app-glorytun/root/etc/config/glorytun_recipes delete mode 100644 luci-app-glorytun/root/usr/share/luci/menu.d/luci-app-glorytun.json diff --git a/glorytun/glorytun.config b/glorytun/glorytun.config index 9ee6e41e6..33c93f36f 100644 --- a/glorytun/glorytun.config +++ b/glorytun/glorytun.config @@ -10,4 +10,5 @@ config glorytun 'vpn' option mtuauto '1' option localip '10.255.255.2' option remoteip '10.255.255.1' - option multiqueue '1' \ No newline at end of file + option multiqueue '1' + option label 'Default VPN' \ No newline at end of file diff --git a/glorytun/init b/glorytun/init index 5d0233157..f5b868323 100755 --- a/glorytun/init +++ b/glorytun/init @@ -22,17 +22,18 @@ validate_section() { uci_validate_section glorytun glorytun "${1}" \ 'enable:bool:0' \ 'mptcp:bool:0' \ - 'listener:bool:0' \ + 'mode:string' \ 'key:string' \ 'host:host' \ 'port:port' \ 'dev:string' \ + 'timeout:uinteger:10000' \ 'chacha20:bool:0' \ 'proto:string' } start_instance() { - local enable key host port dev listener mptcp proto chacha20 + local enable key host port dev mptcp proto chacha20 mode multiqueue timeout validate_section "${1}" || { _err "validation failed" @@ -71,14 +72,14 @@ start_instance() { ${host:+host "$host"} \ ${dev:+dev "$dev"} - [ "${listener}" = "1" ] && procd_append_param command listener + [ "${mode}" = "listener" ] && procd_append_param command listener [ "${mptcp}" = "1" ] && procd_append_param command mptcp [ "${chacha20}" = "1" ] && procd_append_param command chacha20 [ "${multiqueue}" = "1" ] && procd_append_param command multiqueue procd_append_param command \ retry count -1 const 500000 \ - timeout 10000 \ + timeout ${timeout} \ keepalive count 5 idle 20 interval 2 \ buffer-size 32768 diff --git a/luci-app-glorytun-tcp/Makefile b/luci-app-glorytun-tcp/Makefile new file mode 100644 index 000000000..80d97c856 --- /dev/null +++ b/luci-app-glorytun-tcp/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) +# +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Interface to Glorytun TCP +LUCI_DEPENDS:=+glorytun + +PKG_LICENSE:=GPLv3 + +#include ../luci/luci.mk +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js new file mode 100644 index 000000000..e4045f267 --- /dev/null +++ b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js @@ -0,0 +1,87 @@ +'use strict'; +'require rpc'; +'require form'; +'require fs'; +'require uci'; +'require tools.widgets as widgets'; + +var callHostHints; + +return L.view.extend({ + callHostHints: rpc.declare({ + object: 'luci-rpc', + method: 'getHostHints', + expect: { '': {} } + }), + + load: function() { + return this.callHostHints(); + }, + + render: function(hosts) { + var m, s, o; + + m = new form.Map('glorytun', _('Glorytun TCP')); + + s = m.section(form.GridSection, 'glorytun', _('Instances')); + s.addremove = true; + s.anonymous = true; + s.nodescriptions = true; + + s.tab('general', _('General Settings')); + s.tab('advanced', _('Advanced Settings')); + + o = s.taboption('general', form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; + + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); + o.value('',_('Client')); + o.value('listener',_('Server')); + o.modalonly = true; + + o = s.taboption('general', form.Value, 'host', _('Host')); + o.rmempty = false; + + o = s.taboption('general', form.Value, 'port', _('Port')); + o.rmempty = false; + + o = s.taboption('general', form.Value, 'key', _('Key')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general', form.Value, 'dev', _('Interface name')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general', form.Value, 'localip', _('Local IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.taboption('general', form.Value, 'remoteip', _('Remote IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.taboption('advanced', form.Flag, 'mptcp', _('MPTCP')); + o.default = o.enabled; + o.modalonly = true; + + o = s.taboption('advanced', form.Flag, 'chacha20', _('chacha'), _('Force fallback cipher')); + o.default = o.enabled; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'timeout', _('Timeout')); + o.default = '10000'; + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Flag, 'multiqueue', _('Multiqueue')); + o.default = o.enabled; + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + + return m.render(); + } +}); diff --git a/luci-app-glorytun/root/etc/hotplug.d/iface/30-glorytun b/luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun similarity index 100% rename from luci-app-glorytun/root/etc/hotplug.d/iface/30-glorytun rename to luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun diff --git a/luci-app-glorytun/root/etc/uci-defaults/1200-luci-glorytun b/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun similarity index 100% rename from luci-app-glorytun/root/etc/uci-defaults/1200-luci-glorytun rename to luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun diff --git a/luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json b/luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json new file mode 100644 index 000000000..03e7dcf7a --- /dev/null +++ b/luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json @@ -0,0 +1,13 @@ +{ + "admin/vpn/glorytun-tcp": { + "title": "Glorytun TCP", + "order": 60, + "action": { + "type": "view", + "path": "services/glorytun-tcp" + }, + "depends": { + "acl": [ "luci-app-glorytun-tcp" ] + } + } +} diff --git a/luci-app-glorytun/root/usr/share/rpcd/acl.d/luci-app-glorytun.json b/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json similarity index 51% rename from luci-app-glorytun/root/usr/share/rpcd/acl.d/luci-app-glorytun.json rename to luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json index 63a49918f..f4f288835 100644 --- a/luci-app-glorytun/root/usr/share/rpcd/acl.d/luci-app-glorytun.json +++ b/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json @@ -1,6 +1,6 @@ { - "luci-app-glorytun": { - "description": "Grant UCI access for luci-app-glorytun", + "luci-app-glorytun-tcp": { + "description": "Grant access to glorytun TCP", "read": { "uci": [ "glorytun" ] }, diff --git a/luci-app-glorytun/Makefile b/luci-app-glorytun/Makefile deleted file mode 100644 index b582773b2..000000000 --- a/luci-app-glorytun/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright (C) 2008-2014 The LuCI Team -# Copyright (C) 2017-2019 Ycarus (Yannick Chabanois) -# -# This is based on OpenVPN LuCI Support. -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for Glorytun -LUCI_DEPENDS:=+glorytun +glorytun-udp -LUCI_PKGARCH:=all -PKG_LICENSE:=GPLv2 - -PKG_MAINTAINER:=Ycarus (Yannick Chabanois) - -#include ../luci/luci.mk -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-glorytun/luasrc/controller/glorytun.lua b/luci-app-glorytun/luasrc/controller/glorytun.lua deleted file mode 100644 index c9917bb74..000000000 --- a/luci-app-glorytun/luasrc/controller/glorytun.lua +++ /dev/null @@ -1,14 +0,0 @@ --- Copyright 2018 - 2019 Ycarus (Yannick Chabanois) --- Licensed to the public under the Apache License 2.0. - -module("luci.controller.glorytun", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/glorytun") then - return - end - --entry({"admin", "services", "glorytun"}, cbi("glorytun"), _("Glorytun") ) - --entry({"admin", "services", "glorytun", "settings"}, cbi("glorytun-settings"), nil ).leaf = true - entry({"admin", "vpn", "glorytun"}, cbi("glorytun"), _("Glorytun") ) - entry({"admin", "vpn", "glorytun", "settings"}, cbi("glorytun-settings"), nil ).leaf = true -end diff --git a/luci-app-glorytun/luasrc/model/cbi/glorytun-settings.lua b/luci-app-glorytun/luasrc/model/cbi/glorytun-settings.lua deleted file mode 100644 index aab2f460c..000000000 --- a/luci-app-glorytun/luasrc/model/cbi/glorytun-settings.lua +++ /dev/null @@ -1,83 +0,0 @@ --- Copyright 2018 Ycarus (Yannick Chabanois) --- Copyright 2008 Steven Barth --- Licensed to the public under the Apache License 2.0. - -require("luci.ip") -require("luci.model.uci") - - -local basicParams = { - -- - -- Widget, Name, Default(s), Description - -- - - { Flag,"enable",0, translate("Enable") }, - { Value,"port",65001, translate("TCP port # for both local and remote") }, - { Value,"dev","tun0", translate("Interface name") }, - { Value,"host","vpnserver.example.org", translate("Remote host name or ip address") }, - { Value,"localip","192.168.99.2", translate("Local tunnel ip address") }, - { Value,"remoteip","192.168.99.1", translate("Remote tunnel ip address") }, - { Value,"key","secretkey", translate("The secret key") }, - { ListValue,"proto",{ "tcp", "udp" }, translate("Protocol") }, - { Flag,"listener",0, translate("Server mode") }, - - { Value,"bind","", translate("Bind address") }, - --{ Value,"bind-backup","", translate("Bind backup") }, - { Value,"bindport",65002, translate("Bind port") }, - { Value,"mtu",1500, translate("MTU") }, - { Flag,"mtuauto",0, translate("MTU auto") }, - - { Flag,"mptcp",0, translate("MPTCP") }, - { Flag,"chacha20",0, translate("Use ChaCha20 stream cipher") } -} - - -local m = Map("glorytun") -local p = m:section( SimpleSection ) - -p.template = "glorytun/pageswitch" -p.mode = "settings" -p.instance = arg[1] - - -local s = m:section( NamedSection, arg[1], "glorytun" ) - -for _, option in ipairs(basicParams) do - local o = s:option( - option[1], option[2], - option[2], option[4] - ) - - o.optional = true - - if option[1] == DummyValue then - o.value = option[3] - else - if option[1] == DynamicList then - function o.cfgvalue(...) - local val = AbstractValue.cfgvalue(...) - return ( val and type(val) ~= "table" ) and { val } or val - end - end - - if type(option[3]) == "table" then - if o.optional then o:value("", "-- remove --") end - for _, v in ipairs(option[3]) do - v = tostring(v) - o:value(v) - end - o.default = tostring(option[3][1]) - else - o.default = tostring(option[3]) - end - end - - for i=5,#option do - if type(option[i]) == "table" then - o:depends(option[i]) - end - end -end - -return m - diff --git a/luci-app-glorytun/luasrc/model/cbi/glorytun.lua b/luci-app-glorytun/luasrc/model/cbi/glorytun.lua deleted file mode 100644 index 1fb1b829e..000000000 --- a/luci-app-glorytun/luasrc/model/cbi/glorytun.lua +++ /dev/null @@ -1,147 +0,0 @@ --- Copyright 2018 Ycarus (Yannick Chabanois) --- Copyright 2008 Steven Barth --- Licensed to the public under the Apache License 2.0. - -local fs = require "nixio.fs" -local sys = require "luci.sys" -local uci = require "luci.model.uci".cursor() -local testfullps = luci.sys.exec("ps --help 2>&1 | grep BusyBox") --check which ps do we have -local psstring = (string.len(testfullps)>0) and "ps w" or "ps axfw" --set command we use to get pid - -local m = Map("glorytun", translate("Glorytun")) -local s = m:section( TypedSection, "glorytun", translate("Glorytun instances"), translate("Below is a list of configured Glorytun instances and their current state") ) -s.template = "cbi/tblsection" -s.template_addremove = "glorytun/cbi-select-input-add" -s.addremove = true -s.add_select_options = { } -s.add_select_options[''] = '' -s.extedit = luci.dispatcher.build_url( - "admin", "vpn", "glorytun", "settings", "%s" -) - -uci:load("glorytun_recipes") -uci:foreach( "glorytun_recipes", "glorytun_recipe", - function(section) - s.add_select_options[section['.name']] = - section['_description'] or section['.name'] - end -) - -function s.getPID(section) -- Universal function which returns valid pid # or nil - local pid = sys.exec("%s | grep -w %s | grep glorytun | grep -v grep | awk '{print $1}'" % { psstring,section} ) - if pid and #pid > 0 and tonumber(pid) ~= nil then - return tonumber(pid) - else - return nil - end -end - -function s.parse(self, section) - local recipe = luci.http.formvalue( - luci.cbi.CREATE_PREFIX .. self.config .. "." .. - self.sectiontype .. ".select" - ) - - if recipe and not s.add_select_options[recipe] then - self.invalid_cts = true - else - TypedSection.parse( self, section ) - end -end - -function s.create(self, name) - local recipe = luci.http.formvalue( - luci.cbi.CREATE_PREFIX .. self.config .. "." .. - self.sectiontype .. ".select" - ) - name = luci.http.formvalue( - luci.cbi.CREATE_PREFIX .. self.config .. "." .. - self.sectiontype .. ".text" - ) - if #name > 3 and not name:match("[^a-zA-Z0-9_]") then - --uci:section( - -- "glorytun", "glorytun", name, - -- uci:get_all( "glorytun_recipes", recipe ) - --) - local recipe_data = uci:get_all( "glorytun_recipes", recipe ) - uci:set("glorytun", name,"glorytun") - local k, v - for k, v in pairs(recipe_data) do - uci:set("glorytun", name, k,v) - end - - uci:delete("glorytun", name, "_role") - uci:delete("glorytun", name, "_description") - uci:commit("glorytun") - uci:save("glorytun") - - luci.http.redirect( self.extedit:format(name) ) - elseif #name > 0 then - self.invalid_cts = true - end - - return 0 -end - - -s:option( Flag, "enable", translate("Enabled") ) - -local active = s:option( DummyValue, "_active", translate("Started") ) -function active.cfgvalue(self, section) - local pid = s.getPID(section) - if pid ~= nil then - return (sys.process.signal(pid, 0)) - and translatef("yes (%i)", pid) - or translate("no") - end - return translate("no") -end - -local updown = s:option( Button, "_updown", translate("Start/Stop") ) -updown._state = false -updown.redirect = luci.dispatcher.build_url( - "admin", "vpn", "glorytun" -) -function updown.cbid(self, section) - local pid = s.getPID(section) - self._state = pid ~= nil and sys.process.signal(pid, 0) - self.option = self._state and "stop" or "start" - return AbstractValue.cbid(self, section) -end -function updown.cfgvalue(self, section) - self.title = self._state and "stop" or "start" - self.inputstyle = self._state and "reset" or "reload" -end - -local port = s:option( DummyValue, "port", translate("Port") ) -function port.cfgvalue(self, section) - local val = AbstractValue.cfgvalue(self, section) - return val or "65001" -end -local dev = s:option( DummyValue, "dev", translate("Interface") ) -function dev.cfgvalue(self, section) - local val = AbstractValue.cfgvalue(self, section) - return val or "tun" -end -local proto = s:option( DummyValue, "proto", translate("Protocol") ) -function proto.cfgvalue(self, section) - local val = AbstractValue.cfgvalue(self, section) - return val or "tcp" -end - -function updown.write(self, section, value) - if self.option == "stop" then - local pid = s.getPID(section) - if pid ~= nil then - sys.process.signal(pid,15) - end - else - local type = proto.cfgvalue(self,section) - luci.sys.call("/etc/init.d/glorytun-udp start %s" % section) - luci.sys.call("/etc/init.d/glorytun start %s" % section) - end - luci.http.redirect( self.redirect ) -end - - -return m diff --git a/luci-app-glorytun/luasrc/view/glorytun/cbi-select-input-add.htm b/luci-app-glorytun/luasrc/view/glorytun/cbi-select-input-add.htm deleted file mode 100644 index 898252325..000000000 --- a/luci-app-glorytun/luasrc/view/glorytun/cbi-select-input-add.htm +++ /dev/null @@ -1,11 +0,0 @@ -
- <% if self.invalid_cts then -%>
<% end %> - - - - <% if self.invalid_cts then %>
<%:Invalid%>
<% end %> -
diff --git a/luci-app-glorytun/luasrc/view/glorytun/pageswitch.htm b/luci-app-glorytun/luasrc/view/glorytun/pageswitch.htm deleted file mode 100644 index 652494e0c..000000000 --- a/luci-app-glorytun/luasrc/view/glorytun/pageswitch.htm +++ /dev/null @@ -1,13 +0,0 @@ -<%# - Copyright 2018 Ycarus (Yannick Chabanois) - Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -
- - <%:Overview%> » - <%=luci.i18n.translatef("Instance \"%s\"", self.instance)%> - -
diff --git a/luci-app-glorytun/po/de/glorytun.po b/luci-app-glorytun/po/de/glorytun.po deleted file mode 100644 index f3f01f7fd..000000000 --- a/luci-app-glorytun/po/de/glorytun.po +++ /dev/null @@ -1,104 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-10-05 12:39+0000\n" -"Last-Translator: Anonymous \n" -"Language-Team: German \n" -"Language: de\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.0.4\n" - -msgid "Add" -msgstr "Hinzufügen" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "" -"Nachfolgend eine Liste der konfigurierten Glorytun-Instanzen und ihre " -"aktuelle Status." - -msgid "Bind address" -msgstr "Bindungsadresse" - -msgid "Bind backup" -msgstr "Alternative Bindungsadresse" - -msgid "Bind port" -msgstr "Verbindungs-Port" - -msgid "Enable" -msgstr "Aktivieren" - -msgid "Enabled" -msgstr "Aktiv" - -msgid "Glorytun" -msgstr "Glorytun" - -msgid "Glorytun instances" -msgstr "Glorytun-Instanzen" - -msgid "Instance \"%s\"" -msgstr "Instanz '%s'" - -msgid "Interface" -msgstr "Schnittstelle" - -msgid "Interface name" -msgstr "Name der Verbindung" - -msgid "Invalid" -msgstr "Ungültig" - -msgid "Local tunnel ip address" -msgstr "IP-Adresse des lokalen Tunnels" - -msgid "MPTCP" -msgstr "MPTCP" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "automatische MTU" - -msgid "Overview" -msgstr "Übersicht" - -msgid "Port" -msgstr "Port" - -msgid "Protocol" -msgstr "Protokoll" - -msgid "Remote host name or ip address" -msgstr "FQDN oder IP-Adresse der Gegenstelle" - -msgid "Remote tunnel ip address" -msgstr "Tunnel-IP-Adresse der Gegenstelle" - -msgid "Server mode" -msgstr "Server-Modus" - -msgid "Start/Stop" -msgstr "Start/Stop" - -msgid "Started" -msgstr "gestartet" - -msgid "TCP port # for both local and remote" -msgstr "TCP-Port Nummer lokal und gegenüber" - -msgid "The secret key" -msgstr "geheimer Schlüssel" - -msgid "Use ChaCha20 stream cipher" -msgstr "Stromverschlüsselung 'ChaCha20' nutzen" - -msgid "no" -msgstr "nein" - -msgid "yes (%i)" -msgstr "ja (%i)" diff --git a/luci-app-glorytun/po/fr/glorytun.po b/luci-app-glorytun/po/fr/glorytun.po deleted file mode 100644 index 7b6b678ee..000000000 --- a/luci-app-glorytun/po/fr/glorytun.po +++ /dev/null @@ -1,104 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-07 10:57+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: French \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 4.0.4\n" - -msgid "Add" -msgstr "Ajouter" - -msgid "Below is a list of configured Glorytun instances and their current state" -msgstr "Ci-dessous une liste des instances Glorytun configurées et leur état actuel" - -msgid "Bind address" -msgstr "Adresse mappée" - -msgid "Bind backup" -msgstr "Lier la sauvegarde" - -msgid "Bind port" -msgstr "Port de connexion" - -msgid "Enable" -msgstr "Activer" - -msgid "Enabled" -msgstr "Activer" - -msgid "Glorytun" -msgstr "Glorytun" - -msgid "Glorytun instances" -msgstr "Instances de Glorytun" - -msgid "Instance \"%s\"" -msgstr "Instance \"%s\"" - -msgid "Interface" -msgstr "Interface" - -msgid "Interface name" -msgstr "Nom de l'interface" - -msgid "Invalid" -msgstr "Invalide" - -msgid "Local tunnel ip address" -msgstr "Adresse IP locale du tunnel" - -msgid "MPTCP" -msgstr "MPTCP" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "MTU auto" - -msgid "Overview" -msgstr "Aperçu" - -msgid "Port" -msgstr "Port" - -msgid "Protocol" -msgstr "Protocole" - -msgid "Remote host name or ip address" -msgstr "Nom de l'hôte distant ou adresse IP" - -msgid "Remote tunnel ip address" -msgstr "Adresse IP distance du tunnel" - -msgid "Server mode" -msgstr "Mode serveur" - -msgid "Start/Stop" -msgstr "Marche/Arrêt" - -msgid "Started" -msgstr "Démarré" - -msgid "TCP port # for both local and remote" -msgstr "Port TCP local et distant" - -msgid "The secret key" -msgstr "La clef secréte" - -msgid "Use ChaCha20 stream cipher" -msgstr "Utiliser le chiffrement ChaCha20" - -msgid "no" -msgstr "non" - -msgid "yes (%i)" -msgstr "oui (%i)" diff --git a/luci-app-glorytun/po/it/glorytun.po b/luci-app-glorytun/po/it/glorytun.po deleted file mode 100644 index 96ae2b091..000000000 --- a/luci-app-glorytun/po/it/glorytun.po +++ /dev/null @@ -1,104 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-09-21 12:51+0000\n" -"Last-Translator: Weblate Admin \n" -"Language-Team: Italian \n" -"Language: it\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.0.4\n" - -msgid "Add" -msgstr "Aggiungi" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "" -"Di seguito è riportato un elenco di istanze Glorytun configurate e il loro " -"stato corrente" - -msgid "Bind address" -msgstr "Associa indirizzo" - -msgid "Bind backup" -msgstr "Bind backup" - -msgid "Bind port" -msgstr "Bind port" - -msgid "Enable" -msgstr "Attivare" - -msgid "Enabled" -msgstr "Abilitato" - -msgid "Glorytun" -msgstr "Glorytun" - -msgid "Glorytun instances" -msgstr "Istanze di Glorytun" - -msgid "Instance \"%s\"" -msgstr "Istanza \"%s\"" - -msgid "Interface" -msgstr "Interfaccia" - -msgid "Interface name" -msgstr "Nome interfaccia" - -msgid "Invalid" -msgstr "Non valido" - -msgid "Local tunnel ip address" -msgstr "Indirizzo IP del tunnel locale" - -msgid "MPTCP" -msgstr "MPTCP" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "MTU auto" - -msgid "Overview" -msgstr "Panoramica" - -msgid "Port" -msgstr "Porta" - -msgid "Protocol" -msgstr "Protocollo" - -msgid "Remote host name or ip address" -msgstr "Nome host remoto o indirizzo IP" - -msgid "Remote tunnel ip address" -msgstr "Indirizzo IP del tunnel remoto" - -msgid "Server mode" -msgstr "Modalità server" - -msgid "Start/Stop" -msgstr "Marcia/arresto" - -msgid "Started" -msgstr "Iniziato" - -msgid "TCP port # for both local and remote" -msgstr "Porta TCP # sia per locale che per remoto" - -msgid "The secret key" -msgstr "Chiave segreta" - -msgid "Use ChaCha20 stream cipher" -msgstr "Usa il cifrario a flusso ChaCha20" - -msgid "no" -msgstr "no" - -msgid "yes (%i)" -msgstr "Sì (%i)" diff --git a/luci-app-glorytun/po/oc/glorytun.po b/luci-app-glorytun/po/oc/glorytun.po deleted file mode 100644 index be34c778d..000000000 --- a/luci-app-glorytun/po/oc/glorytun.po +++ /dev/null @@ -1,103 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-10-13 07:30+0000\n" -"Last-Translator: Quentin PAGÈS \n" -"Language-Team: Occitan \n" -"Language: oc\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.0.4\n" - -msgid "Add" -msgstr "Ajustar" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "" -"Çai-jos una lista de las instàncias Glorytun configuradas e lor estat actual" - -msgid "Bind address" -msgstr "Adreça mapada" - -msgid "Bind backup" -msgstr "Associar la salvagarda" - -msgid "Bind port" -msgstr "Pòrt de connexion" - -msgid "Enable" -msgstr "Activat" - -msgid "Enabled" -msgstr "Activat" - -msgid "Glorytun" -msgstr "Glorytun" - -msgid "Glorytun instances" -msgstr "Instàncias Glorytun" - -msgid "Instance \"%s\"" -msgstr "Instància « %s »" - -msgid "Interface" -msgstr "Interfàcia" - -msgid "Interface name" -msgstr "Nom de l’interfàcia" - -msgid "Invalid" -msgstr "Invalid" - -msgid "Local tunnel ip address" -msgstr "Adreça IP locala del tunèl" - -msgid "MPTCP" -msgstr "MPTCP" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "MTU auto" - -msgid "Overview" -msgstr "Apercebut" - -msgid "Port" -msgstr "Pòrt" - -msgid "Protocol" -msgstr "Protocòl" - -msgid "Remote host name or ip address" -msgstr "Nom de l’òste alonhat o adreça IP" - -msgid "Remote tunnel ip address" -msgstr "Adreça IP alonhada del tunèl" - -msgid "Server mode" -msgstr "Mòde servidor" - -msgid "Start/Stop" -msgstr "Aviar/Arrestar" - -msgid "Started" -msgstr "Aviat" - -msgid "TCP port # for both local and remote" -msgstr "Pòrt TCP local e alonhat" - -msgid "The secret key" -msgstr "La clau secrèta" - -msgid "Use ChaCha20 stream cipher" -msgstr "Utilizar lo chiframent ChaCha20" - -msgid "no" -msgstr "non" - -msgid "yes (%i)" -msgstr "òc (%i)" diff --git a/luci-app-glorytun/po/templates/glorytun.pot b/luci-app-glorytun/po/templates/glorytun.pot deleted file mode 100644 index 9c862bb47..000000000 --- a/luci-app-glorytun/po/templates/glorytun.pot +++ /dev/null @@ -1,93 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -msgid "Add" -msgstr "" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "" - -msgid "Bind address" -msgstr "" - -msgid "Bind backup" -msgstr "" - -msgid "Bind port" -msgstr "" - -msgid "Enable" -msgstr "" - -msgid "Enabled" -msgstr "" - -msgid "Glorytun" -msgstr "" - -msgid "Glorytun instances" -msgstr "" - -msgid "Instance \"%s\"" -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Interface name" -msgstr "" - -msgid "Invalid" -msgstr "" - -msgid "Local tunnel ip address" -msgstr "" - -msgid "MPTCP" -msgstr "" - -msgid "MTU" -msgstr "" - -msgid "MTU auto" -msgstr "" - -msgid "Overview" -msgstr "" - -msgid "Port" -msgstr "" - -msgid "Protocol" -msgstr "" - -msgid "Remote host name or ip address" -msgstr "" - -msgid "Remote tunnel ip address" -msgstr "" - -msgid "Server mode" -msgstr "" - -msgid "Start/Stop" -msgstr "" - -msgid "Started" -msgstr "" - -msgid "TCP port # for both local and remote" -msgstr "" - -msgid "The secret key" -msgstr "" - -msgid "Use ChaCha20 stream cipher" -msgstr "" - -msgid "no" -msgstr "" - -msgid "yes (%i)" -msgstr "" diff --git a/luci-app-glorytun/po/zh_Hans/glorytun.po b/luci-app-glorytun/po/zh_Hans/glorytun.po deleted file mode 100644 index 051d88490..000000000 --- a/luci-app-glorytun/po/zh_Hans/glorytun.po +++ /dev/null @@ -1,102 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" -"Last-Translator: antrouter \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" - -msgid "Add" -msgstr "添加" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "以下是已配置的Glorytun实例及其当前状态的列表" - -msgid "Bind address" -msgstr "绑定地址" - -msgid "Bind backup" -msgstr "绑定备份" - -msgid "Bind port" -msgstr "绑定端口" - -msgid "Enable" -msgstr "开启" - -msgid "Enabled" -msgstr "开启" - -msgid "Glorytun" -msgstr "Glorytun(隧道)" - -msgid "Glorytun instances" -msgstr "Glorytun实例" - -msgid "Instance \"%s\"" -msgstr "实例\"%s\"" - -msgid "Interface" -msgstr "接口" - -msgid "Interface name" -msgstr "网卡名称" - -msgid "Invalid" -msgstr "无效" - -msgid "Local tunnel ip address" -msgstr "本地隧道IP地址" - -msgid "MPTCP" -msgstr "MPTCP" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "自动MTU" - -msgid "Overview" -msgstr "概况" - -msgid "Port" -msgstr "端口" - -msgid "Protocol" -msgstr "协议" - -msgid "Remote host name or ip address" -msgstr "远程主机名或IP地址" - -msgid "Remote tunnel ip address" -msgstr "远程隧道IP地址" - -msgid "Server mode" -msgstr "服务器模式" - -msgid "Start/Stop" -msgstr "开始/停止" - -msgid "Started" -msgstr "开始了" - -msgid "TCP port # for both local and remote" -msgstr "本地和远程的TCP端口号" - -msgid "The secret key" -msgstr "秘钥" - -msgid "Use ChaCha20 stream cipher" -msgstr "使用ChaCha20流密码" - -msgid "no" -msgstr "不" - -msgid "yes (%i)" -msgstr "是(%i)" diff --git a/luci-app-glorytun/po/zh_Hant/glorytun.po b/luci-app-glorytun/po/zh_Hant/glorytun.po deleted file mode 100644 index 4a77f6410..000000000 --- a/luci-app-glorytun/po/zh_Hant/glorytun.po +++ /dev/null @@ -1,102 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2020-07-09 07:31+0000\n" -"Last-Translator: antrouter \n" -"Language-Team: Chinese (Traditional) \n" -"Language: zh_Hant\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" - -msgid "Add" -msgstr "添加" - -msgid "" -"Below is a list of configured Glorytun instances and their current state" -msgstr "以下是已配置的Glorytun實例及其當前狀態的列表" - -msgid "Bind address" -msgstr "綁定地址" - -msgid "Bind backup" -msgstr "綁定地址" - -msgid "Bind port" -msgstr "綁定端口" - -msgid "Enable" -msgstr "啟用" - -msgid "Enabled" -msgstr "啟用" - -msgid "Glorytun" -msgstr "Glorytun隧道" - -msgid "Glorytun instances" -msgstr "Glorytun實例" - -msgid "Instance \"%s\"" -msgstr "實例\"%s\"" - -msgid "Interface" -msgstr "接口" - -msgid "Interface name" -msgstr "接口名稱" - -msgid "Invalid" -msgstr "無效" - -msgid "Local tunnel ip address" -msgstr "本地隧道IP地址" - -msgid "MPTCP" -msgstr "MPTCP協議" - -msgid "MTU" -msgstr "MTU" - -msgid "MTU auto" -msgstr "自動MTU" - -msgid "Overview" -msgstr "總覽" - -msgid "Port" -msgstr "端口" - -msgid "Protocol" -msgstr "協議" - -msgid "Remote host name or ip address" -msgstr "遠程主機名或IP地址" - -msgid "Remote tunnel ip address" -msgstr "遠程隧道IP地址" - -msgid "Server mode" -msgstr "服務器模式" - -msgid "Start/Stop" -msgstr "開始/停止" - -msgid "Started" -msgstr "已開始" - -msgid "TCP port # for both local and remote" -msgstr "本地和遠程的TCP端口號" - -msgid "The secret key" -msgstr "秘鑰" - -msgid "Use ChaCha20 stream cipher" -msgstr "使用ChaCha20流密碼" - -msgid "no" -msgstr "沒有" - -msgid "yes (%i)" -msgstr "是(%i)" diff --git a/luci-app-glorytun/root/etc/config/glorytun_recipes b/luci-app-glorytun/root/etc/config/glorytun_recipes deleted file mode 100644 index 693eb6da6..000000000 --- a/luci-app-glorytun/root/etc/config/glorytun_recipes +++ /dev/null @@ -1,50 +0,0 @@ -config glorytun_recipe servertcp - option _description "Simple TCP server configuration" - option _role "server" - option port "65001" - option dev "tun0" - option key "secretkey" - option listener "1" - option localip "192.168.99.1" - option remoteip "192.168.99.2" - option proto "tcp" - option enable "0" - -config glorytun_recipe clienttcp - option _description "Simple TCP client configuration" - option _role "client" - option port "65001" - option dev "tun0" - option host "vpnserver.example.org" - option key "secretkey" - option localip "192.168.99.2" - option remoteip "192.168.99.1" - option proto "tcp" - option enable "0" - -config glorytun_recipe serverudp - option _description "Simple UDP server configuration" - option _role "server" - option dev "tun0" - option bindport "65003" - option bind "192.168.99.1" - option key "secretkey" - option localip "192.168.99.1" - option remoteip "192.168.99.2" - option proto "udp" - option mtuauto "1" - option enable "0" - -config glorytun_recipe clientudp - option _description "Simple UDP client configuration" - option _role "client" - option port "65003" - option dev "tun0" - option host "vpnserver.example.org" - option key "secretkey" - option localip "192.168.99.2" - option remoteip "192.168.99.1" - option proto "udp" - option mtuauto "1" - option enable "0" - diff --git a/luci-app-glorytun/root/usr/share/luci/menu.d/luci-app-glorytun.json b/luci-app-glorytun/root/usr/share/luci/menu.d/luci-app-glorytun.json deleted file mode 100644 index 414accf0b..000000000 --- a/luci-app-glorytun/root/usr/share/luci/menu.d/luci-app-glorytun.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "admin/vpn/glorytun": { - "title": "Glorytun", - "order": 20, - "action": { - "type": "cbi", - "path": "glorytun" - }, - "depends": { - "acl": [ "luci-app-glorytun" ] - } - } -} From e4103cea0317a699fd40fd988b8a3d1863ddde5e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:23:57 +0100 Subject: [PATCH 178/289] New interface for Glorytun UDP VPN --- glorytun-udp/init | 24 ++-- luci-app-glorytun-udp/Makefile | 16 +++ .../resources/view/services/glorytun-udp.js | 104 ++++++++++++++++++ .../root/etc/config/glorytun-udp | 10 ++ .../root/etc/hotplug.d/iface/30-glorytun-udp | 28 +++++ .../etc/uci-defaults/1201-luci-glorytun-udp | 47 ++++++++ .../luci/menu.d/luci-app-glorytun-udp.json | 13 +++ .../rpcd/acl.d/luci-app-glorytun-udp.json | 11 ++ 8 files changed, 239 insertions(+), 14 deletions(-) create mode 100644 luci-app-glorytun-udp/Makefile create mode 100644 luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js create mode 100644 luci-app-glorytun-udp/root/etc/config/glorytun-udp create mode 100644 luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp create mode 100644 luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp create mode 100644 luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json create mode 100644 luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json diff --git a/glorytun-udp/init b/glorytun-udp/init index b9a18c526..5bb5a9a5d 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : # Copyright (C) 2015 ovh.com -# Copyright (C) 2017 Ycarus (Yannick Chabanois) +# Copyright (C) 2017-2020 Ycarus (Yannick Chabanois) START=90 STOP=10 @@ -19,22 +19,20 @@ _err() { } validate_section() { - uci_validate_section glorytun glorytun "${1}" \ + uci_validate_section glorytun-udp glorytun-udp "${1}" \ 'enable:bool:0' \ + 'mode:string' \ 'key:string' \ 'host:host' \ 'port:port' \ 'proto:string' \ - 'bind:string:0.0.0.0' \ - 'bindport:port' \ - 'mtu:uinteger:1450' \ 'mtuauto:bool:0' \ - 'chacha20:bool:0' \ + 'chacha:bool:0' \ 'dev:string' } start_instance() { - local enable key host port listener proto bind bindport mtu mtuauto chacha20 dev + local enable key host port listener proto mtuauto chacha dev mode validate_section "${1}" || { _err "validation failed" @@ -42,12 +40,12 @@ start_instance() { } [ "${enable}" = "1" ] || return 1 - [ "${proto}" = "udp" ] || return 1 [ -n "${key}" ] || return 1 [ "${key}" != "secretkey" ] || return 1 [ -n "${port}" ] || return 1 [ -n "${dev}" ] || return 1 + [ -n "${mode}" ] || return 1 echo "${key}" > /tmp/${PROG_NAME}-${1}.key key="" @@ -62,15 +60,13 @@ start_instance() { procd_open_instance procd_set_param command ${PROG} \ - ${bind:+bind from "$bind"} \ - ${bindport:+port "$bindport"} \ - ${host:+to addr "$host"} \ + ${host:+bind ${mode} addr "$host"} \ ${port:+port "$port"} \ ${dev:+dev "$dev"} \ keyfile /tmp/${PROG_NAME}-${1}.key \ persist - [ "${chacha20}" = "1" ] && procd_append_param command chacha + [ "${chacha}" = "1" ] && procd_append_param command chacha procd_set_param respawn 0 30 0 procd_set_param file /tmp/${PROG_NAME}-${1}.key @@ -104,8 +100,8 @@ add_glorytun_path() { start_service() { local dev - config_load glorytun - config_foreach start_instance glorytun + config_load glorytun-udp + config_foreach start_instance glorytun-udp } reload_service() { diff --git a/luci-app-glorytun-udp/Makefile b/luci-app-glorytun-udp/Makefile new file mode 100644 index 000000000..97608e0e7 --- /dev/null +++ b/luci-app-glorytun-udp/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) +# +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Interface to Glorytun UDP +LUCI_DEPENDS:=+glorytun-udp + +PKG_LICENSE:=GPLv3 + +#include ../luci/luci.mk +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js new file mode 100644 index 000000000..2975af525 --- /dev/null +++ b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js @@ -0,0 +1,104 @@ +'use strict'; +'require rpc'; +'require poll'; +'require form'; +'require fs'; +'require uci'; +'require tools.widgets as widgets'; + +var callHostHints; + +var callServiceList = rpc.declare({ + object: 'service', + method: 'list', + params: [ 'name' ], + expect: { '': {} } +}); + +return L.view.extend({ + callHostHints: rpc.declare({ + object: 'luci-rpc', + method: 'getHostHints', + expect: { '': {} } + }), + + load: function() { + return this.callHostHints(); + }, + + render: function(hosts) { + var m, s, o; + + m = new form.Map('glorytun-udp', _('Glorytun UDP')); + + s = m.section(form.GridSection, 'glorytun-udp', _('Instances')); + s.addremove = true; + s.anonymous = true; + s.nodescriptions = true; + + s.tab('general', _('General Settings')); + s.tab('advanced', _('Advanced Settings')); + + o = s.taboption('general', form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; + + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); + o.value('to',_('Client')); + o.value('from',_('Server')); + o.modalonly = true; + + o = s.taboption('general', form.Value, 'host', _('Host')); + o.rmempty = false; + + o = s.taboption('general', form.Value, 'port', _('Port')); + o.rmempty = false; + + o = s.taboption('general', form.Value, 'key', _('Key')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general', form.Value, 'dev', _('Interface name')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general', form.Value, 'localip', _('Local IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.taboption('general', form.Value, 'remoteip', _('Remote IP')); + o.datatype = 'or(ip4addr,ip6addr)'; + o.rmempty = false; + + o = s.taboption('advanced', form.Flag, 'persist', _('Persist'), _('Keep the tunnel device after exiting')); + o.default = o.enabled; + o.modalonly = true; + + o = s.taboption('advanced', form.Flag, 'chacha', _('chacha'), _('Force fallback cipher')); + o.default = o.enabled; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'kxtimeout', _('Key rotation timeout')); + o.default = '7d'; + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'timetolerance', _('Clock sync tolerance')); + o.default = '10m'; + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Value, 'keepalive', _('Keep alive timeout')); + o.default = '25s'; + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('advanced', form.Flag, 'auto', _('Dynamic rate detection')); + o.rmempty = false; + o.modalonly = true; + + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + + return m.render(); + } +}); diff --git a/luci-app-glorytun-udp/root/etc/config/glorytun-udp b/luci-app-glorytun-udp/root/etc/config/glorytun-udp new file mode 100644 index 000000000..d5d356dd6 --- /dev/null +++ b/luci-app-glorytun-udp/root/etc/config/glorytun-udp @@ -0,0 +1,10 @@ +config glorytun-udp 'vpn' + option enable '0' + option host '127.0.0.1' + option port '65001' + option dev 'tun0' + option key '' + option chacha '1' + option localip '10.255.254.2' + option remoteip '10.255.254.1' + option mode 'to' diff --git a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp new file mode 100644 index 000000000..b942fd60c --- /dev/null +++ b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Load the glorytun config +# +# Author: Ycarus (Yannick Chabanois) +# Released under GPL 3 or later + +[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0 + +. /lib/functions.sh +. /lib/functions/network.sh + +set_default() { + local localip + local remoteip + local config="$1" + local iface + config_get enable "$config" enable + config_get iface "$config" dev + [ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && { + config_get localip "$config" localip + config_get remoteip "$config" remoteip + [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up + } +} + +config_load glorytun-udp +config_foreach set_default glorytun-udp diff --git a/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp b/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp new file mode 100644 index 000000000..dbecf5b5b --- /dev/null +++ b/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp @@ -0,0 +1,47 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete glorytun-udp[-1] + add ucitrack glorytun-udp + set ucitrack.@glorytun-udp[-1].init=glorytun-udp + commit ucitrack +EOF + +if [ "$(uci -q get network.glorytun-udp)" = "" ] && [ "$(uci -q get network.omrvpn)" = "" ]; then + uci -q batch <<-EOF >/dev/null + delete network.glorytun-udp + set network.glorytun-udp=interface + set network.glorytun-udp.ifname=tun0 + set network.glorytun-udp.proto=dhcp + set network.glorytun-udp.ip4table=vpn + set network.glorytun-udp.multipath=off + set network.glorytun-udp.leasetime=12h + commit network + EOF +fi + +if [ "$(uci -q show firewall | grep glorytun-udp)" = "" ] && [ "$(uci -q get network.omrvpn)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.zone_vpn=zone + set firewall.zone_vpn.name=vpn + set firewall.zone_vpn.network=glorytun-udp + set firewall.zone_vpn.masq=1 + set firewall.zone_vpn.input=REJECT + set firewall.zone_vpn.forward=ACCEPT + set firewall.zone_vpn.output=ACCEPT + commit firewall + EOF +fi +if [ "$(uci -q show firewall | grep Allow-All-LAN-to-VPN)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add firewall rule + set firewall.@rule[-1].enabled='1' + set firewall.@rule[-1].target='ACCEPT' + set firewall.@rule[-1].name='Allow-All-LAN-to-VPN' + set firewall.@rule[-1].dest='vpn' + set firewall.@rule[-1].src='lan' + commit firewall + EOF +fi +rm -f /tmp/luci-indexcache +exit 0 diff --git a/luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json b/luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json new file mode 100644 index 000000000..b84551484 --- /dev/null +++ b/luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json @@ -0,0 +1,13 @@ +{ + "admin/vpn/glorytun-udp": { + "title": "Glorytun UDP", + "order": 60, + "action": { + "type": "view", + "path": "services/glorytun-udp" + }, + "depends": { + "acl": [ "luci-app-glorytun-udp" ] + } + } +} diff --git a/luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json b/luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json new file mode 100644 index 000000000..3e24adb8e --- /dev/null +++ b/luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json @@ -0,0 +1,11 @@ +{ + "luci-app-glorytun-udp": { + "description": "Grant access to glorytun UDP", + "read": { + "uci": [ "glorytun-udp" ] + }, + "write": { + "uci": [ "glorytun-udp" ] + } + } +} \ No newline at end of file From 07fee0e7f27655710cd32b2595221fdb133ce93b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:25:16 +0100 Subject: [PATCH 179/289] Add glorytun-udp new separated config and option to enable/disable use of shadowsocks for UDP when VPN down --- .../luasrc/controller/openmptcprouter.lua | 45 +++++++++++++++---- .../luasrc/view/openmptcprouter/settings.htm | 6 +++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 3a07d144d..b294af40c 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -71,6 +71,7 @@ function wizard_add() if nbserver == 1 and server_ip ~= "" and server_ip ~= nil then ucic:set("shadowsocks-libev","sss0","server",server_ip) ucic:set("glorytun","vpn","host",server_ip) + ucic:set("glorytun-udp","vpn","host",server_ip) ucic:set("dsvpn","vpn","host",server_ip) ucic:set("mlvpn","general","host",server_ip) ucic:set("ubond","general","host",server_ip) @@ -491,6 +492,7 @@ function wizard_add() ss_ip=server_ip ucic:set("shadowsocks-libev","sss0","server",server_ip) ucic:set("glorytun","vpn","host",server_ip) + ucic:set("glorytun-udp","vpn","host",server_ip) ucic:set("dsvpn","vpn","host",server_ip) ucic:set("mlvpn","general","host",server_ip) ucic:set("ubond","general","host",server_ip) @@ -512,6 +514,7 @@ function wizard_add() ucic:set("nginx-ha","VPN","enable","0") ucic:set("shadowsocks-libev","sss0","server",server_ip) ucic:set("glorytun","vpn","host",server_ip) + ucic:set("glorytun-udp","vpn","host",server_ip) ucic:set("dsvpn","vpn","host",server_ip) ucic:set("mlvpn","general","host",server_ip) ucic:set("ubond","general","host",server_ip) @@ -538,6 +541,7 @@ function wizard_add() ucic:save("dsvpn") --ucic:commit("dsvpn") ucic:save("glorytun") + ucic:save("glorytun-udp") --ucic:commit("glorytun") ucic:save("shadowsocks-libev") --ucic:commit("shadowsocks-libev") @@ -552,24 +556,28 @@ function wizard_add() elseif encryption == "aes-256-gcm" then ucic:set("shadowsocks-libev","sss0","method","aes-256-gcm") ucic:set("glorytun","vpn","chacha20","0") + ucic:set("glorytun-udp","vpn","chacha","0") ucic:set("openvpn","omr","cipher","AES-256-GCM") ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") elseif encryption == "aes-256-cfb" then ucic:set("shadowsocks-libev","sss0","method","aes-256-cfb") ucic:set("glorytun","vpn","chacha20","0") + ucic:set("glorytun-udp","vpn","chacha","0") ucic:set("openvpn","omr","cipher","AES-256-CFB") ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") elseif encryption == "chacha20-ietf-poly1305" then ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305") ucic:set("glorytun","vpn","chacha20","1") + ucic:set("glorytun-udp","vpn","chacha","1") ucic:set("openvpn","omr","cipher","AES-256-CBC") ucic:set("v2ray","omrout","s_vmess_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305") end ucic:save("openvpn") ucic:save("glorytun") + ucic:save("glorytun-udp") ucic:save("shadowsocks-libev") ucic:save("v2ray") @@ -606,7 +614,7 @@ function wizard_add() -- Set Glorytun settings - if default_vpn:match("^glorytun.*") and disablednb ~= serversnb then + if default_vpn:match("glorytun_tcp") and disablednb ~= serversnb then ucic:set("glorytun","vpn","enable",1) else ucic:set("glorytun","vpn","enable",0) @@ -617,13 +625,7 @@ function wizard_add() ucic:set("glorytun","vpn","port","65001") ucic:set("glorytun","vpn","key",glorytun_key) ucic:set("glorytun","vpn","mptcp",1) - if default_vpn == "glorytun_udp" then - ucic:set("glorytun","vpn","proto","udp") - ucic:set("glorytun","vpn","localip","10.255.254.2") - ucic:set("glorytun","vpn","remoteip","10.255.254.1") - ucic:set("network","omr6in4","ipaddr","10.255.254.2") - ucic:set("network","omr6in4","peeraddr","10.255.254.1") - else + if default_vpn == "glorytun_tcp" then ucic:set("glorytun","vpn","proto","tcp") ucic:set("glorytun","vpn","localip","10.255.255.2") ucic:set("glorytun","vpn","remoteip","10.255.255.1") @@ -639,6 +641,29 @@ function wizard_add() ucic:save("glorytun") ucic:commit("glorytun") + if default_vpn:match("glorytun_udp") and disablednb ~= serversnb then + ucic:set("glorytun-udp","vpn","enable",1) + else + ucic:set("glorytun-udp","vpn","enable",0) + end + + local glorytun_key = luci.http.formvalue("glorytun_key") + if glorytun_key ~= "" then + ucic:set("glorytun-udp","vpn","port","65001") + ucic:set("glorytun-udp","vpn","key",glorytun_key) + if default_vpn == "glorytun_udp" then + ucic:set("glorytun-udp","vpn","localip","10.255.254.2") + ucic:set("glorytun-udp","vpn","remoteip","10.255.254.1") + ucic:set("network","omr6in4","ipaddr","10.255.254.2") + ucic:set("network","omr6in4","peeraddr","10.255.254.1") + end + ucic:set("network","omrvpn","proto","none") + else + ucic:set("glorytun-udp","vpn","key","") + end + ucic:save("glorytun-udp") + ucic:commit("glorytun-udp") + -- Set A Dead Simple VPN settings if default_vpn == "dsvpn" and disablednb ~= serversnb then ucic:set("dsvpn","vpn","enable",1) @@ -845,6 +870,10 @@ function settings_add() local disableserverping = luci.http.formvalue("disableserverping") or "0" ucic:set("openmptcprouter","settings","disableserverping",disableserverping) + -- Enable/disable shadowsocks upd + local shadowsocksudp = luci.http.formvalue("shadowsocksudp") or "0" + ucic:set("openmptcprouter","settings","shadowsocksudp",shadowsocksudp) + -- Enable/disable fast open local disablefastopen = luci.http.formvalue("disablefastopen") or "0" if disablefastopen == "0" then diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index fbc61a7a9..50c4ccce3 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -244,6 +244,12 @@
+
+ +
+ checked<% end %>> +
+
From 234a0f85e8ddd6467d66479a4dfc81121b318dd6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:25:57 +0100 Subject: [PATCH 180/289] Update luci-mod-dashboard from upstream --- luci-mod-dashboard/Makefile | 3 +++ .../view/dashboard/include/20_lan.js | 20 +++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/luci-mod-dashboard/Makefile b/luci-mod-dashboard/Makefile index 4a9aec96f..6a6d84166 100644 --- a/luci-mod-dashboard/Makefile +++ b/luci-mod-dashboard/Makefile @@ -1,8 +1,11 @@ # # Copyright 2019-2020 ZHANG Zhao +# Copyright 2020 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the Apache License, Version 2.0 . # +# Based on openwrt luci commit 03c77dafe3cfb922b995adfe9c0f8a75c98a18af +# include $(TOPDIR)/rules.mk diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js index ab86568e8..c673fa681 100644 --- a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js @@ -25,15 +25,15 @@ return baseclass.extend({ var container_wapper = E('div', { 'class': 'router-status-lan dashboard-bg box-s1' }); var container_box = E('div', { 'class': 'lan-info devices-list' }); - var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [ - E('div', { 'class': 'tr table-titles dashboard-bg' }, [ - E('div', { 'class': 'th nowrap' }, _('Hostname')), - E('div', { 'class': 'th' }, _('IP Address')), - E('div', { 'class': 'th' }, _('MAC')), + var container_devices = E('table', { 'class': 'table assoclist devices-info' }, [ + E('tr', { 'class': 'tr table-titles dashboard-bg' }, [ + E('th', { 'class': 'th nowrap' }, _('Hostname')), + E('th', { 'class': 'th' }, _('IP Address')), + E('th', { 'class': 'th' }, _('MAC')), ]) ]); - var container_deviceslist = E('div', { 'class': 'table assoclist devices-info' }); + var container_deviceslist = E('table', { 'class': 'table assoclist devices-info' }); container_box.appendChild(E('div', { 'class': 'title'}, [ E('img', { @@ -48,21 +48,21 @@ return baseclass.extend({ for(var idx in this.params.lan.devices) { var deivce = this.params.lan.devices[idx]; - container_deviceslist.appendChild(E('div', { 'class': 'tr cbi-rowstyle-1'}, [ + container_deviceslist.appendChild(E('tr', { 'class': 'tr cbi-rowstyle-1'}, [ - E('div', { 'class': 'td device-info'}, [ + E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.hostname ]), ]), ]), - E('div', { 'class': 'td device-info'}, [ + E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.ipv4 ]), ]), ]), - E('div', { 'class': 'td device-info'}, [ + E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.macaddr ]), ]), From 179fb76abcb473841bd568bb5773ab908fa19464 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:26:41 +0100 Subject: [PATCH 181/289] Update luci-mod-network from upstream --- luci-mod-network/Makefile | 2 +- .../resources/view/network/dhcp.js | 32 +++++++------- .../resources/view/network/diagnostics.js | 10 ++--- .../resources/view/network/wireless.js | 42 +++++++++++-------- 4 files changed, 46 insertions(+), 40 deletions(-) diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile index 7a043dc40..71e847f31 100644 --- a/luci-mod-network/Makefile +++ b/luci-mod-network/Makefile @@ -4,7 +4,7 @@ # # This is free software, licensed under the Apache License, Version 2.0 . # -# From https://github.com/openwrt/luci/commit/83c912716e482000e92443cffc3202726314f480 +# From https://github.com/openwrt/luci/commit/f5c04e1a2e173f536597f220db0380cc08869e8e include $(TOPDIR)/rules.mk diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index 95abeb6d0..d3f564d47 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -31,15 +31,15 @@ CBILeaseStatus = form.DummyValue.extend({ renderWidget: function(section_id, option_id, cfgvalue) { return E([ E('h4', _('Active DHCP Leases')), - E('div', { 'id': 'lease_status_table', 'class': 'table' }, [ - E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th' }, _('Hostname')), - E('div', { 'class': 'th' }, _('IPv4-Address')), - E('div', { 'class': 'th' }, _('MAC-Address')), - E('div', { 'class': 'th' }, _('Lease time remaining')) + E('table', { 'id': 'lease_status_table', 'class': 'table' }, [ + E('tr', { 'class': 'tr table-titles' }, [ + E('th', { 'class': 'th' }, _('Hostname')), + E('th', { 'class': 'th' }, _('IPv4-Address')), + E('th', { 'class': 'th' }, _('MAC-Address')), + E('th', { 'class': 'th' }, _('Lease time remaining')) ]), - E('div', { 'class': 'tr placeholder' }, [ - E('div', { 'class': 'td' }, E('em', _('Collecting data...'))) + E('tr', { 'class': 'tr placeholder' }, [ + E('td', { 'class': 'td' }, E('em', _('Collecting data...'))) ]) ]) ]); @@ -50,15 +50,15 @@ CBILease6Status = form.DummyValue.extend({ renderWidget: function(section_id, option_id, cfgvalue) { return E([ E('h4', _('Active DHCPv6 Leases')), - E('div', { 'id': 'lease6_status_table', 'class': 'table' }, [ - E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th' }, _('Host')), - E('div', { 'class': 'th' }, _('IPv6-Address')), - E('div', { 'class': 'th' }, _('DUID')), - E('div', { 'class': 'th' }, _('Lease time remaining')) + E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [ + E('tr', { 'class': 'tr table-titles' }, [ + E('th', { 'class': 'th' }, _('Host')), + E('th', { 'class': 'th' }, _('IPv6-Address')), + E('th', { 'class': 'th' }, _('DUID')), + E('th', { 'class': 'th' }, _('Lease time remaining')) ]), - E('div', { 'class': 'tr placeholder' }, [ - E('div', { 'class': 'td' }, E('em', _('Collecting data...'))) + E('tr', { 'class': 'tr placeholder' }, [ + E('td', { 'class': 'td' }, E('em', _('Collecting data...'))) ]) ]) ]); diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js b/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js index 1855ee642..5d6bd4765 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js @@ -66,9 +66,9 @@ return view.extend({ return E([], [ E('h2', {}, [ _('Network Utilities') ]), - E('div', { 'class': 'table' }, [ - E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left' }, [ + E('table', { 'class': 'table' }, [ + E('tr', { 'class': 'tr' }, [ + E('td', { 'class': 'td left' }, [ E('input', { 'style': 'margin:5px 0', 'type': 'text', @@ -91,7 +91,7 @@ return view.extend({ ]) ]), - E('div', { 'class': 'td left' }, [ + E('td', { 'class': 'td left' }, [ E('input', { 'style': 'margin:5px 0', 'type': 'text', @@ -114,7 +114,7 @@ return view.extend({ ]) ]), - E('div', { 'class': 'td left' }, [ + E('td', { 'class': 'td left' }, [ E('input', { 'style': 'margin:5px 0', 'type': 'text', diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index bb9877217..d19b025e3 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -649,7 +649,7 @@ return view.extend({ if (bss.network.isClientDisconnectSupported()) { if (table.firstElementChild.childNodes.length < 6) - table.firstElementChild.appendChild(E('div', { 'class': 'th cbi-section-actions'})); + table.firstElementChild.appendChild(E('th', { 'class': 'th cbi-section-actions'})); row.push(E('button', { 'class': 'cbi-button cbi-button-remove', @@ -850,7 +850,7 @@ return view.extend({ ]; } - return E('div', { 'class': 'td middle cbi-section-actions' }, E('div', btns)); + return E('td', { 'class': 'td middle cbi-section-actions' }, E('div', btns)); }; s.addModalOptions = function(s) { @@ -889,6 +889,12 @@ return view.extend({ o = ss.taboption('advanced', CBIWifiCountryValue, 'country', _('Country Code')); o.wifiNetwork = radioNet; + o = ss.taboption('advanced', form.ListValue, 'cell_density', _('Coverage cell density'), _('Configures data rates based on the coverage cell density. Normal configures basic rates to 6, 12, 24 Mbps if legacy 802.11b rates are not used else to 5.5, 11 Mbps. High configures basic rates to 12, 24 Mbps if legacy 802.11b rates are not used else to the 11 Mbps rate. Very High configures 24 Mbps as the basic rate. Supported rates lower than the minimum basic rate are not offered.')); + o.value('0', _('Disabled')); + o.value('1', _('Normal')); + o.value('2', _('High')); + o.value('3', _('Very High')); + o = ss.taboption('advanced', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates')); o.default = o.enabled; @@ -1656,15 +1662,15 @@ return view.extend({ }; s.handleScan = function(radioDev, ev) { - var table = E('div', { 'class': 'table' }, [ - E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th col-2 middle center' }, _('Signal')), - E('div', { 'class': 'th col-4 middle left' }, _('SSID')), - E('div', { 'class': 'th col-2 middle center hide-xs' }, _('Channel')), - E('div', { 'class': 'th col-2 middle left hide-xs' }, _('Mode')), - E('div', { 'class': 'th col-3 middle left hide-xs' }, _('BSSID')), - E('div', { 'class': 'th col-3 middle left' }, _('Encryption')), - E('div', { 'class': 'th cbi-section-actions right' }, ' '), + var table = E('table', { 'class': 'table' }, [ + E('tr', { 'class': 'tr table-titles' }, [ + E('th', { 'class': 'th col-2 middle center' }, _('Signal')), + E('th', { 'class': 'th col-4 middle left' }, _('SSID')), + E('th', { 'class': 'th col-2 middle center hide-xs' }, _('Channel')), + E('th', { 'class': 'th col-2 middle left hide-xs' }, _('Mode')), + E('th', { 'class': 'th col-3 middle left hide-xs' }, _('BSSID')), + E('th', { 'class': 'th col-3 middle left' }, _('Encryption')), + E('th', { 'class': 'th cbi-section-actions right' }, ' '), ]) ]); @@ -2073,13 +2079,13 @@ return view.extend({ .then(L.bind(this.poll_status, this, nodes)); }, this), 5); - var table = E('div', { 'class': 'table assoclist', 'id': 'wifi_assoclist_table' }, [ - E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th nowrap' }, _('Network')), - E('div', { 'class': 'th hide-xs' }, _('MAC-Address')), - E('div', { 'class': 'th' }, _('Host')), - E('div', { 'class': 'th' }, _('Signal / Noise')), - E('div', { 'class': 'th' }, _('RX Rate / TX Rate')) + var table = E('table', { 'class': 'table assoclist', 'id': 'wifi_assoclist_table' }, [ + E('tr', { 'class': 'tr table-titles' }, [ + E('th', { 'class': 'th nowrap' }, _('Network')), + E('th', { 'class': 'th hide-xs' }, _('MAC-Address')), + E('th', { 'class': 'th' }, _('Host')), + E('th', { 'class': 'th' }, _('Signal / Noise')), + E('th', { 'class': 'th' }, _('RX Rate / TX Rate')) ]) ]); From 49371cc8e6e9c3ec66b0d0f1f424354bf85988ea Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:27:30 +0100 Subject: [PATCH 182/289] Use metric for IPv6 routes --- mptcp/files/etc/init.d/mptcp | 1 + 1 file changed, 1 insertion(+) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 95c9a4fb9..77310f5eb 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -322,6 +322,7 @@ interface_multipath_settings() { EOF else ip -6 rule add from $ip6addr table 6$id pref 0 + ip -6 route replace $network6/$netmask6 dev $iface scope link metric 6$id ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id ip -6 route replace default via $gateway6 dev $iface table 6$id ip -6 route replace default via $gateway6 dev $iface metric $id From f3d4e9df2582b2b59a8d953483bf7b3cafd8db9d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:28:13 +0100 Subject: [PATCH 183/289] Add glorytun-udp new splitted config in tracker --- .../usr/share/omr/post-tracking.d/post-tracking | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index e7cd3f311..bdedd275a 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -371,7 +371,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE fi - if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then + if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then _log "Tunnel down use ShadowSocks for UDP" uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2' if /etc/init.d/shadowsocks-libev rules_exist ; then @@ -390,6 +390,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then _log "Glorytun VPN down, restart it" /etc/init.d/glorytun restart + fi + if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then + _log "Glorytun UDP VPN down, restart it" /etc/init.d/glorytun-udp restart fi config_load openmptcprouter @@ -438,7 +441,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om fi uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE="interface" uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - if [ "$(uci -q get glorytun.vpn.enable)" != "1" ]; then + if [ "$(uci -q get glorytun.vpn.enable)" != "1" ] || [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu @@ -576,13 +579,13 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup" if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then - if [ "$(uci -q get glorytun.vpn.rateauto)" = "1" ]; then + if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1 else glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1 fi else - if [ "$(uci -q get glorytun.vpn.rateauto)" = "1" ]; then + if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx 12500000 rx 12500000 > /dev/null 2>&1 else glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx 12500000 rx 12500000 > /dev/null 2>&1 @@ -666,7 +669,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( [ -n "$asn" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" } - if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ]; then + if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) [ -n "$mtu" ] && { @@ -776,6 +779,10 @@ fi if [ "$(pgrep glorytun)" = "" ] && [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ -f /etc/init.d/glorytun ] && [ "$(uci -q get glorytun.vpn.key)" != "" ]; then _log "Can't find Glorytun, restart it..." /etc/init.d/glorytun restart + sleep 5 +fi +if [ "$(pgrep glorytun-udp)" = "" ] && [ "$(uci -q get glorytun-usp.vpn.enable)" = "1" ] && [ -f /etc/init.d/glorytun-udp ] && [ "$(uci -q get glorytun-udp.vpn.key)" != "" ]; then + _log "Can't find Glorytun UDP, restart it..." /etc/init.d/glorytun-udp restart sleep 5 fi From bef8c56ba067e36302a3ba04b43094a0b6d759ad Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:28:29 +0100 Subject: [PATCH 184/289] Update ndpi --- ndpi-netfilter2/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndpi-netfilter2/Makefile b/ndpi-netfilter2/Makefile index e977efbc5..9f04c4e87 100644 --- a/ndpi-netfilter2/Makefile +++ b/ndpi-netfilter2/Makefile @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=ndpi-netfilter2 PKG_RELEASE:=2 -PKG_REV:=86eaa857129cdd63152ebcd483366706e28089cc +PKG_REV:=0a03249da911f4033fd2a0d38a97cdba72eee2b6 PKG_VERSION:=3.2-$(PKG_REV) PKG_SOURCE_PROTO:=git From 855cde07f09497214e6762682d61c10ac9b963fd Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:28:55 +0100 Subject: [PATCH 185/289] Add glorytun-udp new splitted config for omr6in4 --- omr-6in4/files/bin/omr-6in4 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 index cc0fe0e59..c7eba5bfa 100755 --- a/omr-6in4/files/bin/omr-6in4 +++ b/omr-6in4/files/bin/omr-6in4 @@ -6,6 +6,10 @@ while true; do iface=$(uci -q get glorytun.vpn.dev) addr=$(uci -q get glorytun.vpn.localip) peer=$(uci -q get glorytun.vpn.remoteip) + elif [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then + iface=$(uci -q get glorytun-udp.vpn.dev) + addr=$(uci -q get glorytun-udp.vpn.localip) + peer=$(uci -q get glorytun-udp.vpn.remoteip) elif [ "$(uci -q get dsvpn.vpn.enable)" = "1" ]; then iface=$(uci -q get dsvpn.vpn.dev) addr=$(uci -q get dsvpn.vpn.localip) From 8ef7544e4cdbc06ff920f2fd863f3c1b4278111f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:29:13 +0100 Subject: [PATCH 186/289] Add glorytun-udp new splitted config for omr tracker --- omr-tracker/files/bin/omr-tracker | 2 ++ 1 file changed, 2 insertions(+) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index b0a90246d..8b64a3785 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -204,6 +204,8 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then if [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then OMR_TRACKER_DEVICE_GATEWAY=$(uci -q get glorytun.vpn.remoteip) + elif [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(uci -q get glorytun-udp.vpn.remoteip) else OMR_TRACKER_DEVICE_GATEWAY="" fi From c407a885dd26fddbbb79e527d7e56325817d2ada Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:29:44 +0100 Subject: [PATCH 187/289] Use new interfaces for glorytun --- openmptcprouter-full/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 0d060fa9a..0ab4f84fd 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -35,7 +35,7 @@ MY_DEPENDS := \ wireless-tools \ libiwinfo-lua \ ca-bundle ca-certificates \ - luci-mod-admin-full luci-app-firewall luci-app-glorytun luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-theme-argon luci-base \ + luci-mod-admin-full luci-app-firewall luci-app-glorytun-tcp luci-app-glorytun-udp luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-theme-argon luci-base \ luci-app-omr-tracker luci-app-omr-dscp \ luci-app-sqm sqm-scripts-extra \ luci-app-vnstat2 omr-quota luci-app-omr-quota \ From cc9f3c9fe6f9c489d7e9506f7366e09b8bb9accc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:31:05 +0100 Subject: [PATCH 188/289] Add glorytun-udp new splitted config in mptcp over vpn and vps api contact --- openmptcprouter/files/etc/init.d/mptcpovervpn | 6 ++ .../files/etc/init.d/openmptcprouter-vps | 68 +++++++++++++++---- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn index 73f804191..870148e5b 100755 --- a/openmptcprouter/files/etc/init.d/mptcpovervpn +++ b/openmptcprouter/files/etc/init.d/mptcpovervpn @@ -132,11 +132,17 @@ start_service() uci -q batch <<-EOF >/dev/null set shadowsocks-libev.sss0.disabled='1' set glorytun.vpn.host='10.255.250.1' + set glorytun-udp.vpn.host='10.255.250.1' + commit glorytun + commit glorytun-udp EOF elif [ "$(uci -q get glorytun.vpn.host)" = "10.255.250.1" ] && [ "$nbintf" != "$nbintfvpn" ]; then uci -q batch <<-EOF >/dev/null delete shadowsocks-libev.sss0.disabled set glorytun.vpn.host="$(uci -q get openmptcprouter.vps.ip)" + set glorytun-udp.vpn.host="$(uci -q get openmptcprouter.vps.ip)" + commit glorytun + commit glorytun-udp EOF fi NBCPU=$(grep -c '^processor' /proc/cpuinfo | tr -d "\n") diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 8db25ea42..b84667234 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -296,20 +296,20 @@ _get_vps_config() { fi if [ "$vpn" = "glorytun_udp" ]; then glorytun_state=1 - uci -q set glorytun.vpn.proto='udp' + #uci -q set glorytun.vpn.proto='udp' client_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.udp.client_ip')" host_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.udp.host_ip')" port="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.port')" - if [ "$(uci -q get glorytun.vpn.port)" != "$port" ] && [ "$port" != "" ]; then + if [ "$(uci -q get glorytun-udp.vpn.port)" != "$port" ] && [ "$port" != "" ]; then uci -q batch <<-EOF >/dev/null - set glorytun.vpn.port=$port + set glorytun-udp.vpn.port=$port EOF fi if [ "$client_ip" != "dhcp" ] && [ -n "$client_ip" ]; then - if [ "$host_ip" != "$(uci -q get glorytun.vpn.remoteip)" ] || [ "$client_ip" != "$(uci -q get glorytun.vpn.localip)" ]; then + if [ "$host_ip" != "$(uci -q get glorytun-udp.vpn.remoteip)" ] || [ "$client_ip" != "$(uci -q get glorytun-udp.vpn.localip)" ]; then uci -q batch <<-EOF >/dev/null - set glorytun.vpn.localip=$client_ip - set glorytun.vpn.remoteip=$host_ip + set glorytun-udp.vpn.localip=$client_ip + set glorytun-udp.vpn.remoteip=$host_ip EOF glorytun_change=1 fi @@ -321,10 +321,10 @@ _get_vps_config() { glorytun_change=1 fi else - if [ "$(uci -q get glorytun.vpn.remoteip)" != "" ] || [ "$(uci -q get glorytun.vpn.localip)" != "" ]; then + if [ "$(uci -q get glorytun-udp.vpn.remoteip)" != "" ] || [ "$(uci -q get glorytun-udp.vpn.localip)" != "" ]; then uci -q batch <<-EOF >/dev/null - delete glorytun.vpn.localip - delete glorytun.vpn.remoteip + delete glorytun-udp.vpn.localip + delete glorytun-udp.vpn.remoteip EOF glorytun_change=1 fi @@ -403,14 +403,24 @@ _get_vps_config() { EOF glorytun_change=1 fi + if [ "$(uci -q get glorytun-udp.vpn.host)" != "127.0.0.1" ] && [ "$(uci -q get glorytun-udp.vpn.host)" != "$vpsip" ] && [ "$(uci -q get openmptcprouter.settings.ha)" != "1" ]; then + uci -q batch <<-EOF >/dev/null + set glorytun-udp.vpn.host="$vpsip" + EOF + glorytun_change=1 + fi if [ "$glorytun_change" != "0" ]; then uci -q batch <<-EOF >/dev/null commit glorytun + commit glorytun-udp EOF if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then logger -t "OMR-VPS" "Restart glorytun..." /etc/init.d/glorytun restart >/dev/null 2>&1 + fi + if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then + logger -t "OMR-VPS" "Restart glorytun-udp..." /etc/init.d/glorytun-udp restart >/dev/null 2>&1 fi fi @@ -1148,9 +1158,6 @@ _set_config_from_vps() { if [ "$vpn" = "glorytun_tcp" ]; then glorytun_state=1 fi - if [ "$vpn" = "glorytun_udp" ]; then - glorytun_state=1 - fi [ -z "$glorytun_port" ] && glorytun_port="65001" glorytun_chacha="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.chacha')" [ -z "$glorytun_chacha" ] || [ "$glorytun_chacha" = "true" ] && glorytun_chacha=1 @@ -1167,6 +1174,28 @@ _set_config_from_vps() { uci -q commit glorytun logger -t "OMR-VPS" "Glorytun restart..." /etc/init.d/glorytun restart >/dev/null 2>&1 + fi + if ([ -n "$glorytun_key" ] && [ "$glorytun_key" != "$(uci -q get glorytun-udp.vpn.key)" ]) || ([ -n "$glorytun_port" ] || [ "$glorytun_port" != "$(uci -q get glorytun-udp.vpn.port)" ]); then + vpn="$(uci -q get openmptcprouter.settings.vpn)" + glorytun_state=0 + if [ "$vpn" = "glorytun_udp" ]; then + glorytun_state=1 + fi + [ -z "$glorytun_port" ] && glorytun_port="65001" + glorytun_chacha="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.chacha')" + [ -z "$glorytun_chacha" ] || [ "$glorytun_chacha" = "true" ] && glorytun_chacha=1 + [ "$glorytun_chacha" = "false" ] && glorytun_chacha=0 + uci -q batch <<-EOF >/dev/null + set glorytun-udp.vpn.port=$glorytun_port + set glorytun-udp.vpn.key=$glorytun_key + set glorytun-udp.vpn.enable=$glorytun_state + set glorytun-udp.vpn.chacha=$glorytun_chacha + EOF + if [ "$(uci -q get glorytun-udp.vpn.host)" != "127.0.0.1" ]; then + uci -q set glorytun-udp.vpn.host="$vpsip" + fi + uci -q commit glorytun-udp + logger -t "OMR-VPS" "Glorytun UDP restart..." /etc/init.d/glorytun-udp restart >/dev/null 2>&1 fi @@ -1535,6 +1564,14 @@ _config_service() { return } error=0 + if [ -n "$serial" ]; then + [ -z "$vps_config" ] && vps_config=$(_get_json "config?serial=${serial}") + if [ -n "$vps_config" ] && [ "$( echo "$vps_config" | jsonfilter -q -e '@.error')" = "False serial number" ]; then + logger -t "OMR-VPS" "Invalid serial number" + sed -i "s:${server}::g" /etc/config/* + return + fi + fi [ "$(uci -q get openmptcprouter.${servername}.get_config)" = "1" ] && [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { _set_config_from_vps _get_gre_tunnel @@ -1555,6 +1592,8 @@ _config_service() { uci -q batch <<-EOF >/dev/null set glorytun.vpn.chacha20="0" commit glorytun + set glorytun-udp.vpn.chacha="0" + commit glorytun-udp EOF config_foreach _set_ss_server server "method" "aes-256-gcm" uci -q commit shadowsocks-libev @@ -1631,6 +1670,9 @@ set_pihole() { start_service() { serversnb=0 wanips="" + serial=$(cat /proc/cpuinfo | grep Serial | awk '{print $3}') + [ -z "$serial" ] && [ -f "/usr/sbin/dmidecode" ] && serial=$(/usr/sbin/dmidecode -t 1 | egrep 'Serial' | awk '{print $3}') + uci -q set openmptcprouter.settings.serial=${serial} config_load openmptcprouter config_foreach _count_server server config_foreach _get_local_wan_ip interface @@ -1642,6 +1684,6 @@ start_service() { } service_triggers() { - procd_add_reload_trigger openmptcprouter shadowsocks-libev glorytun mlvpn openvpn network upnpd dsvpn v2ray firewall + procd_add_reload_trigger openmptcprouter shadowsocks-libev glorytun glorytun-udp mlvpn openvpn network upnpd dsvpn v2ray firewall #procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd } \ No newline at end of file From a5cec1b0fd525e9f13a548ac4110073be3db85de Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:32:03 +0100 Subject: [PATCH 189/289] Default dsvpn config --- .../files/etc/uci-defaults/2020-omr-vpn | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index 201c4c226..bb4dbf559 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -74,11 +74,18 @@ if [ "$(uci -q get dsvpn.vpn)" = "" ]; then set dsvpn.vpn.port=65011 set dsvpn.vpn.localip=10.255.251.2 set dsvpn.vpn.remoteip=10.255.251.1 + set dsvpn.vpn.mode=client set dsvpn.vpn.enable=0 commit dsvpn EOF fi +if [ "$(uci -q get dsvpn.vpn.mode)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set dsvpn.vpn.mode=client + commit dsvpn + EOF +fi if [ "$(uci -q show firewall | grep omrvpn)" = "" ]; then uci -q batch <<-EOF >/dev/null @@ -100,6 +107,12 @@ if [ "$(uci -q get ucitrack.@network[-1].affects | grep glorytun)" = "" ]; then commit ucitrack EOF fi +if [ "$(uci -q get ucitrack.@network[-1].affects | grep glorytun-udp)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list ucitrack.@network[-1].affects="glorytun-udp" + commit ucitrack + EOF +fi if [ "$(uci -q get ucitrack.@network[-1].affects | grep dsvpn)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list ucitrack.@network[-1].affects="dsvpn" @@ -112,6 +125,28 @@ if [ "$(uci -q get ucitrack.@glorytun[-1].affects | grep openmptcprouter-vps)" = commit ucitrack EOF fi +if [ "$(uci -q get ucitrack.@glorytun-udp[-1].affects | grep openmptcprouter-vps)" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list ucitrack.@glorytun-udp[-1].affects="openmptcprouter-vps" + commit ucitrack + EOF +fi + +if [ "$(uci -q get glorytun-udp.vpn.key)" = "" ] && [ "$(uci -q get glorytun.vpn.key)" != "" ]; then + uci -q batch <<-EOF >/dev/null + set glorytun-udp.vpn.key=$(uci -q get glorytun.vpn.key) + set glorytun-udp.vpn.host=$(uci -q get glorytun.vpn.host) + EOF + if [ "$(uci -q get glorytun-udp.vpn.proto)" = "udp" ]; then + uci -q batch <<-EOF >/dev/null + set glorytun-udp.vpn.enable=1 + set glorytun.vpn.enable=0 + commit glorytun + EOF + fi + uci -q commit glorytun-udp +fi + rm -f /tmp/luci-indexcache From b854815d66a4439a4107899daf1acc33d6072070 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:33:12 +0100 Subject: [PATCH 190/289] Flush v2ray config before setting new rules --- v2ray-core/files/etc/init.d/v2ray | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index 98aacf26e..34acc668b 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -413,8 +413,12 @@ add_v2ray_redirect_rules() { test -n "$port" || return # This part need a rewrite + v2ray-rules -f v2ray-rules -l ${port} -L ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward - [ "$(uci -q get v2ray.main.inbounds | grep omr6)" != "" ] && v2ray-rules6 -l $((port+1)) -L $((port+1)) --rule-name def --src-default forward --dst-default forward --local-default forward + [ "$(uci -q get v2ray.main.inbounds | grep omr6)" != "" ] && { + v2ray-rules6 -f + v2ray-rules6 -l $((port+1)) -L $((port+1)) --rule-name def --src-default forward --dst-default forward --local-default forward + } [ -f /etc/init.d/omr-bypass ] && { logger -t "v2ray" "Reload omr-bypass rules" /etc/init.d/omr-bypass reload_rules From 44ea3913e9519a486a5d260625cdeef2912fc3f5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Dec 2020 11:33:33 +0100 Subject: [PATCH 191/289] Disable v2ray log --- v2ray-core/files/etc/uci-defaults/3010-omr-v2ray | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index 18a3cc65d..f0a22aff0 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -6,9 +6,9 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.main=v2ray set v2ray.main.v2ray_file='/usr/bin/v2ray' set v2ray.main.mem_percentage='0' - set v2ray.main.loglevel='warning' + set v2ray.main.loglevel='debug' set v2ray.main.access_log='/dev/null' - set v2ray.main.error_log='/var/log/v2ray-error.log' + set v2ray.main.error_log='/dev/null' set v2ray.main.enabled='0' set v2ray.main.outbounds='omrout' set v2ray.main.inbounds='omr' @@ -136,5 +136,11 @@ if [ "$(uci -q get v2ray.omrrouting)" = "" ]; then EOF fi +if [ "$(uci -q get v2ray.main.error_log)" != "/dev/null" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.main.error_log='/dev/null' + commit v2ray + EOF +fi exit 0 \ No newline at end of file From f05cf9bd16520517a4c2b10e0a05b29b72b4c5b5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 15:02:45 +0100 Subject: [PATCH 192/289] Update whois --- whois/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/whois/Makefile b/whois/Makefile index ab5bf1153..0f4253993 100644 --- a/whois/Makefile +++ b/whois/Makefile @@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=whois -PKG_VERSION:=5.4.3 +PKG_VERSION:=5.5.7 PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/w/whois -PKG_HASH:=fefa84029f70985db19743e51c4a8b318a169426babeaa824a27110c26090fc3 +PKG_HASH:=3efa700dbf38d127c31b21af3176cd6e5a69f96a056be60ac1dcd13df7717393 PKG_CAT:=xzcat PKG_INSTALL:=1 From 8fa69941af0a3025d32915fb0b7c687ef030bede Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 15:46:27 +0100 Subject: [PATCH 193/289] Fix whois package --- whois/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/whois/Makefile b/whois/Makefile index 0f4253993..ae17cb7f7 100644 --- a/whois/Makefile +++ b/whois/Makefile @@ -5,7 +5,7 @@ PKG_NAME:=whois PKG_VERSION:=5.5.7 PKG_RELEASE:=1 -PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) +PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME) PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/w/whois PKG_HASH:=3efa700dbf38d127c31b21af3176cd6e5a69f96a056be60ac1dcd13df7717393 From 3bf770dc0969f6043e4c421959fd06c6e01dcd55 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 16:25:04 +0100 Subject: [PATCH 194/289] Add VPN translation templates --- luci-app-dsvpn/po/templates/dsvpn.pot | 59 +++++++++++ .../po/templates/glorytun-tcp.pot | 87 ++++++++++++++++ .../po/templates/glorytun-udp.pot | 99 +++++++++++++++++++ luci-app-mlvpn/po/templates/mlvpn.pot | 71 +++++++++++++ 4 files changed, 316 insertions(+) create mode 100644 luci-app-dsvpn/po/templates/dsvpn.pot create mode 100644 luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot create mode 100644 luci-app-glorytun-udp/po/templates/glorytun-udp.pot create mode 100644 luci-app-mlvpn/po/templates/mlvpn.pot diff --git a/luci-app-dsvpn/po/templates/dsvpn.pot b/luci-app-dsvpn/po/templates/dsvpn.pot new file mode 100644 index 000000000..8f77636dc --- /dev/null +++ b/luci-app-dsvpn/po/templates/dsvpn.pot @@ -0,0 +1,59 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" diff --git a/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot new file mode 100644 index 000000000..4f7759dc3 --- /dev/null +++ b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot @@ -0,0 +1,87 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" diff --git a/luci-app-glorytun-udp/po/templates/glorytun-udp.pot b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot new file mode 100644 index 000000000..04edec275 --- /dev/null +++ b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot new file mode 100644 index 000000000..45e559267 --- /dev/null +++ b/luci-app-mlvpn/po/templates/mlvpn.pot @@ -0,0 +1,71 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From d6fb86ed7a50452e65b5d26c5e6ae19fc8790dd7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:24:57 +0100 Subject: [PATCH 195/289] Add case when proxy is none --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index b84667234..08ce14400 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1065,6 +1065,15 @@ _set_config_from_vps() { set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF + elif [ "$current_proxy" = "none" ]; then + uci -q batch <<-EOF >/dev/null + set shadowsocks-libev.sss0.disabled=1 + commit shadowsocks-libev + set v2ray.main.enabled=0 + commit shadowsocks-libev + set openmptcprouter.settings.shadowsocks_disable=1 + commit openmptcprouter + EOF fi fi fi From 66658d24274d89556a4d506e0a828c51a6197f7b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:25:24 +0100 Subject: [PATCH 196/289] Check openvpn available using init script --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 0973622ab..d8cda41f8 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -305,7 +305,7 @@ <% elseif vpn == "ubond" then %> <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% elseif vpn == "openvpn" then %> - <% if nixio.fs.access("/usr/sbin/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% end end From 6ae061e10bfcddb220b096e29d39b3c2300bdce9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:26:00 +0100 Subject: [PATCH 197/289] Replace luci-app-glorytun by luci-app-glorytun-tcp and luci-app-glorytun-udp in mini Makefile --- openmptcprouter-mini/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-mini/Makefile b/openmptcprouter-mini/Makefile index dc35d60b5..96a01ac3a 100644 --- a/openmptcprouter-mini/Makefile +++ b/openmptcprouter-mini/Makefile @@ -35,7 +35,7 @@ MY_DEPENDS := \ wireless-tools \ libiwinfo-lua \ ca-bundle ca-certificates libustream-openssl \ - luci-mod-admin-full luci-app-firewall luci-app-glorytun luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ + luci-mod-admin-full luci-app-firewall luci-app-glorytun-tcp luci-app-glorytun-udp luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ luci-app-omr-tracker luci-app-omr-dscp \ luci-app-sqm sqm-scripts-extra \ luci-app-vnstat2 omr-quota luci-app-omr-quota \ From 5c3059009a1dee615ad4f0d56e004c7493a1cf67 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 15:02:45 +0100 Subject: [PATCH 198/289] Update whois --- whois/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/whois/Makefile b/whois/Makefile index ab5bf1153..0f4253993 100644 --- a/whois/Makefile +++ b/whois/Makefile @@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=whois -PKG_VERSION:=5.4.3 +PKG_VERSION:=5.5.7 PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/w/whois -PKG_HASH:=fefa84029f70985db19743e51c4a8b318a169426babeaa824a27110c26090fc3 +PKG_HASH:=3efa700dbf38d127c31b21af3176cd6e5a69f96a056be60ac1dcd13df7717393 PKG_CAT:=xzcat PKG_INSTALL:=1 From f8aef0f344bb8722c7bcfd9e471cd1de51fcbfa8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 15:46:27 +0100 Subject: [PATCH 199/289] Fix whois package --- whois/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/whois/Makefile b/whois/Makefile index 0f4253993..ae17cb7f7 100644 --- a/whois/Makefile +++ b/whois/Makefile @@ -5,7 +5,7 @@ PKG_NAME:=whois PKG_VERSION:=5.5.7 PKG_RELEASE:=1 -PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) +PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME) PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/w/whois PKG_HASH:=3efa700dbf38d127c31b21af3176cd6e5a69f96a056be60ac1dcd13df7717393 From 8447835f01e1406bffaf4d46ad3f35764c63fc30 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Dec 2020 16:25:04 +0100 Subject: [PATCH 200/289] Add VPN translation templates --- luci-app-dsvpn/po/templates/dsvpn.pot | 59 +++++++++++ .../po/templates/glorytun-tcp.pot | 87 ++++++++++++++++ .../po/templates/glorytun-udp.pot | 99 +++++++++++++++++++ luci-app-mlvpn/po/templates/mlvpn.pot | 71 +++++++++++++ 4 files changed, 316 insertions(+) create mode 100644 luci-app-dsvpn/po/templates/dsvpn.pot create mode 100644 luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot create mode 100644 luci-app-glorytun-udp/po/templates/glorytun-udp.pot create mode 100644 luci-app-mlvpn/po/templates/mlvpn.pot diff --git a/luci-app-dsvpn/po/templates/dsvpn.pot b/luci-app-dsvpn/po/templates/dsvpn.pot new file mode 100644 index 000000000..8f77636dc --- /dev/null +++ b/luci-app-dsvpn/po/templates/dsvpn.pot @@ -0,0 +1,59 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" diff --git a/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot new file mode 100644 index 000000000..4f7759dc3 --- /dev/null +++ b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot @@ -0,0 +1,87 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" diff --git a/luci-app-glorytun-udp/po/templates/glorytun-udp.pot b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot new file mode 100644 index 000000000..04edec275 --- /dev/null +++ b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot new file mode 100644 index 000000000..45e559267 --- /dev/null +++ b/luci-app-mlvpn/po/templates/mlvpn.pot @@ -0,0 +1,71 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From 73b570e9fcd06dc3a585b4a80762ceaea2856bec Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:24:57 +0100 Subject: [PATCH 201/289] Add case when proxy is none --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index b84667234..08ce14400 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1065,6 +1065,15 @@ _set_config_from_vps() { set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF + elif [ "$current_proxy" = "none" ]; then + uci -q batch <<-EOF >/dev/null + set shadowsocks-libev.sss0.disabled=1 + commit shadowsocks-libev + set v2ray.main.enabled=0 + commit shadowsocks-libev + set openmptcprouter.settings.shadowsocks_disable=1 + commit openmptcprouter + EOF fi fi fi From ee0064b9af631bc048567c3d3fbd76412c80af72 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:25:24 +0100 Subject: [PATCH 202/289] Check openvpn available using init script --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 817255650..722ddf275 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -305,7 +305,7 @@ <% elseif vpn == "ubond" then %> <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% elseif vpn == "openvpn" then %> - <% if nixio.fs.access("/usr/sbin/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% end end From 5e61907e9cffd1c1fcc4f29bf0bbf2b335db3b28 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Dec 2020 09:26:00 +0100 Subject: [PATCH 203/289] Replace luci-app-glorytun by luci-app-glorytun-tcp and luci-app-glorytun-udp in mini Makefile --- openmptcprouter-mini/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-mini/Makefile b/openmptcprouter-mini/Makefile index dc35d60b5..96a01ac3a 100644 --- a/openmptcprouter-mini/Makefile +++ b/openmptcprouter-mini/Makefile @@ -35,7 +35,7 @@ MY_DEPENDS := \ wireless-tools \ libiwinfo-lua \ ca-bundle ca-certificates libustream-openssl \ - luci-mod-admin-full luci-app-firewall luci-app-glorytun luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ + luci-mod-admin-full luci-app-firewall luci-app-glorytun-tcp luci-app-glorytun-udp luci-app-shadowsocks-libev luci-app-unbound luci-theme-openmptcprouter luci-base \ luci-app-omr-tracker luci-app-omr-dscp \ luci-app-sqm sqm-scripts-extra \ luci-app-vnstat2 omr-quota luci-app-omr-quota \ From 19dde3a38a6b0e13ec629387c3b09fcb0b1477d7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:27:15 +0100 Subject: [PATCH 204/289] Update v2ray core --- v2ray-core/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index 70a5cf50f..206aa724f 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=4.28.2 +PKG_VERSION:=4.31.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2ray/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=13d985f7c1d5eb8fa991562eb4b815cb73c15f67f91e36b36b3cf5901529243e +PKG_HASH:=4e475c700863320b92689cb36ef993133e9c799375bbfc4a2811da2283c3673f PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -67,7 +67,7 @@ define Package/v2ray-core SECTION:=net CATEGORY:=Network SUBMENU:=Project V - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle + DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +protobuf endef define Package/v2ray-core/config From 93694b59832923d16f205f423ea9731a4c87c566 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:53:48 +0100 Subject: [PATCH 205/289] Add luci-app-packet-capture --- luci-app-packet-capture/Makefile | 14 + .../resources/view/packet_capture/tcpdump.js | 287 ++++++++++++++++++ .../root/etc/config/packet_capture | 1 + .../root/usr/libexec/packet_capture | 64 ++++ .../root/usr/libexec/packet_capture_start | 69 +++++ .../root/usr/libexec/packet_capture_stop | 9 + .../luci/menu.d/luci-app-packet-capture.json | 18 ++ .../rpcd/acl.d/luci-app-packet-capture.json | 25 ++ openmptcprouter-full/Makefile | 4 +- 9 files changed, 489 insertions(+), 2 deletions(-) create mode 100644 luci-app-packet-capture/Makefile create mode 100644 luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js create mode 100644 luci-app-packet-capture/root/etc/config/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_start create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_stop create mode 100644 luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json create mode 100644 luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json diff --git a/luci-app-packet-capture/Makefile b/luci-app-packet-capture/Makefile new file mode 100644 index 000000000..ef6370df3 --- /dev/null +++ b/luci-app-packet-capture/Makefile @@ -0,0 +1,14 @@ +# Copyright 2020 Wojciech Jowsa (wojciech.jowsa@gmail.com) +# This is free software, licensed under the Apache License, Version 2.0 + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Packet capture application +LUCI_DEPENDS:=+luci-mod-admin-full +tcpdump +uhttpd-mod-ubus +coreutils +coreutils-timeout + +PKG_MAINTAINER:=Wojciech Jowsa +PKG_LICENSE:=Apache-2.0 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signatureet diff --git a/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js new file mode 100644 index 000000000..6bf42cc3f --- /dev/null +++ b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js @@ -0,0 +1,287 @@ +'use strict'; +'require rpc'; +'require uci'; +'require ui'; +'require fs'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +var eventSource, + captureFilePoll, + hostName; + +function stopTcpdump() { + fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + if (eventSource) + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); +} + +window.addEventListener('beforeunload', stopTcpdump); + +var callLuciProcessList = rpc.declare({ + object: 'luci', + method: 'getProcessList', + expect: { result: [] } +}); + +var callInitAction = rpc.declare({ + object: 'luci', + method: 'setInitAction', + params: [ 'name', 'action' ], + expect: { result: false } +}); + +function addOutput() { + var tcpdumpOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (tcpdumpOut) + return; + + var frameEl = E('div', {'class': 'cbi-value'}); + + frameEl.appendChild(E('textarea', { + 'id': 'tcpdump_out', + 'class': 'cbi-input-textarea', + 'readonly': '', + 'style': 'width:100%', + 'rows': 30, + })); + + frameEl.firstElementChild.style.fontFamily = 'monospace'; + + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (downloadBtn) + downloadBtn.parentNode.insertBefore(frameEl, downloadBtn.nextSibling); +} + +var downloadCaptureFile = function(ev) { + var form = E('form', { + method: 'post', + action: '/cgi-bin/cgi-download', + enctype: 'application/x-www-form-urlencoded' + }, E('input', { type: 'hidden', name: 'sessionid', value: rpc.getSessionID()}, + E('input', { type: 'hidden', name: 'path', value: "/tmp/capture.pcap"}, + E('input', { type: 'hidden', name: 'filename', value: hostName + "-" + Date.now() + ".pcap"}, + E('input', { type: 'hidden', name: 'mimetype', value: 'application/vnd.tcpdump.pcap'} + ))))); + + ev.currentTarget.parentNode.appendChild(form); + form.submit(); + form.parentNode.removeChild(form); +} + +function subscribeTcpdump() { + if (eventSource) + eventSource.close(); + + eventSource = new EventSource('/ubus/subscribe/tcpdump' + '?' + rpc.getSessionID()); + eventSource.onerror = function(event) { + eventSource.close(); + console.log(event); + }; + + addOutput(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + textOut.value = ""; + eventSource.addEventListener("tcpdump.data", function(event) { + textOut.value = textOut.value + "\n" + JSON.parse(event.data).data; + }); +} + +function updateButtons() { + var tasks = []; + tasks.push(fs.stat("/var/run/packet_capture.pid").then(L.bind(function(res) { + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (!downloadBtn) + return; + if (!eventSource || eventSource.readyState == 2) + subscribeTcpdump(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "green"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = true; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = false; + return; + })).catch(function(error) { + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "red"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = false; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = true; + if (eventSource) + eventSource.close(); + })); + + return Promise.all(tasks); +} + +function updatePollCheckCaptureFileExists() { + checkCaptureFileExists(); + L.Poll.remove(captureFilePoll); + L.Poll.add(L.bind(checkCaptureFileExists, m),5); +} + +function checkCaptureFileExists() { + var tasks = []; + tasks.push(fs.stat("/tmp/capture.pcap").then(L.bind(function(res) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + var downloadCheckBox = document.querySelectorAll('[data-widget-id$="file"]')[0].checked; + if (!downloadCheckBox) { + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + } else { + downloadBtn.disabled = false; + } + })).catch(function(error) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (downloadBtn) + downloadBtn.disabled = true; + })); + + return Promise.all(tasks); +} + +return L.view.extend({ + + load: function() { + return Promise.all([ + uci.load('system') + ]); + }, + + handleDownload: function(ev) { + downloadCaptureFile(ev); + }, + + render: function(processes) { + var m, s, o; + + hostName = uci.get('system', '@system[0]', 'hostname'); + + m = new form.Map('packet_capture', _('Packet Capture - Tcpdump'), _('Capture packets with tcpdump.')); + s = m.section(form.TypedSection, 'tcpdump'); + s.anonymous = 1; + + o = s.option(widgets.DeviceSelect, 'interface', _('Interface'), _('')); + o.noaliases = true; + o.modalonly = true; + o.rmempty = false; + o.filter = function(section_id, value) { + return true; + } + + o = s.option(form.Value, 'filter', _('Filter'), _('Tcpdump filter like protocol, port etc.')); + o.modalonly = false; + o.datatype = 'and(minlength(1),maxlength(1024))'; + + o = s.option(form.Value, 'duration', _('Duration'), _('Duration of packet capturing in seconds.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Value, 'packets', _('Packets'), _('Number of packets to be captured.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Flag, 'domains', _('Resolve domains'), _("Convert host addresses to names.")); + + o = s.option(form.Flag, 'verbose', _('Verbose output'), _("Print the link-level header on each dump line.")); + + o = s.option(form.Flag, 'file', _('Save to file'), _("Save capture to pcap file.")); + + o = s.option(form.Button, 'start_tcpdump', _('Start tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + + var iface = document.querySelectorAll('[id$="interface"]')[1].value, + filter = document.querySelectorAll('[id$="filter"]')[2].value, + packets = document.querySelectorAll('[id$="packets"]')[2].value, + duration = document.querySelectorAll('[id$="duration"]')[2].value, + verbose = document.querySelectorAll('[data-widget-id$="verbose"]')[0].checked, + domains = document.querySelectorAll('[data-widget-id$="domains"]')[0].checked, + file = document.querySelectorAll('[data-widget-id$="file"]')[0].checked + + var args = { + "interface": iface, + "filter": filter, + "packets": packets, + "duration": duration, + "verbose": verbose, + "domains": domains, + "file": file + } + + return fs.exec_direct('/usr/libexec/packet_capture_start', [JSON.stringify(args)]).then(function(replay) { + var error_position = replay.search("error:"); + if (error_position != -1){ + ui.showModal(_(replay.substring(error_position + 6, replay.length)), [ + E('div', { 'class': 'right' }, [ + E('button', { + 'class': 'cbi-button cbi-button-negative important', + 'click': function(ev) { + ui.hideModal(); + } + }, _('Close')), + ]) + ]); + return; + } + rpc.list.apply(rpc).then(function(res) { + for (var k in res) { + if (res[k] == "tcpdump" ) + subscribeTcpdump() + } + }.bind(this)); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'stop_tcpdump', _('Stop tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + if (!eventSource) + return; + return fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'download_file', _('Download capture file')); + o.inputstyle = 'action important'; + o.inputtitle = _('Download'); + o.data_action = 'download' + o.onclick = this.handleDownload; + + L.Poll.add(L.bind(updateButtons, m),1); + captureFilePoll = L.bind(updatePollCheckCaptureFileExists, m); + L.Poll.add(captureFilePoll,1); + + return m.render(); + }, +}); diff --git a/luci-app-packet-capture/root/etc/config/packet_capture b/luci-app-packet-capture/root/etc/config/packet_capture new file mode 100644 index 000000000..105a0dc30 --- /dev/null +++ b/luci-app-packet-capture/root/etc/config/packet_capture @@ -0,0 +1 @@ +config tcpdump \ No newline at end of file diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture b/luci-app-packet-capture/root/usr/libexec/packet_capture new file mode 100755 index 000000000..e1ecf23f7 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture @@ -0,0 +1,64 @@ +#!/usr/bin/env lua + +local ubus = require "ubus" +local fs = require "nixio.fs" + +local conn = ubus.connect() +if not conn then + error("Failed to connect to ubus") + return +end + +local args = "-n" +local duration = "" + +if arg[1] ~= nil then + args = arg[1] + if arg[2] ~= "" then + duration = arg[2] + end +end + +local filter = fs.stat("/tmp/tcpdump_filter") +if filter then + args = args .. " -F /tmp/tcpdump_filter" +end + +local ubus_objects = { + tcpdump = { + } +} + +conn:add( ubus_objects ) + +os.execute("sleep 1") + +local command = "tcpdump -l " .. args .. " 2>&1" + +if duration ~= "" then + command = "timeout " .. duration .. " " .. command +end + +local pipe = io.popen(command) + +for line in pipe:lines() do + local params = { + data = line + } + conn:notify(ubus_objects.tcpdump.__ubusobj, "tcpdump.data", params) +end + +local pcap = fs.stat("/tmp/capture.pcap0") +if pcap then + fs.move("/tmp/capture.pcap0","/tmp/capture.pcap") + fs.remove("/tmp/capture.pcap1") +end + +if filter then + fs.remove("/tmp/tcpdump_filter") +end + +conn:close() +pipe:close() + +fs.remove("/var/run/packet_capture.pid") diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_start b/luci-app-packet-capture/root/usr/libexec/packet_capture_start new file mode 100755 index 000000000..acdf89152 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_start @@ -0,0 +1,69 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +PIDFILE="/var/run/packet_capture.pid" + +if [ -f "$PIDFILE"];then + echo "error: Packet capture is running" + exit 1 +fi + +json_load "$1" +json_get_var interface interface +json_get_var filter filter +json_get_var duration duration +json_get_var packets packets +json_get_var verbose verbose +json_get_var domains domains +json_get_var file file + +args="-n" + +if [ "$domains" == "1" ];then + args="" +fi + +if [ -n "$interface" ];then + ip a show "$interface" > /dev/null 2>&1 + if [ "$?" == "1" ]; then + echo "error: Incorrect format of an interface" + exit 1 + fi + + args="$args -i $interface" +fi + +if [ -n "$packets" ];then + echo "$packets" | egrep '^[0-9]*$' + if [ "$?" -eq 0 ];then + args="$args -c $packets" + else + echo "error: Incorrect packets argument" + exit 1 + fi +fi + +if [ "$verbose" == "1" ];then + args="$args -e" +fi + +if [ "$file" == "1" ];then + mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + args="$args -W 2 -C $((mem/(1024 * 10))) -w /tmp/capture.pcap -z /usr/libexec/packet_capture_stop" +fi + +if [ -n "$filter" ];then + tcpdump -i lo -d "$filter" >/dev/null 2>/dev/null + if [ $? -eq 1 ];then + echo "error: Incorrect filter argument" + exit 1 + fi + echo "$filter" > /tmp/tcpdump_filter +fi + +(/usr/libexec/packet_capture "$args" "$duration")& + +echo $! > /var/run/packet_capture.pid + +exit 0 diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_stop b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop new file mode 100755 index 000000000..bce650346 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop @@ -0,0 +1,9 @@ +#!/bin/sh + +pid=$(cat /var/run/packet_capture.pid) +if [ -n "$pid" ] && grep -sq packet_capture "/proc/$pid/cmdline"; then + ppid=$(pgrep -P $pid) + kill -TERM $ppid +fi + +exit 0 diff --git a/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json new file mode 100644 index 000000000..304fe5431 --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json @@ -0,0 +1,18 @@ +{ + "admin/services/packet_capture": { + "title": "Packet Capture", + "order": 90, + "action": { + "type": "view", + "path": "packet_capture/tcpdump" + }, + "depends" : { + "acl": [ "luci-app-packet-capture" ], + "uci": { "packet_capture": true }, + "fs": { "/usr/libexec/packet_capture": "executable", + "/usr/libexec/packet_capture_start": "executable", + "/usr/libexec/packet_capture_stop": "executable" + } + } + } +} diff --git a/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json new file mode 100644 index 000000000..f59d4060b --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json @@ -0,0 +1,25 @@ +{ + "luci-app-packet-capture": { + "description": "Grant access to tcpdump ubus object", + "read": { + "cgi-io": [ "download", "exec" ], + "ubus": { + "tcpdump": [ "*" ], + "luci": [ "getProcessList" ] + }, + "uci": [ "packet_capture", "system" ], + "file": { + "/tmp/capture.pcap": [ "read" ] + } + }, + "write": { + "uci": [ "packet_capture" ], + "file": { + "/usr/libexec/packet_capture_start": [ "exec" ], + "/usr/libexec/packet_capture_stop": [ "exec" ], + "/usr/libexec/packet_capture": [ "exec" ], + "/tmp/capture.pcap": [ "write" ] + } + } + } +} diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 0ab4f84fd..8578a2d95 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -78,9 +78,9 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd \ kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ - luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ + luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||TARGET_arm64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ - hwinfo (TARGET_x86||TARGET_x86_64):dmidecode + hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status # luci-proto-bonding luci-app-statistics luci-proto-gre # softethervpn5-client softethervpn5-server luci-app-nginx-ha From 8f2b608c2cdec5ebd54f7e72f0b4d447084f3298 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:59:23 +0100 Subject: [PATCH 206/289] Disable all ipv6 settings by default --- openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp index 82d955677..5ad19ac9e 100755 --- a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp +++ b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp @@ -2,8 +2,9 @@ if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "0" ]; then uci -q batch <<-EOF >/dev/null - set dhcp.lan.ra_default=1 - set dhcp.lan.dhcpv6=server + delete dhcp.lan.ra_default + delete dhcp.lan.dhcpv6 + delete dhcp.lan.ra set dhcp.lan.force=1 commit dhcp EOF From f06e72aa75ee84826ce52272adf830dd07baf3af Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:27:15 +0100 Subject: [PATCH 207/289] Update v2ray core --- v2ray-core/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index 70a5cf50f..206aa724f 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=4.28.2 +PKG_VERSION:=4.31.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2ray/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=13d985f7c1d5eb8fa991562eb4b815cb73c15f67f91e36b36b3cf5901529243e +PKG_HASH:=4e475c700863320b92689cb36ef993133e9c799375bbfc4a2811da2283c3673f PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -67,7 +67,7 @@ define Package/v2ray-core SECTION:=net CATEGORY:=Network SUBMENU:=Project V - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle + DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +protobuf endef define Package/v2ray-core/config From c4a6216e7be98c677f335648d7b545d83ada47e6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:53:48 +0100 Subject: [PATCH 208/289] Add luci-app-packet-capture --- luci-app-packet-capture/Makefile | 14 + .../resources/view/packet_capture/tcpdump.js | 287 ++++++++++++++++++ .../root/etc/config/packet_capture | 1 + .../root/usr/libexec/packet_capture | 64 ++++ .../root/usr/libexec/packet_capture_start | 69 +++++ .../root/usr/libexec/packet_capture_stop | 9 + .../luci/menu.d/luci-app-packet-capture.json | 18 ++ .../rpcd/acl.d/luci-app-packet-capture.json | 25 ++ openmptcprouter-full/Makefile | 4 +- 9 files changed, 489 insertions(+), 2 deletions(-) create mode 100644 luci-app-packet-capture/Makefile create mode 100644 luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js create mode 100644 luci-app-packet-capture/root/etc/config/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_start create mode 100755 luci-app-packet-capture/root/usr/libexec/packet_capture_stop create mode 100644 luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json create mode 100644 luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json diff --git a/luci-app-packet-capture/Makefile b/luci-app-packet-capture/Makefile new file mode 100644 index 000000000..ef6370df3 --- /dev/null +++ b/luci-app-packet-capture/Makefile @@ -0,0 +1,14 @@ +# Copyright 2020 Wojciech Jowsa (wojciech.jowsa@gmail.com) +# This is free software, licensed under the Apache License, Version 2.0 + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Packet capture application +LUCI_DEPENDS:=+luci-mod-admin-full +tcpdump +uhttpd-mod-ubus +coreutils +coreutils-timeout + +PKG_MAINTAINER:=Wojciech Jowsa +PKG_LICENSE:=Apache-2.0 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signatureet diff --git a/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js new file mode 100644 index 000000000..6bf42cc3f --- /dev/null +++ b/luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js @@ -0,0 +1,287 @@ +'use strict'; +'require rpc'; +'require uci'; +'require ui'; +'require fs'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +var eventSource, + captureFilePoll, + hostName; + +function stopTcpdump() { + fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + if (eventSource) + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); +} + +window.addEventListener('beforeunload', stopTcpdump); + +var callLuciProcessList = rpc.declare({ + object: 'luci', + method: 'getProcessList', + expect: { result: [] } +}); + +var callInitAction = rpc.declare({ + object: 'luci', + method: 'setInitAction', + params: [ 'name', 'action' ], + expect: { result: false } +}); + +function addOutput() { + var tcpdumpOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (tcpdumpOut) + return; + + var frameEl = E('div', {'class': 'cbi-value'}); + + frameEl.appendChild(E('textarea', { + 'id': 'tcpdump_out', + 'class': 'cbi-input-textarea', + 'readonly': '', + 'style': 'width:100%', + 'rows': 30, + })); + + frameEl.firstElementChild.style.fontFamily = 'monospace'; + + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (downloadBtn) + downloadBtn.parentNode.insertBefore(frameEl, downloadBtn.nextSibling); +} + +var downloadCaptureFile = function(ev) { + var form = E('form', { + method: 'post', + action: '/cgi-bin/cgi-download', + enctype: 'application/x-www-form-urlencoded' + }, E('input', { type: 'hidden', name: 'sessionid', value: rpc.getSessionID()}, + E('input', { type: 'hidden', name: 'path', value: "/tmp/capture.pcap"}, + E('input', { type: 'hidden', name: 'filename', value: hostName + "-" + Date.now() + ".pcap"}, + E('input', { type: 'hidden', name: 'mimetype', value: 'application/vnd.tcpdump.pcap'} + ))))); + + ev.currentTarget.parentNode.appendChild(form); + form.submit(); + form.parentNode.removeChild(form); +} + +function subscribeTcpdump() { + if (eventSource) + eventSource.close(); + + eventSource = new EventSource('/ubus/subscribe/tcpdump' + '?' + rpc.getSessionID()); + eventSource.onerror = function(event) { + eventSource.close(); + console.log(event); + }; + + addOutput(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + textOut.value = ""; + eventSource.addEventListener("tcpdump.data", function(event) { + textOut.value = textOut.value + "\n" + JSON.parse(event.data).data; + }); +} + +function updateButtons() { + var tasks = []; + tasks.push(fs.stat("/var/run/packet_capture.pid").then(L.bind(function(res) { + var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0]; + if (!downloadBtn) + return; + if (!eventSource || eventSource.readyState == 2) + subscribeTcpdump(); + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "green"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = true; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = false; + return; + })).catch(function(error) { + var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0]; + if (textOut) + textOut.style.borderColor = "red"; + var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0]; + if (startBtn) + startBtn.hidden = false; + var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0]; + if (stopBtn) + stopBtn.hidden = true; + if (eventSource) + eventSource.close(); + })); + + return Promise.all(tasks); +} + +function updatePollCheckCaptureFileExists() { + checkCaptureFileExists(); + L.Poll.remove(captureFilePoll); + L.Poll.add(L.bind(checkCaptureFileExists, m),5); +} + +function checkCaptureFileExists() { + var tasks = []; + tasks.push(fs.stat("/tmp/capture.pcap").then(L.bind(function(res) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + var downloadCheckBox = document.querySelectorAll('[data-widget-id$="file"]')[0].checked; + if (!downloadCheckBox) { + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + } else { + downloadBtn.disabled = false; + } + })).catch(function(error) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (downloadBtn) + downloadBtn.disabled = true; + })); + + return Promise.all(tasks); +} + +return L.view.extend({ + + load: function() { + return Promise.all([ + uci.load('system') + ]); + }, + + handleDownload: function(ev) { + downloadCaptureFile(ev); + }, + + render: function(processes) { + var m, s, o; + + hostName = uci.get('system', '@system[0]', 'hostname'); + + m = new form.Map('packet_capture', _('Packet Capture - Tcpdump'), _('Capture packets with tcpdump.')); + s = m.section(form.TypedSection, 'tcpdump'); + s.anonymous = 1; + + o = s.option(widgets.DeviceSelect, 'interface', _('Interface'), _('')); + o.noaliases = true; + o.modalonly = true; + o.rmempty = false; + o.filter = function(section_id, value) { + return true; + } + + o = s.option(form.Value, 'filter', _('Filter'), _('Tcpdump filter like protocol, port etc.')); + o.modalonly = false; + o.datatype = 'and(minlength(1),maxlength(1024))'; + + o = s.option(form.Value, 'duration', _('Duration'), _('Duration of packet capturing in seconds.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Value, 'packets', _('Packets'), _('Number of packets to be captured.')); + o.modalonly = false; + o.datatype = 'range(1,4294967296)'; + + o = s.option(form.Flag, 'domains', _('Resolve domains'), _("Convert host addresses to names.")); + + o = s.option(form.Flag, 'verbose', _('Verbose output'), _("Print the link-level header on each dump line.")); + + o = s.option(form.Flag, 'file', _('Save to file'), _("Save capture to pcap file.")); + + o = s.option(form.Button, 'start_tcpdump', _('Start tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + var downloadBtn = document.querySelector('[data-action="download"]'); + if (!downloadBtn) + return; + fs.remove("/tmp/capture.pcap").then(function(replay) { + downloadBtn.disabled = true;; + }.bind(this)).catch(function(error) { + console.log(error); + }); + + var iface = document.querySelectorAll('[id$="interface"]')[1].value, + filter = document.querySelectorAll('[id$="filter"]')[2].value, + packets = document.querySelectorAll('[id$="packets"]')[2].value, + duration = document.querySelectorAll('[id$="duration"]')[2].value, + verbose = document.querySelectorAll('[data-widget-id$="verbose"]')[0].checked, + domains = document.querySelectorAll('[data-widget-id$="domains"]')[0].checked, + file = document.querySelectorAll('[data-widget-id$="file"]')[0].checked + + var args = { + "interface": iface, + "filter": filter, + "packets": packets, + "duration": duration, + "verbose": verbose, + "domains": domains, + "file": file + } + + return fs.exec_direct('/usr/libexec/packet_capture_start', [JSON.stringify(args)]).then(function(replay) { + var error_position = replay.search("error:"); + if (error_position != -1){ + ui.showModal(_(replay.substring(error_position + 6, replay.length)), [ + E('div', { 'class': 'right' }, [ + E('button', { + 'class': 'cbi-button cbi-button-negative important', + 'click': function(ev) { + ui.hideModal(); + } + }, _('Close')), + ]) + ]); + return; + } + rpc.list.apply(rpc).then(function(res) { + for (var k in res) { + if (res[k] == "tcpdump" ) + subscribeTcpdump() + } + }.bind(this)); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'stop_tcpdump', _('Stop tcpdump'), _('')); + o.inputstyle = 'apply'; + o.onclick = ui.createHandlerFn(this, function(section_id, ev) { + if (!eventSource) + return; + return fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) { + eventSource.close(); + }.bind(this)).catch(function(error) { + console.log(error); + }); + }); + + o = s.option(form.Button, 'download_file', _('Download capture file')); + o.inputstyle = 'action important'; + o.inputtitle = _('Download'); + o.data_action = 'download' + o.onclick = this.handleDownload; + + L.Poll.add(L.bind(updateButtons, m),1); + captureFilePoll = L.bind(updatePollCheckCaptureFileExists, m); + L.Poll.add(captureFilePoll,1); + + return m.render(); + }, +}); diff --git a/luci-app-packet-capture/root/etc/config/packet_capture b/luci-app-packet-capture/root/etc/config/packet_capture new file mode 100644 index 000000000..105a0dc30 --- /dev/null +++ b/luci-app-packet-capture/root/etc/config/packet_capture @@ -0,0 +1 @@ +config tcpdump \ No newline at end of file diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture b/luci-app-packet-capture/root/usr/libexec/packet_capture new file mode 100755 index 000000000..e1ecf23f7 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture @@ -0,0 +1,64 @@ +#!/usr/bin/env lua + +local ubus = require "ubus" +local fs = require "nixio.fs" + +local conn = ubus.connect() +if not conn then + error("Failed to connect to ubus") + return +end + +local args = "-n" +local duration = "" + +if arg[1] ~= nil then + args = arg[1] + if arg[2] ~= "" then + duration = arg[2] + end +end + +local filter = fs.stat("/tmp/tcpdump_filter") +if filter then + args = args .. " -F /tmp/tcpdump_filter" +end + +local ubus_objects = { + tcpdump = { + } +} + +conn:add( ubus_objects ) + +os.execute("sleep 1") + +local command = "tcpdump -l " .. args .. " 2>&1" + +if duration ~= "" then + command = "timeout " .. duration .. " " .. command +end + +local pipe = io.popen(command) + +for line in pipe:lines() do + local params = { + data = line + } + conn:notify(ubus_objects.tcpdump.__ubusobj, "tcpdump.data", params) +end + +local pcap = fs.stat("/tmp/capture.pcap0") +if pcap then + fs.move("/tmp/capture.pcap0","/tmp/capture.pcap") + fs.remove("/tmp/capture.pcap1") +end + +if filter then + fs.remove("/tmp/tcpdump_filter") +end + +conn:close() +pipe:close() + +fs.remove("/var/run/packet_capture.pid") diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_start b/luci-app-packet-capture/root/usr/libexec/packet_capture_start new file mode 100755 index 000000000..acdf89152 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_start @@ -0,0 +1,69 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +PIDFILE="/var/run/packet_capture.pid" + +if [ -f "$PIDFILE"];then + echo "error: Packet capture is running" + exit 1 +fi + +json_load "$1" +json_get_var interface interface +json_get_var filter filter +json_get_var duration duration +json_get_var packets packets +json_get_var verbose verbose +json_get_var domains domains +json_get_var file file + +args="-n" + +if [ "$domains" == "1" ];then + args="" +fi + +if [ -n "$interface" ];then + ip a show "$interface" > /dev/null 2>&1 + if [ "$?" == "1" ]; then + echo "error: Incorrect format of an interface" + exit 1 + fi + + args="$args -i $interface" +fi + +if [ -n "$packets" ];then + echo "$packets" | egrep '^[0-9]*$' + if [ "$?" -eq 0 ];then + args="$args -c $packets" + else + echo "error: Incorrect packets argument" + exit 1 + fi +fi + +if [ "$verbose" == "1" ];then + args="$args -e" +fi + +if [ "$file" == "1" ];then + mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + args="$args -W 2 -C $((mem/(1024 * 10))) -w /tmp/capture.pcap -z /usr/libexec/packet_capture_stop" +fi + +if [ -n "$filter" ];then + tcpdump -i lo -d "$filter" >/dev/null 2>/dev/null + if [ $? -eq 1 ];then + echo "error: Incorrect filter argument" + exit 1 + fi + echo "$filter" > /tmp/tcpdump_filter +fi + +(/usr/libexec/packet_capture "$args" "$duration")& + +echo $! > /var/run/packet_capture.pid + +exit 0 diff --git a/luci-app-packet-capture/root/usr/libexec/packet_capture_stop b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop new file mode 100755 index 000000000..bce650346 --- /dev/null +++ b/luci-app-packet-capture/root/usr/libexec/packet_capture_stop @@ -0,0 +1,9 @@ +#!/bin/sh + +pid=$(cat /var/run/packet_capture.pid) +if [ -n "$pid" ] && grep -sq packet_capture "/proc/$pid/cmdline"; then + ppid=$(pgrep -P $pid) + kill -TERM $ppid +fi + +exit 0 diff --git a/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json new file mode 100644 index 000000000..304fe5431 --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json @@ -0,0 +1,18 @@ +{ + "admin/services/packet_capture": { + "title": "Packet Capture", + "order": 90, + "action": { + "type": "view", + "path": "packet_capture/tcpdump" + }, + "depends" : { + "acl": [ "luci-app-packet-capture" ], + "uci": { "packet_capture": true }, + "fs": { "/usr/libexec/packet_capture": "executable", + "/usr/libexec/packet_capture_start": "executable", + "/usr/libexec/packet_capture_stop": "executable" + } + } + } +} diff --git a/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json new file mode 100644 index 000000000..f59d4060b --- /dev/null +++ b/luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json @@ -0,0 +1,25 @@ +{ + "luci-app-packet-capture": { + "description": "Grant access to tcpdump ubus object", + "read": { + "cgi-io": [ "download", "exec" ], + "ubus": { + "tcpdump": [ "*" ], + "luci": [ "getProcessList" ] + }, + "uci": [ "packet_capture", "system" ], + "file": { + "/tmp/capture.pcap": [ "read" ] + } + }, + "write": { + "uci": [ "packet_capture" ], + "file": { + "/usr/libexec/packet_capture_start": [ "exec" ], + "/usr/libexec/packet_capture_stop": [ "exec" ], + "/usr/libexec/packet_capture": [ "exec" ], + "/tmp/capture.pcap": [ "write" ] + } + } + } +} diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 0ab4f84fd..8578a2d95 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -78,9 +78,9 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd \ kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ - luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ + luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||TARGET_arm64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ - hwinfo (TARGET_x86||TARGET_x86_64):dmidecode + hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status # luci-proto-bonding luci-app-statistics luci-proto-gre # softethervpn5-client softethervpn5-server luci-app-nginx-ha From 8a663955bfe39e9b9ccef211afa09d0d418b2271 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 9 Dec 2020 14:59:23 +0100 Subject: [PATCH 209/289] Disable all ipv6 settings by default --- openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp index 82d955677..5ad19ac9e 100755 --- a/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp +++ b/openmptcprouter/files/etc/uci-defaults/2000-omr-dhcp @@ -2,8 +2,9 @@ if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "0" ]; then uci -q batch <<-EOF >/dev/null - set dhcp.lan.ra_default=1 - set dhcp.lan.dhcpv6=server + delete dhcp.lan.ra_default + delete dhcp.lan.dhcpv6 + delete dhcp.lan.ra set dhcp.lan.force=1 commit dhcp EOF From 6b0e8134a87aba2bd62267949d9935e4633e7c90 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 10 Dec 2020 16:31:57 +0800 Subject: [PATCH 210/289] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6483e1fcf..6404b7923 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This is the OpenWrt OpenMPTCProuter feed containing all modified and necessary p For More information, see [https://github.com/ysurac/openmptcprouter](https://github.com/ysurac/openmptcprouter) and [https://www.openmptcprouter.com](https://www.openmptcprouter.com/). - +1 ## Glorytun *Source:* [https://github.com/angt/glorytun](https://github.com/angt/glorytun) From 012470bbbdaa178ec00402a6143cca4a21e4727c Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 10 Dec 2020 16:35:58 +0800 Subject: [PATCH 211/289] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6404b7923..6483e1fcf 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This is the OpenWrt OpenMPTCProuter feed containing all modified and necessary p For More information, see [https://github.com/ysurac/openmptcprouter](https://github.com/ysurac/openmptcprouter) and [https://www.openmptcprouter.com](https://www.openmptcprouter.com/). -1 + ## Glorytun *Source:* [https://github.com/angt/glorytun](https://github.com/angt/glorytun) From 0f87c62f36edef002791473244d312a422d4962a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Dec 2020 21:38:50 +0100 Subject: [PATCH 212/289] Fix for gre tunnel --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 08ce14400..4806ea137 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -439,7 +439,7 @@ _get_gre_tunnel() { peeraddr="$(echo $tunnel | jsonfilter -q -e '@.remote_ip')" ipaddr="$(echo $tunnel | jsonfilter -q -e '@.local_ip')" publicaddr="$(echo $tunnel | jsonfilter -q -e '@.public_ip')" - if [ "$peeraddr" != "" ] && [ "$ipaddr" != "" ] && [ "$publicaddr" != "" ] && ([ "$(uci -q get network.omrip${i}.peeraddr)" != "$peeraddr" ] || [ "$(uci -q get network.omrip${i}.ipaddr)" != "$ipaddr" ] || [ "$(uci -q get network.omrip${i}gre.ipaddr)" != "$vpnip_local" ]); then + if [ "$peeraddr" != "" ] && [ "$ipaddr" != "" ] && [ "$publicaddr" != "" ] && ([ "$(uci -q get network.omrip${i}.ipaddr)" != "$peeraddr" ] || [ "$(uci -q get network.omrip${i}.ipaddr)" != "$ipaddr" ] || [ "$(uci -q get network.omrip${i}gre.ipaddr)" != "$vpnip_local" ]); then uci -q batch <<-EOF >/dev/null set network.omrip${i}gre=interface set network.omrip${i}gre.label="GRE tunnel for $publicaddr" From 8ef4df91e747905976ed59dabfa23df737cd29eb Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Dec 2020 21:39:49 +0100 Subject: [PATCH 213/289] Add OpenVPN Bonding support --- .../luasrc/controller/openmptcprouter.lua | 13 ++- .../luasrc/view/openmptcprouter/wizard.htm | 5 +- openmptcprouter-full/Makefile | 2 +- .../files/etc/init.d/openvpnbonding | 95 +++++++++++++++++++ 4 files changed, 108 insertions(+), 7 deletions(-) create mode 100755 openmptcprouter/files/etc/init.d/openvpnbonding diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b294af40c..c9a264ed8 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -631,8 +631,8 @@ function wizard_add() ucic:set("glorytun","vpn","remoteip","10.255.255.1") ucic:set("network","omr6in4","ipaddr","10.255.255.2") ucic:set("network","omr6in4","peeraddr","10.255.255.1") + ucic:set("network","omrvpn","proto","none") end - ucic:set("network","omrvpn","proto","none") else ucic:set("glorytun","vpn","key","") --ucic:set("glorytun","vpn","enable",0) @@ -656,8 +656,8 @@ function wizard_add() ucic:set("glorytun-udp","vpn","remoteip","10.255.254.1") ucic:set("network","omr6in4","ipaddr","10.255.254.2") ucic:set("network","omr6in4","peeraddr","10.255.254.1") + ucic:set("network","omrvpn","proto","none") end - ucic:set("network","omrvpn","proto","none") else ucic:set("glorytun-udp","vpn","key","") end @@ -677,9 +677,11 @@ function wizard_add() ucic:set("dsvpn","vpn","key",dsvpn_key) ucic:set("dsvpn","vpn","localip","10.255.251.2") ucic:set("dsvpn","vpn","remoteip","10.255.251.1") - ucic:set("network","omr6in4","ipaddr","10.255.251.2") - ucic:set("network","omr6in4","peeraddr","10.255.251.1") - ucic:set("network","omrvpn","proto","none") + if default_vpn == "dsvpn" then + ucic:set("network","omr6in4","ipaddr","10.255.251.2") + ucic:set("network","omr6in4","peeraddr","10.255.251.1") + ucic:set("network","omrvpn","proto","none") + end else ucic:set("dsvpn","vpn","key","") --ucic:set("dsvpn","vpn","enable",0) @@ -770,6 +772,7 @@ function wizard_add() luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") --luci.sys.call("/etc/init.d/ubond restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/openvpn restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/openvpnbonding restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/dsvpn restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/omr-tracker start >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index d8cda41f8..66a5b2b00 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -306,6 +306,8 @@ <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% elseif vpn == "openvpn" then %> <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% elseif vpn == "openvpn_bonding" then %> + <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% end end @@ -319,7 +321,8 @@ <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> - <% if nixio.fs.access("/usr/sbin/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% end diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 8578a2d95..9625904b5 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -80,7 +80,7 @@ MY_DEPENDS := \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||TARGET_arm64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ - hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture + hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status # luci-proto-bonding luci-app-statistics luci-proto-gre # softethervpn5-client softethervpn5-server luci-app-nginx-ha diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding new file mode 100755 index 000000000..f0ba915fa --- /dev/null +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -0,0 +1,95 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2020 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# Released under GPL 3. See LICENSE for the full terms. + +{ + START=70 + STOP=10 + USE_PROCD=1 +} + +_getremoteip() { + [ "$(uci -q get openmptcprouter.$1.master)" = "1" ] && remoteip=$(uci -q get openmptcprouter.$1.ip) +} + +_openvpnbonding() { + local interface=$1 + if [ "$(uci -q get openmptcprouter.${interface}.multipath)" = "master" ] || [ "$(uci -q get openmptcprouter.${interface}.multipath)" = "on" ]; then + nbintf=$(($nbintf+1)) + remoteip="" + config_load openmptcprouter + config_foreach _getremoteip server + if [ -n "$remoteip" ]; then + localip=$(ubus call network.interface.$interface status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") + uci -q batch <<-EOF >/dev/null + set openvpn.omr_bonding_${interface}=openvpn + set openvpn.omr_bonding_${interface}.dev="bond${interface}" + set openvpn.omr_bonding_${interface}.dev_type="tap" + set openvpn.omr_bonding_${interface}.cipher='AES-256-CBC' + set openvpn.omr_bonding_${interface}.port="6535${nbintf}" + set openvpn.omr_bonding_${interface}.remote="${remoteip}" + set openvpn.omr_bonding_${interface}.local="${localip}" + set openvpn.omr_bonding_${interface}.lport='0' + set openvpn.omr_bonding_${interface}.ncp_disable='1' + set openvpn.omr_bonding_${interface}.auth_nocache='1' + set openvpn.omr_bonding_${interface}.proto='udp' + set openvpn.omr_bonding_${interface}.client='1' + set openvpn.omr_bonding_${interface}.tls_client='1' + set openvpn.omr_bonding_${interface}.enabled='1' + set openvpn.omr_bonding_${interface}.key='/etc/luci-uploads/client.key' + set openvpn.omr_bonding_${interface}.cert='/etc/luci-uploads/client.crt' + set openvpn.omr_bonding_${interface}.ca='/etc/luci-uploads/ca.crt' + commit openvpn + EOF + if [ "$(uci -q get network.omrvpn.slaves | grep bond${interface})" = "" ]; then + uci -q add_list network.omrvpn.slaves="bond${interface}" + fi + /etc/init.d/openvpn start omr_bonding_${interface} + ip link set bond${interface} master bonding-omrvpn + fi + fi +} + +_disable_openvpnbonding() +{ + name=$1 + if [ "$(echo $name | grep omr_bonding)" != "" ]; then + uci -q set openvpn.${name}.enabled='0' + fi +} + +start_service() +{ + if [ "$(uci -q get openmptcprouter.settings.vpn)" = "openvpn_bonding" ]; then + nbintf=0 + uci -q batch <<-EOF >/dev/null + set network.omrvpn.proto='bonding' + set network.omrvpn.bonding_policy='balance-rr' + set network.omrvpn.packets_per_slave='1' + set network.omrvpn.xmit_hash_policy='layer2' + set network.omrvpn.all_slaves_active='0' + set network.omrvpn.netmask='255.255.255.0' + set network.omrvpn.ipaddr='10.255.248.2' + set network.omrvpn.link_monitoring='mii' + set network.omrvpn.miimon='10' + set network.omrvpn.downdelay='100' + set network.omrvpn.updelay='20' + set network.omrvpn.use_carrier='1' + commit network + EOF + config_load openmptcprouter + config_foreach _openvpnbonding interface + ip link set bonding-omrvpn up + uci -q batch <<-EOF >/dev/null + commit network + EOF + else + config_load openvpn + config_foreach _disable_openvpnbonding + uci -q commit openvpn + fi +} + +service_triggers() { + procd_add_reload_trigger "openvpn" "network" +} \ No newline at end of file From 3d764aa604f21f0f57bc6dee91e5e2ce2c2411df Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sat, 12 Dec 2020 20:47:04 +0800 Subject: [PATCH 214/289] Update wanstatus.htm --- luci-app-status/luasrc/view/status/wanstatus.htm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-status/luasrc/view/status/wanstatus.htm b/luci-app-status/luasrc/view/status/wanstatus.htm index 47dc23d3d..4c7bd81a7 100644 --- a/luci-app-status/luasrc/view/status/wanstatus.htm +++ b/luci-app-status/luasrc/view/status/wanstatus.htm @@ -130,7 +130,7 @@ } } temp += ''; - var equipmentIcon = ''; + var equipmentIcon = ''; var title = String.format("%s (%s)", mArray.openmptcprouter.hostname, mArray.openmptcprouter.local_addr); var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; @@ -1654,13 +1654,13 @@ window.setTimeout(function() <% if curifname == "all" then %> <%:Download:%> - +
-
<%:Upload:%> - +
-
@@ -1668,7 +1668,7 @@ window.setTimeout(function() <% else %> - +
-

From 3f1d26318d483c453b2b9e3df2c246383ca800f4 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 13 Dec 2020 03:15:34 +0800 Subject: [PATCH 215/289] fixres --- .../htdocs/luci-static/resources/computer.png | Bin 1101 -> 3690 bytes .../htdocs/luci-static/resources/modem.svg | 53 +----------------- .../luci-static/resources/openmptcprouter.png | Bin 10733 -> 4586 bytes .../htdocs/luci-static/resources/server.png | Bin 1115 -> 7416 bytes .../luasrc/view/status/wanstatus.htm | 2 +- .../luci-static/openmptcprouter/cascade.css | 6 +- 6 files changed, 6 insertions(+), 55 deletions(-) diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/computer.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/computer.png index 4598c7cb644bf2f2cc53b4fb0f07af6b55ba80b4..17e7873540eb754034c06ad57c5cac5462a9ea86 100644 GIT binary patch literal 3690 zcmbVP2{=@38y<=;N-9y=8lzOESDND$hIhf35W{j~UEmC2$P!i&=6rz-* z&{vjEN@XdPEZJq>MdCkNTz&ub{o8l0bLPC~eed^vp8I*9=ee#qX=`mRC#x(Afk5Oe zEzIn}w+r}CmPmuYTETn`@Fl~waOOiGOBLoH2}nZXS_ni+nc?6haH3d|X&e@kO6Pb2 zND+$*q9G7{BN3NM^92M@Pr#eOHh>Kl{0@UM=ms!HJOxeRngTuyiy$7bJILCB7UWAK z(P2i0P<;^@BwzsoDpbT`viW3@0qh$u863|~qhQc)5P`1&Y}>p+s1wB&YRcgOP&`r> zLBrsPPyz{w(Z!*4bhkpWXbcI3CZaGp2sDO_)+OT!&>t5Jw8o=*k?qZP{ICUn8Nhr5 z0xlVa3J3^52IwF;JZ}_+L;^XmC@dBMA`tvQwty-^u=$!l8O#7ajmO{$7#ucqo{{Rw z@fR4tKu^C*U~v~{+58`20t1E;QMo7#5nGzeMvL0=WRn9^iBQc{E_V z5Oh;>UJaLQ$^)nZ4$pzZVg5WQ+n+8&v7l<`W(t+YV9$%#^2-*$j4A*OU|2L3jlf{Q z+W~_npzif1?A_hZClK))pn znM#{41OpgtJ_7(c?8h|YZ%5!eZGaB|lKzLh_zvT9yaWMM9A#SDe#|guxrc@7ups0vC!}UHrVBOU^_deWrcu1mP}ZhZF3MM_9yu=Ro^I< zAM)-Tc;0(YZIgHuriIhM$gp1P*F&~!(63nxTNS5tQppEyVZ1`UV^{cRh_+;gth2=m ziwzk{_q4CcoyfCApT?zb&MMYCqILLu1TCuVowzw>{N>Ar(A#gDMC)_j7WA5TZgL*! zOS;IPG@48%bxk+e+A(=w?Tvi9 zyyr5NOUPDM-MzU_6;itBjjf9{J$(~`r<43?_e((dQg3Z_CzbYwRin!sy~Vszr)$+H z^v7M2T`x9@W+myLH7|PlnAZ-^+QFg`A+OhVH1#0e^Rw65h#OAv%m!i)uf4&nb?Iy# zFOjIYZn$?h+&s_VSffJPquS1Xm&oz1&Od0{)i=dzl@A!B&YIY;>rCZqy?blNo=HGL z{Zb;!<;Ct{k}kNnY?{__YF1R3D(+ll#X$A zKe1Csy(6!Cb>ZieW%n**b$z+8e_KRCSu(BV$(=vg5so%H0;gU~&Gcu<7V{N3q3V{w zMvmR9$4FWd`wx-bSIJh_=*3R?J130r&UvIBrka#V$|H(Cxt##5-)256F)|cgK5Kho zE_8U^BvbWN4Ez*@9Ah5Xm#UQ(r#&%yFVdTEyr$`uB3a64c1PHeD~QA%R%h~{G|>q8 zNLNbersnx7$1n&H>8*P#eouT82^9L+w>Snlc6}>qLdM7~`C$k#JLaWAc2!`pA{mTB zm&_!vw!GP>zpcN1?4-GNUFGP|<9d&0Jn-0x?I^^A_kyG6xzoL_scr8bmJTjIXDxJ1 z9X$pYBy+cU|6H@v@@5D9QfWRo`i;+=G9 zKN>eRnW>B)4i;D<+kB2`;rI~oTPKID#DcS>PIn~JcXy-oR43k;`Sb}l%PTWo+JPVs z!OO?DS?|~AiN>CIk?YNMbAq&os$0;Uq9y}Tp{KAltm>A0#Dk7#YZvXJt)JaBu4@}K zxHpzLY9@xMn@Vl%J#)g*P0Vd6m>Zy$Y{XZ_Gd$a$1_$_)&CK&}H?}Dr@s8Jz-y&WV zEoawvSmx_Kr7unxX3osZfZ!W&$HM$k)l;V;q%Y~ZskAnIP!V~$oqiv#sdCKTkVSBA zeXzKNlr?_u{58_>p4L?#{8IPT)+KyU@5F@n!zCMtOcNSWHrOzFsGigHaq{v&A^gJh zyP>17*^rbAYMEzI0V>vgD}`Z93FLP3`%o{b2P)NHbkQZgvYB042|l0viS@Y8DK?T3 zcRcQ@I!W0oqw`a&s7n&}G4I@~DNo!`lvebLTIU)EjEqdf8!exo#WZZ`e=9E9 zZ>5kFiO|`;;tZi``V{Q)(C4^tnd>um>slWX$h3%v+`3EU2kKV5zuAIiJd8{hE@0`^6y?OV}`q@7JCo%JWrAV>~@W|uGh=IS$wJe zS$ouhw6i{sR|vG?*885;#`XkT%q0h`<2NTr4uoD^cgrUKK&>t6-IN(T(##3(-9C~u zY*lT%x)knnX|{UUb;pDy{ERcF$^~6oA!_@$v6iC#`_|Gc@|RoFGn6_VMK=uCevh{3 z7YB%r&f8Ojt?|Xk(XxatG+25^ZUHa`_q(9UUZqb?ntWs{-_T1 z_r~M@&`1bH9!=MODj&sa?T#>MS?1^xC7RoIGa}Kd@}_ z&U3Auh2Bw8rbIEsYIJFU7~PS$xp4GaS-GXK{~5kyeZMndXn(C&SI3-LNE2^*LgBz- zPTufffb-StlFp_cYp{)8d3xb%2-MSe;;l0uu%)Poa+g7T`h7fkurYrgdBO)|02apbz}XCgGwoL(5&f7*NvMpYaP>^3 zpt4vlmt~g=25q1P@LT{7BS`CoN=CpJdxIv(GrkD`chVD;nJ>bi^o(wfSY zVCS7c6J)NHtA?hs5RYQ5=*FvaCrC_Ed3i}CZL!kN+DdjnH$?KYG>rm*yY0JXQY_$~ zTvj#E;>ll(i+>*Iq6~OV;2hz(;Q(wSm&EOr4`NkAnWq^5vPWW@skC@kL&?_a5$&;z zok*4%%mPmLsy=F7MXM92r7^yE&y^9Y!AQ-M4aj`_TPh^fl#fB)a}q#2rcPut^r>-v z=30jpoihXSJX(bA z=oUSS*@u)zSN+piMRr!%1_vmeyH*ad1+5Ldu)^PkOgEeamR%GAJQqG!4Scv$ym5|4 zaSuPLHJ5e_luiJ!C6bwky9CbB zsH;bhJQh+)B|Jp`*4u>|#k|PX2ieNX$_wY>E0w#51@9)MP#hUtTGe5F$!lJKaG3wSbo}&&V&qkA}wD-=G`H-X`Z#!PZrq= z?5k!l2k>naGpkzO$@2Gq@Flwf4UAJ|?A;*?%TJM!V0VAzNRqNN$a2BR`x){=M)*7VkKd zwXF{ybln8j=>SqGBO^IKcfClTR7%OaCI-Dgzp{ZYaQ4B eb@f*L6<`2|l77u%dHOB@0000 - - - \ No newline at end of file diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png index f4683f2c532cf5306c9ed7c8b5af8945309fc203..8a568399db24735c46b280d4661bc638857f2f76 100644 GIT binary patch literal 4586 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 literal 10733 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 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/server.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/server.png index 78f61d67281331786d80f0af1580dba0a51b5736..cb6c44a9ed9a1efddac6a2019c4a7d9186f0b027 100644 GIT binary patch literal 7416 zcmbVR2RNJUzeep+qc*LGQA#ASMQn;{h)vaq2x0}HC~B)wYE!e+sA{d+TWj;#t6HVC zS1Gkx<;1tH|2gM7=lrje>wWV+@B7@({kwnT`Q=Iyh1AiYrRJa}A|j&I(p1wYT=fX2 z10^}(J?aOS0pUXBrfG&J%uipO#43WBK14)h>sUimPgBGl7#imyin7JoU_^af+z4nQ zBDkWD8w%}&@dVgl?6I!$z@4TxAOLGC4>XZPKoD-K7zeE80}qVB106&311GesEl^Pb z0QZ3r2wX6pD1eWPvnw9vBM+ze7Bo>Mbsc^RNd)Wn~E*Vqh^b5CH+g`?`9fd_b;v-oF^sFnF{F*3A=(a|K*5 zqHJ(pp7KC~(mz~qar>Lr75`_L2mu58pxnSvQOJc$zXNU2f8*S|Je+?wZi@zEoG~sK zS5G_v3;i4G=796W;T>@Q1NGn2|H%L$vM~OEN%=;59%HfkIj#oEGTY{aGQBqSw3;?ig| zNCG1c1<6WE$$-Qpq$KU6#85W2P}E=R)o^I9iz4`Iy)9wAG@;0)F*dRw2^q94NCFDM zfMlQ$S&*!>9SVYxm6d_W5`_MqbC|9Nmaqv?&i`+oi>-N4Jupoyo{(4HKR1s7#{JKc zGZyfB!N5@Hi;W-;L|;?@#uoVJW9⁡NSD$4_a>r41x52sf#~gc$}T5H_8K}Y)^>R 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 delta 1075 zcmV-31kC&RIok-3Bo78+OGiWi{{a60|De66laV18e*gz`Nliru;tLxMAT--}vf=;$ z1L#RaK~#9!?VY`A6hRoqf4h6(LIgn!K{1UQqcJ8Xduwrb;WD>(H@h?Uk=*mZ3%R|SN%Fh-cxUIyCZM%S zz)j#fe=r7Y1p+pfMvT`nP_eAL0{jBr0QZ2`S-<(+S|f>KEj|J#Y~Yn@g#|4=D!`-( zEo%6>0L%b;ky>$sZ@q-IIr7UhFMz}GGJB`#C||*Y9I^+(X|2f zOgD%Lkd#WLOiN}IMG279wozTHvk@RBMv7zm%Oys-l60xgU_(sFlZJjsYjy4u#6Z~m zf6R%2k>Uhd>$Q08t4@C*mdoWVAcGt|GiZoz*6AO_g@px;&t50nk|276sGKFsE+a|I zd3h-W=7q*yaU7cv--Weu@FdYIYD z5Qok9?ggTZ?;apF0F%kn5u!|B0dPmjY{a)2n4r>7K0CeOwx&T;ddXLtuLe;?YW zOtvLK6vRP-xNcI*V0<4+rI|bd-lF4yOdO4vkjc{>s7#)YlF8GGp9@sSSZTGW0Nh4SS=-h5H*nM} zbf`9ID!pl;6sPQzS>~|-=IW6be;O0*WkJjZ@=^Wb6#>i*ajw219~YNQYP^ZP1K1e? zd&I?Fg+jsn(~GeX*e*1=dm=!jgDMXaL_ripL8M1c*+F;7xt6LR2XcLNie)<3>y81R1gd3x0Z!R;-BI8H@K4az;xBL?*p>AT$pml}I1lUt tb^}|6WDfjO%b!0`ea`N)8CnLDs{d)gJT8*w5MTfR002ovPDHLkV1hxO?~ecg diff --git a/luci-app-status/luasrc/view/status/wanstatus.htm b/luci-app-status/luasrc/view/status/wanstatus.htm index 4c7bd81a7..16535a648 100644 --- a/luci-app-status/luasrc/view/status/wanstatus.htm +++ b/luci-app-status/luasrc/view/status/wanstatus.htm @@ -130,7 +130,7 @@ } } temp += '
'; - var equipmentIcon = ''; + var equipmentIcon = ''; var title = String.format("%s (%s)", mArray.openmptcprouter.hostname, mArray.openmptcprouter.local_addr); var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index facffacbf..594560f62 100644 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -799,14 +799,14 @@ header p { line-height: 40px; } + header .fill { - background-color: #0d6eff; + background-color: #000; background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #0c5fdc, #0d6eff); + background-image: linear-gradient(to bottom, #808080, #444); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); padding: 0 5px; } - header div > ul, .nav { display: block; float: left; From f34ff67f587d2219d72f10ee155be0237c694e98 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:43:19 +0100 Subject: [PATCH 216/289] Move label for VPN at beginning --- .../htdocs/luci-static/resources/view/services/dsvpn.js | 6 +++--- .../luci-static/resources/view/services/glorytun-tcp.js | 6 +++--- .../luci-static/resources/view/services/glorytun-udp.js | 7 ++++--- .../htdocs/luci-static/resources/view/services/mlvpn.js | 6 +++--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js index 2f737b571..453a13836 100644 --- a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js +++ b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js @@ -31,6 +31,9 @@ return L.view.extend({ o = s.option(form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.option(form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.option(form.ListValue, 'mode', _('Mode')); o.value('client',_('Client')); o.value('server',_('Server')); @@ -58,9 +61,6 @@ return L.view.extend({ o.datatype = 'or(ip4addr,ip6addr)'; o.rmempty = false; - o = s.option(form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js index e4045f267..c8929e0fb 100644 --- a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js +++ b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js @@ -34,6 +34,9 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('',_('Client')); o.value('listener',_('Server')); @@ -79,9 +82,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js index 2975af525..73ecb401e 100644 --- a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js +++ b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js @@ -42,6 +42,10 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('to',_('Client')); o.value('from',_('Server')); @@ -96,9 +100,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js index 8dcfb422b..2d5258047 100644 --- a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js +++ b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js @@ -34,6 +34,9 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('client',_('Client')); o.value('server',_('Server')); @@ -75,9 +78,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); From d1209f1f6cf18155e410630a08e8d77582e4cd7f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:43:42 +0100 Subject: [PATCH 217/289] Apply glorytun-udp settings --- .../root/etc/hotplug.d/iface/30-glorytun-udp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp index b942fd60c..a1ac50669 100644 --- a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp +++ b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp @@ -11,17 +11,23 @@ . /lib/functions/network.sh set_default() { - local localip - local remoteip - local config="$1" - local iface - config_get enable "$config" enable - config_get iface "$config" dev - [ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && { - config_get localip "$config" localip - config_get remoteip "$config" remoteip - [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up - } + local localip + local remoteip + local config="$1" + local iface + config_get enable "$config" enable + config_get iface "$config" dev + [ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && { + config_get localip "$config" localip + config_get remoteip "$config" remoteip + config_get kxtimeout "$config" kxtimeout "7d" + config_get timetolerance "$config" timetolerance "10m" + config_get keepalive "$config" keepalive "25s" + [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up + while [ -z "$(glorytun-udp list | grep $iface)" ]; do + glorytun-udp set dev $iface kxtimeout $kxtimeout timetolerance $timetolerance keepalive $keepalive + done + } } config_load glorytun-udp From 00f4d468b135cd376c15261ed729a1877e024539 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:44:47 +0100 Subject: [PATCH 218/289] Use openmptcprouter proxy settings to get enabled proxy --- .../luasrc/view/openmptcprouter/wizard.htm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 66a5b2b00..13f998979 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -172,9 +172,9 @@

@@ -717,6 +717,10 @@ +
+
+ <%:Only one interface must be set as "Master", this should be the most stable interface.%> +
<% else %> From 4d0c9f1de26a974ee09a0e15c8975f9539faf9bf Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:47:10 +0000 Subject: [PATCH 219/289] Added translation using Weblate (Chinese (Simplified)) --- luci-app-dsvpn/po/zh_Hans/dsvpn.po | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 luci-app-dsvpn/po/zh_Hans/dsvpn.po diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po new file mode 100644 index 000000000..02f63464e --- /dev/null +++ b/luci-app-dsvpn/po/zh_Hans/dsvpn.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" From b6d31391aabe2981301051c679209511dec35e3b Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:48 +0000 Subject: [PATCH 220/289] Added translation using Weblate (Chinese (Simplified)) --- .../po/zh_Hans/glorytun-tcp.po | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po new file mode 100644 index 000000000..16936b056 --- /dev/null +++ b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" From 90f0022ef43d009eab8b307f2ad7058fa0559a0c Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:54:19 +0000 Subject: [PATCH 221/289] Added translation using Weblate (Chinese (Simplified)) --- .../po/zh_Hans/glorytun-udp.po | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po new file mode 100644 index 000000000..4ec28b582 --- /dev/null +++ b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" From bbdd13c32e1df311892ad372448c01c56cbc2a0a Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:59:14 +0000 Subject: [PATCH 222/289] Added translation using Weblate (Chinese (Simplified)) --- luci-app-mlvpn/po/zh_Hans/mlvpn.po | 74 ++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 luci-app-mlvpn/po/zh_Hans/mlvpn.po diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po new file mode 100644 index 000000000..7123907f0 --- /dev/null +++ b/luci-app-mlvpn/po/zh_Hans/mlvpn.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From 9ace5d78947c8efc0f95074b56410c79ac00fe59 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 223/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (19 of 19 strings) Translation: OpenMPTCProuter/LuCI/applications/iperf Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsiperf/zh_Hans/ --- luci-app-iperf/po/zh_Hans/iperf.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-iperf/po/zh_Hans/iperf.po b/luci-app-iperf/po/zh_Hans/iperf.po index d09964dbf..ca33cb025 100644 --- a/luci-app-iperf/po/zh_Hans/iperf.po +++ b/luci-app-iperf/po/zh_Hans/iperf.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -49,7 +49,7 @@ msgstr "忽略前n秒" #: luci-app-iperf/luasrc/view/iperf/test.htm:151 msgid "Server" -msgstr "服务" +msgstr "服务器" #: luci-app-iperf/luasrc/view/iperf/test.htm:102 msgid "Settings" From 8d398e6e610036ee12f44270ecb4ed5906a873da Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 224/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (11 of 11 strings) Translation: OpenMPTCProuter/LuCI/applications/mail Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmail/zh_Hans/ --- luci-app-mail/po/zh_Hans/mail.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-mail/po/zh_Hans/mail.po b/luci-app-mail/po/zh_Hans/mail.po index 2f4ee7b9f..1c3a57e2f 100644 --- a/luci-app-mail/po/zh_Hans/mail.po +++ b/luci-app-mail/po/zh_Hans/mail.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -29,7 +29,7 @@ msgid "STARTTLS" msgstr "STARTTLS设置" msgid "Server" -msgstr "服务" +msgstr "服务器" msgid "Set mail settings for services that need to send mails." msgstr "为需要发送邮件的服务设置邮件设置." From d576cbca28c4fadc8492bc41c87af04e5b033c3c Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:53:16 +0000 Subject: [PATCH 225/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (55 of 55 strings) Translation: OpenMPTCProuter/LuCI/applications/mptcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmptcp/zh_Hans/ --- luci-app-mptcp/po/zh_Hans/mptcp.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po index 91de029d0..f40ceecd8 100644 --- a/luci-app-mptcp/po/zh_Hans/mptcp.po +++ b/luci-app-mptcp/po/zh_Hans/mptcp.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-11-06 06:58+0000\n" -"Last-Translator: 马 \n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" +"Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -97,7 +97,7 @@ msgstr "MB/s" #: luci-app-mptcp/luasrc/controller/mptcp.lua:9 #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7 msgid "MPTCP" -msgstr "MPTCP" +msgstr "聚合" #: luci-app-mptcp/luasrc/controller/mptcp.lua:16 msgid "MPTCP Fullmesh" From 216b02ca47d6847e76bf2733b0709e33bfb2b16e Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 16:01:11 +0000 Subject: [PATCH 226/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (9 of 9 strings) Translation: OpenMPTCProuter/LuCI/applications/omr-tracker Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsomr-tracker/zh_Hans/ --- luci-app-omr-tracker/po/zh_Hans/omr-tracker.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po b/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po index fa9ff694a..856001abd 100644 --- a/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po +++ b/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-11 16:36+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -31,7 +31,7 @@ msgid "Retry interval (s)" msgstr "重试间隔 (秒)" msgid "Timeout (s)" -msgstr "超时 (秒)" +msgstr "超时(s)" msgid "Tries" msgstr "尝试多少次" From 2ea28d853745481ab4917c4029c5f0dc324286de Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 227/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (39 of 39 strings) Translation: OpenMPTCProuter/LuCI/applications/snmpd Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationssnmpd/zh_Hans/ --- luci-app-snmpd/po/zh_Hans/snmpd.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-snmpd/po/zh_Hans/snmpd.po b/luci-app-snmpd/po/zh_Hans/snmpd.po index a50abe073..f335aee8f 100644 --- a/luci-app-snmpd/po/zh_Hans/snmpd.po +++ b/luci-app-snmpd/po/zh_Hans/snmpd.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-28 08:34+0000\n" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -144,7 +144,7 @@ msgstr "SNMPd设置界面(蚂蚁测试版)" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32 msgid "Server" -msgstr "服务" +msgstr "服务器" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37 msgid "Source" From 46a29a1d3d13656ee812e666e9a4e3160a77ad2c Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:47:50 +0000 Subject: [PATCH 228/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (14 of 14 strings) Translation: OpenMPTCProuter/LuCI/applications/dsvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsdsvpn/zh_Hans/ --- luci-app-dsvpn/po/zh_Hans/dsvpn.po | 34 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po index 02f63464e..177492257 100644 --- a/luci-app-dsvpn/po/zh_Hans/dsvpn.po +++ b/luci-app-dsvpn/po/zh_Hans/dsvpn.po @@ -1,62 +1,68 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 #: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 msgid "DSVPN" -msgstr "" +msgstr "DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 msgid "Grant access to DSVPN" -msgstr "" +msgstr "授予对DSVPN的访问权限" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 msgid "Server" -msgstr "" +msgstr "服务器" From e537b4158a5672c00b484a159f5fb9f15cbf4127 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:57 +0000 Subject: [PATCH 229/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (21 of 21 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-tcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/glorytun-tcp/zh_Hans/ --- .../po/zh_Hans/glorytun-tcp.po | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po index 16936b056..debdafdef 100644 --- a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po +++ b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po @@ -1,90 +1,96 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "Force fallback cipher" -msgstr "" +msgstr "强制回退密码" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 #: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 msgid "Glorytun TCP" -msgstr "" +msgstr "glorytun TCP" #: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 msgid "Grant access to glorytun TCP" -msgstr "" +msgstr "授予访问glorytun TCP的权限" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 msgid "MPTCP" -msgstr "" +msgstr "聚合" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 msgid "Multiqueue" -msgstr "" +msgstr "多队列" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 msgid "Timeout" -msgstr "" +msgstr "超时" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "chacha" -msgstr "" +msgstr "chacha密码" From 228331410deb614dc1a5cff1c445f2b7e2375be8 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:54:26 +0000 Subject: [PATCH 230/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (24 of 24 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-udp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsglorytun-udp/zh_Hans/ --- .../po/zh_Hans/glorytun-udp.po | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po index 4ec28b582..e88aedcbb 100644 --- a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po +++ b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po @@ -1,102 +1,108 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 msgid "Clock sync tolerance" -msgstr "" +msgstr "时钟同步容限" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 msgid "Dynamic rate detection" -msgstr "" +msgstr "动态速率检测" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "Force fallback cipher" -msgstr "" +msgstr "强制回退密码" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 #: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 msgid "Glorytun UDP" -msgstr "" +msgstr "glorytun UDP" #: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 msgid "Grant access to glorytun UDP" -msgstr "" +msgstr "授予访问glorytun UDP的权限" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 msgid "Keep alive timeout" -msgstr "" +msgstr "保持超时" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Keep the tunnel device after exiting" -msgstr "" +msgstr "退出后保留隧道设备" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 msgid "Key rotation timeout" -msgstr "" +msgstr "秘钥轮换超时" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Persist" -msgstr "" +msgstr "保持" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "chacha" -msgstr "" +msgstr "chacha密码" From 4faa9347708a3fc984711b47b5cbd14f8cd5e9cd Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:59:23 +0000 Subject: [PATCH 231/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (17 of 17 strings) Translation: OpenMPTCProuter/LuCI/applications/mlvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmlvpn/zh_Hans/ --- luci-app-mlvpn/po/zh_Hans/mlvpn.po | 40 +++++++++++++++++------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po index 7123907f0..868ff2e57 100644 --- a/luci-app-mlvpn/po/zh_Hans/mlvpn.po +++ b/luci-app-mlvpn/po/zh_Hans/mlvpn.po @@ -1,74 +1,80 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 msgid "First Port" -msgstr "" +msgstr "第一端口" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 msgid "Grant UCI access for luci-app-mlvpn" -msgstr "" +msgstr "授予UCI访问luci-app-mlvpn的权限" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 msgid "Loss tolerance" -msgstr "" +msgstr "损失容忍" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 #: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 msgid "MLVPN" -msgstr "" +msgstr "mlvpn" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 msgid "Password" -msgstr "" +msgstr "密码" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 msgid "Reorder buffer size" -msgstr "" +msgstr "重新排序缓冲区大小" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 msgid "Timeout (s)" -msgstr "" +msgstr "超时(s)" From 3cf615ab2a2ee0958537637665a2fcd243e1eab2 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 09:57:19 +0000 Subject: [PATCH 232/289] Added translation using Weblate (French) --- luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 90 +++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po new file mode 100644 index 000000000..d894f4295 --- /dev/null +++ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" From 81bd8b705576c9b4a744f223ffa3205716305b64 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:00:06 +0000 Subject: [PATCH 233/289] Added translation using Weblate (French) --- luci-app-glorytun-udp/po/fr/glorytun-udp.po | 102 ++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 luci-app-glorytun-udp/po/fr/glorytun-udp.po diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po new file mode 100644 index 000000000..5c0e7e276 --- /dev/null +++ b/luci-app-glorytun-udp/po/fr/glorytun-udp.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" From aeda98c5290cef7ad94afb8ec593cbe48893bce4 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:02:54 +0000 Subject: [PATCH 234/289] Added translation using Weblate (French) --- luci-app-dsvpn/po/fr/dsvpn.po | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 luci-app-dsvpn/po/fr/dsvpn.po diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po new file mode 100644 index 000000000..fd76be4a6 --- /dev/null +++ b/luci-app-dsvpn/po/fr/dsvpn.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" From 89f3ee3aa3f4711c55bfcec6063c619c181ff977 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:03:54 +0000 Subject: [PATCH 235/289] Added translation using Weblate (French) --- luci-app-mlvpn/po/fr/mlvpn.po | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 luci-app-mlvpn/po/fr/mlvpn.po diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po new file mode 100644 index 000000000..cffecb908 --- /dev/null +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From 5553825e735ca2b05e9f0bf00dfb856b20394971 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 09:57:28 +0000 Subject: [PATCH 236/289] Translated using Weblate (French) Currently translated at 95.2% (20 of 21 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-tcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/glorytun-tcp/fr/ --- luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 46 ++++++++++++--------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po index d894f4295..cd96b6f5b 100644 --- a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po +++ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po @@ -1,85 +1,91 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "Force fallback cipher" -msgstr "" +msgstr "Forcer le chiffrement de secours" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 #: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 msgid "Glorytun TCP" -msgstr "" +msgstr "Glorytun TCP" #: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 msgid "Grant access to glorytun TCP" -msgstr "" +msgstr "Accorder l'accès à Glorytun TCP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 msgid "MPTCP" -msgstr "" +msgstr "MPTCP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 msgid "Multiqueue" -msgstr "" +msgstr "Multiqueue" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 msgid "Timeout" @@ -87,4 +93,4 @@ msgstr "" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "chacha" -msgstr "" +msgstr "Chacha" From 11f7c9161ac48a93aa0e22014c319270ab15a5b7 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:00:18 +0000 Subject: [PATCH 237/289] Translated using Weblate (French) Currently translated at 100.0% (24 of 24 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-udp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsglorytun-udp/fr/ --- luci-app-glorytun-udp/po/fr/glorytun-udp.po | 54 ++++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po index 5c0e7e276..11849a015 100644 --- a/luci-app-glorytun-udp/po/fr/glorytun-udp.po +++ b/luci-app-glorytun-udp/po/fr/glorytun-udp.po @@ -1,102 +1,108 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 msgid "Clock sync tolerance" -msgstr "" +msgstr "Tolérance de synchronisation d'horloge" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 msgid "Dynamic rate detection" -msgstr "" +msgstr "Détection dynamique de la vitesse" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "Force fallback cipher" -msgstr "" +msgstr "Forcer le chiffrement de secours" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 #: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 msgid "Glorytun UDP" -msgstr "" +msgstr "Glorytun UDP" #: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 msgid "Grant access to glorytun UDP" -msgstr "" +msgstr "Accorder l'accès à Glorytun UDP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 msgid "Keep alive timeout" -msgstr "" +msgstr "Délai de maintien de la connexion (Keep Alive)" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Keep the tunnel device after exiting" -msgstr "" +msgstr "Gardez le périphérique tunnel après avoir quitté" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 msgid "Key rotation timeout" -msgstr "" +msgstr "Délai de rotation des clés" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Persist" -msgstr "" +msgstr "Persister" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "chacha" -msgstr "" +msgstr "Chacha" From 77a90b4199a0c47af66ec266f817ee29b6cd2640 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:03:00 +0000 Subject: [PATCH 238/289] Translated using Weblate (French) Currently translated at 100.0% (14 of 14 strings) Translation: OpenMPTCProuter/LuCI/applications/dsvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsdsvpn/fr/ --- luci-app-dsvpn/po/fr/dsvpn.po | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po index fd76be4a6..b0e57ae95 100644 --- a/luci-app-dsvpn/po/fr/dsvpn.po +++ b/luci-app-dsvpn/po/fr/dsvpn.po @@ -1,62 +1,68 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 #: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 msgid "DSVPN" -msgstr "" +msgstr "DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 msgid "Grant access to DSVPN" -msgstr "" +msgstr "Accorder l'accès à DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 msgid "Server" -msgstr "" +msgstr "Serveur" From faa6745cb46bd85d2feb892b30a8c43962901296 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:04:00 +0000 Subject: [PATCH 239/289] Translated using Weblate (French) Currently translated at 100.0% (17 of 17 strings) Translation: OpenMPTCProuter/LuCI/applications/mlvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmlvpn/fr/ --- luci-app-mlvpn/po/fr/mlvpn.po | 40 ++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po index cffecb908..b1a9a5d4a 100644 --- a/luci-app-mlvpn/po/fr/mlvpn.po +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -1,74 +1,80 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 msgid "First Port" -msgstr "" +msgstr "Premier port" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 msgid "Grant UCI access for luci-app-mlvpn" -msgstr "" +msgstr "Accorder l'accès UCI pour luci-app-mlvpn" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 msgid "Loss tolerance" -msgstr "" +msgstr "Tolérance aux pertes" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 #: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 msgid "MLVPN" -msgstr "" +msgstr "MLVPN" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 msgid "Password" -msgstr "" +msgstr "Mot de passe" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 msgid "Reorder buffer size" -msgstr "" +msgstr "Taille du tampon de réordonnancement" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 msgid "Timeout (s)" -msgstr "" +msgstr "Délais d'attente (s)" From 409bb6586d0d319292acbc91b6bccf3429ae441f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:43:19 +0100 Subject: [PATCH 240/289] Move label for VPN at beginning --- .../htdocs/luci-static/resources/view/services/dsvpn.js | 6 +++--- .../luci-static/resources/view/services/glorytun-tcp.js | 6 +++--- .../luci-static/resources/view/services/glorytun-udp.js | 7 ++++--- .../htdocs/luci-static/resources/view/services/mlvpn.js | 6 +++--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js index 2f737b571..453a13836 100644 --- a/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js +++ b/luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js @@ -31,6 +31,9 @@ return L.view.extend({ o = s.option(form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.option(form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.option(form.ListValue, 'mode', _('Mode')); o.value('client',_('Client')); o.value('server',_('Server')); @@ -58,9 +61,6 @@ return L.view.extend({ o.datatype = 'or(ip4addr,ip6addr)'; o.rmempty = false; - o = s.option(form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js index e4045f267..c8929e0fb 100644 --- a/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js +++ b/luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js @@ -34,6 +34,9 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('',_('Client')); o.value('listener',_('Server')); @@ -79,9 +82,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js index 2975af525..73ecb401e 100644 --- a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js +++ b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js @@ -42,6 +42,10 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('to',_('Client')); o.value('from',_('Server')); @@ -96,9 +100,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); diff --git a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js index 8dcfb422b..2d5258047 100644 --- a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js +++ b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js @@ -34,6 +34,9 @@ return L.view.extend({ o = s.taboption('general', form.Flag, 'enable', _('Enabled')); o.default = o.enabled; + o = s.taboption('general',form.Value, 'label', _('Label')); + o.rmempty = true; + o = s.taboption('general', form.ListValue, 'mode', _('Mode')); o.value('client',_('Client')); o.value('server',_('Server')); @@ -75,9 +78,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('general',form.Value, 'label', _('Label')); - o.rmempty = true; - return m.render(); } }); From a5473f86f3d039637757ff2573e45b7e08f812a6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:43:42 +0100 Subject: [PATCH 241/289] Apply glorytun-udp settings --- .../root/etc/hotplug.d/iface/30-glorytun-udp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp index b942fd60c..a1ac50669 100644 --- a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp +++ b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp @@ -11,17 +11,23 @@ . /lib/functions/network.sh set_default() { - local localip - local remoteip - local config="$1" - local iface - config_get enable "$config" enable - config_get iface "$config" dev - [ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && { - config_get localip "$config" localip - config_get remoteip "$config" remoteip - [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up - } + local localip + local remoteip + local config="$1" + local iface + config_get enable "$config" enable + config_get iface "$config" dev + [ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && { + config_get localip "$config" localip + config_get remoteip "$config" remoteip + config_get kxtimeout "$config" kxtimeout "7d" + config_get timetolerance "$config" timetolerance "10m" + config_get keepalive "$config" keepalive "25s" + [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up + while [ -z "$(glorytun-udp list | grep $iface)" ]; do + glorytun-udp set dev $iface kxtimeout $kxtimeout timetolerance $timetolerance keepalive $keepalive + done + } } config_load glorytun-udp From 469e0d833c90ae76138b1b84e24de20d1ed9e9f3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 15 Dec 2020 15:44:47 +0100 Subject: [PATCH 242/289] Use openmptcprouter proxy settings to get enabled proxy --- .../luasrc/view/openmptcprouter/wizard.htm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 83e725775..b29175167 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -172,9 +172,9 @@

@@ -717,6 +717,10 @@ +
+
+ <%:Only one interface must be set as "Master", this should be the most stable interface.%> +
<% else %> From 8bf3cd1b7572192bded84da259164328d4497ead Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:47:10 +0000 Subject: [PATCH 243/289] Added translation using Weblate (Chinese (Simplified)) --- luci-app-dsvpn/po/zh_Hans/dsvpn.po | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 luci-app-dsvpn/po/zh_Hans/dsvpn.po diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po new file mode 100644 index 000000000..02f63464e --- /dev/null +++ b/luci-app-dsvpn/po/zh_Hans/dsvpn.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" From 576f623a16e093915d56c41d8d30064311542505 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:48 +0000 Subject: [PATCH 244/289] Added translation using Weblate (Chinese (Simplified)) --- .../po/zh_Hans/glorytun-tcp.po | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po new file mode 100644 index 000000000..16936b056 --- /dev/null +++ b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" From c9737edac8ea4a5ec7b22d7fb064ba966c30577b Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:54:19 +0000 Subject: [PATCH 245/289] Added translation using Weblate (Chinese (Simplified)) --- .../po/zh_Hans/glorytun-udp.po | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po new file mode 100644 index 000000000..4ec28b582 --- /dev/null +++ b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" From b8a27786b7663f2995fff65a691842fbdc0b4e32 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:59:14 +0000 Subject: [PATCH 246/289] Added translation using Weblate (Chinese (Simplified)) --- luci-app-mlvpn/po/zh_Hans/mlvpn.po | 74 ++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 luci-app-mlvpn/po/zh_Hans/mlvpn.po diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po new file mode 100644 index 000000000..7123907f0 --- /dev/null +++ b/luci-app-mlvpn/po/zh_Hans/mlvpn.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From aed40f5ed30fee286eae504c90c7f4ed08df1340 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 247/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (19 of 19 strings) Translation: OpenMPTCProuter/LuCI/applications/iperf Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsiperf/zh_Hans/ --- luci-app-iperf/po/zh_Hans/iperf.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-iperf/po/zh_Hans/iperf.po b/luci-app-iperf/po/zh_Hans/iperf.po index d09964dbf..ca33cb025 100644 --- a/luci-app-iperf/po/zh_Hans/iperf.po +++ b/luci-app-iperf/po/zh_Hans/iperf.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -49,7 +49,7 @@ msgstr "忽略前n秒" #: luci-app-iperf/luasrc/view/iperf/test.htm:151 msgid "Server" -msgstr "服务" +msgstr "服务器" #: luci-app-iperf/luasrc/view/iperf/test.htm:102 msgid "Settings" From 243d6f0540f9845a2035622362dbda7242dbd70f Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 248/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (11 of 11 strings) Translation: OpenMPTCProuter/LuCI/applications/mail Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmail/zh_Hans/ --- luci-app-mail/po/zh_Hans/mail.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-mail/po/zh_Hans/mail.po b/luci-app-mail/po/zh_Hans/mail.po index 2f4ee7b9f..1c3a57e2f 100644 --- a/luci-app-mail/po/zh_Hans/mail.po +++ b/luci-app-mail/po/zh_Hans/mail.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-27 17:26+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -29,7 +29,7 @@ msgid "STARTTLS" msgstr "STARTTLS设置" msgid "Server" -msgstr "服务" +msgstr "服务器" msgid "Set mail settings for services that need to send mails." msgstr "为需要发送邮件的服务设置邮件设置." From 6f287bf38e16c5dcce7e4c6029ff8d835336235c Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:53:16 +0000 Subject: [PATCH 249/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (55 of 55 strings) Translation: OpenMPTCProuter/LuCI/applications/mptcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmptcp/zh_Hans/ --- luci-app-mptcp/po/zh_Hans/mptcp.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po index 91de029d0..f40ceecd8 100644 --- a/luci-app-mptcp/po/zh_Hans/mptcp.po +++ b/luci-app-mptcp/po/zh_Hans/mptcp.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-11-06 06:58+0000\n" -"Last-Translator: 马 \n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" +"Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -97,7 +97,7 @@ msgstr "MB/s" #: luci-app-mptcp/luasrc/controller/mptcp.lua:9 #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7 msgid "MPTCP" -msgstr "MPTCP" +msgstr "聚合" #: luci-app-mptcp/luasrc/controller/mptcp.lua:16 msgid "MPTCP Fullmesh" From 39259657cf59bc9c71c63d40403680b1fcaf5668 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 16:01:11 +0000 Subject: [PATCH 250/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (9 of 9 strings) Translation: OpenMPTCProuter/LuCI/applications/omr-tracker Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsomr-tracker/zh_Hans/ --- luci-app-omr-tracker/po/zh_Hans/omr-tracker.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po b/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po index fa9ff694a..856001abd 100644 --- a/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po +++ b/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-11 16:36+0000\n" +"PO-Revision-Date: 2020-12-04 16:02+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -31,7 +31,7 @@ msgid "Retry interval (s)" msgstr "重试间隔 (秒)" msgid "Timeout (s)" -msgstr "超时 (秒)" +msgstr "超时(s)" msgid "Tries" msgstr "尝试多少次" From 0de956cce3fcc0a546ae19a325e00f624f6ac2d7 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:29 +0000 Subject: [PATCH 251/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (39 of 39 strings) Translation: OpenMPTCProuter/LuCI/applications/snmpd Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationssnmpd/zh_Hans/ --- luci-app-snmpd/po/zh_Hans/snmpd.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-snmpd/po/zh_Hans/snmpd.po b/luci-app-snmpd/po/zh_Hans/snmpd.po index a50abe073..f335aee8f 100644 --- a/luci-app-snmpd/po/zh_Hans/snmpd.po +++ b/luci-app-snmpd/po/zh_Hans/snmpd.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-06-28 08:34+0000\n" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -144,7 +144,7 @@ msgstr "SNMPd设置界面(蚂蚁测试版)" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32 msgid "Server" -msgstr "服务" +msgstr "服务器" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37 msgid "Source" From 242166be3c406e13ff8832842fe4b3ae1d1178ff Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:47:50 +0000 Subject: [PATCH 252/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (14 of 14 strings) Translation: OpenMPTCProuter/LuCI/applications/dsvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsdsvpn/zh_Hans/ --- luci-app-dsvpn/po/zh_Hans/dsvpn.po | 34 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po index 02f63464e..177492257 100644 --- a/luci-app-dsvpn/po/zh_Hans/dsvpn.po +++ b/luci-app-dsvpn/po/zh_Hans/dsvpn.po @@ -1,62 +1,68 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 #: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 msgid "DSVPN" -msgstr "" +msgstr "DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 msgid "Grant access to DSVPN" -msgstr "" +msgstr "授予对DSVPN的访问权限" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 msgid "Server" -msgstr "" +msgstr "服务器" From 911e84ca23ddbd2bf727ec03c566a456dd09e293 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:50:57 +0000 Subject: [PATCH 253/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (21 of 21 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-tcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/glorytun-tcp/zh_Hans/ --- .../po/zh_Hans/glorytun-tcp.po | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po index 16936b056..debdafdef 100644 --- a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po +++ b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po @@ -1,90 +1,96 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "Force fallback cipher" -msgstr "" +msgstr "强制回退密码" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 #: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 msgid "Glorytun TCP" -msgstr "" +msgstr "glorytun TCP" #: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 msgid "Grant access to glorytun TCP" -msgstr "" +msgstr "授予访问glorytun TCP的权限" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 msgid "MPTCP" -msgstr "" +msgstr "聚合" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 msgid "Multiqueue" -msgstr "" +msgstr "多队列" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 msgid "Timeout" -msgstr "" +msgstr "超时" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "chacha" -msgstr "" +msgstr "chacha密码" From 21ba029f9a65553a2f3bf173bdc68cc4219eeece Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:54:26 +0000 Subject: [PATCH 254/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (24 of 24 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-udp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsglorytun-udp/zh_Hans/ --- .../po/zh_Hans/glorytun-udp.po | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po index 4ec28b582..e88aedcbb 100644 --- a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po +++ b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po @@ -1,102 +1,108 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 msgid "Clock sync tolerance" -msgstr "" +msgstr "时钟同步容限" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 msgid "Dynamic rate detection" -msgstr "" +msgstr "动态速率检测" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "Force fallback cipher" -msgstr "" +msgstr "强制回退密码" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 #: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 msgid "Glorytun UDP" -msgstr "" +msgstr "glorytun UDP" #: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 msgid "Grant access to glorytun UDP" -msgstr "" +msgstr "授予访问glorytun UDP的权限" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 msgid "Keep alive timeout" -msgstr "" +msgstr "保持超时" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Keep the tunnel device after exiting" -msgstr "" +msgstr "退出后保留隧道设备" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 msgid "Key" -msgstr "" +msgstr "秘钥" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 msgid "Key rotation timeout" -msgstr "" +msgstr "秘钥轮换超时" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 msgid "Local IP" -msgstr "" +msgstr "本地IP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Persist" -msgstr "" +msgstr "保持" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 msgid "Port" -msgstr "" +msgstr "端口" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 msgid "Remote IP" -msgstr "" +msgstr "远程IP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "chacha" -msgstr "" +msgstr "chacha密码" From 0a8011429971a565a77d4e4a957750a0c23bfd06 Mon Sep 17 00:00:00 2001 From: antrouter Date: Fri, 4 Dec 2020 15:59:23 +0000 Subject: [PATCH 255/289] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (17 of 17 strings) Translation: OpenMPTCProuter/LuCI/applications/mlvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmlvpn/zh_Hans/ --- luci-app-mlvpn/po/zh_Hans/mlvpn.po | 40 +++++++++++++++++------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po index 7123907f0..868ff2e57 100644 --- a/luci-app-mlvpn/po/zh_Hans/mlvpn.po +++ b/luci-app-mlvpn/po/zh_Hans/mlvpn.po @@ -1,74 +1,80 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-04 16:03+0000\n" +"Last-Translator: antrouter \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "高级设置" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 msgid "Client" -msgstr "" +msgstr "客户端" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 msgid "Enabled" -msgstr "" +msgstr "开启" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 msgid "First Port" -msgstr "" +msgstr "第一端口" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 msgid "General Settings" -msgstr "" +msgstr "通用设置" #: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 msgid "Grant UCI access for luci-app-mlvpn" -msgstr "" +msgstr "授予UCI访问luci-app-mlvpn的权限" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 msgid "Host" -msgstr "" +msgstr "主机" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 msgid "Instances" -msgstr "" +msgstr "实例" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 msgid "Interface name" -msgstr "" +msgstr "接口名称" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 msgid "Label" -msgstr "" +msgstr "标签" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 msgid "Loss tolerance" -msgstr "" +msgstr "损失容忍" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 #: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 msgid "MLVPN" -msgstr "" +msgstr "mlvpn" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 msgid "Mode" -msgstr "" +msgstr "模式" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 msgid "Password" -msgstr "" +msgstr "密码" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 msgid "Reorder buffer size" -msgstr "" +msgstr "重新排序缓冲区大小" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 msgid "Server" -msgstr "" +msgstr "服务器" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 msgid "Timeout (s)" -msgstr "" +msgstr "超时(s)" From 2d9b414f2a635df828716cebbb3d886c383b7405 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 09:57:19 +0000 Subject: [PATCH 256/289] Added translation using Weblate (French) --- luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 90 +++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po new file mode 100644 index 000000000..d894f4295 --- /dev/null +++ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 +#: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 +msgid "Glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 +msgid "Grant access to glorytun TCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 +msgid "MPTCP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 +msgid "Multiqueue" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 +msgid "Timeout" +msgstr "" + +#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 +msgid "chacha" +msgstr "" From 570efdda2855c58586c6d2866850d7f7329b1080 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:00:06 +0000 Subject: [PATCH 257/289] Added translation using Weblate (French) --- luci-app-glorytun-udp/po/fr/glorytun-udp.po | 102 ++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 luci-app-glorytun-udp/po/fr/glorytun-udp.po diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po new file mode 100644 index 000000000..5c0e7e276 --- /dev/null +++ b/luci-app-glorytun-udp/po/fr/glorytun-udp.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 +msgid "Client" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 +msgid "Clock sync tolerance" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 +msgid "Dynamic rate detection" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 +msgid "Enabled" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "Force fallback cipher" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 +msgid "General Settings" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 +#: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 +msgid "Glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 +msgid "Grant access to glorytun UDP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 +msgid "Host" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 +msgid "Instances" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 +msgid "Interface name" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 +msgid "Keep alive timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Keep the tunnel device after exiting" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 +msgid "Key" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 +msgid "Key rotation timeout" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 +msgid "Label" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 +msgid "Local IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 +msgid "Mode" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 +msgid "Persist" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 +msgid "Port" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 +msgid "Remote IP" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 +msgid "Server" +msgstr "" + +#: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 +msgid "chacha" +msgstr "" From 694f455389f2e6c293d7b33b462346c1229572d5 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:02:54 +0000 Subject: [PATCH 258/289] Added translation using Weblate (French) --- luci-app-dsvpn/po/fr/dsvpn.po | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 luci-app-dsvpn/po/fr/dsvpn.po diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po new file mode 100644 index 000000000..fd76be4a6 --- /dev/null +++ b/luci-app-dsvpn/po/fr/dsvpn.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 +msgid "Client" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 +#: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 +msgid "DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 +msgid "Enabled" +msgstr "" + +#: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 +msgid "Grant access to DSVPN" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 +msgid "Host" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 +msgid "Interface name" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 +msgid "Key" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 +msgid "Label" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 +msgid "Local IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 +msgid "Mode" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 +msgid "Port" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 +msgid "Remote IP" +msgstr "" + +#: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 +msgid "Server" +msgstr "" From 44b9dd95258e183af07d66739aadbb26f8b8e851 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:03:54 +0000 Subject: [PATCH 259/289] Added translation using Weblate (French) --- luci-app-mlvpn/po/fr/mlvpn.po | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 luci-app-mlvpn/po/fr/mlvpn.po diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po new file mode 100644 index 000000000..cffecb908 --- /dev/null +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 +msgid "Client" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 +msgid "Enabled" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 +msgid "First Port" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 +msgid "General Settings" +msgstr "" + +#: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 +msgid "Grant UCI access for luci-app-mlvpn" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 +msgid "Host" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 +msgid "Instances" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 +msgid "Interface name" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 +msgid "Label" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 +msgid "Loss tolerance" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 +#: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 +msgid "MLVPN" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 +msgid "Mode" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 +msgid "Password" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 +msgid "Reorder buffer size" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 +msgid "Server" +msgstr "" + +#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 +msgid "Timeout (s)" +msgstr "" From c26a0c42f4c073ccf632059a204d76fc7cc59354 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 09:57:28 +0000 Subject: [PATCH 260/289] Translated using Weblate (French) Currently translated at 95.2% (20 of 21 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-tcp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/glorytun-tcp/fr/ --- luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 46 ++++++++++++--------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po index d894f4295..cd96b6f5b 100644 --- a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po +++ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po @@ -1,85 +1,91 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:38 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:34 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "Force fallback cipher" -msgstr "" +msgstr "Forcer le chiffrement de secours" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:31 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:24 #: luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json:3 msgid "Glorytun TCP" -msgstr "" +msgstr "Glorytun TCP" #: luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json:3 msgid "Grant access to glorytun TCP" -msgstr "" +msgstr "Accorder l'accès à Glorytun TCP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:42 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:52 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:48 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:82 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:56 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:64 msgid "MPTCP" -msgstr "" +msgstr "MPTCP" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:37 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:77 msgid "Multiqueue" -msgstr "" +msgstr "Multiqueue" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:45 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:60 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:39 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:72 msgid "Timeout" @@ -87,4 +93,4 @@ msgstr "" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:68 msgid "chacha" -msgstr "" +msgstr "Chacha" From cefac50bb0432f331569365ed9c9b143fc8bbdaa Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:00:18 +0000 Subject: [PATCH 261/289] Translated using Weblate (French) Currently translated at 100.0% (24 of 24 strings) Translation: OpenMPTCProuter/LuCI/applications/glorytun-udp Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsglorytun-udp/fr/ --- luci-app-glorytun-udp/po/fr/glorytun-udp.po | 54 ++++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po index 5c0e7e276..11849a015 100644 --- a/luci-app-glorytun-udp/po/fr/glorytun-udp.po +++ b/luci-app-glorytun-udp/po/fr/glorytun-udp.po @@ -1,102 +1,108 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:40 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:46 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:85 msgid "Clock sync tolerance" -msgstr "" +msgstr "Tolérance de synchronisation d'horloge" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:95 msgid "Dynamic rate detection" -msgstr "" +msgstr "Détection dynamique de la vitesse" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:42 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "Force fallback cipher" -msgstr "" +msgstr "Forcer le chiffrement de secours" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:39 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:32 #: luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json:3 msgid "Glorytun UDP" -msgstr "" +msgstr "Glorytun UDP" #: luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json:3 msgid "Grant access to glorytun UDP" -msgstr "" +msgstr "Accorder l'accès à Glorytun UDP" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:50 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:34 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:60 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:90 msgid "Keep alive timeout" -msgstr "" +msgstr "Délai de maintien de la connexion (Keep Alive)" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Keep the tunnel device after exiting" -msgstr "" +msgstr "Gardez le périphérique tunnel après avoir quitté" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:56 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:80 msgid "Key rotation timeout" -msgstr "" +msgstr "Délai de rotation des clés" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:99 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:64 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:45 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:72 msgid "Persist" -msgstr "" +msgstr "Persister" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:53 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:68 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:47 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js:76 msgid "chacha" -msgstr "" +msgstr "Chacha" From 0b7d054c58cf04180a923c43d8b33709fe15e19e Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:03:00 +0000 Subject: [PATCH 262/289] Translated using Weblate (French) Currently translated at 100.0% (14 of 14 strings) Translation: OpenMPTCProuter/LuCI/applications/dsvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsdsvpn/fr/ --- luci-app-dsvpn/po/fr/dsvpn.po | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po index fd76be4a6..b0e57ae95 100644 --- a/luci-app-dsvpn/po/fr/dsvpn.po +++ b/luci-app-dsvpn/po/fr/dsvpn.po @@ -1,62 +1,68 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:35 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:24 #: luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json:3 msgid "DSVPN" -msgstr "" +msgstr "DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:31 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json:3 msgid "Grant access to DSVPN" -msgstr "" +msgstr "Accorder l'accès à DSVPN" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:39 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:49 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:45 msgid "Key" -msgstr "" +msgstr "Clef" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:61 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:53 msgid "Local IP" -msgstr "" +msgstr "Adresse IP locale" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:34 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:42 msgid "Port" -msgstr "" +msgstr "Port" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:57 msgid "Remote IP" -msgstr "" +msgstr "IP Distante" #: luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js:36 msgid "Server" -msgstr "" +msgstr "Serveur" From de20eb77d739741a548f1488807f93690ec9bc56 Mon Sep 17 00:00:00 2001 From: Weblate Admin Date: Tue, 15 Dec 2020 10:04:00 +0000 Subject: [PATCH 263/289] Translated using Weblate (French) Currently translated at 100.0% (17 of 17 strings) Translation: OpenMPTCProuter/LuCI/applications/mlvpn Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsmlvpn/fr/ --- luci-app-mlvpn/po/fr/mlvpn.po | 40 ++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po index cffecb908..b1a9a5d4a 100644 --- a/luci-app-mlvpn/po/fr/mlvpn.po +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -1,74 +1,80 @@ msgid "" msgstr "" +"PO-Revision-Date: 2020-12-15 14:46+0000\n" +"Last-Translator: Weblate Admin \n" +"Language-Team: French \n" "Language: fr\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.0.4\n" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 msgid "Advanced Settings" -msgstr "" +msgstr "Configuration avancée" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:38 msgid "Client" -msgstr "" +msgstr "Client" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 msgid "Enabled" -msgstr "" +msgstr "Activer" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:45 msgid "First Port" -msgstr "" +msgstr "Premier port" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:31 msgid "General Settings" -msgstr "" +msgstr "Paramètres généraux" #: luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json:3 msgid "Grant UCI access for luci-app-mlvpn" -msgstr "" +msgstr "Accorder l'accès UCI pour luci-app-mlvpn" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:42 msgid "Host" -msgstr "" +msgstr "Hôte" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:26 msgid "Instances" -msgstr "" +msgstr "Instances" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:54 msgid "Interface name" -msgstr "" +msgstr "Nom de l'interface" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:78 msgid "Label" -msgstr "" +msgstr "Étiquette" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:72 msgid "Loss tolerance" -msgstr "" +msgstr "Tolérance aux pertes" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:24 #: luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json:3 msgid "MLVPN" -msgstr "" +msgstr "MLVPN" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:37 msgid "Mode" -msgstr "" +msgstr "Mode" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:50 msgid "Password" -msgstr "" +msgstr "Mot de passe" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:66 msgid "Reorder buffer size" -msgstr "" +msgstr "Taille du tampon de réordonnancement" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:39 msgid "Server" -msgstr "" +msgstr "Serveur" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:60 msgid "Timeout (s)" -msgstr "" +msgstr "Délais d'attente (s)" From a0b5b2a1a0ef43710984e8869cf10e5176379c57 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 16 Dec 2020 10:05:25 +0100 Subject: [PATCH 264/289] Fix glorytun settings apply --- glorytun-udp/init | 15 +++++++-------- .../root/etc/hotplug.d/iface/30-glorytun-udp | 3 ++- .../usr/share/omr/post-tracking.d/post-tracking | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 5bb5a9a5d..5e50d59df 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -20,14 +20,13 @@ _err() { validate_section() { uci_validate_section glorytun-udp glorytun-udp "${1}" \ - 'enable:bool:0' \ - 'mode:string' \ - 'key:string' \ - 'host:host' \ - 'port:port' \ - 'proto:string' \ - 'mtuauto:bool:0' \ - 'chacha:bool:0' \ + 'enable:bool:0' \ + 'mode:string' \ + 'key:string' \ + 'host:host' \ + 'port:port' \ + 'mtuauto:bool:0' \ + 'chacha:bool:0' \ 'dev:string' } diff --git a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp index a1ac50669..1ccf10b8c 100644 --- a/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp +++ b/luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp @@ -25,8 +25,9 @@ set_default() { config_get keepalive "$config" keepalive "25s" [ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up while [ -z "$(glorytun-udp list | grep $iface)" ]; do - glorytun-udp set dev $iface kxtimeout $kxtimeout timetolerance $timetolerance keepalive $keepalive + sleep 1 done + glorytun-udp set dev $iface kxtimeout $kxtimeout timetolerance $timetolerance keepalive $keepalive } } diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index bdedd275a..b3ce9fa8e 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -592,9 +592,9 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then fi fi fi - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then - glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1 - fi +# if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then +# glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1 +# fi [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set pref 500 > /dev/null 2>&1 fi [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && { From b75944312d2760e67146c3fa6425adebe3f4badc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 16 Dec 2020 16:40:07 +0100 Subject: [PATCH 265/289] Add DMZ option --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 4806ea137..05ef1c2de 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -756,7 +756,8 @@ _set_client2client() { } _vps_firewall_redirect_port() { - local src proto src_dport + local src proto src_dport section + section=$1 config_get src $1 src config_get proto $1 proto "tcp udp" config_get src_dport $1 src_dport @@ -767,6 +768,14 @@ _vps_firewall_redirect_port() { config_get dest_port $1 dest_port config_get src_ip $1 src_ip config_get v2ray $1 v2ray "0" + config_get dmz $1 dmz "0" + if [ "$dmz" = "1" ] && [ "$src_dport" != "2-64999" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.${section}.src_dport='2-64999' + commit firewall + EOF + src_dport='2-64999' + fi if [ -n "$src_dport" ] && [ "$(echo $src_dport | cut -d'-' -f2)" -ge "65000" ]; then logger -t "OMR-VPS" "You can't redirect ports >= 65000, they are needed by OpenMPTCProuter Server part" enabled="0" From d2783b7b3a48c2f6308b8ff5ce0e8252e096524e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 17 Dec 2020 10:48:23 +0100 Subject: [PATCH 266/289] Fix glorytun-udp rate auto setting --- .../htdocs/luci-static/resources/view/services/glorytun-udp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js index 73ecb401e..762332468 100644 --- a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js +++ b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js @@ -96,7 +96,7 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('advanced', form.Flag, 'auto', _('Dynamic rate detection')); + o = s.taboption('advanced', form.Flag, 'rateauto', _('Dynamic rate detection')); o.rmempty = false; o.modalonly = true; From 4449784731076384513d715eb797a409c6cbe835 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 17 Dec 2020 16:33:11 +0100 Subject: [PATCH 267/289] Fix openvpn bonding --- openmptcprouter/files/etc/init.d/openvpnbonding | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index f0ba915fa..864a67eeb 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -36,6 +36,7 @@ _openvpnbonding() { set openvpn.omr_bonding_${interface}.client='1' set openvpn.omr_bonding_${interface}.tls_client='1' set openvpn.omr_bonding_${interface}.enabled='1' + set openvpn.omr_bonding_${interface}.persist_tun='1' set openvpn.omr_bonding_${interface}.key='/etc/luci-uploads/client.key' set openvpn.omr_bonding_${interface}.cert='/etc/luci-uploads/client.crt' set openvpn.omr_bonding_${interface}.ca='/etc/luci-uploads/ca.crt' @@ -75,6 +76,7 @@ start_service() set network.omrvpn.downdelay='100' set network.omrvpn.updelay='20' set network.omrvpn.use_carrier='1' + set network.omrvpn.mtu='1440' commit network EOF config_load openmptcprouter From e77038754d2cd3d97c5a328219b88a39c04d392a Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 18 Dec 2020 00:44:30 +0800 Subject: [PATCH 268/289] update ico --- .../htdocs/luci-static/resources/computer.png | Bin 3690 -> 2578 bytes .../htdocs/luci-static/resources/modem.svg | 6 +++--- .../luci-static/resources/openmptcprouter.png | Bin 4586 -> 4287 bytes .../htdocs/luci-static/resources/server.png | Bin 7416 -> 3923 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/computer.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/computer.png index 17e7873540eb754034c06ad57c5cac5462a9ea86..f90e4789b97a965a459311314d0da607bcfea5f7 100644 GIT binary patch delta 1203 zcmaDQGf8BECF9GDRy|By79j=(R>nYNGWi0NGBWosQ>BWLiLtqHTAHD5vQeU;u8Cn< znr>pMsgbU!p}A#BlBGdvvVrC1S#F zR>{b~$UxW7NY@a_IeS^`1fhzOGZORCQ&Vh}^e6vfiK{=wr4z!yzPCflgSsQF4xz-`MO_UEEK=o?eTHZ0(JhTs*eFJaaGrw=eaE8 zvaS52rlAoh#o{QiYQfo{tkvKAFTFYQdBbig^UO|NNfH&$k=r zUcEGlaf1>2?`79^)K?`;RZ8u@d+zefottV8^(Y^ZIaqdQ;uq^1-_57Q&(QDsJT2q= z_Gc%>tgWBS=JVV$Ib_~U-BT&&ZoW(UHuGlUgAZ%A#v4?yZefXe`F6s;*npisuD|&u zuC{l3VXc9MTHnl@{pQcF$Gu&9y1w=i|E*kIk+*N8o84deY)G^TIkRSOeSK}|*G8u~ zzT2;V+M{vl=L8!$p1GdW=J~Cy`88!`-}Six%_rBV|2+Nj!LM5{cNu3|eHVXyT62rJ&|6nN{>QKsZ#Ew~7ua6L)N zpB$e*d!2Q=ZKK|n(?3pbXTE4P2iZ!NHP`35JT~lN(YZd?{juP5Av*k7uK@5twVL4zNh7NzPRl>!btEBun*p(=Ua>zBlj+tw#zd$;I(Yzek8l~X>2+=3qMokGY*@s|1!I?DA-o`tluJartAZ<$>JS($98X3iz*S;+IgI%JI_t^ z`;3;rBWh;msgljeV9bPNLIe=B#)Q>dlzlD@e1TFW%_b# z>#}p3USOrSbiu>TvN!JR;S<+vZwB8# zDN#Rlcc^VByaoq1(SZ?toS4G>qmsk z`z!V33e0jT-JdVV8eZLQb@I!H*rc__FO0t#e*Ng>>a8T5d!S;A##`?rhZsytPo%8X z-7X&c1e5_`5?GSSeZp~=O%5z zyQfy~-1km<<}Ld^Mu$r!rpnyBe;JkuU7Ws}gURRc&A-PKk0iM&dN+43t=KH{sqLbF f*dc@exnKGB-g>=1dBfo}1|aZs^>bP0l+XkKMuaQs delta 2396 zcmV-i38VIs6zUw1IRP56I*bAeGgL4#IyE;sH93>e0wW4DR4_6+H8(mnIg|YYd6Req zCbOIaV*!)S1zCTDCQK~=00{O;L_t(|ob8=!Y#h}U$A4$$?#t`79Vd?SA|^B;F$rzd zJlX&$Bs|gtA`+Dri56%pNI(!CRM zCV`fRV~pe2j^B^<&d%I^u-D#rAFqq7%S@P_inR9>lKlh$F=lb4jS?#+O2NQ5` z#6SShpf!`7P~Ys+j+<38rr~T=roIEMR|3U3FdISSL(snw)7*`%twTLKQ8_R)Q4wW0 zPn(9bo!qt|@4!P`scq+aK{f$hQ(EXw-$}IY@1tVqyG-=v?8h9OWV%p_#>HOXh+lW z{!t>0Eqv4%<=*NpUbwCpPmbJ*azyTwff%T4(^}@=^}_+lr#@CwD@V3HgxwRSzSHLI zT8n@6=jO&^D$%Tt9n86D^I0P@fTwI4rR!GH^vVGMesQ3S#}AHPfC7)OY^LIdWquZw zCU-vy^k5pQrWIva<;jbubm%+xSehOyv$V0c-KP4p2v2Pcv3yoydNTFHyF3zgG`rsK zOg#_j4mVh|^(FQSSLirOrWsT&^^N+v%B4R1 zeqqP0CvY@;(i}}V$8{Z9A{-uS#a=Vq#PQK}w01%NVy#nVmR zJ7Jx6jw^H=d#k(HTirFLdt7vmhXPMxi*{W{7Af%?+_5r{w9IYMam*?-S(qZ>NJoFr zBUF|tu36+IF9bvh%um+LxG zaInte{(WIgokXNqaw6=oIuhCIMf6I$jbA(b7AV z`E^;E@^X`4p@CsS#R3m4z3E+u>pD`fY`VigK6sy!P>BD2@fr7Q9Ey)CicLC?M|td_ zCZ?4t_WretXE%n@-p>^}1wZ~qfP$kfoa$}np6>=YKQ6vD1$JE>V$ZQYdM$s8XEubG zRhZs6xI(AEYr>B%^rtK@_6a{-p1OQEu8+ zD%Q;N@W9$&%5qoeIKoj)IGWjXgO+gm>s+DZ*t*2;4wFuHT%q%XD|DW4h0YVM(0RfY zI!`F#LcE^;9UsT4j1ShS_Q8MO_to@qtjS7qc50L%{A^7DOUsf+%u1jn7HS{6^U;iq zOcgw)Fe8}RIu@_dKY=C{3WxwxW(C$*xM-f2`!C5&!lHmKAPBH_UFuwYs#05Har}$^ z@r_)rk5U>2|EgH^^sL-jnxO1{vX$LWw&dK78+GIfSLi(93Y{lhq4R%)D|DW4h0YTO z#O*LN`S+_DHSv3NNiO4PgeEj|0FKvKR4h2VlEhfD0;yBzFFPFe)kJ9Qb|?=TY+B@H zdSGer~D)7XaN)cE?qS0vHO!c4V&uqscXc{MN4T)v;}wEum^_#% zjsuMiQS5;U{aY6MSTSs|{LXiKs4G{zxbqx}iiZZ9HeDOy-rE~^VqK8gg(Dk;Qa)`r zS>m|_;W@4KwU(th@m1my+i{^=)7F~X9_BHH?JEM@IBY^=I0}DzK8^6&Z|C6mpYFUX zm-^W7gChQXpqCx1k}r1~PV5nOfNTLSMMt+FW(Bz$(fc+q!)pqw=O&tH>2)~TH29!T z0*A6-vm96jP#Q3}piE&1oLg+NwbI9&B)z7+&tcYFl^}AAuPyTO`YYW@%aSqNDec#e zy?d$~=e?U}n%@ zW-#-wt@@PeZ?v`sM}wHj+W8V-FNW^l`8o@&JRH@$^l|tMXX*K9wvEM()`FotUyS7* z*+BK8A)0~?L_SahMs~H^UZUazuB>5JPakMMtw*j*~ta<)O z7=M3~ecdJ^4sc>1Toia$!v#RW!8(hBb(u|O93|QieG7mZL3`~HF$yU*FJL2pCP#$vxFE`C?2-OTE8hsa^zCD5(0k0m50!=Ww-oOMyhc;O12C;kt \ No newline at end of file + + + diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter.png index 8a568399db24735c46b280d4661bc638857f2f76..9a4b11123bc1b87715a4143565002063697f4c80 100644 GIT binary patch delta 2926 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 delta 3299 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 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/server.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/server.png index cb6c44a9ed9a1efddac6a2019c4a7d9186f0b027..f6ca87d5ece336a5521111d1c4073243ef12f2e6 100644 GIT binary patch delta 2329 zcma)7do&XaAGW!)h^$R0WE(|pGv+ogrK!eTUiVBU_n14Iav7RXOqq~!dnK3L3Aro1 zix$(|hDpLogf9A&_I3STm zx=15!B!dk^{J#DGUQ+Twc^jfHc=~GS>0R*B(ACpMX&4}N3^jE0&?vOGFWLa9tJ{<> zs0(DA5Rzg*g<u5NDIYIKr`&!ZJ-D3Tu z2IFKxOX4ZkUS;GfGi>%keu_-uwvjnMN>PGg4jqqjdG`uP4Ln>#V3a&v&Gwv5Ahlu2 z>kmwytS+kQ%-@Go>@gd;2$`8tlMFX>T1I=kAo-1_pQX7a;a7S=(cFqLHGbU0mn7@C zInpssb;V}2tBR2R5E=d=z0w8#KmAc*AXT6e0FZQophK4hpCYY9GorW@1LN&;n*}}l zsWocyj>TN|2F9c)?#`(vfs>RE-BslKn3Oiy4-*Py)jMdZ4pc={CKj3W^3G$CNS&AG`SV!^GoniZ@KhP;dBH#O!G5ot`p^XrEwH!LzXhC?IDY)QmQ%#P`Rlzn;jr zeN7o#tei-<0yhN=c4@mtT=hr(G7L~8vHNmg}%tGY(A%=Sdn;K)XHD37jV37C```(d(V-_Ws)^pr*BI)-Mk~1voWnCu!RQXzH z(-|{YO5gB8pZ~IQ8~pK#pxifhfgDP}Z;#UAV`1yf%usEjh}m$OYoJ6YHOEf1VmsDA zw!^CnQ~rl6%k{A{f@#eS(pt47RCLy3N1TxuU4v9()^ieA*WJfw1MstE$y4_^ps>Do~T^WDk)!T z46Pr}7LF+qV zXOT|-6+Vy-UW+4O+(U`06dk5=1|xLd+1L8~y<)RU3J=8EJ&>8X_nE`{A1l zW7c;LDF!Xd?6upMjq#Jyk+P(w!s@QT>fS(@cnbZuj~4EYP`9likJ+84%pZ_f`s0y)t<|@4 z2O^$i9m=Ew>b-l<2VPcr1Slj{=AIfidTaPDyrqW~Q%GIykK997 z*0I^CJ_UALM_s%_a&^RRSCsd2BNVz#yAOa7pm?^azlN0-5`I-y&KKhPYX8chcS`hs;$0`{X;q!SJVz#`}dXLdjPr1sT6p(^2YgVWz9VV=D zFJ1&}OqUhZO3@obPweF1=+jS}Z!SN){8#O{rJ18bK}`i`bxJE7G)ybC)-)Js8d$!DeU~fg4SD{`nP_XW}Zh&fRuPS&1IW@z1c%APQ{JL+e zPO+*wD%5!*xRCHDdC$S^#{0Z0S42a0 zk)fDl*Pg#qB~LW#5O&Q^y#G2P@=p{0H~S}GleO>L9`DmRlh<>Jx|sJt?pJ5`?g|)x WZK3UczauU1b8zO?*jh7>q<;fyN<(4* delta 5943 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 Z{y$QM)$UMP8Vdjb002ovPDHLkV1oMQjB5Y@ From 0df93d89ff0989f2f1eeb93e4dd77704b8ee8f2a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 17 Dec 2020 10:48:23 +0100 Subject: [PATCH 269/289] Fix glorytun-udp rate auto setting --- .../htdocs/luci-static/resources/view/services/glorytun-udp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js index 73ecb401e..762332468 100644 --- a/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js +++ b/luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js @@ -96,7 +96,7 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('advanced', form.Flag, 'auto', _('Dynamic rate detection')); + o = s.taboption('advanced', form.Flag, 'rateauto', _('Dynamic rate detection')); o.rmempty = false; o.modalonly = true; From 6d010757534585f1f7aad05e9a49b31a316258a3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 17 Dec 2020 16:33:11 +0100 Subject: [PATCH 270/289] Fix openvpn bonding --- openmptcprouter/files/etc/init.d/openvpnbonding | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index f0ba915fa..864a67eeb 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -36,6 +36,7 @@ _openvpnbonding() { set openvpn.omr_bonding_${interface}.client='1' set openvpn.omr_bonding_${interface}.tls_client='1' set openvpn.omr_bonding_${interface}.enabled='1' + set openvpn.omr_bonding_${interface}.persist_tun='1' set openvpn.omr_bonding_${interface}.key='/etc/luci-uploads/client.key' set openvpn.omr_bonding_${interface}.cert='/etc/luci-uploads/client.crt' set openvpn.omr_bonding_${interface}.ca='/etc/luci-uploads/ca.crt' @@ -75,6 +76,7 @@ start_service() set network.omrvpn.downdelay='100' set network.omrvpn.updelay='20' set network.omrvpn.use_carrier='1' + set network.omrvpn.mtu='1440' commit network EOF config_load openmptcprouter From a486708f2b0b1cc9d8d121b9357b031e57e0e39d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 10:53:31 +0100 Subject: [PATCH 271/289] Add needed changes to have OpenVPN Bonding used as default gateway --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 3 +++ omr-tracker/files/bin/omr-tracker | 3 +++ openmptcprouter/files/etc/init.d/openvpnbonding | 1 + 3 files changed, 7 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index c9a264ed8..5de2cda24 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -396,6 +396,9 @@ function wizard_add() vpn_port = 65301 vpn_intf = "tun0" ucic:set("network","omrvpn","proto","dhcp") + elseif default_vpn == "openvpn_bonding" then + vpn_intf = "bonding-omrvpn" + ucic:set("network","omrvpn","proto","bonding") end if vpn_intf ~= "" then ucic:set("network","omrvpn","ifname",vpn_intf) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 8b64a3785..d2211fcb5 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -189,6 +189,9 @@ while true; do #if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then # OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n") #fi + if [ "$OMR_TRACKER_DEVICE" = "bonding-omrvpn" ]; then + OMR_TRACKER_DEVICE_GATEWAY="10.255.248.1" + fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then OMR_TRACKER_DEVICE_GATEWAY=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") fi diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index 864a67eeb..3093b0f42 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -77,6 +77,7 @@ start_service() set network.omrvpn.updelay='20' set network.omrvpn.use_carrier='1' set network.omrvpn.mtu='1440' + set network.omrvpn.ifname= 'bonding-omrvpn' commit network EOF config_load openmptcprouter From 4eed3d2a2c4f52e912ada0c41ded21480392095b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 15:48:03 +0100 Subject: [PATCH 272/289] Restart network after bonding-omrvpn creation --- openmptcprouter/files/etc/init.d/openvpnbonding | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index 3093b0f42..d36eeb584 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -78,8 +78,13 @@ start_service() set network.omrvpn.use_carrier='1' set network.omrvpn.mtu='1440' set network.omrvpn.ifname= 'bonding-omrvpn' + set network.omrvpn.force_link='1' commit network EOF + if [ "$(ip link show bonding-omrvpn)" = "" ]; then + /etc/init.d/network restart + sleep 10 + fi config_load openmptcprouter config_foreach _openvpnbonding interface ip link set bonding-omrvpn up From a8a3ba330a4fe6b6934c11407ab61b141b7b96db Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 15:48:34 +0100 Subject: [PATCH 273/289] Add help for DHCP lease time --- .../htdocs/luci-static/resources/view/network/dhcp.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index d3f564d47..dafb89b26 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -491,7 +491,8 @@ return view.extend({ so.datatype = 'or(ip4addr,"ignore")'; so.rmempty = true; - so = ss.option(form.Value, 'leasetime', _('Lease time')); + so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in seconds, or minutes (eg 45m) or hours (eg 1h) or "infinite"')); + so.placeholder = '12h'; so.rmempty = true; so = ss.option(form.Value, 'duid', _('DUID')); From 2bf33b6dd152aff73df18af81891212990009b05 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:43:58 +0100 Subject: [PATCH 274/289] Fix error if adding firewall rules while rules are incorrect --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 05ef1c2de..0ec6b55de 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -467,6 +467,13 @@ _get_gre_tunnel() { set network.omrip${i}.netmask="255.255.255.252" set network.omrip${i}.lookup="667${i}" commit network + EOF + allintf=$(uci -q get firewall.zone_vpn.network) + uci -q del firewall.zone_vpn.network + for intf in $allintf; do + uci -q add_list firewall.zone_vpn.network=$intf + done + uci -q batch <<-EOF >/dev/null add_list firewall.zone_vpn.network="omrip${i}gre" add_list firewall.zone_vpn.network="omrip${i}" commit firewall From 768fcfd33bcb90671ce23d29e6c0756740712333 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:44:51 +0100 Subject: [PATCH 275/289] Use omr settings to get current vpn --- .../luasrc/view/openmptcprouter/wizard.htm | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 13f998979..ee213ed86 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -295,17 +295,17 @@ for _, vpn in pairs(available_vpns) do if vpn == "glorytun_tcp" then %> - <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> <% elseif vpn == "glorytun_udp" then %> - <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> <% elseif vpn == "dsvpn" then %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> <% elseif vpn == "mlvpn" then %> - <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% elseif vpn == "ubond" then %> - <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> + <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% elseif vpn == "openvpn" then %> - <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% elseif vpn == "openvpn_bonding" then %> <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% @@ -316,12 +316,12 @@ <% else %> - <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> - <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> - <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> - <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> - <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% From 38c06cef0c3c13a2e5c86ca1b1ac21541ae6cd9b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:45:15 +0100 Subject: [PATCH 276/289] Change help line for DHCP --- .../htdocs/luci-static/resources/view/network/dhcp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index dafb89b26..d51c0b33d 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -491,7 +491,7 @@ return view.extend({ so.datatype = 'or(ip4addr,"ignore")'; so.rmempty = true; - so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in seconds, or minutes (eg 45m) or hours (eg 1h) or "infinite"')); + so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is minutes (mini 2m), hours (eg 1h) or "infinite"')); so.placeholder = '12h'; so.rmempty = true; From f8b1e3a5e569a3c69a80d4c90c57a644b076bf6b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 20:42:44 +0100 Subject: [PATCH 277/289] Firewall zone must be a list --- .../htdocs/luci-static/resources/view/firewall/zones.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index 00e272677..5ece96be2 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -163,8 +163,10 @@ return view.extend({ var name = uci.get('firewall', section_id, 'name'), cfgvalue = this.cfgvalue(section_id); + /* if (typeof(cfgvalue) == 'string' && Array.isArray(formvalue) && (cfgvalue == formvalue.join(' '))) return; + */ var tasks = [ firewall.getZone(name) ]; From 5bcc428e64de1f485aa65a8d00f99b263a71b57b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 19 Dec 2020 07:16:10 +0100 Subject: [PATCH 278/289] Fix typo --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index ee213ed86..da0649831 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -318,7 +318,7 @@ %> <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> From 984fdadcbc0cff42dffb7253b79e62ba1ce6a0b8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:43:58 +0100 Subject: [PATCH 279/289] Fix error if adding firewall rules while rules are incorrect --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 05ef1c2de..0ec6b55de 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -467,6 +467,13 @@ _get_gre_tunnel() { set network.omrip${i}.netmask="255.255.255.252" set network.omrip${i}.lookup="667${i}" commit network + EOF + allintf=$(uci -q get firewall.zone_vpn.network) + uci -q del firewall.zone_vpn.network + for intf in $allintf; do + uci -q add_list firewall.zone_vpn.network=$intf + done + uci -q batch <<-EOF >/dev/null add_list firewall.zone_vpn.network="omrip${i}gre" add_list firewall.zone_vpn.network="omrip${i}" commit firewall From 28992270af580ac1ba69088c59a7067676ba2055 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:44:51 +0100 Subject: [PATCH 280/289] Use omr settings to get current vpn --- .../luasrc/view/openmptcprouter/wizard.htm | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index b29175167..78a31a1fc 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -295,17 +295,17 @@ for _, vpn in pairs(available_vpns) do if vpn == "glorytun_tcp" then %> - <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> <% elseif vpn == "glorytun_udp" then %> - <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> <% elseif vpn == "dsvpn" then %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> <% elseif vpn == "mlvpn" then %> - <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% elseif vpn == "ubond" then %> - <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> + <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% elseif vpn == "openvpn" then %> - <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% elseif vpn == "openvpn_bonding" then %> <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% @@ -316,12 +316,12 @@ <% else %> - <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> - <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> - <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> - <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> - <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> + <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> + <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> <% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><% end %> <% From 2b2cdc259a0d21bc8b27bf85c6cc8a91e2db755f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 19:45:15 +0100 Subject: [PATCH 281/289] Change help line for DHCP --- .../htdocs/luci-static/resources/view/network/dhcp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index dafb89b26..d51c0b33d 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -491,7 +491,7 @@ return view.extend({ so.datatype = 'or(ip4addr,"ignore")'; so.rmempty = true; - so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in seconds, or minutes (eg 45m) or hours (eg 1h) or "infinite"')); + so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is minutes (mini 2m), hours (eg 1h) or "infinite"')); so.placeholder = '12h'; so.rmempty = true; From 5186a6693856e2248ea2d408f52d7a8988025b7e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 18 Dec 2020 20:42:44 +0100 Subject: [PATCH 282/289] Firewall zone must be a list --- .../htdocs/luci-static/resources/view/firewall/zones.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js index 00e272677..5ece96be2 100644 --- a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +++ b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js @@ -163,8 +163,10 @@ return view.extend({ var name = uci.get('firewall', section_id, 'name'), cfgvalue = this.cfgvalue(section_id); + /* if (typeof(cfgvalue) == 'string' && Array.isArray(formvalue) && (cfgvalue == formvalue.join(' '))) return; + */ var tasks = [ firewall.getZone(name) ]; From 5b4b95a64203f87ee16764431a760cb1955dd800 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 19 Dec 2020 07:16:10 +0100 Subject: [PATCH 283/289] Fix typo --- luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 78a31a1fc..55ec6e531 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -318,7 +318,7 @@ %> <% if nixio.fs.access("/usr/sbin/glorytun") then %><% end %> <% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><% end %> - <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> + <% if nixio.fs.access("/usr/sbin/dsvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/mlvpn") then %><% end %> <% if nixio.fs.access("/usr/sbin/ubond") then %><% end %> <% if nixio.fs.access("/etc/init.d/openvpn") then %><% end %> From 618164759a8e85336ca807af15ab56fbd11195d5 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sat, 19 Dec 2020 14:39:25 +0800 Subject: [PATCH 284/289] fixdns --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 73508e900..ada977e8c 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -13,6 +13,9 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353" add_list dhcp.@dnsmasq[-1].server="/lan/" + add_list dhcp.@dnsmasq[-1].server="223.5.5.5#5353" + add_list dhcp.@dnsmasq[-1].server="223.6.6.6#5353" + add_list dhcp.@dnsmasq[-1].server="180.76.76.76#5353" commit dhcp EOF fi From 575e89a3f2bc7fe753ca53869e1169f7129b4063 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sat, 19 Dec 2020 14:42:23 +0800 Subject: [PATCH 285/289] fix dns --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index ada977e8c..a8c9412a9 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -13,9 +13,11 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353" add_list dhcp.@dnsmasq[-1].server="/lan/" - add_list dhcp.@dnsmasq[-1].server="223.5.5.5#5353" - add_list dhcp.@dnsmasq[-1].server="223.6.6.6#5353" - add_list dhcp.@dnsmasq[-1].server="180.76.76.76#5353" + add_list dhcp.@dnsmasq[-1].server="223.5.5.5#53" + add_list dhcp.@dnsmasq[-1].server="223.6.6.6#53" + add_list dhcp.@dnsmasq[-1].server="180.76.76.76#53" + add_list dhcp.@dnsmasq[-1].server="208.67.222.222#5353" + add_list dhcp.@dnsmasq[-1].server="208.67.220.220#5353" commit dhcp EOF fi From 21ee90280b7dada39df969c53aeef6a3f6a99581 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sat, 19 Dec 2020 15:05:30 +0800 Subject: [PATCH 286/289] Update 1940-omr-dns --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index a8c9412a9..be6ba6c51 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -13,11 +13,11 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353" add_list dhcp.@dnsmasq[-1].server="/lan/" - add_list dhcp.@dnsmasq[-1].server="223.5.5.5#53" - add_list dhcp.@dnsmasq[-1].server="223.6.6.6#53" - add_list dhcp.@dnsmasq[-1].server="180.76.76.76#53" - add_list dhcp.@dnsmasq[-1].server="208.67.222.222#5353" - add_list dhcp.@dnsmasq[-1].server="208.67.220.220#5353" + #add_list dhcp.@dnsmasq[-1].server="223.5.5.5#53" + #add_list dhcp.@dnsmasq[-1].server="223.6.6.6#53" + #add_list dhcp.@dnsmasq[-1].server="180.76.76.76#53" + #add_list dhcp.@dnsmasq[-1].server="208.67.222.222#5353" + #add_list dhcp.@dnsmasq[-1].server="208.67.220.220#5353" commit dhcp EOF fi From de776701e874eb26ada19d84647cdae8f755caab Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 21 Dec 2020 09:53:37 +0100 Subject: [PATCH 287/289] Set uhttpd config only at first boot and update fstab at update --- .../files/etc/uci-defaults/2050-omr-uhttpd | 14 ++++++++------ .../files/etc/uci-defaults/2060-omr-system | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/2050-omr-uhttpd b/openmptcprouter/files/etc/uci-defaults/2050-omr-uhttpd index 9c5e28002..a2076f640 100755 --- a/openmptcprouter/files/etc/uci-defaults/2050-omr-uhttpd +++ b/openmptcprouter/files/etc/uci-defaults/2050-omr-uhttpd @@ -1,8 +1,10 @@ #!/bin/sh -uci -q batch <<-EOF >/dev/null - set uhttpd.main.redirect_https=0 - set uhttpd.main.script_timeout=240 - set uhttpd.main.network_timeout=240 - set uhttpd.main.http_keepalive=0 -EOF +if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set uhttpd.main.redirect_https=0 + set uhttpd.main.script_timeout=240 + set uhttpd.main.network_timeout=240 + set uhttpd.main.http_keepalive=0 + EOF +fi exit 0 \ No newline at end of file diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 3b578e3fc..0acd9fd6f 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -12,6 +12,8 @@ uci -q batch <<-EOF >/dev/null commit fstab EOF +/sbin/block detect > /etc/config/fstab + [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep raspberry)" ] && [ "$(uci -q get openmptcprouter.settings.scaling_governor)" != "performance" ] && { # force CPU speed for RPI uci -q set openmptcprouter.settings.scaling_min_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") From 65447216f90b2263ce6cf40d54e6b6391df497da Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 22 Dec 2020 14:12:01 +0100 Subject: [PATCH 288/289] Fix omr-update --- omr-update/files/etc/init.d/omr-update | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/omr-update/files/etc/init.d/omr-update b/omr-update/files/etc/init.d/omr-update index 0199bb214..6f79dae88 100755 --- a/omr-update/files/etc/init.d/omr-update +++ b/omr-update/files/etc/init.d/omr-update @@ -2,7 +2,7 @@ # Copyright (C) 2018 Ycarus (Yannick Chabanois) # Released under GPL 3. See LICENSE for the full terms. -START=9 +START=1 STOP=98 boot() { @@ -24,15 +24,15 @@ boot() { return 0 } if [ "$(uci -q get openmptcprouter.settings.version)" != "${OMRVERSION}" ]; then + uci -q set openmptcprouter.settings=settings + uci -q set openmptcprouter.settings.version=${OMRVERSION} + uci commit cd /rom/etc/uci-defaults || cd /usr/share/omr-update || return 0 files="$(ls)" [ -z "$files" ] && return 0 for file in $files; do ( . "./$(basename $file)" ) done - uci -q set openmptcprouter.settings=settings - uci -q set openmptcprouter.settings.version=${OMRVERSION} - uci commit fi # temporary hack until configd exists /sbin/reload_config From b1afa2fcabf0108e90cf2f86942404564aafb314 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 22 Dec 2020 14:15:34 +0100 Subject: [PATCH 289/289] Fix socket path --- openmptcprouter/files/etc/uci-defaults/2060-omr-system | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 0acd9fd6f..70beaade9 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -12,6 +12,13 @@ uci -q batch <<-EOF >/dev/null commit fstab EOF +if [ "$(uci -q get rpcd.@rpcd[0].socket)" != "/var/run/ubus/ubus.sock" ]; then + uci -q batch <<-EOF >/dev/null + set rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock' + commit rpcd + EOF +fi + /sbin/block detect > /etc/config/fstab [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep raspberry)" ] && [ "$(uci -q get openmptcprouter.settings.scaling_governor)" != "performance" ] && {