From 9aa554cd10584189481223f31143b29bc6a55194 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sat, 26 Dec 2020 00:53:20 +0800 Subject: [PATCH 001/195] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b2562574c..6483e1fcf 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OpenWrt OpenMPTCProuter feed1 +# OpenWrt OpenMPTCProuter feed This is the OpenWrt OpenMPTCProuter feed containing all modified and necessary packages to build the OpenMPTCProuter image. From d3c6d4230aecc980308b6da04d7bb7b1010318de Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 29 Dec 2020 16:12:35 +0800 Subject: [PATCH 002/195] Update Makefile --- shadowsocks-libev/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile index a7b815c4f..6204c11ee 100755 --- a/shadowsocks-libev/Makefile +++ b/shadowsocks-libev/Makefile @@ -14,12 +14,12 @@ include $(TOPDIR)/rules.mk # - check if default mode has changed from being tcp_only # PKG_NAME:=shadowsocks-libev -PKG_VERSION:=3.3.4 +PKG_VERSION:=3.3.5 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION) -PKG_HASH:=fce47a956fad0c30def9c71821bcec450a40d3f881548e31e66cedf262b89eb1 +PKG_HASH:=cfc8eded35360f4b67e18dc447b0c00cddb29cc57a3cec48b135e5fb87433488 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) From c3fd4f75f1a7eddb10cc0b7db33335d10c2f9f22 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 30 Dec 2020 13:08:45 +0800 Subject: [PATCH 003/195] Revert "Update Makefile" This reverts commit d3c6d4230aecc980308b6da04d7bb7b1010318de. --- shadowsocks-libev/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile index 6204c11ee..a7b815c4f 100755 --- a/shadowsocks-libev/Makefile +++ b/shadowsocks-libev/Makefile @@ -14,12 +14,12 @@ include $(TOPDIR)/rules.mk # - check if default mode has changed from being tcp_only # PKG_NAME:=shadowsocks-libev -PKG_VERSION:=3.3.5 +PKG_VERSION:=3.3.4 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION) -PKG_HASH:=cfc8eded35360f4b67e18dc447b0c00cddb29cc57a3cec48b135e5fb87433488 +PKG_HASH:=fce47a956fad0c30def9c71821bcec450a40d3f881548e31e66cedf262b89eb1 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) From 27597167a639b433776d849eb606cf8c977916cd Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 30 Dec 2020 20:05:50 +0800 Subject: [PATCH 004/195] Create Makefile --- openmptcprouter-zuixiao/Makefile | 100 +++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100755 openmptcprouter-zuixiao/Makefile diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile new file mode 100755 index 000000000..40e7a9efd --- /dev/null +++ b/openmptcprouter-zuixiao/Makefile @@ -0,0 +1,100 @@ +# +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=openmptcprouter-zuixiao +PKG_VERSION:=0.1 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +MY_DEPENDS := \ + mptcp \ + unbound-daemon unbound-control unbound-anchor \ + netifd \ + mc \ + f2fs-tools \ + openmptcprouter \ + dnsmasq-full \ + uhttpd \ + uhttpd-mod-ubus \ + curl \ + iperf3-ssl luci-app-iperf \ + arptables \ + bind-dig \ + libnetfilter-conntrack ebtables ebtables-utils ip-full \ + iptables-mod-iface iptables-mod-ipmark iptables-mod-hashlimit iptables-mod-condition iptables-mod-trace iptables-mod-conntrack-extra iptables-mod-account \ + kmod-nf-nat kmod-nf-nathelper kmod-nf-nathelper-extra iptables-mod-extra \ + iptables-mod-ipsec kmod-crypto-authenc kmod-ipsec kmod-ipsec4 kmod-ipsec6 kmod-ipt-ipsec \ + wireless-tools \ + libiwinfo-lua \ + ca-bundle ca-certificates libustream-openssl \ + 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-vnstat2 \ + luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass luci-app-upnp \ + luci-app-opkg \ + luci-app-uhttpd \ + luci-mod-rpc rpcd-mod-rpcsys rpcd-mod-file rpcd-mod-iwinfo \ + macvlan \ + shadowsocks-libev-ss-server shadowsocks-libev-ss-tunnel \ + omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd ip6tables \ + iftop \ + htop \ + tcpdump \ + ethtool \ + iputils-ping \ + !TARGET_mvebu:luci-proto-3g \ + !TARGET_mvebu:comgt-ncm !TARGET_mvebu:luci-proto-ncm \ + !TARGET_mvebu:luci-proto-modemmanager \ + !TARGET_mvebu:luci-proto-ppp \ + omr-update \ + rng-tools \ + openvpn-openssl \ + mmc-utils \ + libimobiledevice \ + comgt \ + kmod-random-core \ + ca-bundle openssl-util \ + dejavu-fonts-ttf-DejaVuSerif dejavu-fonts-ttf-DejaVuSerif-Bold dejavu-fonts-ttf-DejaVuSerif-Italic dejavu-fonts-ttf-DejaVuSerif-BoldItalic \ + iputils-tracepath netcat adb-enablemodem \ + (TARGET_x86||TARGET_x86_64):kmod-iwlwifi (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl1000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl100 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl105 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl135 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl2000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl2030 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl3160 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl3168 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl5000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl5150 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2a (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2b (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6050 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7260 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7265 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7265d (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl8260c (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl8265 \ + (TARGET_x86||TARGET_x86_64):kmod-e1000 (TARGET_x86||TARGET_x86_64):kmod-e1000e (TARGET_x86||TARGET_x86_64):kmod-igb (TARGET_x86||TARGET_x86_64):kmod-ne2k-pci (TARGET_x86||TARGET_x86_64):kmod-r8169 (TARGET_x86||TARGET_x86_64):kmod-8139too (TARGET_x86||TARGET_x86_64):kmod-bnx2 \ + TARGET_mvebu:kmod-mwlwifi TARGET_mvebu:mwlwifi-firmware-88w8864 TARGET_mvebu:mwlwifi-firmware-88w8897 TARGET_mvebu:mwlwifi-firmware-88w8964 TARGET_mvebu:mwlwifi-firmware-88w8997 \ + !TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \ + !TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \ + !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 \ + !TARGET_mvebu:luci-proto-qmi wpad-basic \ + 464xlat !TARGET_mvebu:kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt ss \ + kmod-usb-dwc3-qcom kmod-gpio-button-hotplug kmod-hwmon-gpiofan kmod-i2c-gpio kmod-i2c-mux-gpio kmod-input-gpio-encoder \ + kmod-input-gpio-keys kmod-input-gpio-keys-polled kmod-leds-gpio kmod-ledtrig-gpio kmod-gpio-beeper kmod-gpio-button-hotplug \ + kmod-gpio-dev kmod-pps-gpio kmod-ledtrig-activity kmod-ledtrig-default-on kmod-ledtrig-heartbeat kmod-ledtrig-netdev \ + kmod-ledtrig-oneshot kmod-ledtrig-timer kmod-ledtrig-transient \ + luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre + +OMR_SUPPORTED_LANGS := en + +define Package/$(PKG_NAME) +SECTION:=OMR +CATEGORY:=OpenMPTCProuter +DEPENDS:=$(foreach p,$(MY_DEPENDS),+$(p)) $(foreach lang,$(OMR_SUPPORTED_LANGS),+LUCI_LANG_$(lang):luci-i18n-base-$(lang)) +TITLE:=OpenMPTCProuter zuixiao Package +endef + +define Package/$(PKG_NAME)/description +OpenMPTCProuter zuixiao package +endef + +define Build/Compile +endef + +define Package/$(PKG_NAME)/install +endef + + +$(eval $(call BuildPackage,$(PKG_NAME))) From 69cbc79ed84871b6cf7dec50e727abc656d61fd6 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 30 Dec 2020 22:51:06 +0800 Subject: [PATCH 005/195] fix make fule --- openmptcprouter-full/Makefile | 2 +- openmptcprouter-zuixiao/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index 9625904b5..1a147cc27 100755 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -79,7 +79,7 @@ MY_DEPENDS := \ 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 (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 \ + 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 kmod-usb-ledtrig-usbport libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ 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 diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile index 40e7a9efd..b5d1ec43f 100755 --- a/openmptcprouter-zuixiao/Makefile +++ b/openmptcprouter-zuixiao/Makefile @@ -74,7 +74,7 @@ MY_DEPENDS := \ kmod-usb-dwc3-qcom kmod-gpio-button-hotplug kmod-hwmon-gpiofan kmod-i2c-gpio kmod-i2c-mux-gpio kmod-input-gpio-encoder \ kmod-input-gpio-keys kmod-input-gpio-keys-polled kmod-leds-gpio kmod-ledtrig-gpio kmod-gpio-beeper kmod-gpio-button-hotplug \ kmod-gpio-dev kmod-pps-gpio kmod-ledtrig-activity kmod-ledtrig-default-on kmod-ledtrig-heartbeat kmod-ledtrig-netdev \ - kmod-ledtrig-oneshot kmod-ledtrig-timer kmod-ledtrig-transient \ + kmod-ledtrig-oneshot kmod-ledtrig-timer kmod-ledtrig-transient kmod-usb-ledtrig-usbport kmod-usb2 \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre OMR_SUPPORTED_LANGS := en From 272b6bb5fdbbc0202bd01d6185265088408d213b Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 30 Dec 2020 23:33:39 +0800 Subject: [PATCH 006/195] Update Makefile --- openmptcprouter-zuixiao/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile index b5d1ec43f..5d9ad39c0 100755 --- a/openmptcprouter-zuixiao/Makefile +++ b/openmptcprouter-zuixiao/Makefile @@ -74,7 +74,7 @@ MY_DEPENDS := \ kmod-usb-dwc3-qcom kmod-gpio-button-hotplug kmod-hwmon-gpiofan kmod-i2c-gpio kmod-i2c-mux-gpio kmod-input-gpio-encoder \ kmod-input-gpio-keys kmod-input-gpio-keys-polled kmod-leds-gpio kmod-ledtrig-gpio kmod-gpio-beeper kmod-gpio-button-hotplug \ kmod-gpio-dev kmod-pps-gpio kmod-ledtrig-activity kmod-ledtrig-default-on kmod-ledtrig-heartbeat kmod-ledtrig-netdev \ - kmod-ledtrig-oneshot kmod-ledtrig-timer kmod-ledtrig-transient kmod-usb-ledtrig-usbport kmod-usb2 \ + kmod-ledtrig-oneshot kmod-ledtrig-timer kmod-ledtrig-transient kmod-usb-ledtrig-usbport \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre OMR_SUPPORTED_LANGS := en From 702b213713d017202f1f4f4a12ecfc5adc3b5db8 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 31 Dec 2020 11:40:09 +0800 Subject: [PATCH 007/195] Update Makefile --- openmptcprouter-zuixiao/Makefile | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile index 5d9ad39c0..a10385cd7 100755 --- a/openmptcprouter-zuixiao/Makefile +++ b/openmptcprouter-zuixiao/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=openmptcprouter-zuixiao +PKG_NAME:=openmptcprouter-mini PKG_VERSION:=0.1 PKG_RELEASE:=1 @@ -17,6 +17,7 @@ MY_DEPENDS := \ mptcp \ unbound-daemon unbound-control unbound-anchor \ netifd \ + luci-app-dsvpn \ mc \ f2fs-tools \ openmptcprouter \ @@ -35,12 +36,14 @@ MY_DEPENDS := \ libiwinfo-lua \ ca-bundle ca-certificates libustream-openssl \ 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-vnstat2 \ - luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass luci-app-upnp \ + luci-app-omr-tracker luci-app-omr-dscp \ + luci-app-sqm sqm-scripts-extra \ + luci-app-vnstat2 omr-quota luci-app-omr-quota \ + luci-app-mptcp luci-app-openmptcprouter luci-app-omr-bypass luci-app-mail luci-app-upnp \ luci-app-opkg \ luci-app-uhttpd \ luci-mod-rpc rpcd-mod-rpcsys rpcd-mod-file rpcd-mod-iwinfo \ + luci-app-openvpn \ macvlan \ shadowsocks-libev-ss-server shadowsocks-libev-ss-tunnel \ omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd ip6tables \ @@ -69,8 +72,9 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \ !TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \ !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 \ - !TARGET_mvebu:luci-proto-qmi wpad-basic \ - 464xlat !TARGET_mvebu:kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt ss \ + 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 ss \ kmod-usb-dwc3-qcom kmod-gpio-button-hotplug kmod-hwmon-gpiofan kmod-i2c-gpio kmod-i2c-mux-gpio kmod-input-gpio-encoder \ kmod-input-gpio-keys kmod-input-gpio-keys-polled kmod-leds-gpio kmod-ledtrig-gpio kmod-gpio-beeper kmod-gpio-button-hotplug \ kmod-gpio-dev kmod-pps-gpio kmod-ledtrig-activity kmod-ledtrig-default-on kmod-ledtrig-heartbeat kmod-ledtrig-netdev \ @@ -83,11 +87,11 @@ define Package/$(PKG_NAME) SECTION:=OMR CATEGORY:=OpenMPTCProuter DEPENDS:=$(foreach p,$(MY_DEPENDS),+$(p)) $(foreach lang,$(OMR_SUPPORTED_LANGS),+LUCI_LANG_$(lang):luci-i18n-base-$(lang)) -TITLE:=OpenMPTCProuter zuixiao Package +TITLE:=OpenMPTCProuter Mini Package endef define Package/$(PKG_NAME)/description -OpenMPTCProuter zuixiao package +OpenMPTCProuter Mini package endef define Build/Compile @@ -97,4 +101,4 @@ define Package/$(PKG_NAME)/install endef -$(eval $(call BuildPackage,$(PKG_NAME))) +$(eval $(call BuildPackage,$(PKG_NAME))) \ No newline at end of file From 9af48a7554fcc3430818ab5c2664d97541b82a4a Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 31 Dec 2020 12:12:39 +0800 Subject: [PATCH 008/195] Update Makefile --- openmptcprouter-zuixiao/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile index a10385cd7..4eb9c237b 100755 --- a/openmptcprouter-zuixiao/Makefile +++ b/openmptcprouter-zuixiao/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=openmptcprouter-mini +PKG_NAME:=openmptcprouter-zuixiao PKG_VERSION:=0.1 PKG_RELEASE:=1 @@ -87,11 +87,11 @@ define Package/$(PKG_NAME) SECTION:=OMR CATEGORY:=OpenMPTCProuter DEPENDS:=$(foreach p,$(MY_DEPENDS),+$(p)) $(foreach lang,$(OMR_SUPPORTED_LANGS),+LUCI_LANG_$(lang):luci-i18n-base-$(lang)) -TITLE:=OpenMPTCProuter Mini Package +TITLE:=OpenMPTCProuter zuixiao Package endef define Package/$(PKG_NAME)/description -OpenMPTCProuter Mini package +OpenMPTCProuter zuixiao package endef define Build/Compile From 81e0513d1b7958e225154d7fc406b6337f2168da Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 3 Jan 2021 15:19:38 +0800 Subject: [PATCH 009/195] Update Makefile --- openmptcprouter-zuixiao/Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openmptcprouter-zuixiao/Makefile b/openmptcprouter-zuixiao/Makefile index 4eb9c237b..06159d1ea 100755 --- a/openmptcprouter-zuixiao/Makefile +++ b/openmptcprouter-zuixiao/Makefile @@ -72,9 +72,8 @@ MY_DEPENDS := \ !TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \ !TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \ !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 ss \ + !TARGET_mvebu:luci-proto-qmi wpad-basic \ + luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt ss \ kmod-usb-dwc3-qcom kmod-gpio-button-hotplug kmod-hwmon-gpiofan kmod-i2c-gpio kmod-i2c-mux-gpio kmod-input-gpio-encoder \ kmod-input-gpio-keys kmod-input-gpio-keys-polled kmod-leds-gpio kmod-ledtrig-gpio kmod-gpio-beeper kmod-gpio-button-hotplug \ kmod-gpio-dev kmod-pps-gpio kmod-ledtrig-activity kmod-ledtrig-default-on kmod-ledtrig-heartbeat kmod-ledtrig-netdev \ From a783ac6f9b52143c6a3b4114dd9dffd67150581c Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 3 Jan 2021 15:30:29 +0800 Subject: [PATCH 010/195] Update 1950-omr-diag --- openmptcprouter/files/etc/uci-defaults/1950-omr-diag | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 openmptcprouter/files/etc/uci-defaults/1950-omr-diag diff --git a/openmptcprouter/files/etc/uci-defaults/1950-omr-diag b/openmptcprouter/files/etc/uci-defaults/1950-omr-diag old mode 100644 new mode 100755 From 58ae99fc36456fef27eabda5f0644321056592fd Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 3 Jan 2021 22:15:33 +0800 Subject: [PATCH 011/195] fix --- 6in4/Makefile | 45 ----- 6in4/files/6in4.sh | 149 ----------------- iperf3/Makefile | 84 ---------- protobuf/Makefile | 108 ------------ umbim/Makefile | 47 ------ umbim/files/lib/netifd/proto/mbim.sh | 240 --------------------------- 6 files changed, 673 deletions(-) delete mode 100755 6in4/Makefile delete mode 100755 6in4/files/6in4.sh delete mode 100755 iperf3/Makefile delete mode 100755 protobuf/Makefile delete mode 100755 umbim/Makefile delete mode 100755 umbim/files/lib/netifd/proto/mbim.sh diff --git a/6in4/Makefile b/6in4/Makefile deleted file mode 100755 index d0f2ad30c..000000000 --- a/6in4/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (C) 2010-2015 OpenWrt.org -# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) -# - Added gateway setting -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=6in4 -PKG_VERSION:=270 -PKG_RELEASE:=2 -PKG_LICENSE:=GPL-2.0 - -include $(INCLUDE_DIR)/package.mk - -define Package/6in4 - SECTION:=net - CATEGORY:=Network - DEPENDS:=@IPV6 +kmod-sit +uclient-fetch - TITLE:=IPv6-in-IPv4 configuration support - MAINTAINER:=Jo-Philipp Wich - PKGARCH:=all -endef - -define Package/6in4/description -Provides support for 6in4 tunnels in /etc/config/network. -Refer to http://wiki.openwrt.org/doc/uci/network for -configuration details. -endef - -define Build/Compile -endef - -define Build/Configure -endef - -define Package/6in4/install - $(INSTALL_DIR) $(1)/lib/netifd/proto - $(INSTALL_BIN) ./files/6in4.sh $(1)/lib/netifd/proto/6in4.sh -endef - -$(eval $(call BuildPackage,6in4)) diff --git a/6in4/files/6in4.sh b/6in4/files/6in4.sh deleted file mode 100755 index cf17c86d8..000000000 --- a/6in4/files/6in4.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/bin/sh -# 6in4.sh - IPv6-in-IPv4 tunnel backend -# Copyright (c) 2010-2015 OpenWrt.org - -[ -n "$INCLUDE_ONLY" ] || { - . /lib/functions.sh - . /lib/functions/network.sh - . ../netifd-proto.sh - init_proto "$@" -} - -proto_6in4_update() { - sh -c ' - timeout=5 - - (while [ $((timeout--)) -gt 0 ]; do - sleep 1 - kill -0 $$ || exit 0 - done; kill -9 $$) 2>/dev/null & - - exec "$@" - ' "$1" "$@" -} - -proto_6in4_add_prefix() { - append "$3" "$1" -} - -proto_6in4_setup() { - local cfg="$1" - local iface="$2" - local link="6in4-$cfg" - - local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix ip6prefixes tunlink tunnelid username password updatekey gateway - json_get_vars mtu ttl tos ipaddr peeraddr ip6addr tunlink tunnelid username password updatekey gateway - json_for_each_item proto_6in4_add_prefix ip6prefix ip6prefixes - - [ -z "$peeraddr" ] && { - proto_notify_error "$cfg" "MISSING_ADDRESS" - proto_block_restart "$cfg" - return - } - - [ -n "$tunlink" ] && ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" ) - - [ -z "$ipaddr" ] && { - local wanif="$tunlink" - if [ -z "$wanif" ] && ! network_find_wan wanif; then - proto_notify_error "$cfg" "NO_WAN_LINK" - return - fi - - if ! network_get_ipaddr ipaddr "$wanif"; then - proto_notify_error "$cfg" "NO_WAN_LINK" - return - fi - } - - proto_init_update "$link" 1 - - [ -n "$ip6addr" ] && { - local local6="${ip6addr%%/*}" - local mask6="${ip6addr##*/}" - [[ "$local6" = "$mask6" ]] && mask6= - proto_add_ipv6_address "$local6" "$mask6" - proto_add_ipv6_route "::" 0 "" "" "" "$local6/$mask6" - } - - [ -n "$gateway" ] && { - proto_add_ipv6_route "::" 0 "$gateway" - } - - for ip6prefix in $ip6prefixes; do - proto_add_ipv6_prefix "$ip6prefix" - proto_add_ipv6_route "::" 0 "" "" "" "$ip6prefix" - done - - proto_add_tunnel - json_add_string mode sit - json_add_int mtu "${mtu:-1280}" - json_add_int ttl "${ttl:-64}" - [ -n "$tos" ] && json_add_string tos "$tos" - json_add_string local "$ipaddr" - json_add_string remote "$peeraddr" - [ -n "$tunlink" ] && json_add_string link "$tunlink" - proto_close_tunnel - - proto_send_update "$cfg" - - [ -n "$tunnelid" -a -n "$username" -a \( -n "$password" -o -n "$updatekey" \) ] && { - [ -n "$updatekey" ] && password="$updatekey" - - local http="http" - local urlget="uclient-fetch" - local urlget_opts="-qO-" - local ca_path="${SSL_CERT_DIR:-/etc/ssl/certs}" - - [ -f /lib/libustream-ssl.so ] && http=https - [ "$http" = "https" -a -z "$(find $ca_path -name "*.0" 2>/dev/null)" ] && { - urlget_opts="$urlget_opts --no-check-certificate" - } - - local url="$http://ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid" - local try=0 - local max=3 - - ( - set -o pipefail - while [ $((++try)) -le $max ]; do - if proto_6in4_update $urlget $urlget_opts --user="$username" --password="$password" "$url" 2>&1 | \ - sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \ - logger -t "$link"; - then - logger -t "$link" "updated" - return 0 - fi - sleep 5 - done - logger -t "$link" "update failed" - ) - } -} - -proto_6in4_teardown() { - local cfg="$1" -} - -proto_6in4_init_config() { - no_device=1 - available=1 - - proto_config_add_string "ipaddr" - proto_config_add_string "ip6addr" - proto_config_add_array "ip6prefix" - proto_config_add_string "peeraddr" - proto_config_add_string "tunlink" - proto_config_add_string "tunnelid" - proto_config_add_string "username" - proto_config_add_string "password" - proto_config_add_string "updatekey" - proto_config_add_string "gateway" - proto_config_add_int "mtu" - proto_config_add_int "ttl" - proto_config_add_string "tos" -} - -[ -n "$INCLUDE_ONLY" ] || { - add_protocol 6in4 -} diff --git a/iperf3/Makefile b/iperf3/Makefile deleted file mode 100755 index b1f7dc21d..000000000 --- a/iperf3/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright (C) 2007-2010 OpenWrt.org -# Copyright (C) 2019 Ycarus (Yannick Chabanois) -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=iperf -PKG_SOURCE_VERSION:=02a5f4755878b319f0db5ccd490daf61e6d76043 -PKG_VERSION:=3.7-$(PKG_SOURCE_VERSION) -PKG_RELEASE:=2 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/esnet/iperf.git - -PKG_MAINTAINER:=Yannick Chabanois -PKG_LICENSE:=BSD-3-Clause - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -PKG_FIXUP:=autoreconf - -include $(INCLUDE_DIR)/package.mk - -DISABLE_NLS:= - -define Package/iperf3/default - SECTION:=net - CATEGORY:=Network - TITLE:=Internet Protocol bandwidth measuring tool - URL:=https://github.com/esnet/iperf -endef - -define Package/iperf3 -$(call Package/iperf3/default) - VARIANT:=nossl -endef - -define Package/iperf3-ssl -$(call Package/iperf3/default) - TITLE+= with iperf_auth support - VARIANT:=ssl - DEPENDS:= +libopenssl -endef - -TARGET_CFLAGS += -D_GNU_SOURCE -CONFIGURE_ARGS += --disable-shared - -ifeq ($(BUILD_VARIANT),ssl) - CONFIGURE_ARGS += --with-openssl="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS += --without-openssl -endif - -MAKE_FLAGS += noinst_PROGRAMS= - -define Package/iperf3/description - Iperf is a modern alternative for measuring TCP and UDP bandwidth - performance, allowing the tuning of various parameters and - characteristics. -endef - -# autoreconf fails if the README file isn't present -define Build/Prepare - $(call Build/Prepare/Default) - touch $(PKG_BUILD_DIR)/README -endef - -define Package/iperf3/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/iperf3 $(1)/usr/bin/ -endef - -define Package/iperf3-ssl/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/iperf3 $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,iperf3)) -$(eval $(call BuildPackage,iperf3-ssl)) diff --git a/protobuf/Makefile b/protobuf/Makefile deleted file mode 100755 index c93527f05..000000000 --- a/protobuf/Makefile +++ /dev/null @@ -1,108 +0,0 @@ -# -# Copyright (C) 2007-2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=protobuf -PKG_VERSION:=3.5.1 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-cpp-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/google/protobuf/releases/download/v$(PKG_VERSION) -PKG_HASH:=c28dba8782da2cfea1e11c61d335958c31a9c1bc553063546af9cbe98f204092 - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=LICENSE - -PKG_BUILD_DEPENDS:=protobuf/host -PKG_USE_MIPS16:=0# MIPS16 prevents protobuf's usage of the 'sync' asm-opcode - -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/host-build.mk - -define Package/protobuf/Default - SECTION:=libs - CATEGORY:=Libraries - TITLE:=A structured data encoding library - URL:=https://github.com/google/protobuf - DEPENDS:=+zlib +libpthread +libstdcpp - MAINTAINER:=Ken Keys -endef - -define Package/protobuf - $(call Package/protobuf/Default) - DEPENDS+=+protobuf-lite -endef - -define Package/protobuf-lite - $(call Package/protobuf/Default) -endef - -define Package/protobuf/description/Default -Protocol Buffers are a way of encoding structured data in an efficient -yet extensible format. Google uses Protocol Buffers for almost all -of its internal RPC protocols and file formats. -endef - -define Package/protobuf/description -$(call Package/protobuf/description/Default) - -This package provides the libprotoc, libprotobuf, and libprotobuf-lite -libraries. For a much smaller protobuf package, see "protobuf-lite". - -endef - -define Package/protobuf-lite/description -$(call Package/protobuf/description/Default) - -This package provides the libprotobuf-lite library. - -endef - -CONFIGURE_ARGS += --with-protoc=$(STAGING_DIR_HOSTPKG)/bin/protoc - -define Build/InstallDev - $(INSTALL_DIR) \ - $(1)/usr/lib \ - $(1)/usr/include - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/include/* \ - $(1)/usr/include/ - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/* \ - $(1)/usr/lib/ -endef - -define Package/protobuf-lite/install - $(INSTALL_DIR) \ - $(1)/usr/lib - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libprotobuf-lite.so* \ - $(1)/usr/lib/ -endef - -define Package/protobuf/install - $(INSTALL_DIR) \ - $(1)/usr/lib - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libprotoc.so* \ - $(1)/usr/lib/ - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libprotobuf.so* \ - $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,protobuf)) -$(eval $(call BuildPackage,protobuf-lite)) -$(eval $(call HostBuild)) diff --git a/umbim/Makefile b/umbim/Makefile deleted file mode 100755 index 36763767f..000000000 --- a/umbim/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=umbim -PKG_RELEASE:=2 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL=$(PROJECT_GIT)/project/umbim.git -PKG_SOURCE_DATE:=2019-09-11 -PKG_SOURCE_VERSION:=184b707ddaa0acee84d02e0ffe599cb8b67782bd -PKG_MIRROR_HASH:=482ff69144f81fafed99035840f5a24e772472f2df2f3ac0219d6de791ac5835 -PKG_MAINTAINER:=John Crispin - -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:= - -PKG_BUILD_PARALLEL:=1 - -PKG_FLAGS:=nonshared - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -define Package/umbim - SECTION:=net - CATEGORY:=Network - SUBMENU:=WWAN - DEPENDS:=+libubox +kmod-usb-net +kmod-usb-net-cdc-mbim +wwan - TITLE:=Control utility for mobile broadband modems -endef - -define Package/umbim/description - umbim is a command line tool for controlling mobile broadband modems using - the MBIM-protocol. -endef - -TARGET_CFLAGS += \ - -I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections - -TARGET_LDFLAGS += -Wl,--gc-sections - -define Package/umbim/install - $(INSTALL_DIR) $(1)/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/umbim $(1)/sbin/ - $(CP) ./files/* $(1)/ -endef - -$(eval $(call BuildPackage,umbim)) diff --git a/umbim/files/lib/netifd/proto/mbim.sh b/umbim/files/lib/netifd/proto/mbim.sh deleted file mode 100755 index 136160997..000000000 --- a/umbim/files/lib/netifd/proto/mbim.sh +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -[ -n "$INCLUDE_ONLY" ] || { - . /lib/functions.sh - . ../netifd-proto.sh - init_proto "$@" -} -#DBG=-v - -proto_mbim_init_config() { - available=1 - no_device=1 - proto_config_add_string "device:device" - proto_config_add_string pdptype - proto_config_add_string apn - proto_config_add_string pincode - proto_config_add_string delay - proto_config_add_string auth - proto_config_add_string username - proto_config_add_string password - proto_config_add_defaults -} - -_proto_mbim_setup() { - local interface="$1" - local tid=2 - - local device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS - json_get_vars device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS - - [ -n "$ctl_device" ] && device=$ctl_device - - pdptype=$(echo "$pdptype" | awk '{print tolower($0)}') - case "$pdptype" in - ip ) - pdptype="ipv4" - ;; - ipv4 | ipv6 | ipv4v6 | ipv4-and-ipv6 ) - ;; - * ) pdptype="default" ;; - esac - - [ -n "$device" ] || { - echo "mbim[$$]" "No control device specified" - proto_notify_error "$interface" NO_DEVICE - proto_set_available "$interface" 0 - return 1 - } - [ -c "$device" ] || { - echo "mbim[$$]" "The specified control device does not exist" - proto_notify_error "$interface" NO_DEVICE - proto_set_available "$interface" 0 - return 1 - } - - devname="$(basename "$device")" - devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)" - ifname="$( ls "$devpath"/net )" - - [ -n "$ifname" ] || { - echo "mbim[$$]" "Failed to find matching interface" - proto_notify_error "$interface" NO_IFNAME - proto_set_available "$interface" 0 - return 1 - } - - [ -n "$apn" ] || { - echo "mbim[$$]" "No APN specified" - proto_notify_error "$interface" NO_APN - return 1 - } - - [ -n "$delay" ] && sleep "$delay" - - echo "mbim[$$]" "Reading capabilities" - umbim $DBG -n -d $device caps || { - echo "mbim[$$]" "Failed to read modem caps" - proto_notify_error "$interface" PIN_FAILED - return 1 - } - tid=$((tid + 1)) - - [ "$pincode" ] && { - echo "mbim[$$]" "Sending pin" - umbim $DBG -n -t $tid -d $device unlock "$pincode" || { - echo "mbim[$$]" "Unable to verify PIN" - proto_notify_error "$interface" PIN_FAILED - proto_block_restart "$interface" - return 1 - } - } - tid=$((tid + 1)) - - echo "mbim[$$]" "Checking pin" - local pinstate="/var/run/mbim.$$.pinstate" - umbim $DBG -n -t $tid -d $device pinstate > "$pinstate" 2>&1 || { - local pin - pin=$(awk '$2=="pin:" {print $5}' "$pinstate") - # we only need pin1 (the SIM pin) to connect - [ "$pin" = "pin1" ] && { - echo "mbim[$$]" "PIN required" - proto_notify_error "$interface" PIN_FAILED - proto_block_restart "$interface" - return 1 - } - } - tid=$((tid + 1)) - - echo "mbim[$$]" "Checking subscriber" - umbim $DBG -n -t $tid -d $device subscriber || { - echo "mbim[$$]" "Subscriber init failed" - proto_notify_error "$interface" NO_SUBSCRIBER - return 1 - } - tid=$((tid + 1)) - - echo "mbim[$$]" "Register with network" - umbim $DBG -n -t $tid -d $device registration || { - echo "mbim[$$]" "Subscriber registration failed" - proto_notify_error "$interface" NO_REGISTRATION - return 1 - } - tid=$((tid + 1)) - - echo "mbim[$$]" "Attach to network" - umbim $DBG -n -t $tid -d $device attach || { - echo "mbim[$$]" "Failed to attach to network" - proto_notify_error "$interface" ATTACH_FAILED - return 1 - } - tid=$((tid + 1)) - - echo "mbim[$$]" "Connect to network" - while ! umbim $DBG -n -t $tid -d $device connect "$pdptype:$apn" "$auth" "$username" "$password"; do - tid=$((tid + 1)) - sleep 1; - done - tid=$((tid + 1)) - - echo "mbim[$$]" "Connected, obtain IP address and configure interface" - local config="/var/run/mbim.$$.config" - umbim $DBG -n -t $tid -d $device config > "$config" || { - echo "mbim[$$]" "Failed to obtain IP address" - proto_notify_error "$interface" CONFIG_FAILED - return 1 - } - tid=$((tid + 1)) - - proto_init_update "$ifname" 1 - proto_add_data - json_add_int tid $tid - proto_close_data - proto_send_update "$interface" - - local ip_4 ip_6 - ip_4=$(awk '$1=="ipv4address:" {print $2}' "$config") - ip_6=$(awk '$1=="ipv6address:" {print $2}' "$config") - [ -n "$ip_4" ] || [ -n "$ip_6" ] || { - echo "mbim[$$]" "Failed to obtain IP addresses" - proto_notify_error "$interface" CONFIG_FAILED - return 1 - } - - proto_init_update "$ifname" 1 - proto_set_keep 1 - local ip mask gateway mtu dns dns_servers - - [ -n "$ip_4" ] && { - echo "mbim[$$]" "Configure IPv4 on $ifname" - ip=${ip_4%%/*} - mask=${ip_4##*/} - gateway=$(awk '$1=="ipv4gateway:" {print $2}' "$config") - mtu=$(awk '$1=="ipv4mtu:" {print $2}' "$config") - [ "$mtu" ] && ip link set "$ifname" mtu "$mtu" - - proto_add_ipv4_address "$ip" "$mask" - [ "$defaultroute" = 0 ] || proto_add_ipv4_route 0.0.0.0 0 "$gateway" "$ip_4" "$metric" - [ "$peerdns" = 0 ] || { - dns_servers=$(awk '$1=="ipv4dnsserver:" {printf "%s ",$2}' "$config") - for dns in $dns_servers; do - proto_add_dns_server "$dns" - done - } - - } - [ -n "$ip_6" ] && { - echo "mbim[$$]" "Configure IPv6 on $ifname" - ip=${ip_6%%/*} - mask=${ip_6##*/} - gateway=$(awk '$1=="ipv6gateway:" {print $2}' "$config") - mtu=$(awk '$1=="ipv6mtu:" {print $2}' "$config") - [ "$mtu" ] && ip -6 link set "$ifname" mtu "$mtu" - - proto_add_ipv6_address "$ip" "$mask" - proto_add_ipv6_prefix "$ip_6" - [ "$defaultroute" = 0 ] || proto_add_ipv6_route "::" 0 "$gateway" "$metric" "" "$ip_6" - [ "$peerdns" = 0 ] || { - dns_servers=$(awk '$1=="ipv6dnsserver:" {printf "%s ",$2}' "$config") - for dns in $dns_servers; do - proto_add_dns_server "$dns" - done - } - } - - proto_send_update "$interface" - echo "mbim[$$]" "Connection setup complete" -} - -proto_mbim_setup() { - local ret - - _proto_mbim_setup "$@" - ret=$? - - rm -f "/var/run/mbim.$$."* - - [ "$ret" = 0 ] || { - logger "mbim bringup failed, retry in 15s" - sleep 15 - } - - return $ret -} - -proto_mbim_teardown() { - local interface="$1" - - local device tid - json_get_vars device tid - - [ -n "$ctl_device" ] && device=$ctl_device - - echo "mbim[$$]" "Stopping network" - [ -n "$tid" ] && umbim $DBG -t$tid -d "$device" disconnect - - proto_init_update "*" 0 - proto_send_update "$interface" -} - -[ -n "$INCLUDE_ONLY" ] || add_protocol mbim From 4d45a2114f7c11a81c36781ad5cf754e2baaa20f Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 5 Jan 2021 00:43:55 +0800 Subject: [PATCH 012/195] Start omr-update after boot script --- 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 59c131e95..d69c779f8 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=1 +START=11 STOP=98 boot() { From 6475bfcdf3f01cf88cf8bbe87f0ce3bd8a429d52 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 7 Jan 2021 15:19:22 +0800 Subject: [PATCH 013/195] Delete 1920-omr-network --- .../files/etc/uci-defaults/1920-omr-network | 297 ------------------ 1 file changed, 297 deletions(-) delete mode 100755 openmptcprouter/files/etc/uci-defaults/1920-omr-network diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network deleted file mode 100755 index 40ac946bf..000000000 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ /dev/null @@ -1,297 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -_setup_macaddr() { - uci -q get "network.$1.macaddr" >/dev/null && return - uci -q set "network.$1.macaddr=$2" -} - -_setup_macvlan() { - uci -q get "network.$1_dev.ifname" >/dev/null && return - - # do not create macvlan for vlan - local _ifname - _ifname=$(uci -q get "network.$1.ifname") - case "$_ifname" in - eth*.*) return ;; - esac - - uci -q batch <<-EOF - set network.$1_dev=device - set network.$1_dev.name=$1 - set network.$1_dev.type=macvlan - set network.$1_dev.ifname=$_ifname - set network.$1.ifname=$1 - set network.$1.type=macvlan - set network.$1.masterintf=$_ifname - set macvlan.$1=macvlan - set macvlan.$1.name=$1 - set macvlan.$1.ifname=$_ifname - EOF - _macaddr=$(uci -q get "network.$1.macaddr") - _setup_macaddr "$1_dev" "${_macaddr:-auto$(date +%s)}" -} - -_setup_macvlan_update() { - uci -q get "network.$1_dev.ifname" >/dev/null || return - - uci -q batch <<-EOF - set macvlan.$1=macvlan - set macvlan.$1.ifname=$_ifname - commit macvlan - EOF -} - -_setup_mptcp_handover_to_on() { - if [ "$(uci -q get network.$1.multipath)" = "handover" ]; then - uci -q set network.$1.multipath=on - fi - if [ "$(uci -q get openmptcprouter.$1.multipath)" = "handover" ]; then - uci -q set openmptcprouter.$1.multipath=on - fi -} - -_setup_multipath_off() { - uci -q get "network.$1.multipath" >/dev/null && return - uci -q set "network.$1.multipath=off" -} - -_setup_wan_interface() { - uci -q batch <<-EOF - set network.$1=interface - set network.$1.ifname=$2 - set network.$1.proto=static - set network.$1.ip4table=wan - set network.$1.multipath=$3 - set network.$1.defaultroute=0 - commit network - add_list firewall.@zone[1].network=$1 - commit firewall - EOF - [ -n "$4" ] && uci -q set network.$1.type=$4 -} - -config_load network -config_foreach _setup_macvlan_update interface -config_foreach _setup_mptcp_handover_to_on interface - -if [ "$(uci -q show network.lan | grep multipath)" != "" ]; then - exit 0 -fi - -lanif="eth0" -if [ "$(grep rockchip /etc/os-release)" != "" ]; then - lanif="eth1" -elif [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan ] || [ -n "$(ip link | grep ' lan')" ]; then - lanif="lan" -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d '/sys/class/net/eth1.5' ]; then - lanif="eth1.5" - uci -q batch <<-EOF - set network.@switch_vlan[0]=switch_vlan - set network.@switch_vlan[0].device='switch0' - set network.@switch_vlan[0].vlan=1 - set network.@switch_vlan[0].vid=1 - set network.@switch_vlan[0].ports='3 5t' - add network switch_vlan - set network.@switch_vlan[1].device='switch0' - set network.@switch_vlan[1].vlan=2 - set network.@switch_vlan[1].vid=2 - set network.@switch_vlan[1].ports='2 5t' - add network switch_vlan - set network.@switch_vlan[2].device='switch0' - set network.@switch_vlan[2].vlan=3 - set network.@switch_vlan[2].vid=3 - set network.@switch_vlan[2].ports='1 5t' - add network switch_vlan - set network.@switch_vlan[3].device='switch0' - set network.@switch_vlan[3].vlan=4 - set network.@switch_vlan[3].vid=4 - set network.@switch_vlan[3].ports='0 5t' - add network switch_vlan - set network.@switch_vlan[4].device='switch0' - set network.@switch_vlan[4].vlan=5 - set network.@switch_vlan[4].vid=5 - set network.@switch_vlan[4].ports='4 6t' - EOF -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d /sys/class/net/eth1 ]; then - lanif="eth1" -elif [ ! -d /sys/class/net/eth1 ] && [ -d /sys/class/net/eth0 ]; then - lanif="eth0" -fi -uci -q batch <<-EOF -delete network.lan.type -set network.lan=interface -set network.lan.proto=static -set network.lan.ipaddr=192.168.100.1 -set network.lan.netmask=255.255.255.0 -set network.lan.ifname=${lanif} -set network.lan.metric=2048 -set network.lan.ipv6=0 -set network.lan.delegate=0 -EOF - -uci -q batch <<-EOF -delete network.none -delete network.wan -delete network.if6rd -reorder network.loopback=0 -reorder network.globals=1 -reorder network.lan=2 -set network.globals.multipath=enable -EOF - -# Set the ip rule for the lan with a pref of 100 -uci -q show network.lan_rule >/dev/null || \ - uci -q batch <<-EOF - set network.lan_rule=rule - set network.lan_rule.lookup=lan - set network.lan_rule.priority=100 - EOF - -if [ "$(uci -q get network.vpn0.proto)" = "none" ]; then - uci -q delete network.vpn0 -fi - -config_load network -config_foreach _setup_multipath_off interface - -# Add the lan as a named routing table -if ! grep -s -q "lan" /etc/iproute2/rt_tables; then - echo "50 lan" >> /etc/iproute2/rt_tables -fi -uci -q set network.lan.ip4table='lan' - -#uci -q set "network.lan.ip6assign=64" - -# Create WAN interfaces -if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get network.wan1.multipath)" ]; then - if [ "$(grep rockchip /etc/os-release)" != "" ]; then - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - _setup_wan_interface wan3 eth0.3 on - _setup_wan_interface wan4 eth0.4 on - elif [ -d /sys/class/net/wan ] || [ -n "$(ip link | grep ' wan:')" ] || [ -n "$(ip link | grep ' wan@')" ]; then - if [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ]; then - _setup_wan_interface wan1 lan0 master - _setup_wan_interface wan2 lan1 on - - _macaddr=$(uci -q get "network.lan0.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan2 ] || [ -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan3 lan2 on - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan4 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/lan2 -o -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan1 lan1 master - _setup_wan_interface wan2 lan2 on - - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan3 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan4 ] || [ -n "$(ip link | grep ' lan4')" ]; then - _setup_wan_interface wan4 lan4 on - _macaddr=$(uci -q get "network.lan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan master macvlan - _setup_wan_interface wan2 wan on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/wan1 ] || [ -n "$(ip link | grep ' wan1')" ]; then - if [ -d /sys/class/net/wan2 ] || [ -n "$(ip link | grep ' wan2')" ]; then - _setup_wan_interface wan1 wan1 master - _setup_wan_interface wan2 wan2 on - - _macaddr=$(uci -q get "network.wan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.wan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - - if [ -d /sys/class/net/wan3 ] || [ -n "$(ip link | grep ' wan3')" ]; then - _setup_wan_interface wan3 wan3 on - _macaddr=$(uci -q get "network.wan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/wan4 ] || [ -n "$(ip link | grep ' wan4')" ]; then - _setup_wan_interface wan4 wan4 on - _macaddr=$(uci -q get "network.wan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan1 master macvlan - _setup_wan_interface wan2 wan1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth1 ] || [ -n "$(ip link | grep ' eth1:')" ]; then - if [ -d /sys/class/net/eth2 ] || [ -n "$(ip link | grep ' eth2:')" ]; then - _setup_wan_interface wan1 eth1 master - _setup_wan_interface wan2 eth2 on - if [ -d /sys/class/net/eth3 ] || [ -n "$(ip link | grep ' eth3:')" ]; then - _setup_wan_interface wan3 eth3 on - fi - if [ -d /sys/class/net/eth4 ] || [ -n "$(ip link | grep ' eth4:')" ]; then - _setup_wan_interface wan4 eth4 on - fi - if [ -d /sys/class/net/eth5 ] || [ -n "$(ip link | grep ' eth5:')" ]; then - _setup_wan_interface wan5 eth5 on - fi - if [ -d /sys/class/net/eth6 ] || [ -n "$(ip link | grep ' eth6:')" ]; then - _setup_wan_interface wan6 eth6 on - fi - if [ -d /sys/class/net/eth7 ] || [ -n "$(ip link | grep ' eth7:')" ]; then - _setup_wan_interface wan7 eth7 on - fi - if [ -d /sys/class/net/eth8 ] || [ -n "$(ip link | grep ' eth8:')" ]; then - _setup_wan_interface wan8 eth8 on - fi - else - _setup_wan_interface wan1 eth1 master macvlan - _setup_wan_interface wan2 eth1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth0.1 ] && [ -d /sys/class/net/eth0.2 ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - else - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - #uci -q batch <<-EOF - #add network route6 - #set network.@route6[-1].interface='lan' - #set network.@route6[-1].target='::/0' - #EOF -fi -uci -q commit macvlan -uci -q commit network -rm -f /tmp/luci-indexcache -exit 0 From f26fc1d4a62679eda51bbbeaaeb1221f4ec89f4e Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 00:52:38 +0800 Subject: [PATCH 014/195] Revert "Merge branch 'test' into develop" This reverts commit 9b2e83a48fd3a51b8d68f112c52d26df05b79485, reversing changes made to 4d45a2114f7c11a81c36781ad5cf754e2baaa20f. --- .../resources/view/services/glorytun-tcp.js | 4 + .../resources/view/services/glorytun-udp.js | 3 + luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- .../luasrc/view/openmptcprouter/settings.htm | 6 +- .../po/templates/openmptcprouter.pot | 675 +++++++++--------- .../root/etc/hotplug.d/net/99-omr-rename | 20 +- .../root/usr/libexec/rpcd/openmptcprouter | 124 ++-- 7 files changed, 408 insertions(+), 426 deletions(-) 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 4b336e339..c8929e0fb 100755 --- 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 @@ -32,6 +32,7 @@ return L.view.extend({ s.tab('advanced', _('Advanced Settings')); o = s.taboption('general', form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; o = s.taboption('general',form.Value, 'label', _('Label')); o.rmempty = true; @@ -64,9 +65,11 @@ return L.view.extend({ 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')); @@ -75,6 +78,7 @@ return L.view.extend({ o.modalonly = true; o = s.taboption('advanced', form.Flag, 'multiqueue', _('Multiqueue')); + o.default = o.enabled; o.rmempty = false; o.modalonly = true; 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 b14b4fb4a..762332468 100755 --- 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 @@ -40,6 +40,7 @@ return L.view.extend({ s.tab('advanced', _('Advanced Settings')); o = s.taboption('general', form.Flag, 'enable', _('Enabled')); + o.default = o.enabled; o = s.taboption('general',form.Value, 'label', _('Label')); o.rmempty = true; @@ -73,9 +74,11 @@ return L.view.extend({ 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')); diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index a69f69e3e..5c32389fb 100755 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -38,7 +38,7 @@ local mtcpsyn = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SY mtcpsyn.datatype = "uinteger" mtcpsyn.rmempty = false local congestion = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is bbr")) -local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs") +local availablecong = sys.exec("sysctl net.ipv4.tcp_available_congestion_control | awk -F'= ' '{print $NF}'") for cong in string.gmatch(availablecong, "[^%s]+") do congestion:value(cong, translate(cong)) end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index c23724f44..5ec0b3c2c 100755 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -17,9 +17,9 @@ %>
-

<%:Update server%>

+

<%:Update VPS%>

-
<%:Update remotly servers to latest version and reboot them.%> <%:Beta%>
+
<%:Update remotly the server to latest version when needed.%> <%:Beta%>
@@ -40,7 +40,7 @@

<%:Advanced Settings%>

- <%:Server settings%> + <%:VPS settings%> <% uci:foreach("openmptcprouter","server", function(s) servername = s[".name"] diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 4daf598a7..44d2aae48 100755 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -1,41 +1,41 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: 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:73 +#: 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:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 msgid "Add a new server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "Add an interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 msgid "Advanced Settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Advanced settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: 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,262 +45,250 @@ msgstr "" msgid "All router settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: 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:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Authentication Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 msgid "Backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 msgid "Backup on server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 msgid "Balancing" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 msgid "Beta" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: 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:170 +#: 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:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 msgid "Can\\'t access and use server part" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 -msgid "Can\\'t get public IP address from V2Ray" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: 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:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: 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:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 msgid "Common server settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 msgid "DHCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "Default Proxy" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 msgid "Default VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: 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:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: 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 "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 msgid "Disable TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 +#: 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:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 msgid "Disable default gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 +#: 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:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 msgid "Disable external check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 msgid "Disable gateway ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 msgid "Disable gateway ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 -msgid "Disable interfaces auto rename" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 -msgid "Disable renaming interfaces" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 msgid "Disable server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 msgid "Disable server ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 msgid "Disable server ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 msgid "Disable tracebox test" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: 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:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 msgid "Download speed (Kb/s)" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 msgid "Dynamic change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 msgid "Enable IPv6" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 msgid "Enable SQM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 msgid "Enable ShadowSocks Obfuscating" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 msgid "Enable TCP Low Latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: 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:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 msgid "Encryption" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: 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:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 msgid "Force retrieve settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: 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:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 msgid "Glorytun key" msgstr "" @@ -308,766 +296,763 @@ msgstr "" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 +#: 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:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 msgid "IPv4 IP default TTL" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 msgid "IPv4 TCP FIN timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 msgid "IPv4 TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 msgid "IPv4 TCP Keepalive time" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 msgid "IPv4 TCP SYN retries" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 msgid "IPv4 TCP SYN retries1" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 msgid "IPv4 TCP SYN retries2" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: 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:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "IPv4 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: 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:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "IPv6 settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 msgid "IPv6 tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 msgid "Interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: 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: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:83 +#: 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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "LAN interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: 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:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 msgid "Label for the interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 msgid "Last available backup on server:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 msgid "Latest available version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: 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:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 msgid "MLVPN password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "MPTCP is not enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "MPTCP over VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 msgid "Master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 msgid "Master interface selection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Maximum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 msgid "Minimum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "ModemManager" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "Network overview" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 msgid "Networks settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "No IP defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 msgid "No available backup on server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 msgid "No change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "No gateway defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 msgid "No output" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 msgid "No server defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 msgid "None" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 msgid "Normal" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 +#: 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:89 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 msgid "Obfuscating plugin" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 msgid "Obfuscating type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 +#: 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:307 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "On wizard change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: 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:722 -msgid "" -"Only one interface must be set as \"Master\", this should be the most stable " -"interface." -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 msgid "Only one server can be master, else all servers are set as backup." msgstr "" +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 +#: 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:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "Other" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 msgid "Other settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 msgid "PAP/CHAP password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: 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:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Protocol" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 msgid "Proxy settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "QMI" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 msgid "Redirects all ports from server to this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 msgid "Restore backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 msgid "Retrieve settings from server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 msgid "Save & Apply" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 msgid "Save vnstats statistics on disk" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 msgid "Save vnstats stats" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 msgid "Scaling governor" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 msgid "Select the device you want to base the interface on." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 msgid "Send backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: 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:62 +#: 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:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: 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/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 msgid "Server settings" 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:67 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 msgid "Service Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: 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:575 +#: 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:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 msgid "Set server as master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: 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:333 +#: 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:788 +#: 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:804 +#: 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 "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 msgid "Settings Wizard" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 msgid "ShadowSocks is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 msgid "ShadowSocks is used for TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 msgid "ShadowSocks key" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 msgid "Show all settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Static address" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 msgid "Status" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Systems settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 +#: 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 " "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: 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." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 +#: 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:170 +#: 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." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: 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:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: 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:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "UMTS/GPRS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 msgid "Update" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 -msgid "Update remotly servers to latest version and reboot them." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 +msgid "Update VPS" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 +msgid "Update remotly the server to latest version when needed." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Update server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 msgid "Upload speed (Kb/s)" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: 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 "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 msgid "VPN is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 msgid "VPN settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 msgid "VPN traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 +msgid "VPS settings" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 +#: 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." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 msgid "Wizard" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: 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:373 +#: 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:522 +#: 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:163 +#: 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:444 +#: 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:153 +#: 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:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 +#: 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 msgid "Your IP was not leased by this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 msgid "address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "auto" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 msgid "ip address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 -msgid "latency:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 -msgid "mtu:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 -msgid "multipath:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 -msgid "operator:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 -msgid "other" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 -msgid "phone number:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 -msgid "range:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 -msgid "state:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 -msgid "traffic control:" -msgstr "" - #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 -msgid "wan address:" +msgid "latency:" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +msgid "mtu:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +msgid "multipath:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +msgid "operator:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +msgid "other" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +msgid "phone number:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +msgid "range:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +msgid "state:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +msgid "traffic control:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +msgid "wan address:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 msgid "whois:" msgstr "" 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 02d204117..19fcf1b1e 100755 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -27,14 +27,14 @@ _set_intf_name() { if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" existif=0 - ip link set ${INTERFACE} down 2>&1 >/dev/null + ip link set ${INTERFACE} down [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { - ip link set ${ifname} name ${ifname}tmp 2>&1 >/dev/null + ip link set ${ifname} name ${ifname}tmp existif=1 } - ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null - ip link set ${ifname} up 2>&1 >/dev/null - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null + ip link set ${INTERFACE} name ${ifname} + ip link set ${ifname} up + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} fi fi elif [ -f /dev/${DEVICE_NAME} ] && [ -n "$MODALIAS" ] && [ "$modalias" = "$MODALIAS" ]; then @@ -46,15 +46,15 @@ _set_intf_name() { } [ -z "$modalias" ] && [ -n "$device" ] && [ -n "$ifname" ] && [ "/sys${DEVPATH}" = "$device" ] && [ "$INTERFACE" != "$ifname" ] && { logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" - ip link set ${INTERFACE} down 2>&1 >/dev/null + ip link set ${INTERFACE} down existif=0 [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { - ip link set ${ifname} name ${ifname}tmp 2>&1 >/dev/null + ip link set ${ifname} name ${ifname}tmp existif=1 } - ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null - ip link set ${ifname} up 2>&1 >/dev/null - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null + ip link set ${INTERFACE} name ${ifname} + ip link set ${ifname} up + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} } } diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 633b47394..5df98b004 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -116,14 +116,14 @@ function add_interface(add_interface_ifname) ucic:save("sqm") ucic:commit("sqm") - sys.exec("uci -q add_list vnstat.@vnstat[-1].interface=" .. wanif) - sys.exec("uci -q commit vnstat") + luci.sys.call("uci -q add_list vnstat.@vnstat[-1].interface=" .. wanif) + luci.sys.call("uci -q commit vnstat") -- Dirty way to add new interface to firewall... - sys.exec("uci -q add_list firewall.@zone[1].network=wan" .. i) - sys.exec("uci -q commit firewall") + luci.sys.call("uci -q add_list firewall.@zone[1].network=wan" .. i) + luci.sys.call("uci -q commit firewall") - sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") end function remove_interface(intf) @@ -140,11 +140,11 @@ function remove_interface(intf) ucic:save("qos") ucic:commit("qos") if defif ~= nil and defif ~= "" then - sys.exec("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) + luci.sys.call("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) end - sys.exec("uci -q commit vnstat") - sys.exec("uci -q del_list firewall.@zone[1].network=" .. intf) - sys.exec("uci -q commit firewall") + luci.sys.call("uci -q commit vnstat") + luci.sys.call("uci -q del_list firewall.@zone[1].network=" .. intf) + luci.sys.call("uci -q commit firewall") end function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspeed,uploadspeed) @@ -321,30 +321,24 @@ function server_settings(server,server_ip,openmptcprouter_vps_key) ucic:set("openmptcprouter",server,"ip",server_ip) ucic:set("openmptcprouter",server,"port","65500") ucic:save("openmptcprouter") - if ucic:get("openmptcprouter",server,"master") == "1" then - ucic:set("shadowsocks-libev","sss0","server",server_ip) - ucic:set("glorytun","vpn","host",server_ip) - ucic:set("dsvpn","vpn","host",server_ip) - ucic:set("mlvpn","general","host",server_ip) - sys.exec("uci -q del openvpn.omr.remote") - sys.exec("uci -q add_list openvpn.omr.remote=" .. server_ip) - ucic:set("qos","serverin","srchost",server_ip) - ucic:set("qos","serverout","dsthost",server_ip) - ucic:set("v2ray","omrout","s_vmess_address",server_ip) - ucic:set("v2ray","omrout","s_vless_address",server_ip) - ucic:save("qos") - ucic:commit("qos") - ucic:save("mlvpn") - ucic:commit("mlvpn") - ucic:save("dsvpn") - ucic:commit("dsvpn") - ucic:save("v2ray") - ucic:commit("v2ray") - ucic:save("glorytun") - ucic:commit("glorytun") - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") - end + ucic:set("shadowsocks-libev","sss0","server",server_ip) + ucic:set("glorytun","vpn","host",server_ip) + ucic:set("dsvpn","vpn","host",server_ip) + ucic:set("mlvpn","general","host",server_ip) + luci.sys.call("uci -q del openvpn.omr.remote") + luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:save("qos") + ucic:commit("qos") + ucic:save("mlvpn") + ucic:commit("mlvpn") + ucic:save("dsvpn") + ucic:commit("dsvpn") + ucic:save("glorytun") + ucic:commit("glorytun") + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") end function set_shadowsocks(shadowsocks_key) @@ -410,22 +404,18 @@ end function restart_all() -- Restart all - sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") - sys.exec("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mptcp restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/openvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/openvpnbonding restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/dsvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-tracker start >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") + luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") + 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") + --luci.sys.call("/etc/init.d/mlvpn 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/omr-tracker restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") end function redirectports(server,redirect_ports) @@ -435,26 +425,26 @@ end function tcpkeepalivetime(tcp_keepalive_time) -- Set tcp_keepalive_time - sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) - sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) + luci.sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) + luci.sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) end function tcpfintimeout(tcp_fin_timeout) -- Set tcp_fin_timeout - sys.exec("sysctl -w net.ipv4.tcp_fin_timeout=%s" % tcp_fin_timeout) - sys.exec("sed -i 's:^net.ipv4.tcp_fin_timeout=[0-9]*:net.ipv4.tcp_fin_timeout=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fin_timeout) + luci.sys.exec("sysctl -w net.ipv4.tcp_fin_timeout=%s" % tcp_fin_timeout) + luci.sys.exec("sed -i 's:^net.ipv4.tcp_fin_timeout=[0-9]*:net.ipv4.tcp_fin_timeout=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fin_timeout) end function tcpsynretries(tcp_syn_retries) -- Set tcp_syn_retries - sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries) - sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries) + luci.sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries) + luci.sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries) end function tcpfastopen(tcp_fastopen) -- Set tcp_fastopen - sys.exec("sysctl -w net.ipv4.tcp_fastopen=%s" % tcp_fastopen) - sys.exec("sed -i 's:^net.ipv4.tcp_fastopen=[0-3]*:net.ipv4.tcp_fastopen=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fastopen) + luci.sys.exec("sysctl -w net.ipv4.tcp_fastopen=%s" % tcp_fastopen) + luci.sys.exec("sed -i 's:^net.ipv4.tcp_fastopen=[0-3]*:net.ipv4.tcp_fastopen=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fastopen) end function disableipv6(disable_ipv6) @@ -462,7 +452,7 @@ function disableipv6(disable_ipv6) ucic:set("openmptcprouter","settings","disable_ipv6",disable_ipv6) ucic:save("openmptcprouter") ucic:commit("openmptcprouter") - sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") end function externalcheck(externalcheck) @@ -473,7 +463,7 @@ end function savevnstat(savevnstat) -- Enable/disable save vnstat - sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat) + luci.sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat) ucic:commit("vnstat") end @@ -532,17 +522,17 @@ end function update_vps() -- Update VPS - local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") - ucic:foreach("openmptcprouter", "server", function(section) - local servername = section[".name"] - local serverip = section["ip"] or "" - local adminport = section["port"] or "65500" - local token = section["token"] or "" + ucic:foreach("openmptcprouter", "server", function(s) + local serverip = ucic:get("openmptcprouter",s[".name"],"ip") + local adminport = ucic:get("openmptcprouter",s[".name"],"port") or "65500" + local token = ucic:get("openmptcprouter",s[".name"],"token") or "" if token ~= "" then - local updatevps = sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") + sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") + luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") + luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) + return end end) - local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") end function get_ip(interface) From cb110acffac80f75961122bd13a32253bf0e8a74 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 00:52:44 +0800 Subject: [PATCH 015/195] Revert "Revert "Merge branch 'test' into develop"" This reverts commit f26fc1d4a62679eda51bbbeaaeb1221f4ec89f4e. --- .../resources/view/services/glorytun-tcp.js | 4 - .../resources/view/services/glorytun-udp.js | 3 - luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 2 +- .../luasrc/view/openmptcprouter/settings.htm | 6 +- .../po/templates/openmptcprouter.pot | 689 +++++++++--------- .../root/etc/hotplug.d/net/99-omr-rename | 20 +- .../root/usr/libexec/rpcd/openmptcprouter | 124 ++-- 7 files changed, 433 insertions(+), 415 deletions(-) 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 c8929e0fb..4b336e339 100755 --- 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 @@ -32,7 +32,6 @@ return L.view.extend({ s.tab('advanced', _('Advanced Settings')); o = s.taboption('general', form.Flag, 'enable', _('Enabled')); - o.default = o.enabled; o = s.taboption('general',form.Value, 'label', _('Label')); o.rmempty = true; @@ -65,11 +64,9 @@ return L.view.extend({ 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')); @@ -78,7 +75,6 @@ return L.view.extend({ o.modalonly = true; o = s.taboption('advanced', form.Flag, 'multiqueue', _('Multiqueue')); - o.default = o.enabled; o.rmempty = false; o.modalonly = true; 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 762332468..b14b4fb4a 100755 --- 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 @@ -40,7 +40,6 @@ return L.view.extend({ s.tab('advanced', _('Advanced Settings')); o = s.taboption('general', form.Flag, 'enable', _('Enabled')); - o.default = o.enabled; o = s.taboption('general',form.Value, 'label', _('Label')); o.rmempty = true; @@ -74,11 +73,9 @@ return L.view.extend({ 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')); diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 5c32389fb..a69f69e3e 100755 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -38,7 +38,7 @@ local mtcpsyn = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SY mtcpsyn.datatype = "uinteger" mtcpsyn.rmempty = false local congestion = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is bbr")) -local availablecong = sys.exec("sysctl net.ipv4.tcp_available_congestion_control | awk -F'= ' '{print $NF}'") +local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs") for cong in string.gmatch(availablecong, "[^%s]+") do congestion:value(cong, translate(cong)) end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 5ec0b3c2c..c23724f44 100755 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -17,9 +17,9 @@ %>
-

<%:Update VPS%>

+

<%:Update server%>

-
<%:Update remotly the server to latest version when needed.%> <%:Beta%>
+
<%:Update remotly servers to latest version and reboot them.%> <%:Beta%>
@@ -40,7 +40,7 @@

<%:Advanced Settings%>

- <%:VPS settings%> + <%:Server settings%> <% uci:foreach("openmptcprouter","server", function(s) servername = s[".name"] diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 44d2aae48..4daf598a7 100755 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -1,41 +1,41 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 msgid "API username to retrieve personnalized settings from the server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -45,250 +45,262 @@ msgstr "" msgid "All router settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "By default VPN is used for any traffic that is not TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 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:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +msgid "Can\\'t get public IP address from V2Ray" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 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:412 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 msgid "Default Proxy" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 msgid "Disable default gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +msgid "Disable interfaces auto rename" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +msgid "Disable renaming interfaces" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 msgid "Disable server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 msgid "Disable tracebox test" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 msgid "Enable TCP Low Latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Force retrieve all keys from server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 msgid "Force retrieve settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "" @@ -296,763 +308,766 @@ msgstr "" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 msgid "IPv4 TCP SYN retries1" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 msgid "IPv4 TCP SYN retries2" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 msgid "IPv6 settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 msgid "LAN interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 msgid "Latest available version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 msgid "More than one default VPN is enabled" 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:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 msgid "No server defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 msgid "Obfuscating will be enabled on both side" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Only one server can be master, else all servers are set as backup." msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Other" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 msgid "Other settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 msgid "Physical interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "Proxy settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Retrieve settings from server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 msgid "Server IP will be set for proxy and VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Service Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Set an IP in the same network as the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 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:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 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:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 msgid "ShadowSocks is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 " "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 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:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +msgid "Update remotly servers to latest version and reboot them." msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 msgid "V2Ray is used for TCP and UDP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:56 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 msgid "address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 -msgid "ip address:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 -msgid "latency:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 -msgid "mtu:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 -msgid "multipath:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -msgid "operator:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 -msgid "other" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -msgid "phone number:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 -msgid "range:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 -msgid "state:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 -msgid "traffic control:" -msgstr "" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 -msgid "wan address:" -msgstr "" - #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +msgid "ip address:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +msgid "latency:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +msgid "mtu:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +msgid "multipath:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +msgid "operator:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +msgid "other" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +msgid "phone number:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 +msgid "range:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +msgid "state:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +msgid "traffic control:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +msgid "wan address:" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "" 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 19fcf1b1e..02d204117 100755 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -27,14 +27,14 @@ _set_intf_name() { if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" existif=0 - ip link set ${INTERFACE} down + ip link set ${INTERFACE} down 2>&1 >/dev/null [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { - ip link set ${ifname} name ${ifname}tmp + ip link set ${ifname} name ${ifname}tmp 2>&1 >/dev/null existif=1 } - ip link set ${INTERFACE} name ${ifname} - ip link set ${ifname} up - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} + ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null + ip link set ${ifname} up 2>&1 >/dev/null + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null fi fi elif [ -f /dev/${DEVICE_NAME} ] && [ -n "$MODALIAS" ] && [ "$modalias" = "$MODALIAS" ]; then @@ -46,15 +46,15 @@ _set_intf_name() { } [ -z "$modalias" ] && [ -n "$device" ] && [ -n "$ifname" ] && [ "/sys${DEVPATH}" = "$device" ] && [ "$INTERFACE" != "$ifname" ] && { logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" - ip link set ${INTERFACE} down + ip link set ${INTERFACE} down 2>&1 >/dev/null existif=0 [ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && { - ip link set ${ifname} name ${ifname}tmp + ip link set ${ifname} name ${ifname}tmp 2>&1 >/dev/null existif=1 } - ip link set ${INTERFACE} name ${ifname} - ip link set ${ifname} up - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} + ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null + ip link set ${ifname} up 2>&1 >/dev/null + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null } } diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 5df98b004..633b47394 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -116,14 +116,14 @@ function add_interface(add_interface_ifname) ucic:save("sqm") ucic:commit("sqm") - luci.sys.call("uci -q add_list vnstat.@vnstat[-1].interface=" .. wanif) - luci.sys.call("uci -q commit vnstat") + sys.exec("uci -q add_list vnstat.@vnstat[-1].interface=" .. wanif) + sys.exec("uci -q commit vnstat") -- Dirty way to add new interface to firewall... - luci.sys.call("uci -q add_list firewall.@zone[1].network=wan" .. i) - luci.sys.call("uci -q commit firewall") + sys.exec("uci -q add_list firewall.@zone[1].network=wan" .. i) + sys.exec("uci -q commit firewall") - luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") end function remove_interface(intf) @@ -140,11 +140,11 @@ function remove_interface(intf) ucic:save("qos") ucic:commit("qos") if defif ~= nil and defif ~= "" then - luci.sys.call("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) + sys.exec("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) end - luci.sys.call("uci -q commit vnstat") - luci.sys.call("uci -q del_list firewall.@zone[1].network=" .. intf) - luci.sys.call("uci -q commit firewall") + sys.exec("uci -q commit vnstat") + sys.exec("uci -q del_list firewall.@zone[1].network=" .. intf) + sys.exec("uci -q commit firewall") end function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspeed,uploadspeed) @@ -321,24 +321,30 @@ function server_settings(server,server_ip,openmptcprouter_vps_key) ucic:set("openmptcprouter",server,"ip",server_ip) ucic:set("openmptcprouter",server,"port","65500") ucic:save("openmptcprouter") - ucic:set("shadowsocks-libev","sss0","server",server_ip) - ucic:set("glorytun","vpn","host",server_ip) - ucic:set("dsvpn","vpn","host",server_ip) - ucic:set("mlvpn","general","host",server_ip) - luci.sys.call("uci -q del openvpn.omr.remote") - luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) - ucic:set("qos","serverin","srchost",server_ip) - ucic:set("qos","serverout","dsthost",server_ip) - ucic:save("qos") - ucic:commit("qos") - ucic:save("mlvpn") - ucic:commit("mlvpn") - ucic:save("dsvpn") - ucic:commit("dsvpn") - ucic:save("glorytun") - ucic:commit("glorytun") - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") + if ucic:get("openmptcprouter",server,"master") == "1" then + ucic:set("shadowsocks-libev","sss0","server",server_ip) + ucic:set("glorytun","vpn","host",server_ip) + ucic:set("dsvpn","vpn","host",server_ip) + ucic:set("mlvpn","general","host",server_ip) + sys.exec("uci -q del openvpn.omr.remote") + sys.exec("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:set("v2ray","omrout","s_vmess_address",server_ip) + ucic:set("v2ray","omrout","s_vless_address",server_ip) + ucic:save("qos") + ucic:commit("qos") + ucic:save("mlvpn") + ucic:commit("mlvpn") + ucic:save("dsvpn") + ucic:commit("dsvpn") + ucic:save("v2ray") + ucic:commit("v2ray") + ucic:save("glorytun") + ucic:commit("glorytun") + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") + end end function set_shadowsocks(shadowsocks_key) @@ -404,18 +410,22 @@ end function restart_all() -- Restart all - luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") - 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") - --luci.sys.call("/etc/init.d/mlvpn 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/omr-tracker restart >/dev/null 2>/dev/null") - luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") + sys.exec("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/mptcp restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/openvpn restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/openvpnbonding restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/dsvpn restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/omr-tracker start >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") end function redirectports(server,redirect_ports) @@ -425,26 +435,26 @@ end function tcpkeepalivetime(tcp_keepalive_time) -- Set tcp_keepalive_time - luci.sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) - luci.sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) + sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) + sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) end function tcpfintimeout(tcp_fin_timeout) -- Set tcp_fin_timeout - luci.sys.exec("sysctl -w net.ipv4.tcp_fin_timeout=%s" % tcp_fin_timeout) - luci.sys.exec("sed -i 's:^net.ipv4.tcp_fin_timeout=[0-9]*:net.ipv4.tcp_fin_timeout=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fin_timeout) + sys.exec("sysctl -w net.ipv4.tcp_fin_timeout=%s" % tcp_fin_timeout) + sys.exec("sed -i 's:^net.ipv4.tcp_fin_timeout=[0-9]*:net.ipv4.tcp_fin_timeout=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fin_timeout) end function tcpsynretries(tcp_syn_retries) -- Set tcp_syn_retries - luci.sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries) - luci.sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries) + sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries) + sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries) end function tcpfastopen(tcp_fastopen) -- Set tcp_fastopen - luci.sys.exec("sysctl -w net.ipv4.tcp_fastopen=%s" % tcp_fastopen) - luci.sys.exec("sed -i 's:^net.ipv4.tcp_fastopen=[0-3]*:net.ipv4.tcp_fastopen=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fastopen) + sys.exec("sysctl -w net.ipv4.tcp_fastopen=%s" % tcp_fastopen) + sys.exec("sed -i 's:^net.ipv4.tcp_fastopen=[0-3]*:net.ipv4.tcp_fastopen=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fastopen) end function disableipv6(disable_ipv6) @@ -452,7 +462,7 @@ function disableipv6(disable_ipv6) ucic:set("openmptcprouter","settings","disable_ipv6",disable_ipv6) ucic:save("openmptcprouter") ucic:commit("openmptcprouter") - luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") end function externalcheck(externalcheck) @@ -463,7 +473,7 @@ end function savevnstat(savevnstat) -- Enable/disable save vnstat - luci.sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat) + sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat) ucic:commit("vnstat") end @@ -522,17 +532,17 @@ end function update_vps() -- Update VPS - ucic:foreach("openmptcprouter", "server", function(s) - local serverip = ucic:get("openmptcprouter",s[".name"],"ip") - local adminport = ucic:get("openmptcprouter",s[".name"],"port") or "65500" - local token = ucic:get("openmptcprouter",s[".name"],"token") or "" + local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") + ucic:foreach("openmptcprouter", "server", function(section) + local servername = section[".name"] + local serverip = section["ip"] or "" + local adminport = section["port"] or "65500" + local token = section["token"] or "" if token ~= "" then - sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") - luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status")) - return + local updatevps = sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") end end) + local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") end function get_ip(interface) From 0ef0dbe823e69a3035c60ee67034823159e1f244 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 00:54:10 +0800 Subject: [PATCH 016/195] Create 1920-omr-network --- .../files/etc/uci-defaults/1920-omr-network | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100755 openmptcprouter/files/etc/uci-defaults/1920-omr-network diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network new file mode 100755 index 000000000..40ac946bf --- /dev/null +++ b/openmptcprouter/files/etc/uci-defaults/1920-omr-network @@ -0,0 +1,297 @@ +#!/bin/sh +. /lib/functions.sh + +_setup_macaddr() { + uci -q get "network.$1.macaddr" >/dev/null && return + uci -q set "network.$1.macaddr=$2" +} + +_setup_macvlan() { + uci -q get "network.$1_dev.ifname" >/dev/null && return + + # do not create macvlan for vlan + local _ifname + _ifname=$(uci -q get "network.$1.ifname") + case "$_ifname" in + eth*.*) return ;; + esac + + uci -q batch <<-EOF + set network.$1_dev=device + set network.$1_dev.name=$1 + set network.$1_dev.type=macvlan + set network.$1_dev.ifname=$_ifname + set network.$1.ifname=$1 + set network.$1.type=macvlan + set network.$1.masterintf=$_ifname + set macvlan.$1=macvlan + set macvlan.$1.name=$1 + set macvlan.$1.ifname=$_ifname + EOF + _macaddr=$(uci -q get "network.$1.macaddr") + _setup_macaddr "$1_dev" "${_macaddr:-auto$(date +%s)}" +} + +_setup_macvlan_update() { + uci -q get "network.$1_dev.ifname" >/dev/null || return + + uci -q batch <<-EOF + set macvlan.$1=macvlan + set macvlan.$1.ifname=$_ifname + commit macvlan + EOF +} + +_setup_mptcp_handover_to_on() { + if [ "$(uci -q get network.$1.multipath)" = "handover" ]; then + uci -q set network.$1.multipath=on + fi + if [ "$(uci -q get openmptcprouter.$1.multipath)" = "handover" ]; then + uci -q set openmptcprouter.$1.multipath=on + fi +} + +_setup_multipath_off() { + uci -q get "network.$1.multipath" >/dev/null && return + uci -q set "network.$1.multipath=off" +} + +_setup_wan_interface() { + uci -q batch <<-EOF + set network.$1=interface + set network.$1.ifname=$2 + set network.$1.proto=static + set network.$1.ip4table=wan + set network.$1.multipath=$3 + set network.$1.defaultroute=0 + commit network + add_list firewall.@zone[1].network=$1 + commit firewall + EOF + [ -n "$4" ] && uci -q set network.$1.type=$4 +} + +config_load network +config_foreach _setup_macvlan_update interface +config_foreach _setup_mptcp_handover_to_on interface + +if [ "$(uci -q show network.lan | grep multipath)" != "" ]; then + exit 0 +fi + +lanif="eth0" +if [ "$(grep rockchip /etc/os-release)" != "" ]; then + lanif="eth1" +elif [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then + lanif="wan" +elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then + lanif="wan" +elif [ -d /sys/class/net/lan ] || [ -n "$(ip link | grep ' lan')" ]; then + lanif="lan" +elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d '/sys/class/net/eth1.5' ]; then + lanif="eth1.5" + uci -q batch <<-EOF + set network.@switch_vlan[0]=switch_vlan + set network.@switch_vlan[0].device='switch0' + set network.@switch_vlan[0].vlan=1 + set network.@switch_vlan[0].vid=1 + set network.@switch_vlan[0].ports='3 5t' + add network switch_vlan + set network.@switch_vlan[1].device='switch0' + set network.@switch_vlan[1].vlan=2 + set network.@switch_vlan[1].vid=2 + set network.@switch_vlan[1].ports='2 5t' + add network switch_vlan + set network.@switch_vlan[2].device='switch0' + set network.@switch_vlan[2].vlan=3 + set network.@switch_vlan[2].vid=3 + set network.@switch_vlan[2].ports='1 5t' + add network switch_vlan + set network.@switch_vlan[3].device='switch0' + set network.@switch_vlan[3].vlan=4 + set network.@switch_vlan[3].vid=4 + set network.@switch_vlan[3].ports='0 5t' + add network switch_vlan + set network.@switch_vlan[4].device='switch0' + set network.@switch_vlan[4].vlan=5 + set network.@switch_vlan[4].vid=5 + set network.@switch_vlan[4].ports='4 6t' + EOF +elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d /sys/class/net/eth1 ]; then + lanif="eth1" +elif [ ! -d /sys/class/net/eth1 ] && [ -d /sys/class/net/eth0 ]; then + lanif="eth0" +fi +uci -q batch <<-EOF +delete network.lan.type +set network.lan=interface +set network.lan.proto=static +set network.lan.ipaddr=192.168.100.1 +set network.lan.netmask=255.255.255.0 +set network.lan.ifname=${lanif} +set network.lan.metric=2048 +set network.lan.ipv6=0 +set network.lan.delegate=0 +EOF + +uci -q batch <<-EOF +delete network.none +delete network.wan +delete network.if6rd +reorder network.loopback=0 +reorder network.globals=1 +reorder network.lan=2 +set network.globals.multipath=enable +EOF + +# Set the ip rule for the lan with a pref of 100 +uci -q show network.lan_rule >/dev/null || \ + uci -q batch <<-EOF + set network.lan_rule=rule + set network.lan_rule.lookup=lan + set network.lan_rule.priority=100 + EOF + +if [ "$(uci -q get network.vpn0.proto)" = "none" ]; then + uci -q delete network.vpn0 +fi + +config_load network +config_foreach _setup_multipath_off interface + +# Add the lan as a named routing table +if ! grep -s -q "lan" /etc/iproute2/rt_tables; then + echo "50 lan" >> /etc/iproute2/rt_tables +fi +uci -q set network.lan.ip4table='lan' + +#uci -q set "network.lan.ip6assign=64" + +# Create WAN interfaces +if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get network.wan1.multipath)" ]; then + if [ "$(grep rockchip /etc/os-release)" != "" ]; then + _setup_wan_interface wan1 eth0 master macvlan + _setup_wan_interface wan2 eth0 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ]; then + _setup_wan_interface wan1 eth0.1 master + _setup_wan_interface wan2 eth0.2 on + _setup_wan_interface wan3 eth0.3 on + _setup_wan_interface wan4 eth0.4 on + elif [ -d /sys/class/net/wan ] || [ -n "$(ip link | grep ' wan:')" ] || [ -n "$(ip link | grep ' wan@')" ]; then + if [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ]; then + _setup_wan_interface wan1 lan0 master + _setup_wan_interface wan2 lan1 on + + _macaddr=$(uci -q get "network.lan0.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.lan1.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan2 ] || [ -n "$(ip link | grep ' lan2')" ]; then + _setup_wan_interface wan3 lan2 on + _macaddr=$(uci -q get "network.lan2.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then + _setup_wan_interface wan4 lan3 on + _macaddr=$(uci -q get "network.lan3.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/lan2 -o -n "$(ip link | grep ' lan2')" ]; then + _setup_wan_interface wan1 lan1 master + _setup_wan_interface wan2 lan2 on + + _macaddr=$(uci -q get "network.lan1.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.lan2.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then + _setup_wan_interface wan3 lan3 on + _macaddr=$(uci -q get "network.lan3.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan4 ] || [ -n "$(ip link | grep ' lan4')" ]; then + _setup_wan_interface wan4 lan4 on + _macaddr=$(uci -q get "network.lan4.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + else + _setup_wan_interface wan1 wan master macvlan + _setup_wan_interface wan2 wan on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/wan1 ] || [ -n "$(ip link | grep ' wan1')" ]; then + if [ -d /sys/class/net/wan2 ] || [ -n "$(ip link | grep ' wan2')" ]; then + _setup_wan_interface wan1 wan1 master + _setup_wan_interface wan2 wan2 on + + _macaddr=$(uci -q get "network.wan1.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.wan2.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + + if [ -d /sys/class/net/wan3 ] || [ -n "$(ip link | grep ' wan3')" ]; then + _setup_wan_interface wan3 wan3 on + _macaddr=$(uci -q get "network.wan3.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/wan4 ] || [ -n "$(ip link | grep ' wan4')" ]; then + _setup_wan_interface wan4 wan4 on + _macaddr=$(uci -q get "network.wan4.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + else + _setup_wan_interface wan1 wan1 master macvlan + _setup_wan_interface wan2 wan1 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/eth1 ] || [ -n "$(ip link | grep ' eth1:')" ]; then + if [ -d /sys/class/net/eth2 ] || [ -n "$(ip link | grep ' eth2:')" ]; then + _setup_wan_interface wan1 eth1 master + _setup_wan_interface wan2 eth2 on + if [ -d /sys/class/net/eth3 ] || [ -n "$(ip link | grep ' eth3:')" ]; then + _setup_wan_interface wan3 eth3 on + fi + if [ -d /sys/class/net/eth4 ] || [ -n "$(ip link | grep ' eth4:')" ]; then + _setup_wan_interface wan4 eth4 on + fi + if [ -d /sys/class/net/eth5 ] || [ -n "$(ip link | grep ' eth5:')" ]; then + _setup_wan_interface wan5 eth5 on + fi + if [ -d /sys/class/net/eth6 ] || [ -n "$(ip link | grep ' eth6:')" ]; then + _setup_wan_interface wan6 eth6 on + fi + if [ -d /sys/class/net/eth7 ] || [ -n "$(ip link | grep ' eth7:')" ]; then + _setup_wan_interface wan7 eth7 on + fi + if [ -d /sys/class/net/eth8 ] || [ -n "$(ip link | grep ' eth8:')" ]; then + _setup_wan_interface wan8 eth8 on + fi + else + _setup_wan_interface wan1 eth1 master macvlan + _setup_wan_interface wan2 eth1 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/eth0.1 ] && [ -d /sys/class/net/eth0.2 ]; then + _setup_wan_interface wan1 eth0.1 master + _setup_wan_interface wan2 eth0.2 on + else + _setup_wan_interface wan1 eth0 master macvlan + _setup_wan_interface wan2 eth0 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + #uci -q batch <<-EOF + #add network route6 + #set network.@route6[-1].interface='lan' + #set network.@route6[-1].target='::/0' + #EOF +fi +uci -q commit macvlan +uci -q commit network +rm -f /tmp/luci-indexcache +exit 0 From 40de54b406194a36264c92640aa069a88368de9c Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 03:35:44 +0800 Subject: [PATCH 017/195] fixnetwork:99-omr-rename uci set openmptcprouter.settings.disableintfrename --- .../root/etc/hotplug.d/net/99-omr-rename | 1 + .../files/etc/uci-defaults/1920-omr-network | 297 ------------------ 2 files changed, 1 insertion(+), 297 deletions(-) delete mode 100755 openmptcprouter/files/etc/uci-defaults/1920-omr-network 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 f2c19dc55..fc95c7274 100755 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -6,6 +6,7 @@ [ -n "${DEVPATH}" ] || exit . /lib/functions.sh +uci set openmptcprouter.settings.disableintfrename=1 _set_intf_name() { local intfname=$1 diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network deleted file mode 100755 index 40ac946bf..000000000 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ /dev/null @@ -1,297 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -_setup_macaddr() { - uci -q get "network.$1.macaddr" >/dev/null && return - uci -q set "network.$1.macaddr=$2" -} - -_setup_macvlan() { - uci -q get "network.$1_dev.ifname" >/dev/null && return - - # do not create macvlan for vlan - local _ifname - _ifname=$(uci -q get "network.$1.ifname") - case "$_ifname" in - eth*.*) return ;; - esac - - uci -q batch <<-EOF - set network.$1_dev=device - set network.$1_dev.name=$1 - set network.$1_dev.type=macvlan - set network.$1_dev.ifname=$_ifname - set network.$1.ifname=$1 - set network.$1.type=macvlan - set network.$1.masterintf=$_ifname - set macvlan.$1=macvlan - set macvlan.$1.name=$1 - set macvlan.$1.ifname=$_ifname - EOF - _macaddr=$(uci -q get "network.$1.macaddr") - _setup_macaddr "$1_dev" "${_macaddr:-auto$(date +%s)}" -} - -_setup_macvlan_update() { - uci -q get "network.$1_dev.ifname" >/dev/null || return - - uci -q batch <<-EOF - set macvlan.$1=macvlan - set macvlan.$1.ifname=$_ifname - commit macvlan - EOF -} - -_setup_mptcp_handover_to_on() { - if [ "$(uci -q get network.$1.multipath)" = "handover" ]; then - uci -q set network.$1.multipath=on - fi - if [ "$(uci -q get openmptcprouter.$1.multipath)" = "handover" ]; then - uci -q set openmptcprouter.$1.multipath=on - fi -} - -_setup_multipath_off() { - uci -q get "network.$1.multipath" >/dev/null && return - uci -q set "network.$1.multipath=off" -} - -_setup_wan_interface() { - uci -q batch <<-EOF - set network.$1=interface - set network.$1.ifname=$2 - set network.$1.proto=static - set network.$1.ip4table=wan - set network.$1.multipath=$3 - set network.$1.defaultroute=0 - commit network - add_list firewall.@zone[1].network=$1 - commit firewall - EOF - [ -n "$4" ] && uci -q set network.$1.type=$4 -} - -config_load network -config_foreach _setup_macvlan_update interface -config_foreach _setup_mptcp_handover_to_on interface - -if [ "$(uci -q show network.lan | grep multipath)" != "" ]; then - exit 0 -fi - -lanif="eth0" -if [ "$(grep rockchip /etc/os-release)" != "" ]; then - lanif="eth1" -elif [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan ] || [ -n "$(ip link | grep ' lan')" ]; then - lanif="lan" -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d '/sys/class/net/eth1.5' ]; then - lanif="eth1.5" - uci -q batch <<-EOF - set network.@switch_vlan[0]=switch_vlan - set network.@switch_vlan[0].device='switch0' - set network.@switch_vlan[0].vlan=1 - set network.@switch_vlan[0].vid=1 - set network.@switch_vlan[0].ports='3 5t' - add network switch_vlan - set network.@switch_vlan[1].device='switch0' - set network.@switch_vlan[1].vlan=2 - set network.@switch_vlan[1].vid=2 - set network.@switch_vlan[1].ports='2 5t' - add network switch_vlan - set network.@switch_vlan[2].device='switch0' - set network.@switch_vlan[2].vlan=3 - set network.@switch_vlan[2].vid=3 - set network.@switch_vlan[2].ports='1 5t' - add network switch_vlan - set network.@switch_vlan[3].device='switch0' - set network.@switch_vlan[3].vlan=4 - set network.@switch_vlan[3].vid=4 - set network.@switch_vlan[3].ports='0 5t' - add network switch_vlan - set network.@switch_vlan[4].device='switch0' - set network.@switch_vlan[4].vlan=5 - set network.@switch_vlan[4].vid=5 - set network.@switch_vlan[4].ports='4 6t' - EOF -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d /sys/class/net/eth1 ]; then - lanif="eth1" -elif [ ! -d /sys/class/net/eth1 ] && [ -d /sys/class/net/eth0 ]; then - lanif="eth0" -fi -uci -q batch <<-EOF -delete network.lan.type -set network.lan=interface -set network.lan.proto=static -set network.lan.ipaddr=192.168.100.1 -set network.lan.netmask=255.255.255.0 -set network.lan.ifname=${lanif} -set network.lan.metric=2048 -set network.lan.ipv6=0 -set network.lan.delegate=0 -EOF - -uci -q batch <<-EOF -delete network.none -delete network.wan -delete network.if6rd -reorder network.loopback=0 -reorder network.globals=1 -reorder network.lan=2 -set network.globals.multipath=enable -EOF - -# Set the ip rule for the lan with a pref of 100 -uci -q show network.lan_rule >/dev/null || \ - uci -q batch <<-EOF - set network.lan_rule=rule - set network.lan_rule.lookup=lan - set network.lan_rule.priority=100 - EOF - -if [ "$(uci -q get network.vpn0.proto)" = "none" ]; then - uci -q delete network.vpn0 -fi - -config_load network -config_foreach _setup_multipath_off interface - -# Add the lan as a named routing table -if ! grep -s -q "lan" /etc/iproute2/rt_tables; then - echo "50 lan" >> /etc/iproute2/rt_tables -fi -uci -q set network.lan.ip4table='lan' - -#uci -q set "network.lan.ip6assign=64" - -# Create WAN interfaces -if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get network.wan1.multipath)" ]; then - if [ "$(grep rockchip /etc/os-release)" != "" ]; then - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - _setup_wan_interface wan3 eth0.3 on - _setup_wan_interface wan4 eth0.4 on - elif [ -d /sys/class/net/wan ] || [ -n "$(ip link | grep ' wan:')" ] || [ -n "$(ip link | grep ' wan@')" ]; then - if [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ]; then - _setup_wan_interface wan1 lan0 master - _setup_wan_interface wan2 lan1 on - - _macaddr=$(uci -q get "network.lan0.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan2 ] || [ -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan3 lan2 on - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan4 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/lan2 -o -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan1 lan1 master - _setup_wan_interface wan2 lan2 on - - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan3 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan4 ] || [ -n "$(ip link | grep ' lan4')" ]; then - _setup_wan_interface wan4 lan4 on - _macaddr=$(uci -q get "network.lan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan master macvlan - _setup_wan_interface wan2 wan on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/wan1 ] || [ -n "$(ip link | grep ' wan1')" ]; then - if [ -d /sys/class/net/wan2 ] || [ -n "$(ip link | grep ' wan2')" ]; then - _setup_wan_interface wan1 wan1 master - _setup_wan_interface wan2 wan2 on - - _macaddr=$(uci -q get "network.wan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.wan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - - if [ -d /sys/class/net/wan3 ] || [ -n "$(ip link | grep ' wan3')" ]; then - _setup_wan_interface wan3 wan3 on - _macaddr=$(uci -q get "network.wan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/wan4 ] || [ -n "$(ip link | grep ' wan4')" ]; then - _setup_wan_interface wan4 wan4 on - _macaddr=$(uci -q get "network.wan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan1 master macvlan - _setup_wan_interface wan2 wan1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth1 ] || [ -n "$(ip link | grep ' eth1:')" ]; then - if [ -d /sys/class/net/eth2 ] || [ -n "$(ip link | grep ' eth2:')" ]; then - _setup_wan_interface wan1 eth1 master - _setup_wan_interface wan2 eth2 on - if [ -d /sys/class/net/eth3 ] || [ -n "$(ip link | grep ' eth3:')" ]; then - _setup_wan_interface wan3 eth3 on - fi - if [ -d /sys/class/net/eth4 ] || [ -n "$(ip link | grep ' eth4:')" ]; then - _setup_wan_interface wan4 eth4 on - fi - if [ -d /sys/class/net/eth5 ] || [ -n "$(ip link | grep ' eth5:')" ]; then - _setup_wan_interface wan5 eth5 on - fi - if [ -d /sys/class/net/eth6 ] || [ -n "$(ip link | grep ' eth6:')" ]; then - _setup_wan_interface wan6 eth6 on - fi - if [ -d /sys/class/net/eth7 ] || [ -n "$(ip link | grep ' eth7:')" ]; then - _setup_wan_interface wan7 eth7 on - fi - if [ -d /sys/class/net/eth8 ] || [ -n "$(ip link | grep ' eth8:')" ]; then - _setup_wan_interface wan8 eth8 on - fi - else - _setup_wan_interface wan1 eth1 master macvlan - _setup_wan_interface wan2 eth1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth0.1 ] && [ -d /sys/class/net/eth0.2 ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - else - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - #uci -q batch <<-EOF - #add network route6 - #set network.@route6[-1].interface='lan' - #set network.@route6[-1].target='::/0' - #EOF -fi -uci -q commit macvlan -uci -q commit network -rm -f /tmp/luci-indexcache -exit 0 From 37b6ab1a74d88f55230038dcc9bec124eacf1a38 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 03:43:51 +0800 Subject: [PATCH 018/195] fix --- luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename | 1 - luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) 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 fc95c7274..f2c19dc55 100755 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -6,7 +6,6 @@ [ -n "${DEVPATH}" ] || exit . /lib/functions.sh -uci set openmptcprouter.settings.disableintfrename=1 _set_intf_name() { local intfname=$1 diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 24cbccb20..f20f9ef1e 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -1,4 +1,5 @@ #!/bin/sh +uci set openmptcprouter.settings.disableintfrename=1 uci -q batch <<-EOF delete ucitrack.@openmptcprouter[-1] add ucitrack openmptcprouter From 038fbfdd8278f82ac355c85bec665978c336e358 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 19:47:13 +0800 Subject: [PATCH 019/195] fix dns and rename --- luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter | 2 +- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index f20f9ef1e..479e15375 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -1,5 +1,5 @@ #!/bin/sh -uci set openmptcprouter.settings.disableintfrename=1 +#uci set openmptcprouter.settings.disableintfrename=1关闭默认网卡重命名 uci -q batch <<-EOF delete ucitrack.@openmptcprouter[-1] add ucitrack openmptcprouter diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 5c5ff1ef1..4029556ab 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -11,7 +11,7 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then fi if [ "$(uci -q show dhcp | grep 127.0.0.1#5353)" = "" ]; then uci -q batch <<-EOF >/dev/null - add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353" + #add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353"//让自定义DNS生效 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" From e5a275aa3c67e6f1d1db27deea8503d0592cc642 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 19:51:18 +0800 Subject: [PATCH 020/195] fix dns and rename --- luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter | 2 +- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 479e15375..5cfa577e4 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -1,5 +1,5 @@ #!/bin/sh -#uci set openmptcprouter.settings.disableintfrename=1关闭默认网卡重命名 +#uci set openmptcprouter.settings.disableintfrename=1关闭默认 uci -q batch <<-EOF delete ucitrack.@openmptcprouter[-1] add ucitrack openmptcprouter diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 4029556ab..5c5ff1ef1 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -11,7 +11,7 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then fi if [ "$(uci -q show dhcp | grep 127.0.0.1#5353)" = "" ]; then uci -q batch <<-EOF >/dev/null - #add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353"//让自定义DNS生效 + 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" From c746f6c3982a4ed0c18897d97f2ac45d14debb5d Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 19:51:49 +0800 Subject: [PATCH 021/195] Update openmptcprouter --- luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 5cfa577e4..479e15375 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -1,5 +1,5 @@ #!/bin/sh -#uci set openmptcprouter.settings.disableintfrename=1关闭默认 +#uci set openmptcprouter.settings.disableintfrename=1关闭默认网卡重命名 uci -q batch <<-EOF delete ucitrack.@openmptcprouter[-1] add ucitrack openmptcprouter From bd80052ef1708b7f80d31e94f4de9b44a85033ec Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 8 Jan 2021 20:21:02 +0800 Subject: [PATCH 022/195] Update 1940-omr-dns --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 5c5ff1ef1..dde99420d 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -44,8 +44,9 @@ if [ "$(uci -q get dhcp.lan.dhcp_options)" = "" ]; then commit dhcp EOF fi - -if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ] && [ "$(uci -q get https-dns-proxy.@https-dns-proxy[0].listen_port)" = "5053" ]; then +if [ "$(uci -q get https-dns-proxy.@https-dns-proxy[0].listen_port)" = "5053" ]; then +#if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ] && [ "$(uci -q get https-dns-proxy.@https-dns-proxy[0].listen_port)" = "5053" ]; then +#上面一行是仅在需要时通过HTTPS配置更改DNS可以修改为默认为否 # uci -q batch <<-EOF >/dev/null # delete https-dns-proxy.@https-dns-proxy[-1] # delete https-dns-proxy.@https-dns-proxy[-1] From 858605d7033726fa654c2f3b1b28e0489b1cff0c Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 31 Jan 2021 23:33:36 +0800 Subject: [PATCH 023/195] fix ip --- mptcp/files/etc/init.d/mptcp | 2 +- .../share/omr/post-tracking.d/post-tracking | 2 +- omr-tracker/files/etc/config/omr-tracker | 90 +++++++------------ 3 files changed, 32 insertions(+), 62 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 77310f5eb..e151740b3 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -188,7 +188,7 @@ interface_multipath_settings() { gateway=$(ubus call network.interface.${config}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") fi if [ -z "$gateway" ] || [ "$( valid_subnet4 $gateway )" != "ok" ]; then - gateway=$(traceroute -m1 -i $iface 8.8.8.8 2>/dev/null | awk 'FNR==2{ print $2 }') + gateway=$(traceroute -m1 -i $iface 223.5.5.5 2>/dev/null | awk 'FNR==2{ print $2 }') fi network_get_subnet netmask $config [ -n "$netmask" ] && [ "$(echo $netmask | grep '/')" != "" ] && netmask="" 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 34cecc317..c2da6556d 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -726,7 +726,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]; 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) + #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 223.5.5.5) [ -n "$mtu" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index ddd1085a4..8c8b768cc 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -7,23 +7,22 @@ config defaults 'defaults' 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 '223.6.6.6' 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' + list hosts '114.114.115.115' + list hosts '199.85.126.10' + list hosts '199.85.127.10' + list hosts '199.85.126.20' + list hosts '199.85.127.20' + list hosts '199.85.126.30' + list hosts '199.85.126.30' + list hosts '119.29.29.29' + list hosts '182.254.118.118' config proxy 'proxy' option enabled '1' @@ -32,55 +31,22 @@ config proxy 'proxy' 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' - list hosts '77.88.55.77' - list hosts '1.1.1.1' - list hosts '74.82.42.42' - list hosts '176.103.130.130' - 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 '223.6.6.6' 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' + list hosts '114.114.115.115' + list hosts '199.85.126.10' + list hosts '199.85.127.10' + list hosts '199.85.126.20' + list hosts '199.85.127.20' + list hosts '199.85.126.30' + list hosts '199.85.126.30' + list hosts '119.29.29.29' + list hosts '182.254.118.118' config server 'server' option enabled '1' @@ -97,14 +63,18 @@ config interface 'omrvpn' option wait_test '0' 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' + list hosts '114.114.114.114' + list hosts '114.114.115.115' + list hosts '199.85.126.10' + list hosts '199.85.127.10' + list hosts '199.85.126.20' + list hosts '199.85.127.20' + list hosts '199.85.126.30' + list hosts '199.85.126.30' + list hosts '119.29.29.29' + list hosts '182.254.118.118' From ad0f3faa7cfe07bc9cd70360c8696b1aa3146424 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Mon, 1 Feb 2021 02:22:23 +0800 Subject: [PATCH 024/195] fix --- omr-tracker/files/etc/config/omr-tracker | 52 +++++++----------------- 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 8c8b768cc..2ee4ea021 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -1,12 +1,5 @@ config defaults 'defaults' option enabled '1' - 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 '1.2.4.8' list hosts '114.114.114.114' list hosts '223.5.5.5' @@ -23,14 +16,16 @@ config defaults 'defaults' list hosts '199.85.126.30' list hosts '119.29.29.29' list hosts '182.254.118.118' + option timeout '10' + option tries '3' + option interval '2' + option interval_tries '1' + option type 'ping' + option wait_test '0' + option options '' config proxy 'proxy' option enabled '1' - option tries '3' - option interval_tries '1' - option interval '5' - option timeout '20' - option wait_test '2' list hosts '1.2.4.8' list hosts '114.114.114.114' list hosts '223.5.5.5' @@ -47,34 +42,15 @@ config proxy 'proxy' list hosts '199.85.126.30' list hosts '119.29.29.29' list hosts '182.254.118.118' + option timeout '10' + option tries '3' + option wait_test '0' + option interval_tries '1' + option interval '5' config server 'server' option enabled '1' option tries '3' - 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 timeout '10' option wait_test '0' - option timeout '20' - option tries '3' - list hosts '223.5.5.5' - list hosts '223.6.6.6' - list hosts '180.76.76.76' - list hosts '1.2.4.8' - list hosts '210.2.4.8' - list hosts '114.114.114.114' - list hosts '114.114.115.115' - list hosts '199.85.126.10' - list hosts '199.85.127.10' - list hosts '199.85.126.20' - list hosts '199.85.127.20' - list hosts '199.85.126.30' - list hosts '199.85.126.30' - list hosts '119.29.29.29' - list hosts '182.254.118.118' + option interval '5' \ No newline at end of file From 9a7fbb2297d6fe1d6a69640f939f7a49e6471d8d Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Mon, 1 Feb 2021 22:58:46 +0800 Subject: [PATCH 025/195] Update 1940-omr-dns --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index dde99420d..40f049a39 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -13,11 +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#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" + #add_list dhcp.@dnsmasq[-1].server="223.6.6.6" + #add_list dhcp.@dnsmasq[-1].server="180.76.76.76" commit dhcp EOF fi From 8db989a903f8f28588a11714a8ee352cfdf7ff28 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 14 Feb 2021 20:41:11 +0100 Subject: [PATCH 026/195] Fix use shadowsocks UDP when VPN down --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 +++--- 1 file changed, 3 insertions(+), 3 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 27031e506..b00a88e6c 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -646,9 +646,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then config_foreach set_route interface $OMR_TRACKER_INTERFACE config_foreach set_route6 interface $OMR_TRACKER_INTERFACE fi - 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 + 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.hi1.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' + uci -q set shadowsocks-libev.ss_rules.redir_udp='hi1' if /etc/init.d/shadowsocks-libev rules_exist ; then /etc/init.d/shadowsocks-libev rules_down /etc/init.d/shadowsocks-libev rules_up @@ -699,7 +699,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 fi - if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi2" ]; then + if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi1" ]; then _log "Tunnel up disable use of ShadowSocks for UDP" uci -q delete shadowsocks-libev.ss_rules.redir_udp if /etc/init.d/shadowsocks-libev rules_exist ; then From 3112e3c28d41c9449737f576683a191bfd1103b7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sun, 14 Feb 2021 20:41:50 +0100 Subject: [PATCH 027/195] Same configuration for shadowsocks sss0 and sss1 --- .../luasrc/controller/openmptcprouter.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index f9e130e76..9369e8514 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -635,11 +635,13 @@ function wizard_add() local encryption = luci.http.formvalue("encryption") if encryption == "none" then ucic:set("shadowsocks-libev","sss0","method","none") + ucic:set("shadowsocks-libev","sss1","method","none") ucic:set("openvpn","omr","cipher","none") ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") elseif encryption == "aes-256-gcm" then ucic:set("shadowsocks-libev","sss0","method","aes-256-gcm") + ucic:set("shadowsocks-libev","sss1","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") @@ -647,6 +649,7 @@ function wizard_add() 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("shadowsocks-libev","sss1","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") @@ -654,6 +657,7 @@ function wizard_add() 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("shadowsocks-libev","sss1","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") @@ -674,6 +678,7 @@ function wizard_add() --end if shadowsocks_key ~= "" then ucic:set("shadowsocks-libev","sss0","key",shadowsocks_key) + ucic:set("shadowsocks-libev","sss1","key",shadowsocks_key) --ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305") --ucic:set("shadowsocks-libev","sss0","server_port","65101") --ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable) @@ -685,8 +690,10 @@ function wizard_add() else if serversnb == 0 then ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable) + ucic:set("shadowsocks-libev","sss1","disabled",shadowsocks_disable) end ucic:set("shadowsocks-libev","sss0","key","") + ucic:set("shadowsocks-libev","sss1","key","") ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") luci.sys.call("/etc/init.d/shadowsocks rules_down >/dev/null 2>/dev/null") @@ -965,7 +972,7 @@ function settings_add() local disableserverping = luci.http.formvalue("disableserverping") or "0" ucic:set("openmptcprouter","settings","disableserverping",disableserverping) - -- Enable/disable shadowsocks upd + -- Enable/disable shadowsocks udp local shadowsocksudp = luci.http.formvalue("shadowsocksudp") or "0" ucic:set("openmptcprouter","settings","shadowsocksudp",shadowsocksudp) From 9152cfc85f6402df8c9bffd7aae6c2247b66ac38 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 15:35:04 +0100 Subject: [PATCH 028/195] Add IPv6 checkbox for interface in wizard and fix modemmanager support --- .../luasrc/controller/openmptcprouter.lua | 10 ++++++++- .../luasrc/view/openmptcprouter/wizard.htm | 21 +++++++++++++------ .../root/etc/init.d/openmptcprouter | 8 +++---- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 9369e8514..3e81c8e59 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -240,6 +240,7 @@ function wizard_add() local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or "" local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or "" local ip6gw = luci.http.formvalue("cbid.network.%s.ip6gw" % intf) or "" + local ipv6 = luci.http.formvalue("cbid.network.%s.ipv6" % intf) or "0" local apn = luci.http.formvalue("cbid.network.%s.apn" % intf) or "" local pincode = luci.http.formvalue("cbid.network.%s.pincode" % intf) or "" local delay = luci.http.formvalue("cbid.network.%s.delay" % intf) or "" @@ -282,6 +283,7 @@ function wizard_add() ucic:set("network",intf,"auth",auth) ucic:set("network",intf,"mode",mode) ucic:set("network",intf,"label",label) + ucic:set("network",intf,"ipv6",ipv6) if lan == "1" then ucic:set("network",intf,"multipath","off") else @@ -1077,7 +1079,13 @@ end function get_device(interface) local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) if dump ~= nil then - return dump['l3_device'] + if dump['l3_device'] ~= nil then + return dump['l3_device'] + elseif dump['device'] ~= nil then + return dump['device'] + else + return "" + end else return "" end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 0e7e838a6..363b30852 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -561,12 +561,14 @@ <% iffind=0 uciifname=uci:get("network",ifname,"ifname") - if uciifname:match("/") then - realifname=uciifname - vlan="" - else - realifname=splitstring(uciifname,'.')[1] or "" - vlan=splitstring(uciifname,'.')[2] or "" + if uciifname ~= nil then + if uciifname:match("/") then + realifname=uciifname + vlan="" + else + realifname=splitstring(uciifname,'.')[1] or "" + vlan=splitstring(uciifname,'.')[2] or "" + end end for _, ifacea in ipairs(ifaces) do if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then @@ -671,6 +673,13 @@ <% end %> +
+ +
+ checked<% end %> /> +
+
+
diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index 73655b167..fe110bdfd 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -60,25 +60,25 @@ omr_set_settings() { config_get device "$1" device config_get proto "$1" proto config_get type "$1" type + config_get ipv6 "$1" ipv6 config_get addlatency "$1" addlatency [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return uci -q set openmptcprouter.$1=interface uci -q set openmptcprouter.$1.multipath="$multipath" config_get disable_ipv6 settings disable_ipv6 "0" - if [ "$proto" != "dhcpv6" ] && ([ "$disable_ipv6" = "1" ] || [ "$1" != "omr6in4" ]); then + if [ "$disable_ipv6" = "1" ]; then uci -q set network.$1.ipv6=0 - else - uci -q set network.$1.ipv6=1 fi [ -z "$addlatency" ] && addlatency=0 devicename=$(echo "$device" | cut -d'/' -f3) [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') if [ -n "$ifname" ]; then - if [ "$proto" = "dhcpv6" ]; then + if [ "$proto" = "dhcpv6" ] || [ "$ipv6" = "1" ]; then # Change interface name for sysctl in case of VLAN (eth0.2 => eth0/2) ifnamesys=$(echo $ifname | sed 's:\.:/:') sysctl -qw net.ipv6.conf.${ifnamesys}.disable_ipv6=0 From 8f967e09f83786e0a5e51f9216eba3440363c709 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 15:36:31 +0100 Subject: [PATCH 029/195] Add log info when IP doesn't exist --- omr-tracker/files/bin/omr-tracker | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 84a159e84..1ca117a82 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -412,6 +412,13 @@ while true; do sleep "$OMR_TRACKER_INTERVAL_TRIES" done fi + if [ -z "$OMR_TRACKER_DEVICE_IP" ] || [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ -z "$OMR_TRACKER_DEVICE_IP6" ] || [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + [ -z "$OMR_TRACKER_STATUS_MSG" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_INTERFACE have ip issues" + [ -z "$OMR_TRACKER_DEVICE_IP" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv4" + [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv4 gateway" + [ -z "$OMR_TRACKER_DEVICE_IP6" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv6" + [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv6 gateway" + fi else OMR_TRACKER_STATUS_MSG="link down" fi From d42ef7fd4b3b211afc718b808ce7e8aa18fb45fe Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 19:52:06 +0100 Subject: [PATCH 030/195] Add IPv6 in omr-tracker config --- .../luasrc/model/cbi/omr-tracker.lua | 5 +++++ omr-tracker/files/etc/config/omr-tracker | 6 ++++++ omr-tracker/files/etc/uci-defaults/omr-tracker | 12 ++++++++++++ 3 files changed, 23 insertions(+) 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 f00afe5fd..3484b1afa 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -132,6 +132,11 @@ o.placeholder = "4.2.2.1" o.default = { "4.2.2.1", "8.8.8.8" } o.rmempty = false +o = s:option(DynamicList, "hosts6", translate("Hosts IPv6"),translate("Must be IPs and not domains")) +o.placeholder = "2001:4860:4860::8844" +o.default = { "2001:4860:4860::8888", "2001:4860:4860::8844" } +o.rmempty = false + s = m:section(TypedSection, "interface", translate("Interfaces")) s.template_addremove = "omr-tracker/cbi-select-add" s.addremove = true diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index bf64d41d1..6f9d1c258 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -11,6 +11,12 @@ config defaults 'defaults' list hosts '80.67.169.40' list hosts '114.114.114.114' list hosts '1.1.1.1' + list hosts6 '2606:4700:4700::1111' + list hosts6 '2606:4700:4700::1001' + list hosts6 '2620:fe::fe' + list hosts6 '2620:fe::9' + list hosts6 '2001:4860:4860::8888' + list hosts6 '2001:4860:4860::8844' option timeout '2' option tries '3' option interval '2' diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index 30aec42b9..cf2ca0dab 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -60,6 +60,18 @@ if [ "$(uci -q get omr-tracker.proxy.hosts | grep '103.224.182.242')" != "" ]; t EOF fi +if [ -z "$(uci -q get omr-tracker.defaults.hosts6)" ]; then + uci -q batch <<-EOF >/dev/null + add_list omr-tracker.defaults.hosts6='2606:4700:4700::1111' + add_list omr-tracker.defaults.hosts6='2606:4700:4700::1001' + add_list omr-tracker.defaults.hosts6='2620:fe::fe' + add_list omr-tracker.defaults.hosts6='2620:fe::9' + add_list omr-tracker.defaults.hosts6='2001:4860:4860::8888' + add_list omr-tracker.defaults.hosts6='2001:4860:4860::8844' + 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 From 35f7ce04decf4e906a7a1df0fbfd496324c70d29 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 19:53:28 +0100 Subject: [PATCH 031/195] Disable IPv6 checkbox in wizard --- .../luasrc/view/openmptcprouter/wizard.htm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 363b30852..a0b5851e1 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -673,13 +673,14 @@ <% end %> +
From 56e032152dd09369768b3c44fac50c4e8d8aa4f7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 19:55:07 +0100 Subject: [PATCH 032/195] Support alias interfaces --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 1 + mlvpn/files/etc/init.d/mlvpn | 2 ++ mptcp/files/etc/init.d/mptcp | 3 +++ .../files/usr/share/omr/post-tracking.d/post-tracking | 10 ++++++++++ omr-quota/files/etc/init.d/omr-quota | 1 + omr-tracker/files/etc/init.d/omr-tracker | 1 + openmptcprouter/files/etc/firewall.gre-tunnel | 1 + 7 files changed, 19 insertions(+) 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 a859b345e..d1e2d9592 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -465,6 +465,7 @@ _intf_rule() { local intf config_get intf $1 ifname [ -z "$intf" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $intf | grep '@')" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') #count=$((count+1)) config_get count $1 metric local mode diff --git a/mlvpn/files/etc/init.d/mlvpn b/mlvpn/files/etc/init.d/mlvpn index 761694f6c..3021f143e 100755 --- a/mlvpn/files/etc/init.d/mlvpn +++ b/mlvpn/files/etc/init.d/mlvpn @@ -15,8 +15,10 @@ interface_multipath_settings() { [ "$mode" = "off" ] || [ "$mode" = "" ] && return 1 config_get ifname "$config" ifname [ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') [ -z "$ifname" ] && return 1 addr=$(ifstatus ${config} | jsonfilter -q -e '@["ipv4-address"][0].address') + [ -z "$addr" ] && return 1 count=$(($count+1)) port=$((firstport+count)) cat >> /tmp/etc/${interface_name}.conf <<-EOF diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 77310f5eb..a405f4bd0 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -84,6 +84,7 @@ interface_multipath_settings() { config_get iface "$config" ifname config_get txqueuelen "$config" txqueuelen [ -z "$iface" ] && iface=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $iface | grep '@')" ] && iface=$(ifstatus "$config" | jsonfilter -q -e '@["device"]') if [ "$(uci -q get openmptcprouter.${config}.metric)" = "" ]; then count=$((count+1)) metric=$count @@ -382,6 +383,7 @@ add_route() { [ -n "$table" ] && routeset="table $table" config_get interface "$1" interface iface=$(ifstatus "$interface" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $iface | grep '@')" ] && iface=$(ifstatus "$interface" | jsonfilter -q -e '@["device"]') routeset="$routeset dev $iface" logger -t "MPTCP" "Add route $routeset" ip route replace $routeset @@ -402,6 +404,7 @@ add_route6() { [ -n "$table" ] && routeset="table $table" config_get interface "$1" interface iface=$(ifstatus "$interface" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $iface | grep '@')" ] && iface=$(ifstatus "$interface" | jsonfilter -q -e '@["device"]') routeset="$routeset dev $iface" logger -t "MPTCP" "Add IPv6 route $routeset" ip -6 route replace $routeset 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 b00a88e6c..aaa044cae 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -13,6 +13,7 @@ set_route() { interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "${INTERFACE}" | jsonfilter -q -e '@["device"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" @@ -46,6 +47,7 @@ set_route6() { interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" @@ -149,6 +151,7 @@ set_routes_intf() { interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && ifname=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep 'deactivated') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") @@ -198,6 +201,7 @@ set_routes_intf6() { interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep 'deactivated') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") @@ -247,6 +251,7 @@ set_route_balancing() { interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then @@ -290,6 +295,7 @@ set_route_balancing6() { interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then @@ -335,6 +341,7 @@ set_server_all_routes() { interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') @@ -376,6 +383,7 @@ set_server_all_routes6() { interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') @@ -424,6 +432,7 @@ set_server_route() { interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep "deactivated") interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") @@ -455,6 +464,7 @@ set_server_route6() { interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep "deactivated") interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") diff --git a/omr-quota/files/etc/init.d/omr-quota b/omr-quota/files/etc/init.d/omr-quota index 4ed95c735..37700ff50 100755 --- a/omr-quota/files/etc/init.d/omr-quota +++ b/omr-quota/files/etc/init.d/omr-quota @@ -19,6 +19,7 @@ _launch_quota() { local txquota rxquota ttquota interval enabled interface _validate_section "interface" "$1" interface=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + [ -n "$(echo $interface | grep '@')" ] && interface=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') [ -z "$interface" ] && return diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 467817e91..67e72a3bc 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -54,6 +54,7 @@ _launch_tracker() { ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') [ -z "$ifname" ] && ifname=$(ifstatus "$1_4" | jsonfilter -q -e '@["l3_device"]') [ -z "$ifname" ] && config_get ifname "$1" ifname + [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') config_get multipath "$1" multipath config_get ifenabled "$1" auto diff --git a/openmptcprouter/files/etc/firewall.gre-tunnel b/openmptcprouter/files/etc/firewall.gre-tunnel index 41b00e664..4d8d450e1 100644 --- a/openmptcprouter/files/etc/firewall.gre-tunnel +++ b/openmptcprouter/files/etc/firewall.gre-tunnel @@ -12,6 +12,7 @@ _setup_routes() { config_get lookup $1 lookup config_get gateway $1 gateway intf=$(ifstatus $1 | jsonfilter -e '@.l3_device' | tr -d "\n") + [ -n "$intf" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["device"]' | tr -d "\n") if [ -n "$lookup" ] && [ -n "$intf" ] && [ -n "$gateway" ]; then ip route replace default via $gateway dev $intf table $lookup fi From f60ac82be9ab3327c2c4a067d3709f76967ade82 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 19:55:27 +0100 Subject: [PATCH 033/195] Fix IPv6 gateway detection --- omr-tracker/files/bin/omr-tracker | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 1ca117a82..b046c6500 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -241,6 +241,12 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}\"].nexthop" | tr -d "\n") fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/64\"].nexthop" | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/56\"].nexthop" | tr -d "\n") + fi if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") fi From e7a77db59ebd13cea082aa9aed7fcf6f9fcc8ad2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Feb 2021 19:55:54 +0100 Subject: [PATCH 034/195] Set first boot is over after settings are set --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index e299b4a90..265446b56 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1675,7 +1675,6 @@ _config_service() { uci -q commit shadowsocks-libev fi } - [ -n "$vps_config" ] && uci -q set openmptcprouter.settings.firstboot=0 fi if [ "$user_permission" != "ro" ]; then #config_load shadowsocks-libev @@ -1711,6 +1710,8 @@ _config_service() { [ "$error" = 0 ] && { #logger -t "OMR-VPS" "No errors" uci -q set openmptcprouter.${servername}.lastchange=$(date "+%s") + [ -n "$vps_config" ] && uci -q set openmptcprouter.settings.firstboot=0 + } #[ "$error" != 0 ] && logger -t "OMR-VPS" "Error !" uci -q batch <<-EOF >/dev/null From 3676a6fde68b4cbe8b2c641896f8b7d271a208af Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 16 Feb 2021 10:46:45 +0100 Subject: [PATCH 035/195] Fix obfuscation choice --- .../luasrc/view/openmptcprouter/settings.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 7ae4100b4..e9d4f52a8 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -97,7 +97,7 @@ end if obfs_installed then %> - + <% end %> From 5b9f6a8ed0e500612340483bb5198e67ffe0f65b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:31:40 +0100 Subject: [PATCH 036/195] No create _4 interface when DHCPv6 set in wizard --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 3e81c8e59..b71efc888 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -313,6 +313,8 @@ function wizard_add() ucic:set("network",intf,"reqaddress","try") ucic:set("network",intf,"reqprefix","no") ucic:set("network",intf,"iface_map","0") + ucic:set("network",intf,"iface_dslite","0") + ucic:set("network",intf,"iface_464xlate","0") ucic:set("network",intf,"ipv6","1") end From 18f2034668937760994a3b792290c17ac9ee1d80 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:32:24 +0100 Subject: [PATCH 037/195] Display whois of IPv6 address in status page if not same as IPv4 whois --- .../luasrc/view/openmptcprouter/wanstatus.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 83f601bbf..794dccb31 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -498,7 +498,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { content += String.format('%s %s
','<%:whois:%>', whois); } - if(whois6 !== '') + if(whois6 !== '' && whois6 != whois) { content += String.format('%s %s
','<%:whois:%>', whois6); } From c97370d4108ee0e086fc3a6ec7c9667e97eb8ffe Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:32:45 +0100 Subject: [PATCH 038/195] Fix QMI info --- luci-app-openmptcprouter/root/bin/omr-qmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/root/bin/omr-qmi b/luci-app-openmptcprouter/root/bin/omr-qmi index 1a73d4f37..8721ffb12 100755 --- a/luci-app-openmptcprouter/root/bin/omr-qmi +++ b/luci-app-openmptcprouter/root/bin/omr-qmi @@ -24,6 +24,6 @@ elif [ "$TYPE" = "lte" ]; then fi [ -z "$INFO" ] && echo $PERCENT && return OPERATOR=$(timeout 1 uqmi -d $MODEM_INTF --get-serving-system | jsonfilter -e '@.plmn_description' | tr -d '\n') -NUMBER=$(timeout 1 uqmi -d $MODEM_INTF --msisdn | jsonfilter -e '@' | tr -d '\n') +NUMBER=$(timeout 1 uqmi -d $MODEM_INTF --get-msisdn | jsonfilter -e '@' | tr -d '\n') STATE=$(timeout 1 uqmi -d $MODEM_INTF --get-data-status | jsonfilter -e '@' | tr -d '\n') [ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$TATE;$TYPE" \ No newline at end of file From c80f9a017a2b0720f81dc46d78425f997fb19d35 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:33:07 +0100 Subject: [PATCH 039/195] Get public ip only when needed --- .../root/usr/libexec/rpcd/openmptcprouter | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index bc36f9649..b86f4d287 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -1373,20 +1373,20 @@ function interfaces_status() if connectivity ~= "ERROR" then if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then publicIP = uci:get("openmptcprouter",interface:sub(5),"publicip") or "" - if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + if ifname ~= nil and ipaddr ~= "" and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5)))) end publicIP6 = uci:get("openmptcprouter",interface:sub(5),"publicip6") or "" - if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + if ifname ~= nil and ip6addr ~= "" and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(5)))) end else publicIP = uci:get("openmptcprouter",interface,"publicip") or "" - if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + if ifname ~= nil and ipaddr ~= "" and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) end publicIP6 = uci:get("openmptcprouter",interface,"publicip6") or "" - if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + if ifname ~= nil and ip6addr ~= "" and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. ifname)) end end From 01d9b7efc1d0a8c50075e2bbadb220c288ac244c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:33:46 +0100 Subject: [PATCH 040/195] Get public ip only if IPv4/IPv6 set on interface --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 aaa044cae..e00d99fee 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -970,9 +970,11 @@ fi # Save wan settings for status page if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..." + local ipaddr="" + local ip6addr="" if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then - local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)" - local ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)" + [ -n "$OMR_TRACKER_DEVICE_IP" ] && ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)" + [ -n "$OMR_TRACKER_DEVICE_IP6" ] && ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)" else uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state="up" From b178e7f4603050048d11261835a1d5229926f191 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 14:34:27 +0100 Subject: [PATCH 041/195] Get IPv4 in tracker if DHCPv6 not set --- omr-tracker/files/bin/omr-tracker | 116 ++++++++++++++++-------------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index b046c6500..e42a26cab 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -175,6 +175,7 @@ _none() { _restart +OMR_TRACKER_INTERFACE_PROTO="$(uci -q get network.${OMR_TRACKER_INTERFACE_PROTO}.proto)" OMR_TRACKER_PREV_STATUS="" # main loop while true; do @@ -193,63 +194,68 @@ while true; do if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then if [ -n "$(ip link show $OMR_TRACKER_DEVICE | grep UP)" ]; then # retrieve iface ip and gateway - OMR_TRACKER_DEVICE_IP=$(ip -4 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') - if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then - OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) - fi - #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') - #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then - OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) - #fi - #OMR_TRACKER_DEVICE_IP=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") - #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 - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.${OMR_TRACKER_INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - fi - 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="" + if [ "$OMR_TRACKER_INTERFACE_PROTO" != "dhcpv6" ]; then + OMR_TRACKER_DEVICE_IP=$(ip -4 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') + if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then + OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) + fi + #OMR_TRACKER_DEVICE_IP=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") + #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 + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY" = "0.0.0.0" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.${OMR_TRACKER_INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") + fi + 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 + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + OMR_TRACKER_DEVICE_ROUTE=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep via | grep -v default | grep -v metric | grep -v / | awk '{print $1; exit}' | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n") fi fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - OMR_TRACKER_DEVICE_ROUTE=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep via | grep -v default | grep -v metric | grep -v / | awk '{print $1; exit}' | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then - OMR_TRACKER_DEVICE_GATEWAY6=$(uci -q get "network.$OMR_TRACKER_INTERFACE.ip6gw") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then - OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}\"].nexthop" | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then - OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/64\"].nexthop" | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then - OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/56\"].nexthop" | tr -d "\n") - fi - if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then - OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") - fi + #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') + #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then + OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) + #fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(uci -q get "network.$OMR_TRACKER_INTERFACE.ip6gw") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}\"].nexthop" | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/64\"].nexthop" | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}/56\"].nexthop" | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") + fi # execute specific tracker if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then From 52841c34c6aa842d6b47a234f5b69eaae83c691b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 17 Feb 2021 17:47:49 +0100 Subject: [PATCH 042/195] Add mc because upstream doesn't compile --- mc/Config.in | 59 ++++++++ mc/Makefile | 128 ++++++++++++++++++ mc/patches/010-subshell.patch | 11 ++ ...20-fix-mouse-handling-newer-terminfo.patch | 11 ++ mc/patches/030-fix-gettext-full-0.21.patch | 13 ++ 5 files changed, 222 insertions(+) create mode 100644 mc/Config.in create mode 100644 mc/Makefile create mode 100644 mc/patches/010-subshell.patch create mode 100644 mc/patches/020-fix-mouse-handling-newer-terminfo.patch create mode 100644 mc/patches/030-fix-gettext-full-0.21.patch diff --git a/mc/Config.in b/mc/Config.in new file mode 100644 index 000000000..fcd8fad33 --- /dev/null +++ b/mc/Config.in @@ -0,0 +1,59 @@ +menu "Configuration" + depends on PACKAGE_mc + +config MC_DIFFVIEWER + bool "Enable internal diff viewer" + default n + help + This option enables the built-in diff viewer. + Disabled by default. + +config MC_EDITOR + bool "Enable internal editor" + default y + help + This option enables the built-in file editor. + Enabled by default. + +config MC_SUBSHELL + bool "Enable concurrent subshell" + default y + help + This option enables concurrent subshell support. + Enabled by default. + +config MC_LARGEFILE + bool "Enable largefile support" + default n + help + This option enables support for large files (> 2 GB). + Disabled by default. + +config MC_BACKGROUND + bool "Enable background operations" + default n + help + This option enables support for background operations which + allow to perform some tasks such as copying files in a + separate background process. Background code is known + to be less stable than the rest of the code. + Disabled by default. + +config MC_CHARSET + bool "Enable charset support" + default y + help + This option adds support for selecting character set of the text in + the internal viewer and editor and converting it on the fly. + Enabled by default. + +config MC_VFS + bool "Enable virtual filesystem support" + default y + help + This option enables the Virtual File System switch code to get + transparent access to the following file systems: + cpio, tar, fish, sfs, ftp, sftp, extfs. + Enabled by default. + +endmenu diff --git a/mc/Makefile b/mc/Makefile new file mode 100644 index 000000000..30814afb0 --- /dev/null +++ b/mc/Makefile @@ -0,0 +1,128 @@ +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=mc +PKG_VERSION:=4.8.25 +PKG_RELEASE:=2 +PKG_MAINTAINER:=Dirk Brenken +PKG_LICENSE:=GPL-3.0-or-later +PKG_CPE_ID:=cpe:/a:midnight_commander:midnight_commander + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=http://ftp.midnight-commander.org/ +PKG_HASH:=ffc19617f20ebb23330acd3998b7fd559a042d172fa55746d53d246697b2548a +PKG_BUILD_PARALLEL:=1 +PKG_FIXUP:=autoreconf gettext-version +PKG_BUILD_DEPENDS:=MC_VFS:libtirpc + +PKG_CONFIG_DEPENDS := \ + CONFIG_PACKAGE_MC \ + CONFIG_MC_DIFFVIEWER \ + CONFIG_MC_EDITOR \ + CONFIG_MC_SUBSHELL \ + CONFIG_MC_LARGEFILE \ + CONFIG_MC_BACKGROUND \ + CONFIG_MC_CHARSET \ + CONFIG_MC_VFS + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/nls.mk + +define Package/mc + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(ICONV_DEPENDS) + TITLE:=Midnight Commander - a powerful visual file manager + URL:=https://www.midnight-commander.org/ + MENU:=1 +endef + +define Package/mc/config + source "$(SOURCE)/Config.in" +endef + +define Package/mc/description +GNU Midnight Commander is a visual file manager. +It's a feature rich full-screen text mode application that allows you to copy, +move and delete files and whole directory trees, search for files and run commands in the subshell. +Internal viewer and editor are included as well. + +endef + +CONFIGURE_ARGS += \ + --enable-silent-rules \ + --disable-tests \ + --disable-doxygen-doc \ + --with-homedir=/etc/mc \ + --with-screen=ncurses \ + --without-x \ + +CONFIGURE_VARS += \ + ac_cv_search_addwstr=no \ + +ifeq ($(CONFIG_MC_DIFFVIEWER),) +CONFIGURE_ARGS += --without-diff-viewer +endif + +ifeq ($(CONFIG_MC_EDITOR),) +CONFIGURE_ARGS += --without-internal-edit +endif + +ifeq ($(CONFIG_MC_SUBSHELL),) +CONFIGURE_ARGS += --without-subshell +endif + +ifeq ($(CONFIG_MC_LARGEFILE),) +CONFIGURE_ARGS += --disable-largefile +endif + +ifeq ($(CONFIG_MC_BACKGROUND),) +CONFIGURE_ARGS += --disable-background +endif + +ifeq ($(CONFIG_MC_CHARSET),) +CONFIGURE_ARGS += --disable-charset +endif + +ifeq ($(CONFIG_MC_VFS),) +CONFIGURE_ARGS += --disable-vfs +else +TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/tirpc +endif + +define Package/mc/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mc $(1)/usr/bin + $(INSTALL_DIR) $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.charsets $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.ext $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.default.keymap $(1)/etc/mc/mc.keymap + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/filehighlight.ini $(1)/etc/mc + $(INSTALL_DIR) $(1)/usr/share/mc/help + $(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/hlp/mc.hlp $(1)/usr/share/mc/help + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.menu $(1)/etc/mc + $(INSTALL_DIR) $(1)/etc/mc/skins + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/skins/default.ini $(1)/etc/mc/skins + $(INSTALL_DIR) $(1)/etc/mc/mcedit/Syntax +ifeq ($(CONFIG_MC_DIFFVIEWER),y) + ln -sf mc $(1)/usr/bin/mcdiff +endif +ifeq ($(CONFIG_MC_EDITOR),y) + ln -sf mc $(1)/usr/bin/mcedit +endif +ifeq ($(CONFIG_MC_VFS),y) + $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/vfs/sfs/sfs.ini $(1)/etc/mc + $(INSTALL_DIR) $(1)/usr/lib/mc/extfs.d +endif +endef + +define Package/mc/conffiles +/etc/mc/mc.menu +/etc/mc/skins/default.ini +endef + +$(eval $(call BuildPackage,mc)) diff --git a/mc/patches/010-subshell.patch b/mc/patches/010-subshell.patch new file mode 100644 index 000000000..73d8ca949 --- /dev/null +++ b/mc/patches/010-subshell.patch @@ -0,0 +1,11 @@ +-- a/src/subshell/common.c ++++ b/src/subshell/common.c +@@ -836,7 +836,7 @@ init_subshell_precmd (char *precmd, size + "else " + "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; " + "fi; " +- "echo \"$USER@$(hostname -s):$MC_PWD\"; " ++ "echo \"$USER@$HOSTNAME:$MC_PWD\"; " + "pwd>&%d; " + "kill -STOP $$; " + "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]); diff --git a/mc/patches/020-fix-mouse-handling-newer-terminfo.patch b/mc/patches/020-fix-mouse-handling-newer-terminfo.patch new file mode 100644 index 000000000..82543379e --- /dev/null +++ b/mc/patches/020-fix-mouse-handling-newer-terminfo.patch @@ -0,0 +1,11 @@ +--- a/lib/tty/tty.c ++++ b/lib/tty/tty.c +@@ -370,7 +370,7 @@ tty_init_xterm_support (gboolean is_xter + if (xmouse_seq != NULL) + { + if (strcmp (xmouse_seq, ESC_STR "[<") == 0) +- xmouse_seq = ESC_STR "[M"; ++ xmouse_seq = NULL; + + xmouse_extended_seq = ESC_STR "[<"; + } diff --git a/mc/patches/030-fix-gettext-full-0.21.patch b/mc/patches/030-fix-gettext-full-0.21.patch new file mode 100644 index 000000000..af44dcf66 --- /dev/null +++ b/mc/patches/030-fix-gettext-full-0.21.patch @@ -0,0 +1,13 @@ +--- a/po/Makefile.in.in 2020-07-13 04:16:44.000000000 +0800 ++++ b/po/Makefile.in.in 2021-02-17 18:04:44.881887192 +0800 +@@ -8,8 +8,8 @@ + # Please note that the actual code of GNU gettext is covered by the GNU + # General Public License and is *not* in the public domain. + # +-# Origin: gettext-0.18 +-GETTEXT_MACRO_VERSION = 0.18 ++# Origin: gettext-0.20 ++GETTEXT_MACRO_VERSION = 0.20 + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ \ No newline at end of file From 1172142b85be73cfa2e335800ba650e64bbcde05 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Feb 2021 14:35:40 +0100 Subject: [PATCH 043/195] Force metric for 6in4 --- omr-6in4/files/bin/omr-6in4 | 3 ++- omr-6in4/files/etc/init.d/omr-6in4 | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 index c7eba5bfa..8bf094a50 100755 --- a/omr-6in4/files/bin/omr-6in4 +++ b/omr-6in4/files/bin/omr-6in4 @@ -31,6 +31,7 @@ while true; do uci -q batch <<-EOF set network.omr6in4.ipaddr=$addr set network.omr6in4.peeraddr=$peer + set network.omr6in4.metric=1 commit network EOF if [ -n "$(ip tunnel | grep omr6in4)" ]; then @@ -49,7 +50,7 @@ while true; do #[ -z "$ipv6_gw" ] && ipv6_gw='fe80::aff:ff01' ip -6 route add ${ipv6_gw} dev 6in4-omr6in4 > /dev/null 2>&1 ip -6 route 2002::/16 dev 6in4-omr6in4 > /dev/null 2>&1 - ip -6 route replace default via ${ipv6_gw} dev 6in4-omr6in4 > /dev/null 2>&1 + ip -6 route replace default via ${ipv6_gw} dev 6in4-omr6in4 metric 1 > /dev/null 2>&1 if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then uci -q batch <<-EOF set network.omr6in4_route6_default=route6 diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 9d22cabb2..e9ef23296 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -64,6 +64,7 @@ set_ipv6_state() { set network.lan.ipv6="1" set network.lan.delegate="0" set network.omr6in4.force_link=1 + set network.omr6in4.metric=1 delete network.omr6in4.auto EOF if [ "$(network.lan.ip6assign)" = "" ]; then From fff416b868c3a0bfeb67f8295acd40870649bf76 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 11:37:00 +0100 Subject: [PATCH 044/195] Fix Hosts6 ofr omr-tracker --- omr-tracker/files/etc/init.d/omr-tracker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 67e72a3bc..574f14bec 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -19,7 +19,7 @@ _validate_section() { uci_validate_section omr-tracker "$1" "$2" \ 'hosts:list(host)' \ - 'hosts6:list(host6)' \ + 'hosts6:list(host)' \ 'timeout:uinteger' \ 'tries:uinteger' \ 'interval:uinteger' \ From b974317b37a150ea0a3738bfd4d913fc36291006 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 11:38:03 +0100 Subject: [PATCH 045/195] Use httping to ping server if option defined in omr-tracker --- omr-tracker/files/bin/omr-tracker | 96 ++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 21 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index e42a26cab..028d17cb7 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -87,16 +87,45 @@ _post_tracking() { } _ping_server() { - local serverip=$(uci -q get openmptcprouter.$1.ip) + local servername=$1 + local disabled=$(uci -q get openmptcprouter.$1.disabled) local device=$2 - if [ -n "$serverip" ] && [ -n "$device" ]; then - _ping $serverip $device "yes" - statusp=$? - if $(exit $statusp); then - serverip_ping=true - fi - else - serverip_ping=false + if [ -n "$device" ] && [ "$disabled" != "1" ]; then + check_ping() { + serverip=$1 + if [ -n "$serverip" ]; then + _ping $serverip $device "yes" + statusp=$? + if $(exit $statusp); then + serverip_ping=true + break + fi + fi + } + config_load openmptcprouter + config_list_foreach ${servername} ip check_ping + fi +} + +_httping_server() { + local servername=$1 + local disabled=$(uci -q get openmptcprouter.$1.disabled) + local port=$(uci -q get openmptcprouter.$1.port) + local device=$2 + if [ -n "$device" ] && [ "$disabled" != "1" ]; then + check_ping() { + serverip=$1 + if [ -n "$serverip" ]; then + _httping "${serverip}:${port}" $device "yes" true + statusp=$? + if $(exit $statusp); then + serverip_ping=true + break + fi + fi + } + config_load openmptcprouter + config_list_foreach ${servername} ip check_ping fi } @@ -138,18 +167,34 @@ _httping() { local host=$1 local deviceip=$2 local localip=$3 - ret=$(httping "${host}" \ - -y "${deviceip}" \ - -t "$OMR_TRACKER_TIMEOUT" \ - -c 1 \ - -q - ) && echo "$ret" | grep -sq "1 ok" && { - if [ "$localip" = "yes" ]; then - OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1) - _update_rto "$OMR_TRACKER_LATENCY" - fi - return - } + local https=$4 + if [ -z "$https" ] || [ "$https" = false ]; then + ret=$(httping "${host}" \ + -y "${deviceip}" \ + -t "$OMR_TRACKER_TIMEOUT" \ + -c 1 \ + -q + ) && echo "$ret" | grep -sq "1 ok" && { + if [ "$localip" = "yes" ]; then + OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1) + _update_rto "$OMR_TRACKER_LATENCY" + fi + return + } + else + ret=$(httping -l "${host}" \ + -y "${deviceip}" \ + -t "$OMR_TRACKER_TIMEOUT" \ + -c 1 \ + -q + ) && echo "$ret" | grep -sq "1 ok" && { + if [ "$localip" = "yes" ]; then + OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1) + _update_rto "$OMR_TRACKER_LATENCY" + fi + return + } + fi false } @@ -283,6 +328,10 @@ while true; do config_load openmptcprouter config_foreach _ping_server server $OMR_TRACKER_DEVICE fi + if [ "$OMR_TRACKER_TYPE" = "httping" ]; then + config_load openmptcprouter + config_foreach _httping_server server $OMR_TRACKER_DEVICE + fi if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST" ]; then OMR_TRACKER_HOST=$(resolveip -4 -t 5 $OMR_TRACKER_HOST | head -n 1 | tr -d "\n") if [ -n "$OMR_TRACKER_HOST" ]; then @@ -366,6 +415,11 @@ while true; do config_load openmptcprouter config_foreach _ping_server server $OMR_TRACKER_DEVICE fi + if [ "$OMR_TRACKER_TYPE" = "httping" ]; then + config_load openmptcprouter + config_foreach _httping_server server $OMR_TRACKER_DEVICE + fi + if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST6" ]; then OMR_TRACKER_HOST6=$(resolveip -6 -t 5 $OMR_TRACKER_HOST6 | head -n 1 | tr -d "\n") if [ -n "$OMR_TRACKER_HOST6" ]; then From fa9e14e0e8bf0d73bd91fe0617020739634ac10f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 11:38:35 +0100 Subject: [PATCH 046/195] Add in Network->MPTCP more info --- luci-app-mptcp/luasrc/controller/mptcp.lua | 17 ++++++++ .../luasrc/view/mptcp/mptcp_monitor.htm | 42 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua index 383498a75..eb84bc718 100644 --- a/luci-app-mptcp/luasrc/controller/mptcp.lua +++ b/luci-app-mptcp/luasrc/controller/mptcp.lua @@ -17,6 +17,8 @@ function index() entry({"admin", "network", "mptcp", "mptcp_fullmesh_data"}, post("mptcp_fullmesh_data")).leaf = true entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true + entry({"admin", "network", "mptcp", "mptcp_monitor"}, template("mptcp/mptcp_monitor"), _("MPTCP monitoring"), 6).leaf = true + entry({"admin", "network", "mptcp", "mptcp_monitor_data"}, post("mptcp_monitor_data")).leaf = true end function interface_bandwidth(iface) @@ -206,6 +208,21 @@ function mptcp_fullmesh_data() return end +function mptcp_monitor_data() + luci.http.prepare_content("text/plain") + local fullmesh + fullmesh = io.popen("cat /proc/net/mptcp_net/snmp") + if fullmesh then + while true do + local ln = fullmesh:read("*l") + if not ln then break end + luci.http.write(ln) + luci.http.write("\n") + end + end + return +end + function mptcp_connections_data() luci.http.prepare_content("text/plain") local connections diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm new file mode 100644 index 000000000..ec4eb5606 --- /dev/null +++ b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm @@ -0,0 +1,42 @@ +<%+header%> + + + + +<% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> +
+ + +
+<%+footer%> From f29538776a0da1f4c1ccb4454c54f3bf25cd813b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 15:34:42 +0100 Subject: [PATCH 047/195] Fix for DHCPv6 interfaces --- .../root/usr/libexec/rpcd/openmptcprouter | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index b86f4d287..858ae5798 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -1116,6 +1116,7 @@ function interfaces_status() local multipath = section["multipath"] local enabled = section["auto"] local proto = section["proto"] or "" + local ipv6 = section["ipv6"] or "0" --if not ipaddr or not gateway then return end -- Don't show if0 in the overview @@ -1130,8 +1131,8 @@ function interfaces_status() --end duplicateif = false - if ifname ~= "" and ifname ~= nil then - if allintf[ifname] and not section["ifname"]:match("^@.*") then + if ifname ~= "" and ifname ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then + if allintf[ifname] then connectivity = "ERROR" duplicateif = true else @@ -1151,10 +1152,10 @@ function interfaces_status() if ipaddr == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then ipaddr = ut.trim(sys.exec("ip -4 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) end - if ip6addr == "" and ifname ~= nil and ifname ~= "" then + if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then ip6addr = ut.trim(sys.exec("ip -6 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'")) end - if ip6addr == "" and ifname ~= nil and ifname ~= "" then + if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then ip6addr = ut.trim(sys.exec("ip -6 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) end if ipaddr == "" and ip6addr == "" then @@ -1199,13 +1200,15 @@ function interfaces_status() if proto ~= "dhcpv6" then gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) end - gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) + if ipv6 == "1" or ipv6 == "auto" then + gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) + end end if gateway == "" and proto ~= "dhcpv6" then gateway = get_gateway(interface) end - if gateway == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then + if gateway == "" and ifname ~= nil and ifname ~= "" and ipv6 ~= "1" and ipv6 ~= "auto" then if fs.access("/sys/class/net/" .. ifname) then gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) if gateway == "" then @@ -1213,10 +1216,10 @@ function interfaces_status() end end end - if gateway6 == "" then + if gateway6 == "" and (ipv6 == "1" or ipv6 == "auto") then gateway6 = get_gateway6(interface) end - if gateway6 == "" and ifname ~= nil and ifname ~= "" then + if gateway6 == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then if fs.access("/sys/class/net/" .. ifname) then gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) if gateway6 == "" then From 275b9fcc06f39a72420e9afd1f6d0438a08878c8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 15:39:00 +0100 Subject: [PATCH 048/195] Fix tracker for DHCPv6 --- omr-tracker/files/bin/omr-tracker | 4 ++++ omr-tracker/files/etc/init.d/omr-tracker | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 028d17cb7..f9e4fa504 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -24,6 +24,8 @@ export OMR_TRACKER_DEVICE_IP export OMR_TRACKER_DEVICE_IP6 export OMR_TRACKER_DEVICE_GATEWAY export OMR_TRACKER_DEVICE_GATEWAY6 +export OMR_TRACKER_IPV6 +export OMR_TRACKER_PROTO dscp=56 # set DSCP CS7 (56) in outgoing packets initial_hosts="$OMR_TRACKER_HOSTS" @@ -279,6 +281,7 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n") fi fi + if [ "$OMR_TRACKER_INTERFACE_IPV6" = "1" ] || [ "$OMR_TRACKER_INTERFACE_IPV6" = "auto" ]; then #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) @@ -301,6 +304,7 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") fi + fi # execute specific tracker if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 574f14bec..31c306a73 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -46,7 +46,7 @@ _launch_tracker() { loopback|lan*|if0*) return;; esac - local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test + local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test ipv6 proto _validate_section "defaults" "defaults" _validate_section "interface" "$1" @@ -59,6 +59,8 @@ _launch_tracker() { config_get multipath "$1" multipath config_get ifenabled "$1" auto config_get gateway "$1" gateway + config_get ipv6 "$1" ipv6 + config_get proto "$1" proto [ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && [ "$( uci -q get openmptcprouter.$1.multipathvpn)" != "1" ] && return [ "${ifenabled}" = "0" ] && return @@ -79,6 +81,8 @@ _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_IPV6=$ipv6" + procd_append_param env "OMR_TRACKER_PROTO=$proto" procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 From 0cc7e8d3c3f3094eb1dfdbc3d97e3e099c53bae4 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 17:13:00 +0100 Subject: [PATCH 049/195] Fix IPv6 routes --- .../share/omr/post-tracking.d/post-tracking | 56 +++++++++++++++---- 1 file changed, 44 insertions(+), 12 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 e00d99fee..9e839039a 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -206,13 +206,29 @@ set_routes_intf6() { #multipath_current_config=$(multipath $interface_if | grep 'deactivated') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then - interface_gw="$(uci -q get network.$INTERFACE.gateway)" + interface_gw="$(uci -q get network.$INTERFACE.ip6gw)" + interface_ip6="$(uci -q get network.$INTERFACE.ip6)" + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") fi @@ -300,12 +316,28 @@ set_route_balancing6() { interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" + interface_ip6="$(uci -q get network.$INTERFACE.ip6)" + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.nexthop="::"].target' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.nexthop="::"].target' | tr -d "\n") + fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") fi @@ -355,7 +387,7 @@ set_server_all_routes() { config_foreach set_routes_intf interface uintf="$(echo $routesintf | awk '{print $5}')" uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then + if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip r del $serverip done @@ -363,7 +395,7 @@ set_server_all_routes() { ip route replace $serverip scope global $routesintf [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then + if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" ip route replace $serverip scope global metric 999 $routesintfbackup fi @@ -394,20 +426,20 @@ set_server_all_routes6() { nbintf6=0 nbintfb6=0 config_load network - config_foreach set_routes_intf interface - uintf="$(echo $routesintf | awk '{print $5}')" - uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then + config_foreach set_routes_intf6 interface + uintf="$(echo $routesintf6 | awk '{print $5}')" + uintfb="$(echo $routesintfbackup6 | awk '{print $5}')" + if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip -6 r del $serverip done - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip -6 route replace $serverip scope global $routesintf + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6" + ip -6 route replace $serverip scope global $routesintf6 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" - ip -6 route replace $serverip scope global metric 999 $routesintfbackup + if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" + ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 fi fi } From 543a667e2cc891ad1fe2f4538e9611cb01a69591 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 17:13:30 +0100 Subject: [PATCH 050/195] Use -o instead of > for omr-test-speed --- openmptcprouter/files/bin/omr-test-speed | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index fa95ff2cc..0521e7bf1 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -24,7 +24,7 @@ done echo "Best server is $HOST, running test:" trap : HUP INT TERM if [ -z "$INTERFACE" ]; then - curl -4 $HOST >/dev/null || echo + curl -4 -o /dev/null $HOST || echo else domain=$(echo $HOST | awk -F/ '{print $3}') hostip=$(dig +nocmd +noall +answer A $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') @@ -33,7 +33,7 @@ else ipset add ss_rules_dst_bypass_all $ip done fi - curl -4 --interface $INTERFACE $HOST >/dev/null || echo + curl -4 -o /dev/null --interface $INTERFACE $HOST || echo if [ -n "$(ipset list 2>/dev/null | grep ss_rules)" ]; then for ip in $hostip; do ipset del ss_rules_dst_bypass_all $ip From a5e22f45115de48e97d70829b666fb12a49feba5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 17:15:17 +0100 Subject: [PATCH 051/195] Fix indentation --- openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 5880c13b0..91a0ad9cc 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -57,8 +57,9 @@ if [ "$(uci -q get shadowsocks-libev.hi3)" != "" ]; then uci -q batch <<-EOF >/dev/null set shadowsocks-libev.hi$c.local_port=$port set shadowsocks-libev.hi$c.server=sss0 + set shadowsocks-libev.hi$((c+1)).local_address="::" set shadowsocks-libev.hi$((c+1)).local_port=$port - set shadowsocks-libev.hi$((c+1)).local_address="::" + set shadowsocks-libev.hi$((c+1)).local_address="::" set shadowsocks-libev.hi$((c+1)).server=sss1 commit shadowsocks-libev EOF From d2658465d07da8a3c42c66a977797d494e74c7e7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 19 Feb 2021 19:43:00 +0100 Subject: [PATCH 052/195] Fix IPv6 routes to server --- .../usr/share/omr/post-tracking.d/post-tracking | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 9e839039a..c2724f5fb 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -387,13 +387,13 @@ set_server_all_routes() { config_foreach set_routes_intf interface uintf="$(echo $routesintf | awk '{print $5}')" uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then + if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip route replace $serverip scope global $routesintf - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + ip route replace $serverip scope global metric 1 $routesintf + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" @@ -429,13 +429,13 @@ set_server_all_routes6() { config_foreach set_routes_intf6 interface uintf="$(echo $routesintf6 | awk '{print $5}')" uintfb="$(echo $routesintfbackup6 | awk '{print $5}')" - if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then + if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip -6 r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6" - ip -6 route replace $serverip scope global $routesintf6 - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + ip -6 route replace $serverip scope global metric 1 $routesintf6 + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" From 8f490b9be77789ad3b8f25c4a448f884ca531049 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 20 Feb 2021 18:19:04 +0100 Subject: [PATCH 053/195] Fix previous fix --- .../usr/share/omr/post-tracking.d/post-tracking | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 c2724f5fb..ffbd09b41 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -209,13 +209,13 @@ set_routes_intf6() { interface_gw="$(uci -q get network.$INTERFACE.ip6gw)" interface_ip6="$(uci -q get network.$INTERFACE.ip6)" if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") @@ -318,13 +318,13 @@ set_route_balancing6() { interface_gw="$(uci -q get network.$INTERFACE.gateway)" interface_ip6="$(uci -q get network.$INTERFACE.ip6)" if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/64\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then - interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop' | tr -d "\n") + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${interface_ip6}/56\"].nexthop" | tr -d "\n") fi if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") From 352daad32b97da1096f921d1d55d6a6d5575fe10 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Sun, 21 Feb 2021 02:35:54 +0800 Subject: [PATCH 054/195] fix omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index d72971e38..2c9e086e8 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -16,9 +16,9 @@ config defaults 'defaults' list hosts '199.85.126.30' list hosts '119.29.29.29' list hosts '182.254.118.118' - ist hosts6 '2400:3200::1 2400:3200:baba::1' - ist hosts6 '2400:da00::6666' - ist hosts6 '2606:4700:4700::1111' + list hosts6 '2400:3200::1 2400:3200:baba::1' + list hosts6 '2400:da00::6666' + list hosts6 '2606:4700:4700::1111' list hosts6 '2606:4700:4700::1001' list hosts6 '2620:fe::fe' list hosts6 '2620:fe::9' From c1cae86176234a0a9322fbe72b103155c137714f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Feb 2021 15:09:56 +0100 Subject: [PATCH 055/195] Modify and add some DSCP ports --- luci-app-omr-dscp/root/etc/config/dscp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/luci-app-omr-dscp/root/etc/config/dscp b/luci-app-omr-dscp/root/etc/config/dscp index a48c32232..cf300451f 100644 --- a/luci-app-omr-dscp/root/etc/config/dscp +++ b/luci-app-omr-dscp/root/etc/config/dscp @@ -1,28 +1,35 @@ config classify option direction 'both' option proto 'icmp' - option class 'cs5' + option class 'cs7' option comment 'ICMP' config classify option direction 'both' option proto 'udp' - option class 'cs5' + option class 'cs4' option src_port '53,123,5353' option comment 'DNS udp and NTP' config classify option direction 'both' option proto 'tcp' - option class 'cs5' + option class 'cs4' option src_port '53,5353' option comment 'DNS tcp' +config classify + option direction 'both' + option proto 'tcp' + option class 'cs4' + option src_port '65500' + option comment 'OMR API' + config classify option direction 'both' option proto 'tcp' option class 'cs6' - option dest_port '65001,65301,65011' + option dest_port '65001,65301,65401,65011' option comment 'OMR vpn' config classify @@ -32,6 +39,13 @@ config classify option dest_port '65001,65301' option comment 'OMR vpn' +config classify + option direction 'both' + option proto 'tcp' + option class 'cs6' + option dest_port '65101,65228' + option comment 'OMR proxy' + config domains option name 'googlevideo.com' option class 'cs4' From 06ef8a9353aa740188ff58da6f094ca0d5d33763 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Feb 2021 15:10:34 +0100 Subject: [PATCH 056/195] Hide server address for sysupgrade --- luci-app-sysupgrade/luasrc/view/sysupgrade.htm | 3 +++ .../root/www/luci-static/resources/sysupgrade.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm index 7cb1efa9d..87b3cb85a 100644 --- a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm +++ b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm @@ -99,12 +99,15 @@
+ +
diff --git a/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js b/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js index bfb2a83ba..9002d3ee0 100644 --- a/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js +++ b/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js @@ -98,7 +98,7 @@ function setup_ready() { upgrade_check(); } else { show("#upgrade_button"); - show("#server_div"); + //show("#server_div"); $("#server").value = data.url; } } From 5e502b1cf162d8c3dbaff99f7382a16026f6fd30 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Feb 2021 15:11:13 +0100 Subject: [PATCH 057/195] Update v2ray --- v2ray-core/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index 206aa724f..4b7cfb71a 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=4.31.0 +PKG_VERSION:=4.34.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:=4e475c700863320b92689cb36ef993133e9c799375bbfc4a2811da2283c3673f +PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/v$(PKG_VERSION) +PKG_HASH:=b250f569cb0369f394f63184e748f1df0c90500feb8a1bf2276257c4c8b81bee PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE From 5bf8b9923a0337938dfa3ff0114b97f1caf7ac2a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Feb 2021 15:12:00 +0100 Subject: [PATCH 058/195] Reload custom firewall rules when fw reload --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 1 + 1 file changed, 1 insertion(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index db2fcf39e..dda268ebe 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -201,6 +201,7 @@ done uci -q batch <<-EOF >/dev/null set firewall.@zone[0].mtu_fix='1' set firewall.zone_vpn.mtu_fix='1' + set firewall.@include[0].reload='1' commit firewall EOF From 7c2fd8f2ad7b54ee698f28b57df4afd4dfec101f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Feb 2021 14:25:18 +0100 Subject: [PATCH 059/195] Rename zone wan and lan to zone_wan and zone_lan in fw --- .../luasrc/controller/openmptcprouter.lua | 10 ++--- .../luasrc/view/openmptcprouter/wizard.htm | 9 +++-- .../files/etc/uci-defaults/1980-omr-firewall | 37 +++++++++++++------ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b71efc888..d67470a09 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -38,10 +38,10 @@ function wizard_add() local gostatus = true -- Force WAN zone firewall members to be a list - local fwwan = sys.exec("uci -q get firewall.@zone[1].network") - luci.sys.call("uci -q delete firewall.@zone[1].network") + local fwwan = sys.exec("uci -q get firewall.zone_wan.network") + luci.sys.call("uci -q delete firewall.zone_wan.network") for interface in fwwan:gmatch("%S+") do - luci.sys.call("uci -q add_list firewall.@zone[1].network=" .. interface) + luci.sys.call("uci -q add_list firewall.zone_wan.network=" .. interface) end ucic:save("firewall") @@ -185,7 +185,7 @@ function wizard_add() luci.sys.call("uci -q commit vnstat") -- Dirty way to add new interface to firewall... - luci.sys.call("uci -q add_list firewall.@zone[1].network=wan" .. i) + luci.sys.call("uci -q add_list firewall.zone_wan.network=wan" .. i) luci.sys.call("uci -q commit firewall") luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") @@ -217,7 +217,7 @@ function wizard_add() luci.sys.call("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) end luci.sys.call("uci -q commit vnstat") - luci.sys.call("uci -q del_list firewall.@zone[1].network=" .. intf) + luci.sys.call("uci -q del_list firewall.zone_wan.network=" .. intf) luci.sys.call("uci -q commit firewall") gostatus = false end diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index a0b5851e1..02e20ebad 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -372,7 +372,7 @@ <% for _, iface in ipairs(net:get_networks()) do local ifname = iface:name() - local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[0].network | grep " .. ifname)) + local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_lan.network | grep " .. ifname)) if firewall_lan ~= "" then %>

<%=ifname%>

@@ -475,7 +475,7 @@ <% for _, iface in ipairs(net:get_networks()) do local ifname = iface:name() - local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[1].network | grep " .. ifname)) + local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_wan.network | grep " .. ifname)) if firewall_wan ~= "" then -- local multipath = uci:get("network",ifname,"multipath") @@ -943,9 +943,10 @@
-
+
- + +
diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index dda268ebe..2bd9ba5d3 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -15,6 +15,21 @@ if [ "$(uci -q get firewall.@zone[2].name)" = "vpn" ]; then EOF fi +if [ "$(uci -q get firewall.@zone[1].name)" = "wan" ]; then + uci -q batch <<-EOF >/dev/null + rename firewall.@zone[1]="zone_wan" + del_list firewall.zone_wan.network="wan" + del_list firewall.zone_wan.network="wan6" + commit firewall + EOF +fi +if [ "$(uci -q get firewall.@zone[0].name)" = "lan" ]; then + uci -q batch <<-EOF >/dev/null + rename firewall.@zone[0]="zone_lan" + commit firewall + EOF +fi + if [ "$(uci -q get firewall.zone_vpn)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.zone_vpn=zone @@ -91,12 +106,12 @@ if [ "$(uci -q show firewall | grep ICMPv6-Lan-to-OMR)" = "" ]; then EOF fi uci -q batch <<-EOF >/dev/null - del_list firewall.wan.masq_dest='!10.0.0.0/8' - del_list firewall.wan.masq_dest='!172.16.0.0/12' - del_list firewall.wan.masq_dest='!192.168.0.0/16' - add_list firewall.wan.masq_dest='!10.0.0.0/8' - add_list firewall.wan.masq_dest='!172.16.0.0/12' - add_list firewall.wan.masq_dest='!192.168.0.0/16' + del_list firewall.zone_wan.masq_dest='!10.0.0.0/8' + del_list firewall.zone_wan.masq_dest='!172.16.0.0/12' + del_list firewall.zone_wan.masq_dest='!192.168.0.0/16' + add_list firewall.zone_wan.masq_dest='!10.0.0.0/8' + add_list firewall.zone_wan.masq_dest='!172.16.0.0/12' + add_list firewall.zone_wan.masq_dest='!192.168.0.0/16' EOF if [ "$(ubus call system board | jsonfilter -e '@.board_name')" = "bananapi,bpi-r2" ] || [ "$(ubus call system board | jsonfilter -e '@.board_name' | grep -i wrt)" != "" ]; then uci -q batch <<-EOF >/dev/null @@ -124,7 +139,7 @@ if [ "$(uci -q get firewall.gre_tunnel)" = "" ]; then fi if [ "$(uci -q get firewall.fwlantovpn)" = "" ]; then uci -q batch <<-EOF >/dev/null - set firewall.@zone[0].auto_helper='0' + set firewall.zone_lan.auto_helper='0' set firewall.fwlantovpn=forwarding set firewall.fwlantovpn.src='lan' set firewall.fwlantovpn.dest='vpn' @@ -187,10 +202,10 @@ if [ "$(uci -q get firewall.allowdhcpv6546)" = "" ]; then fi # Fix firewall config from some old config -allintf=$(uci -q get firewall.@zone[1].network) -uci -q del firewall.@zone[1].network +allintf=$(uci -q get firewall.zone_wan.network) +uci -q del firewall.zone_wan.network for intf in $allintf; do - uci -q add_list firewall.@zone[1].network=$intf + uci -q add_list firewall.zone_wan.network=$intf done allintf=$(uci -q get firewall.zone_vpn.network) uci -q del firewall.zone_vpn.network @@ -199,7 +214,7 @@ for intf in $allintf; do done uci -q batch <<-EOF >/dev/null - set firewall.@zone[0].mtu_fix='1' + set firewall.zone_lan.mtu_fix='1' set firewall.zone_vpn.mtu_fix='1' set firewall.@include[0].reload='1' commit firewall From a254d4aaed7b9a85216ca13423fcb1ed1b2262bf Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Feb 2021 14:25:52 +0100 Subject: [PATCH 060/195] Add check for duplicate mac --- .../luasrc/view/openmptcprouter/wanstatus.htm | 14 +++++++--- .../root/usr/libexec/rpcd/openmptcprouter | 26 +++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 794dccb31..4a3421d3b 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -455,6 +455,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm var multipath_available = mArray.wans[i].multipath_available; var multipath_state = mArray.wans[i].multipath_state; var duplicateif = mArray.wans[i].duplicateif; + var duplicatemac = mArray.wans[i].duplicatemac; // Generate template if(mArray.openmptcprouter.remote_from_lease == true && mArray.wans.length == 1) { @@ -547,12 +548,12 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm if(gateway == '' && gateway6 == '') { statusMessage += '<%:No gateway defined%>' + '
'; - } else if(gw_ping == 'DOWN') + } else if(gateway != '' && gw_ping == 'DOWN') { statusMessage += '<%:Gateway DOWN%>' + '
'; - } else if(gw_ping6 == 'DOWN') + } else if(gateway6 != '' && gw_ping6 == 'DOWN') { - statusMessage += '<%:Gateway DOWN%>' + '
'; + statusMessage += '<%:Gateway IPv6 DOWN%>' + '
'; } else if(multipath_available == 'ERROR') { statusMessage += '<%:Multipath seems to be blocked on the connection%>' + '
'; @@ -566,7 +567,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; statusMessageClass = "error"; } - if (stat == 'Offline' && ip6addr != '' && ipaddr == mArray.wans[i].gateway6) + if (stat == 'Offline' && ip6addr != '' && ip6addr == mArray.wans[i].gateway6) { statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; statusMessageClass = "error"; @@ -595,6 +596,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '<%:Network interface duplicated%>' + '
'; statusMessageClass = "error"; } + if(duplicatemac) + { + statusMessage += '<%:Network interface MAC address duplicated%>' + '
'; + statusMessageClass = "error"; + } if(ipv6_discover == 'DETECTED') { statusMessage += '<%:IPv6 route received%>' + '
' diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 858ae5798..0708e3f03 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -1105,6 +1105,7 @@ function interfaces_status() mArray.wans = {} mArray.tunnels = {} allintf = {} + allmac = {} uci:foreach("network", "interface", function (section) local interface = section[".name"] @@ -1117,6 +1118,7 @@ function interfaces_status() local enabled = section["auto"] local proto = section["proto"] or "" local ipv6 = section["ipv6"] or "0" + local mac = section ["macaddr"] or "" --if not ipaddr or not gateway then return end -- Don't show if0 in the overview @@ -1140,6 +1142,16 @@ function interfaces_status() end end + duplicatemac = false + if mac ~= "" and mac ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then + if allmac[mac] then + connectivity = "ERROR" + duplicatemac = true + else + allmac[mac] = true + end + end + --if multipath == "off" and not ifname:match("^tun.*") then return end if multipath == "off" then return end @@ -1237,7 +1249,7 @@ function interfaces_status() if gateway ~= "" then local gw_ping_test = "" if ifname ~= "" and ifname ~= nil then - gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 -I " .. ifname .. " " .. gateway .. " | grep '100% packet loss'")) + gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 -B -I " .. ifname .. " " .. gateway .. " | grep '100% packet loss'")) else gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) end @@ -1247,11 +1259,13 @@ function interfaces_status() connectivity = "WARNING" end end + else + gw_ping = "DOWN" end if gateway6 ~= "" then local gw_ping6_test = "" if ifname ~= "" and ifname ~= nil then - gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 -I " .. ifname .. " " .. gateway6 .. " | grep '100% packet loss'")) + gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 -B -I " .. ifname .. " " .. gateway6 .. " | grep '100% packet loss'")) else gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway6 .. " | grep '100% packet loss'")) end @@ -1261,6 +1275,8 @@ function interfaces_status() connectivity = "WARNING" end end + else + gw_ping6 = "DOWN" end end if uci:get("openmptcprouter", interface, "manufacturer") == "huawei" then @@ -1346,6 +1362,10 @@ function interfaces_status() multipath_available = "NO CHECK" end + local zonewan = "NO" + if ut.trim(sys.exec("uci -q get firewall.zone_wan.networks | grep '" .. interface .. "'")) ~= "" then + zonewan = "OK" + end -- Detect if WAN get an IPv6 local ipv6_discover = "NONE" @@ -1449,6 +1469,7 @@ function interfaces_status() multipath_available = multipath_available, multipath_state = current_multipath_state, duplicateif = duplicateif, + duplicatemac = duplicatemac, signal = signal, operator = operator, phonenumber = phonenumber, @@ -1457,6 +1478,7 @@ function interfaces_status() proto = proto, rx = rx, tx = tx, + zonewan = zonewan, } if ifname ~= nil and ifname:match("^tun.*") then table.insert(mArray.tunnels, data); From 9f809347d2fabb234163b38c2a99e70e45418d5d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Feb 2021 14:26:41 +0100 Subject: [PATCH 061/195] Fix duplicate mac address fix --- 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 a405f4bd0..663c5cc91 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -131,7 +131,7 @@ interface_multipath_settings() { uci -q set openmptcprouter.${config}.multipath="$mode" config_get macaddr "$config" macaddr "" - [ -n "$maccaddr" ] && { + [ -n "$macaddr" ] && { nbmac=0 config_foreach interface_macaddr_count interface $macaddr [ "$nbmac" != "1" ] && { From 519c6f7e4e9c7f78095fae7a8b5594efc82dbdec Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Feb 2021 14:28:07 +0100 Subject: [PATCH 062/195] Update theme argon --- luci-theme-argon/Makefile | 15 +- luci-theme-argon/README.md | 75 +- luci-theme-argon/README_ZH.md | 17 +- .../Screenshots/screenshot_pc.jpg | Bin 0 -> 673706 bytes .../Screenshots/screenshot_phone.jpg | Bin 0 -> 467306 bytes .../luci-static/argon/background/README.md | 2 +- .../htdocs/luci-static/argon/css/cascade.css | 899 +++--------- .../htdocs/luci-static/argon/css/dark.css | 65 +- .../htdocs/luci-static/argon/css/fonts.css | 4 +- .../htdocs/luci-static/argon/css/pure-min.css | 2 +- .../htdocs/luci-static/argon/favicon.ico | Bin 0 -> 15406 bytes .../htdocs/luci-static/argon/favicon.png | Bin 535 -> 0 bytes .../luci-static/argon/icon/favicon-16x16.png | Bin 0 -> 1019 bytes .../luci-static/argon/icon/favicon-32x32.png | Bin 0 -> 1720 bytes .../luci-static/argon/icon/favicon-96x96.png | Bin 0 -> 3650 bytes .../htdocs/luci-static/argon/icon/favicon.png | Bin 535 -> 0 bytes .../htdocs/luci-static/argon/js/jquery.min.js | 2 +- .../luci-static/argon/js/polyfill.min.js | 3 + .../htdocs/luci-static/argon/js/script.js | 7 +- .../luci-static/argon/less/cascade.less | 1200 ++++------------- .../htdocs/luci-static/argon/less/dark.less | 68 +- .../luasrc/view/themes/argon/footer.htm | 12 +- .../luasrc/view/themes/argon/footer_login.htm | 46 + .../luasrc/view/themes/argon/header.htm | 235 ++-- .../luasrc/view/themes/argon/header_login.htm | 84 +- .../view/themes/argon/out_footer_login.htm | 27 + .../view/themes/argon/out_header_login.htm | 6 +- .../luasrc/view/themes/argon/sysauth.htm | 38 +- .../root/etc/uci-defaults/30_luci-theme-argon | 17 +- 29 files changed, 909 insertions(+), 1915 deletions(-) create mode 100644 luci-theme-argon/Screenshots/screenshot_pc.jpg create mode 100644 luci-theme-argon/Screenshots/screenshot_phone.jpg create mode 100644 luci-theme-argon/htdocs/luci-static/argon/favicon.ico delete mode 100644 luci-theme-argon/htdocs/luci-static/argon/favicon.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png delete mode 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon.png create mode 100644 luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js create mode 100644 luci-theme-argon/luasrc/view/themes/argon/footer_login.htm create mode 100644 luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm diff --git a/luci-theme-argon/Makefile b/luci-theme-argon/Makefile index c8833c4cf..1f786223e 100644 --- a/luci-theme-argon/Makefile +++ b/luci-theme-argon/Makefile @@ -8,18 +8,9 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Argon Theme LUCI_DEPENDS:= -PKG_VERSION:=2.2.4 -PKG_RELEASE:=20200821 +PKG_VERSION:=2.2.6 +PKG_RELEASE:=20210215 include $(TOPDIR)/feeds/luci/luci.mk -define Package/luci-theme-argon/postinst -#!/bin/sh -sed -i ":a;$!N;s/tmpl.render.*sysauth_template.*return/local scope = { duser = default_user, fuser = user }\nlocal ok, res = luci.util.copcall\(luci.template.render_string, [[<% include\(\"themes\/\" .. theme .. \"\/sysauth\"\) %>]], scope\)\nif ok then\nreturn res\nend\nreturn luci.template.render\(\"sysauth\", scope\)/;ba" /usr/lib/lua/luci/dispatcher.lua -[ -f /usr/lib/lua/luci/view/themes/argon/out_header_login.htm ] && mv -f /usr/lib/lua/luci/view/themes/argon/out_header_login.htm /usr/lib/lua/luci/view/header_login.htm -rm -Rf /var/luci-modulecache -rm -Rf /var/luci-indexcache -exit 0 -endef - -# call BuildPackage - OpenWrt buildroot signature \ No newline at end of file +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-argon/README.md b/luci-theme-argon/README.md index f55585443..11b84a6f8 100644 --- a/luci-theme-argon/README.md +++ b/luci-theme-argon/README.md @@ -1,36 +1,58 @@ -# luci-theme-argon ([中文](/README_ZH.md)) +
+ +

+ A new LuCI theme for OpenWrt +

+

+ Argon is a clean HTML5 theme for LuCI. Users may
setup their own favorite logins, including beautiful
pics and customized mp4 videos.

+

-[1]: https://img.shields.io/badge/license-MIT-brightgreen.svg -[2]: /LICENSE -[3]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg -[4]: https://github.com/jerrykuku/luci-theme-argon/pulls -[5]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg -[6]: https://github.com/jerrykuku/luci-theme-argon/issues/new -[7]: https://img.shields.io/badge/release-v2.2.4-blue.svg? -[8]: https://github.com/jerrykuku/luci-theme-argon/releases -[9]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total -[10]: https://img.shields.io/badge/Contact-telegram-blue -[11]: https://t.me/jerryk6 -[![license][1]][2] -[![PRs Welcome][3]][4] -[![Issue Welcome][5]][6] -[![Release Version][7]][8] -[![Release Count][9]][8] -[![Contact Me][10]][11] + + + -![](/Screenshots/screenshot_pc.jpg) -![](/Screenshots/screenshot_phone.jpg) + + + + + + + + + + + + + + + + + + + +
+
+
+ +
-A new Luci theme for LEDE/OpenWRT -Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template +
English | [简体中文](README_ZH.md) ## Notice +It is strongly recommended to use the Chrome browser. Some new css3 features are used in the theme, and currently only Chrome has the best compatibility. +The mainline version of IE series currently has bugs to be resolved. +FireFox does not enable the backdrop-filter by default, see here for the opening method: https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter v2.x.x Adapt to official mainline snapshot. You can checkout branch 18.06 for OpenWRT 18.06 or lean 19.07. -## Update log 2020.08.21 v2.2.4 +## Update Log 2020.09.13 v2.2.5 +- 【v2.2.5】New config app for argon theme. You can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended] [Download](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk) +- 【v2.2.5】Automatically set as the default theme when compiling. +- 【v2.2.5】Modify the file structure to adapt to luci-app-argon-config. The old method of turning on dark mode is no longer applicable, please use it with luci-app-argon-config. +- 【v2.2.5】Adapt to Koolshare lede 2.3.6。 +- 【v2.2.5】Fix some Bug。 - 【v2.2.4】Fix the problem that the login background cannot be displayed on some phones. - 【v2.2.4】Remove the dependency of luasocket. - 【v2.2.3】Fix Firmware flash page display error in dark mode. @@ -78,16 +100,19 @@ make -j1 V=s ### For Lean openwrt 18.06 LuCI ``` -wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.6.9/luci-theme-argon_1.6.9-20200821_all.ipk +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.7.0/luci-theme-argon_1.7.0-20200909_all.ipk opkg install luci-theme-argon*.ipk ``` ### For openwrt official 19.07 Snapshots LuCI master ``` -wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.4/luci-theme-argon_2.2.4-20200821_all.ipk +opkg install luci-compat +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.5/luci-theme-argon_2.2.5-20200914_all.ipk opkg install luci-theme-argon*.ipk ``` +![](/Screenshots/screenshot_pc.jpg) +![](/Screenshots/screenshot_phone.jpg) ## Thanks to diff --git a/luci-theme-argon/README_ZH.md b/luci-theme-argon/README_ZH.md index 2998ea726..b229fa4fe 100644 --- a/luci-theme-argon/README_ZH.md +++ b/luci-theme-argon/README_ZH.md @@ -5,7 +5,7 @@ [4]: https://github.com/jerrykuku/luci-theme-argon/pulls [5]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg [6]: https://github.com/jerrykuku/luci-theme-argon/issues/new -[7]: https://img.shields.io/badge/release-v2.2.4-blue.svg? +[7]: https://img.shields.io/badge/release-v2.2.5-blue.svg? [8]: https://github.com/jerrykuku/luci-theme-argon/releases [9]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total [10]: https://img.shields.io/badge/Contact-telegram-blue @@ -23,14 +23,21 @@ 全新的 Openwrt 主题,基于luci-theme-material 和 开源免费的 Argon 模板进行移植。 ## 注意 - +强烈建议使用Chrome 浏览器。主题中使用了一些新的css3特性,目前只有Chrome有最佳的兼容性。 +主线版本 IE 系列目前还有Bug有待解决。 +FireFox 默认不开启backdrop-filter,开启方法见这里:https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter 当前master版本基于官方 OpenWrt 19.07.1 稳定版固件进行移植适配。 v2.x.x 适配主线快照版本。 v1.x.x 适配18.06 和 Lean Openwrt [如果你是lean代码 请选择这个版本] -## 更新日志 2020.08.21 v2.2.4 +## 更新日志 2020.09.13 v2.2.5 +- 【v2.2.5】全新的设置app.你可以设置argon 主题的登录页面的模糊和透明度,并管理背景图片与视频。[建议使用 Chrome][点击下载](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk) +- 【v2.2.5】当编译固件时,将自动设置为默认主题。 +- 【v2.2.5】修改文件结构,以适应luci-app-argon-config,旧的开启暗色模式方法将不再适用,请搭配luci-app-argon-config使用。 +- 【v2.2.5】适配Koolshare lede 2.3.6。 +- 【v2.2.5】修复了一些Bug。 - 【v2.2.4】修复了在某些手机下图片背景第一次加载不能显示的问题。 - 【v2.2.4】取消 luasocket 的依赖,无需再担心依赖问题。 - 【v2.2.3】修正了在暗色模式下,固件刷写弹窗内的显示错误。 @@ -78,14 +85,14 @@ make -j1 V=s ### Lean源码 ``` -wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.6.9/luci-theme-argon_1.6.9-20200821_all.ipk +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.7.0/luci-theme-argon_1.7.0-20200909_all.ipk opkg install luci-theme-argon*.ipk ``` ### For openwrt official 19.07 Snapshots LuCI master ``` -wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.4/luci-theme-argon_2.2.4-20200821_all.ipk +wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.5/luci-theme-argon_2.2.5-20200914_all.ipk opkg install luci-theme-argon*.ipk ``` diff --git a/luci-theme-argon/Screenshots/screenshot_pc.jpg b/luci-theme-argon/Screenshots/screenshot_pc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c355449a3aa732fd06f2b69fd6f6bd1f0342647 GIT binary patch literal 673706 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 <9F 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

3fNN(I!%o6!(io%Ea>{!`= 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 z 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%0A9b24siOI!3$VDy&gqgCsc!e{XLM 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

CT{pxmNUcw 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

BW9zrHP>w3I!v}o((L?t| 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�XmH0BX8{7Fo+5_+B0y51fCh=1gyC_ zeXDGwYgHUUY2B>`nY(|p5Lr|Z&k_gB0`RKZrt{$GR&#&7HlmXJ?(=0}j3Id2pjK2ft}>dMx~ z>W}yai=Pg_+G}HdKJktlogUT;b`9NQHB(S=c{-V^8R5$P9T&rtl`H&B``6^XQ~+9o z*$Aq6f3+s)1p}wf)Z5fwY}Oae&vPGjtWy_F^v=FNf9a^;9`)KG63`7#io^EVU%0AU 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π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¨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

Tr`~umt5;lf?z^s5VIro`H-P%l~ge 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 ZAOB9FaQ^)_;C1{vo%?^F!*c$G{}-XHNrC_X literal 0 HcmV?d00001 diff --git a/luci-theme-argon/Screenshots/screenshot_phone.jpg b/luci-theme-argon/Screenshots/screenshot_phone.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8237a0368813d8d7b9c9db585e088db8c999ed06 GIT binary patch literal 467306 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�+7nJaJ7mB9sLzVyJJZ=+*$74h7n0@`hdg#0= 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

lOFHKxW{3#(Fx9m%qBfZq)kvVO1c3-Pc^W;%aRL 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ą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

",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 * https://github.com/LuttyYang/luci-theme-material/ * @@ -89,6 +89,11 @@ document.addEventListener('luci-loaded', function(ev) { $(".main > .main-left > .nav > .slide > .menu").click(function () { var ul = $(this).next(".slide-menu"); var menu = $(this); + $(".main > .main-left > .nav > .slide > .menu").each(function () { + var ulNode = $(this); + ulNode.removeClass("active"); + ulNode.next(".slide-menu").stop(true).slideUp("fast") + }); if (!ul.is(":visible")) { menu.addClass("active"); ul.addClass("active"); diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less b/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less index 96e3864be..54969b3b7 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less +++ b/luci-theme-argon/htdocs/luci-static/argon/less/cascade.less @@ -8,7 +8,7 @@ * Have a bug? Please create an issue here on GitHub! * https://github.com/jerrykuku/luci-theme-argon/issues * - * luci-theme-material: + * luci-theme-material: * Copyright 2015 Lutty Yang * https://github.com/LuttyYang/luci-theme-material/ * @@ -30,6 +30,8 @@ @import url("pure-min.css?v=1"); :root { + --primary: #5e72e4; + --dark-primary: #483d8b; --main-color: #09c; --header-bg: #09c; --header-color: #fff; @@ -40,7 +42,6 @@ --main-menu-color: #202124; --submenu-bg-hover: #d4d4d4; --submenu-bg-hover-active: #09c; - --blue: #5e72e4; --indigo: #5603ad; --purple: #8965e0; @@ -56,7 +57,6 @@ --gray-dark: #32325d; --light: #ced4da; --lighter: #e9ecef; - --primary: #5e72e4; --secondary: #f7fafc; --success: #2dce89; --info: #11cdef; @@ -333,6 +333,7 @@ abbr { cursor: help; text-decoration: underline; color: #5e72e4; + color: var(--primary); } hr { @@ -352,11 +353,6 @@ hr { .login-page { height: 100%; - background-image: url(../img/blank.png); - background-repeat: no-repeat; - background-position: center; - background-size: cover; - transition: all 0.5s; .video { position: absolute; @@ -368,15 +364,13 @@ hr { background-color: #000; background-color: var(--darker); overflow: hidden; - pointer-events: none; - video { width: 100%; height: auto; } } - .volume-control { + .volume-control{ position: fixed; right: 1rem; top: 1rem; @@ -386,8 +380,7 @@ hr { cursor: pointer; background-size: contain; background-image: url(../img/volume_high.svg); - - &.mute { + &.mute{ background-image: url(../img/volume_off.svg); } } @@ -432,7 +425,8 @@ hr { width: 100%; min-height: 100%; max-width: 420px; - background-color: rgb(255, 255, 255); + background-color: #fff; + background-color: var(--white); .brand { display: flex; @@ -440,6 +434,7 @@ hr { align-items: center; margin: 50px auto 100px 50px; color: #525461; + color: var(--default); .icon { width: 50px; @@ -485,6 +480,7 @@ hr { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #525461; + color: var(--default); font-size: 1.5rem; position: absolute; z-index: 100; @@ -498,6 +494,7 @@ hr { height: 1px; bottom: 0; border-bottom: 1px #5e72e4 solid; + border-bottom: 1px var(--primary) solid; transform: scaleX(0); transition: transform 0.3s; } @@ -512,9 +509,11 @@ hr { box-sizing: border-box; transition: all .3s cubic-bezier(.68, -.55, .265, 1.55); color: #525461; + color:var(--default); border: 0; border-radius: 0; border-bottom: 1px solid #fff; + border-bottom: 1px solid var(--white); background-color: transparent; background-clip: padding-box; box-shadow: 0 3px 2px rgba(233, 236, 239, .05); @@ -546,12 +545,14 @@ hr { box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 50px 0px; font-weight: 600; font-size: 15px; - color: rgb(255, 255, 255); + color: #fff; + color: var(--white); text-align: center; width: 100%; cursor: pointer; min-height: 50px; background-color: #5e72e4 !important; + background-color: var(--primary) !important; border-radius: 6px; outline: none; border-width: initial; @@ -560,12 +561,12 @@ hr { border-image: initial; padding: 10px 0px; margin: 30px 0px 100px; - transition: all 0.3s; + transition: all 0.3s !important; letter-spacing: 0.8rem; &:hover, :focus { - background-color: #5065d8 !important; + opacity: 0.9; } } } @@ -579,10 +580,12 @@ hr { justify-content: space-evenly; margin-top: auto; padding: 0px 0px 30px; - color: #525461; z-index: 10; - - .ftc { + color: #525461; + color: var(--default); + position: absolute; + bottom: 0; + .ftc{ position: absolute; bottom: 30px; width: 100%; @@ -595,7 +598,6 @@ hr { } } - @supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { .login-page .login-container .login-form { -webkit-backdrop-filter: blur(var(--blur-radius)); @@ -663,6 +665,7 @@ small { .brand { font-size: 1.8rem; color: #5e72e4; + color: var(--primary); font-family: "TypoGraphica"; text-decoration: none; text-align: center; @@ -732,6 +735,7 @@ header { height: 2rem; width: 100%; background-color: #5e72e4 !important; + background-color: var(--primary) !important; } .fill { @@ -776,11 +780,12 @@ header { right: 1.25rem; float: right; - span[data-indicator="poll-status"] { - display: block; + span[data-indicator] { + display: inline-block; font-size: 0.8rem; font-weight: bold; padding: 0.3rem 0.8rem; + margin: 0 0.5rem; white-space: nowrap; text-decoration: none; text-transform: uppercase; @@ -895,6 +900,62 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { .nav { margin-top: 0.5rem; + >li>a:first-child { + display: block; + margin: 0.1rem .5rem 0.1rem .5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; + + &.active { + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + + &::after { + transform: rotate(90deg); + color: #fff !important; + } + } + + &:hover { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + } + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e915"; + color: #5e72e4; + color: var(--primary); + } + } + li { padding: 0.5rem 1rem; cursor: pointer; @@ -902,6 +963,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { -moz-user-select: none; -ms-user-select: none; user-select: none; + padding: 0; a { display: block; @@ -916,140 +978,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { display: none; } - .menu { - display: block; - margin: 0.1rem .5rem 0.1rem .5rem; - padding: .675rem 0 .675rem 2.5rem; - border-radius: .375rem; - text-decoration: none; - cursor: default; - font-size: 1rem; - transition: all 0.2s; - position: relative; - &.active { - color: #fff; - background: #5e72e4; - background: var(--primary); - - &::before { - color: #fff !important; - } - - &::after { - transform: rotate(90deg); - color: #fff !important; - } - } - - &:hover { - cursor: pointer; - color: #fff; - background: #5e72e4; - background: var(--primary); - - &::before { - color: #fff !important; - } - } - - &::before { - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - position: absolute; - left: 0.8rem; - padding-top: 3px; - transition: all 0.3s; - content: "\e915"; - color: #5e72e4; - } - - &::after { - position: absolute; - right: 0.5rem; - top: 0.8rem; - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: '\e90f'; - transition: all .15s ease; - color: #ced4da; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - transition: all 0.3s; - } - } - - .menu[data-title=Status]:before { - content: "\e906"; - color: #5e72e4; - } - - .menu[data-title=System]:before { - content: "\e90a"; - color: #fb6340; - } - - .menu[data-title=Services]:before { - content: "\e909"; - color: #11cdef; - } - - .menu[data-title=NAS]:before { - content: "\e90c"; - color: #f3a4b5; - } - - .menu[data-title=VPN]:before { - content: "\e90b"; - color: #8965e0; - } - - .menu[data-title=Network]:before { - content: "\e908"; - color: #8965e0; - } - - .menu[data-title=Bandwidth_Monitor]:before { - content: "\e90d"; - color: #2dce89; - } - - .menu[data-title=Docker]:before { - content: "\e911"; - color: #6699ff; - } - - .menu[data-title=Statistics]:before { - content: "\e913"; - color: #8965e0; - } - - .menu[data-title=Control]:before { - content: "\e912"; - color: #5e72e4; - } - - .menu[data-title=Asterisk]:before { - content: "\e914"; - color: #fb6340; - } - - .menu[data-title=Logout]:before { - content: "\e907"; - color: #adb5bd; - } &:hover { background: none; @@ -1062,9 +991,10 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { li { position: relative; border-radius: 0.375rem; - margin: 0.2rem 0; + margin: 0; padding: 0.5rem 0rem; background: none; + list-style: none; a { white-space: nowrap; @@ -1079,6 +1009,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { width: 0; height: 2px; background-color: #5e72e4; + background-color: var(--primary); transition: all 0.2s; } @@ -1109,6 +1040,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { width: 100%; height: 2px; background-color: #5e72e4; + background-color: var(--primary); transition: all 0.2s; } @@ -1124,6 +1056,147 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { } } + + + + .menu { + display: block; + margin: 0.1rem .5rem 0.1rem .5rem; + padding: .675rem 0 .675rem 2.5rem; + border-radius: .375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; + + &.active { + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + + &::after { + transform: rotate(90deg); + color: #fff !important; + } + } + + &:hover { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); + + &::before { + color: #fff !important; + } + } + + &::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e915"; + color: #5e72e4; + color: var(--primary); + } + + &::after { + position: absolute; + right: 0.5rem; + top: 0.8rem; + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\e90f'; + transition: all .15s ease; + color: #ced4da; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + transition: all 0.3s; + } + } + + + .menu[data-title=Status]:before { + content: "\e906"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=System]:before { + content: "\e90a"; + color: #fb6340; + } + + .menu[data-title=Services]:before { + content: "\e909"; + color: #11cdef; + } + + .menu[data-title=NAS]:before { + content: "\e90c"; + color: #f3a4b5; + } + + .menu[data-title=VPN]:before { + content: "\e90b"; + color: #8965e0; + } + + .menu[data-title=Network]:before { + content: "\e908"; + color: #8965e0; + } + + .menu[data-title=Bandwidth_Monitor]:before { + content: "\e90d"; + color: #2dce89; + } + + .menu[data-title=Docker]:before { + content: "\e911"; + color: #6699ff; + } + + .menu[data-title=Statistics]:before { + content: "\e913"; + color: #8965e0; + } + + .menu[data-title=Control]:before { + content: "\e912"; + color: #5e72e4; + color: var(--primary); + } + + .menu[data-title=Asterisk]:before { + content: "\e914"; + color: #fb6340; + } + + a[data-title=Logout]:before { + content: "\e907"; + color: #adb5bd; + } } } } @@ -1687,13 +1760,16 @@ td>table>tbody>tr>td, li:hover { cursor: pointer; border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; border-radius: 0; a { color: #5e72e4; + color: var(--primary); } } @@ -1712,6 +1788,7 @@ td>table>tbody>tr>td, &:hover { border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); } } } @@ -1757,7 +1834,9 @@ td>table>tbody>tr>td, &:hover { cursor: pointer; border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; @@ -1769,12 +1848,15 @@ td>table>tbody>tr>td, li[class~="cbi-tab"] { border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; a { color: #5e72e4; + color: var(--primary); } } } @@ -2080,6 +2162,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { margin: 0.25rem 0.1rem 0.25rem 0; color: #fff; border: 1px solid #5e72e4; + border: 1px solid var(--primary); border-radius: 0.25rem; outline: 0; background-image: none; @@ -2334,8 +2417,8 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { width: 0; height: 100%; transition: width .25s ease-in; - background: #5bc0de; - background: var(--bar-bg); + background: #5e72e4; + background: var(--primary); } .cbi-progressbar::after { @@ -2421,7 +2504,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { } .modal p { - + word-break: break-word; } @@ -2605,10 +2688,10 @@ td>.ifacebadge, min-height: 15rem; padding: 1rem; resize: none; - color: #eee; + color: #242424; border: 0; border-radius: 0.375rem; - background-color: #242424; + background-color: #ffffff; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); } @@ -2718,7 +2801,7 @@ td>.ifacebadge, .ifacebox-head.active { background: #5e72e4; - background: var(--bar-bg); + background: var(--primary); * { color: #fff; @@ -3082,7 +3165,7 @@ input[name="nslookup"] { } .modal { - + label>input[type="checkbox"] { top: -0.35rem; @@ -3284,8 +3367,10 @@ input[type="checkbox"] { input[type="checkbox"]:checked { border: 1px solid #5e72e4; + border: 1px solid var(--primary); background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; background-color: #5e72e4; + background-color: var(--primary); background-size: 70%; background-repeat: no-repeat; background-position: center; @@ -3430,7 +3515,8 @@ pre.command-output { } .main>.main-left>.nav>li, - .main>.main-left>.nav>li a, + .main>.main-left>.nav>li>a, + .main .main-left .nav>li>a:first-child, .main>.main-left>.nav>.slide>.menu, .main>.main-left>.nav>li>[data-title="Logout"] { font-size: .9rem; @@ -3728,10 +3814,7 @@ pre.command-output { display: inline-block; } - .main>.main-left>.nav>.slide>.menu, - .main>.main-left>.nav>li>[data-title="Logout"] { - font-size: 1.2rem; - } + .main>.main-left>.nav>.slide>.slide-menu>li>a { font-size: 0.8rem; @@ -3897,782 +3980,3 @@ pre.command-output { } - -@media (prefers-color-scheme: dark) { - body { - background: #1e1e1e; - color: #cccccc; - } - - .login-page .login-container { - - .login-form { - background-color: #1e1e1e; - - .brand { - color: #adb5bd; - } - - .form-login { - .input-group { - &::before { - color: #adb5bd; - } - - input { - background-color: transparent !important; - color: #adb5bd; - border-bottom: #adb5bd 1px solid !important; - border-radius: 0 !important; - border-top: none !important; - border-left: none !important; - border-right: none !important; - box-shadow: none; - } - - } - - .cbi-button-apply { - background-image: linear-gradient(-135deg, #6c61ab 0%, #594ca9 100%); - - &:hover, - &:focus { - background-image: linear-gradient(-135deg, rgb(85, 76, 138) 0%, rgb(72, 61, 139) 100%); - } - } - } - } - - } - - header::after { - background-color: #1e1e1e !important; - } - - - .main { - .main-left { - - background-color: #333333 !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .15); - - .sidenav-header .brand { - color: #ccc; - } - - .nav { - .slide { - .slide-menu { - .active { - a { - color: #cccccc; - - &::after { - background-color: #cccccc !important; - } - } - } - - li { - a { - color: #cccccc; - } - - a:hover { - background: none !important; - } - } - } - - .menu.active { - background-color: darkslateblue !important; - color: #cccccc !important; - - a::after { - background-color: #cccccc !important; - } - } - } - - li { - a { - color: #cccccc !important; - } - - a:hover { - background-color: darkslateblue !important; - color: #cccccc !important; - - - } - } - } - - - &::-webkit-scrollbar-thumb { - background-color: #252526 !important; - } - - &::-webkit-scrollbar-track { - background-color: #333; - } - } - - .main-right { - background-color: #1e1e1e; - } - } - - h2 { - color: #ccc; - background: #333333; - } - - h3 { - color: #ccc; - border-bottom: 0; - background: #333333; - } - - a:-webkit-any-link { - color: -webkit-link; - cursor: pointer; - color: darkslateblue; - } - - - input:-webkit-autofill { - background-color: #3c3c3c !important; - } - - .cbi-value-field .cbi-input-apply, - .cbi-button-apply, - .cbi-button-edit { - color: #fff !important; - background-color: darkslateblue !important; - border-color: darkslateblue !important; - } - - - .cbi-section em { - color: #ccc; - } - - - - header.bg-primary { - background-color: #1e1e1e !important; - } - - - - .cbi-map-descr { - color: #ccc; - } - - .cbi-section { - background: none; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) - } - - .panel-title { - color: #ccc; - background-color: #333333; - border-bottom: 0px; - } - - div>table>tbody>tr:nth-of-type(2n), - div>.table>.tr:nth-of-type(2n) { - background-color: #252526; - } - - table>tbody>tr>td, - table>tfoot>tr>td, - table>thead>tr>td { - color: #ccc; - } - - fieldset>table>tbody>tr:nth-of-type(2n) { - background-color: #252526; - } - - table>tbody>tr>td, - table>tfoot>tr>td, - table>thead>tr>td { - border-top: 1px solid #252526; - } - - #swaptotal>div>div, - #swapfree>div>div, - #memfree>div>div, - #membuff>div>div, - #conns>div>div, - #memtotal>div>div { - background-color: #32325d !important; - } - - #swaptotal>div>div>div>small, - #swapfree>div>div>div>small, - #memfree>div>div>div>small, - #membuff>div>div>div>small, - #conns>div>div>div>small, - #memtotal>div>div>div>small { - - color: #ccc !important; - } - - .node-system-packages>.main .cbi-section-node:first-child .cbi-value-last { - line-height: 1.8em; - - div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { - border: 1px solid #999999 !important; - background-color: transparent !important; - - div { - background-color: #32325d !important; - } - } - - } - - - table>tbody>tr>th, - table>tfoot>tr>th, - table>thead>tr>th { - - background-color: #252526; - border-bottom: black 1px solid !important; - } - - tr>td, - tr>th, - .tr>.td, - .tr>.th, - .cbi-section-table-row::before, - #cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2) { - border-top: 0; - } - - .cbi-rowstyle-2 { - background-color: #1e1e1e; - } - - .cbi-rowstyle-1 { - background-color: #252526; - } - - .cbi-section>h3:first-child, - .panel-title, - h3 { - color: #ccc; - border-bottom: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - - h4 { - background-color: #1e1e1f; - } - - .cbi-progressbar { - position: relative; - min-width: 170px; - height: 20px; - margin: 6px 0; - border: thin solid #999; - background: transparent; - border-radius: 0.2rem; - overflow: hidden; - - div { - background-color: #32325d !important; - } - } - - .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { - background-color: #1e1e1f; - } - - .cbi-button { - color: #ccc !important; - background-color: darkslateblue; - } - - .cbi-section-node { - background: none; - border-radius: 0 0 .375rem .375rem; - padding: 0rem; - } - - abbr { - color: #5e72e4; - - } - - div>table>tbody>tr:nth-of-type(2n), - div>.table>.tbody>.tr:nth-of-type(2n) { - background-color: #252526; - } - - #content_syslog { - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) - } - - #syslog { - color: #ccc; - background-color: #1e1e1e; - } - - #iwsvg, - #iwsvg2, - #bwsvg { - overflow: hidden; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); - background-color: #1e1e1e !important; - } - - .tabs { - background-color: #252526; - } - - .tabs>li[class~="active"]>a { - color: #ccc; - } - - .tabs>li[class~="active"], - .tabs>li:hover { - border-bottom: 0.18751rem solid darkslateblue; - color: #ccc; - background-color: #181819; - } - - .cbi-tabmenu>li>a, - .tabs>li>a { - color: #ccc; - - &:hover { - color: #ccc; - } - } - - .cbi-tabmenu>li { - background: #2d2d2d; - } - - .cbi-tabmenu li[class~="cbi-tab"] a { - color: #ccc; - } - - .cbi-tabmenu>li:hover { - color: #ccc; - background: #2d2d2d; - } - - .cbi-tabmenu>li[class~="cbi-tab"] { - background-color: #181819; - } - - .cbi-tabcontainer>.cbi-value:nth-of-type(2n) { - background-color: #252526; - } - - .cbi-value-title { - color: #ccc; - } - - select, - input { - color: #ccc; - background-color: transparent !important; - border: 1px solid #252526; - box-shadow: none; - } - - select:not([multiple="multiple"]):focus, - input:focus { - border-color: darkslateblue !important; - outline: 0; - - } - - select { - background-color: #1e1e1e !important; - } - - #cbi-dropbear h2, - #cbi-dropbear .cbi-map-descr, - #cbi-dropbear .cbi-map-descr abbr, - #cbi-rc h2, - #cbi-rc .cbi-map-descr, - #cbi-distfeedconf h2, - #cbi-distfeedconf .cbi-map-descr, - #cbi-customfeedconf h2, - #cbi-customfeedconf .cbi-map-descr, - #cbi-download h2, - #cbi-filelist h2 { - color: #ccc !important; - } - - .cbi-value-field>ul>li .ifacebadge { - background-color: #3c3c3c; - } - - .cbi-section-descr { - color: #ccc; - } - - .cbi-input-textarea { - background-color: #1e1e1e; - color: #ccc; - } - - - - .cbi-section-remove:nth-of-type(2n), - .cbi-section-node:nth-of-type(2n) { - background-color: #1e1e1e; - } - - .node-system-packages>.main table tr td:nth-last-child(1) { - color: #ccc; - - } - - .cbi-section-node .cbi-value { - padding: 1rem 1rem 0.3rem 1rem; - } - - .ifacebox { - background-color: none; - border: 1px solid #1e1e1e; - } - - .ifacebox-head { - color: #666; - } - - .ifacebox-body { - background-color: #333; - } - - .zonebadge strong { - color: #333; - } - - .zonebadge>.ifacebadge { - background-color: #3c3c3c; - } - - div.cbi-value var, - td.cbi-value-field var { - color: #5e72e4; - } - - #diag-rc-output>pre { - color: #ccc; - background-color: #1e1e1e; - } - - .node-services-vssr .block { - background-color: #3c3c3c !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); - } - - .node-services-vssr .block h4 { - color: #ccc !important; - } - - .node-services-vssr .status-bar { - color: #ccc; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); - background-color: #1e1e1e; - } - - .node-services-vssr .cbi-section-table-row { - color: #ccc; - background-color: #3c3c3c !important; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, .35) - } - - .node-services-vssr .cbi-section-table-row.fast { - background: darkslateblue !important; - color: #fff; - } - - .node-services-vssr .ssr-button { - color: #ccc; - - } - - .node-services-vssr .incon:nth-child(2) { - border-right: #1e1e1e 1px solid; - } - - #xhr_poll_status>.label.success { - color: #ccc !important; - - background-color: darkolivegreen !important; - } - - .notice { - background-color: darkslateblue !important; - } - - .cbi-input-find, - .cbi-input-save, - .cbi-button-add, - .cbi-button-save, - .cbi-button-find, - .cbi-input-reload, - .cbi-button-reload { - color: #fff !important; - background-color: darkseagreen !important; - border-color: darkseagreen !important; - } - - .cbi-button-reset, - .cbi-input-remove { - color: #fff !important; - background-color: darkorange !important; - border-color: darkorange !important; - } - - .cbi-page-actions .cbi-button-apply, - .cbi-section-actions .cbi-button-edit, - .cbi-button-edit.important, - .cbi-button-apply.important, - .cbi-button-reload.important, - .cbi-button-action.important { - border: 1px darkslateblue solid !important; - } - - - - fieldset[id^="cbi-apply-"] { - background-color: #333333; - } - - #detail-bubble>div { - border: 1px solid #ccc; - border-radius: 2px; - padding: 5px; - background: #252525; - } - - .ifacebox-head.active { - background-color: #32325d !important; - } - - header .fill .status span[data-style="active"] { - color: #ccc !important; - background-color: darkolivegreen !important; - } - - #cbi-wireless .td, - #cbi-network .tr:first-child>.td, - .table[width="100%"]>.tr:first-child>.td, - [data-page="admin-network-diagnostics"] .tr>.td, - .tr.table-titles>.th, - .tr.cbi-section-table-titles>.th { - background-color: #252526; - border-bottom: black 1px solid !important; - - } - - .network-status-table .ifacebox-body .ifacebadge { - background-color: #252526; - border-bottom: 0; - box-shadow: none; - } - - td>.ifacebadge, - .td>.ifacebadge { - - background-color: darkslateblue; - border: 0; - } - - .btn.danger, - .cbi-section-remove>.cbi-button, - .cbi-button-remove, - .cbi-button-reset, - .cbi-button-negative, - .cbi-button[value="Stop"], - .cbi-button[value="Kill"], - .cbi-button[onclick="reboot(this)"], - .cbi-button-neutral[value="Restart"] { - border: thin solid darkorange !important; - background-color: darkorange !important; - } - - .cbi-section, - .cbi-section-error, - #iptables, - .Firewall form, - #cbi-network>.cbi-section-node, - #cbi-wireless>.cbi-section-node, - #cbi-wireless>#wifi_assoclist_table, - [data-tab-title], - [data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), - [data-page="admin-system-opkg"] #maincontent>.container { - background: #1e1e1e !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - - div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { - background: transparent !important; - } - - [data-page="admin-system-admin"] .cbi-map h2, - [data-page="admin-system-admin-password"] .cbi-map h2, - [data-page="admin-system-admin"] .cbi-map .cbi-map-descr, - [data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { - color: #ccc; - } - - [data-page="admin-system-flash"] { - .modal { - label>input[type="checkbox"] { - top: -0.35rem; - } - - .btn { - white-space: normal !important; - background-color: darkseagreen; - } - - .alert-message { - background-color: transparent !important; - } - - .danger { - border: thin solid darkorange !important; - background-color: darkorange !important; - } - } - } - - .cbi-value input[type="password"]+.cbi-button-neutral { - background-color: darkslateblue !important; - } - - .btn, - button, - select, - input, - .cbi-dropdown { - border: 1px solid #3c3c3c !important; - } - - - .cbi-dropdown .preview { - color: #ccc; - } - - .cbi-section-table-row { - background-color: #1e1e1e !important; - } - - .modal { - background-color: #1e1e1e; - } - - .cbi-button-positive { - color: #fff !important; - background-color: darkseagreen !important; - } - - [data-page="admin-system-flash"] legend { - color: #ccc; - } - - .logout:before { - color: #adb5bd !important; - } - - .cbi-dropdown[open] { - border-color: darkslateblue !important; - } - - .cbi-dropdown[open]>ul.dropdown { - background: #252526 !important; - color: #ccc !important; - box-shadow: none; - border: 1px solid #3c3c3c !important; - - - } - - .cbi-dropdown[open]>ul.dropdown li { - color: #ccc; - border-bottom: 1px solid #3c3c3c !important; - } - - .cbi-dropdown[open]>ul.dropdown>li[selected] { - background-color: darkslateblue !important; - border-bottom: 1px solid #3c3c3c !important; - } - - .cbi-dropdown[open]>ul.dropdown>li.focus { - background: darkslateblue; - outline: none; - } - - .ifacebadge { - background-color: #333333; - } - - .cbi-dynlist>.item>span { - border: 1px solid #3c3c3c !important; - } - - .cbi-page-actions .cbi-button-apply, - .cbi-section-actions .cbi-button-edit, - .cbi-button-edit, - .cbi-button-apply, - .cbi-button-reload, - .cbi-button-action, - .cbi-button[value="Submit"], - .cbi-button[value="Upload"], - .cbi-button[value$="Apply"], - .cbi-button[onclick="addKey(event)"] { - background: darkslateblue !important; - } - - .btn.primary, - .cbi-page-actions .cbi-button-save, - .cbi-page-actions .cbi-button-apply+.cbi-button-save, - .cbi-button-add, - .cbi-button-save, - .cbi-button-positive, - .cbi-button-link, - .cbi-button[value="Enable"], - .cbi-button[value="Scan"], - .cbi-button[value^="Back"], - .cbi-button-neutral[onclick="handleConfig(event)"] { - background: darkslateblue !important; - } - - [data-page="admin-system-opkg"] h2 { - - color: #ccc !important; - } - - @supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { - .login-page .login-container .login-form { - -webkit-backdrop-filter: blur(var(--blur-radius-dark)); - backdrop-filter: blur(var(--blur-radius-dark)); - background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); - - } - } -} - -@media (prefers-color-scheme: dark) and (max-width: 480px) { - .node-status-iptables>.main div>.cbi-map>form { - background-color: #1e1e1e; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); - } - - -} \ No newline at end of file diff --git a/luci-theme-argon/htdocs/luci-static/argon/less/dark.less b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less index c1285dd4a..8143723e5 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/less/dark.less +++ b/luci-theme-argon/htdocs/luci-static/argon/less/dark.less @@ -1,3 +1,4 @@ +// compress: false , sourceMap: false /** * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template * @@ -24,7 +25,7 @@ * Login background * https://unsplash.com/ * - * Licensed to the public under the Apache License 2.0 + * Licensed to the public under the Apache License 2.0 */ body { @@ -61,11 +62,12 @@ body { } .cbi-button-apply { - background-image: linear-gradient(-135deg, #6c61ab 0%, #594ca9 100%); + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; &:hover, &:focus { - background-image: linear-gradient(-135deg, rgb(85, 76, 138) 0%, rgb(72, 61, 139) 100%); + opacity: 0.9; } } } @@ -113,7 +115,8 @@ header::after { } .menu.active { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; color: #cccccc !important; a::after { @@ -128,7 +131,8 @@ header::after { } a:hover { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; color: #cccccc !important; } } @@ -163,7 +167,8 @@ h3 { a:-webkit-any-link { color: -webkit-link; cursor: pointer; - color: darkslateblue; + color: #483d8b; + color: var(--dark-primary); } @@ -175,8 +180,10 @@ input:-webkit-autofill { .cbi-button-apply, .cbi-button-edit { color: #fff !important; - background-color: darkslateblue !important; - border-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; } @@ -316,7 +323,8 @@ h4 { .cbi-button { color: #ccc !important; - background-color: darkslateblue; + background-color: #483d8b; + background-color: var(--dark-primary); } .cbi-section-node { @@ -361,7 +369,8 @@ div>.table>.tbody>.tr:nth-of-type(2n) { .tabs>li[class~="active"], .tabs>li:hover { - border-bottom: 0.18751rem solid darkslateblue; + border-bottom: 0.18751rem solid #483d8b; + border-bottom: 0.18751rem solid var(--dark-primary); color: #ccc; background-color: #181819; } @@ -410,7 +419,8 @@ input { select:not([multiple="multiple"]):focus, input:focus { - border-color: darkslateblue !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; outline: 0; } @@ -515,7 +525,8 @@ td.cbi-value-field var { } .node-services-vssr .cbi-section-table-row.fast { - background: darkslateblue !important; + background: #483d8b !important; + background: var(--dark-primary) !important; color: #fff; } @@ -535,7 +546,8 @@ td.cbi-value-field var { } .notice { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; } .cbi-input-find, @@ -563,7 +575,8 @@ td.cbi-value-field var { .cbi-button-apply.important, .cbi-button-reload.important, .cbi-button-action.important { - border: 1px darkslateblue solid !important; + border: 1px #483d8b solid !important; + border: 1px var(--dark-primary) solid !important; } .btn[value="Dismiss"], @@ -575,8 +588,8 @@ td.cbi-value-field var { .cbi-button-neutral[value="Disable"] { font-weight: normal; color: #fff; - border: thin solid darkorange!important; - background-color: darkorange!important; + border: thin solid darkorange !important; + background-color: darkorange !important; } fieldset[id^="cbi-apply-"] { @@ -619,7 +632,8 @@ header .fill .status span[data-style="active"] { td>.ifacebadge, .td>.ifacebadge { - background-color: darkslateblue; + background-color: #483d8b; + background-color: var(--dark-primary); border: 0; } @@ -684,7 +698,8 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { } .cbi-value input[type="password"]+.cbi-button-neutral { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; } .btn, @@ -722,7 +737,8 @@ input, } .cbi-dropdown[open] { - border-color: darkslateblue !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; } .cbi-dropdown[open]>ul.dropdown { @@ -740,12 +756,14 @@ input, } .cbi-dropdown[open]>ul.dropdown>li[selected] { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; border-bottom: 1px solid #3c3c3c !important; } .cbi-dropdown[open]>ul.dropdown>li.focus { - background: darkslateblue; + background: #483d8b; + background: var(--dark-primary); outline: none; } @@ -767,7 +785,8 @@ input, .cbi-button[value="Upload"], .cbi-button[value$="Apply"], .cbi-button[onclick="addKey(event)"] { - background: darkslateblue !important; + background: #483d8b !important; + background: var(--dark-primary) !important; } .btn.primary, @@ -781,7 +800,8 @@ input, .cbi-button[value="Scan"], .cbi-button[value^="Back"], .cbi-button-neutral[onclick="handleConfig(event)"] { - background: darkslateblue; + background: #483d8b; + background: var(--dark-primary); } [data-page="admin-system-opkg"] h2 { @@ -805,4 +825,4 @@ input, } -} \ No newline at end of file +} diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer.htm b/luci-theme-argon/luasrc/view/themes/argon/footer.htm index cdb46bb85..a4e1df4b2 100644 --- a/luci-theme-argon/luasrc/view/themes/argon/footer.htm +++ b/luci-theme-argon/luasrc/view/themes/argon/footer.htm @@ -7,13 +7,13 @@ Have a bug? Please create an issue here on GitHub! https://github.com/jerrykuku/luci-theme-argon/issues - luci-theme-material: + luci-theme-material: Copyright 2015 Lutty Yang - - Agron Theme - https://demos.creative-tim.com/argon-dashboard/index.html - Licensed to the public under the Apache License 2.0 + Agron Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 -%> <% local ver = require "luci.version" %> @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm b/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm new file mode 100644 index 000000000..a4e1df4b2 --- /dev/null +++ b/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm @@ -0,0 +1,46 @@ +<%# + Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template + + luci-theme-argon + Copyright 2020 Jerrykuku + + Have a bug? Please create an issue here on GitHub! + https://github.com/jerrykuku/luci-theme-argon/issues + + luci-theme-material: + Copyright 2015 Lutty Yang + + Agron Theme + https://demos.creative-tim.com/argon-dashboard/index.html + + Licensed to the public under the Apache License 2.0 +-%> + +<% local ver = require "luci.version" %> +

52_`cE(zZMEpNgo`EY*4G)I09>a1 z4SeD7{-OrQat}R%OhD*NOI+vaJFz3u@C26DFe1QxN3PIBlTUN_^|Tufs;WoY zmF{h!961dyqO~?ciYp7q(?Vq0YO7`=5?$-FV+eCHF8MQ?3zi_~E=o>q#r&Ll_I7BD}3fA-xXZB!PA1J9RU z8^OTwjj~)ISR+^4ya_KyB||(3nAfd%n>SM{x7&kAmay7YNPv}m^r1~#W~?&-?<4YW ze{KePG{^_XUR|O!S~$%%R|QnzSgNf>m~I48s3jsvsz+6fKNH;=rZw2Ln%lE_!L-(6 zT!FJm#J9xf=gB;VBOau3+B0W@Jo-lbY493wGUg)n=4QTNGqmYwI@ezHOkN7GQysdi9&PKBzo~6;km9{HhCUTe$m;e zUm%rJJ(F#D-XZfy-gD-8yA0;UQuYCMJQP3z)aLAMD{3G0;dw^p zIIX8XU&6+s@3>UWT~N$Sb?`&e#`<=9$=@>Kez5ZtPRAovGo|;D_#Y z#?sa)AIK{)rrb(ABLcTyh1zV|u49Ah_q3b5d{h_`@z8%KD#)Y%$r~{?-?zsq2j|a3 zIOj6h>XLwAj|8LBG-bB>dVNy(ix8{n^Z%s9?oBLBG~afWu?Oj<7&ybx%CPs3y}b zYZ!mitkVXr`hid84HY!22EpKW@8z`#0bBdxg05`r;X|C{voYX5W60 z`}S(5+Q~>1$AE&2`d&74Vv5#xPJ5ch^(Z7Rt038@Goin10gC)hRPibr8_t%IAyqgq;UEeo_S|O?*q54%mqr8tBOeFv{ie^)7{_FDMi1cg8pkXG3c;*j6PF?rMBuMKGr6TT#_!n&c4Ff0<`jQ=Gt zLAlxaE%n1m^kFC-u~9^Fprvlj_iVpgzY_)QK1Z)We|Z5u-Il=0LH$kP>i09k@Q-Uo z{Ht^-)Yn+DY;q5&J4I8b(y2; zIk5IB_TJ;zWuKbFC3I3X@0Vutsd%^IA=<~;$IdIA^BAHn2d;7wN$Se>Wst#+uHxin zn+S6zJjb>5h=bOvs?Ot7V~AhPy@S8MH-EQDWg7efRVNi3Gn)1h_AtrH$Hrg<=}(vD zV=h&Z#km^Igtpo9sK)o0*aQ@^P#QRKS9|!}=;oY-_DC+gxE|!~qRJJvS)m7|7Y&jn z`mUPH^*yK9C;#oE0N|Latev|sMG3>(<+M%Z3lfX?fTxI!QzXtbgp52y`UxYJcOyuj zZP6szjX%Reof2m?@OrQ2sf%*m-K!}reH*Wnqc^-`3**l|Y8{JUCm>G63T+-9{Kk%<9_vWI*$%IbkI9p{04p` zcG2IHgUa8qv3p9Hlt0} zLa2u$={SPz)uiE~oOi~P*?L<5XF?s{0KLbjyqJ#$?83m$8KJcqFTc^z{^;v%O>3pH zjgMr~dt)4__hXRfbCAAMR<=rgrY3C4t8%8*Zp3lbs9}L_+qsS;qC9lSnxA8Y%$!pz zi>P)zbfGthOO6XjT9$@aFxK?>jd>rV#fYMcQ4q;%T_;Y5SLEfewbrEV?us!-EzaaL z>qSjNd)2(`3_szm>;#c?ci|X10v|D-3xR*zz<<;%@$EHxeR^n9*Q_%pa%zU2pTu?K zS?PPmt$gw&pjqhB3g@Z5|9=;c>@`+aZm2QB)AIN}5#~D&U1<{&t8wKNW!<}Y#iDic z@G3R^p~!L9cg~Lm^wW5`$){ZQD2rc2IHRKu1G%T(8gR$yea*x=&_oV!PKR~TiXMI;GBOADUlW(9CtbIx3L%9Xsp)B z(}i{n&S+H)FHY^5&+#5&v;w zff9$>yb_c0i_nV2N3=h2o(H`MNMwEg>hg4b?79}m{{vpkPaJNwJI!Z%1Ep7QaIT1n z7_aqHNdgX*vR<9fr`ky`gZeBRPe)@xwSmjLM$pWU@P$U`Wu^j z`)&OZKXEeYus<+{bFY7XkYOe4Gu9GbT3iS#rh~)q`Fr-$9x_?JYhO3JpE$-iPybK< z23~djgH*Z3E!8{{HwI;xd-Y4ZA+$ospo+VtoSpO30Ff{>^gs*o7&8vR5aX*rmpKsg zlDU*u;-95c7?E+bNkm=b6VWm;%N#|tS$*%928MGj1wljGw8k>2a+uMt|@cx|;MA0DA_p#F0qa?f2Qo*e_D(dBa?LMRRrX!5;F> z4Jdlu3|?GC3_{OeetL(fP`Pyf zsC@Dx1e|!ek4??H7w@|kIA9h5nwV)LAKM3-^PMSh*A_#31!Vx!(#jGF=(5aa_g;CM zZb=>PBgJ26;w+FjBAGPaN3#s>SvdCW$kAhB>+aL@Fh=%BWm_eID_G>6B`s2g_JYks z?*7*7J8OlGCv_otslOvIG4R#lZ4RdCk{dl24AG}e-`K<-bq z8Gp#6CKPtF4>Nk2*TOFuTlhVJMT$1mx6au9_;P))acb~XdaNYc#{4v3;;WxX^Zu(2 znF4GeEbveL@6W~m6bvl88}k%Q5;!L*a;5nFT)6Pk`L#d{Rk%r~bN}M#>;4j>xL~}c zFxp$~c)_NHnxCfyPhDcg>7<)UQvi=`r`du1Dg2X(NvR+ivg`~O)IzIE#=l6v(;aRg%XSU#>>#RPm6D|eIrgMQIa z=0-gh7pNNVyveVw##@XHP>5C~W<(o&7$RYLvL{#6?(BfFGYX1Jfb)`0X~md1d+avS zSDQ`nnVi^F%S-EN0E;|J!Viv305Ayvv>}bbDU!q5`KR(J%Q-lm|4}Rb zYBABCOQ%`(+q8~OBksM|)UKz(fkqJ!*O>1Qlj?+ zoLw-MQn9lJYl0T2G+ghL((hmSx{+rUcevXr<%fS|^ww)S)!ehp+gmTLtN&*z>m7IU zWRS-U8!s*b*1ze-lKjhqvW1BW85-eCLV`1)>TpVjonnFup0?5Amc9OU4*&k(8Hs)? zbZ?ho<38cT8Y+GqWU*7wi*o|c-3Pdn=;sf9&qOQ+OzL3an1O%a2L~tMpC%eZ?e(_G zHh0x`H(gm^KXESMI42$*7U__I!f%-ZK}h>(5c*|Z@Q6+WjSW!!a6#O##~D2FIMOG{ zYk!?Ha-u~`26h!>>eZ(oB@mK;^-iYQS=z>*!saS63h6j?XkuyBD$#Wd%ao`UahopoR(6P^DV+8U@-hpO=Ivy#h=7I^p{s-@YEv*wi)hJcu!UEFU9Kb?_+V&RWiWN> ztj20yGK6UvqB~@Fi0I;wRic!Wui+KgCcz+Cmz9yZwgTL}$Vo~We;O1G#+gPok% zJcsf06J$9^=usCm0ZLGf$F@JLBCE%4wd{ei3kQ+buVA7M8(zTeQz^#_6{^!Dyk@}@4e8pHdI=u1Jb zymFIazVH;ZM)*rj|4@N!x~z6Q327ukaMcplf9HR2zVZ=SnVX0q9`zDlVvb#BivXy!OK;FHz0RmQ5@7Z?n4)5pH$c zotJ!EOGHDqGj7}hrG~Y|IyD=5Iv@e{e!KEVt$F+dbVQVV3&x(m6|R#yFv3LuO;PrM)71_DX+G>b*m{X0 zR%RMc9J$fX9(UjT`AQ`U>4f)w&oxwbzx(R0K0G_Dv4%ChCGQ6=Vy&}6F%)gD{{^KbB zd5$NvQCrDt&LmA_D9ckl=N{IeMKHvoC0hI!(=!Qw@EzK5CcUKxcCQ$Y`>cZ9qk3S}G>?El(Jac0G?>Rpu7Fhx;c<5wxk2zqG68orrO%lF z2AjDtw@X>BcNn6(o64Mer{SU@?U>R+a76bIGEfrk3I6bq$+wFGFoTpZ^jA08#q&kc zXBV4m((j`VcA_fv8mKp1O3=Pj6B}r0bm4|2dqG{;{%2K?MPKK%os+S_uGCMQffNF+ z5c4>S@o@>ev)C$#57TM9PkX#2^N7>_oioDpSJBQl;Y{z z58JXw@PuPkAv`b`4AOPi^{D!A_V(`ZQRX)Ht9ut%eeIK9`r7QqS7gur=&ye%{ik$? z&z?vIMCdp9dln3PB_|2($Q#+WXD;eowqc8F0Nl?t_xF_?c!)ps%BeWWRi@-9B#>~h zT7nWDBhLr}HS4r<0rokQP`oI0KVEg!sG!)7AzeQn=iQm@#N1EavUT`oUyw0Gk5?&Od>9qfVl^+;8@Mjs1Cm59qkDs7lo&(_N1z z2ri-EpRElkfX*mwxgdy_YE1G0*|lw*?0Q7vlItOhI^UGdYRKZ^o(br>1$OFk6lB#z zoSbOQG?9dnewHv2!_Qy5iFF$jE+y#MH}E#`sO*F~p;iLB zb$nCD2OnhfW@~0Pyj!a#;0o2rjgF}^gKl?5Qs8i%C9P~dutpN8lsXntz1r0)FD_RU ziuV_9oSRXpiZltVD5h}}!vf4toCW7^&enfEZFmW1w|qBtu^Ha3%G-m}#%(tltG*J} z96p?zt-e`Rf(=q(@y1ENf>Z^#7kB@(=RZw7gQ9>}&t?MVN2SNxY4ZL)0u%J7k01@e zlju+b&+kW7#rv7!KpC2SO9OifVVfT>Q!F8#VsBZ*wns7B+k3x8;I=RGsMGyz5U)as zQ##H5$y<89?AaD{Ku{ST3nws>WCb&hhn=5&8jQR`8~g(KIokyN6`6m~!2G6zDZI3* z!@U#2EU>Hf8YhJ0aiqycRKoCpcBfAlhax&+V&+jqhS+?(QK@7tn18owQI%7;*SfY_gQb4G+ zNdcofIjVw{F^_2+;!&}9q>!Np4{NLDs3PNvV_b_Rh1B>EzV~q_O674YObbig@0n=e zhs`}Vj}Yk9P9#;Ds64w_GbFHVq*Dax7tcXo@s$Czn0 z?3{|VOVG&-%5*-(Yjd?Se#dix{>Eqaa>7Aiv4_#&t6Vl8E7qy6T;mKG_`bamh5q*PYT+ji?e1=%cHj(@ zK3m^?D+I3Gygu4wo_ck|u1wR*hCy~9JeJnjQ(r_kZGW+P$C|=m7qIY=yp2hso5^{( zE{^geai3e$cS-!WVdE0&H5lJJYQ28*J7Im=wgPS|W$?<0p`8oyNzSGv(-u44-ioyu z-DTwmxkn1i*~9rt#WGMGZPB4pQ9I&q<-)Aw`i9S*S3mKOen0SLipnj&p1ZzHT%EGA zoA*Mwt)C(_NBx5?m~>%!IlmI?(#cvBM%jpUoJ`N4e_qT4A0lQKrOR5SdOdo_dixC` zTlPuoP0q1`^+dX#INs)0Sr!{+;T7cy2`bz#0&bE84iu?$q+}I;)UTw=Lq;3qt4F$h z$)6+Q2iRfVaBMb$nMnY^G+V-3#cBzz zY+@!pf6^e|^srnhlHBC;f=&*@{U5tBau$v;9)t&eZjq0;8>a4*>wbRG*(& z+~yaKzE!YSmYp-{h9vXi(JxIVmX=?)Td)##&oMKp*GH(gWl7@a%o56my`B~{TycFN zp}Hk(X)Kzn<%sVY%qVCSm!%TMq&C|tF4THM4j!LFn*5v>k0YFpSoci?{-%DG_u^iE ztWEzmp?DioC<2?E2|2ej*0Um|^Hk(K3>VYm`pENuwWYAhG}Abkz(np`vja#1vAYkR ztA%mlCmAn-iul0UbxEe*BZsMt(4r2McdeHbsP;OZV?7&*ktYvEFJ)V+H~R6f^Ox+D^+o6S9P?Br2xFuC-;ul$G{K;|x*~_nD-h{Q1gWHk(LQB%}vA@{Lnx6Jkn3--1!@{|o;Nx|anX?>F*GMXOc9%#zmvd=wDmS_F zmKGy@Z*bxP6Z5epS3!|;E5CAaZCbTwo!Id%xms7IghYG^VLS6;4`O0sayOi_POwj` zMKjz>cBf5iB8kJH=U^|=D9IIemub{O>{XT`6B9RLrV@c6dQijvu%2>2gOCsUL@}1K zH^mCW{~4P!>R@bejNEzIB*4JLllCGaBBo}K0JPldk;;!BKiZoOp5dMS5mCh*8v3%a zGRw@x3ehl6so7+_#yu8Z+leP6uK9SMc}c3V0fHEp&}Cv}hNGKw&Ar^7q(WzFQPGeT zr*Q-4oyq4-dC)ieqDgClsIss))uZEG$%|=|*r8-sRuM3v-^sDlw1Kn3+yaH#L$MUY z86U~B=xCm=rGZS-=nS5foHY+x#I}e0;bfZy=T@P#JiK!s%W#_Xg#^6#DykSO?+R59 z=w&7q(vUo+*;&RohhkN2K2N#!H@C<8+{MnNWg!{Jw)3c|Wzz|-k59o=DZz=#ss|HYvxf)dBc2bR^lGDnM%!$&t&Oa@ zCo7~?le#8pML1{Sb>?^f$fm->d zwyk~mwD2Px^%}E<-pjVoauW|Z%gzsBl)(!GshbRLz3S}_AB?%Jr5wX3w8QV9{nD&-0%{}{ltw|Z{# zI8pl@6Vn~rdIK9CfZx{v~;9nhku(oy1g0W z63sEO$11@pt~FF(c>moCTMHEjb|$5-AmH9E=>};z;7XT$@wW*7dflNKk4FVDsrV)o z!BgcM3Uv+x{mH$ZcJJQxa4^}tXD~LaNsf;2%7hAuvp7+dPNk7>>CPbVP@i>qySm^b zHpj)n+7tckAGC~KWQcQfxKqVXu83YNt01Q}NnZpx{jH_NRMI?OAM_+&fRqX z+Ustq2_`((ihe6dlag$><@GkexV$jNQDt+#_LB)!c9CM;{8&l&iXlr^sH@pi)g*tt zrM~n7A)`SxVIWjO2f~%U#HB^Pk&S|K=a=XieO9STE7nP?S{pT+b}g>dW@QQzUda0v ztMc|$(u?O^d0oXaxjh~d0Nu$9nc7Pcgk>ttmY zX{|0WW}2a3>=~(*f@v6aZTS0@UO6I`&B}9g-6;oh0y%q}fu(GY$TyaTm=*_6JlvqD z$BX#juRrs@-nk77wD0E`Nc##oEl*_Y-|LM^+bw*!9}q2mlXU4ROm7#8gLAu8fJuO7 z*&s>GaRqn$-t$btvMGwace~a6e8lsw4qM8y)V?$uRWq4Xw`b`@dmHv-7}voOyAd}8 z#dWl%9o?A=2$C0oFgW9Zm6A*`ZVwbP@Br8J+iA@XjrFboF&7z?g@#Iku}LP=TE&ks zl5*>c_Pbx;PNO?S^!(4(CX*f$5S7~ZgPMUMQw|L*XCUlWY0R=LURNf>hm3%`9=3L15IdHXpenH-b$GI`yQ|IyQ^k#CWOquQ>!*d!5lZ>U5ZD@E%vnq?l`qZx7k^B_kkurO6& zSz$(&$nqiK;1JQ9Il>YN0(zRM-YLP!?KqvT$_+iM1J`L{WfLWPg-pXBKV*_{XxMKp z-4Z%v1GnqsX>Q; zAfBt+0w=|R7{oKB1WpgGMe=jGl_A^MGTl=bI+@%w$arp@U}yz?^(>39pTMn78eOY$ zUYf)~X50&=|8?qdaQ<;3)4zs&Txu|Jk!~{04DvAi#CiGNpCr|n-5et77>5S%%DDRz z2p-rDOIDykR}<&&f`^C59=@!dz$`IOV3ui=ZJ-b78B>W)U~LF&B#<~=BCkE_xqnHuC ?@Ps4J#L1b@yTXJK07_F;-CIu>*o89f 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 * https://github.com/LuttyYang/luci-theme-material/ * @@ -26,6 +26,8 @@ @import url("fonts.css?v=3"); @import url("pure-min.css?v=1"); :root { + --primary: #5e72e4; + --dark-primary: #483d8b; --main-color: #09c; --header-bg: #09c; --header-color: #fff; @@ -50,7 +52,6 @@ --gray-dark: #32325d; --light: #ced4da; --lighter: #e9ecef; - --primary: #5e72e4; --secondary: #f7fafc; --success: #2dce89; --info: #11cdef; @@ -281,6 +282,7 @@ abbr { cursor: help; text-decoration: underline; color: #5e72e4; + color: var(--primary); } hr { margin: 1rem 0; @@ -294,11 +296,6 @@ hr { ***************************/ .login-page { height: 100%; - background-image: url(../img/blank.png); - background-repeat: no-repeat; - background-position: center; - background-size: cover; - transition: all 0.5s; } .login-page .video { position: absolute; @@ -310,7 +307,6 @@ hr { background-color: #000; background-color: var(--darker); overflow: hidden; - pointer-events: none; } .login-page .video video { width: 100%; @@ -369,7 +365,8 @@ hr { width: 100%; min-height: 100%; max-width: 420px; - background-color: #ffffff; + background-color: #fff; + background-color: var(--white); } .login-page .login-container .login-form .brand { display: flex; @@ -377,6 +374,7 @@ hr { align-items: center; margin: 50px auto 100px 50px; color: #525461; + color: var(--default); } .login-page .login-container .login-form .brand .icon { width: 50px; @@ -416,6 +414,7 @@ hr { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #525461; + color: var(--default); font-size: 1.5rem; position: absolute; z-index: 100; @@ -428,6 +427,7 @@ hr { height: 1px; bottom: 0; border-bottom: 1px #5e72e4 solid; + border-bottom: 1px var(--primary) solid; transform: scaleX(0); transition: transform 0.3s; } @@ -441,9 +441,11 @@ hr { box-sizing: border-box; transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); color: #525461; + color: var(--default); border: 0; border-radius: 0; border-bottom: 1px solid #fff; + border-bottom: 1px solid var(--white); background-color: transparent; background-clip: padding-box; box-shadow: 0 3px 2px rgba(233, 236, 239, 0.05); @@ -467,12 +469,14 @@ hr { box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 50px 0px; font-weight: 600; font-size: 15px; - color: #ffffff; + color: #fff; + color: var(--white); text-align: center; width: 100%; cursor: pointer; min-height: 50px; background-color: #5e72e4 !important; + background-color: var(--primary) !important; border-radius: 6px; outline: none; border-width: initial; @@ -481,12 +485,12 @@ hr { border-image: initial; padding: 10px 0px; margin: 30px 0px 100px; - transition: all 0.3s; + transition: all 0.3s !important; letter-spacing: 0.8rem; } .login-page .login-container .login-form .cbi-button-apply:hover, .login-page .login-container .login-form .cbi-button-apply :focus { - background-color: #5065d8 !important; + opacity: 0.9; } .login-page .login-container footer { box-sizing: border-box; @@ -497,8 +501,11 @@ hr { justify-content: space-evenly; margin-top: auto; padding: 0px 0px 30px; - color: #525461; z-index: 10; + color: #525461; + color: var(--default); + position: absolute; + bottom: 0; } .login-page .login-container footer .ftc { position: absolute; @@ -547,7 +554,7 @@ small { top: 0; float: left; width: 15%; - width: calc(0% + 20rem); + width: calc(0% + 15rem); height: 100%; background-color: #fff; background-color: var(--menu-bg-color); @@ -563,6 +570,7 @@ small { .main-left .sidenav-header .brand { font-size: 1.8rem; color: #5e72e4; + color: var(--primary); font-family: "TypoGraphica"; text-decoration: none; text-align: center; @@ -583,7 +591,7 @@ small { .main-right { float: right; width: 85%; - width: calc(100% - 20rem); + width: calc(100% - 15rem); height: 100%; transition: all 0.2s; } @@ -619,6 +627,7 @@ header::after { height: 2rem; width: 100%; background-color: #5e72e4 !important; + background-color: var(--primary) !important; } header .fill { padding: 0.8rem 0; @@ -657,11 +666,12 @@ header .fill .status { right: 1.25rem; float: right; } -header .fill .status span[data-indicator="poll-status"] { - display: block; +header .fill .status span[data-indicator] { + display: inline-block; font-size: 0.8rem; font-weight: bold; padding: 0.3rem 0.8rem; + margin: 0 0.5rem; white-space: nowrap; text-decoration: none; text-transform: uppercase; @@ -750,26 +760,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { .main .main-left .nav { margin-top: 0.5rem; } -.main .main-left .nav li { - padding: 0.5rem 1rem; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.main .main-left .nav li a { - display: block; - color: #5f6368; - color: var(--menu-color); -} -.main .main-left .nav li.slide { - padding: 0; -} -.main .main-left .nav li.slide ul { - display: none; -} -.main .main-left .nav li.slide .menu { +.main .main-left .nav > li > a:first-child { display: block; margin: 0.1rem 0.5rem 0.1rem 0.5rem; padding: 0.675rem 0 0.675rem 2.5rem; @@ -780,28 +771,28 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { transition: all 0.2s; position: relative; } -.main .main-left .nav li.slide .menu.active { +.main .main-left .nav > li > a:first-child.active { color: #fff; background: #5e72e4; background: var(--primary); } -.main .main-left .nav li.slide .menu.active::before { +.main .main-left .nav > li > a:first-child.active::before { color: #fff !important; } -.main .main-left .nav li.slide .menu.active::after { +.main .main-left .nav > li > a:first-child.active::after { transform: rotate(90deg); color: #fff !important; } -.main .main-left .nav li.slide .menu:hover { +.main .main-left .nav > li > a:first-child:hover { cursor: pointer; color: #fff; background: #5e72e4; background: var(--primary); } -.main .main-left .nav li.slide .menu:hover::before { +.main .main-left .nav > li > a:first-child:hover::before { color: #fff !important; } -.main .main-left .nav li.slide .menu::before { +.main .main-left .nav > li > a:first-child::before { font-family: 'argon' !important; font-style: normal; font-weight: normal; @@ -816,72 +807,27 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { transition: all 0.3s; content: "\e915"; color: #5e72e4; + color: var(--primary); } -.main .main-left .nav li.slide .menu::after { - position: absolute; - right: 0.5rem; - top: 0.8rem; - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -moz-osx-font-smoothing: grayscale; - content: '\e90f'; - transition: all 0.15s ease; - color: #ced4da; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - transition: all 0.3s; +.main .main-left .nav li { + padding: 0.5rem 1rem; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: 0; } -.main .main-left .nav li.slide .menu[data-title=Status]:before { - content: "\e906"; - color: #5e72e4; +.main .main-left .nav li a { + display: block; + color: #5f6368; + color: var(--menu-color); } -.main .main-left .nav li.slide .menu[data-title=System]:before { - content: "\e90a"; - color: #fb6340; +.main .main-left .nav li.slide { + padding: 0; } -.main .main-left .nav li.slide .menu[data-title=Services]:before { - content: "\e909"; - color: #11cdef; -} -.main .main-left .nav li.slide .menu[data-title=NAS]:before { - content: "\e90c"; - color: #f3a4b5; -} -.main .main-left .nav li.slide .menu[data-title=VPN]:before { - content: "\e90b"; - color: #8965e0; -} -.main .main-left .nav li.slide .menu[data-title=Network]:before { - content: "\e908"; - color: #8965e0; -} -.main .main-left .nav li.slide .menu[data-title=Bandwidth_Monitor]:before { - content: "\e90d"; - color: #2dce89; -} -.main .main-left .nav li.slide .menu[data-title=Docker]:before { - content: "\e911"; - color: #6699ff; -} -.main .main-left .nav li.slide .menu[data-title=Statistics]:before { - content: "\e913"; - color: #8965e0; -} -.main .main-left .nav li.slide .menu[data-title=Control]:before { - content: "\e912"; - color: #5e72e4; -} -.main .main-left .nav li.slide .menu[data-title=Asterisk]:before { - content: "\e914"; - color: #fb6340; -} -.main .main-left .nav li.slide .menu[data-title=Logout]:before { - content: "\e907"; - color: #adb5bd; +.main .main-left .nav li.slide ul { + display: none; } .main .main-left .nav li.slide:hover { background: none; @@ -893,9 +839,10 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { .main .main-left .nav li.slide .slide-menu li { position: relative; border-radius: 0.375rem; - margin: 0.2rem 0; + margin: 0; padding: 0.5rem 0rem; background: none; + list-style: none; } .main .main-left .nav li.slide .slide-menu li a { white-space: nowrap; @@ -909,6 +856,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { width: 0; height: 2px; background-color: #5e72e4; + background-color: var(--primary); transition: all 0.2s; } .main .main-left .nav li.slide .slide-menu li:hover { @@ -932,6 +880,7 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { width: 100%; height: 2px; background-color: #5e72e4; + background-color: var(--primary); transition: all 0.2s; } .main .main-left .nav li.slide .slide-menu .active:hover { @@ -940,6 +889,123 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { .main .main-left .nav li.slide .slide-menu .active:hover::after { width: 100%; } +.main .main-left .nav li .menu { + display: block; + margin: 0.1rem 0.5rem 0.1rem 0.5rem; + padding: 0.675rem 0 0.675rem 2.5rem; + border-radius: 0.375rem; + text-decoration: none; + cursor: default; + font-size: 1rem; + transition: all 0.2s; + position: relative; +} +.main .main-left .nav li .menu.active { + color: #fff; + background: #5e72e4; + background: var(--primary); +} +.main .main-left .nav li .menu.active::before { + color: #fff !important; +} +.main .main-left .nav li .menu.active::after { + transform: rotate(90deg); + color: #fff !important; +} +.main .main-left .nav li .menu:hover { + cursor: pointer; + color: #fff; + background: #5e72e4; + background: var(--primary); +} +.main .main-left .nav li .menu:hover::before { + color: #fff !important; +} +.main .main-left .nav li .menu::before { + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: absolute; + left: 0.8rem; + padding-top: 3px; + transition: all 0.3s; + content: "\e915"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li .menu::after { + position: absolute; + right: 0.5rem; + top: 0.8rem; + font-family: 'argon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -moz-osx-font-smoothing: grayscale; + content: '\e90f'; + transition: all 0.15s ease; + color: #ced4da; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + transition: all 0.3s; +} +.main .main-left .nav li .menu[data-title=Status]:before { + content: "\e906"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li .menu[data-title=System]:before { + content: "\e90a"; + color: #fb6340; +} +.main .main-left .nav li .menu[data-title=Services]:before { + content: "\e909"; + color: #11cdef; +} +.main .main-left .nav li .menu[data-title=NAS]:before { + content: "\e90c"; + color: #f3a4b5; +} +.main .main-left .nav li .menu[data-title=VPN]:before { + content: "\e90b"; + color: #8965e0; +} +.main .main-left .nav li .menu[data-title=Network]:before { + content: "\e908"; + color: #8965e0; +} +.main .main-left .nav li .menu[data-title=Bandwidth_Monitor]:before { + content: "\e90d"; + color: #2dce89; +} +.main .main-left .nav li .menu[data-title=Docker]:before { + content: "\e911"; + color: #6699ff; +} +.main .main-left .nav li .menu[data-title=Statistics]:before { + content: "\e913"; + color: #8965e0; +} +.main .main-left .nav li .menu[data-title=Control]:before { + content: "\e912"; + color: #5e72e4; + color: var(--primary); +} +.main .main-left .nav li .menu[data-title=Asterisk]:before { + content: "\e914"; + color: #fb6340; +} +.main .main-left .nav li a[data-title=Logout]:before { + content: "\e907"; + color: #adb5bd; +} .lg { margin: 0; padding: 0 !important; @@ -1023,9 +1089,8 @@ h4 { font-size: 0.7rem; font-weight: 600; color: #525f7f; -/* background-color: #e9ecef; + background-color: #e9ecef; background-color: var(--lighter); - */ } h4 em { padding: 0 0.5rem; @@ -1424,7 +1489,9 @@ td > table > tbody > tr > td, .tabs li:hover { cursor: pointer; border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; border-radius: 0; @@ -1432,6 +1499,7 @@ td > table > tbody > tr > td, .tabs li[class~="active"] a, .tabs li:hover a { color: #5e72e4; + color: var(--primary); } .tabs li { font-size: 0.875rem; @@ -1447,6 +1515,7 @@ td > table > tbody > tr > td, } .tabs li:hover { border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); } .cbi-tabmenu { color: white; @@ -1482,7 +1551,9 @@ td > table > tbody > tr > td, .cbi-tabmenu li:hover { cursor: pointer; border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; } @@ -1491,12 +1562,15 @@ td > table > tbody > tr > td, } .cbi-tabmenu li[class~="cbi-tab"] { border-bottom: 0.18751rem solid #5e72e4; + border-bottom: 0.18751rem solid var(--primary); color: #5e72e4; + color: var(--primary); background-color: #dce1fe; margin-bottom: 0; } .cbi-tabmenu li[class~="cbi-tab"] a { color: #5e72e4; + color: var(--primary); } .cbi-tab-descr { padding: 0.5rem 1.5rem; @@ -1754,6 +1828,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { margin: 0.25rem 0.1rem 0.25rem 0; color: #fff; border: 1px solid #5e72e4; + border: 1px solid var(--primary); border-radius: 0.25rem; outline: 0; background-image: none; @@ -1960,8 +2035,8 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { width: 0; height: 100%; transition: width 0.25s ease-in; - background: #5bc0de; - background: var(--bar-bg); + background: #5e72e4; + background: var(--primary); } .cbi-progressbar::after { font-family: monospace; @@ -2189,10 +2264,10 @@ td > .ifacebadge, min-height: 15rem; padding: 1rem; resize: none; - color: #eee; + color: #242424; border: 0; border-radius: 0.375rem; - background-color: #242424; + background-color: #ffffff; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); } #syslog:focus { @@ -2286,7 +2361,7 @@ td > .ifacebadge, } .ifacebox-head.active { background: #5e72e4; - background: var(--bar-bg); + background: var(--primary); } .ifacebox-head.active * { color: #fff; @@ -2745,8 +2820,10 @@ input[type="checkbox"] { } input[type="checkbox"]:checked { border: 1px solid #5e72e4; + border: 1px solid var(--primary); background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; background-color: #5e72e4; + background-color: var(--primary); background-size: 70%; background-repeat: no-repeat; background-position: center; @@ -2855,7 +2932,8 @@ pre.command-output { min-width: 4rem; } .main > .main-left > .nav > li, - .main > .main-left > .nav > li a, + .main > .main-left > .nav > li > a, + .main .main-left .nav > li > a:first-child, .main > .main-left > .nav > .slide > .menu, .main > .main-left > .nav > li > [data-title="Logout"] { font-size: 0.9rem; @@ -3092,10 +3170,6 @@ pre.command-output { header > .fill > .container > .brand { display: inline-block; } - .main > .main-left > .nav > .slide > .menu, - .main > .main-left > .nav > li > [data-title="Logout"] { - font-size: 1.2rem; - } .main > .main-left > .nav > .slide > .slide-menu > li > a { font-size: 0.8rem; } @@ -3209,592 +3283,3 @@ pre.command-output { border-radius: 0; } } -@media (prefers-color-scheme: dark) { - body { - background: #1e1e1e; - color: #cccccc; - } - .login-page .login-container .login-form { - background-color: #1e1e1e; - } - .login-page .login-container .login-form .brand { - color: #adb5bd; - } - .login-page .login-container .login-form .form-login .input-group::before { - color: #adb5bd; - } - .login-page .login-container .login-form .form-login .input-group input { - background-color: transparent !important; - color: #adb5bd; - border-bottom: #adb5bd 1px solid !important; - border-radius: 0 !important; - border-top: none !important; - border-left: none !important; - border-right: none !important; - box-shadow: none; - } - .login-page .login-container .login-form .form-login .cbi-button-apply { - background-image: linear-gradient(-135deg, #6c61ab 0%, #594ca9 100%); - } - .login-page .login-container .login-form .form-login .cbi-button-apply:hover, - .login-page .login-container .login-form .form-login .cbi-button-apply:focus { - background-image: linear-gradient(-135deg, #554c8a 0%, #483d8b 100%); - } - header::after { - background-color: #1e1e1e !important; - } - .main .main-left { - background-color: #333333 !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.15); - } - .main .main-left .sidenav-header .brand { - color: #ccc; - } - .main .main-left .nav .slide .slide-menu .active a { - color: #cccccc; - } - .main .main-left .nav .slide .slide-menu .active a::after { - background-color: #cccccc !important; - } - .main .main-left .nav .slide .slide-menu li a { - color: #cccccc; - } - .main .main-left .nav .slide .slide-menu li a:hover { - background: none !important; - } - .main .main-left .nav .slide .menu.active { - background-color: darkslateblue !important; - color: #cccccc !important; - } - .main .main-left .nav .slide .menu.active a::after { - background-color: #cccccc !important; - } - .main .main-left .nav li a { - color: #cccccc !important; - } - .main .main-left .nav li a:hover { - background-color: darkslateblue !important; - color: #cccccc !important; - } - .main .main-left::-webkit-scrollbar-thumb { - background-color: #252526 !important; - } - .main .main-left::-webkit-scrollbar-track { - background-color: #333; - } - .main .main-right { - background-color: #1e1e1e; - } - h2 { - color: #ccc; - background: #333333; - } - h3 { - color: #ccc; - border-bottom: 0; - background: #333333; - } - a:-webkit-any-link { - color: -webkit-link; - cursor: pointer; - color: darkslateblue; - } - input:-webkit-autofill { - background-color: #3c3c3c !important; - } - .cbi-value-field .cbi-input-apply, - .cbi-button-apply, - .cbi-button-edit { - color: #fff !important; - background-color: darkslateblue !important; - border-color: darkslateblue !important; - } - .cbi-section em { - color: #ccc; - } - header.bg-primary { - background-color: #1e1e1e !important; - } - .cbi-map-descr { - color: #ccc; - } - .cbi-section { - background: none; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - .panel-title { - color: #ccc; - background-color: #333333; - border-bottom: 0px; - } - div > table > tbody > tr:nth-of-type(2n), - div > .table > .tr:nth-of-type(2n) { - background-color: #252526; - } - table > tbody > tr > td, - table > tfoot > tr > td, - table > thead > tr > td { - color: #ccc; - } - fieldset > table > tbody > tr:nth-of-type(2n) { - background-color: #252526; - } - table > tbody > tr > td, - table > tfoot > tr > td, - table > thead > tr > td { - border-top: 1px solid #252526; - } - #swaptotal > div > div, - #swapfree > div > div, - #memfree > div > div, - #membuff > div > div, - #conns > div > div, - #memtotal > div > div { - background-color: #32325d !important; - } - #swaptotal > div > div > div > small, - #swapfree > div > div > div > small, - #memfree > div > div > div > small, - #membuff > div > div > div > small, - #conns > div > div > div > small, - #memtotal > div > div > div > small { - color: #ccc !important; - } - .node-system-packages > .main .cbi-section-node:first-child .cbi-value-last { - line-height: 1.8em; - } - .node-system-packages > .main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { - border: 1px solid #999999 !important; - background-color: transparent !important; - } - .node-system-packages > .main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div { - background-color: #32325d !important; - } - table > tbody > tr > th, - table > tfoot > tr > th, - table > thead > tr > th { - background-color: #252526; - border-bottom: black 1px solid !important; - } - tr > td, - tr > th, - .tr > .td, - .tr > .th, - .cbi-section-table-row::before, - #cbi-wireless > #wifi_assoclist_table > .tr:nth-child(2) { - border-top: 0; - } - .cbi-rowstyle-2 { - background-color: #1e1e1e; - } - .cbi-rowstyle-1 { - background-color: #252526; - } - .cbi-section > h3:first-child, - .panel-title, - h3 { - color: #ccc; - border-bottom: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - h4 { - background-color: #1e1e1f; - } - .cbi-progressbar { - position: relative; - min-width: 170px; - height: 20px; - margin: 6px 0; - border: thin solid #999; - background: transparent; - border-radius: 0.2rem; - overflow: hidden; - } - .cbi-progressbar div { - background-color: #32325d !important; - } - .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { - background-color: #1e1e1f; - } - .cbi-button { - color: #ccc !important; - background-color: darkslateblue; - } - .cbi-section-node { - background: none; - border-radius: 0 0 0.375rem 0.375rem; - padding: 0rem; - } - abbr { - color: #5e72e4; - } - div > table > tbody > tr:nth-of-type(2n), - div > .table > .tbody > .tr:nth-of-type(2n) { - background-color: #252526; - } - #content_syslog { - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - #syslog { - color: #ccc; - background-color: #1e1e1e; - } - #iwsvg, - #iwsvg2, - #bwsvg { - overflow: hidden; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - background-color: #1e1e1e !important; - } - .tabs { - background-color: #252526; - } - .tabs > li[class~="active"] > a { - color: #ccc; - } - .tabs > li[class~="active"], - .tabs > li:hover { - border-bottom: 0.18751rem solid darkslateblue; - color: #ccc; - background-color: #181819; - } - .cbi-tabmenu > li > a, - .tabs > li > a { - color: #ccc; - } - .cbi-tabmenu > li > a:hover, - .tabs > li > a:hover { - color: #ccc; - } - .cbi-tabmenu > li { - background: #2d2d2d; - } - .cbi-tabmenu li[class~="cbi-tab"] a { - color: #ccc; - } - .cbi-tabmenu > li:hover { - color: #ccc; - background: #2d2d2d; - } - .cbi-tabmenu > li[class~="cbi-tab"] { - background-color: #181819; - } - .cbi-tabcontainer > .cbi-value:nth-of-type(2n) { - background-color: #252526; - } - .cbi-value-title { - color: #ccc; - } - select, - input { - color: #ccc; - background-color: transparent !important; - border: 1px solid #252526; - box-shadow: none; - } - select:not([multiple="multiple"]):focus, - input:focus { - border-color: darkslateblue !important; - outline: 0; - } - select { - background-color: #1e1e1e !important; - } - #cbi-dropbear h2, - #cbi-dropbear .cbi-map-descr, - #cbi-dropbear .cbi-map-descr abbr, - #cbi-rc h2, - #cbi-rc .cbi-map-descr, - #cbi-distfeedconf h2, - #cbi-distfeedconf .cbi-map-descr, - #cbi-customfeedconf h2, - #cbi-customfeedconf .cbi-map-descr, - #cbi-download h2, - #cbi-filelist h2 { - color: #ccc !important; - } - .cbi-value-field > ul > li .ifacebadge { - background-color: #3c3c3c; - } - .cbi-section-descr { - color: #ccc; - } - .cbi-input-textarea { - background-color: #1e1e1e; - color: #ccc; - } - .cbi-section-remove:nth-of-type(2n), - .cbi-section-node:nth-of-type(2n) { - background-color: #1e1e1e; - } - .node-system-packages > .main table tr td:nth-last-child(1) { - color: #ccc; - } - .cbi-section-node .cbi-value { - padding: 1rem 1rem 0.3rem 1rem; - } - .ifacebox { - background-color: none; - border: 1px solid #1e1e1e; - } - .ifacebox-head { - color: #666; - } - .ifacebox-body { - background-color: #333; - } - .zonebadge strong { - color: #333; - } - .zonebadge > .ifacebadge { - background-color: #3c3c3c; - } - div.cbi-value var, - td.cbi-value-field var { - color: #5e72e4; - } - #diag-rc-output > pre { - color: #ccc; - background-color: #1e1e1e; - } - .node-services-vssr .block { - background-color: #3c3c3c !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - .node-services-vssr .block h4 { - color: #ccc !important; - } - .node-services-vssr .status-bar { - color: #ccc; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - background-color: #1e1e1e; - } - .node-services-vssr .cbi-section-table-row { - color: #ccc; - background-color: #3c3c3c !important; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.35); - } - .node-services-vssr .cbi-section-table-row.fast { - background: darkslateblue !important; - color: #fff; - } - .node-services-vssr .ssr-button { - color: #ccc; - } - .node-services-vssr .incon:nth-child(2) { - border-right: #1e1e1e 1px solid; - } - #xhr_poll_status > .label.success { - color: #ccc !important; - background-color: darkolivegreen !important; - } - .notice { - background-color: darkslateblue !important; - } - .cbi-input-find, - .cbi-input-save, - .cbi-button-add, - .cbi-button-save, - .cbi-button-find, - .cbi-input-reload, - .cbi-button-reload { - color: #fff !important; - background-color: darkseagreen !important; - border-color: darkseagreen !important; - } - .cbi-button-reset, - .cbi-input-remove { - color: #fff !important; - background-color: darkorange !important; - border-color: darkorange !important; - } - .cbi-page-actions .cbi-button-apply, - .cbi-section-actions .cbi-button-edit, - .cbi-button-edit.important, - .cbi-button-apply.important, - .cbi-button-reload.important, - .cbi-button-action.important { - border: 1px darkslateblue solid !important; - } - fieldset[id^="cbi-apply-"] { - background-color: #333333; - } - #detail-bubble > div { - border: 1px solid #ccc; - border-radius: 2px; - padding: 5px; - background: #252525; - } - .ifacebox-head.active { - background-color: #32325d !important; - } - header .fill .status span[data-style="active"] { - color: #ccc !important; - background-color: darkolivegreen !important; - } - #cbi-wireless .td, - #cbi-network .tr:first-child > .td, - .table[width="100%"] > .tr:first-child > .td, - [data-page="admin-network-diagnostics"] .tr > .td, - .tr.table-titles > .th, - .tr.cbi-section-table-titles > .th { - background-color: #252526; - border-bottom: black 1px solid !important; - } - .network-status-table .ifacebox-body .ifacebadge { - background-color: #252526; - border-bottom: 0; - box-shadow: none; - } - td > .ifacebadge, - .td > .ifacebadge { - background-color: darkslateblue; - border: 0; - } - .btn.danger, - .cbi-section-remove > .cbi-button, - .cbi-button-remove, - .cbi-button-reset, - .cbi-button-negative, - .cbi-button[value="Stop"], - .cbi-button[value="Kill"], - .cbi-button[onclick="reboot(this)"], - .cbi-button-neutral[value="Restart"] { - border: thin solid darkorange !important; - background-color: darkorange !important; - } - .cbi-section, - .cbi-section-error, - #iptables, - .Firewall form, - #cbi-network > .cbi-section-node, - #cbi-wireless > .cbi-section-node, - #cbi-wireless > #wifi_assoclist_table, - [data-tab-title], - [data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), - [data-page="admin-system-opkg"] #maincontent > .container { - background: #1e1e1e !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { - background: transparent !important; - } - [data-page="admin-system-admin"] .cbi-map h2, - [data-page="admin-system-admin-password"] .cbi-map h2, - [data-page="admin-system-admin"] .cbi-map .cbi-map-descr, - [data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { - color: #ccc; - } - [data-page="admin-system-flash"] .modal label > input[type="checkbox"] { - top: -0.35rem; - } - [data-page="admin-system-flash"] .modal .btn { - white-space: normal !important; - background-color: darkseagreen; - } - [data-page="admin-system-flash"] .modal .alert-message { - background-color: transparent !important; - } - [data-page="admin-system-flash"] .modal .danger { - border: thin solid darkorange !important; - background-color: darkorange !important; - } - .cbi-value input[type="password"] + .cbi-button-neutral { - background-color: darkslateblue !important; - } - .btn, - button, - select, - input, - .cbi-dropdown { - border: 1px solid #3c3c3c !important; - } - .cbi-dropdown .preview { - color: #ccc; - } - .cbi-section-table-row { - background-color: #1e1e1e !important; - } - .modal { - background-color: #1e1e1e; - } - .cbi-button-positive { - color: #fff !important; - background-color: darkseagreen !important; - } - [data-page="admin-system-flash"] legend { - color: #ccc; - } - .logout:before { - color: #adb5bd !important; - } - .cbi-dropdown[open] { - border-color: darkslateblue !important; - } - .cbi-dropdown[open] > ul.dropdown { - background: #252526 !important; - color: #ccc !important; - box-shadow: none; - border: 1px solid #3c3c3c !important; - } - .cbi-dropdown[open] > ul.dropdown li { - color: #ccc; - border-bottom: 1px solid #3c3c3c !important; - } - .cbi-dropdown[open] > ul.dropdown > li[selected] { - background-color: darkslateblue !important; - border-bottom: 1px solid #3c3c3c !important; - } - .cbi-dropdown[open] > ul.dropdown > li.focus { - background: darkslateblue; - outline: none; - } - .ifacebadge { - background-color: #333333; - } - .cbi-dynlist > .item > span { - border: 1px solid #3c3c3c !important; - } - .cbi-page-actions .cbi-button-apply, - .cbi-section-actions .cbi-button-edit, - .cbi-button-edit, - .cbi-button-apply, - .cbi-button-reload, - .cbi-button-action, - .cbi-button[value="Submit"], - .cbi-button[value="Upload"], - .cbi-button[value$="Apply"], - .cbi-button[onclick="addKey(event)"] { - background: darkslateblue !important; - } - .btn.primary, - .cbi-page-actions .cbi-button-save, - .cbi-page-actions .cbi-button-apply + .cbi-button-save, - .cbi-button-add, - .cbi-button-save, - .cbi-button-positive, - .cbi-button-link, - .cbi-button[value="Enable"], - .cbi-button[value="Scan"], - .cbi-button[value^="Back"], - .cbi-button-neutral[onclick="handleConfig(event)"] { - background: darkslateblue !important; - } - [data-page="admin-system-opkg"] h2 { - color: #ccc !important; - } - @supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) { - .login-page .login-container .login-form { - -webkit-backdrop-filter: blur(var(--blur-radius-dark)); - backdrop-filter: blur(var(--blur-radius-dark)); - background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); - } - } -} -@media (prefers-color-scheme: dark) and (max-width: 480px) { - .node-status-iptables > .main div > .cbi-map > form { - background-color: #1e1e1e; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } -} diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css index 6a1cc074b..2b52701c3 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css +++ b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css @@ -24,7 +24,7 @@ * Login background * https://unsplash.com/ * - * Licensed to the public under the Apache License 2.0 + * Licensed to the public under the Apache License 2.0 */ body { background: #1e1e1e; @@ -50,11 +50,12 @@ body { box-shadow: none; } .login-page .login-container .login-form .form-login .cbi-button-apply { - background-image: linear-gradient(-135deg, #6c61ab 0%, #594ca9 100%); + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; } .login-page .login-container .login-form .form-login .cbi-button-apply:hover, .login-page .login-container .login-form .form-login .cbi-button-apply:focus { - background-image: linear-gradient(-135deg, #554c8a 0%, #483d8b 100%); + opacity: 0.9; } header::after { background-color: #1e1e1e !important; @@ -79,7 +80,8 @@ header::after { background: none !important; } .main .main-left .nav .slide .menu.active { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; color: #cccccc !important; } .main .main-left .nav .slide .menu.active a::after { @@ -89,7 +91,8 @@ header::after { color: #cccccc !important; } .main .main-left .nav li a:hover { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; color: #cccccc !important; } .main .main-left::-webkit-scrollbar-thumb { @@ -113,7 +116,8 @@ h3 { a:-webkit-any-link { color: -webkit-link; cursor: pointer; - color: darkslateblue; + color: #483d8b; + color: var(--dark-primary); } input:-webkit-autofill { background-color: #3c3c3c !important; @@ -122,8 +126,10 @@ input:-webkit-autofill { .cbi-button-apply, .cbi-button-edit { color: #fff !important; - background-color: darkslateblue !important; - border-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; } .cbi-section em { color: #ccc; @@ -235,7 +241,8 @@ h4 { } .cbi-button { color: #ccc !important; - background-color: darkslateblue; + background-color: #483d8b; + background-color: var(--dark-primary); } .cbi-section-node { background: none; @@ -271,7 +278,8 @@ div > .table > .tbody > .tr:nth-of-type(2n) { } .tabs > li[class~="active"], .tabs > li:hover { - border-bottom: 0.18751rem solid darkslateblue; + border-bottom: 0.18751rem solid #483d8b; + border-bottom: 0.18751rem solid var(--dark-primary); color: #ccc; background-color: #181819; } @@ -311,7 +319,8 @@ input { } select:not([multiple="multiple"]):focus, input:focus { - border-color: darkslateblue !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; outline: 0; } select { @@ -392,7 +401,8 @@ td.cbi-value-field var { box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.35); } .node-services-vssr .cbi-section-table-row.fast { - background: darkslateblue !important; + background: #483d8b !important; + background: var(--dark-primary) !important; color: #fff; } .node-services-vssr .ssr-button { @@ -406,7 +416,8 @@ td.cbi-value-field var { background-color: darkolivegreen !important; } .notice { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; } .cbi-input-find, .cbi-input-save, @@ -431,7 +442,8 @@ td.cbi-value-field var { .cbi-button-apply.important, .cbi-button-reload.important, .cbi-button-action.important { - border: 1px darkslateblue solid !important; + border: 1px #483d8b solid !important; + border: 1px var(--dark-primary) solid !important; } .btn[value="Dismiss"], .cbi-button[value="Terminate"], @@ -442,8 +454,8 @@ td.cbi-value-field var { .cbi-button-neutral[value="Disable"] { font-weight: normal; color: #fff; - border: thin solid darkorange!important; - background-color: darkorange!important; + border: thin solid darkorange !important; + background-color: darkorange !important; } fieldset[id^="cbi-apply-"] { background-color: #333333; @@ -477,7 +489,8 @@ header .fill .status span[data-style="active"] { } td > .ifacebadge, .td > .ifacebadge { - background-color: darkslateblue; + background-color: #483d8b; + background-color: var(--dark-primary); border: 0; } .btn.danger, @@ -529,7 +542,8 @@ div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { background-color: darkorange !important; } .cbi-value input[type="password"] + .cbi-button-neutral { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; } .btn, button, @@ -558,7 +572,8 @@ input, color: #adb5bd !important; } .cbi-dropdown[open] { - border-color: darkslateblue !important; + border-color: #483d8b !important; + border-color: var(--dark-primary) !important; } .cbi-dropdown[open] > ul.dropdown { background: #252526 !important; @@ -571,11 +586,13 @@ input, border-bottom: 1px solid #3c3c3c !important; } .cbi-dropdown[open] > ul.dropdown > li[selected] { - background-color: darkslateblue !important; + background-color: #483d8b !important; + background-color: var(--dark-primary) !important; border-bottom: 1px solid #3c3c3c !important; } .cbi-dropdown[open] > ul.dropdown > li.focus { - background: darkslateblue; + background: #483d8b; + background: var(--dark-primary); outline: none; } .ifacebadge { @@ -594,7 +611,8 @@ input, .cbi-button[value="Upload"], .cbi-button[value$="Apply"], .cbi-button[onclick="addKey(event)"] { - background: darkslateblue !important; + background: #483d8b !important; + background: var(--dark-primary) !important; } .btn.primary, .cbi-page-actions .cbi-button-save, @@ -607,7 +625,8 @@ input, .cbi-button[value="Scan"], .cbi-button[value^="Back"], .cbi-button-neutral[onclick="handleConfig(event)"] { - background: darkslateblue; + background: #483d8b; + background: var(--dark-primary); } [data-page="admin-system-opkg"] h2 { color: #ccc !important; diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css b/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css index 1c24f7082..87667288b 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css +++ b/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css @@ -24,7 +24,7 @@ * Login background * https://unsplash.com/ * - * Licensed to the public under the Apache License 2.0 + * Licensed to the public under the Apache License 2.0 */ @@ -183,4 +183,4 @@ .icon-app:before { content: "\e915"; -} \ No newline at end of file +} diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css b/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css index 81dbb1509..31d891db3 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css +++ b/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css @@ -8,4 +8,4 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md normalize.css v | MIT License | git.io/normalize Copyright (c) Nicolas Gallagher and Jonathan Neal */ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} \ No newline at end of file +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.ico b/luci-theme-argon/htdocs/luci-static/argon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4611336803d49af0896adf2698cfaec54e96b800 GIT binary patch literal 15406 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 BLQ((# literal 0 HcmV?d00001 diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.png b/luci-theme-argon/htdocs/luci-static/argon/favicon.png deleted file mode 100644 index 7c3f3acb1f0c7c142d0dbd3f42a4926b07f8eb38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 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]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="

+ +
+
+ + + + diff --git a/luci-theme-argon/luasrc/view/themes/argon/header.htm b/luci-theme-argon/luasrc/view/themes/argon/header.htm index fe238b7ba..1da2486b6 100644 --- a/luci-theme-argon/luasrc/view/themes/argon/header.htm +++ b/luci-theme-argon/luasrc/view/themes/argon/header.htm @@ -5,19 +5,19 @@ Copyright 2020 Jerrykuku Have a bug? Please create an issue here on GitHub! - https://github.com/jerrykuku/luci-theme-argon/issues + https://github.com/jerrykuku/luci-theme-argon/issues - luci-theme-material: + luci-theme-material: Copyright 2015 Lutty Yang - - Agron Theme - https://demos.creative-tim.com/argon-dashboard/index.html + + Argon Theme + https://demos.creative-tim.com/argon-dashboard/index.html Licensed to the public under the Apache License 2.0 -%> <% - local sys = require "luci.sys" + local sys = require "luci.sys" local util = require "luci.util" local http = require "luci.http" local disp = require "luci.dispatcher" @@ -25,42 +25,87 @@ local boardinfo = util.ubus("system", "board") local node = disp.context.dispatched - - local fs = require "nixio.fs" + + local fs = require "nixio.fs" local nutil = require "nixio.util" - + local uci = require 'luci.model.uci'.cursor() + -- send as HTML5 http.prepare_content("text/html") - math.randomseed(os.time()) + + math.randomseed(os.time()) + + -- Custom settings + local mode = 'normal' + local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') + local bar_color = '#5e72e4' + local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity + if fs.access('/etc/config/argon') then + primary = uci:get_first('argon', 'global', 'primary') + dark_primary = uci:get_first('argon', 'global', 'dark_primary') + blur_radius = uci:get_first('argon', 'global', 'blur') + blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') + blur_opacity = uci:get_first('argon', 'global', 'transparency') + blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') + mode = uci:get_first('argon', 'global', 'mode') + bar_color = mode == 'dark' and dark_primary or primary + end + + -- Brand name + local brand_name = boardinfo.hostname or "?" -%> - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - - LuCI - - - - - - - - - - - - LuCI"> - - LuCI"> - - - - - - <% if nixio.fs.access("/etc/dark") then %> - - <% end -%> + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> + - LuCI + + + + + + + + + + + - LuCI"> + - LuCI"> + + + + + + + + + + + + + + <% if node and node.css then %> <% end -%> @@ -69,136 +114,110 @@ <%=css %> <% end -%> - - - - - + + + + + @@ -209,7 +228,7 @@
+
+ <%:MPTCP over VPN settings%> +
<%:MPTCP over VPN should be used only when Multipath TCP is blocked on a connection.%>
+
+ +
+ +
+
+ <%:Set VPN to use for MPTCP over VPN.%> +
+
+
+

diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index f5b008643..2c844f62d 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -81,7 +81,8 @@ 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||aarch64):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 kmod-bonding luci-proto-bonding luci-app-sysupgrade + hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade \ + luci-theme-openwrt-2020 luci-proto-wireguard luci-app-wireguard # 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/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn index a2f7d97e4..4f2825e47 100755 --- a/openmptcprouter/files/etc/init.d/mptcpovervpn +++ b/openmptcprouter/files/etc/init.d/mptcpovervpn @@ -9,7 +9,10 @@ } _getremoteip() { - [ "$(uci -q get openmptcprouter.$1.master)" = "1" ] && remoteip=$(uci -q get openmptcprouter.$1.ip | awk '{print $1}') + [ "$(uci -q get openmptcprouter.$1.master)" = "1" ] && { + remoteip=$(uci -q get openmptcprouter.$1.ip | awk '{print $1}') + wg_server_key=$(uci -q get openmptcprouter.$1.wgkey) + } } mptcp_over_vpn() { @@ -20,19 +23,22 @@ mptcp_over_vpn() { uci -q batch <<-EOF >/dev/null delete openmptcprouter.${interface} delete network.ovpn${interface} + delete network.wg${interface} delete openvpn.${interface} commit openvpn delete openmptcprouter.${interface} delete openmptcprouter.ovpn${interface} + delete openmptcprouter.wg${interface} commit openmptcprouter commit network del_list firewall.zone_vpn.network="ovpn${interface}" + del_list firewall.zone_vpn.network="wg${interface}" commit firewall EOF return fi nbintfvpn=$(($nbintfvpn+1)) - if [ "$(uci -q get network.ovpn${interface})" = "" ]; then + if [ "$(uci -q get network.ovpn${interface})" = "" ] && [ "$vpn" = "openvpn" ]; then logger -t "MPTCPoverVPN" "Enable MPTCP over VPN for ${interface}" id=$(uci -q get network.${interface}.metric) remoteip="" @@ -43,42 +49,108 @@ mptcp_over_vpn() { [ -n "$(uci -q get openmptcprouter.ovpn${interface}.multipath)" ] && multipath=$(uci -q get openmptcprouter.ovpn${interface}.multipath) [ -z "$multipath" ] && multipath="on" uci -q batch <<-EOF >/dev/null - set network.ovpn${interface}=interface - set network.ovpn${interface}.ifname="tun${id}" - set network.ovpn${interface}.defaultroute='0' - set network.ovpn${interface}.peerdns='0' - set network.ovpn${interface}.proto='none' - set network.ovpn${interface}.ip4table='wan' - set network.ovpn${interface}.multipath="${multipath}" - set network.${interface}.multipath='off' - commit network - set openvpn.${interface}=openvpn - set openvpn.${interface}.dev="tun${id}" - set openvpn.${interface}.cipher='AES-256-CBC' - set openvpn.${interface}.port='65301' - set openvpn.${interface}.remote="${remoteip}" - set openvpn.${interface}.local="${localip}" - set openvpn.${interface}.lport='0' - set openvpn.${interface}.ncp_disable='1' - set openvpn.${interface}.auth_nocache='1' - set openvpn.${interface}.proto='udp' - set openvpn.${interface}.client='1' - set openvpn.${interface}.enabled='1' - set openvpn.${interface}.allow_recursive_routing='1' - set openvpn.${interface}.key='/etc/luci-uploads/client.key' - set openvpn.${interface}.cert='/etc/luci-uploads/client.crt' - set openvpn.${interface}.ca='/etc/luci-uploads/ca.crt' - commit openvpn - set openmptcprouter.${interface}.multipath="off" - set openmptcprouter.${interface}.multipathvpn="1" - set openmptcprouter.ovpn${interface}="interface" - set openmptcprouter.ovpn${interface}.multipath="${multipath}" - set openmptcprouter.ovpn${interface}.vpn="1" - set openmptcprouter.ovpn${interface}.baseintf="${interface}" + delete network.wg${interface} + delete openmptcprouter.wg${interface} commit openmptcprouter - add_list firewall.zone_vpn.network="ovpn${interface}" + commit network + del_list firewall.zone_vpn.network="wg${interface}" commit firewall EOF + + uci -q batch <<-EOF >/dev/null + set network.ovpn${interface}=interface + set network.ovpn${interface}.ifname="tun${id}" + set network.ovpn${interface}.defaultroute='0' + set network.ovpn${interface}.peerdns='0' + set network.ovpn${interface}.proto='none' + set network.ovpn${interface}.ip4table='wan' + set network.ovpn${interface}.multipath="${multipath}" + set network.${interface}.multipath='off' + commit network + set openvpn.${interface}=openvpn + set openvpn.${interface}.dev="tun${id}" + set openvpn.${interface}.cipher='AES-256-CBC' + set openvpn.${interface}.port='65301' + set openvpn.${interface}.remote="${remoteip}" + set openvpn.${interface}.local="${localip}" + set openvpn.${interface}.lport='0' + set openvpn.${interface}.ncp_disable='1' + set openvpn.${interface}.auth_nocache='1' + set openvpn.${interface}.proto='udp' + set openvpn.${interface}.client='1' + set openvpn.${interface}.enabled='1' + set openvpn.${interface}.allow_recursive_routing='1' + set openvpn.${interface}.key='/etc/luci-uploads/client.key' + set openvpn.${interface}.cert='/etc/luci-uploads/client.crt' + set openvpn.${interface}.ca='/etc/luci-uploads/ca.crt' + commit openvpn + set openmptcprouter.${interface}.multipath="off" + set openmptcprouter.${interface}.multipathvpn="1" + set openmptcprouter.ovpn${interface}="interface" + set openmptcprouter.ovpn${interface}.multipath="${multipath}" + set openmptcprouter.ovpn${interface}.vpn="1" + set openmptcprouter.ovpn${interface}.baseintf="${interface}" + commit openmptcprouter + add_list firewall.zone_vpn.network="ovpn${interface}" + commit firewall + EOF + elif [ "$(uci -q get network.wg${interface})" = "" ] && [ "$vpn" = "wireguard" ]; then + logger -t "MPTCPoverVPN" "Enable MPTCP over VPN for ${interface}" + id=$(uci -q get network.${interface}.metric) + remoteip="" + wg_server_key="" + config_load openmptcprouter + config_foreach _getremoteip server + metric=$(uci -q get network.${interface}.metric) + [ -z "$(uci -q get openmptcprouter.wg${interface}.multipath)" ] && multipath=$(uci -q get network.${interface}.multipath) + [ -n "$(uci -q get openmptcprouter.wg${interface}.multipath)" ] && multipath=$(uci -q get openmptcprouter.wg${interface}.multipath) + [ -z "$multipath" ] && multipath="on" + private_key=$(wg genkey | tr -d "\n") + public_key=$(echo $private_key | wg pubkey | tr -d "\n") + uci -q batch <<-EOF >/dev/null + delete network.ovpn${interface} + delete openvpn.${interface} + commit openvpn + delete openmptcprouter.ovpn${interface} + commit openmptcprouter + commit network + del_list firewall.zone_vpn.network="ovpn${interface}" + commit firewall + EOF + + uci -q batch <<-EOF >/dev/null + set network.wg${interface}=interface + set network.wg${interface}.nohostroute='1' + set network.wg${interface}.proto='wireguard' + set network.wg${interface}.fwmark="0x539${metric}" + del_list network.wg${interface}.addresses + add_list network.wg${interface}.addresses='10.255.247.${metric}/24' + set network.wg${interface}.private_key="${private_key}" + set network.wg${interface}.gateway="10.255.247.1" + set network.wg${interface}.public_key="${public_key}" + set network.wg${interface}.multipath="${multipath}" + set network.${interface}.multipath='off' + add network wireguard_wg${interface} + set network.@wireguard_wg${interface}[0]=wireguard_wg${interface} + set network.@wireguard_wg${interface}[0].description="Wireguard on ${interface}" + set network.@wireguard_wg${interface}[0].endpoint_host="${remoteip}" + set network.@wireguard_wg${interface}[0].endpoint_port="65311" + set network.@wireguard_wg${interface}[0].persistent_keepalive="28" + del_list network.@wireguard_wg${interface}[0].allowed_ips + add_list network.@wireguard_wg${interface}[0].allowed_ips="0.0.0.0/0" + set network.@wireguard_wg${interface}[0].public_key="${wg_server_key}" + commit network + set openmptcprouter.${interface}.multipath="off" + set openmptcprouter.${interface}.multipathvpn="1" + set openmptcprouter.wg${interface}="interface" + set openmptcprouter.wg${interface}.multipath="${multipath}" + set openmptcprouter.wg${interface}.vpn="1" + set openmptcprouter.wg${interface}.baseintf="${interface}" + commit openmptcprouter + add_list firewall.zone_vpn.network="wg${interface}" + commit firewall + EOF + ubus call network reload 2>&1 >/dev/null else uci -q batch <<-EOF >/dev/null set network.${interface}.multipath='off' @@ -92,6 +164,7 @@ mptcp_over_vpn() { multipath=$(uci -q get openmptcprouter.ovpn${interface}.multipath) [ -z "$multipath" ] && multipath="on" uci -q batch <<-EOF >/dev/null + delete network.wg${interface} delete network.ovpn${interface} delete openvpn.${interface} commit openvpn @@ -99,13 +172,16 @@ mptcp_over_vpn() { set network.${interface}.multipath="${multipath}" set openmptcprouter.${interface}.multipathvpn="0" delete openmptcprouter.ovpn${interface} + delete openmptcprouter.wg${interface} commit openmptcprouter commit network del_list firewall.zone_vpn.network="ovpn${interface}" + del_list firewall.zone_vpn.network="wg${interface}" commit firewall EOF elif [ "$(uci -q get openmptcprouter.${interface}.vpn)" = "1" ]; then intf="$(echo ${interface} | sed 's/ovpn//g')" + [ "$intf" = "$interface" ] && intf="$(echo ${interface} | sed 's/wg//g')" if [ -n "$intf" ] && [ "$intf" != "$interface" ] && [ "$(uci -q get network.${intf})" = "" ]; then uci -q batch <<-EOF >/dev/null delete network.${interface} @@ -126,6 +202,8 @@ start_service() { nbintf=0 nbintfvpn=0 + vpn="$(uci -q get openmptcprouter.settings.mptcpovervpn)" + [ -z "$vpn" ] && vpn="openvpn" config_load openmptcprouter config_foreach mptcp_over_vpn interface if [ "$nbintf" = "$nbintfvpn" ] && [ "$nbintf" != "0" ]; then diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 265446b56..f5e2c977e 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -140,6 +140,29 @@ _set_openvpn_vps() { fi } +_set_wireguard_vps() { + local enabled port key + ipskey="" + _get_wg_ipskey() { + local interface=$1 + proto=$(uci -q get network.${interface}.proto) + if [ "$proto" = "wireguard" ]; then + ip="$(uci -q get network.${interface}.addresses)" + key="$(uci -q get network.${interface}.public_key)" + if [ -z "$ipskey" ]; then + ipskey='{"ip": "'$ip'", "key": "'$key'"}' + else + ipskey=$ipskey',{"ip": "'$ip'", "key": "'$key'"}' + fi + fi + } + config_load network + config_foreach _get_wg_ipskey interface + local settings + settings='{"peers": ['$ipskey']}' + echo $(_set_json "wireguard" "$settings") +} + get_openvpn_key() { servername=$2 [ -z "$vps_config" ] && vps_config=$(_get_json "config") @@ -728,14 +751,28 @@ _set_wan_ip() { fi } +_get_lan_ip() { + local intf=$1 + if [ "$(uci -q get firewall.zone_lan.network | grep $intf)" != "" ]; then + lanip="$(uci -q get network.${intf}.ipaddr)/$(uci -q get network.${intf}.netmask)" + if [ "$lanip" != "/" ]; then + if [ -z "$lanips" ]; then + lanips='"'${lanip}'"' + else + lanips='"'$lanips'" "'${lanip}'"' + fi + fi + fi +} + _set_lan_ip() { local settings [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return - lanip_current="$(echo "$vps_config" | jsonfilter -q -e '@.lan.ips')" - lanips="$(uci -q get network.lan.ipaddr)/$(uci -q get network.lan.netmask)" - if [ "$lanips" != "/" ] && [ "$lanip_current" != "$lanips" ]; then - settings='{"lanips" : ["'$lanips'"]}' + #lanip_current="$(echo "$vps_config" | jsonfilter -q -e '@.lan.ips')" + #if [ "$lanips" != "" ] && [ "$lanip_current" != "$lanips" ]; then + if [ "$lanips" != "" ]; then + settings='{"lanips" : ['$lanips']}' result=$(_set_json "lan" "$settings") fi } @@ -814,6 +851,7 @@ _vps_firewall_redirect_port() { EOF src_dport='2-64999' fi + [ -n "$src_dport" ] && src_dport=$(echo $src_dport | sed 's/:/-/') 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" @@ -1371,6 +1409,12 @@ _set_config_from_vps() { set openmptcprouter.${servername}.redirect_ports=$redirect EOF + # Wireguard settings + wireguard_key="$(echo "$vps_config" | jsonfilter -q -e '@.wireguard.key')" + uci -q batch <<-EOF >/dev/null + set openmptcprouter.${servername}.wgkey=$wireguard_key + EOF + # MPTCP settings mptcp_path_manager="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.path_manager')" mptcp_scheduler="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.scheduler')" @@ -1684,6 +1728,7 @@ _config_service() { [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 _set_vps_firewall + _set_wireguard_vps fi _backup_list redirect_port="0" @@ -1700,9 +1745,11 @@ _config_service() { #_set_pihole [ -n "$wanips" ] && _set_wan_ip - _set_lan_ip _set_vpn_ip config_load network + lanips="" + config_foreach _get_lan_ip interface + _set_lan_ip config_foreach _delete_client2client route if [ "$(uci -q get openmptcprouter.settings.vpn)" != "openvpn" ] && [ "$(echo "$vps_config" | jsonfilter -q -e '@.client2client.enabled')" == "true" ]; then _set_client2client From 9b71441dfd68b31dd08ffc35d623bff31c1e44e3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 3 Mar 2021 11:30:52 +0100 Subject: [PATCH 077/195] Allow wildcard domain in omr-bypass --- .../root/etc/init.d/omr-bypass | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 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 d1e2d9592..128d42e2b 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -44,7 +44,34 @@ _bypass_domains() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - _bypass_domain $domain $intf + if [ "$(echo $domain | grep '\.$')" != "" ] || [ "$(echo $domain | grep '\.\*$')" != "" ]; then + tlds=`curl --max-time 4 -s -k https://data.iana.org/TLD/tlds-alpha-by-domain.txt` + domain="$(echo '"$domain"' | sed 's:*::')" + 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 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)` 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 + done + else + _bypass_domain $domain $intf + fi } _bypass_domain() { From c3d2e831d672c7b8407ced73ecef57443855cf18 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 3 Mar 2021 11:31:47 +0100 Subject: [PATCH 078/195] Fix name change of shadowsocks tracker --- .../luasrc/view/openmptcprouter/settings.htm | 4 ++-- .../root/usr/libexec/rpcd/openmptcprouter | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index e9d4f52a8..941890008 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -108,8 +108,8 @@
diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 0708e3f03..2a31616dc 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -810,9 +810,9 @@ function interfaces_status() -- shadowsocksaddr mArray.openmptcprouter["ss_addr"] = uci:get("openmptcprouter","omr","detected_ss_ipv4") or "" if mArray.openmptcprouter["ss_addr"] == "" and mArray.openmptcprouter["service_addr"] ~= "" then - tracker_ip = uci:get("shadowsocks-libev","tracker","local_address") or "" + tracker_ip = uci:get("shadowsocks-libev","tracker_sss0","local_address") or "" if tracker_ip ~= "" then - local tracker_port = uci:get("shadowsocks-libev","tracker","local_port") + local tracker_port = uci:get("shadowsocks-libev","tracker_sss0","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 From c939ab5a24edf51a57a812177e2919af15f272d3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 3 Mar 2021 11:32:42 +0100 Subject: [PATCH 079/195] Update https-dns-proxy --- https-dns-proxy/Makefile | 22 ++++++-- https-dns-proxy/files/https-dns-proxy.init | 66 ++++++++++++++++------ 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/https-dns-proxy/Makefile b/https-dns-proxy/Makefile index 0fefc7ca5..331318402 100644 --- a/https-dns-proxy/Makefile +++ b/https-dns-proxy/Makefile @@ -1,14 +1,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=https-dns-proxy -PKG_VERSION:=2019-12-03 -PKG_RELEASE=5 +PKG_VERSION:=2021-01-17 +PKG_RELEASE=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/aarond10/https_dns_proxy -PKG_SOURCE_DATE:=2019-12-03 -PKG_SOURCE_VERSION:=2adeafb67cbe8d67148219c48334856ae4f3bd75 -PKG_MIRROR_HASH:=58088baa092cd9634652d65f9b5650db88d2e102cb370710654db7b15f2f0e42 +PKG_SOURCE_DATE:=2021-01-17 +PKG_SOURCE_VERSION:=37511cc08712d7548978a4f6f1cc457b7594fb96 +PKG_MIRROR_HASH:=4e6a7dcb69e350d1df9f17570439b589e031e249da7f91f2ec7600a955e0aaa3 PKG_MAINTAINER:=Stan Grishin PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -22,14 +22,26 @@ define Package/https-dns-proxy SECTION:=net CATEGORY:=Network TITLE:=DNS Over HTTPS Proxy + URL:=https://docs.openwrt.melmac.net/https-dns-proxy/ DEPENDS:=+libcares +libcurl +libev +ca-bundle CONFLICTS:=https_dns_proxy endef +define Package/https-dns-proxy/description +https-dns-proxy is a light-weight DNS<-->HTTPS, non-caching translation proxy for the RFC 8484 DoH standard. +It receives regular (UDP) DNS requests and issues them via DoH. +Please see https://docs.openwrt.melmac.net/https-dns-proxy/ for more information. +endef + +define Package/https-dns-proxy/conffiles +/etc/config/https-dns-proxy +endef + define Package/https-dns-proxy/install $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d ${1}/etc/config $(INSTALL_BIN) $(PKG_BUILD_DIR)/https_dns_proxy $(1)/usr/sbin/https-dns-proxy $(INSTALL_BIN) ./files/https-dns-proxy.init $(1)/etc/init.d/https-dns-proxy + $(SED) "s|^\(PKG_VERSION\).*|\1='$(PKG_VERSION)-$(PKG_RELEASE)'|" $(1)/etc/init.d/https-dns-proxy $(INSTALL_CONF) ./files/https-dns-proxy.config $(1)/etc/config/https-dns-proxy endef diff --git a/https-dns-proxy/files/https-dns-proxy.init b/https-dns-proxy/files/https-dns-proxy.init index 5ca0bd133..64bf7eccf 100755 --- a/https-dns-proxy/files/https-dns-proxy.init +++ b/https-dns-proxy/files/https-dns-proxy.init @@ -1,13 +1,25 @@ #!/bin/sh /etc/rc.common -# Copyright 2019 Stan Grishin (stangri@melmac.net) +# Copyright 2019-2020 Stan Grishin (stangri@melmac.net) # shellcheck disable=SC2039 +PKG_VERSION='dev-test' -export START=80 -export USE_PROCD=1 +# shellcheck disable=SC2034 +START=80 +# shellcheck disable=SC2034 +USE_PROCD=1 +if type extra_command 1>/dev/null 2>&1; then + extra_command 'version' 'Show version information' +else +# shellcheck disable=SC2034 + EXTRA_COMMANDS='version' +fi + +readonly PROG=/usr/sbin/https-dns-proxy dnsmasqConfig='' +forceDNS='1' -PROG=/usr/sbin/https-dns-proxy +version() { echo "$PKG_VERSION"; } xappend() { param="$param $1"; } @@ -35,27 +47,27 @@ append_parm() { start_instance() { local cfg="$1" param listen_addr listen_port i - + append_parm "$cfg" 'resolver_url' '-r' + append_parm "$cfg" 'polling_interval' '-i' append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1' append_parm "$cfg" 'listen_port' '-p' "$p" + append_parm "$cfg" 'dscp_codepoint' '-c' append_parm "$cfg" 'bootstrap_dns' '-b' - append_parm "$cfg" 'resolver_url' '-r' append_parm "$cfg" 'user' '-u' 'nobody' append_parm "$cfg" 'group' '-g' 'nogroup' - append_parm "$cfg" 'edns_subnet' '-e' append_parm "$cfg" 'proxy_server' '-t' append_parm "$cfg" 'logfile' '-l' append_bool "$cfg" 'use_http1' '-x' config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0' - config_get verbosity "$cfg" 'verbosity' "0" + config_get verbosity "$cfg" 'verbosity' '0' # shellcheck disable=SC2086,SC2154 for i in $(seq 1 $verbosity); do - xappend "-v" + xappend '-v' done # shellcheck disable=SC2154 if [ "$ipv6_resolvers_only" = 0 ]; then - xappend "-4" + xappend '-4' fi procd_open_instance @@ -80,19 +92,36 @@ start_instance() { p="$((p+1))" } -service_triggers() { - procd_add_reload_trigger 'https-dns-proxy' -} +is_force_dns_active() { iptables-save | grep -q -w -- '--dport 53'; } start_service() { local p=5053 config_load 'https-dns-proxy' config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*' + config_get_bool forceDNS 'config' 'force_dns' '1' dhcp_backup 'create' config_load 'https-dns-proxy' config_foreach start_instance 'https-dns-proxy' - if [ "$p" != "5053" ] && [ "$dnsmasqConfig" = "*" ]; then - uci -q del_list "dhcp.@dnsmasq[0].server=127.0.0.1#5353" + if [ "$forceDNS" -ne 0 ]; then + procd_open_instance 'main' + procd_set_param command /bin/true + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_open_data + json_add_array firewall + json_add_object '' + json_add_string type redirect + json_add_string name https_dns_proxy_dns_redirect + json_add_string target DNAT + json_add_string src lan + json_add_string proto tcpudp + json_add_string src_dport 53 + json_add_string dest_port 53 + json_add_string reflection 0 + json_close_object + json_close_array + procd_close_data + procd_close_instance fi if [ -n "$(uci -q changes dhcp)" ]; then uci -q commit dhcp @@ -102,7 +131,7 @@ start_service() { stop_service() { config_load 'https-dns-proxy' - config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*' + config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*' dhcp_backup 'restore' if [ -n "$(uci -q changes dhcp)" ]; then uci -q commit dhcp @@ -111,9 +140,12 @@ stop_service() { } service_triggers() { - procd_add_reload_trigger 'https-dns-proxy' + procd_add_config_trigger "config.change" "https-dns-proxy" /etc/init.d/https-dns-proxy reload } +service_started() { procd_set_config_changed firewall; } +service_stopped() { procd_set_config_changed firewall; } + dnsmasq_add_doh_server() { local cfg="$1" address="$2" port="$3" case $address in From af70f16ef9a96845d6f398f883d12fe0b4bb83a2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 3 Mar 2021 17:13:11 +0100 Subject: [PATCH 080/195] Fix ifname --- .../htdocs/luci-static/resources/view/network/interfaces.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js index 9d7a219ca..c76e02dec 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js @@ -511,8 +511,8 @@ return view.extend({ var new_ifnames = L.toArray(value); - if (!value) - new_ifnames.length = Math.max(new_ifnames.length, 1); + if (value == undefined) + return; old_ifnames.sort(); new_ifnames.sort(); From afc7c851c823c06bfa4f8c751ecc71ae51c34282 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 3 Mar 2021 17:13:36 +0100 Subject: [PATCH 081/195] Reconnect PPPoE --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 690045e88..77d324ce7 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -272,6 +272,9 @@ function wizard_add() elseif typeintf == "" and device ~= "" and proto == "modemmanager" then ucic:set("network",intf,"device",device_manager) end + if proto == "pppoe" then + ucic:set("network",intf,"pppd_options","persist maxfail 0") + end if proto ~= "other" then ucic:set("network",intf,"proto",proto) end From af872c51acc75a2ba427f188d358fd43636f60ec Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 5 Mar 2021 19:32:16 +0800 Subject: [PATCH 082/195] fix mptcp --- mptcp/Makefile | 0 mptcp/files/etc/init.d/mptcp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 mptcp/Makefile diff --git a/mptcp/Makefile b/mptcp/Makefile old mode 100755 new mode 100644 diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 1c0eb1e58..663c5cc91 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -189,7 +189,7 @@ interface_multipath_settings() { gateway=$(ubus call network.interface.${config}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") fi if [ -z "$gateway" ] || [ "$( valid_subnet4 $gateway )" != "ok" ]; then - gateway=$(traceroute -m1 -i $iface 223.5.5.5 2>/dev/null | awk 'FNR==2{ print $2 }') + gateway=$(traceroute -m1 -i $iface 8.8.8.8 2>/dev/null | awk 'FNR==2{ print $2 }') fi network_get_subnet netmask $config [ -n "$netmask" ] && [ "$(echo $netmask | grep '/')" != "" ] && netmask="" From 3e2f58e0bb4a4625c9134f36394c56e52cf772fe Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 5 Mar 2021 19:37:27 +0800 Subject: [PATCH 083/195] fix mptcp --- mptcp/files/etc/hotplug.d/iface/30-mptcp | 0 mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100755 => 100644 mptcp/files/etc/hotplug.d/iface/30-mptcp diff --git a/mptcp/files/etc/hotplug.d/iface/30-mptcp b/mptcp/files/etc/hotplug.d/iface/30-mptcp old mode 100755 new mode 100644 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 f420e4f64..487e01ad5 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -770,7 +770,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]; 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 223.5.5.5) + #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 @@ -1047,7 +1047,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface } if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -4 -s -m 3 https://55860.com/bak/version.json)" + local latestversions="$(curl -4 -s -m 3 https://www.openmptcprouter.com/version/version.json)" [ -n "$latestversions" ] && { uci -q set openmptcprouter.latest_versions=latest_versions uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr') From a3066d7e251f5881e425febeec06c5ff457151ef Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 5 Mar 2021 19:39:33 +0800 Subject: [PATCH 084/195] Update post-tracking --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 487e01ad5..7599b8e1c 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1047,7 +1047,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface } if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -4 -s -m 3 https://www.openmptcprouter.com/version/version.json)" + local latestversions="$(curl -4 -s -m 3 https://55860.com/bak/version.json)" [ -n "$latestversions" ] && { uci -q set openmptcprouter.latest_versions=latest_versions uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr') From 95c61b9a4d18c90643fa609bc9724230df7e7437 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 5 Mar 2021 19:55:10 +0800 Subject: [PATCH 085/195] FIX --- luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm | 0 luci-app-sysupgrade/Makefile | 0 luci-app-sysupgrade/luasrc/view/sysupgrade.htm | 0 luci-app-sysupgrade/po/templates/sysupgrade.pot | 0 .../usr/share/luci/menu.d/luci-app-sysupgrade.json | 0 .../root/usr/share/rpcd/acl.d/sysupgrade.json | 0 .../root/www/luci-static/resources/sysupgrade.js | 0 luci-theme-argon/Screenshots/screenshot_pc.jpg | Bin luci-theme-argon/Screenshots/screenshot_phone.jpg | Bin .../htdocs/luci-static/argon/favicon.ico | Bin .../htdocs/luci-static/argon/icon/favicon-16x16.png | Bin .../htdocs/luci-static/argon/icon/favicon-32x32.png | Bin .../htdocs/luci-static/argon/icon/favicon-96x96.png | Bin .../htdocs/luci-static/argon/js/polyfill.min.js | 0 .../luasrc/view/themes/argon/footer_login.htm | 0 .../luasrc/view/themes/argon/out_footer_login.htm | 0 luci-theme-openwrt-2020/Makefile | 0 .../openwrt2020/GalanoGrotesqueW00-Regular.woff2 | Bin .../htdocs/luci-static/openwrt2020/cascade.css | 0 .../htdocs/luci-static/openwrt2020/omr-logo.png | Bin .../htdocs/luci-static/openwrt2020/spinner.svg | 0 .../luci-static/resources/menu-openwrt2020.js | 0 .../luasrc/view/themes/openwrt2020/footer.htm | 0 .../luasrc/view/themes/openwrt2020/header.htm | 0 mc/Config.in | 0 mc/Makefile | 0 mc/patches/010-subshell.patch | 0 .../020-fix-mouse-handling-newer-terminfo.patch | 0 mc/patches/030-fix-gettext-full-0.21.patch | 0 mptcp/Makefile | 0 mptcp/files/etc/hotplug.d/iface/30-mptcp | 0 31 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm mode change 100644 => 100755 luci-app-sysupgrade/Makefile mode change 100644 => 100755 luci-app-sysupgrade/luasrc/view/sysupgrade.htm mode change 100644 => 100755 luci-app-sysupgrade/po/templates/sysupgrade.pot mode change 100644 => 100755 luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json mode change 100644 => 100755 luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json mode change 100644 => 100755 luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js mode change 100644 => 100755 luci-theme-argon/Screenshots/screenshot_pc.jpg mode change 100644 => 100755 luci-theme-argon/Screenshots/screenshot_phone.jpg mode change 100644 => 100755 luci-theme-argon/htdocs/luci-static/argon/favicon.ico mode change 100644 => 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png mode change 100644 => 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png mode change 100644 => 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png mode change 100644 => 100755 luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js mode change 100644 => 100755 luci-theme-argon/luasrc/view/themes/argon/footer_login.htm mode change 100644 => 100755 luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm mode change 100644 => 100755 luci-theme-openwrt-2020/Makefile mode change 100644 => 100755 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 mode change 100644 => 100755 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css mode change 100644 => 100755 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png mode change 100644 => 100755 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg mode change 100644 => 100755 luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js mode change 100644 => 100755 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm mode change 100644 => 100755 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm mode change 100644 => 100755 mc/Config.in mode change 100644 => 100755 mc/Makefile mode change 100644 => 100755 mc/patches/010-subshell.patch mode change 100644 => 100755 mc/patches/020-fix-mouse-handling-newer-terminfo.patch mode change 100644 => 100755 mc/patches/030-fix-gettext-full-0.21.patch mode change 100644 => 100755 mptcp/Makefile mode change 100644 => 100755 mptcp/files/etc/hotplug.d/iface/30-mptcp diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/Makefile b/luci-app-sysupgrade/Makefile old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/po/templates/sysupgrade.pot b/luci-app-sysupgrade/po/templates/sysupgrade.pot old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json b/luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json b/luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json old mode 100644 new mode 100755 diff --git a/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js b/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js old mode 100644 new mode 100755 diff --git a/luci-theme-argon/Screenshots/screenshot_pc.jpg b/luci-theme-argon/Screenshots/screenshot_pc.jpg old mode 100644 new mode 100755 diff --git a/luci-theme-argon/Screenshots/screenshot_phone.jpg b/luci-theme-argon/Screenshots/screenshot_phone.jpg old mode 100644 new mode 100755 diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.ico b/luci-theme-argon/htdocs/luci-static/argon/favicon.ico old mode 100644 new mode 100755 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png old mode 100644 new mode 100755 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png old mode 100644 new mode 100755 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png old mode 100644 new mode 100755 diff --git a/luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js b/luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js old mode 100644 new mode 100755 diff --git a/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm b/luci-theme-argon/luasrc/view/themes/argon/footer_login.htm old mode 100644 new mode 100755 diff --git a/luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm b/luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/Makefile b/luci-theme-openwrt-2020/Makefile old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js b/luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm b/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm old mode 100644 new mode 100755 diff --git a/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm b/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm old mode 100644 new mode 100755 diff --git a/mc/Config.in b/mc/Config.in old mode 100644 new mode 100755 diff --git a/mc/Makefile b/mc/Makefile old mode 100644 new mode 100755 diff --git a/mc/patches/010-subshell.patch b/mc/patches/010-subshell.patch old mode 100644 new mode 100755 diff --git a/mc/patches/020-fix-mouse-handling-newer-terminfo.patch b/mc/patches/020-fix-mouse-handling-newer-terminfo.patch old mode 100644 new mode 100755 diff --git a/mc/patches/030-fix-gettext-full-0.21.patch b/mc/patches/030-fix-gettext-full-0.21.patch old mode 100644 new mode 100755 diff --git a/mptcp/Makefile b/mptcp/Makefile old mode 100644 new mode 100755 diff --git a/mptcp/files/etc/hotplug.d/iface/30-mptcp b/mptcp/files/etc/hotplug.d/iface/30-mptcp old mode 100644 new mode 100755 From 9ef88941d073c69c2622b6b2562b1bfe456502ee Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 5 Mar 2021 20:40:06 +0800 Subject: [PATCH 086/195] fix --- 6in4/Makefile | 45 +++ 6in4/files/6in4.sh | 149 +++++++++ CLA-entity.md | 0 CLA-individual.md | 0 CODE_OF_CONDUCT.md | 0 CONTRIBUTING.md | 0 LICENSE | 0 README.md | 0 bcm27xx-eeprom/Makefile | 0 ...1-rpi-eeprom-update-OpenWrt-defaults.patch | 0 ...m-update-change-default-include-path.patch | 0 .../0004-rpi-eeprom-update-remove-chmod.patch | 0 contributors/cr3ative.md | 0 contributors/example.md | 0 dsvpn/Makefile | 0 dsvpn/patches/nofirewall.patch | 0 dsvpn/patches/nostrip.patch | 0 glorytun-udp/Makefile | 0 glorytun-udp/patches/aegis-arm.patch | 0 glorytun/Makefile | 0 glorytun/glorytun.config | 0 golang-protobuf/Makefile | 0 golang/golang-build.sh | 0 golang/golang-compiler.mk | 0 golang/golang-golang-x-crypto/Makefile | 0 golang/golang-golang-x-net/Makefile | 0 golang/golang-golang-x-sys/Makefile | 0 golang/golang-golang-x-text/Makefile | 0 golang/golang-host-build.mk | 0 golang/golang-package.mk | 0 golang/golang-values.mk | 0 golang/golang/Config.in | 0 golang/golang/Makefile | 0 golang/golang/files/go-gcc-helper | 0 https-dns-proxy/Makefile | 0 https-dns-proxy/files/README.md | 0 https-dns-proxy/files/https-dns-proxy.config | 0 ipcalc/Makefile | 0 iptables-mod-fullconenat/Makefile | 0 iptables-mod-fullconenat/README.md | 0 iptables-mod-fullconenat/files/Makefile | 0 .../patches/000-printk.patch | 0 lcd4linux/Config.in | 0 lcd4linux/Makefile | 0 lcd4linux/files/lcd4linux.init | 0 .../120-remove-as-needed-linker-option.patch | 0 lcd4linux/patches/140-no_repnop_T6963.patch | 0 lcd4linux/patches/150-addlibmpdclient.patch | 0 lcd4linux/patches/160-uinput_defs.patch | 0 .../170-add-generic-spidev-driver.patch | 0 .../patches/173-glcd2usb-bigendian-fix.patch | 0 libbpf/Makefile | 0 libell/Makefile | 0 luci-app-dsvpn/Makefile | 0 .../resources/view/services/dsvpn.js | 0 luci-app-dsvpn/po/fr/dsvpn.po | 0 luci-app-dsvpn/po/templates/dsvpn.pot | 0 luci-app-dsvpn/po/zh_Hans/dsvpn.po | 0 .../usr/share/luci/menu.d/luci-app-dsvpn.json | 0 .../usr/share/rpcd/acl.d/luci-app-dsvpn.json | 0 luci-app-firewall/Makefile | 0 .../luci-static/resources/tools/firewall.js | 0 .../resources/view/firewall/custom.js | 0 .../resources/view/firewall/forwards.js | 0 .../resources/view/firewall/rules.js | 0 .../resources/view/firewall/snats.js | 0 .../resources/view/firewall/zones.js | 0 luci-app-firewall/po/bg/firewall.po | 0 luci-app-firewall/po/ca/firewall.po | 0 luci-app-firewall/po/cs/firewall.po | 0 luci-app-firewall/po/de/firewall.po | 0 luci-app-firewall/po/el/firewall.po | 0 luci-app-firewall/po/en/firewall.po | 0 luci-app-firewall/po/es/firewall.po | 0 luci-app-firewall/po/fr/firewall.po | 0 luci-app-firewall/po/he/firewall.po | 0 luci-app-firewall/po/hi/firewall.po | 0 luci-app-firewall/po/hu/firewall.po | 0 luci-app-firewall/po/it/firewall.po | 0 luci-app-firewall/po/ja/firewall.po | 0 luci-app-firewall/po/ko/firewall.po | 0 luci-app-firewall/po/mr/firewall.po | 0 luci-app-firewall/po/ms/firewall.po | 0 luci-app-firewall/po/nb_NO/firewall.po | 0 luci-app-firewall/po/pl/firewall.po | 0 luci-app-firewall/po/pt/firewall.po | 0 luci-app-firewall/po/pt_BR/firewall.po | 0 luci-app-firewall/po/ro/firewall.po | 0 luci-app-firewall/po/ru/firewall.po | 0 luci-app-firewall/po/sk/firewall.po | 0 luci-app-firewall/po/sv/firewall.po | 0 luci-app-firewall/po/templates/firewall.pot | 0 luci-app-firewall/po/tr/firewall.po | 0 luci-app-firewall/po/uk/firewall.po | 0 luci-app-firewall/po/vi/firewall.po | 0 luci-app-firewall/po/zh_Hans/firewall.po | 0 luci-app-firewall/po/zh_Hant/firewall.po | 0 .../share/luci/menu.d/luci-app-firewall.json | 0 .../share/rpcd/acl.d/luci-app-firewall.json | 0 luci-app-glorytun-tcp/Makefile | 0 .../resources/view/services/glorytun-tcp.js | 0 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 0 .../po/templates/glorytun-tcp.pot | 0 .../po/zh_Hans/glorytun-tcp.po | 0 .../root/etc/hotplug.d/iface/30-glorytun | 0 .../root/etc/uci-defaults/1200-luci-glorytun | 0 .../luci/menu.d/luci-app-glorytun-tcp.json | 0 .../rpcd/acl.d/luci-app-glorytun-tcp.json | 0 luci-app-glorytun-udp/Makefile | 0 .../resources/view/services/glorytun-udp.js | 0 luci-app-glorytun-udp/po/fr/glorytun-udp.po | 0 .../po/templates/glorytun-udp.pot | 0 .../po/zh_Hans/glorytun-udp.po | 0 .../root/etc/config/glorytun-udp | 0 .../root/etc/hotplug.d/iface/30-glorytun-udp | 0 .../etc/uci-defaults/1201-luci-glorytun-udp | 0 .../luci/menu.d/luci-app-glorytun-udp.json | 0 .../rpcd/acl.d/luci-app-glorytun-udp.json | 0 luci-app-haproxy-tcp/LICENSE | 0 luci-app-haproxy-tcp/Makefile | 0 luci-app-haproxy-tcp/README.md | 0 .../luasrc/controller/haproxy-tcp.lua | 0 .../luasrc/model/cbi/haproxy-tcp.lua | 0 luci-app-haproxy-tcp/po/fr/haproxy-tcp.po | 0 .../po/templates/haproxy-tcp.pot | 0 luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po | 0 .../root/etc/config/haproxy-tcp | 0 .../root/etc/uci-defaults/41_luci-haproxy-tcp | 0 luci-app-https-dns-proxy/Makefile | 0 .../luasrc/controller/https-dns-proxy.lua | 0 .../ch.digitale-gesellschaft.dns.lua | 0 .../providers.disabled/cn.rubyfish.dns.lua | 0 .../providers.disabled/sb.dns.lua | 0 .../providers/com.adguard.dns-family.lua | 0 .../providers/com.adguard.dns.lua | 0 .../providers/com.cloudflare-dns-family.lua | 0 .../providers/com.cloudflare-dns-malware.lua | 0 .../providers/com.cloudflare-dns.lua | 0 .../https-dns-proxy/providers/cz.nic.odvr.lua | 0 .../https-dns-proxy/providers/google.dns.lua | 0 .../providers/gr.libredns.doh-ads.lua | 0 .../providers/gr.libredns.doh.lua | 0 .../providers/net.quad9.dns.lua | 0 .../providers/net.quad9.dns10.lua | 0 .../providers/net.quad9.dns11.lua | 0 .../providers/net.quad9.dns9.lua | 0 .../providers/org.cleanbrowsing.doh-adult.lua | 0 .../org.cleanbrowsing.doh-family.lua | 0 .../org.cleanbrowsing.doh-security.lua | 0 .../luasrc/model/cbi/https-dns-proxy.lua | 0 .../luasrc/view/https-dns-proxy/buttons.htm | 0 .../luasrc/view/https-dns-proxy/css.htm | 0 .../luasrc/view/https-dns-proxy/js.htm | 0 .../view/https-dns-proxy/status-textarea.htm | 0 .../luasrc/view/https-dns-proxy/status.htm | 0 .../po/bg/https-dns-proxy.po | 0 .../po/ca/https-dns-proxy.po | 0 .../po/cs/https-dns-proxy.po | 0 .../po/de/https-dns-proxy.po | 0 .../po/el/https-dns-proxy.po | 0 .../po/en/https-dns-proxy.po | 0 .../po/es/https-dns-proxy.po | 0 .../po/fr/https-dns-proxy.po | 0 .../po/he/https-dns-proxy.po | 0 .../po/hi/https-dns-proxy.po | 0 .../po/hu/https-dns-proxy.po | 0 .../po/it/https-dns-proxy.po | 0 .../po/ja/https-dns-proxy.po | 0 .../po/ko/https-dns-proxy.po | 0 .../po/mr/https-dns-proxy.po | 0 .../po/ms/https-dns-proxy.po | 0 .../po/nb_NO/https-dns-proxy.po | 0 .../po/pl/https-dns-proxy.po | 0 .../po/pt/https-dns-proxy.po | 0 .../po/pt_BR/https-dns-proxy.po | 0 .../po/ro/https-dns-proxy.po | 0 .../po/ru/https-dns-proxy.po | 0 .../po/sk/https-dns-proxy.po | 0 .../po/sv/https-dns-proxy.po | 0 .../po/templates/https-dns-proxy.pot | 0 .../po/tr/https-dns-proxy.po | 0 .../po/uk/https-dns-proxy.po | 0 .../po/vi/https-dns-proxy.po | 0 .../po/zh_Hans/https-dns-proxy.po | 0 .../po/zh_Hant/https-dns-proxy.po | 0 .../etc/uci-defaults/40_luci-https-dns-proxy | 0 .../luci/menu.d/luci-app-https-dns-proxy.json | 0 .../rpcd/acl.d/luci-app-https-dns-proxy.json | 0 luci-app-iperf/Makefile | 0 luci-app-iperf/luasrc/controller/iperf.lua | 0 luci-app-iperf/luasrc/view/iperf/test.htm | 0 luci-app-iperf/po/de/iperf.po | 0 luci-app-iperf/po/fr/iperf.po | 0 luci-app-iperf/po/it/iperf.po | 0 luci-app-iperf/po/oc/iperf.po | 0 luci-app-iperf/po/templates/iperf.pot | 0 luci-app-iperf/po/zh_Hans/iperf.po | 0 luci-app-iperf/root/etc/config/iperf | 0 .../usr/share/luci/menu.d/luci-app-iperf.json | 0 .../usr/share/rpcd/acl.d/luci-app-iperf.json | 0 luci-app-macvlan/po/zh_Hans/macvlan.po | 0 luci-app-mail/Makefile | 0 luci-app-mail/luasrc/controller/mail.lua | 0 luci-app-mail/luasrc/model/cbi/mail.lua | 0 luci-app-mail/po/de/mail.po | 0 luci-app-mail/po/fr/mail.po | 0 luci-app-mail/po/it/mail.po | 0 luci-app-mail/po/oc/mail.po | 0 luci-app-mail/po/templates/mail.pot | 0 luci-app-mail/po/zh_Hans/mail.po | 0 luci-app-mail/po/zh_Hant_HK/mail.po | 0 luci-app-mail/root/etc/config/mail | 0 .../usr/share/luci/menu.d/luci-app-mail.json | 0 .../usr/share/rpcd/acl.d/luci-app-mail.json | 0 luci-app-mlvpn/Makefile | 0 .../resources/view/services/mlvpn.js | 0 luci-app-mlvpn/po/fr/mlvpn.po | 0 luci-app-mlvpn/po/templates/mlvpn.pot | 0 luci-app-mlvpn/po/zh_Hans/mlvpn.po | 0 .../usr/share/luci/menu.d/luci-app-mlvpn.json | 0 .../usr/share/rpcd/acl.d/luci-app-mlvpn.json | 0 luci-app-mptcp/Makefile | 0 .../luci-static/resources/seedrandom.js | 0 luci-app-mptcp/luasrc/controller/mptcp.lua | 0 luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 0 .../luasrc/view/mptcp/mptcp_check.htm | 0 .../luasrc/view/mptcp/mptcp_connections.htm | 0 .../luasrc/view/mptcp/mptcp_fullmesh.htm | 0 .../luasrc/view/mptcp/mptcp_monitor.htm | 0 .../luasrc/view/mptcp/multipath.htm | 0 luci-app-mptcp/po/de/mptcp.po | 0 luci-app-mptcp/po/fr/mptcp.po | 0 luci-app-mptcp/po/it/mptcp.po | 0 luci-app-mptcp/po/oc/mptcp.po | 0 luci-app-mptcp/po/templates/mptcp.pot | 0 luci-app-mptcp/po/zh_Hans/mptcp.po | 0 .../usr/share/luci/menu.d/luci-app-mptcp.json | 0 .../usr/share/rpcd/acl.d/luci-app-mptcp.json | 0 luci-app-nginx-ha/LICENSE | 0 luci-app-nginx-ha/Makefile | 0 .../luasrc/controller/nginx-ha.lua | 0 .../luasrc/model/cbi/nginx-ha.lua | 0 luci-app-nginx-ha/po/fr/nginx-ha.po | 0 luci-app-nginx-ha/po/templates/nginx-ha.pot | 0 luci-app-nginx-ha/root/etc/config/nginx-ha | 0 .../root/etc/uci-defaults/42_luci-nginx-ha | 0 .../share/luci/menu.d/luci-app-nginx-ha.json | 0 .../share/rpcd/acl.d/luci-app-nginx-ha.json | 0 luci-app-omr-bypass/Makefile | 0 .../resources/view/services/omr-bypass.js | 0 luci-app-omr-bypass/po/de/omr-bypass.po | 0 luci-app-omr-bypass/po/fr/omr-bypass.po | 0 luci-app-omr-bypass/po/it/omr-bypass.po | 0 luci-app-omr-bypass/po/oc/omr-bypass.po | 0 .../po/templates/omr-bypass.pot | 0 luci-app-omr-bypass/po/zh_Hans/omr-bypass.po | 0 .../root/etc/config/omr-bypass | 0 .../root/etc/firewall.omr-bypass | 0 .../luci/menu.d/luci-app-omr-bypass.json | 0 .../share/rpcd/acl.d/luci-app-omr-bypass.json | 0 luci-app-omr-dscp/Makefile | 0 .../luasrc/controller/omr-dscp.lua | 0 .../luasrc/model/cbi/dscp-domains.lua | 0 luci-app-omr-dscp/luasrc/model/cbi/dscp.lua | 0 luci-app-omr-dscp/po/de/omr-dscp.po | 0 luci-app-omr-dscp/po/fr/omr-dscp.po | 0 luci-app-omr-dscp/po/it/omr-dscp.po | 0 luci-app-omr-dscp/po/oc/omr-dscp.po | 0 luci-app-omr-dscp/po/templates/omr-dscp.pot | 0 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po | 0 luci-app-omr-dscp/root/etc/config/dscp | 0 .../share/luci/menu.d/luci-app-omr-dscp.json | 0 .../share/rpcd/acl.d/luci-app-omr-dscp.json | 0 luci-app-omr-quota/Makefile | 0 .../luasrc/controller/quota.lua | 0 .../luasrc/model/cbi/quota/quota.lua | 0 .../luasrc/view/omr-quota/cbi-select-add.htm | 0 luci-app-omr-quota/po/de/omr-quota.po | 0 luci-app-omr-quota/po/fr/omr-quota.po | 0 luci-app-omr-quota/po/it/omr-quota.po | 0 luci-app-omr-quota/po/oc/omr-quota.po | 0 luci-app-omr-quota/po/templates/omr-quota.pot | 0 luci-app-omr-quota/po/zh_Hans/omr-quota.po | 0 .../share/luci/menu.d/luci-app-omr-quota.json | 0 .../share/rpcd/acl.d/luci-app-omr-quota.json | 0 luci-app-omr-tracker/Makefile | 0 .../luasrc/controller/omr-tracker.lua | 0 .../luasrc/model/cbi/omr-tracker.lua | 0 .../view/omr-tracker/cbi-select-add.htm | 0 luci-app-omr-tracker/po/de/omr-tracker.po | 0 luci-app-omr-tracker/po/fr/omr-tracker.po | 0 luci-app-omr-tracker/po/it/omr-tracker.po | 0 luci-app-omr-tracker/po/oc/omr-tracker.po | 0 .../po/templates/omr-tracker.pot | 0 .../po/zh_Hans/omr-tracker.po | 0 .../root/etc/uci-defaults/42_luci-omr-tracker | 0 .../luci/menu.d/luci-app-omr-tracker.json | 0 .../rpcd/acl.d/luci-app-omr-tracker.json | 0 luci-app-openmptcprouter/Makefile | 0 .../openmptcprouter/css/wanstatus.css | 0 .../openmptcprouter/images/status-doing.png | Bin .../openmptcprouter/images/status-done.png | Bin .../openmptcprouter/images/status-error.png | Bin .../openmptcprouter/images/status-todo.png | Bin .../openmptcprouter/images/status-warn.png | Bin .../openmptcprouter/images/statusError.png | Bin .../openmptcprouter/images/statusOK.png | Bin .../openmptcprouter/images/statusWarning.png | Bin .../htdocs/luci-static/resources/spinner.gif | Bin .../luasrc/controller/openmptcprouter.lua | 0 .../luasrc/view/openmptcprouter/backup.htm | 0 .../luasrc/view/openmptcprouter/debug.htm | 0 .../luasrc/view/openmptcprouter/settings.htm | 0 .../luasrc/view/openmptcprouter/wanstatus.htm | 0 .../luasrc/view/openmptcprouter/wizard.htm | 2 +- .../po/de/openmptcprouter.po | 0 .../po/fr/openmptcprouter.po | 0 .../po/it/openmptcprouter.po | 0 .../po/oc/openmptcprouter.po | 0 .../po/templates/openmptcprouter.pot | 0 .../po/zh_Hans/openmptcprouter.po | 0 .../root/etc/config/openmptcprouter | 0 .../root/etc/hotplug.d/net/99-omr-rename | 0 .../etc/sysctl.d/zzz_openmptcprouter.conf | 0 .../root/etc/uci-defaults/openmptcprouter | 1 - .../luci/menu.d/luci-app-openmptcprouter.json | 0 .../rpcd/acl.d/luci-app-openmptcprouter.json | 0 luci-app-packet-capture/Makefile | 0 .../resources/view/packet_capture/tcpdump.js | 0 .../root/etc/config/packet_capture | 0 .../luci/menu.d/luci-app-packet-capture.json | 0 .../rpcd/acl.d/luci-app-packet-capture.json | 0 luci-app-shadowsocks-libev/Makefile | 0 .../resources/shadowsocks-libev.js | 0 .../view/shadowsocks-libev/instances.js | 0 .../resources/view/shadowsocks-libev/rules.js | 0 .../view/shadowsocks-libev/servers.js | 0 .../luasrc/controller/shadowsocks-libev.lua | 0 .../po/bg/shadowsocks-libev.po | 0 .../po/ca/shadowsocks-libev.po | 0 .../po/cs/shadowsocks-libev.po | 0 .../po/de/shadowsocks-libev.po | 0 .../po/el/shadowsocks-libev.po | 0 .../po/en/shadowsocks-libev.po | 0 .../po/es/shadowsocks-libev.po | 0 .../po/fr/shadowsocks-libev.po | 0 .../po/he/shadowsocks-libev.po | 0 .../po/hi/shadowsocks-libev.po | 0 .../po/hu/shadowsocks-libev.po | 0 .../po/it/shadowsocks-libev.po | 0 .../po/ja/shadowsocks-libev.po | 0 .../po/ko/shadowsocks-libev.po | 0 .../po/ms/shadowsocks-libev.po | 0 .../po/nb_NO/shadowsocks-libev.po | 0 .../po/pl/shadowsocks-libev.po | 0 .../po/pt/shadowsocks-libev.po | 0 .../po/pt_BR/shadowsocks-libev.po | 0 .../po/ro/shadowsocks-libev.po | 0 .../po/ru/shadowsocks-libev.po | 0 .../po/sk/shadowsocks-libev.po | 0 .../po/sv/shadowsocks-libev.po | 0 .../po/templates/shadowsocks-libev.pot | 0 .../po/tr/shadowsocks-libev.po | 0 .../po/uk/shadowsocks-libev.po | 0 .../po/vi/shadowsocks-libev.po | 0 .../po/zh-cn/shadowsocks-libev.po | 0 .../po/zh-tw/shadowsocks-libev.po | 0 .../uci-defaults/40_luci-shadowsocks-libev | 0 .../menu.d/luci-app-shadowsocks-libev.json | 0 .../acl.d/luci-app-shadowsocks-libev.json | 0 luci-app-shutdown/Makefile | 0 .../resources/view/system/shutdown.js | 0 luci-app-shutdown/po/de/shutdown.po | 0 luci-app-shutdown/po/it/shutdown.po | 0 luci-app-shutdown/po/oc/shutdown.po | 0 luci-app-shutdown/po/templates/shutdown.pot | 0 luci-app-shutdown/po/zh_Hans/shutdown.po | 0 .../share/luci/menu.d/luci-app-shutdown.json | 0 .../share/rpcd/acl.d/luci-app-shutdown.json | 0 luci-app-snmpd/Makefile | 0 luci-app-snmpd/luasrc/controller/snmpd.lua | 0 luci-app-snmpd/luasrc/model/cbi/snmpd.lua | 0 luci-app-snmpd/luasrc/view/snmpd.htm | 0 luci-app-snmpd/po/de/snmpd.po | 0 luci-app-snmpd/po/it/snmpd.po | 0 luci-app-snmpd/po/oc/snmpd.po | 0 luci-app-snmpd/po/templates/snmpd.pot | 0 luci-app-snmpd/po/zh_Hans/snmpd.po | 0 luci-app-snmpd/root/etc/config/snmpd | 0 .../usr/share/luci/menu.d/luci-app-snmpd.json | 0 .../usr/share/rpcd/acl.d/luci-app-snmpd.json | 0 luci-app-sysupgrade/Makefile | 0 .../luasrc/view/sysupgrade.htm | 0 .../po/templates/sysupgrade.pot | 0 .../luci/menu.d/luci-app-sysupgrade.json | 0 .../root/usr/share/rpcd/acl.d/sysupgrade.json | 0 .../www/luci-static/resources/sysupgrade.js | 0 luci-base/po/oc/base.po | 0 luci-base/po/templates/base.pot | 0 luci-mod-dashboard/Makefile | 0 .../resources/view/dashboard/css/custom.css | 0 .../view/dashboard/icons/devices.svg | 0 .../view/dashboard/icons/internet.svg | 0 .../view/dashboard/icons/not-internet.svg | 0 .../resources/view/dashboard/icons/router.svg | 0 .../view/dashboard/icons/wireless.svg | 0 .../view/dashboard/include/10_router.js | 0 .../view/dashboard/include/20_lan.js | 0 .../view/dashboard/include/30_wifi.js | 0 .../resources/view/dashboard/index.js | 0 .../share/luci/menu.d/luci-mod-dashboard.json | 0 .../share/rpcd/acl.d/luci-mod-dashboard.json | 0 luci-mod-network/Makefile | 0 .../resources/view/network/dhcp.js | 0 .../resources/view/network/diagnostics.js | 0 .../resources/view/network/hosts.js | 0 .../resources/view/network/interfaces.js | 0 .../resources/view/network/routes.js | 0 .../resources/view/network/switch.js | 0 .../resources/view/network/wireless.js | 0 .../share/luci/menu.d/luci-mod-network.json | 0 .../share/rpcd/acl.d/luci-mod-network.json | 0 luci-proto-mbim/Makefile | 0 .../luci-static/resources/protocol/mbim.js | 0 luci-proto-modemmanager/Makefile | 0 .../resources/protocol/modemmanager.js | 0 .../rpcd/acl.d/luci-proto-modemmanager.json | 0 luci-theme-argon/Makefile | 0 luci-theme-argon/README.md | 0 luci-theme-argon/README_ZH.md | 0 .../Screenshots/screenshot_pc.jpg | Bin .../Screenshots/screenshot_phone.jpg | Bin .../luci-static/argon/background/README.md | 0 .../htdocs/luci-static/argon/css/cascade.css | 0 .../htdocs/luci-static/argon/css/dark.css | 0 .../htdocs/luci-static/argon/css/fonts.css | 0 .../htdocs/luci-static/argon/css/pure-min.css | 0 .../htdocs/luci-static/argon/favicon.ico | Bin .../luci-static/argon/fonts/TypoGraphica.eot | Bin .../luci-static/argon/fonts/TypoGraphica.svg | 0 .../luci-static/argon/fonts/TypoGraphica.ttf | Bin .../luci-static/argon/fonts/TypoGraphica.woff | Bin .../htdocs/luci-static/argon/fonts/argon.eot | Bin .../htdocs/luci-static/argon/fonts/argon.svg | 0 .../htdocs/luci-static/argon/fonts/argon.ttf | Bin .../htdocs/luci-static/argon/fonts/argon.woff | Bin .../argon/icon/android-icon-192x192.png | Bin .../argon/icon/apple-icon-144x144.png | Bin .../argon/icon/apple-icon-60x60.png | Bin .../argon/icon/apple-icon-72x72.png | Bin .../htdocs/luci-static/argon/icon/arrow.svg | 0 .../luci-static/argon/icon/browserconfig.xml | 0 .../luci-static/argon/icon/favicon-16x16.png | Bin .../luci-static/argon/icon/favicon-32x32.png | Bin .../luci-static/argon/icon/favicon-96x96.png | Bin .../htdocs/luci-static/argon/icon/favicon.png | Bin 535 -> 0 bytes .../luci-static/argon/icon/manifest.json | 0 .../argon/icon/ms-icon-144x144.png | Bin .../htdocs/luci-static/argon/icon/spinner.svg | 0 .../htdocs/luci-static/argon/img/argon.svg | 0 .../htdocs/luci-static/argon/img/bg1.jpg | Bin .../htdocs/luci-static/argon/img/blank.png | Bin .../luci-static/argon/img/volume_high.svg | 0 .../luci-static/argon/img/volume_off.svg | 0 .../htdocs/luci-static/argon/js/jquery.min.js | 0 .../luci-static/argon/js/polyfill.min.js | 0 .../htdocs/luci-static/argon/js/script.js | 0 .../luci-static/argon/less/cascade.less | 0 .../htdocs/luci-static/argon/less/dark.less | 0 .../luasrc/view/themes/argon/footer_login.htm | 0 .../luasrc/view/themes/argon/header.htm | 0 .../luasrc/view/themes/argon/header_login.htm | 0 .../view/themes/argon/out_footer_login.htm | 0 .../view/themes/argon/out_header_login.htm | 0 .../luasrc/view/themes/argon/sysauth.htm | 0 .../root/etc/uci-defaults/30_luci-theme-argon | 0 luci-theme-openmptcprouter/Makefile | 0 .../luci-static/openmptcprouter/html5.js | 0 .../luci-static/openmptcprouter/mobile.css | 0 .../resources/menu-openmptcprouter.js | 0 luci-theme-openwrt-2020/Makefile | 0 .../GalanoGrotesqueW00-Regular.woff2 | Bin .../luci-static/openwrt2020/cascade.css | 0 .../luci-static/openwrt2020/favicon.png | Bin .../luci-static/openwrt2020/omr-logo.png | Bin .../luci-static/openwrt2020/spinner.svg | 0 .../luci-static/resources/menu-openwrt2020.js | 0 .../luasrc/view/themes/openwrt2020/footer.htm | 0 .../luasrc/view/themes/openwrt2020/header.htm | 0 macvlan/Makefile | 0 macvlan/files/etc/config/macvlan | 0 .../etc/uci-defaults/40_luci-app-macvlan | 0 mc/Config.in | 0 mc/Makefile | 0 mc/patches/010-subshell.patch | 0 ...20-fix-mouse-handling-newer-terminfo.patch | 0 mc/patches/030-fix-gettext-full-0.21.patch | 0 mlvpn/Makefile | 0 mlvpn/files/etc/config/mlvpn | 0 mlvpn/files/etc/uci-defaults/4100-mlvpn | 0 mlvpn/patches/010-musl-fix.patch | 0 mptcp/Makefile | 0 mptcp/files/etc/hotplug.d/iface/30-mptcp | 0 mptcpd/Makefile | 0 mptcpd/patches/log.patch | 0 msmtp/Makefile | 0 ndisc6/Makefile | 0 ndpi-netfilter2/Makefile | 0 net-tools/Makefile | 0 net-tools/patches/mptcp-support.patch | 0 nginx/Config.in | 0 nginx/Config_ssl.in | 0 nginx/Makefile | 0 .../files-luci-support/60_nginx-luci-support | 0 .../70_nginx-luci-support-ssl | 0 nginx/files-luci-support/luci_nginx.conf | 0 nginx/files-luci-support/luci_nginx_ssl.conf | 0 nginx/files-luci-support/luci_uwsgi.conf | 0 nginx/files/nginx.init | 0 .../100-no_by_lua_block.patch | 0 nginx/patches/101-feature_test_fix.patch | 0 nginx/patches/102-sizeof_test_fix.patch | 0 nginx/patches/103-sys_nerr.patch | 0 nginx/patches/200-config.patch | 0 .../patches/201-ignore-invalid-options.patch | 0 nginx/patches/300-max-processes.patch | 0 omr-6in4/Makefile | 0 omr-quota/Makefile | 0 omr-quota/files/etc/config/omr-quota | 0 omr-tracker/Makefile | 0 omr-update/Makefile | 0 openmptcprouter-full/Makefile | 0 openmptcprouter-mini/Makefile | 0 openmptcprouter/Makefile | 0 openmptcprouter/files/etc/firewall.gre-tunnel | 0 openmptcprouter/files/etc/firewall.omr-server | 0 openmptcprouter/files/etc/iproute2/rt_dsfield | 0 .../files/etc/sysctl.d/default.conf | 0 .../files/etc/uci-defaults/1920-omr-network | 297 ++++++++++++++++++ openmptcprouter/files/etc/wgetrc | 0 protobuf/Makefile | 108 +++++++ serdisplib/Makefile | 0 shadowsocks-libev/Makefile | 0 shadowsocks-libev/README.md | 0 shadowsocks-libev/files/firewall.ss-rules | 0 .../files/shadowsocks-libev.config | 0 .../files/shadowsocks-libev.init | 0 shadowsocks-libev/files/shadowsocks.conf | 0 .../patches/010-ECONNRESET.patch | 0 shadowsocks-libev/patches/020-NOCRYPTO.patch | 0 shadowsocks-v2ray-plugin/Makefile | 0 simple-obfs/LICENSE | 0 simple-obfs/Makefile | 0 speedtestc/Makefile | 0 speedtestc/patches/compile-fix.patch | 0 speedtestc/patches/user-agent.patch | 0 tcptraceroute/Makefile | 0 .../patches/001-configure_cross_compile.patch | 0 tracebox/Makefile | 0 .../usr/share/tracebox/omr-mptcp-trace.lua | 0 tracebox/patches/101-build-fixes.patch | 0 tracebox/patches/102-configure.patch | 0 tracebox/patches/103-configure.patch | 0 tracebox/patches/104-ns_name_compress.patch | 0 .../patches/202-fix-lua-include-hpp.patch | 0 .../204-fix-lua-namespace-crafter.patch | 0 umbim/Makefile | 47 +++ umbim/files/lib/netifd/proto/mbim.sh | 240 ++++++++++++++ v2ray-core/Config.in | 0 v2ray-core/LICENSE | 0 v2ray-core/Makefile | 0 v2ray-core/files/etc/firewall.v2ray-rules | 0 .../files/etc/uci-defaults/3010-omr-v2ray | 0 v2ray-ext/Makefile | 0 574 files changed, 887 insertions(+), 2 deletions(-) create mode 100644 6in4/Makefile create mode 100755 6in4/files/6in4.sh mode change 100755 => 100644 CLA-entity.md mode change 100755 => 100644 CLA-individual.md mode change 100755 => 100644 CODE_OF_CONDUCT.md mode change 100755 => 100644 CONTRIBUTING.md mode change 100755 => 100644 LICENSE mode change 100755 => 100644 README.md mode change 100755 => 100644 bcm27xx-eeprom/Makefile mode change 100755 => 100644 bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch mode change 100755 => 100644 bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch mode change 100755 => 100644 bcm27xx-eeprom/patches/0004-rpi-eeprom-update-remove-chmod.patch mode change 100755 => 100644 contributors/cr3ative.md mode change 100755 => 100644 contributors/example.md mode change 100755 => 100644 dsvpn/Makefile mode change 100755 => 100644 dsvpn/patches/nofirewall.patch mode change 100755 => 100644 dsvpn/patches/nostrip.patch mode change 100755 => 100644 glorytun-udp/Makefile mode change 100755 => 100644 glorytun-udp/patches/aegis-arm.patch mode change 100755 => 100644 glorytun/Makefile mode change 100755 => 100644 glorytun/glorytun.config mode change 100755 => 100644 golang-protobuf/Makefile mode change 100755 => 100644 golang/golang-build.sh mode change 100755 => 100644 golang/golang-compiler.mk mode change 100755 => 100644 golang/golang-golang-x-crypto/Makefile mode change 100755 => 100644 golang/golang-golang-x-net/Makefile mode change 100755 => 100644 golang/golang-golang-x-sys/Makefile mode change 100755 => 100644 golang/golang-golang-x-text/Makefile mode change 100755 => 100644 golang/golang-host-build.mk mode change 100755 => 100644 golang/golang-package.mk mode change 100755 => 100644 golang/golang-values.mk mode change 100755 => 100644 golang/golang/Config.in mode change 100755 => 100644 golang/golang/Makefile mode change 100755 => 100644 golang/golang/files/go-gcc-helper mode change 100755 => 100644 https-dns-proxy/Makefile mode change 100755 => 100644 https-dns-proxy/files/README.md mode change 100755 => 100644 https-dns-proxy/files/https-dns-proxy.config mode change 100755 => 100644 ipcalc/Makefile mode change 100755 => 100644 iptables-mod-fullconenat/Makefile mode change 100755 => 100644 iptables-mod-fullconenat/README.md mode change 100755 => 100644 iptables-mod-fullconenat/files/Makefile mode change 100755 => 100644 iptables-mod-fullconenat/patches/000-printk.patch mode change 100755 => 100644 lcd4linux/Config.in mode change 100755 => 100644 lcd4linux/Makefile mode change 100755 => 100644 lcd4linux/files/lcd4linux.init mode change 100755 => 100644 lcd4linux/patches/120-remove-as-needed-linker-option.patch mode change 100755 => 100644 lcd4linux/patches/140-no_repnop_T6963.patch mode change 100755 => 100644 lcd4linux/patches/150-addlibmpdclient.patch mode change 100755 => 100644 lcd4linux/patches/160-uinput_defs.patch mode change 100755 => 100644 lcd4linux/patches/170-add-generic-spidev-driver.patch mode change 100755 => 100644 lcd4linux/patches/173-glcd2usb-bigendian-fix.patch mode change 100755 => 100644 libbpf/Makefile mode change 100755 => 100644 libell/Makefile mode change 100755 => 100644 luci-app-dsvpn/Makefile mode change 100755 => 100644 luci-app-dsvpn/htdocs/luci-static/resources/view/services/dsvpn.js mode change 100755 => 100644 luci-app-dsvpn/po/fr/dsvpn.po mode change 100755 => 100644 luci-app-dsvpn/po/templates/dsvpn.pot mode change 100755 => 100644 luci-app-dsvpn/po/zh_Hans/dsvpn.po mode change 100755 => 100644 luci-app-dsvpn/root/usr/share/luci/menu.d/luci-app-dsvpn.json mode change 100755 => 100644 luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json mode change 100755 => 100644 luci-app-firewall/Makefile mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js mode change 100755 => 100644 luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js mode change 100755 => 100644 luci-app-firewall/po/bg/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ca/firewall.po mode change 100755 => 100644 luci-app-firewall/po/cs/firewall.po mode change 100755 => 100644 luci-app-firewall/po/de/firewall.po mode change 100755 => 100644 luci-app-firewall/po/el/firewall.po mode change 100755 => 100644 luci-app-firewall/po/en/firewall.po mode change 100755 => 100644 luci-app-firewall/po/es/firewall.po mode change 100755 => 100644 luci-app-firewall/po/fr/firewall.po mode change 100755 => 100644 luci-app-firewall/po/he/firewall.po mode change 100755 => 100644 luci-app-firewall/po/hi/firewall.po mode change 100755 => 100644 luci-app-firewall/po/hu/firewall.po mode change 100755 => 100644 luci-app-firewall/po/it/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ja/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ko/firewall.po mode change 100755 => 100644 luci-app-firewall/po/mr/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ms/firewall.po mode change 100755 => 100644 luci-app-firewall/po/nb_NO/firewall.po mode change 100755 => 100644 luci-app-firewall/po/pl/firewall.po mode change 100755 => 100644 luci-app-firewall/po/pt/firewall.po mode change 100755 => 100644 luci-app-firewall/po/pt_BR/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ro/firewall.po mode change 100755 => 100644 luci-app-firewall/po/ru/firewall.po mode change 100755 => 100644 luci-app-firewall/po/sk/firewall.po mode change 100755 => 100644 luci-app-firewall/po/sv/firewall.po mode change 100755 => 100644 luci-app-firewall/po/templates/firewall.pot mode change 100755 => 100644 luci-app-firewall/po/tr/firewall.po mode change 100755 => 100644 luci-app-firewall/po/uk/firewall.po mode change 100755 => 100644 luci-app-firewall/po/vi/firewall.po mode change 100755 => 100644 luci-app-firewall/po/zh_Hans/firewall.po mode change 100755 => 100644 luci-app-firewall/po/zh_Hant/firewall.po mode change 100755 => 100644 luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json mode change 100755 => 100644 luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json mode change 100755 => 100644 luci-app-glorytun-tcp/Makefile mode change 100755 => 100644 luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js mode change 100755 => 100644 luci-app-glorytun-tcp/po/fr/glorytun-tcp.po mode change 100755 => 100644 luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot mode change 100755 => 100644 luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po mode change 100755 => 100644 luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun mode change 100755 => 100644 luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun mode change 100755 => 100644 luci-app-glorytun-tcp/root/usr/share/luci/menu.d/luci-app-glorytun-tcp.json mode change 100755 => 100644 luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json mode change 100755 => 100644 luci-app-glorytun-udp/Makefile mode change 100755 => 100644 luci-app-glorytun-udp/htdocs/luci-static/resources/view/services/glorytun-udp.js mode change 100755 => 100644 luci-app-glorytun-udp/po/fr/glorytun-udp.po mode change 100755 => 100644 luci-app-glorytun-udp/po/templates/glorytun-udp.pot mode change 100755 => 100644 luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po mode change 100755 => 100644 luci-app-glorytun-udp/root/etc/config/glorytun-udp mode change 100755 => 100644 luci-app-glorytun-udp/root/etc/hotplug.d/iface/30-glorytun-udp mode change 100755 => 100644 luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp mode change 100755 => 100644 luci-app-glorytun-udp/root/usr/share/luci/menu.d/luci-app-glorytun-udp.json mode change 100755 => 100644 luci-app-glorytun-udp/root/usr/share/rpcd/acl.d/luci-app-glorytun-udp.json mode change 100755 => 100644 luci-app-haproxy-tcp/LICENSE mode change 100755 => 100644 luci-app-haproxy-tcp/Makefile mode change 100755 => 100644 luci-app-haproxy-tcp/README.md mode change 100755 => 100644 luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua mode change 100755 => 100644 luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua mode change 100755 => 100644 luci-app-haproxy-tcp/po/fr/haproxy-tcp.po mode change 100755 => 100644 luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot mode change 100755 => 100644 luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po mode change 100755 => 100644 luci-app-haproxy-tcp/root/etc/config/haproxy-tcp mode change 100755 => 100644 luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp mode change 100755 => 100644 luci-app-https-dns-proxy/Makefile mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm mode change 100755 => 100644 luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm mode change 100755 => 100644 luci-app-https-dns-proxy/po/bg/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ca/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/cs/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/de/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/el/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/en/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/es/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/fr/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/he/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/hi/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/hu/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/it/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ja/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ko/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/mr/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ms/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/pl/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/pt/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ro/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/ru/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/sk/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/sv/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot mode change 100755 => 100644 luci-app-https-dns-proxy/po/tr/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/uk/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/vi/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po mode change 100755 => 100644 luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy mode change 100755 => 100644 luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json mode change 100755 => 100644 luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json mode change 100755 => 100644 luci-app-iperf/Makefile mode change 100755 => 100644 luci-app-iperf/luasrc/controller/iperf.lua mode change 100755 => 100644 luci-app-iperf/luasrc/view/iperf/test.htm mode change 100755 => 100644 luci-app-iperf/po/de/iperf.po mode change 100755 => 100644 luci-app-iperf/po/fr/iperf.po mode change 100755 => 100644 luci-app-iperf/po/it/iperf.po mode change 100755 => 100644 luci-app-iperf/po/oc/iperf.po mode change 100755 => 100644 luci-app-iperf/po/templates/iperf.pot mode change 100755 => 100644 luci-app-iperf/po/zh_Hans/iperf.po mode change 100755 => 100644 luci-app-iperf/root/etc/config/iperf mode change 100755 => 100644 luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json mode change 100755 => 100644 luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json mode change 100755 => 100644 luci-app-macvlan/po/zh_Hans/macvlan.po mode change 100755 => 100644 luci-app-mail/Makefile mode change 100755 => 100644 luci-app-mail/luasrc/controller/mail.lua mode change 100755 => 100644 luci-app-mail/luasrc/model/cbi/mail.lua mode change 100755 => 100644 luci-app-mail/po/de/mail.po mode change 100755 => 100644 luci-app-mail/po/fr/mail.po mode change 100755 => 100644 luci-app-mail/po/it/mail.po mode change 100755 => 100644 luci-app-mail/po/oc/mail.po mode change 100755 => 100644 luci-app-mail/po/templates/mail.pot mode change 100755 => 100644 luci-app-mail/po/zh_Hans/mail.po mode change 100755 => 100644 luci-app-mail/po/zh_Hant_HK/mail.po mode change 100755 => 100644 luci-app-mail/root/etc/config/mail mode change 100755 => 100644 luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json mode change 100755 => 100644 luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json mode change 100755 => 100644 luci-app-mlvpn/Makefile mode change 100755 => 100644 luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js mode change 100755 => 100644 luci-app-mlvpn/po/fr/mlvpn.po mode change 100755 => 100644 luci-app-mlvpn/po/templates/mlvpn.pot mode change 100755 => 100644 luci-app-mlvpn/po/zh_Hans/mlvpn.po mode change 100755 => 100644 luci-app-mlvpn/root/usr/share/luci/menu.d/luci-app-mlvpn.json mode change 100755 => 100644 luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json mode change 100755 => 100644 luci-app-mptcp/Makefile mode change 100755 => 100644 luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js mode change 100755 => 100644 luci-app-mptcp/luasrc/controller/mptcp.lua mode change 100755 => 100644 luci-app-mptcp/luasrc/model/cbi/mptcp.lua mode change 100755 => 100644 luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm mode change 100755 => 100644 luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm mode change 100755 => 100644 luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm mode change 100755 => 100644 luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm mode change 100755 => 100644 luci-app-mptcp/luasrc/view/mptcp/multipath.htm mode change 100755 => 100644 luci-app-mptcp/po/de/mptcp.po mode change 100755 => 100644 luci-app-mptcp/po/fr/mptcp.po mode change 100755 => 100644 luci-app-mptcp/po/it/mptcp.po mode change 100755 => 100644 luci-app-mptcp/po/oc/mptcp.po mode change 100755 => 100644 luci-app-mptcp/po/templates/mptcp.pot mode change 100755 => 100644 luci-app-mptcp/po/zh_Hans/mptcp.po mode change 100755 => 100644 luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json mode change 100755 => 100644 luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json mode change 100755 => 100644 luci-app-nginx-ha/LICENSE mode change 100755 => 100644 luci-app-nginx-ha/Makefile mode change 100755 => 100644 luci-app-nginx-ha/luasrc/controller/nginx-ha.lua mode change 100755 => 100644 luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua mode change 100755 => 100644 luci-app-nginx-ha/po/fr/nginx-ha.po mode change 100755 => 100644 luci-app-nginx-ha/po/templates/nginx-ha.pot mode change 100755 => 100644 luci-app-nginx-ha/root/etc/config/nginx-ha mode change 100755 => 100644 luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha mode change 100755 => 100644 luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json mode change 100755 => 100644 luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json mode change 100755 => 100644 luci-app-omr-bypass/Makefile mode change 100755 => 100644 luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js mode change 100755 => 100644 luci-app-omr-bypass/po/de/omr-bypass.po mode change 100755 => 100644 luci-app-omr-bypass/po/fr/omr-bypass.po mode change 100755 => 100644 luci-app-omr-bypass/po/it/omr-bypass.po mode change 100755 => 100644 luci-app-omr-bypass/po/oc/omr-bypass.po mode change 100755 => 100644 luci-app-omr-bypass/po/templates/omr-bypass.pot mode change 100755 => 100644 luci-app-omr-bypass/po/zh_Hans/omr-bypass.po mode change 100755 => 100644 luci-app-omr-bypass/root/etc/config/omr-bypass mode change 100755 => 100644 luci-app-omr-bypass/root/etc/firewall.omr-bypass mode change 100755 => 100644 luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json mode change 100755 => 100644 luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json mode change 100755 => 100644 luci-app-omr-dscp/Makefile mode change 100755 => 100644 luci-app-omr-dscp/luasrc/controller/omr-dscp.lua mode change 100755 => 100644 luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua mode change 100755 => 100644 luci-app-omr-dscp/luasrc/model/cbi/dscp.lua mode change 100755 => 100644 luci-app-omr-dscp/po/de/omr-dscp.po mode change 100755 => 100644 luci-app-omr-dscp/po/fr/omr-dscp.po mode change 100755 => 100644 luci-app-omr-dscp/po/it/omr-dscp.po mode change 100755 => 100644 luci-app-omr-dscp/po/oc/omr-dscp.po mode change 100755 => 100644 luci-app-omr-dscp/po/templates/omr-dscp.pot mode change 100755 => 100644 luci-app-omr-dscp/po/zh_Hans/omr-dscp.po mode change 100755 => 100644 luci-app-omr-dscp/root/etc/config/dscp mode change 100755 => 100644 luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json mode change 100755 => 100644 luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json mode change 100755 => 100644 luci-app-omr-quota/Makefile mode change 100755 => 100644 luci-app-omr-quota/luasrc/controller/quota.lua mode change 100755 => 100644 luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua mode change 100755 => 100644 luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm mode change 100755 => 100644 luci-app-omr-quota/po/de/omr-quota.po mode change 100755 => 100644 luci-app-omr-quota/po/fr/omr-quota.po mode change 100755 => 100644 luci-app-omr-quota/po/it/omr-quota.po mode change 100755 => 100644 luci-app-omr-quota/po/oc/omr-quota.po mode change 100755 => 100644 luci-app-omr-quota/po/templates/omr-quota.pot mode change 100755 => 100644 luci-app-omr-quota/po/zh_Hans/omr-quota.po mode change 100755 => 100644 luci-app-omr-quota/root/usr/share/luci/menu.d/luci-app-omr-quota.json mode change 100755 => 100644 luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json mode change 100755 => 100644 luci-app-omr-tracker/Makefile mode change 100755 => 100644 luci-app-omr-tracker/luasrc/controller/omr-tracker.lua mode change 100755 => 100644 luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua mode change 100755 => 100644 luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm mode change 100755 => 100644 luci-app-omr-tracker/po/de/omr-tracker.po mode change 100755 => 100644 luci-app-omr-tracker/po/fr/omr-tracker.po mode change 100755 => 100644 luci-app-omr-tracker/po/it/omr-tracker.po mode change 100755 => 100644 luci-app-omr-tracker/po/oc/omr-tracker.po mode change 100755 => 100644 luci-app-omr-tracker/po/templates/omr-tracker.pot mode change 100755 => 100644 luci-app-omr-tracker/po/zh_Hans/omr-tracker.po mode change 100755 => 100644 luci-app-omr-tracker/root/etc/uci-defaults/42_luci-omr-tracker mode change 100755 => 100644 luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json mode change 100755 => 100644 luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json mode change 100755 => 100644 luci-app-openmptcprouter/Makefile mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm mode change 100755 => 100644 luci-app-openmptcprouter/po/de/openmptcprouter.po mode change 100755 => 100644 luci-app-openmptcprouter/po/fr/openmptcprouter.po mode change 100755 => 100644 luci-app-openmptcprouter/po/it/openmptcprouter.po mode change 100755 => 100644 luci-app-openmptcprouter/po/oc/openmptcprouter.po mode change 100755 => 100644 luci-app-openmptcprouter/po/templates/openmptcprouter.pot mode change 100755 => 100644 luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po mode change 100755 => 100644 luci-app-openmptcprouter/root/etc/config/openmptcprouter mode change 100755 => 100644 luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename mode change 100755 => 100644 luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf mode change 100755 => 100644 luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json mode change 100755 => 100644 luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json mode change 100755 => 100644 luci-app-packet-capture/Makefile mode change 100755 => 100644 luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js mode change 100755 => 100644 luci-app-packet-capture/root/etc/config/packet_capture mode change 100755 => 100644 luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json mode change 100755 => 100644 luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json mode change 100755 => 100644 luci-app-shadowsocks-libev/Makefile mode change 100755 => 100644 luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js mode change 100755 => 100644 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js mode change 100755 => 100644 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js mode change 100755 => 100644 luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js mode change 100755 => 100644 luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua mode change 100755 => 100644 luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot mode change 100755 => 100644 luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po mode change 100755 => 100644 luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev mode change 100755 => 100644 luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json mode change 100755 => 100644 luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json mode change 100755 => 100644 luci-app-shutdown/Makefile mode change 100755 => 100644 luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js mode change 100755 => 100644 luci-app-shutdown/po/de/shutdown.po mode change 100755 => 100644 luci-app-shutdown/po/it/shutdown.po mode change 100755 => 100644 luci-app-shutdown/po/oc/shutdown.po mode change 100755 => 100644 luci-app-shutdown/po/templates/shutdown.pot mode change 100755 => 100644 luci-app-shutdown/po/zh_Hans/shutdown.po mode change 100755 => 100644 luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json mode change 100755 => 100644 luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json mode change 100755 => 100644 luci-app-snmpd/Makefile mode change 100755 => 100644 luci-app-snmpd/luasrc/controller/snmpd.lua mode change 100755 => 100644 luci-app-snmpd/luasrc/model/cbi/snmpd.lua mode change 100755 => 100644 luci-app-snmpd/luasrc/view/snmpd.htm mode change 100755 => 100644 luci-app-snmpd/po/de/snmpd.po mode change 100755 => 100644 luci-app-snmpd/po/it/snmpd.po mode change 100755 => 100644 luci-app-snmpd/po/oc/snmpd.po mode change 100755 => 100644 luci-app-snmpd/po/templates/snmpd.pot mode change 100755 => 100644 luci-app-snmpd/po/zh_Hans/snmpd.po mode change 100755 => 100644 luci-app-snmpd/root/etc/config/snmpd mode change 100755 => 100644 luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json mode change 100755 => 100644 luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json mode change 100755 => 100644 luci-app-sysupgrade/Makefile mode change 100755 => 100644 luci-app-sysupgrade/luasrc/view/sysupgrade.htm mode change 100755 => 100644 luci-app-sysupgrade/po/templates/sysupgrade.pot mode change 100755 => 100644 luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json mode change 100755 => 100644 luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json mode change 100755 => 100644 luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js mode change 100755 => 100644 luci-base/po/oc/base.po mode change 100755 => 100644 luci-base/po/templates/base.pot mode change 100755 => 100644 luci-mod-dashboard/Makefile mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js mode change 100755 => 100644 luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js mode change 100755 => 100644 luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json mode change 100755 => 100644 luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json mode change 100755 => 100644 luci-mod-network/Makefile mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/routes.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/switch.js mode change 100755 => 100644 luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js mode change 100755 => 100644 luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json mode change 100755 => 100644 luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json mode change 100755 => 100644 luci-proto-mbim/Makefile mode change 100755 => 100644 luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js mode change 100755 => 100644 luci-proto-modemmanager/Makefile mode change 100755 => 100644 luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js mode change 100755 => 100644 luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json mode change 100755 => 100644 luci-theme-argon/Makefile mode change 100755 => 100644 luci-theme-argon/README.md mode change 100755 => 100644 luci-theme-argon/README_ZH.md mode change 100755 => 100644 luci-theme-argon/Screenshots/screenshot_pc.jpg mode change 100755 => 100644 luci-theme-argon/Screenshots/screenshot_phone.jpg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/background/README.md mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/css/cascade.css mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/css/dark.css mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/css/fonts.css mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/favicon.ico mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png delete mode 100755 luci-theme-argon/htdocs/luci-static/argon/icon/favicon.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/manifest.json mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/ms-icon-144x144.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/icon/spinner.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/img/argon.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/img/bg1.jpg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/img/blank.png mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/img/volume_high.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/img/volume_off.svg mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/js/jquery.min.js mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/js/polyfill.min.js mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/js/script.js mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/less/cascade.less mode change 100755 => 100644 luci-theme-argon/htdocs/luci-static/argon/less/dark.less mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/footer_login.htm mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/header.htm mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/header_login.htm mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/out_footer_login.htm mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/out_header_login.htm mode change 100755 => 100644 luci-theme-argon/luasrc/view/themes/argon/sysauth.htm mode change 100755 => 100644 luci-theme-argon/root/etc/uci-defaults/30_luci-theme-argon mode change 100755 => 100644 luci-theme-openmptcprouter/Makefile mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/menu-openmptcprouter.js mode change 100755 => 100644 luci-theme-openwrt-2020/Makefile mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js mode change 100755 => 100644 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm mode change 100755 => 100644 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm mode change 100755 => 100644 macvlan/Makefile mode change 100755 => 100644 macvlan/files/etc/config/macvlan mode change 100755 => 100644 macvlan/files/etc/uci-defaults/40_luci-app-macvlan mode change 100755 => 100644 mc/Config.in mode change 100755 => 100644 mc/Makefile mode change 100755 => 100644 mc/patches/010-subshell.patch mode change 100755 => 100644 mc/patches/020-fix-mouse-handling-newer-terminfo.patch mode change 100755 => 100644 mc/patches/030-fix-gettext-full-0.21.patch mode change 100755 => 100644 mlvpn/Makefile mode change 100755 => 100644 mlvpn/files/etc/config/mlvpn mode change 100755 => 100644 mlvpn/files/etc/uci-defaults/4100-mlvpn mode change 100755 => 100644 mlvpn/patches/010-musl-fix.patch mode change 100755 => 100644 mptcp/Makefile mode change 100755 => 100644 mptcp/files/etc/hotplug.d/iface/30-mptcp mode change 100755 => 100644 mptcpd/Makefile mode change 100755 => 100644 mptcpd/patches/log.patch mode change 100755 => 100644 msmtp/Makefile mode change 100755 => 100644 ndisc6/Makefile mode change 100755 => 100644 ndpi-netfilter2/Makefile mode change 100755 => 100644 net-tools/Makefile mode change 100755 => 100644 net-tools/patches/mptcp-support.patch mode change 100755 => 100644 nginx/Config.in mode change 100755 => 100644 nginx/Config_ssl.in mode change 100755 => 100644 nginx/Makefile mode change 100755 => 100644 nginx/files-luci-support/60_nginx-luci-support mode change 100755 => 100644 nginx/files-luci-support/70_nginx-luci-support-ssl mode change 100755 => 100644 nginx/files-luci-support/luci_nginx.conf mode change 100755 => 100644 nginx/files-luci-support/luci_nginx_ssl.conf mode change 100755 => 100644 nginx/files-luci-support/luci_uwsgi.conf mode change 100755 => 100644 nginx/files/nginx.init mode change 100755 => 100644 nginx/patches-lua-nginx/100-no_by_lua_block.patch mode change 100755 => 100644 nginx/patches/101-feature_test_fix.patch mode change 100755 => 100644 nginx/patches/102-sizeof_test_fix.patch mode change 100755 => 100644 nginx/patches/103-sys_nerr.patch mode change 100755 => 100644 nginx/patches/200-config.patch mode change 100755 => 100644 nginx/patches/201-ignore-invalid-options.patch mode change 100755 => 100644 nginx/patches/300-max-processes.patch mode change 100755 => 100644 omr-6in4/Makefile mode change 100755 => 100644 omr-quota/Makefile mode change 100755 => 100644 omr-quota/files/etc/config/omr-quota mode change 100755 => 100644 omr-tracker/Makefile mode change 100755 => 100644 omr-update/Makefile mode change 100755 => 100644 openmptcprouter-full/Makefile mode change 100755 => 100644 openmptcprouter-mini/Makefile mode change 100755 => 100644 openmptcprouter/Makefile mode change 100755 => 100644 openmptcprouter/files/etc/firewall.gre-tunnel mode change 100755 => 100644 openmptcprouter/files/etc/firewall.omr-server mode change 100755 => 100644 openmptcprouter/files/etc/iproute2/rt_dsfield mode change 100755 => 100644 openmptcprouter/files/etc/sysctl.d/default.conf create mode 100755 openmptcprouter/files/etc/uci-defaults/1920-omr-network mode change 100755 => 100644 openmptcprouter/files/etc/wgetrc create mode 100644 protobuf/Makefile mode change 100755 => 100644 serdisplib/Makefile mode change 100755 => 100644 shadowsocks-libev/Makefile mode change 100755 => 100644 shadowsocks-libev/README.md mode change 100755 => 100644 shadowsocks-libev/files/firewall.ss-rules mode change 100755 => 100644 shadowsocks-libev/files/shadowsocks-libev.config mode change 100755 => 100644 shadowsocks-libev/files/shadowsocks-libev.init mode change 100755 => 100644 shadowsocks-libev/files/shadowsocks.conf mode change 100755 => 100644 shadowsocks-libev/patches/010-ECONNRESET.patch mode change 100755 => 100644 shadowsocks-libev/patches/020-NOCRYPTO.patch mode change 100755 => 100644 shadowsocks-v2ray-plugin/Makefile mode change 100755 => 100644 simple-obfs/LICENSE mode change 100755 => 100644 simple-obfs/Makefile mode change 100755 => 100644 speedtestc/Makefile mode change 100755 => 100644 speedtestc/patches/compile-fix.patch mode change 100755 => 100644 speedtestc/patches/user-agent.patch mode change 100755 => 100644 tcptraceroute/Makefile mode change 100755 => 100644 tcptraceroute/patches/001-configure_cross_compile.patch mode change 100755 => 100644 tracebox/Makefile mode change 100755 => 100644 tracebox/files/usr/share/tracebox/omr-mptcp-trace.lua mode change 100755 => 100644 tracebox/patches/101-build-fixes.patch mode change 100755 => 100644 tracebox/patches/102-configure.patch mode change 100755 => 100644 tracebox/patches/103-configure.patch mode change 100755 => 100644 tracebox/patches/104-ns_name_compress.patch mode change 100755 => 100644 tracebox/patches/202-fix-lua-include-hpp.patch mode change 100755 => 100644 tracebox/patches/204-fix-lua-namespace-crafter.patch create mode 100644 umbim/Makefile create mode 100644 umbim/files/lib/netifd/proto/mbim.sh mode change 100755 => 100644 v2ray-core/Config.in mode change 100755 => 100644 v2ray-core/LICENSE mode change 100755 => 100644 v2ray-core/Makefile mode change 100755 => 100644 v2ray-core/files/etc/firewall.v2ray-rules mode change 100755 => 100644 v2ray-core/files/etc/uci-defaults/3010-omr-v2ray mode change 100755 => 100644 v2ray-ext/Makefile diff --git a/6in4/Makefile b/6in4/Makefile new file mode 100644 index 000000000..d0f2ad30c --- /dev/null +++ b/6in4/Makefile @@ -0,0 +1,45 @@ +# +# Copyright (C) 2010-2015 OpenWrt.org +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# - Added gateway setting +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=6in4 +PKG_VERSION:=270 +PKG_RELEASE:=2 +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/6in4 + SECTION:=net + CATEGORY:=Network + DEPENDS:=@IPV6 +kmod-sit +uclient-fetch + TITLE:=IPv6-in-IPv4 configuration support + MAINTAINER:=Jo-Philipp Wich + PKGARCH:=all +endef + +define Package/6in4/description +Provides support for 6in4 tunnels in /etc/config/network. +Refer to http://wiki.openwrt.org/doc/uci/network for +configuration details. +endef + +define Build/Compile +endef + +define Build/Configure +endef + +define Package/6in4/install + $(INSTALL_DIR) $(1)/lib/netifd/proto + $(INSTALL_BIN) ./files/6in4.sh $(1)/lib/netifd/proto/6in4.sh +endef + +$(eval $(call BuildPackage,6in4)) diff --git a/6in4/files/6in4.sh b/6in4/files/6in4.sh new file mode 100755 index 000000000..cf17c86d8 --- /dev/null +++ b/6in4/files/6in4.sh @@ -0,0 +1,149 @@ +#!/bin/sh +# 6in4.sh - IPv6-in-IPv4 tunnel backend +# Copyright (c) 2010-2015 OpenWrt.org + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . /lib/functions/network.sh + . ../netifd-proto.sh + init_proto "$@" +} + +proto_6in4_update() { + sh -c ' + timeout=5 + + (while [ $((timeout--)) -gt 0 ]; do + sleep 1 + kill -0 $$ || exit 0 + done; kill -9 $$) 2>/dev/null & + + exec "$@" + ' "$1" "$@" +} + +proto_6in4_add_prefix() { + append "$3" "$1" +} + +proto_6in4_setup() { + local cfg="$1" + local iface="$2" + local link="6in4-$cfg" + + local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix ip6prefixes tunlink tunnelid username password updatekey gateway + json_get_vars mtu ttl tos ipaddr peeraddr ip6addr tunlink tunnelid username password updatekey gateway + json_for_each_item proto_6in4_add_prefix ip6prefix ip6prefixes + + [ -z "$peeraddr" ] && { + proto_notify_error "$cfg" "MISSING_ADDRESS" + proto_block_restart "$cfg" + return + } + + [ -n "$tunlink" ] && ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" ) + + [ -z "$ipaddr" ] && { + local wanif="$tunlink" + if [ -z "$wanif" ] && ! network_find_wan wanif; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + + if ! network_get_ipaddr ipaddr "$wanif"; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + } + + proto_init_update "$link" 1 + + [ -n "$ip6addr" ] && { + local local6="${ip6addr%%/*}" + local mask6="${ip6addr##*/}" + [[ "$local6" = "$mask6" ]] && mask6= + proto_add_ipv6_address "$local6" "$mask6" + proto_add_ipv6_route "::" 0 "" "" "" "$local6/$mask6" + } + + [ -n "$gateway" ] && { + proto_add_ipv6_route "::" 0 "$gateway" + } + + for ip6prefix in $ip6prefixes; do + proto_add_ipv6_prefix "$ip6prefix" + proto_add_ipv6_route "::" 0 "" "" "" "$ip6prefix" + done + + proto_add_tunnel + json_add_string mode sit + json_add_int mtu "${mtu:-1280}" + json_add_int ttl "${ttl:-64}" + [ -n "$tos" ] && json_add_string tos "$tos" + json_add_string local "$ipaddr" + json_add_string remote "$peeraddr" + [ -n "$tunlink" ] && json_add_string link "$tunlink" + proto_close_tunnel + + proto_send_update "$cfg" + + [ -n "$tunnelid" -a -n "$username" -a \( -n "$password" -o -n "$updatekey" \) ] && { + [ -n "$updatekey" ] && password="$updatekey" + + local http="http" + local urlget="uclient-fetch" + local urlget_opts="-qO-" + local ca_path="${SSL_CERT_DIR:-/etc/ssl/certs}" + + [ -f /lib/libustream-ssl.so ] && http=https + [ "$http" = "https" -a -z "$(find $ca_path -name "*.0" 2>/dev/null)" ] && { + urlget_opts="$urlget_opts --no-check-certificate" + } + + local url="$http://ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid" + local try=0 + local max=3 + + ( + set -o pipefail + while [ $((++try)) -le $max ]; do + if proto_6in4_update $urlget $urlget_opts --user="$username" --password="$password" "$url" 2>&1 | \ + sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \ + logger -t "$link"; + then + logger -t "$link" "updated" + return 0 + fi + sleep 5 + done + logger -t "$link" "update failed" + ) + } +} + +proto_6in4_teardown() { + local cfg="$1" +} + +proto_6in4_init_config() { + no_device=1 + available=1 + + proto_config_add_string "ipaddr" + proto_config_add_string "ip6addr" + proto_config_add_array "ip6prefix" + proto_config_add_string "peeraddr" + proto_config_add_string "tunlink" + proto_config_add_string "tunnelid" + proto_config_add_string "username" + proto_config_add_string "password" + proto_config_add_string "updatekey" + proto_config_add_string "gateway" + proto_config_add_int "mtu" + proto_config_add_int "ttl" + proto_config_add_string "tos" +} + +[ -n "$INCLUDE_ONLY" ] || { + add_protocol 6in4 +} diff --git a/CLA-entity.md b/CLA-entity.md old mode 100755 new mode 100644 diff --git a/CLA-individual.md b/CLA-individual.md old mode 100755 new mode 100644 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md old mode 100755 new mode 100644 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100755 new mode 100644 diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/bcm27xx-eeprom/Makefile b/bcm27xx-eeprom/Makefile old mode 100755 new mode 100644 diff --git a/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch b/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch old mode 100755 new mode 100644 diff --git a/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch b/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch old mode 100755 new mode 100644 diff --git a/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-remove-chmod.patch b/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-remove-chmod.patch old mode 100755 new mode 100644 diff --git a/contributors/cr3ative.md b/contributors/cr3ative.md old mode 100755 new mode 100644 diff --git a/contributors/example.md b/contributors/example.md old mode 100755 new mode 100644 diff --git a/dsvpn/Makefile b/dsvpn/Makefile old mode 100755 new mode 100644 diff --git a/dsvpn/patches/nofirewall.patch b/dsvpn/patches/nofirewall.patch old mode 100755 new mode 100644 diff --git a/dsvpn/patches/nostrip.patch b/dsvpn/patches/nostrip.patch old mode 100755 new mode 100644 diff --git a/glorytun-udp/Makefile b/glorytun-udp/Makefile old mode 100755 new mode 100644 diff --git a/glorytun-udp/patches/aegis-arm.patch b/glorytun-udp/patches/aegis-arm.patch old mode 100755 new mode 100644 diff --git a/glorytun/Makefile b/glorytun/Makefile old mode 100755 new mode 100644 diff --git a/glorytun/glorytun.config b/glorytun/glorytun.config old mode 100755 new mode 100644 diff --git a/golang-protobuf/Makefile b/golang-protobuf/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang-build.sh b/golang/golang-build.sh old mode 100755 new mode 100644 diff --git a/golang/golang-compiler.mk b/golang/golang-compiler.mk old mode 100755 new mode 100644 diff --git a/golang/golang-golang-x-crypto/Makefile b/golang/golang-golang-x-crypto/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang-golang-x-net/Makefile b/golang/golang-golang-x-net/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang-golang-x-sys/Makefile b/golang/golang-golang-x-sys/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang-golang-x-text/Makefile b/golang/golang-golang-x-text/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang-host-build.mk b/golang/golang-host-build.mk old mode 100755 new mode 100644 diff --git a/golang/golang-package.mk b/golang/golang-package.mk old mode 100755 new mode 100644 diff --git a/golang/golang-values.mk b/golang/golang-values.mk old mode 100755 new mode 100644 diff --git a/golang/golang/Config.in b/golang/golang/Config.in old mode 100755 new mode 100644 diff --git a/golang/golang/Makefile b/golang/golang/Makefile old mode 100755 new mode 100644 diff --git a/golang/golang/files/go-gcc-helper b/golang/golang/files/go-gcc-helper old mode 100755 new mode 100644 diff --git a/https-dns-proxy/Makefile b/https-dns-proxy/Makefile old mode 100755 new mode 100644 diff --git a/https-dns-proxy/files/README.md b/https-dns-proxy/files/README.md old mode 100755 new mode 100644 diff --git a/https-dns-proxy/files/https-dns-proxy.config b/https-dns-proxy/files/https-dns-proxy.config old mode 100755 new mode 100644 diff --git a/ipcalc/Makefile b/ipcalc/Makefile old mode 100755 new mode 100644 diff --git a/iptables-mod-fullconenat/Makefile b/iptables-mod-fullconenat/Makefile old mode 100755 new mode 100644 diff --git a/iptables-mod-fullconenat/README.md b/iptables-mod-fullconenat/README.md old mode 100755 new mode 100644 diff --git a/iptables-mod-fullconenat/files/Makefile b/iptables-mod-fullconenat/files/Makefile old mode 100755 new mode 100644 diff --git a/iptables-mod-fullconenat/patches/000-printk.patch b/iptables-mod-fullconenat/patches/000-printk.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/Config.in b/lcd4linux/Config.in old mode 100755 new mode 100644 diff --git a/lcd4linux/Makefile b/lcd4linux/Makefile old mode 100755 new mode 100644 diff --git a/lcd4linux/files/lcd4linux.init b/lcd4linux/files/lcd4linux.init old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/120-remove-as-needed-linker-option.patch b/lcd4linux/patches/120-remove-as-needed-linker-option.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/140-no_repnop_T6963.patch b/lcd4linux/patches/140-no_repnop_T6963.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/150-addlibmpdclient.patch b/lcd4linux/patches/150-addlibmpdclient.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/160-uinput_defs.patch b/lcd4linux/patches/160-uinput_defs.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/170-add-generic-spidev-driver.patch b/lcd4linux/patches/170-add-generic-spidev-driver.patch old mode 100755 new mode 100644 diff --git a/lcd4linux/patches/173-glcd2usb-bigendian-fix.patch b/lcd4linux/patches/173-glcd2usb-bigendian-fix.patch old mode 100755 new mode 100644 diff --git a/libbpf/Makefile b/libbpf/Makefile old mode 100755 new mode 100644 diff --git a/libell/Makefile b/libell/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-dsvpn/Makefile b/luci-app-dsvpn/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-dsvpn/po/fr/dsvpn.po b/luci-app-dsvpn/po/fr/dsvpn.po old mode 100755 new mode 100644 diff --git a/luci-app-dsvpn/po/templates/dsvpn.pot b/luci-app-dsvpn/po/templates/dsvpn.pot old mode 100755 new mode 100644 diff --git a/luci-app-dsvpn/po/zh_Hans/dsvpn.po b/luci-app-dsvpn/po/zh_Hans/dsvpn.po old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-firewall/Makefile b/luci-app-firewall/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js b/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js old mode 100755 new mode 100644 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js old mode 100755 new mode 100644 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js b/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/bg/firewall.po b/luci-app-firewall/po/bg/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ca/firewall.po b/luci-app-firewall/po/ca/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/cs/firewall.po b/luci-app-firewall/po/cs/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/de/firewall.po b/luci-app-firewall/po/de/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/el/firewall.po b/luci-app-firewall/po/el/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/en/firewall.po b/luci-app-firewall/po/en/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/es/firewall.po b/luci-app-firewall/po/es/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/fr/firewall.po b/luci-app-firewall/po/fr/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/he/firewall.po b/luci-app-firewall/po/he/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/hi/firewall.po b/luci-app-firewall/po/hi/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/hu/firewall.po b/luci-app-firewall/po/hu/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/it/firewall.po b/luci-app-firewall/po/it/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ja/firewall.po b/luci-app-firewall/po/ja/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ko/firewall.po b/luci-app-firewall/po/ko/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/mr/firewall.po b/luci-app-firewall/po/mr/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ms/firewall.po b/luci-app-firewall/po/ms/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/nb_NO/firewall.po b/luci-app-firewall/po/nb_NO/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/pl/firewall.po b/luci-app-firewall/po/pl/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/pt/firewall.po b/luci-app-firewall/po/pt/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/pt_BR/firewall.po b/luci-app-firewall/po/pt_BR/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ro/firewall.po b/luci-app-firewall/po/ro/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/ru/firewall.po b/luci-app-firewall/po/ru/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/sk/firewall.po b/luci-app-firewall/po/sk/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/sv/firewall.po b/luci-app-firewall/po/sv/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/templates/firewall.pot b/luci-app-firewall/po/templates/firewall.pot old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/tr/firewall.po b/luci-app-firewall/po/tr/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/uk/firewall.po b/luci-app-firewall/po/uk/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/vi/firewall.po b/luci-app-firewall/po/vi/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/zh_Hans/firewall.po b/luci-app-firewall/po/zh_Hans/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/po/zh_Hant/firewall.po b/luci-app-firewall/po/zh_Hant/firewall.po old mode 100755 new mode 100644 diff --git a/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json b/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json old mode 100755 new mode 100644 diff --git a/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json b/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/Makefile b/luci-app-glorytun-tcp/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot b/luci-app-glorytun-tcp/po/templates/glorytun-tcp.pot old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po b/luci-app-glorytun-tcp/po/zh_Hans/glorytun-tcp.po old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun b/luci-app-glorytun-tcp/root/etc/hotplug.d/iface/30-glorytun old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun b/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json b/luci-app-glorytun-tcp/root/usr/share/rpcd/acl.d/luci-app-glorytun-tcp.json old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-udp/Makefile b/luci-app-glorytun-udp/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-udp/po/fr/glorytun-udp.po b/luci-app-glorytun-udp/po/fr/glorytun-udp.po old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-udp/po/templates/glorytun-udp.pot b/luci-app-glorytun-udp/po/templates/glorytun-udp.pot old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po b/luci-app-glorytun-udp/po/zh_Hans/glorytun-udp.po old mode 100755 new mode 100644 diff --git a/luci-app-glorytun-udp/root/etc/config/glorytun-udp b/luci-app-glorytun-udp/root/etc/config/glorytun-udp old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/LICENSE b/luci-app-haproxy-tcp/LICENSE old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/Makefile b/luci-app-haproxy-tcp/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/README.md b/luci-app-haproxy-tcp/README.md old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua b/luci-app-haproxy-tcp/luasrc/controller/haproxy-tcp.lua old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua b/luci-app-haproxy-tcp/luasrc/model/cbi/haproxy-tcp.lua old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/po/fr/haproxy-tcp.po b/luci-app-haproxy-tcp/po/fr/haproxy-tcp.po old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot b/luci-app-haproxy-tcp/po/templates/haproxy-tcp.pot old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po b/luci-app-haproxy-tcp/po/zh-cn/haproxy-tcp.po old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/root/etc/config/haproxy-tcp b/luci-app-haproxy-tcp/root/etc/config/haproxy-tcp old mode 100755 new mode 100644 diff --git a/luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp b/luci-app-haproxy-tcp/root/etc/uci-defaults/41_luci-haproxy-tcp old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/Makefile b/luci-app-https-dns-proxy/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua b/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-family.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns-malware.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua b/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua b/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm b/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/bg/https-dns-proxy.po b/luci-app-https-dns-proxy/po/bg/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ca/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ca/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/cs/https-dns-proxy.po b/luci-app-https-dns-proxy/po/cs/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/de/https-dns-proxy.po b/luci-app-https-dns-proxy/po/de/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/el/https-dns-proxy.po b/luci-app-https-dns-proxy/po/el/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/en/https-dns-proxy.po b/luci-app-https-dns-proxy/po/en/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/es/https-dns-proxy.po b/luci-app-https-dns-proxy/po/es/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/fr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/fr/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/he/https-dns-proxy.po b/luci-app-https-dns-proxy/po/he/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/hi/https-dns-proxy.po b/luci-app-https-dns-proxy/po/hi/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/hu/https-dns-proxy.po b/luci-app-https-dns-proxy/po/hu/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/it/https-dns-proxy.po b/luci-app-https-dns-proxy/po/it/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ja/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ja/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ko/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ko/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/mr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/mr/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ms/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ms/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po b/luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/pl/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pl/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/pt/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pt/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po b/luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ro/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ro/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/ru/https-dns-proxy.po b/luci-app-https-dns-proxy/po/ru/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/sk/https-dns-proxy.po b/luci-app-https-dns-proxy/po/sk/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/sv/https-dns-proxy.po b/luci-app-https-dns-proxy/po/sv/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot b/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/tr/https-dns-proxy.po b/luci-app-https-dns-proxy/po/tr/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/uk/https-dns-proxy.po b/luci-app-https-dns-proxy/po/uk/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/vi/https-dns-proxy.po b/luci-app-https-dns-proxy/po/vi/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po b/luci-app-https-dns-proxy/po/zh_Hans/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po b/luci-app-https-dns-proxy/po/zh_Hant/https-dns-proxy.po old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy b/luci-app-https-dns-proxy/root/etc/uci-defaults/40_luci-https-dns-proxy old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json b/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json old mode 100755 new mode 100644 diff --git a/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json b/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json old mode 100755 new mode 100644 diff --git a/luci-app-iperf/Makefile b/luci-app-iperf/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua old mode 100755 new mode 100644 diff --git a/luci-app-iperf/luasrc/view/iperf/test.htm b/luci-app-iperf/luasrc/view/iperf/test.htm old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/de/iperf.po b/luci-app-iperf/po/de/iperf.po old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/fr/iperf.po b/luci-app-iperf/po/fr/iperf.po old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/it/iperf.po b/luci-app-iperf/po/it/iperf.po old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/oc/iperf.po b/luci-app-iperf/po/oc/iperf.po old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/templates/iperf.pot b/luci-app-iperf/po/templates/iperf.pot old mode 100755 new mode 100644 diff --git a/luci-app-iperf/po/zh_Hans/iperf.po b/luci-app-iperf/po/zh_Hans/iperf.po old mode 100755 new mode 100644 diff --git a/luci-app-iperf/root/etc/config/iperf b/luci-app-iperf/root/etc/config/iperf old mode 100755 new mode 100644 diff --git a/luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json b/luci-app-iperf/root/usr/share/luci/menu.d/luci-app-iperf.json old mode 100755 new mode 100644 diff --git a/luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json b/luci-app-iperf/root/usr/share/rpcd/acl.d/luci-app-iperf.json old mode 100755 new mode 100644 diff --git a/luci-app-macvlan/po/zh_Hans/macvlan.po b/luci-app-macvlan/po/zh_Hans/macvlan.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/Makefile b/luci-app-mail/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-mail/luasrc/controller/mail.lua b/luci-app-mail/luasrc/controller/mail.lua old mode 100755 new mode 100644 diff --git a/luci-app-mail/luasrc/model/cbi/mail.lua b/luci-app-mail/luasrc/model/cbi/mail.lua old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/de/mail.po b/luci-app-mail/po/de/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/fr/mail.po b/luci-app-mail/po/fr/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/it/mail.po b/luci-app-mail/po/it/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/oc/mail.po b/luci-app-mail/po/oc/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/templates/mail.pot b/luci-app-mail/po/templates/mail.pot old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/zh_Hans/mail.po b/luci-app-mail/po/zh_Hans/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/po/zh_Hant_HK/mail.po b/luci-app-mail/po/zh_Hant_HK/mail.po old mode 100755 new mode 100644 diff --git a/luci-app-mail/root/etc/config/mail b/luci-app-mail/root/etc/config/mail old mode 100755 new mode 100644 diff --git a/luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json b/luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json old mode 100755 new mode 100644 diff --git a/luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json b/luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json old mode 100755 new mode 100644 diff --git a/luci-app-mlvpn/Makefile b/luci-app-mlvpn/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po old mode 100755 new mode 100644 diff --git a/luci-app-mlvpn/po/templates/mlvpn.pot b/luci-app-mlvpn/po/templates/mlvpn.pot old mode 100755 new mode 100644 diff --git a/luci-app-mlvpn/po/zh_Hans/mlvpn.po b/luci-app-mlvpn/po/zh_Hans/mlvpn.po old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json b/luci-app-mlvpn/root/usr/share/rpcd/acl.d/luci-app-mlvpn.json old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/Makefile b/luci-app-mptcp/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js b/luci-app-mptcp/htdocs/luci-static/resources/seedrandom.js old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm b/luci-app-mptcp/luasrc/view/mptcp/mptcp_monitor.htm old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/de/mptcp.po b/luci-app-mptcp/po/de/mptcp.po old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/fr/mptcp.po b/luci-app-mptcp/po/fr/mptcp.po old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/it/mptcp.po b/luci-app-mptcp/po/it/mptcp.po old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/oc/mptcp.po b/luci-app-mptcp/po/oc/mptcp.po old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/templates/mptcp.pot b/luci-app-mptcp/po/templates/mptcp.pot old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json b/luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json old mode 100755 new mode 100644 diff --git a/luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json b/luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/LICENSE b/luci-app-nginx-ha/LICENSE old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/Makefile b/luci-app-nginx-ha/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/luasrc/controller/nginx-ha.lua b/luci-app-nginx-ha/luasrc/controller/nginx-ha.lua old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua b/luci-app-nginx-ha/luasrc/model/cbi/nginx-ha.lua old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/po/fr/nginx-ha.po b/luci-app-nginx-ha/po/fr/nginx-ha.po old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/po/templates/nginx-ha.pot b/luci-app-nginx-ha/po/templates/nginx-ha.pot old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/root/etc/config/nginx-ha b/luci-app-nginx-ha/root/etc/config/nginx-ha old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha b/luci-app-nginx-ha/root/etc/uci-defaults/42_luci-nginx-ha old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json b/luci-app-nginx-ha/root/usr/share/luci/menu.d/luci-app-nginx-ha.json old mode 100755 new mode 100644 diff --git a/luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json b/luci-app-nginx-ha/root/usr/share/rpcd/acl.d/luci-app-nginx-ha.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/de/omr-bypass.po b/luci-app-omr-bypass/po/de/omr-bypass.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/it/omr-bypass.po b/luci-app-omr-bypass/po/it/omr-bypass.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/oc/omr-bypass.po b/luci-app-omr-bypass/po/oc/omr-bypass.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/templates/omr-bypass.pot b/luci-app-omr-bypass/po/templates/omr-bypass.pot old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/po/zh_Hans/omr-bypass.po b/luci-app-omr-bypass/po/zh_Hans/omr-bypass.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/root/etc/firewall.omr-bypass b/luci-app-omr-bypass/root/etc/firewall.omr-bypass old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json b/luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json b/luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/Makefile b/luci-app-omr-dscp/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/luasrc/controller/omr-dscp.lua b/luci-app-omr-dscp/luasrc/controller/omr-dscp.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua b/luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/luasrc/model/cbi/dscp.lua b/luci-app-omr-dscp/luasrc/model/cbi/dscp.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/de/omr-dscp.po b/luci-app-omr-dscp/po/de/omr-dscp.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/fr/omr-dscp.po b/luci-app-omr-dscp/po/fr/omr-dscp.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/it/omr-dscp.po b/luci-app-omr-dscp/po/it/omr-dscp.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/oc/omr-dscp.po b/luci-app-omr-dscp/po/oc/omr-dscp.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/templates/omr-dscp.pot b/luci-app-omr-dscp/po/templates/omr-dscp.pot old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/po/zh_Hans/omr-dscp.po b/luci-app-omr-dscp/po/zh_Hans/omr-dscp.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/root/etc/config/dscp b/luci-app-omr-dscp/root/etc/config/dscp old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json b/luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json b/luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/Makefile b/luci-app-omr-quota/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/luasrc/controller/quota.lua b/luci-app-omr-quota/luasrc/controller/quota.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua b/luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm b/luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/de/omr-quota.po b/luci-app-omr-quota/po/de/omr-quota.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/fr/omr-quota.po b/luci-app-omr-quota/po/fr/omr-quota.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/it/omr-quota.po b/luci-app-omr-quota/po/it/omr-quota.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/oc/omr-quota.po b/luci-app-omr-quota/po/oc/omr-quota.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/templates/omr-quota.pot b/luci-app-omr-quota/po/templates/omr-quota.pot old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/po/zh_Hans/omr-quota.po b/luci-app-omr-quota/po/zh_Hans/omr-quota.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/root/usr/share/luci/menu.d/luci-app-omr-quota.json b/luci-app-omr-quota/root/usr/share/luci/menu.d/luci-app-omr-quota.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json b/luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/Makefile b/luci-app-omr-tracker/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/luasrc/controller/omr-tracker.lua b/luci-app-omr-tracker/luasrc/controller/omr-tracker.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm b/luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/de/omr-tracker.po b/luci-app-omr-tracker/po/de/omr-tracker.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/fr/omr-tracker.po b/luci-app-omr-tracker/po/fr/omr-tracker.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/it/omr-tracker.po b/luci-app-omr-tracker/po/it/omr-tracker.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/oc/omr-tracker.po b/luci-app-omr-tracker/po/oc/omr-tracker.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/templates/omr-tracker.pot b/luci-app-omr-tracker/po/templates/omr-tracker.pot old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po b/luci-app-omr-tracker/po/zh_Hans/omr-tracker.po old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/root/etc/uci-defaults/42_luci-omr-tracker b/luci-app-omr-tracker/root/etc/uci-defaults/42_luci-omr-tracker old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json b/luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json b/luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/Makefile b/luci-app-openmptcprouter/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif b/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm old mode 100755 new mode 100644 index de5dc0bc3..f5f028568 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -967,4 +967,4 @@
-<%+footer%> \ No newline at end of file +<%+footer%> diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/root/etc/config/openmptcprouter b/luci-app-openmptcprouter/root/etc/config/openmptcprouter old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf b/luci-app-openmptcprouter/root/etc/sysctl.d/zzz_openmptcprouter.conf old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 98b925c35..b267d6f21 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -1,5 +1,4 @@ #!/bin/sh -#uci set openmptcprouter.settings.disableintfrename=1关闭默认网卡重命名 uci -q batch <<-EOF delete ucitrack.@openmptcprouter[-1] add ucitrack openmptcprouter diff --git a/luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json b/luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json b/luci-app-openmptcprouter/root/usr/share/rpcd/acl.d/luci-app-openmptcprouter.json old mode 100755 new mode 100644 diff --git a/luci-app-packet-capture/Makefile b/luci-app-packet-capture/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-packet-capture/root/etc/config/packet_capture b/luci-app-packet-capture/root/etc/config/packet_capture old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/Makefile b/luci-app-shadowsocks-libev/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js b/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua b/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/de/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/el/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/en/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/fr/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/he/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/hi/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/hu/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/it/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ja/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ms/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/nb_NO/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ro/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/ru/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/sk/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/uk/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/vi/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po b/luci-app-shadowsocks-libev/po/zh-tw/shadowsocks-libev.po old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev b/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json b/luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json old mode 100755 new mode 100644 diff --git a/luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json b/luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/Makefile b/luci-app-shutdown/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js b/luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/po/de/shutdown.po b/luci-app-shutdown/po/de/shutdown.po old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/po/it/shutdown.po b/luci-app-shutdown/po/it/shutdown.po old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/po/oc/shutdown.po b/luci-app-shutdown/po/oc/shutdown.po old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/po/templates/shutdown.pot b/luci-app-shutdown/po/templates/shutdown.pot old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/po/zh_Hans/shutdown.po b/luci-app-shutdown/po/zh_Hans/shutdown.po old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json b/luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json old mode 100755 new mode 100644 diff --git a/luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json b/luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/Makefile b/luci-app-snmpd/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/luasrc/controller/snmpd.lua b/luci-app-snmpd/luasrc/controller/snmpd.lua old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/luasrc/model/cbi/snmpd.lua b/luci-app-snmpd/luasrc/model/cbi/snmpd.lua old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/luasrc/view/snmpd.htm b/luci-app-snmpd/luasrc/view/snmpd.htm old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/po/de/snmpd.po b/luci-app-snmpd/po/de/snmpd.po old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/po/it/snmpd.po b/luci-app-snmpd/po/it/snmpd.po old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/po/oc/snmpd.po b/luci-app-snmpd/po/oc/snmpd.po old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/po/templates/snmpd.pot b/luci-app-snmpd/po/templates/snmpd.pot old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/po/zh_Hans/snmpd.po b/luci-app-snmpd/po/zh_Hans/snmpd.po old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/root/etc/config/snmpd b/luci-app-snmpd/root/etc/config/snmpd old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json b/luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json old mode 100755 new mode 100644 diff --git a/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json b/luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/Makefile b/luci-app-sysupgrade/Makefile old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/po/templates/sysupgrade.pot b/luci-app-sysupgrade/po/templates/sysupgrade.pot old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json b/luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json b/luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json old mode 100755 new mode 100644 diff --git a/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js b/luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js old mode 100755 new mode 100644 diff --git a/luci-base/po/oc/base.po b/luci-base/po/oc/base.po old mode 100755 new mode 100644 diff --git a/luci-base/po/templates/base.pot b/luci-base/po/templates/base.pot old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/Makefile b/luci-mod-dashboard/Makefile old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/devices.svg old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/internet.svg old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/not-internet.svg old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/router.svg old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/icons/wireless.svg old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/index.js old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json b/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json old mode 100755 new mode 100644 diff --git a/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json b/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json old mode 100755 new mode 100644 diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js b/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js old mode 100755 new mode 100644 diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js old mode 100755 new mode 100644 diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js b/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js old mode 100755 new mode 100644 diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js b/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json b/luci-mod-network/root/usr/share/luci/menu.d/luci-mod-network.json old mode 100755 new mode 100644 diff --git a/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json b/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json old mode 100755 new mode 100644 diff --git a/luci-proto-mbim/Makefile b/luci-proto-mbim/Makefile old mode 100755 new mode 100644 diff --git a/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js b/luci-proto-mbim/htdocs/luci-static/resources/protocol/mbim.js old mode 100755 new mode 100644 diff --git a/luci-proto-modemmanager/Makefile b/luci-proto-modemmanager/Makefile old mode 100755 new mode 100644 diff --git a/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js b/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js old mode 100755 new mode 100644 diff --git a/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json b/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json old mode 100755 new mode 100644 diff --git a/luci-theme-argon/Makefile b/luci-theme-argon/Makefile old mode 100755 new mode 100644 diff --git a/luci-theme-argon/README.md b/luci-theme-argon/README.md old mode 100755 new mode 100644 diff --git a/luci-theme-argon/README_ZH.md b/luci-theme-argon/README_ZH.md old mode 100755 new mode 100644 diff --git a/luci-theme-argon/Screenshots/screenshot_pc.jpg b/luci-theme-argon/Screenshots/screenshot_pc.jpg old mode 100755 new mode 100644 diff --git a/luci-theme-argon/Screenshots/screenshot_phone.jpg b/luci-theme-argon/Screenshots/screenshot_phone.jpg old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/background/README.md b/luci-theme-argon/htdocs/luci-static/argon/background/README.md old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css b/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css b/luci-theme-argon/htdocs/luci-static/argon/css/fonts.css old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css b/luci-theme-argon/htdocs/luci-static/argon/css/pure-min.css old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/favicon.ico b/luci-theme-argon/htdocs/luci-static/argon/favicon.ico old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.eot old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.svg old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.ttf old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/TypoGraphica.woff old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.eot old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.svg old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.ttf old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff b/luci-theme-argon/htdocs/luci-static/argon/fonts/argon.woff old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png b/luci-theme-argon/htdocs/luci-static/argon/icon/android-icon-192x192.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-144x144.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-60x60.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png b/luci-theme-argon/htdocs/luci-static/argon/icon/apple-icon-72x72.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg b/luci-theme-argon/htdocs/luci-static/argon/icon/arrow.svg old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml b/luci-theme-argon/htdocs/luci-static/argon/icon/browserconfig.xml old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-16x16.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-32x32.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon-96x96.png old mode 100755 new mode 100644 diff --git a/luci-theme-argon/htdocs/luci-static/argon/icon/favicon.png b/luci-theme-argon/htdocs/luci-static/argon/icon/favicon.png deleted file mode 100755 index 7c3f3acb1f0c7c142d0dbd3f42a4926b07f8eb38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|el>na*S0K$`JkvPs%*-?YK}=)g zw3+{bRNBllK+IsA#*lV~MaXOqP>!)A$S;_|;n|He5GTpo-G!lpRn`N@;VkfoEM{Qf zI|9OtQ?>b|fr9KMp1!W^kC+%m)C^Yh%;5m)$?sD@?4nH?Vr{_Kf6t$xsc28&CzEYt0!%$eqG3J!MS zvIqG6*uS{*H-|Qa2{7d-{ru>@!%j_C!Hqd$XJ*iaL*Z_rDdE>o2{7)lWGrB{;M!^_ zUd$52ca6WO^85kc7aF&(eAoTyAMfOUE7x/dev/null && return + uci -q set "network.$1.macaddr=$2" +} + +_setup_macvlan() { + uci -q get "network.$1_dev.ifname" >/dev/null && return + + # do not create macvlan for vlan + local _ifname + _ifname=$(uci -q get "network.$1.ifname") + case "$_ifname" in + eth*.*) return ;; + esac + + uci -q batch <<-EOF + set network.$1_dev=device + set network.$1_dev.name=$1 + set network.$1_dev.type=macvlan + set network.$1_dev.ifname=$_ifname + set network.$1.ifname=$1 + set network.$1.type=macvlan + set network.$1.masterintf=$_ifname + set macvlan.$1=macvlan + set macvlan.$1.name=$1 + set macvlan.$1.ifname=$_ifname + EOF + _macaddr=$(uci -q get "network.$1.macaddr") + _setup_macaddr "$1_dev" "${_macaddr:-auto$(date +%s)}" +} + +_setup_macvlan_update() { + uci -q get "network.$1_dev.ifname" >/dev/null || return + + uci -q batch <<-EOF + set macvlan.$1=macvlan + set macvlan.$1.ifname=$_ifname + commit macvlan + EOF +} + +_setup_mptcp_handover_to_on() { + if [ "$(uci -q get network.$1.multipath)" = "handover" ]; then + uci -q set network.$1.multipath=on + fi + if [ "$(uci -q get openmptcprouter.$1.multipath)" = "handover" ]; then + uci -q set openmptcprouter.$1.multipath=on + fi +} + +_setup_multipath_off() { + uci -q get "network.$1.multipath" >/dev/null && return + uci -q set "network.$1.multipath=off" +} + +_setup_wan_interface() { + uci -q batch <<-EOF + set network.$1=interface + set network.$1.ifname=$2 + set network.$1.proto=static + set network.$1.ip4table=wan + set network.$1.multipath=$3 + set network.$1.defaultroute=0 + commit network + add_list firewall.@zone[1].network=$1 + commit firewall + EOF + [ -n "$4" ] && uci -q set network.$1.type=$4 +} + +config_load network +config_foreach _setup_macvlan_update interface +config_foreach _setup_mptcp_handover_to_on interface + +if [ "$(uci -q show network.lan | grep multipath)" != "" ]; then + exit 0 +fi + +lanif="eth0" +if [ "$(grep rockchip /etc/os-release)" != "" ]; then + lanif="eth1" +elif [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then + lanif="wan" +elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then + lanif="wan" +elif [ -d /sys/class/net/lan ] || [ -n "$(ip link | grep ' lan')" ]; then + lanif="lan" +elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d '/sys/class/net/eth1.5' ]; then + lanif="eth1.5" + uci -q batch <<-EOF + set network.@switch_vlan[0]=switch_vlan + set network.@switch_vlan[0].device='switch0' + set network.@switch_vlan[0].vlan=1 + set network.@switch_vlan[0].vid=1 + set network.@switch_vlan[0].ports='3 5t' + add network switch_vlan + set network.@switch_vlan[1].device='switch0' + set network.@switch_vlan[1].vlan=2 + set network.@switch_vlan[1].vid=2 + set network.@switch_vlan[1].ports='2 5t' + add network switch_vlan + set network.@switch_vlan[2].device='switch0' + set network.@switch_vlan[2].vlan=3 + set network.@switch_vlan[2].vid=3 + set network.@switch_vlan[2].ports='1 5t' + add network switch_vlan + set network.@switch_vlan[3].device='switch0' + set network.@switch_vlan[3].vlan=4 + set network.@switch_vlan[3].vid=4 + set network.@switch_vlan[3].ports='0 5t' + add network switch_vlan + set network.@switch_vlan[4].device='switch0' + set network.@switch_vlan[4].vlan=5 + set network.@switch_vlan[4].vid=5 + set network.@switch_vlan[4].ports='4 6t' + EOF +elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d /sys/class/net/eth1 ]; then + lanif="eth1" +elif [ ! -d /sys/class/net/eth1 ] && [ -d /sys/class/net/eth0 ]; then + lanif="eth0" +fi +uci -q batch <<-EOF +delete network.lan.type +set network.lan=interface +set network.lan.proto=static +set network.lan.ipaddr=192.168.100.1 +set network.lan.netmask=255.255.255.0 +set network.lan.ifname=${lanif} +set network.lan.metric=2048 +set network.lan.ipv6=0 +set network.lan.delegate=0 +EOF + +uci -q batch <<-EOF +delete network.none +delete network.wan +delete network.if6rd +reorder network.loopback=0 +reorder network.globals=1 +reorder network.lan=2 +set network.globals.multipath=enable +EOF + +# Set the ip rule for the lan with a pref of 100 +uci -q show network.lan_rule >/dev/null || \ + uci -q batch <<-EOF + set network.lan_rule=rule + set network.lan_rule.lookup=lan + set network.lan_rule.priority=100 + EOF + +if [ "$(uci -q get network.vpn0.proto)" = "none" ]; then + uci -q delete network.vpn0 +fi + +config_load network +config_foreach _setup_multipath_off interface + +# Add the lan as a named routing table +if ! grep -s -q "lan" /etc/iproute2/rt_tables; then + echo "50 lan" >> /etc/iproute2/rt_tables +fi +uci -q set network.lan.ip4table='lan' + +#uci -q set "network.lan.ip6assign=64" + +# Create WAN interfaces +if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get network.wan1.multipath)" ]; then + if [ "$(grep rockchip /etc/os-release)" != "" ]; then + _setup_wan_interface wan1 eth0 master macvlan + _setup_wan_interface wan2 eth0 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ]; then + _setup_wan_interface wan1 eth0.1 master + _setup_wan_interface wan2 eth0.2 on + _setup_wan_interface wan3 eth0.3 on + _setup_wan_interface wan4 eth0.4 on + elif [ -d /sys/class/net/wan ] || [ -n "$(ip link | grep ' wan:')" ] || [ -n "$(ip link | grep ' wan@')" ]; then + if [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ]; then + _setup_wan_interface wan1 lan0 master + _setup_wan_interface wan2 lan1 on + + _macaddr=$(uci -q get "network.lan0.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.lan1.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan2 ] || [ -n "$(ip link | grep ' lan2')" ]; then + _setup_wan_interface wan3 lan2 on + _macaddr=$(uci -q get "network.lan2.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then + _setup_wan_interface wan4 lan3 on + _macaddr=$(uci -q get "network.lan3.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/lan2 -o -n "$(ip link | grep ' lan2')" ]; then + _setup_wan_interface wan1 lan1 master + _setup_wan_interface wan2 lan2 on + + _macaddr=$(uci -q get "network.lan1.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.lan2.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then + _setup_wan_interface wan3 lan3 on + _macaddr=$(uci -q get "network.lan3.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/lan4 ] || [ -n "$(ip link | grep ' lan4')" ]; then + _setup_wan_interface wan4 lan4 on + _macaddr=$(uci -q get "network.lan4.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + else + _setup_wan_interface wan1 wan master macvlan + _setup_wan_interface wan2 wan on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/wan1 ] || [ -n "$(ip link | grep ' wan1')" ]; then + if [ -d /sys/class/net/wan2 ] || [ -n "$(ip link | grep ' wan2')" ]; then + _setup_wan_interface wan1 wan1 master + _setup_wan_interface wan2 wan2 on + + _macaddr=$(uci -q get "network.wan1.macaddr") + _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + _macaddr=$(uci -q get "network.wan2.macaddr") + _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + + if [ -d /sys/class/net/wan3 ] || [ -n "$(ip link | grep ' wan3')" ]; then + _setup_wan_interface wan3 wan3 on + _macaddr=$(uci -q get "network.wan3.macaddr") + _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + if [ -d /sys/class/net/wan4 ] || [ -n "$(ip link | grep ' wan4')" ]; then + _setup_wan_interface wan4 wan4 on + _macaddr=$(uci -q get "network.wan4.macaddr") + _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" + fi + fi + else + _setup_wan_interface wan1 wan1 master macvlan + _setup_wan_interface wan2 wan1 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/eth1 ] || [ -n "$(ip link | grep ' eth1:')" ]; then + if [ -d /sys/class/net/eth2 ] || [ -n "$(ip link | grep ' eth2:')" ]; then + _setup_wan_interface wan1 eth1 master + _setup_wan_interface wan2 eth2 on + if [ -d /sys/class/net/eth3 ] || [ -n "$(ip link | grep ' eth3:')" ]; then + _setup_wan_interface wan3 eth3 on + fi + if [ -d /sys/class/net/eth4 ] || [ -n "$(ip link | grep ' eth4:')" ]; then + _setup_wan_interface wan4 eth4 on + fi + if [ -d /sys/class/net/eth5 ] || [ -n "$(ip link | grep ' eth5:')" ]; then + _setup_wan_interface wan5 eth5 on + fi + if [ -d /sys/class/net/eth6 ] || [ -n "$(ip link | grep ' eth6:')" ]; then + _setup_wan_interface wan6 eth6 on + fi + if [ -d /sys/class/net/eth7 ] || [ -n "$(ip link | grep ' eth7:')" ]; then + _setup_wan_interface wan7 eth7 on + fi + if [ -d /sys/class/net/eth8 ] || [ -n "$(ip link | grep ' eth8:')" ]; then + _setup_wan_interface wan8 eth8 on + fi + else + _setup_wan_interface wan1 eth1 master macvlan + _setup_wan_interface wan2 eth1 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + elif [ -d /sys/class/net/eth0.1 ] && [ -d /sys/class/net/eth0.2 ]; then + _setup_wan_interface wan1 eth0.1 master + _setup_wan_interface wan2 eth0.2 on + else + _setup_wan_interface wan1 eth0 master macvlan + _setup_wan_interface wan2 eth0 on macvlan + _setup_macvlan wan1 + _setup_macvlan wan2 + fi + #uci -q batch <<-EOF + #add network route6 + #set network.@route6[-1].interface='lan' + #set network.@route6[-1].target='::/0' + #EOF +fi +uci -q commit macvlan +uci -q commit network +rm -f /tmp/luci-indexcache +exit 0 diff --git a/openmptcprouter/files/etc/wgetrc b/openmptcprouter/files/etc/wgetrc old mode 100755 new mode 100644 diff --git a/protobuf/Makefile b/protobuf/Makefile new file mode 100644 index 000000000..c93527f05 --- /dev/null +++ b/protobuf/Makefile @@ -0,0 +1,108 @@ +# +# Copyright (C) 2007-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=protobuf +PKG_VERSION:=3.5.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-cpp-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/google/protobuf/releases/download/v$(PKG_VERSION) +PKG_HASH:=c28dba8782da2cfea1e11c61d335958c31a9c1bc553063546af9cbe98f204092 + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_DEPENDS:=protobuf/host +PKG_USE_MIPS16:=0# MIPS16 prevents protobuf's usage of the 'sync' asm-opcode + +PKG_INSTALL:=1 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +define Package/protobuf/Default + SECTION:=libs + CATEGORY:=Libraries + TITLE:=A structured data encoding library + URL:=https://github.com/google/protobuf + DEPENDS:=+zlib +libpthread +libstdcpp + MAINTAINER:=Ken Keys +endef + +define Package/protobuf + $(call Package/protobuf/Default) + DEPENDS+=+protobuf-lite +endef + +define Package/protobuf-lite + $(call Package/protobuf/Default) +endef + +define Package/protobuf/description/Default +Protocol Buffers are a way of encoding structured data in an efficient +yet extensible format. Google uses Protocol Buffers for almost all +of its internal RPC protocols and file formats. +endef + +define Package/protobuf/description +$(call Package/protobuf/description/Default) + +This package provides the libprotoc, libprotobuf, and libprotobuf-lite +libraries. For a much smaller protobuf package, see "protobuf-lite". + +endef + +define Package/protobuf-lite/description +$(call Package/protobuf/description/Default) + +This package provides the libprotobuf-lite library. + +endef + +CONFIGURE_ARGS += --with-protoc=$(STAGING_DIR_HOSTPKG)/bin/protoc + +define Build/InstallDev + $(INSTALL_DIR) \ + $(1)/usr/lib \ + $(1)/usr/include + + $(CP) \ + $(PKG_INSTALL_DIR)/usr/include/* \ + $(1)/usr/include/ + + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/* \ + $(1)/usr/lib/ +endef + +define Package/protobuf-lite/install + $(INSTALL_DIR) \ + $(1)/usr/lib + + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/libprotobuf-lite.so* \ + $(1)/usr/lib/ +endef + +define Package/protobuf/install + $(INSTALL_DIR) \ + $(1)/usr/lib + + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/libprotoc.so* \ + $(1)/usr/lib/ + + $(CP) \ + $(PKG_INSTALL_DIR)/usr/lib/libprotobuf.so* \ + $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,protobuf)) +$(eval $(call BuildPackage,protobuf-lite)) +$(eval $(call HostBuild)) diff --git a/serdisplib/Makefile b/serdisplib/Makefile old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/README.md b/shadowsocks-libev/README.md old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/files/firewall.ss-rules b/shadowsocks-libev/files/firewall.ss-rules old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/files/shadowsocks-libev.config b/shadowsocks-libev/files/shadowsocks-libev.config old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/patches/010-ECONNRESET.patch b/shadowsocks-libev/patches/010-ECONNRESET.patch old mode 100755 new mode 100644 diff --git a/shadowsocks-libev/patches/020-NOCRYPTO.patch b/shadowsocks-libev/patches/020-NOCRYPTO.patch old mode 100755 new mode 100644 diff --git a/shadowsocks-v2ray-plugin/Makefile b/shadowsocks-v2ray-plugin/Makefile old mode 100755 new mode 100644 diff --git a/simple-obfs/LICENSE b/simple-obfs/LICENSE old mode 100755 new mode 100644 diff --git a/simple-obfs/Makefile b/simple-obfs/Makefile old mode 100755 new mode 100644 diff --git a/speedtestc/Makefile b/speedtestc/Makefile old mode 100755 new mode 100644 diff --git a/speedtestc/patches/compile-fix.patch b/speedtestc/patches/compile-fix.patch old mode 100755 new mode 100644 diff --git a/speedtestc/patches/user-agent.patch b/speedtestc/patches/user-agent.patch old mode 100755 new mode 100644 diff --git a/tcptraceroute/Makefile b/tcptraceroute/Makefile old mode 100755 new mode 100644 diff --git a/tcptraceroute/patches/001-configure_cross_compile.patch b/tcptraceroute/patches/001-configure_cross_compile.patch old mode 100755 new mode 100644 diff --git a/tracebox/Makefile b/tracebox/Makefile old mode 100755 new mode 100644 diff --git a/tracebox/files/usr/share/tracebox/omr-mptcp-trace.lua b/tracebox/files/usr/share/tracebox/omr-mptcp-trace.lua old mode 100755 new mode 100644 diff --git a/tracebox/patches/101-build-fixes.patch b/tracebox/patches/101-build-fixes.patch old mode 100755 new mode 100644 diff --git a/tracebox/patches/102-configure.patch b/tracebox/patches/102-configure.patch old mode 100755 new mode 100644 diff --git a/tracebox/patches/103-configure.patch b/tracebox/patches/103-configure.patch old mode 100755 new mode 100644 diff --git a/tracebox/patches/104-ns_name_compress.patch b/tracebox/patches/104-ns_name_compress.patch old mode 100755 new mode 100644 diff --git a/tracebox/patches/202-fix-lua-include-hpp.patch b/tracebox/patches/202-fix-lua-include-hpp.patch old mode 100755 new mode 100644 diff --git a/tracebox/patches/204-fix-lua-namespace-crafter.patch b/tracebox/patches/204-fix-lua-namespace-crafter.patch old mode 100755 new mode 100644 diff --git a/umbim/Makefile b/umbim/Makefile new file mode 100644 index 000000000..36763767f --- /dev/null +++ b/umbim/Makefile @@ -0,0 +1,47 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=umbim +PKG_RELEASE:=2 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=$(PROJECT_GIT)/project/umbim.git +PKG_SOURCE_DATE:=2019-09-11 +PKG_SOURCE_VERSION:=184b707ddaa0acee84d02e0ffe599cb8b67782bd +PKG_MIRROR_HASH:=482ff69144f81fafed99035840f5a24e772472f2df2f3ac0219d6de791ac5835 +PKG_MAINTAINER:=John Crispin + +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:= + +PKG_BUILD_PARALLEL:=1 + +PKG_FLAGS:=nonshared + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/umbim + SECTION:=net + CATEGORY:=Network + SUBMENU:=WWAN + DEPENDS:=+libubox +kmod-usb-net +kmod-usb-net-cdc-mbim +wwan + TITLE:=Control utility for mobile broadband modems +endef + +define Package/umbim/description + umbim is a command line tool for controlling mobile broadband modems using + the MBIM-protocol. +endef + +TARGET_CFLAGS += \ + -I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections + +TARGET_LDFLAGS += -Wl,--gc-sections + +define Package/umbim/install + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/umbim $(1)/sbin/ + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,umbim)) diff --git a/umbim/files/lib/netifd/proto/mbim.sh b/umbim/files/lib/netifd/proto/mbim.sh new file mode 100644 index 000000000..136160997 --- /dev/null +++ b/umbim/files/lib/netifd/proto/mbim.sh @@ -0,0 +1,240 @@ +#!/bin/sh + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . ../netifd-proto.sh + init_proto "$@" +} +#DBG=-v + +proto_mbim_init_config() { + available=1 + no_device=1 + proto_config_add_string "device:device" + proto_config_add_string pdptype + proto_config_add_string apn + proto_config_add_string pincode + proto_config_add_string delay + proto_config_add_string auth + proto_config_add_string username + proto_config_add_string password + proto_config_add_defaults +} + +_proto_mbim_setup() { + local interface="$1" + local tid=2 + + local device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS + json_get_vars device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS + + [ -n "$ctl_device" ] && device=$ctl_device + + pdptype=$(echo "$pdptype" | awk '{print tolower($0)}') + case "$pdptype" in + ip ) + pdptype="ipv4" + ;; + ipv4 | ipv6 | ipv4v6 | ipv4-and-ipv6 ) + ;; + * ) pdptype="default" ;; + esac + + [ -n "$device" ] || { + echo "mbim[$$]" "No control device specified" + proto_notify_error "$interface" NO_DEVICE + proto_set_available "$interface" 0 + return 1 + } + [ -c "$device" ] || { + echo "mbim[$$]" "The specified control device does not exist" + proto_notify_error "$interface" NO_DEVICE + proto_set_available "$interface" 0 + return 1 + } + + devname="$(basename "$device")" + devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)" + ifname="$( ls "$devpath"/net )" + + [ -n "$ifname" ] || { + echo "mbim[$$]" "Failed to find matching interface" + proto_notify_error "$interface" NO_IFNAME + proto_set_available "$interface" 0 + return 1 + } + + [ -n "$apn" ] || { + echo "mbim[$$]" "No APN specified" + proto_notify_error "$interface" NO_APN + return 1 + } + + [ -n "$delay" ] && sleep "$delay" + + echo "mbim[$$]" "Reading capabilities" + umbim $DBG -n -d $device caps || { + echo "mbim[$$]" "Failed to read modem caps" + proto_notify_error "$interface" PIN_FAILED + return 1 + } + tid=$((tid + 1)) + + [ "$pincode" ] && { + echo "mbim[$$]" "Sending pin" + umbim $DBG -n -t $tid -d $device unlock "$pincode" || { + echo "mbim[$$]" "Unable to verify PIN" + proto_notify_error "$interface" PIN_FAILED + proto_block_restart "$interface" + return 1 + } + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Checking pin" + local pinstate="/var/run/mbim.$$.pinstate" + umbim $DBG -n -t $tid -d $device pinstate > "$pinstate" 2>&1 || { + local pin + pin=$(awk '$2=="pin:" {print $5}' "$pinstate") + # we only need pin1 (the SIM pin) to connect + [ "$pin" = "pin1" ] && { + echo "mbim[$$]" "PIN required" + proto_notify_error "$interface" PIN_FAILED + proto_block_restart "$interface" + return 1 + } + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Checking subscriber" + umbim $DBG -n -t $tid -d $device subscriber || { + echo "mbim[$$]" "Subscriber init failed" + proto_notify_error "$interface" NO_SUBSCRIBER + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Register with network" + umbim $DBG -n -t $tid -d $device registration || { + echo "mbim[$$]" "Subscriber registration failed" + proto_notify_error "$interface" NO_REGISTRATION + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Attach to network" + umbim $DBG -n -t $tid -d $device attach || { + echo "mbim[$$]" "Failed to attach to network" + proto_notify_error "$interface" ATTACH_FAILED + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Connect to network" + while ! umbim $DBG -n -t $tid -d $device connect "$pdptype:$apn" "$auth" "$username" "$password"; do + tid=$((tid + 1)) + sleep 1; + done + tid=$((tid + 1)) + + echo "mbim[$$]" "Connected, obtain IP address and configure interface" + local config="/var/run/mbim.$$.config" + umbim $DBG -n -t $tid -d $device config > "$config" || { + echo "mbim[$$]" "Failed to obtain IP address" + proto_notify_error "$interface" CONFIG_FAILED + return 1 + } + tid=$((tid + 1)) + + proto_init_update "$ifname" 1 + proto_add_data + json_add_int tid $tid + proto_close_data + proto_send_update "$interface" + + local ip_4 ip_6 + ip_4=$(awk '$1=="ipv4address:" {print $2}' "$config") + ip_6=$(awk '$1=="ipv6address:" {print $2}' "$config") + [ -n "$ip_4" ] || [ -n "$ip_6" ] || { + echo "mbim[$$]" "Failed to obtain IP addresses" + proto_notify_error "$interface" CONFIG_FAILED + return 1 + } + + proto_init_update "$ifname" 1 + proto_set_keep 1 + local ip mask gateway mtu dns dns_servers + + [ -n "$ip_4" ] && { + echo "mbim[$$]" "Configure IPv4 on $ifname" + ip=${ip_4%%/*} + mask=${ip_4##*/} + gateway=$(awk '$1=="ipv4gateway:" {print $2}' "$config") + mtu=$(awk '$1=="ipv4mtu:" {print $2}' "$config") + [ "$mtu" ] && ip link set "$ifname" mtu "$mtu" + + proto_add_ipv4_address "$ip" "$mask" + [ "$defaultroute" = 0 ] || proto_add_ipv4_route 0.0.0.0 0 "$gateway" "$ip_4" "$metric" + [ "$peerdns" = 0 ] || { + dns_servers=$(awk '$1=="ipv4dnsserver:" {printf "%s ",$2}' "$config") + for dns in $dns_servers; do + proto_add_dns_server "$dns" + done + } + + } + [ -n "$ip_6" ] && { + echo "mbim[$$]" "Configure IPv6 on $ifname" + ip=${ip_6%%/*} + mask=${ip_6##*/} + gateway=$(awk '$1=="ipv6gateway:" {print $2}' "$config") + mtu=$(awk '$1=="ipv6mtu:" {print $2}' "$config") + [ "$mtu" ] && ip -6 link set "$ifname" mtu "$mtu" + + proto_add_ipv6_address "$ip" "$mask" + proto_add_ipv6_prefix "$ip_6" + [ "$defaultroute" = 0 ] || proto_add_ipv6_route "::" 0 "$gateway" "$metric" "" "$ip_6" + [ "$peerdns" = 0 ] || { + dns_servers=$(awk '$1=="ipv6dnsserver:" {printf "%s ",$2}' "$config") + for dns in $dns_servers; do + proto_add_dns_server "$dns" + done + } + } + + proto_send_update "$interface" + echo "mbim[$$]" "Connection setup complete" +} + +proto_mbim_setup() { + local ret + + _proto_mbim_setup "$@" + ret=$? + + rm -f "/var/run/mbim.$$."* + + [ "$ret" = 0 ] || { + logger "mbim bringup failed, retry in 15s" + sleep 15 + } + + return $ret +} + +proto_mbim_teardown() { + local interface="$1" + + local device tid + json_get_vars device tid + + [ -n "$ctl_device" ] && device=$ctl_device + + echo "mbim[$$]" "Stopping network" + [ -n "$tid" ] && umbim $DBG -t$tid -d "$device" disconnect + + proto_init_update "*" 0 + proto_send_update "$interface" +} + +[ -n "$INCLUDE_ONLY" ] || add_protocol mbim diff --git a/v2ray-core/Config.in b/v2ray-core/Config.in old mode 100755 new mode 100644 diff --git a/v2ray-core/LICENSE b/v2ray-core/LICENSE old mode 100755 new mode 100644 diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile old mode 100755 new mode 100644 diff --git a/v2ray-core/files/etc/firewall.v2ray-rules b/v2ray-core/files/etc/firewall.v2ray-rules old mode 100755 new mode 100644 diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray old mode 100755 new mode 100644 diff --git a/v2ray-ext/Makefile b/v2ray-ext/Makefile old mode 100755 new mode 100644 From d3c87b20a1b3f3b20143bbd660180c5a0a27b3df Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Mar 2021 21:18:29 +0100 Subject: [PATCH 087/195] Update MLVPN --- mlvpn/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mlvpn/Makefile b/mlvpn/Makefile index 6e0cb5e81..f9a356f02 100644 --- a/mlvpn/Makefile +++ b/mlvpn/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mlvpn -PKG_VERSION:=67f9f31d +PKG_VERSION:=2263bab PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git -PKG_SOURCE_VERSION:=58418fd847fe833d1e626d4b7d08f0e623756c5c -PKG_SOURCE_DATE:=2020-09-01 +PKG_SOURCE_VERSION:=2263bab7e5f983e1daa33887b53120c12646398f +PKG_SOURCE_DATE:=2020-12-16 #PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git #PKG_SOURCE_VERSION:=8f9720978b28c1954f9f229525333547283316d2 #PKG_SOURCE_DATE:=2018-09-03 From c3ff485c060b173ceed06572dc124278885bc9b3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Mar 2021 21:18:56 +0100 Subject: [PATCH 088/195] Compare to null' --- .../htdocs/luci-static/resources/view/network/interfaces.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js index c76e02dec..6d8e42582 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js @@ -511,7 +511,7 @@ return view.extend({ var new_ifnames = L.toArray(value); - if (value == undefined) + if (value == null) return; old_ifnames.sort(); From 23fb2cf5e55d7ed9073e88b78570c5745ff961e2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Mar 2021 21:19:49 +0100 Subject: [PATCH 089/195] Add cleartext support for mlvpn --- .../resources/view/services/mlvpn.js | 17 ++++++++++------- .../luasrc/controller/openmptcprouter.lua | 4 ++++ mlvpn/files/etc/init.d/mlvpn | 3 +++ 3 files changed, 17 insertions(+), 7 deletions(-) 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 2d5258047..014232d7a 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 @@ -46,8 +46,8 @@ return L.view.extend({ o.rmempty = false; o = s.taboption('general', form.Value, 'firstport', _('First Port')); - o.default = "65201" - o.datatype = "port" + o.default = "65201"; + o.datatype = "port"; o.rmempty = false; o = s.taboption('general', form.Value, 'password', _('Password')); @@ -55,26 +55,29 @@ return L.view.extend({ o.modalonly = true; o = s.taboption('general', form.Value, 'interface_name', _('Interface name')); - o.default = "mlvpn0" - o.placeholder = "mlvpn0" + 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.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.datatype = "uinteger"; o.rmempty = false; o.modalonly = true; + o = s.taboption('advanced', form.Flag, 'cleartext_data', _('Disable encryption')); + o.default = o.disabled; + o = s.taboption('advanced', form.Value, 'loss_tolerance', _('Loss tolerance')); o.default = '50'; - o.datatype = "uinteger" + o.datatype = "uinteger"; o.rmempty = false; o.modalonly = true; diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 77d324ce7..98963fc69 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -649,6 +649,7 @@ function wizard_add() ucic:set("shadowsocks-libev","sss0","method","none") ucic:set("shadowsocks-libev","sss1","method","none") ucic:set("openvpn","omr","cipher","none") + ucic:set("mlvpn","general","cleartext_data","1") ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") elseif encryption == "aes-256-gcm" then @@ -657,6 +658,7 @@ function wizard_add() ucic:set("glorytun","vpn","chacha20","0") ucic:set("glorytun-udp","vpn","chacha","0") ucic:set("openvpn","omr","cipher","AES-256-GCM") + ucic:set("mlvpn","general","cleartext_data","0") 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 @@ -665,6 +667,7 @@ function wizard_add() ucic:set("glorytun","vpn","chacha20","0") ucic:set("glorytun-udp","vpn","chacha","0") ucic:set("openvpn","omr","cipher","AES-256-CFB") + ucic:set("mlvpn","general","cleartext_data","0") 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 @@ -673,6 +676,7 @@ function wizard_add() ucic:set("glorytun","vpn","chacha20","1") ucic:set("glorytun-udp","vpn","chacha","1") ucic:set("openvpn","omr","cipher","AES-256-CBC") + ucic:set("mlvpn","general","cleartext_data","0") ucic:set("v2ray","omrout","s_vmess_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305") end diff --git a/mlvpn/files/etc/init.d/mlvpn b/mlvpn/files/etc/init.d/mlvpn index 3021f143e..6ef4bfdc6 100755 --- a/mlvpn/files/etc/init.d/mlvpn +++ b/mlvpn/files/etc/init.d/mlvpn @@ -40,6 +40,8 @@ start() { password="$(uci -q get mlvpn.general.password)" reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)" loss_tolerence="$(uci -q get mlvpn.general.loss_tolerence)" + cleartext_data="$(uci -q get mlvpn.general.cleartext_data)" + [ -z "$cleartext_data" ] && cleartext_data="0" host="$(uci -q get mlvpn.general.host)" firstport="$(uci -q get mlvpn.general.firstport)" @@ -57,6 +59,7 @@ start() { reorder_buffer = yes reorder_buffer_size = ${reorder_buffer_size} loss_tolerence = ${loss_tolerence} + cleartext_data = ${cleartext_data} password = "${password}" mtu = 1452 EOF From a34a7b3215bdba92258331d6f2b49660fe0982bc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Mar 2021 21:20:52 +0100 Subject: [PATCH 090/195] Display on status page that bridge is not a good idea --- .../luasrc/view/openmptcprouter/wanstatus.htm | 6 ++++++ .../root/usr/libexec/rpcd/openmptcprouter | 2 ++ 2 files changed, 8 insertions(+) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 4a3421d3b..fe5c85e4a 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -424,6 +424,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm ip6addr=replaceLastNChars(ip6addr,"x",6); } var ifname = mArray.wans[i].ifname; + var iftype = mArray.wans[i].iftype; var whois = mArray.wans[i].whois; var whois6 = mArray.wans[i].whois6; var signal = mArray.wans[i].signal; @@ -596,6 +597,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '<%:Network interface duplicated%>' + '
'; statusMessageClass = "error"; } + if(iftype == "bridge") + { + statusMessage += '<%:Bridge can't have multipath enabled%>' + '
'; + statusMessageClass = "error"; + } if(duplicatemac) { statusMessage += '<%:Network interface MAC address duplicated%>' + '
'; diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 2a31616dc..4a9a7a21f 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -1119,6 +1119,7 @@ function interfaces_status() local proto = section["proto"] or "" local ipv6 = section["ipv6"] or "0" local mac = section ["macaddr"] or "" + local itype = section ["type"] or "" --if not ipaddr or not gateway then return end -- Don't show if0 in the overview @@ -1479,6 +1480,7 @@ function interfaces_status() rx = rx, tx = tx, zonewan = zonewan, + iftype = itype, } if ifname ~= nil and ifname:match("^tun.*") then table.insert(mArray.tunnels, data); From 70e48f93a0320ef821dc101d37b34e8029d31b34 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 8 Mar 2021 14:45:18 +0100 Subject: [PATCH 091/195] Use old iproute2 because last version doesn't compile --- iproute2/Makefile | 209 ++++++++++++++++++ iproute2/files/15-teql | 23 ++ iproute2/patches/100-configure.patch | 12 + iproute2/patches/110-darwin_fixes.patch | 59 +++++ .../patches/115-add-config-xtlibdir.patch | 12 + iproute2/patches/120-no_arpd.patch | 15 ++ iproute2/patches/130-no_netem.patch | 11 + iproute2/patches/140-allow_pfifo_fast.patch | 9 + .../patches/140-keep_libmnl_optional.patch | 11 + .../patches/145-keep_libelf_optional.patch | 11 + .../patches/150-keep_libcap_optional.patch | 11 + iproute2/patches/160-libnetlink-pic.patch | 11 + iproute2/patches/170-ip_tiny.patch | 108 +++++++++ .../patches/175-reduce-dynamic-syms.patch | 44 ++++ iproute2/patches/180-drop_FAILED_POLICY.patch | 41 ++++ .../patches/200-drop_libbsd_dependency.patch | 19 ++ .../patches/300-selinux-configurable.patch | 11 + 17 files changed, 617 insertions(+) create mode 100644 iproute2/Makefile create mode 100644 iproute2/files/15-teql create mode 100644 iproute2/patches/100-configure.patch create mode 100644 iproute2/patches/110-darwin_fixes.patch create mode 100644 iproute2/patches/115-add-config-xtlibdir.patch create mode 100644 iproute2/patches/120-no_arpd.patch create mode 100644 iproute2/patches/130-no_netem.patch create mode 100644 iproute2/patches/140-allow_pfifo_fast.patch create mode 100644 iproute2/patches/140-keep_libmnl_optional.patch create mode 100644 iproute2/patches/145-keep_libelf_optional.patch create mode 100644 iproute2/patches/150-keep_libcap_optional.patch create mode 100644 iproute2/patches/160-libnetlink-pic.patch create mode 100644 iproute2/patches/170-ip_tiny.patch create mode 100644 iproute2/patches/175-reduce-dynamic-syms.patch create mode 100644 iproute2/patches/180-drop_FAILED_POLICY.patch create mode 100644 iproute2/patches/200-drop_libbsd_dependency.patch create mode 100644 iproute2/patches/300-selinux-configurable.patch diff --git a/iproute2/Makefile b/iproute2/Makefile new file mode 100644 index 000000000..ee86eb6c1 --- /dev/null +++ b/iproute2/Makefile @@ -0,0 +1,209 @@ +# +# Copyright (C) 2006-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=iproute2 +PKG_VERSION:=5.10.0 +PKG_RELEASE:=2 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 +PKG_HASH:=a54a34ae309c0406b2d1fb3a46158613ffb83d33fefd5d4a27f0010237ac53e9 +PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DEPENDS:=iptables +PKG_LICENSE:=GPL-2.0 +PKG_CPE_ID:=cpe:/a:iproute2_project:iproute2 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/nls.mk + +define Package/iproute2/Default + SECTION:=net + CATEGORY:=Network + URL:=http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2 + SUBMENU:=Routing and Redirection + MAINTAINER:=Russell Senior +endef + +define Package/ip-tiny +$(call Package/iproute2/Default) + TITLE:=Routing control utility (Minimal) + VARIANT:=tiny + DEFAULT_VARIANT:=1 + PROVIDES:=ip + ALTERNATIVES:=200:/sbin/ip:/usr/libexec/ip-tiny + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +endef + +define Package/ip-full +$(call Package/iproute2/Default) + TITLE:=Routing control utility (Full) + VARIANT:=full + PROVIDES:=ip + ALTERNATIVES:=300:/sbin/ip:/usr/libexec/ip-full + DEPENDS:=+libnl-tiny +libelf +(PACKAGE_devlink||PACKAGE_rdma):libmnl +endef + +define Package/tc +$(call Package/iproute2/Default) + TITLE:=Traffic control utility + VARIANT:=tc + PROVIDES:=tc + DEPENDS:=+kmod-sched-core +libxtables +libelf +(PACKAGE_devlink||PACKAGE_rdma):libmnl +endef + +define Package/genl +$(call Package/iproute2/Default) + TITLE:=General netlink utility frontend + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +endef + +define Package/ip-bridge +$(call Package/iproute2/Default) + TITLE:=Bridge configuration utility from iproute2 + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +endef + +define Package/ss +$(call Package/iproute2/Default) + TITLE:=Socket statistics utility + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +kmod-netlink-diag +endef + +define Package/nstat +$(call Package/iproute2/Default) + TITLE:=Network statistics utility + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +endef + +define Package/devlink +$(call Package/iproute2/Default) + TITLE:=Network devlink utility + DEPENDS:=+libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +endef + +define Package/rdma +$(call Package/iproute2/Default) + TITLE:=Network rdma utility + DEPENDS:=+libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf +endef + +ifeq ($(BUILD_VARIANT),tiny) + IP_CONFIG_TINY:=y +endif + +ifeq ($(BUILD_VARIANT),full) + HAVE_ELF:=y + HAVE_CAP:=n +endif + +ifeq ($(BUILD_VARIANT),tc) + HAVE_ELF:=y + SHARED_LIBS:=y +endif + +ifdef CONFIG_PACKAGE_devlink + HAVE_MNL:=y +endif + +ifdef CONFIG_PACKAGE_rdma + HAVE_MNL:=y +endif + +define Build/Configure + echo "static const char SNAPSHOT[] = \"$(PKG_VERSION)-$(PKG_RELEASE)-openwrt\";" \ + > $(PKG_BUILD_DIR)/include/SNAPSHOT.h +endef + +TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto +TARGET_LDFLAGS += -Wl,--gc-sections +TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny + +MAKE_FLAGS += \ + KERNEL_INCLUDE="$(LINUX_DIR)/user_headers/include" \ + SHARED_LIBS=$(SHARED_LIBS) \ + IP_CONFIG_TINY=$(IP_CONFIG_TINY) \ + HAVE_ELF=$(HAVE_ELF) \ + HAVE_MNL=$(HAVE_MNL) \ + HAVE_CAP=$(HAVE_CAP) \ + IPT_LIB_DIR=/usr/lib/iptables \ + XT_LIB_DIR=/usr/lib/iptables \ + FPIC="$(FPIC)" + +define Build/Compile + +$(MAKE_VARS) $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) $(MAKE_FLAGS) +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_BUILD_DIR)/include/{libgenl,libnetlink}.h $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_BUILD_DIR)/lib/libnetlink.a $(1)/usr/lib/ +endef + +define Package/ip-tiny/install + $(INSTALL_DIR) $(1)/usr/libexec + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ip/ip $(1)/usr/libexec/ip-tiny +endef + +define Package/ip-full/install + $(INSTALL_DIR) $(1)/usr/libexec + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ip/ip $(1)/usr/libexec/ip-full +endef + +define Package/tc/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/tc/tc $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface + $(INSTALL_BIN) ./files/15-teql $(1)/etc/hotplug.d/iface/ +ifeq ($(SHARED_LIBS),y) + $(INSTALL_DIR) $(1)/usr/lib/tc + $(CP) $(PKG_BUILD_DIR)/tc/*.so $(1)/usr/lib/tc +endif +endef + +define Package/genl/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/genl/genl $(1)/usr/sbin/ +endef + +define Package/ip-bridge/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bridge/bridge $(1)/usr/sbin/ +endef + +define Package/ss/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/ss $(1)/usr/sbin/ +endef + +define Package/nstat/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/nstat $(1)/usr/sbin/ +endef + +define Package/devlink/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/devlink/devlink $(1)/usr/sbin/ +endef + +define Package/rdma/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/rdma/rdma $(1)/usr/sbin/ +endef + +$(eval $(call BuildPackage,ip-tiny)) +$(eval $(call BuildPackage,ip-full)) +$(eval $(call BuildPackage,tc)) +$(eval $(call BuildPackage,genl)) +$(eval $(call BuildPackage,ip-bridge)) +$(eval $(call BuildPackage,ss)) +$(eval $(call BuildPackage,nstat)) +$(eval $(call BuildPackage,devlink)) +$(eval $(call BuildPackage,rdma)) diff --git a/iproute2/files/15-teql b/iproute2/files/15-teql new file mode 100644 index 000000000..a0c0e503a --- /dev/null +++ b/iproute2/files/15-teql @@ -0,0 +1,23 @@ +#!/bin/sh + +. /lib/functions.sh + +if [ "$ACTION" != "ifup" ]; then + exit +fi + +config_load network + +config_get teql $INTERFACE teql + +if [ "$teql" != "" ]; then + logger Adding device $DEVICE to TEQL master $teql + insmod sch_teql + tc qdisc add dev $DEVICE root $teql + + # The kernel doesn't let us bring it up until it has at least one + # slave. So bring it up now, if it isn't already. + if ! cat /sys/class/net/$teql/carrier &>/dev/null; then + ifup $teql & + fi +fi diff --git a/iproute2/patches/100-configure.patch b/iproute2/patches/100-configure.patch new file mode 100644 index 000000000..0c19b2086 --- /dev/null +++ b/iproute2/patches/100-configure.patch @@ -0,0 +1,12 @@ +--- a/configure ++++ b/configure +@@ -34,7 +34,8 @@ int main(int argc, char **argv) { + } + EOF + +- if $CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1; then ++# OpenWrt: disable ATM support even if present on host system ++ if [ 1 -eq 0 ]; then + echo "TC_CONFIG_ATM:=y" >>$CONFIG + echo yes + else diff --git a/iproute2/patches/110-darwin_fixes.patch b/iproute2/patches/110-darwin_fixes.patch new file mode 100644 index 000000000..1f3eb101e --- /dev/null +++ b/iproute2/patches/110-darwin_fixes.patch @@ -0,0 +1,59 @@ +--- a/netem/maketable.c ++++ b/netem/maketable.c +@@ -10,7 +10,9 @@ + #include + #include + #include ++#if !defined(__APPLE__) && !defined(__FreeBSD__) + #include ++#endif + #include + #include + #include +--- a/netem/normal.c ++++ b/netem/normal.c +@@ -8,8 +8,12 @@ + #include + #include + ++#if !defined(__APPLE__) && !defined(__FreeBSD__) + #include + #include ++#else ++#define NETEM_DIST_SCALE 8192 ++#endif + + #define TABLESIZE 16384 + #define TABLEFACTOR NETEM_DIST_SCALE +--- a/netem/pareto.c ++++ b/netem/pareto.c +@@ -7,8 +7,12 @@ + #include + #include + ++#if !defined(__APPLE__) && !defined(__FreeBSD__) + #include + #include ++#else ++#define NETEM_DIST_SCALE 8192 ++#endif + + static const double a=3.0; + #define TABLESIZE 16384 +--- a/netem/paretonormal.c ++++ b/netem/paretonormal.c +@@ -14,10 +14,13 @@ + #include + #include + #include ++#if !defined(__APPLE__) && !defined(__FreeBSD__) + #include +- + #include + #include ++#else ++#define NETEM_DIST_SCALE 8192 ++#endif + + #define TABLESIZE 16384 + #define TABLEFACTOR NETEM_DIST_SCALE diff --git a/iproute2/patches/115-add-config-xtlibdir.patch b/iproute2/patches/115-add-config-xtlibdir.patch new file mode 100644 index 000000000..8702d5fd2 --- /dev/null +++ b/iproute2/patches/115-add-config-xtlibdir.patch @@ -0,0 +1,12 @@ +--- a/tc/Makefile ++++ b/tc/Makefile +@@ -128,6 +128,9 @@ CFLAGS += -DCONFIG_GACT -DCONFIG_GACT_PR + ifneq ($(IPT_LIB_DIR),) + CFLAGS += -DIPT_LIB_DIR=\"$(IPT_LIB_DIR)\" + endif ++ifneq ($(XT_LIB_DIR),) ++ CFLAGS += -DXT_LIB_DIR=\"$(XT_LIB_DIR)\" ++endif + + LEX := flex + CFLAGS += -DYY_NO_INPUT diff --git a/iproute2/patches/120-no_arpd.patch b/iproute2/patches/120-no_arpd.patch new file mode 100644 index 000000000..772398140 --- /dev/null +++ b/iproute2/patches/120-no_arpd.patch @@ -0,0 +1,15 @@ +--- a/misc/Makefile ++++ b/misc/Makefile +@@ -6,9 +6,9 @@ TARGETS=ss nstat ifstat rtacct lnstat + + include ../config.mk + +-ifeq ($(HAVE_BERKELEY_DB),y) +- TARGETS += arpd +-endif ++#ifeq ($(HAVE_BERKELEY_DB),y) ++# TARGETS += arpd ++#endif + + all: $(TARGETS) + diff --git a/iproute2/patches/130-no_netem.patch b/iproute2/patches/130-no_netem.patch new file mode 100644 index 000000000..aa93366f2 --- /dev/null +++ b/iproute2/patches/130-no_netem.patch @@ -0,0 +1,11 @@ +--- a/Makefile ++++ b/Makefile +@@ -55,7 +55,7 @@ WFLAGS += -Wmissing-declarations -Wold-s + CFLAGS := $(WFLAGS) $(CCOPTS) -I../include -I../include/uapi $(DEFINES) $(CFLAGS) + YACCFLAGS = -d -t -v + +-SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma man ++SUBDIRS=lib ip tc bridge misc genl tipc devlink rdma man + + LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a + LDLIBS += $(LIBNETLINK) diff --git a/iproute2/patches/140-allow_pfifo_fast.patch b/iproute2/patches/140-allow_pfifo_fast.patch new file mode 100644 index 000000000..bb898a40d --- /dev/null +++ b/iproute2/patches/140-allow_pfifo_fast.patch @@ -0,0 +1,9 @@ +--- a/tc/q_fifo.c ++++ b/tc/q_fifo.c +@@ -99,5 +99,6 @@ struct qdisc_util pfifo_head_drop_qdisc_ + + struct qdisc_util pfifo_fast_qdisc_util = { + .id = "pfifo_fast", ++ .parse_qopt = fifo_parse_opt, + .print_qopt = prio_print_opt, + }; diff --git a/iproute2/patches/140-keep_libmnl_optional.patch b/iproute2/patches/140-keep_libmnl_optional.patch new file mode 100644 index 000000000..20cd0766a --- /dev/null +++ b/iproute2/patches/140-keep_libmnl_optional.patch @@ -0,0 +1,11 @@ +--- a/configure ++++ b/configure +@@ -257,7 +257,7 @@ check_selinux() + + check_mnl() + { +- if ${PKG_CONFIG} libmnl --exists; then ++ if [ "${HAVE_MNL}" = "y" ] && ${PKG_CONFIG} libmnl --exists; then + echo "HAVE_MNL:=y" >>$CONFIG + echo "yes" + diff --git a/iproute2/patches/145-keep_libelf_optional.patch b/iproute2/patches/145-keep_libelf_optional.patch new file mode 100644 index 000000000..d25c719f8 --- /dev/null +++ b/iproute2/patches/145-keep_libelf_optional.patch @@ -0,0 +1,11 @@ +--- a/configure ++++ b/configure +@@ -230,7 +230,7 @@ EOF + + check_elf() + { +- if ${PKG_CONFIG} libelf --exists; then ++ if [ "${HAVE_ELF}" = "y" ] && ${PKG_CONFIG} libelf --exists; then + echo "HAVE_ELF:=y" >>$CONFIG + echo "yes" + diff --git a/iproute2/patches/150-keep_libcap_optional.patch b/iproute2/patches/150-keep_libcap_optional.patch new file mode 100644 index 000000000..d15549e3d --- /dev/null +++ b/iproute2/patches/150-keep_libcap_optional.patch @@ -0,0 +1,11 @@ +--- a/configure ++++ b/configure +@@ -315,7 +315,7 @@ EOF + + check_cap() + { +- if ${PKG_CONFIG} libcap --exists; then ++ if [ "${HAVE_CAP}" = "y" ] && ${PKG_CONFIG} libcap --exists; then + echo "HAVE_CAP:=y" >>$CONFIG + echo "yes" + diff --git a/iproute2/patches/160-libnetlink-pic.patch b/iproute2/patches/160-libnetlink-pic.patch new file mode 100644 index 000000000..aad87a1e4 --- /dev/null +++ b/iproute2/patches/160-libnetlink-pic.patch @@ -0,0 +1,11 @@ +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + include ../config.mk + +-CFLAGS += -fPIC ++CFLAGS += $(FPIC) + + UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \ + inet_proto.o namespace.o json_writer.o json_print.o \ diff --git a/iproute2/patches/170-ip_tiny.patch b/iproute2/patches/170-ip_tiny.patch new file mode 100644 index 000000000..c9b28dfe7 --- /dev/null +++ b/iproute2/patches/170-ip_tiny.patch @@ -0,0 +1,108 @@ +--- a/ip/Makefile ++++ b/ip/Makefile +@@ -17,6 +17,13 @@ RTMONOBJ=rtmon.o + + include ../config.mk + ++STATIC_SYM_FILTER:= ++ifeq ($(IP_CONFIG_TINY),y) ++ STATIC_SYM_FILTER:=iplink_can.c iplink_ipoib.c iplink_vxlan.c ++ CFLAGS += -DIPROUTE2_TINY ++endif ++STATIC_SYM_SOURCES:=$(filter-out $(STATIC_SYM_FILTER),$(wildcard *.c)) ++ + ALLOBJ=$(IPOBJ) $(RTMONOBJ) + SCRIPTS=ifcfg rtpr routel routef + TARGETS=ip rtmon +@@ -46,7 +53,7 @@ else + + ip: static-syms.o + static-syms.o: static-syms.h +-static-syms.h: $(wildcard *.c) ++static-syms.h: $(STATIC_SYM_SOURCES) + files="$^" ; \ + for s in `grep -B 3 '\ $@ + ++else ++ ++tc: dynsyms.list ++dynsyms.list: $(wildcard *.c) ++ files="$(filter-out $(patsubst %.so,%.c,$(TCSO)), $^)" ; \ ++ echo "{" > $@ ; \ ++ for s in `grep -B 3 '\> $@ ; \ ++ echo "show_stats; print_nl; print_tm; parse_rtattr; parse_rtattr_flags; get_u32; matches; addattr_l; addattr_nest; addattr_nest_end; };" >> $@ ++ + endif diff --git a/iproute2/patches/180-drop_FAILED_POLICY.patch b/iproute2/patches/180-drop_FAILED_POLICY.patch new file mode 100644 index 000000000..95b37ae44 --- /dev/null +++ b/iproute2/patches/180-drop_FAILED_POLICY.patch @@ -0,0 +1,41 @@ +From 4e7dbf76227e8c7be7897dc81def3011f637864d Mon Sep 17 00:00:00 2001 +From: Jonas Gorski +Date: Thu, 30 May 2013 11:54:04 +0200 +Subject: [PATCH] add support for dropping with FAILED_POLICY + +--- + include/linux/fib_rules.h | 4 ++++ + include/linux/rtnetlink.h | 1 + + ip/rtm_map.c | 4 ++++ + 3 files changed, 9 insertions(+) + +--- a/ip/rtm_map.c ++++ b/ip/rtm_map.c +@@ -54,6 +54,8 @@ char *rtnl_rtntype_n2a(int id, char *buf + return "nat"; + case RTN_XRESOLVE: + return "xresolve"; ++ case RTN_FAILED_POLICY: ++ return "failed_policy"; + default: + snprintf(buf, len, "%d", id); + return buf; +@@ -89,6 +91,8 @@ int rtnl_rtntype_a2n(int *id, char *arg) + res = RTN_UNICAST; + else if (strcmp(arg, "throw") == 0) + res = RTN_THROW; ++ else if (strcmp(arg, "failed_policy") == 0) ++ res = RTN_FAILED_POLICY; + else { + res = strtoul(arg, &end, 0); + if (!end || end == arg || *end || res > 255) +--- a/include/uapi/linux/rtnetlink.h ++++ b/include/uapi/linux/rtnetlink.h +@@ -249,6 +249,7 @@ enum { + RTN_THROW, /* Not in this table */ + RTN_NAT, /* Translate this address */ + RTN_XRESOLVE, /* Use external resolver */ ++ RTN_FAILED_POLICY, /* Source address failed policy */ + __RTN_MAX + }; + diff --git a/iproute2/patches/200-drop_libbsd_dependency.patch b/iproute2/patches/200-drop_libbsd_dependency.patch new file mode 100644 index 000000000..0d3cbe8df --- /dev/null +++ b/iproute2/patches/200-drop_libbsd_dependency.patch @@ -0,0 +1,19 @@ +--- a/configure ++++ b/configure +@@ -301,14 +301,8 @@ EOF + if $CC -I$INCLUDE -o $TMPDIR/strtest $TMPDIR/strtest.c >/dev/null 2>&1; then + echo "no" + else +- if ${PKG_CONFIG} libbsd --exists; then +- echo 'CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG +- echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG +- echo "no" +- else +- echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG +- echo "yes" +- fi ++ echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG ++ echo "yes" + fi + rm -f $TMPDIR/strtest.c $TMPDIR/strtest + } diff --git a/iproute2/patches/300-selinux-configurable.patch b/iproute2/patches/300-selinux-configurable.patch new file mode 100644 index 000000000..4cda30f97 --- /dev/null +++ b/iproute2/patches/300-selinux-configurable.patch @@ -0,0 +1,11 @@ +--- a/configure ++++ b/configure +@@ -244,7 +244,7 @@ check_elf() + check_selinux() + # SELinux is a compile time option in the ss utility + { +- if ${PKG_CONFIG} libselinux --exists; then ++ if [ "${HAVE_SELINUX}" = "y" ] && ${PKG_CONFIG} libselinux --exists; then + echo "HAVE_SELINUX:=y" >>$CONFIG + echo "yes" + From 0a7c8fea39582ff778672cb49998ed2f44f11354 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 9 Mar 2021 13:47:36 +0800 Subject: [PATCH 092/195] Delete 1920-omr-network --- .../files/etc/uci-defaults/1920-omr-network | 297 ------------------ 1 file changed, 297 deletions(-) delete mode 100755 openmptcprouter/files/etc/uci-defaults/1920-omr-network diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network deleted file mode 100755 index 40ac946bf..000000000 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ /dev/null @@ -1,297 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -_setup_macaddr() { - uci -q get "network.$1.macaddr" >/dev/null && return - uci -q set "network.$1.macaddr=$2" -} - -_setup_macvlan() { - uci -q get "network.$1_dev.ifname" >/dev/null && return - - # do not create macvlan for vlan - local _ifname - _ifname=$(uci -q get "network.$1.ifname") - case "$_ifname" in - eth*.*) return ;; - esac - - uci -q batch <<-EOF - set network.$1_dev=device - set network.$1_dev.name=$1 - set network.$1_dev.type=macvlan - set network.$1_dev.ifname=$_ifname - set network.$1.ifname=$1 - set network.$1.type=macvlan - set network.$1.masterintf=$_ifname - set macvlan.$1=macvlan - set macvlan.$1.name=$1 - set macvlan.$1.ifname=$_ifname - EOF - _macaddr=$(uci -q get "network.$1.macaddr") - _setup_macaddr "$1_dev" "${_macaddr:-auto$(date +%s)}" -} - -_setup_macvlan_update() { - uci -q get "network.$1_dev.ifname" >/dev/null || return - - uci -q batch <<-EOF - set macvlan.$1=macvlan - set macvlan.$1.ifname=$_ifname - commit macvlan - EOF -} - -_setup_mptcp_handover_to_on() { - if [ "$(uci -q get network.$1.multipath)" = "handover" ]; then - uci -q set network.$1.multipath=on - fi - if [ "$(uci -q get openmptcprouter.$1.multipath)" = "handover" ]; then - uci -q set openmptcprouter.$1.multipath=on - fi -} - -_setup_multipath_off() { - uci -q get "network.$1.multipath" >/dev/null && return - uci -q set "network.$1.multipath=off" -} - -_setup_wan_interface() { - uci -q batch <<-EOF - set network.$1=interface - set network.$1.ifname=$2 - set network.$1.proto=static - set network.$1.ip4table=wan - set network.$1.multipath=$3 - set network.$1.defaultroute=0 - commit network - add_list firewall.@zone[1].network=$1 - commit firewall - EOF - [ -n "$4" ] && uci -q set network.$1.type=$4 -} - -config_load network -config_foreach _setup_macvlan_update interface -config_foreach _setup_mptcp_handover_to_on interface - -if [ "$(uci -q show network.lan | grep multipath)" != "" ]; then - exit 0 -fi - -lanif="eth0" -if [ "$(grep rockchip /etc/os-release)" != "" ]; then - lanif="eth1" -elif [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/wan -o -n "$(ip link | grep ' wan@')" -o -n "$(ip link | grep ' wan:')" ]; then - lanif="wan" -elif [ -d /sys/class/net/lan ] || [ -n "$(ip link | grep ' lan')" ]; then - lanif="lan" -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d '/sys/class/net/eth1.5' ]; then - lanif="eth1.5" - uci -q batch <<-EOF - set network.@switch_vlan[0]=switch_vlan - set network.@switch_vlan[0].device='switch0' - set network.@switch_vlan[0].vlan=1 - set network.@switch_vlan[0].vid=1 - set network.@switch_vlan[0].ports='3 5t' - add network switch_vlan - set network.@switch_vlan[1].device='switch0' - set network.@switch_vlan[1].vlan=2 - set network.@switch_vlan[1].vid=2 - set network.@switch_vlan[1].ports='2 5t' - add network switch_vlan - set network.@switch_vlan[2].device='switch0' - set network.@switch_vlan[2].vlan=3 - set network.@switch_vlan[2].vid=3 - set network.@switch_vlan[2].ports='1 5t' - add network switch_vlan - set network.@switch_vlan[3].device='switch0' - set network.@switch_vlan[3].vlan=4 - set network.@switch_vlan[3].vid=4 - set network.@switch_vlan[3].ports='0 5t' - add network switch_vlan - set network.@switch_vlan[4].device='switch0' - set network.@switch_vlan[4].vlan=5 - set network.@switch_vlan[4].vid=5 - set network.@switch_vlan[4].ports='4 6t' - EOF -elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ] && [ -d /sys/class/net/eth1 ]; then - lanif="eth1" -elif [ ! -d /sys/class/net/eth1 ] && [ -d /sys/class/net/eth0 ]; then - lanif="eth0" -fi -uci -q batch <<-EOF -delete network.lan.type -set network.lan=interface -set network.lan.proto=static -set network.lan.ipaddr=192.168.100.1 -set network.lan.netmask=255.255.255.0 -set network.lan.ifname=${lanif} -set network.lan.metric=2048 -set network.lan.ipv6=0 -set network.lan.delegate=0 -EOF - -uci -q batch <<-EOF -delete network.none -delete network.wan -delete network.if6rd -reorder network.loopback=0 -reorder network.globals=1 -reorder network.lan=2 -set network.globals.multipath=enable -EOF - -# Set the ip rule for the lan with a pref of 100 -uci -q show network.lan_rule >/dev/null || \ - uci -q batch <<-EOF - set network.lan_rule=rule - set network.lan_rule.lookup=lan - set network.lan_rule.priority=100 - EOF - -if [ "$(uci -q get network.vpn0.proto)" = "none" ]; then - uci -q delete network.vpn0 -fi - -config_load network -config_foreach _setup_multipath_off interface - -# Add the lan as a named routing table -if ! grep -s -q "lan" /etc/iproute2/rt_tables; then - echo "50 lan" >> /etc/iproute2/rt_tables -fi -uci -q set network.lan.ip4table='lan' - -#uci -q set "network.lan.ip6assign=64" - -# Create WAN interfaces -if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get network.wan1.multipath)" ]; then - if [ "$(grep rockchip /etc/os-release)" != "" ]; then - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - elif [ "$(swconfig list 2>&1 | grep switch0)" != "" ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - _setup_wan_interface wan3 eth0.3 on - _setup_wan_interface wan4 eth0.4 on - elif [ -d /sys/class/net/wan ] || [ -n "$(ip link | grep ' wan:')" ] || [ -n "$(ip link | grep ' wan@')" ]; then - if [ -d /sys/class/net/lan0 -o -n "$(ip link | grep ' lan0')" ] && [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ]; then - _setup_wan_interface wan1 lan0 master - _setup_wan_interface wan2 lan1 on - - _macaddr=$(uci -q get "network.lan0.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan2 ] || [ -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan3 lan2 on - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan4 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - elif [ -d /sys/class/net/lan1 -o -n "$(ip link | grep ' lan1')" ] && [ -d /sys/class/net/lan2 -o -n "$(ip link | grep ' lan2')" ]; then - _setup_wan_interface wan1 lan1 master - _setup_wan_interface wan2 lan2 on - - _macaddr=$(uci -q get "network.lan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.lan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan3 ] || [ -n "$(ip link | grep ' lan3')" ]; then - _setup_wan_interface wan3 lan3 on - _macaddr=$(uci -q get "network.lan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/lan4 ] || [ -n "$(ip link | grep ' lan4')" ]; then - _setup_wan_interface wan4 lan4 on - _macaddr=$(uci -q get "network.lan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan master macvlan - _setup_wan_interface wan2 wan on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/wan1 ] || [ -n "$(ip link | grep ' wan1')" ]; then - if [ -d /sys/class/net/wan2 ] || [ -n "$(ip link | grep ' wan2')" ]; then - _setup_wan_interface wan1 wan1 master - _setup_wan_interface wan2 wan2 on - - _macaddr=$(uci -q get "network.wan1.macaddr") - _setup_macaddr "wan1" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - _macaddr=$(uci -q get "network.wan2.macaddr") - _setup_macaddr "wan2" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - - if [ -d /sys/class/net/wan3 ] || [ -n "$(ip link | grep ' wan3')" ]; then - _setup_wan_interface wan3 wan3 on - _macaddr=$(uci -q get "network.wan3.macaddr") - _setup_macaddr "wan3" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - if [ -d /sys/class/net/wan4 ] || [ -n "$(ip link | grep ' wan4')" ]; then - _setup_wan_interface wan4 wan4 on - _macaddr=$(uci -q get "network.wan4.macaddr") - _setup_macaddr "wan4" "${_macaddr:-$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')}" - fi - fi - else - _setup_wan_interface wan1 wan1 master macvlan - _setup_wan_interface wan2 wan1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth1 ] || [ -n "$(ip link | grep ' eth1:')" ]; then - if [ -d /sys/class/net/eth2 ] || [ -n "$(ip link | grep ' eth2:')" ]; then - _setup_wan_interface wan1 eth1 master - _setup_wan_interface wan2 eth2 on - if [ -d /sys/class/net/eth3 ] || [ -n "$(ip link | grep ' eth3:')" ]; then - _setup_wan_interface wan3 eth3 on - fi - if [ -d /sys/class/net/eth4 ] || [ -n "$(ip link | grep ' eth4:')" ]; then - _setup_wan_interface wan4 eth4 on - fi - if [ -d /sys/class/net/eth5 ] || [ -n "$(ip link | grep ' eth5:')" ]; then - _setup_wan_interface wan5 eth5 on - fi - if [ -d /sys/class/net/eth6 ] || [ -n "$(ip link | grep ' eth6:')" ]; then - _setup_wan_interface wan6 eth6 on - fi - if [ -d /sys/class/net/eth7 ] || [ -n "$(ip link | grep ' eth7:')" ]; then - _setup_wan_interface wan7 eth7 on - fi - if [ -d /sys/class/net/eth8 ] || [ -n "$(ip link | grep ' eth8:')" ]; then - _setup_wan_interface wan8 eth8 on - fi - else - _setup_wan_interface wan1 eth1 master macvlan - _setup_wan_interface wan2 eth1 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - elif [ -d /sys/class/net/eth0.1 ] && [ -d /sys/class/net/eth0.2 ]; then - _setup_wan_interface wan1 eth0.1 master - _setup_wan_interface wan2 eth0.2 on - else - _setup_wan_interface wan1 eth0 master macvlan - _setup_wan_interface wan2 eth0 on macvlan - _setup_macvlan wan1 - _setup_macvlan wan2 - fi - #uci -q batch <<-EOF - #add network route6 - #set network.@route6[-1].interface='lan' - #set network.@route6[-1].target='::/0' - #EOF -fi -uci -q commit macvlan -uci -q commit network -rm -f /tmp/luci-indexcache -exit 0 From bbf41d33aed4ee20f571211e2bbd82c81c9f594e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 9 Mar 2021 10:15:15 +0100 Subject: [PATCH 093/195] Fix to allow many IPs on VPS --- .../luasrc/view/openmptcprouter/wizard.htm | 2 +- omr-tracker/files/bin/omr-tracker-gre | 2 +- .../files/etc/init.d/openmptcprouter-vps | 112 +++++++++--------- .../files/etc/uci-defaults/1920-omr-network | 4 + 4 files changed, 62 insertions(+), 58 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index f5f028568..23e9864f5 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -945,7 +945,7 @@ end end for _, ifacea in ipairs(net:get_networks()) do - if not (ifacea:name() == "loopback" or ifacea:name() == "lan" or ifacea:name() == "omr6in4" or ifacea:name() == "omrvpn" or ifacea:name():match("^omrip.*")) then + if not (ifacea:name() == "loopback" or ifacea:name() == "lan" or ifacea:name() == "omr6in4" or ifacea:name() == "omrvpn" or ifacea:name():match("^oip.*")) then %> <% diff --git a/omr-tracker/files/bin/omr-tracker-gre b/omr-tracker/files/bin/omr-tracker-gre index 89041bbc4..0d0e8ff27 100755 --- a/omr-tracker/files/bin/omr-tracker-gre +++ b/omr-tracker/files/bin/omr-tracker-gre @@ -25,7 +25,7 @@ _ping_tunnel() { config_get gateway $1 gateway config_get ifname $1 ifname config_get disabled $1 disabled - [ "$(echo $ifname | grep omrip)" != "" ] && [ -n "$gateway" ] && [ "$disabled" != "1" ] && { + [ "$(echo $ifname | grep oip)" != "" ] && [ -n "$gateway" ] && [ "$disabled" != "1" ] && { _ping_server $gateway } } diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index f5e2c977e..2e623ac34 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -489,34 +489,34 @@ _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}.ipaddr)" != "$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.oip${i}.ipaddr)" != "$peeraddr" ] || [ "$(uci -q get network.oip${i}.ipaddr)" != "$ipaddr" ] || [ "$(uci -q get network.oip${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" - set network.omrip${i}gre.proto=gre - set network.omrip${i}gre.nohostroute='1' - set network.omrip${i}gre.ipv6='0' - set network.omrip${i}gre.defaultroute='0' - set network.omrip${i}gre.multipath='off' - set network.omrip${i}gre.peerdns='0' - set network.omrip${i}gre.ttl='255' - set network.omrip${i}gre.ip4table='vpn' - set network.omrip${i}gre.peeraddr="$publicaddr" - set network.omrip${i}gre.ipaddr="$vpnip_local" - set network.omrip${i}=interface - set network.omrip${i}.label="Tunnel for $publicaddr" - set network.omrip${i}.proto=static - set network.omrip${i}.nohostroute='1' - set network.omrip${i}.ifname="@omrip${i}gre" - set network.omrip${i}.ipv6='0' - set network.omrip${i}.defaultroute='0' - set network.omrip${i}.multipath='off' - set network.omrip${i}.peerdns='0' - set network.omrip${i}.ip4table='vpn' - set network.omrip${i}.gateway="$ipaddr" - set network.omrip${i}.ipaddr="$peeraddr" - set network.omrip${i}.netmask="255.255.255.252" - set network.omrip${i}.lookup="667${i}" + set network.oip${i}gre=interface + set network.oip${i}gre.label="GRE tunnel for $publicaddr" + set network.oip${i}gre.proto=gre + set network.oip${i}gre.nohostroute='1' + set network.oip${i}gre.ipv6='0' + set network.oip${i}gre.defaultroute='0' + set network.oip${i}gre.multipath='off' + set network.oip${i}gre.peerdns='0' + set network.oip${i}gre.ttl='255' + set network.oip${i}gre.ip4table='vpn' + set network.oip${i}gre.peeraddr="$publicaddr" + set network.oip${i}gre.ipaddr="$vpnip_local" + set network.oip${i}=interface + set network.oip${i}.label="Tunnel for $publicaddr" + set network.oip${i}.proto=static + set network.oip${i}.nohostroute='1' + set network.oip${i}.ifname="@oip${i}gre" + set network.oip${i}.ipv6='0' + set network.oip${i}.defaultroute='0' + set network.oip${i}.multipath='off' + set network.oip${i}.peerdns='0' + set network.oip${i}.ip4table='vpn' + set network.oip${i}.gateway="$ipaddr" + set network.oip${i}.ipaddr="$peeraddr" + set network.oip${i}.netmask="255.255.255.252" + set network.oip${i}.lookup="667${i}" commit network EOF allintf=$(uci -q get firewall.zone_vpn.network) @@ -525,39 +525,39 @@ _get_gre_tunnel() { 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}" + add_list firewall.zone_vpn.network="oip${i}gre" + add_list firewall.zone_vpn.network="oip${i}" commit firewall EOF ssport="$(echo $tunnel | jsonfilter -q -e '@.shadowsocks_port')" uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.omrip${i}server=server - set shadowsocks-libev.omrip${i}server.label="Server with public IP $publicaddr" - set shadowsocks-libev.omrip${i}server.server_port="$ssport" - set shadowsocks-libev.omrip${i}server.disabled="1" - set shadowsocks-libev.omrip${i}server.server="$(uci -q get shadowsocks-libev.sss0.server)" - set shadowsocks-libev.omrip${i}server.method="$(uci -q get shadowsocks-libev.sss0.method)" - set shadowsocks-libev.omrip${i}server.key="$(uci -q get shadowsocks-libev.sss0.key)" - set shadowsocks-libev.omrip${i}=ss_redir - set shadowsocks-libev.omrip${i}.label="ss-redir for public IP $publicaddr" - set shadowsocks-libev.omrip${i}.server="omrip${i}server" - set shadowsocks-libev.omrip${i}.local_port="230$i" - set shadowsocks-libev.omrip${i}.local_address="$(uci -q get shadowsocks-libev.hi.local_address)" - set shadowsocks-libev.omrip${i}.mode='tcp_and_udp' - set shadowsocks-libev.omrip${i}.reuse_port='1' - set shadowsocks-libev.omrip${i}.mptcp='1' - set shadowsocks-libev.omrip${i}.ipv6_first='1' - set shadowsocks-libev.omrip${i}.timeout="$(uci -q get shadowsocks-libev.hi.timeout)" - set shadowsocks-libev.omrip${i}.fast_open="$(uci -q get shadowsocks-libev.hi.fast_open)" - set shadowsocks-libev.omrip${i}.no_delay="$(uci -q get shadowsocks-libev.hi.no_delay)" - set shadowsocks-libev.omrip${i}_rule=ss_rules - set shadowsocks-libev.omrip${i}_rule.label="Rules for public IP $publicaddr" - set shadowsocks-libev.omrip${i}_rule.server="omrip${i}server" - set shadowsocks-libev.omrip${i}_rule.disabled='1' - set shadowsocks-libev.omrip${i}_rule.src_default='bypass' - set shadowsocks-libev.omrip${i}_rule.dst_default='bypass' - set shadowsocks-libev.omrip${i}_rule.local_default='bypass' - set shadowsocks-libev.omrip${i}_rule.redir_tcp="omrip${i}" + set shadowsocks-libev.oip${i}server=server + set shadowsocks-libev.oip${i}server.label="Server with public IP $publicaddr" + set shadowsocks-libev.oip${i}server.server_port="$ssport" + set shadowsocks-libev.oip${i}server.disabled="1" + set shadowsocks-libev.oip${i}server.server="$(uci -q get shadowsocks-libev.sss0.server)" + set shadowsocks-libev.oip${i}server.method="$(uci -q get shadowsocks-libev.sss0.method)" + set shadowsocks-libev.oip${i}server.key="$(uci -q get shadowsocks-libev.sss0.key)" + set shadowsocks-libev.oip${i}=ss_redir + set shadowsocks-libev.oip${i}.label="ss-redir for public IP $publicaddr" + set shadowsocks-libev.oip${i}.server="oip${i}server" + set shadowsocks-libev.oip${i}.local_port="230$i" + set shadowsocks-libev.oip${i}.local_address="$(uci -q get shadowsocks-libev.hi.local_address)" + set shadowsocks-libev.oip${i}.mode='tcp_and_udp' + set shadowsocks-libev.oip${i}.reuse_port='1' + set shadowsocks-libev.oip${i}.mptcp='1' + set shadowsocks-libev.oip${i}.ipv6_first='1' + set shadowsocks-libev.oip${i}.timeout="$(uci -q get shadowsocks-libev.hi.timeout)" + set shadowsocks-libev.oip${i}.fast_open="$(uci -q get shadowsocks-libev.hi.fast_open)" + set shadowsocks-libev.oip${i}.no_delay="$(uci -q get shadowsocks-libev.hi.no_delay)" + set shadowsocks-libev.oip${i}_rule=ss_rules + set shadowsocks-libev.oip${i}_rule.label="Rules for public IP $publicaddr" + set shadowsocks-libev.oip${i}_rule.server="oip${i}server" + set shadowsocks-libev.oip${i}_rule.disabled='1' + set shadowsocks-libev.oip${i}_rule.src_default='bypass' + set shadowsocks-libev.oip${i}_rule.dst_default='bypass' + set shadowsocks-libev.oip${i}_rule.local_default='bypass' + set shadowsocks-libev.oip${i}_rule.redir_tcp="oip${i}" commit shadowsocks-libev EOF fi diff --git a/openmptcprouter/files/etc/uci-defaults/1920-omr-network b/openmptcprouter/files/etc/uci-defaults/1920-omr-network index 40ac946bf..4a4710df9 100755 --- a/openmptcprouter/files/etc/uci-defaults/1920-omr-network +++ b/openmptcprouter/files/etc/uci-defaults/1920-omr-network @@ -291,6 +291,10 @@ if [ "$(uci -q show network.wan1 | grep multipath)" = "" ] && [ -z "$(uci -q get #set network.@route6[-1].target='::/0' #EOF fi + +# Replace omrip to oip in config for old config +sed -i 's/omrip/oip/g' /etc/config/* + uci -q commit macvlan uci -q commit network rm -f /tmp/luci-indexcache From 988c803793ba9451cc2549bcf172b240671238f1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 10 Mar 2021 15:39:46 +0100 Subject: [PATCH 094/195] Update v2ray --- v2ray-core/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index 4b7cfb71a..be0c793de 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=4.34.0 +PKG_VERSION:=4.35.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/v$(PKG_VERSION) -PKG_HASH:=b250f569cb0369f394f63184e748f1df0c90500feb8a1bf2276257c4c8b81bee +PKG_HASH:=ef469a99c7db8596f8556478b478e2701ce2783af9affb7f3cb28201718e7d35 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE From ecc71672ae0ca68d9fe5ab6b9cbada97510f05c0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 10 Mar 2021 15:39:58 +0100 Subject: [PATCH 095/195] Update v2ray shadowsocks plugin --- shadowsocks-v2ray-plugin/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadowsocks-v2ray-plugin/Makefile b/shadowsocks-v2ray-plugin/Makefile index 47c86fc93..9c0e125fd 100644 --- a/shadowsocks-v2ray-plugin/Makefile +++ b/shadowsocks-v2ray-plugin/Makefile @@ -15,7 +15,7 @@ PKG_SOURCE_PROTO:=git #PKG_SOURCE_URL:=https://github.com/shadowsocks/v2ray-plugin.git PKG_SOURCE_URL:=https://github.com/teddysun/v2ray-plugin.git #PKG_SOURCE_VERSION:=63a74bef9e9f639bc199255db9d452d96f01d11a -PKG_SOURCE_VERSION:=8d3ee91a84691a0a6b1823eb15a89a303a5bc3cf +PKG_SOURCE_VERSION:=6c0c5fb15851e13b36fe2eeaaba97fd27c9d291b PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_PARALLEL:=1 From 60f681c66177b53599b606c7f870c87c9a1b0cf1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 10 Mar 2021 16:05:52 +0100 Subject: [PATCH 096/195] Fix glorytun-udp --- .../usr/share/omr/post-tracking.d/post-tracking | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 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 487e01ad5..f1f354957 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -951,30 +951,30 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ] && [ -n "$(resolveip -4 $serverip)" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 fi fi fi if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ] && [ -n "$(resolveip -6 $serverip)" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip dev ${gtudp_dev} port ${gtudp_port} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 fi fi fi From d1549c1186048a610cd5513de67c58ec9c25c64c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 10 Mar 2021 21:52:56 +0100 Subject: [PATCH 097/195] Fix v2ray --- v2ray-core/Makefile | 78 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index be0c793de..7fb4219d3 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -18,7 +18,7 @@ PKG_HASH:=ef469a99c7db8596f8556478b478e2701ce2783af9affb7f3cb28201718e7d35 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Xingwang Liao +PKG_MAINTAINER:=Yannick Chabanois PKG_CONFIG_DEPENDS := \ CONFIG_V2RAY_JSON_V2CTL \ @@ -55,7 +55,7 @@ PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_PARALLEL:=1 PKG_USE_MIPS16:=0 -GO_PKG:=v2ray.com/core +GO_PKG:=github.com/v2fly/v2ray-core/v4 GO_PKG_LDFLAGS:=-s -w include $(INCLUDE_DIR)/package.mk @@ -63,7 +63,7 @@ include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk define Package/v2ray-core TITLE:=A platform for building proxies - URL:=https://www.v2ray.com + URL:=https://www.v2fly.org SECTION:=net CATEGORY:=Network SUBMENU:=Project V @@ -85,132 +85,132 @@ V2RAY_SED_ARGS:= ifeq ($(CONFIG_V2RAY_JSON_INTERNAL),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/main\/json"/\/\/ &/; \ - /\/\/ _ "v2ray.com\/core\/main\/jsonem"/s/\/\/ //; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/main\/json"/\/\/ &/; \ + /\/\/ _ "github.com\/v2fly\/v2ray-core\/v4\/main\/jsonem"/s/\/\/ //; else ifeq ($(CONFIG_V2RAY_JSON_NONE),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/main\/json"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/main\/json"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_CUSTOM),y) ifeq ($(CONFIG_V2RAY_DISABLE_DNS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/dns"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/dns"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_LOG),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/log"/\/\/ &/; \ - s/_ "v2ray.com\/core\/app\/log\/command"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/log"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/log\/command"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_POLICY),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/policy"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/policy"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_REVERSE),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/reverse"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/reverse"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_ROUTING),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/router"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/router"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_STATISTICS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/app\/stats"/\/\/ &/; \ - s/_ "v2ray.com\/core\/app\/stats\/command"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/stats"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/app\/stats\/command"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_BLACKHOLE_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/blackhole"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/blackhole"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_DNS_PROXY),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/dns"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/dns"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_DOKODEMO_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/dokodemo"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/dokodemo"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_FREEDOM_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/freedom"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/freedom"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_MTPROTO_PROXY),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/mtproto"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/mtproto"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_HTTP_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/http"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/http"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_SHADOWSOCKS_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/shadowsocks"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/shadowsocks"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_SOCKS_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/socks"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/socks"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_VMESS_PROTO),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/proxy\/vmess\/inbound"/\/\/ &/; \ - s/_ "v2ray.com\/core\/proxy\/vmess\/outbound"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/vmess\/inbound"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/proxy\/vmess\/outbound"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_TCP_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/tcp"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/tcp"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_MKCP_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/kcp"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/kcp"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_WEBSOCKET_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/websocket"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/websocket"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_HTTP2_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/http"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/http"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/http"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/http"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_DOMAIN_SOCKET_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/domainsocket"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/domainsocket"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_QUIC_TRANS),y) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/quic"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/quic"/\/\/ &/; endif ifeq ($(CONFIG_V2RAY_DISABLE_MKCP_TRANS)$(CONFIG_V2RAY_DISABLE_QUIC_TRANS),yy) V2RAY_SED_ARGS += \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/noop"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/srtp"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/tls"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/utp"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/wechat"/\/\/ &/; \ - s/_ "v2ray.com\/core\/transport\/internet\/headers\/wireguard"/\/\/ &/; + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/noop"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/srtp"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/tls"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/utp"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/wechat"/\/\/ &/; \ + s/_ "github.com\/v2fly\/v2ray-core\/v4\/transport\/internet\/headers\/wireguard"/\/\/ &/; endif endif @@ -260,7 +260,7 @@ endif endef define Build/Compile - $(eval GO_PKG_BUILD_PKG:=v2ray.com/core/main) + $(eval GO_PKG_BUILD_PKG:=$(GO_PKG)/main) $(call GoPackage/Build/Compile) mv -f $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ray @@ -269,7 +269,7 @@ ifeq ($(CONFIG_V2RAY_COMPRESS_UPX),y) endif ifneq ($(CONFIG_V2RAY_EXCLUDE_V2CTL),y) - $(eval GO_PKG_BUILD_PKG:=v2ray.com/core/infra/control/main) + $(eval GO_PKG_BUILD_PKG:=$(GO_PKG)/infra/control/main) $(call GoPackage/Build/Compile) mv -f $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ctl From 90ee6ec7c8ce50760cc85eb6889b3ada0f35909c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 11 Mar 2021 16:54:46 +0100 Subject: [PATCH 098/195] Restart shadowsocks via omr-tracker-ss if should be up --- omr-tracker/files/bin/omr-tracker-ss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 58a17ed5b..e012e0878 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -95,10 +95,15 @@ while true; do _get_ip server_ping=false serverip="$(uci -q get shadowsocks-libev.${server}.server)" + disabled="$(uci -q get shadowsocks-libev.${server}.disabled)" _ping_server $serverip if [ "$server_ping" = false ]; then _log "Server $server ($serverip) seems down, no answer to ping" fi + if [ "$disabled" != "1" ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.${server}.key)" != "" ]; then + _log "Can't find shadowsocks, restart it..." + /etc/init.d/shadowsocks-libev restart + fi sleep $wait_test fi } From 16a293cd2ef6fa79e141515cbccdd1f8845ae271 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 11 Mar 2021 16:55:54 +0100 Subject: [PATCH 099/195] Remove wireguard config with mptcp over vpn disabled --- openmptcprouter/files/etc/init.d/mptcpovervpn | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn index 4f2825e47..d08fca7e5 100755 --- a/openmptcprouter/files/etc/init.d/mptcpovervpn +++ b/openmptcprouter/files/etc/init.d/mptcpovervpn @@ -24,6 +24,7 @@ mptcp_over_vpn() { delete openmptcprouter.${interface} delete network.ovpn${interface} delete network.wg${interface} + delete network.@wireguard_wg${interface}[0] delete openvpn.${interface} commit openvpn delete openmptcprouter.${interface} @@ -159,12 +160,13 @@ mptcp_over_vpn() { commit openmptcprouter EOF fi - elif [ "$(uci -q get openmptcprouter.ovpn${interface})" != "" ]; then + elif [ "$(uci -q get openmptcprouter.ovpn${interface})" != "" ] || [ "$(uci -q get network.wg${interface})" != "" ]; then logger -t "MPTCPoverVPN" "Disable MPTCP over VPN for ${interface}" multipath=$(uci -q get openmptcprouter.ovpn${interface}.multipath) [ -z "$multipath" ] && multipath="on" uci -q batch <<-EOF >/dev/null delete network.wg${interface} + delete network.@wireguard_wg${interface}[0] delete network.ovpn${interface} delete openvpn.${interface} commit openvpn @@ -185,9 +187,11 @@ mptcp_over_vpn() { if [ -n "$intf" ] && [ "$intf" != "$interface" ] && [ "$(uci -q get network.${intf})" = "" ]; then uci -q batch <<-EOF >/dev/null delete network.${interface} - delete openvpn.${intf} + delete network.@wireguard_${interface}[0] + delete openvpn.ovpn${intf} commit openvpn delete openmptcprouter.${intf} + delete openmptcprouter.ovpn${intf} delete openmptcprouter.${interface} commit openmptcprouter commit network From a5f2bce68974cace3ee1600a6f3c9ad30f13068a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 11 Mar 2021 16:56:20 +0100 Subject: [PATCH 100/195] Restart shadowsocks after setting encrypt method --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 2e623ac34..f218d2d81 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1709,6 +1709,7 @@ _config_service() { vps_aes="$(echo "$vps_config" | jsonfilter -q -e '@.vps.aes')" if [ "$vps_aes" != "false" ] && [ "$user_permission" != "ro" ]; then logger -t "OMR-VPS" "CPU support AES, set it by default" + method="$(uci -q get shadowsocks-libev.sss0.method)" uci -q batch <<-EOF >/dev/null set glorytun.vpn.chacha20="0" commit glorytun @@ -1717,6 +1718,7 @@ _config_service() { EOF config_foreach _set_ss_server server "method" "aes-256-gcm" uci -q commit shadowsocks-libev + [ "$method" != "aes-256-gcm" ] && /etc/init.d/shadowsocks-libev restart fi } fi From bd11ba134e8d9c5d5d875b23317b054f15277e0e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 11 Mar 2021 16:56:50 +0100 Subject: [PATCH 101/195] Change default omrvpn tracker settings --- openmptcprouter/files/etc/uci-defaults/1990-omr-tracker | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker index 1dabc7d57..00fbf4002 100755 --- a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker +++ b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker @@ -5,9 +5,9 @@ if [ "$(uci -q get omr-tracker.omrvpn)" = "" ]; then delete omr-tracker.glorytun set omr-tracker.omrvpn=interface set omr-tracker.omrvpn.type="none" - set omr-tracker.omrvpn.timeout=6 - set omr-tracker.omrvpn.tries=2 - set omr-tracker.omrvpn.interval=4 + set omr-tracker.omrvpn.timeout=10 + set omr-tracker.omrvpn.tries=3 + set omr-tracker.omrvpn.interval=5 set omr-tracker.omrvpn.mail_alert=0 set omr-tracker.omrvpn.enabled=1 commit omr-tracker From 7458f0b98b38adb2f94a1d175b66e74bff41bdce Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 12 Mar 2021 09:24:06 +0100 Subject: [PATCH 102/195] Fix server version display on dashboard --- .../htdocs/luci-static/resources/view/dashboard/css/custom.css | 1 - 1 file changed, 1 deletion(-) diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css index 821b19a81..f20713832 100644 --- a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/css/custom.css @@ -128,7 +128,6 @@ .Dashboard .settings-info p span:nth-child(2){ display: inline-block; word-break: break-all; - max-width: 150px; overflow: hidden; max-height: 16px; position: relative; From 950ac1a9ac80b489f79c7d96771171ea0025fb82 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 12 Mar 2021 15:06:36 +0100 Subject: [PATCH 103/195] Display server load average like router load average --- .../resources/view/dashboard/include/10_router.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js index 759818be1..b5892cff2 100644 --- a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js @@ -213,7 +213,10 @@ return baseclass.extend({ if (data.openmptcprouter.wan_addr) this.params.omrvps.internet.v4.addrsv4.value = data.openmptcprouter.wan_addr || [ '-']; if (data.openmptcprouter.wan_addr6) this.params.omrvps.internet.v6.addrsv6.value = data.openmptcprouter.wan_addr6 || [ '-']; if (data.openmptcprouter.vps_kernel) this.params.omrvps.vps.version.value = data.openmptcprouter.vps_kernel + ' ' + data.openmptcprouter.vps_omr_version || [ '-']; - if (data.openmptcprouter.vps_loadavg) this.params.omrvps.vps.load.value = data.openmptcprouter.vps_loadavg || [ '-']; + if (data.openmptcprouter.vps_loadavg) { + var vps_loadavg = data.openmptcprouter.vps_loadavg.split(" "); + this.params.omrvps.vps.load.value = '%s, %s, %s'.format(vps_loadavg[0],vps_loadavg[1],vps_loadavg[2]); + } if (data.openmptcprouter.vps_uptime) this.params.omrvps.vps.uptime.value = String.format('%t', data.openmptcprouter.vps_uptime) || [ '-']; if (data.openmptcprouter.proxy_traffic) this.params.omrvps.vps.trafficproxy.value = this.formatBytes(data.openmptcprouter.proxy_traffic) || [ '-']; if (data.openmptcprouter.vpn_traffic) this.params.omrvps.vps.trafficvpn.value = this.formatBytes(data.openmptcprouter.vpn_traffic) || [ '-']; From 3ec94e0a834fe2a493983e41be7b2415ce8ecda1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 12 Mar 2021 16:27:20 +0100 Subject: [PATCH 104/195] Anonymize config data in all settings tab --- .../luasrc/view/openmptcprouter/debug.htm | 2 +- .../root/bin/anonymous_config.sh | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100755 luci-app-openmptcprouter/root/bin/anonymous_config.sh diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm index 8a5f894c4..96db8aaa9 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm @@ -4,7 +4,7 @@

<%:All router settings%>

-
<%=luci.sys.exec("uci show")%>
+
<%=luci.sys.exec("sh /bin/anonymous_config.sh")%>
<%+footer%> diff --git a/luci-app-openmptcprouter/root/bin/anonymous_config.sh b/luci-app-openmptcprouter/root/bin/anonymous_config.sh new file mode 100755 index 000000000..80e67487c --- /dev/null +++ b/luci-app-openmptcprouter/root/bin/anonymous_config.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +uci show | \ + sed -e "/password=/s/......$/xxxxxx/" \ + -e "/detected_public_ipv4=/s/......$/xxxxxx/" \ + -e "/detected_ss_ipv4=/s/......$/xxxxxx/" \ + -e "/detected_public_ipv6=/s/......$/xxxxxx/" \ + -e "/detected_ss_ipv6=/s/......$/xxxxxx/" \ + -e "/publicip=/s/......$/xxxxxx/" \ + -e "/\.host=/s/......$/xxxxxx/" \ + -e "/\.ip=/s/......$/xxxxxx/" \ + -e "/\.ipv6=/s/......$/xxxxxx/" \ + -e "/user_id=/s/......$/xxxxxx/" \ + -e "/openvpn\.omr\.remote=/s/......$/xxxxxx/" \ + -e "/shadowsocks-libev\.sss.*\.server=/s/......$/xxxxxx/" \ + -e "/shadowsocks-libev\.sss.*\.key=/s/......$/xxxxxx/" \ + -e "/external_ip=/s/......$/xxxxxx/" \ + -e "/obfs_host=/s/......$/xxxxxx/" \ + -e "/vmess_address=/s/......$/xxxxxx/" \ + -e "/vless_address=/s/......$/xxxxxx/" \ + -e "/vpn\.key=/s/......$/xxxxxx/" \ + -e "/vps\.key=/s/......$/xxxxxx/" \ + -e "/token=/s/............$/xxxxxx/" \ No newline at end of file From 0fc5263eca2fd46d185c8e2ad8c3f45136d9ae20 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 12 Mar 2021 16:29:36 +0100 Subject: [PATCH 105/195] Update luci-app-openmptcprouter template for translation --- .../po/templates/openmptcprouter.pot | 466 ++++++++++-------- 1 file changed, 251 insertions(+), 215 deletions(-) diff --git a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot index 684de3447..058ee3ffb 100644 --- a/luci-app-openmptcprouter/po/templates/openmptcprouter.pot +++ b/luci-app-openmptcprouter/po/templates/openmptcprouter.pot @@ -1,34 +1,37 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 msgid "API username to retrieve personnalized settings from the server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "Add a new server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "" @@ -37,11 +40,11 @@ msgstr "" msgid "Advanced Settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -51,18 +54,18 @@ msgstr "" msgid "All router settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "" @@ -83,20 +86,24 @@ msgstr "" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 msgid "By default VPN is used for any traffic that is not TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 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:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "" @@ -120,19 +127,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 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:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "" @@ -140,12 +147,12 @@ msgstr "" msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 msgid "DHCPv6" msgstr "" @@ -157,22 +164,22 @@ msgstr "" msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "Default Proxy" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "" @@ -221,7 +228,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Disable server" msgstr "" @@ -237,13 +244,13 @@ msgstr "" msgid "Disable tracebox test" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "" @@ -252,11 +259,11 @@ msgid "Dynamic change" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "" @@ -272,17 +279,17 @@ msgstr "" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" @@ -290,30 +297,33 @@ msgstr "" msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 msgid "Force retrieve all keys from server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "Force retrieve settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +msgid "Gateway IPv6 DOWN" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "" @@ -353,40 +363,40 @@ msgstr "" msgid "IPv4 TCP SYN retries2" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "IPv6 address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 msgid "IPv6 gateway" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 msgid "IPv6 settings" msgstr "" @@ -398,40 +408,40 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 msgid "LAN interfaces settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "" @@ -449,12 +459,12 @@ msgstr "" msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "" @@ -466,16 +476,27 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +msgid "MPTCP over VPN settings" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "" @@ -491,15 +512,15 @@ msgstr "" msgid "Minimum scaling CPU frequency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "" @@ -507,43 +528,47 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +msgid "Network interface MAC address duplicated" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "" @@ -551,8 +576,8 @@ msgstr "" msgid "Networks settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "" @@ -560,8 +585,8 @@ msgstr "" msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "" @@ -569,7 +594,7 @@ msgstr "" msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -581,12 +606,12 @@ msgstr "" msgid "No change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "" @@ -603,11 +628,11 @@ msgstr "" msgid "No server defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "" @@ -633,17 +658,17 @@ msgstr "" msgid "On wizard change" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Only one server can be master, else all servers are set as backup." msgstr "" @@ -651,7 +676,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -659,8 +684,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "Other" msgstr "" @@ -668,50 +693,50 @@ msgstr "" msgid "Other settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "PAP/CHAP password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Physical interface" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 msgid "Primary server IP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "" @@ -719,7 +744,7 @@ msgstr "" msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "Proxy settings" msgstr "" @@ -727,7 +752,7 @@ msgstr "" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "" @@ -735,16 +760,20 @@ msgstr "" msgid "Redirects all ports from server to this router" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 msgid "Retrieve settings from server" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "" @@ -760,11 +789,11 @@ msgstr "" msgid "Scaling governor" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 msgid "Secondary server IP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "" @@ -772,67 +801,74 @@ msgstr "" msgid "Send backup" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 msgid "Server IP will be set for proxy and VPN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 msgid "Service Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Set an IP in the same network as the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 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:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 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:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -845,12 +881,12 @@ msgstr "" msgid "ShadowSocks is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "" @@ -858,8 +894,8 @@ msgstr "" msgid "Show all settings" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "" @@ -878,7 +914,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -901,20 +937,20 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "" @@ -931,7 +967,7 @@ msgstr "" msgid "Update server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "" @@ -940,8 +976,8 @@ msgstr "" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "" @@ -949,20 +985,20 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 msgid "V2Ray is used for TCP and UDP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 msgid "VLAN" msgstr "" @@ -970,7 +1006,7 @@ msgstr "" msgid "VPN is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "" @@ -986,9 +1022,9 @@ msgstr "" msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "" @@ -1002,7 +1038,7 @@ msgstr "" msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "" @@ -1011,33 +1047,33 @@ msgstr "" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "You must disable DHCP on your modems and set IP in different networks." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" @@ -1053,7 +1089,7 @@ msgstr "" msgid "address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "" @@ -1061,43 +1097,43 @@ msgstr "" msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 msgid "interface:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "ip address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 msgid "ipv6 address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "" @@ -1105,26 +1141,26 @@ msgstr "" msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "wan address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 msgid "wan ipv6 address:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "" From 5b39eb99bd152d27eac79de3cabe43615863a35e Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 8 Jan 2021 12:05:34 +0000 Subject: [PATCH 106/195] 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 | 641 ++++++++--------- .../po/fr/openmptcprouter.po | 643 +++++++++--------- .../po/it/openmptcprouter.po | 643 +++++++++--------- .../po/oc/openmptcprouter.po | 641 ++++++++--------- .../po/zh_Hans/openmptcprouter.po | 643 +++++++++--------- 5 files changed, 1676 insertions(+), 1535 deletions(-) diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index 608f807a4..705bad290 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -10,41 +10,41 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 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:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "Schlüssel 'Dead Simple VPN'" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 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:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -56,50 +56,50 @@ msgstr "" msgid "All router settings" msgstr "Alle Router-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 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:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "Authentifizierungs Methode" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "Backup" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "Backup der Router-Einstellungen auf den Server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 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:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 #, fuzzy #| msgid "By default VPN is used for any traffic that is not TCP." msgid "" @@ -108,222 +108,238 @@ msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +msgid "Can\\'t get public IP address from V2Ray" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 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:412 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "Allgemeine Servereinstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "Löschen" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "TCP-Fast-Open aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 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:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 #, fuzzy #| msgid "Disable gateway ping" msgid "Disable default gateway" msgstr "Gateway-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "Gateway-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "Gateway-Ping Statusüberprüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy +#| msgid "Disable external check" +msgid "Disable interfaces auto rename" +msgstr "Externe Prüfung aus" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 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:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy +#| msgid "Label for the interface" +msgid "Disable renaming interfaces" +msgstr "Bezeichnung der Schnittstelle" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" msgstr "Server-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "Server-Ping aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "Server-Ping Status-Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 #, fuzzy #| msgid "Disable external check" msgid "Disable tracebox test" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "Download-Geschwindigkeit (kBits/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "Dynamische Anpassung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "IPv6 aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "SQM aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "Shadowsocks-Verschleierung aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 #, fuzzy #| msgid "Disable TCP Fast Open" msgid "Enable TCP Low Latency" msgstr "TCP-Fast-Open aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "Aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "Verschlüsselung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 #, 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:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 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:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "Glorytun Schlüssel" @@ -331,462 +347,467 @@ msgstr "Glorytun Schlüssel" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "IPv4 TCP FIN Wartezeit" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast-Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP Verbindungs-Haltezeit" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "IPv4-Netzmaske" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "Bezeichnung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "Bezeichnung der Schnittstelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "Aktuellstes auf dem Server verfügbares Backup:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 #, fuzzy #| msgid "Last available backup on server:" msgid "Latest available version" msgstr "Aktuellstes auf dem Server verfügbares Backup:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 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:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "MPTCP über VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "Primäre Schnittstelle:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "Maximaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "Minimaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 msgid "More than one default VPN is enabled" 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:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "Netzwerk-Übersicht" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "Netzwerk-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 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:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "Keine Änderungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 #, fuzzy #| msgid "Common server settings" msgid "No server defined" msgstr "Allgemeine Servereinstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "Keine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "Verschleierungs-Modul" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "Verschleierungs-Typ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 msgid "Obfuscating will be enabled on both side" msgstr "Die Verschleierung wird auf beiden Seiten aktiviert." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "Bei Änderungen mittels des Assistenten" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Only one server can be master, else all servers are set as backup." msgstr "Nur eine Verbindung kann als 'primär' definiert werden." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 #, fuzzy msgid "Other" msgstr "Andere" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 #, fuzzy #| msgid "Server settings" msgid "Other settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "Protokoll" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "Weiterleitung aller Ports vom Server auf den Router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Parameter-Sicherung auf den Router wiederherstellen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 #, 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:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "Speichern und Anwenden" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "vnstat-Daten fortlaufend auf Datenträger schreiben" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "Speichern der vnstat-Daten" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "Methode der CPU-Taktung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "Schnittstelle auswählen für diese Verbindung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "Parameter-Sicherung vom Router auf den Server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 #, fuzzy #| msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgid "Server IP will be set for proxy and VPN" @@ -794,39 +815,40 @@ msgstr "" "Die Server-IP wird für die Protokolle ShadowSockes, Glorytun, OpenVPN und " "MLVPN verwendet." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "Server-Benutzername" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 #, fuzzy #| msgid "Server key" msgid "Service Type" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 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:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "IPv4 des Modems" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "Server als 'primär' definieren" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -838,7 +860,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:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -850,64 +872,64 @@ 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:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" "Wert von etwa 80-95% der Upstream-Bandbreite. Eingabe von '0' zur " "Abschaltung von SQM/QoS." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "Parametrierungs-Assistent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 #, fuzzy #| msgid "ShadowSocks settings" msgid "ShadowSocks is not running" msgstr "Einstellungen ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "SchadowSocks wird für TCP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "ShadowSocks Schlüssel" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "Alle Einstellungen anzeigen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "Status" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "System-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 " "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -915,149 +937,148 @@ 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:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 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:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "UBOND Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "Aktualisierung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" -msgstr "Aktualiserung des Servers" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#, fuzzy +#| msgid "Update remotly the server to latest version when needed." +msgid "Update remotly servers to latest version and reboot them." msgstr "automatische Aktualiserung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "Aktualisierung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "Upstream-Bandbreite (kBit/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 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 " "automatischen Wert." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 #, 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:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 #, fuzzy #| msgid "VPN settings" msgid "VPN is not running" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "Server-Einstellungen" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "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:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "Assistent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 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:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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." @@ -1065,109 +1086,115 @@ 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:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 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:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 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:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 #, fuzzy #| msgid "IPv4 address" msgid "address:" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 #, fuzzy #| msgid "Static address" msgid "ip address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "other" msgstr "andere" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 msgid "phone number:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 #, fuzzy #| msgid "Static address" msgid "wan address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "" +#~ msgid "Update VPS" +#~ msgstr "Aktualiserung des Servers" + +#~ msgid "VPS settings" +#~ msgstr "Server-Einstellungen" + #~ msgid "By default ShadowSocks is used for TCP traffic." #~ msgstr "TCP wird standardmäßig per ShadowSocks übertragen." diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index ed3454669..2d256818a 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -13,43 +13,43 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 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:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "Clef Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 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:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" msgstr "Ajouter un serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "Ajouter une interface" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -61,73 +61,79 @@ msgstr "" msgid "All router settings" msgstr "Tous les paramètres du routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 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:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "Type d'authentification" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "Sauvegarder" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "Sauvegarde sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "Équilibrage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "Bêta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 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:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "Passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 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:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 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:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "Impossible d\\'accéder et d\\'utiliser la partie serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "Impossible de contacter le script d\\'administration du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#, fuzzy +#| msgid "Can\\'t get public IP address from ShadowSocks" +msgid "Can\\'t get public IP address from V2Ray" +msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "Pas de réponse du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -135,186 +141,198 @@ 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:412 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "Choisissez l'interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "Paramètres des serveurs" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "Température du cœur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "Soucis DNS : impossible de résoudre le domaine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "Débugger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 msgid "Default Proxy" msgstr "Proxy par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "VPN par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "Supprimer" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "Appareil" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "Désactiver TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 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:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 msgid "Disable default gateway" msgstr "Désactiver la passerelle par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 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:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "Désactiver les tests externes" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "Désactiver le ping vers la passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "Désactiver le test ping de la passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy +#| msgid "Disable tracebox test" +msgid "Disable interfaces auto rename" +msgstr "Désactiver le test de tracebox" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "Désactiver le test multipath à l'aide de tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 msgid "" "Disable ports redirection defined in firewall from server to this router" 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:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy +#| msgid "Label for the interface" +msgid "Disable renaming interfaces" +msgstr "Étiquette pour l'interface" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 msgid "Disable server" msgstr "Désactiver le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "Désactiver le ping vers le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "Désactiver le test ping vers le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 msgid "Disable tracebox test" msgstr "Désactiver le test de tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "Désactiver" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "Vitesse de téléchargement (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "Changement dynamique" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "Activer IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "Active SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "Activer le brouillage pour ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 msgid "Enable TCP Low Latency" msgstr "Activer la faible latence TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "Activer les journaux de débogage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "Activer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "Chiffrement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 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 " "OpenVPN." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "Système de fichiers en lecture seule" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 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:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 msgid "Force retrieve settings" msgstr "Forcer la récupération des paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "seulement GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "La passerelle ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 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:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "Clef Glorytun" @@ -322,89 +340,89 @@ 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:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 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:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "TTL par défaut IPv4 IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "Délai d'expiration IPv4 TCP FIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "Temps de maintien TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "Tentatives TCP SYN IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN retries1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "Masque de sous-réseau IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "Préfixe IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "Route IPv6 reçue" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 msgid "IPv6 settings" msgstr "Paramètres IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "Le tunnel IPv6 ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -412,197 +430,197 @@ 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 msgid "LAN interfaces settings" msgstr "Paramètres des interfaces LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "Étiquette" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "Étiquette pour l'interface" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "Dernière sauvegarde disponible sur le serveur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 msgid "Latest available version" msgstr "Dernière version disponible" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "Charge :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 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:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "Mot de passe MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "MPTCP n'est pas activé sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 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:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "MPTCP sur VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "Master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "Sélection de l'interface maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "Fréquence maximale du processeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "Fréquence minimale du processeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "Modem par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "ModemManager" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 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:708 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "Multipath est actuellement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "Maître multipath déjà défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath semble bloquer sur la connexion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "AUCUN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "Interface réseau dupliquée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "Aperçu réseau" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "Paramètres réseaux" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "Aucune IP définie" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "Pas d'accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "Pas de réponse du serveur après 1 seconde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "Aucune adresse IP WAN détectée en moins d'une seconde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Aucune sauvegarde disponible sur le serveur." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "Pas de changement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "Pas de données" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "Aucune passerelle définie" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "Pas de sortie" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "Pas d'adresse IP du serveur, pas d'adresse IP WAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 msgid "No server defined" msgstr "Aucun serveur défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "Aucun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "Normal" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." @@ -610,191 +628,197 @@ 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:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "Plugin de brouillage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "Type de brouillage" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 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:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "En cas de changements dans l'assistant" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 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." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 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:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 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:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Other" msgstr "Autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 msgid "Other settings" msgstr "Autres paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP password" msgstr "Mot de passe PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "Identifiant PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "Code PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "PPPoE" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 msgid "Physical interface" msgstr "l'interface physique," -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "Préférer LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "Préférer l'UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "Protocole" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "Le proxy est DÉSACTIVÉ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "Proxy settings" msgstr "Paramètres du Proxy" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "Trafic proxy :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "QMI" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "Rediriger tous les ports du serveur vers ce routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Restauration de la sauvegarde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 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:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "Sauvegarder et Appliquer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "Sauvegarder les statistiques de vnstats sur le disque" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "Sauvegarder les statistiques de vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "Régulateur de mise à l'échelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "Sélectionnez le périphérique pour l'interface." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "Envoyer la sauvegarde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 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:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "Clef du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "Paramètres du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "Nom d'utilisateur sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Service Type" msgstr "Type du service" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 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:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "Configurer le serveur en tant que maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -802,7 +826,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:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -810,55 +834,55 @@ 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:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" "Réglez une valeur entre 80-95% de la vitesse d'envoi maximale. 0 pour " "désactiver SQM/QoS." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "Assistant de configuration" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks est utilisé pour le TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "Clef de ShadowSocks" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "Voir tous les paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "Adresse statique" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "État" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "Paramètres systèmes" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 " @@ -868,7 +892,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:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -876,7 +900,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:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -886,7 +910,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:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -894,131 +918,130 @@ msgstr "" "Cette valeur influence le délai d'expiration d'une connexion TCP active, " "lorsque les retransmissions RTO ne sont pas acquittées." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "Trafic total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "Type" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "Mot de passe UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "Mis à jour" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" -msgstr "Mis à jour du VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#, fuzzy +#| msgid "Update remotly the server to latest version when needed." +msgid "Update remotly servers to latest version and reboot them." msgstr "Met à jour le serveur à la dernière version quand c'est nécessaire." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "Mise à jour du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "Vitesse d'envoi (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "Durée de fonctionnement :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 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 " "défaut." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "V2Ray n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray est utilisé pour TCP et UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "Utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "ID utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "Le VPN n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "Paramètres du VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "Trafic VPN :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "Le VPN ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "Paramètres du VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "Version" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 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:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "Assistant" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "Vous" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 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:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 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:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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,105 +1050,111 @@ msgstr "" "Choisissez autre si vous utilisez un autre protocole dans la page Réseau " "Interfaces." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 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:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 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:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 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:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "Votre IP n'a pas été attribuée par ce routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 msgid "address:" msgstr "adresse :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "auto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "clef vide" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 msgid "ip address:" msgstr "adresse ip :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "latency:" msgstr "latence :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 msgid "multipath:" msgstr "multipath :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "operator:" msgstr "opérateur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 msgid "phone number:" msgstr "Numéro de téléphone :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 msgid "range:" msgstr "plage :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 msgid "state:" msgstr "État :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 msgid "traffic control:" msgstr "Contrôle du trafic :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 msgid "wan address:" msgstr "adresse WAN :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "whois :" +#~ msgid "Update VPS" +#~ msgstr "Mis à jour du VPS" + +#~ msgid "VPS settings" +#~ msgstr "Paramètres du VPS" + #~ msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" #~ msgstr "" #~ "L'IP du serveur sera configurée pour ShadowSocks, Glorytun, OpenVPN et " diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index 9cdcf0e42..b925d3f39 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -10,42 +10,42 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 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:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "Chiave Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 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:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "Aggiungi un'interfaccia" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 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:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." @@ -65,70 +65,76 @@ msgstr "" "Un set di istruzioni Advanced Encryption Standard (AES) è integrato nel " "processore." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "Backup" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "Backup su server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "Bilanciamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 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:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "Ponte" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 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:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 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:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "Impossibile accedere e utilizzare la parte server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "Impossibile contattare Server Admin Script" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#, fuzzy +#| msgid "Can\\'t get public IP address from ShadowSocks" +msgid "Can\\'t get public IP address from V2Ray" +msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "Impossibile eseguire il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -136,185 +142,197 @@ msgstr "" "Scegli MacVLAN se desideri creare un'interfaccia virtuale basata su " "un'interfaccia fisica." -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "Scegli l'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "Impostazioni comuni del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "Temp. Nucleo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "Problema DNS: impossibile risolvere il nome host" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "Debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 msgid "Default Proxy" msgstr "Proxy predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "Elimina" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "Dispositivo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "Disabilita TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 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:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 msgid "Disable default gateway" msgstr "Disabilita il gateway predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 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:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "Disabilita controllo esterno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "Disabilita il ping del gateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "Disabilitare il controllo dello stato del ping del gateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy +#| msgid "Disable tracebox test" +msgid "Disable interfaces auto rename" +msgstr "Disabilita il test Tracebox" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "Disabilita il test multipath usando tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "" "Disabilita il reindirizzamento delle porte definito nel firewall dal server " "a questo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy +#| msgid "Label for the interface" +msgid "Disable renaming interfaces" +msgstr "Etichetta per l'interfaccia" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 msgid "Disable server" msgstr "Disabilita il server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "Disabilita il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "Disabilitare il controllo dello stato del ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 msgid "Disable tracebox test" msgstr "Disabilita il test Tracebox" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "Disabilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "Velocità di download (Kb / s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "Cambiamento dinamico" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "Abilita IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "Abilita MQ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "Abilita l'offuscamento di ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 msgid "Enable TCP Low Latency" msgstr "Abilita TCP bassa latenza" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "Abilita registro di debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "Abilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "Crittografia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" "Il metodo di crittografia viene utilizzato per Shadowsocks, V2Ray, Glorytun " "e OpenVPN." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "Il filesystem è di sola lettura" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 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:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 msgid "Force retrieve settings" msgstr "Forza il recupero delle impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "Solo GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "Tipi di pagamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 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:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "Chiave Glorytun" @@ -322,91 +340,91 @@ 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:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 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:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "IPv4 IP predefinito TTL" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "Timeout FIN TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP Keepalive time" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "Riprova IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN retries1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "Netmask IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "Prefisso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "Instradamento IPv6 ricevuto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 msgid "IPv6 settings" msgstr "Impostazioni IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "Tunnel IPv6 GIÙ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "IPv6:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -414,197 +432,197 @@ 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 msgid "LAN interfaces settings" msgstr "Impostazioni delle interfacce LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "Etichetta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "Etichetta per l'interfaccia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "Ultimo backup disponibile sul server:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 msgid "Latest available version" msgstr "Ultima versione disponibile" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "Carico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 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:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "Password MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "MPTCP may not be enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "MPTCP su VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "Principale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "Selezione dell'interfaccia principale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "Frequenza CPU di ridimensionamento massima" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "Frequenza CPU con ridimensionamento minimo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "Impostazione predefinita del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "Timeout inizializzazione modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "ModemManager" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 msgid "More than one default VPN is enabled" msgstr "È abilitata più di una VPN predefinita" -#: 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:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "Lo stato corrente di Multipath è" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "Multipath master già definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath sembra essere bloccato sulla connessione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "NESSUNO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "Interfaccia di rete duplicata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "Panoramica della rete" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "Impostazioni reti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "Nessun IP definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "Nessun accesso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "Nessuna risposta al ping del server dopo 1 secondo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Nessun backup disponibile sul server." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "Nessun cambiamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "Nessun dato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "Nessun gateway definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "Nessun output" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "Nessun indirizzo IP del server, nessun indirizzo IP WAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 msgid "No server defined" msgstr "Nessun server definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "Nessuno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "Normale" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." @@ -612,190 +630,196 @@ 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:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "Plugin offuscante" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "Tipo di offuscamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 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:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "Al cambio della procedura guidata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 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 " "come backup." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 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:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 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:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Other" msgstr "Altro" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 msgid "Other settings" msgstr "Altre impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP password" msgstr "PAP/CHAP password" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "Nome utente PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "Codice PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "PPPoE" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 msgid "Physical interface" msgstr "Interfaccia fisica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "Preferisci LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "Preferisci UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "Protocollo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "Il proxy è DISABILITATO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "Proxy settings" msgstr "Impostazioni Proxy" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "Traffico proxy:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "QMI" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "Reindirizza tutte le porte dal server a questo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Ripristina backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 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:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "Salva e applica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "Salva le statistiche di vnstats su disco" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "Salva le statistiche di vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "Governatore in scala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "Invia backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 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:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "Chiave server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "Impostazioni server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "Nome utente del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Service Type" msgstr "Tipo di servizio" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 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:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "Imposta qui l'IP del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "Imposta server come master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -803,7 +827,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:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -815,55 +839,55 @@ 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:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" "Impostare un valore compreso tra l'80 e il 95% della velocità massima di " "caricamento del collegamento." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "Configurazione guidata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 msgid "ShadowSocks is not running" msgstr "ShadowSocks non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks viene utilizzato per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "Chiave ShadowSocks" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "Mostra tutte le impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "Indirizzo statico" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "Stato proprietà" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "Impostazioni di sistema" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 +897,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:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -881,7 +905,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:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -891,7 +915,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:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." @@ -899,104 +923,99 @@ msgstr "" "Questo valore influenza il timeout di una connessione TCP attiva, quando le " "ritrasmissioni RTO rimangono non riconosciute." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "Traffico globale:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "Tipo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "Password UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "Aggiorna" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" -msgstr "Aggiorna VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#, fuzzy +#| msgid "Update remotly the server to latest version when needed." +msgid "Update remotly servers to latest version and reboot them." msgstr "" "Aggiorna in remoto il server alla versione più recente quando necessario." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "Aggiorna server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "Velocità di caricamento (Kb / s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "Tempo di funzionamento:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 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." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "V2Ray non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray è utilizzato per TCP e UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "Utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "ID utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "VPN non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "Impostazioni VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "Traffico VPN:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "Tunnel VPN non stabilito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "Impostazioni VPN" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "Versione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 msgid "Wan IP and gateway are identical" msgstr "IP Wan e gateway sono identici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." @@ -1004,122 +1023,132 @@ 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:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "Wizard" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "Ti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 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:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 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:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 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:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 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:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 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:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "Il tuo IP non è stato affittato da questo router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 msgid "address:" msgstr "Indirizzo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "Auto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "chiave vuota" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 msgid "ip address:" msgstr "Indirizzo IP:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "latency:" msgstr "latenza:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "mtu:" msgstr "mtu:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 msgid "multipath:" msgstr "multipath:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "operator:" msgstr "operatore:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "other" msgstr "Altro" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 msgid "phone number:" msgstr "numero di telefono:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 msgid "range:" msgstr "intervallo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 msgid "state:" msgstr "stato:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 msgid "traffic control:" msgstr "controllo del traffico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 msgid "wan address:" msgstr "indirizzo wan:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "whois:" + +#~ msgid "Update VPS" +#~ msgstr "Aggiorna VPS" + +#~ msgid "VPS settings" +#~ msgstr "Impostazioni VPN" diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po index a84441840..453835bd9 100644 --- a/luci-app-openmptcprouter/po/oc/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po @@ -10,45 +10,45 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 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:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "Clau Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 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:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 #, fuzzy #| msgid "Add server" msgid "Add a new server" msgstr "Ajustar un servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -60,246 +60,262 @@ msgstr "" msgid "All router settings" msgstr "Totes los paramètres del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 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:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "Tipe d’autentificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "Salvagarda" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "Salvagarda sul servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "Equilibratge" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 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:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "Pont" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 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:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 #, 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:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "Accès e utilizacion impossible la part servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +msgid "Can\\'t get public IP address from V2Ray" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "Cap de responsa del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 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:412 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "Causissètz l’interfàcia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "Paramètres dels servidors" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "Temperatura del còr :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "Desbugatge" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "Suprimir" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "Periferic" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "Desactivar TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 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:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 #, 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:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 msgid "Disable default gateway, no internet if VPS are down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "Desactivar las pròvas extèrnas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "Desactivar lo ping cap a la palanca" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "Desactiva la pròva ping de la palanca" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy +#| msgid "Disable external check" +msgid "Disable interfaces auto rename" +msgstr "Desactivar las pròvas extèrnas" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 msgid "" "Disable ports redirection defined in firewall from server to this router" 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:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy +#| msgid "Label for the interface" +msgid "Disable renaming interfaces" +msgstr "Etiqueta per l’interfàcia" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" msgstr "Desactivar lo ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "Desactivar lo ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "Desactivar la pròva ping cap al servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 #, fuzzy #| msgid "Disable external check" msgid "Disable tracebox test" msgstr "Desactivar las pròvas extèrnas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "Desactivat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "Velocitat de telecargament (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "Cambiament dinamic" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "Activar l’IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "Active SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "Activar las interferéncias per ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 #, fuzzy #| msgid "Disable TCP Fast Open" msgid "Enable TCP Low Latency" msgstr "Desactivar TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "Activat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "Chiframent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "Metòde de chiframent utilizat per Glorytun." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Force retrieve all keys from server." @@ -307,27 +323,27 @@ msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "solament GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "La palanca respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 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:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "Clau Glorytun" @@ -335,93 +351,93 @@ msgstr "Clau Glorytun" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "TTL per defaut IPv4 IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "Relambi d’expiracion IPv4 TCP FIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "Temps de manten TCP IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries1" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 #, fuzzy #| msgid "IPv4 TCP SYN retries" msgid "IPv4 TCP SYN retries2" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "Masqueta ret IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "Prefix IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "Lo tunèl IPv6 respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -429,402 +445,408 @@ 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "Etiqueta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "Etiqueta per l’interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "Darrièra salvagarda disponibla sul servidor :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 msgid "Latest available version" msgstr "Darrièra salvagarda disponibla sul servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "Carga :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 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:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "MPTCP es pas activat sul servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "MPTCP over VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "Principal" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "Seleccion de l’interfàcia màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "Frequéncia maximala del processor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "Frequéncia minimala del processor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "Modem per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "ModemManager" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 msgid "More than one default VPN is enabled" 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:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "Multipath es actualament" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "CAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "Interfàcia ret doblada" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "Vista ret" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "Paramètres ret" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "Cap d’IP pas definida" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "Cap d’accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Cap de salvagarda pas disponibla sul servidor." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "Cap de modificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "Cap de donadas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "Cap de palanca pas definida" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "Cap de sortida" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 #, fuzzy #| msgid "Common server settings" msgid "No server defined" msgstr "Paramètres dels servidors" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "Cap" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "Normala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 msgid "" "Number of times initial SYNs for an active TCP connection attempt will be " "retransmitted." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "Modul d’interferéncia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "Tipe d’interferéncia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 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:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "En modificant dins l’assistent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 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 " "replegament." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Other" msgstr "Autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 #, fuzzy #| msgid "Server settings" msgid "Other settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "Identificant PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "Còdi PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "PPPoE" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "Preferir LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "Preferir UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "Protocòl" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "Lo servidor mandatari es DESACTIVAT" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "Trafic mandatari :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "QMI" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "Redigir totes los pòrts del servidor cap a aqueste router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Restaurar salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 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:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "Salvagardar e aplicar" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "Salvagardar las estatisticas de vnstats sul disc" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "Salvagardar las estatisticas de vnstats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "Regulator a l’escala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "Seleccionatz lo periferic per l’interfàcia." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "Enviar la salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 #, 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:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "Clau servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "Lo nom d'utilizaire servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Service Type" msgstr "Tipe de servici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 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:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "Botatz l’IP del modem aquí" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "Configurar lo servidor coma servidor màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -836,7 +858,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:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -848,64 +870,64 @@ 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:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" "Reglatz una valor entre 80-95% de la velocitat de mandadís maximala. 0 per " "desactivar SQM/QoS." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "Assistent de configuracion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 #, fuzzy #| msgid "ShadowSocks settings" msgid "ShadowSocks is not running" msgstr "Paramètres ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks es utilizat per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "Clau de ShadowSocks" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "Veire totes los paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "Adreça estatica" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "Estatut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "Paramètres sistèma" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 " "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -913,148 +935,147 @@ msgstr "" "Las instruccions AES son pas integradas al processor, deuriatz utilizar " "chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 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:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "Tradif total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "Tipe" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 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:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "Senhal UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "Mesa a jorn" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" -msgstr "Mesa a jorn del VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#, fuzzy +#| msgid "Update remotly the server to latest version when needed." +msgid "Update remotly servers to latest version and reboot them." msgstr "Met a jorn lo servidor amb la darrièra version quand cal." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "Mesa a jorn del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "Velocitat de mandadís (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 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 " "defaut." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 #, 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:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 #, fuzzy #| msgid "VPN settings" msgid "VPN is not running" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "Paramètres del VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 msgid "Wan IP and gateway are identical" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." 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:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "Assistent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 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:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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." @@ -1062,101 +1083,107 @@ 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:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 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:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 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:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 msgid "address:" msgstr "Adreça IPv4 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "auto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 msgid "ip address:" msgstr "Adreça IP :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 msgid "phone number:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 msgid "wan address:" msgstr "Adreça wan :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "" +#~ msgid "Update VPS" +#~ msgstr "Mesa a jorn del VPS" + +#~ msgid "VPS settings" +#~ msgstr "Paramètres del VPS" + #~ msgid "By default ShadowSocks is used for TCP traffic." #~ msgstr "Per defaut ShadowSocks es utilizat per totes lo trafic TCP." diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 29b08d3cb..b12de0118 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -13,41 +13,41 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 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:250 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "A Dead Simple VPN key" msgstr "简单VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 msgid "API username to retrieve personnalized settings from the server." msgstr "API用户名,以从蚂蚁聚合服务器检索个性化设置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:117 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" msgstr "添加一个新蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" msgstr "添加网卡" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:19 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:39 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:18 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 msgid "Advanced Settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 msgid "Advanced settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -57,250 +57,268 @@ msgstr "这里可用的所有VPN都可以通过MPTCP或使用自己的内部进 msgid "All router settings" msgstr "所有路由器设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:224 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "处理器中集成了高级加密标准(AES)指令集." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 msgid "Authentication Type" msgstr "认证类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:714 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:726 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 msgid "Backup" msgstr "备份" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 msgid "Backup on server" msgstr "备份到服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:310 msgid "Balancing" msgstr "均衡" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" msgstr "测试版" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:288 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 msgid "Big time difference between the server and the router" msgstr "服务器和路由器之间的时间差距很大" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:474 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 msgid "Bridge" msgstr "桥接" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "By default VPN is used for any traffic that is not TCP." msgstr "默认情况下,VPN用于非TCP的任何流量." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 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:681 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:252 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 msgid "Can\\'t access and use server part" msgstr "无法访问和使用蚂蚁聚合服务器部分服务" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 msgid "Can\\'t contact Server Admin Script" msgstr "无法联系蚂蚁聚合服务器管理脚本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "无法通过蚂蚁聚合服务器ShadowSocks获取公网IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#, fuzzy +#| msgid "Can\\'t get public IP address from ShadowSocks" +msgid "Can\\'t get public IP address from V2Ray" +msgstr "无法通过蚂蚁聚合服务器ShadowSocks获取公网IP地址" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 msgid "Can\\'t ping server" msgstr "无法ping蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 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:412 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:498 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 msgid "Choose physical interface." msgstr "选择物理接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:122 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 msgid "Common server settings" msgstr "通用蚂蚁聚合服务器设置聚合" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" msgstr "核心温度:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:364 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:183 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "DNS问题:无法解析主机名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:294 msgid "Debug" msgstr "调试模式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 msgid "Default Proxy" msgstr "默认代理" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:285 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "Default VPN" msgstr "默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:453 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 msgid "Delete" msgstr "删除" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 msgid "Device" msgstr "设备" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" msgstr "禁用TCP Fast Open" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:208 msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration" msgstr "在Linux和Shadowsocks配置上禁用TCP快速打开" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:264 msgid "Disable default gateway" msgstr "关闭默认网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:251 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:269 msgid "Disable default gateway, no internet if VPS are down" msgstr "禁用默认网关,如果VPS关闭,则没办法链接互联网" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:191 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" msgstr "禁用外部检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:238 msgid "Disable gateway ping" msgstr "禁用网关ping" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 msgid "Disable gateway ping status check" msgstr "禁用网关ping状态检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy +#| msgid "Disable tracebox test" +msgid "Disable interfaces auto rename" +msgstr "禁用跟蚂蚁跟踪测试" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" msgstr "禁止使用tracebox多路径测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:63 msgid "" "Disable ports redirection defined in firewall from server to this router" msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy +#| msgid "Label for the interface" +msgid "Disable renaming interfaces" +msgstr "接口标签" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 msgid "Disable server" msgstr "关闭禁用聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:274 msgid "Disable server ping" msgstr "禁用服务器ping" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 msgid "Disable server ping status check" msgstr "禁用服务器ping状态检查" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 msgid "Disable tracebox test" msgstr "禁用跟蚂蚁跟踪测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "Disabled" msgstr "关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:770 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 msgid "Download speed (Kb/s)" msgstr "下载速度 (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:290 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 msgid "Dynamic change" msgstr "动态变化" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:185 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Enable IPv6" msgstr "开启 IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:760 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 msgid "Enable SQM" msgstr "开启 SQM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:79 msgid "Enable ShadowSocks Obfuscating" msgstr "启用ShadowSocks混淆" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 msgid "Enable TCP Low Latency" msgstr "启用TCP低延迟" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 msgid "Enable debug logs" msgstr "启用调试日志" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:711 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:723 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 msgid "Enabled" msgstr "开启" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "Encryption" msgstr "加密" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" msgstr "文件系统处于只读状态/重新刷机吧" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:139 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Force retrieve all keys from server." msgstr "强制从服务器检索并应用所有密钥。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 msgid "Force retrieve settings" msgstr "强制检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 msgid "GPRS only" msgstr "仅GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:657 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 msgid "Gateway DOWN" msgstr "网关不通" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun TCP默认用于UDP和ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 msgid "Glorytun key" msgstr "Glorytun密钥" @@ -308,470 +326,476 @@ msgstr "Glorytun密钥" msgid "Grant UCI access for luci-app-openmptcprouter" msgstr "授予UCI访问luci-app-openmptcprouter的权限" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:128 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130 msgid "How often TCP sends out keepalive messages when keepalive is enabled." msgstr "启用keepalive时,TCP多久发送一次keepalive消息." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:181 msgid "IPv4 IP default TTL" msgstr "IPv4 IP默认TTL" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135 msgid "IPv4 TCP FIN timeout" msgstr "IPv4 TCP FIN超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:175 msgid "IPv4 TCP Fast Open" msgstr "IPv4 TCP快速打开" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:125 msgid "IPv4 TCP Keepalive time" msgstr "IPv4 TCP保持时间" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:143 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:145 msgid "IPv4 TCP SYN retries" msgstr "IPv4 TCP SYN重试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155 msgid "IPv4 TCP SYN retries1" msgstr "IPv4 TCP SYN重试1" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:165 msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN重试2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:550 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 msgid "IPv4 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 msgid "IPv4 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:426 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "IPv4 netmask" msgstr "IPv4网络掩码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 msgid "IPv6 Prefix" msgstr "IPv6前缀" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:536 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 msgid "IPv6 route received" msgstr "经过的IPv6路由" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 msgid "IPv6 settings" msgstr "IPv6设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:204 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" msgstr "IPv6隧道DOWN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:328 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:439 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 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: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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "Key is retrieved from server API by default." msgstr "默认情况下,密钥是从服务器API检索的." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 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:337 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:341 msgid "LAN interfaces settings" msgstr "局域网接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" msgstr "4G LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:348 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 msgid "Label" msgstr "标签" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:464 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 msgid "Label for the interface" msgstr "接口标签" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:22 msgid "Last available backup on server:" msgstr "服务器上的上次可用备份:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:119 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 msgid "Latest available version" msgstr "最新可用的版本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:125 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:311 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 msgid "Load:" msgstr "负载:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:264 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "MLVPN password" msgstr "MLVPN密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 msgid "MPTCP is not enabled on the server" msgstr "服务器上未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:322 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "MPTCP may not be enabled on the server" msgstr "服务器上可能未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "MPTCP over VPN" msgstr "通过MPTCP的VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 msgid "MacVLAN" msgstr "Macvlan" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:713 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:725 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 msgid "Master" msgstr "主" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:304 msgid "Master interface selection" msgstr "主网卡选择" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:308 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:326 msgid "Maximum scaling CPU frequency" msgstr "最大扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:302 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 msgid "Minimum scaling CPU frequency" msgstr "最小扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 msgid "Modem default" msgstr "调制解调器默认" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 msgid "Modem init timeout" msgstr "调制解调器初始化超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 msgid "ModemManager" msgstr "调制解调器管理器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:175 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:180 msgid "More than one default VPN is enabled" msgstr "启用了多个默认VPN" -#: 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:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 msgid "Multipath TCP" msgstr "多路径TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:680 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 msgid "Multipath current state is" msgstr "多路径当前状态为" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:514 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 msgid "Multipath master already defined" msgstr "已定义多路径主机" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 msgid "Multipath seems to be blocked on the connection" msgstr "多路径似乎在连接上被阻止" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:679 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 msgid "NONE" msgstr "无" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:531 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:692 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "Network interface duplicated" msgstr "网络接口重复" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:792 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 msgid "Network overview" msgstr "网络概览" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:120 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:122 msgid "Networks settings" msgstr "网络设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 msgid "No IP defined" msgstr "没有定义IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:207 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:212 msgid "No IPv6 access" msgstr "没有IPv6地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:664 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 msgid "No Server ping response after 1 second" msgstr "1秒后无服务器ping响应" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 msgid "No WAN IP address detected in less than 1 second" msgstr "不到1秒内未检测到WAN IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "服务器上没有可用的备份." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:291 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:309 msgid "No change" msgstr "没有改变" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No data" msgstr "没有数据" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 msgid "No gateway defined" msgstr "未定义网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:243 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 msgid "No output" msgstr "无网络输出" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 msgid "No server IP address, No WAN IP address" msgstr "没有服务器IP地址,没有WAN IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:261 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 msgid "No server defined" msgstr "未定义蚂蚁聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:213 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" msgstr "没有" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:472 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 msgid "Normal" msgstr "正常" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:150 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:87 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:89 msgid "Obfuscating plugin" msgstr "混淆插件" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108 msgid "Obfuscating type" msgstr "混淆类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:82 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:84 msgid "Obfuscating will be enabled on both side" msgstr "双方都将启用混淆" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:307 msgid "On wizard change" msgstr "通过向导更改" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "目前服务器如果有多个公网IP仅支持ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +msgid "" +"Only one interface must be set as \"Master\", this should be the most stable " +"interface." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Only one server can be master, else all servers are set as backup." msgstr "只能将一台服务器作为主服务器,否则将所有服务器都设置为备用服务器." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" msgstr "蚂蚁聚合路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN不能用于多VPS配置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 msgid "Optimize for latency instead of bandwidth" msgstr "优化延迟而不是带宽" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:365 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 msgid "Other" msgstr "其他" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 msgid "Other settings" msgstr "蚂蚁聚合其他设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:682 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:693 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 msgid "PAP/CHAP password" msgstr "PAP/CHAP 密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:687 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 msgid "PAP/CHAP username" msgstr "PAP/CHAP 账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:656 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 msgid "PIN code" msgstr "PIN码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 msgid "PPPoE" msgstr "PPPoE拨号" -#: 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 msgid "Physical interface" msgstr "物理接口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" msgstr "首选LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:667 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" msgstr "首选 UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 msgid "Protocol" msgstr "协议" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:194 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:199 msgid "Proxy is DISABLED" msgstr "代理已禁用" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 msgid "Proxy settings" msgstr "代理设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "Proxy traffic:" msgstr "代理流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 msgid "QMI" msgstr "QMI" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:52 msgid "Redirects all ports from server to this router" msgstr "将所有端口从服务器重定向到此路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "恢复备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:132 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Retrieve settings from server" msgstr "从服务器检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:334 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:828 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "Save & Apply" msgstr "保存并且应用设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:231 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:233 msgid "Save vnstats statistics on disk" msgstr "将vnstats统计信息保存在磁盘上" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:228 msgid "Save vnstats stats" msgstr "保存vnstats统计信息" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:314 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:332 msgid "Scaling governor" msgstr "超频" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:822 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 msgid "Select the device you want to base the interface on." msgstr "选择要作为基础的接口." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:33 msgid "Send backup" msgstr "发送备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:57 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:59 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 msgid "Server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 msgid "Server IP will be set for proxy and VPN" msgstr "将为代理和VPN设置服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:79 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 msgid "Server key" msgstr "服务器密钥" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:41 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" msgstr "蚂蚁聚合服务器设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 msgid "Server username" msgstr "服务器用户名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 msgid "Service Type" msgstr "服务类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Set an IP in the same network as the modem" msgstr "在与调制解调器相同的网络中设置IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Set here IP of the modem" msgstr "在此处设置调制解调器的IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 msgid "Set server as master" msgstr "将服务器设置为主服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:180 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -779,7 +803,7 @@ msgstr "" "设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代" "理." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:329 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -787,51 +811,51 @@ msgstr "" "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" "ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:780 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 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:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:804 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / QoS." -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:15 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" msgstr "蚂蚁聚合设置向导" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:192 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks用于TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "ShadowSocks key" msgstr "ShadowSocks密钥" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:23 msgid "Show all settings" msgstr "显示所有设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 msgid "Static address" msgstr "静态地址" -#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:17 +#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:16 msgid "Status" msgstr "状态" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:299 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:317 msgid "Systems settings" msgstr "系统设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:140 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 " @@ -840,13 +864,13 @@ msgstr "" "孤立的(不再被任何应用程序引用)连接在本地端中止之前将保持FIN_WAIT_2状态的时" "间。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." msgstr "CPU系统设置中没有集成高级加密标准(AES)指令集,您应该使用chacha20." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:160 msgid "" "This value influences the time, after which TCP decides, that something is " "wrong due to unacknowledged RTO retransmissions, and reports this suspicion " @@ -855,132 +879,131 @@ msgstr "" "此值会影响延时,在此时间之前,TCP决定由于未确认的RTO重传而出了问题,并将这种" "错误报告给网络层。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:170 msgid "" "This value influences the timeout of an alive TCP connection, when RTO " "retransmissions remain unacknowledged." msgstr "当未确认RTO重传时,此值会影响有效TCP连接的超时。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:343 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 msgid "Total traffic:" msgstr "总流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:469 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 msgid "Type" msgstr "类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 msgid "UBOND password" msgstr "UBOND密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:29 msgid "Update" msgstr "更新" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18 -msgid "Update VPS" -msgstr "更新VPS" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 -msgid "Update remotly the server to latest version when needed." +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#, fuzzy +#| msgid "Update remotly the server to latest version when needed." +msgid "Update remotly servers to latest version and reboot them." msgstr "在需要时,将服务器远程更新到最新版本." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 msgid "Update server" msgstr "更新服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:786 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "Upload speed (Kb/s)" msgstr "上传速度 (Kb/s)" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:136 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 msgid "Uptime:" msgstr "运行时间:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:165 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:170 msgid "V2Ray is not running" msgstr "V2Ray没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray用于TCP和UDP传输." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "V2Ray user" msgstr "V2Ray账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:197 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 msgid "V2Ray user id" msgstr "V2Ray账号ID" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "VPN没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 msgid "VPN settings" msgstr "VPN设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:338 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 msgid "VPN traffic:" msgstr "VPN流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:203 msgid "VPN tunnel DOWN" msgstr "VPN隧道关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:41 -msgid "VPS settings" -msgstr "VPS设定" - -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 msgid "Version" msgstr "版本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 msgid "Wan IP and gateway are identical" msgstr "WAN IP和网关相同" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:196 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198 msgid "" "When enable check are done on external sites to get each WAN IP and the IP " "used to go outside." msgstr "启用后,将在外部站点上进行检查,以获取每个WAN IP和用于外出的IP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:39 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 +msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" msgstr "蚂蚁聚合向导" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:75 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 msgid "You" msgstr "你" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:755 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 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:369 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:373 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "如果您有多个真实的以太网端口,则可以使用DHCP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 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,97 +1011,103 @@ msgstr "" "如果您有多个真实的以太网端口,则可以使用DHCP。 如果要使用“网络接口”页面中可用" "的其他协议,请选择“其他”." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 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:440 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 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:152 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:765 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 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 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:58 msgid "You shouldn't do that and you should redirect only needed ports" msgstr "错了亲,试试重定向端口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:78 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:83 msgid "Your IP was not leased by this router" msgstr "您访问的IP来源未通过此路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:144 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:149 msgid "address:" msgstr "地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 msgid "auto" msgstr "自动" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:156 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:161 msgid "empty key" msgstr "空键" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:439 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:630 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 msgid "ip address:" msgstr "IP地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 msgid "latency:" msgstr "时延:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:543 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:699 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 msgid "multipath:" msgstr "多路聚合:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 msgid "operator:" msgstr "运营商:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "other" msgstr "其他" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 msgid "phone number:" msgstr "电话号码:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:145 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:150 msgid "range:" msgstr "漫游:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 msgid "state:" msgstr "状态:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:546 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 msgid "traffic control:" msgstr "流量控制:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:443 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:634 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 msgid "wan address:" msgstr "互联网地址 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 msgid "whois:" msgstr "whois查询 :" +#~ msgid "Update VPS" +#~ msgstr "更新VPS" + +#~ msgid "VPS settings" +#~ msgstr "VPS设定" + #~ msgid "By default ShadowSocks is used for TCP traffic." #~ msgstr "默认情况下,ShadowSocks用于TCP通信." From ca62f8d18df0426db2c258c947ab978191988770 Mon Sep 17 00:00:00 2001 From: wysh Date: Fri, 22 Jan 2021 16:26:14 +0000 Subject: [PATCH 107/195] Translated using Weblate (Chinese (Simplified)) Currently translated at 95.4% (232 of 243 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- .../po/zh_Hans/openmptcprouter.po | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index b12de0118..e915e3dcd 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-16 04:25+0000\n" -"Last-Translator: antrouter \n" +"PO-Revision-Date: 2021-01-22 16:30+0000\n" +"Last-Translator: wysh \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -107,26 +107,30 @@ msgid "CHAP" msgstr "CHAP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#, fuzzy msgid "Can\\'t access and use server part" -msgstr "无法访问和使用蚂蚁聚合服务器部分服务" +msgstr "无法访问和使用聚合服务器部分服务" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#, fuzzy msgid "Can\\'t contact Server Admin Script" -msgstr "无法联系蚂蚁聚合服务器管理脚本" +msgstr "无法联系聚合服务器管理脚本" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#, fuzzy msgid "Can\\'t get public IP address from ShadowSocks" -msgstr "无法通过蚂蚁聚合服务器ShadowSocks获取公网IP地址" +msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 #, fuzzy #| msgid "Can\\'t get public IP address from ShadowSocks" msgid "Can\\'t get public IP address from V2Ray" -msgstr "无法通过蚂蚁聚合服务器ShadowSocks获取公网IP地址" +msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#, fuzzy msgid "Can\\'t ping server" -msgstr "无法ping蚂蚁聚合服务器" +msgstr "无法ping聚合服务器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 msgid "" @@ -141,8 +145,9 @@ msgid "Choose physical interface." msgstr "选择物理接口。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#, fuzzy msgid "Common server settings" -msgstr "通用蚂蚁聚合服务器设置聚合" +msgstr "通用聚合服务器设置聚合" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" From 788d0fe4908f53044f6e7b685576f6ba8c9ce9ea Mon Sep 17 00:00:00 2001 From: Anonymous Date: Fri, 22 Jan 2021 16:30:43 +0000 Subject: [PATCH 108/195] Translated using Weblate (Chinese (Simplified)) Currently translated at 98.3% (239 of 243 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 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index e915e3dcd..5ccd4473f 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: 2021-01-22 16:30+0000\n" -"Last-Translator: wysh \n" +"PO-Revision-Date: 2021-01-23 03:44+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -145,9 +145,8 @@ msgid "Choose physical interface." msgstr "选择物理接口。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 -#, fuzzy msgid "Common server settings" -msgstr "通用聚合服务器设置聚合" +msgstr "通用服务器设置聚合" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" From 64be2d6898fb561b19c50c0d0c681dd86ec82beb Mon Sep 17 00:00:00 2001 From: wysh Date: Fri, 22 Jan 2021 16:35:40 +0000 Subject: [PATCH 109/195] Translated using Weblate (Chinese (Simplified)) Currently translated at 98.3% (239 of 243 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- .../po/zh_Hans/openmptcprouter.po | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 5ccd4473f..5e8dbf796 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2021-01-23 03:44+0000\n" -"Last-Translator: Anonymous \n" +"Last-Translator: wysh \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -24,7 +24,7 @@ msgstr "简单VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 msgid "API username to retrieve personnalized settings from the server." -msgstr "API用户名,以从蚂蚁聚合服务器检索个性化设置." +msgstr "API用户名,以从聚合服务器检索个性化设置." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 msgid "APN" @@ -32,7 +32,7 @@ msgstr "APN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 msgid "Add a new server" -msgstr "添加一个新蚂蚁聚合服务器" +msgstr "添加一个新聚合服务器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 msgid "Add an interface" @@ -107,28 +107,22 @@ msgid "CHAP" msgstr "CHAP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 -#, fuzzy msgid "Can\\'t access and use server part" msgstr "无法访问和使用聚合服务器部分服务" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 -#, fuzzy msgid "Can\\'t contact Server Admin Script" msgstr "无法联系聚合服务器管理脚本" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 -#, fuzzy msgid "Can\\'t get public IP address from ShadowSocks" msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 -#, fuzzy -#| msgid "Can\\'t get public IP address from ShadowSocks" msgid "Can\\'t get public IP address from V2Ray" msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 -#, fuzzy msgid "Can\\'t ping server" msgstr "无法ping聚合服务器" @@ -213,10 +207,8 @@ msgid "Disable gateway ping status check" msgstr "禁用网关ping状态检查" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 -#, fuzzy -#| msgid "Disable tracebox test" msgid "Disable interfaces auto rename" -msgstr "禁用跟蚂蚁跟踪测试" +msgstr "禁用接口自动重命名" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:289 msgid "Disable multipath test using tracebox" @@ -247,7 +239,7 @@ msgstr "禁用服务器ping状态检查" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 msgid "Disable tracebox test" -msgstr "禁用跟蚂蚁跟踪测试" +msgstr "禁用跟踪框测试" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 @@ -422,7 +414,7 @@ msgstr "局域网接口设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 msgid "LTE" -msgstr "4G LTE" +msgstr "4G LTE制式" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 @@ -596,7 +588,7 @@ msgstr "没有服务器IP地址,没有WAN IP地址" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 msgid "No server defined" -msgstr "未定义蚂蚁聚合服务器" +msgstr "未定义聚合服务器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "None" @@ -644,7 +636,7 @@ msgstr "只能将一台服务器作为主服务器,否则将所有服务器都 #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" -msgstr "蚂蚁聚合路由器" +msgstr "聚合路由器" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 msgid "OpenVPN can't be used in multi VPS configuration." @@ -661,7 +653,7 @@ msgstr "其他" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:225 msgid "Other settings" -msgstr "蚂蚁聚合其他设置" +msgstr "聚合其他设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 msgid "PAP" @@ -695,11 +687,11 @@ msgstr "物理接口" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 msgid "Prefer LTE" -msgstr "首选LTE" +msgstr "首选4G LTE制式" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 msgid "Prefer UMTS" -msgstr "首选 UMTS" +msgstr "首选3G UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 @@ -776,7 +768,7 @@ msgstr "服务器密钥" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 msgid "Server settings" -msgstr "蚂蚁聚合服务器设定" +msgstr "聚合服务器设定" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70 @@ -827,7 +819,7 @@ msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / #: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14 msgid "Settings Wizard" -msgstr "蚂蚁聚合设置向导" +msgstr "聚合设置向导" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:158 msgid "ShadowSocks is not running" @@ -992,7 +984,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" -msgstr "蚂蚁聚合向导" +msgstr "聚合向导" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:80 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:85 From 0b2a5c45057ca8d7435ce23b92e6c3c423fafa32 Mon Sep 17 00:00:00 2001 From: antrouter Date: Wed, 27 Jan 2021 07:33:23 +0000 Subject: [PATCH 110/195] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (243 of 243 strings) Translation: OpenMPTCProuter/LuCI/applications/openmptcprouter Translate-URL: http://weblate.openmptcprouter.com/projects/omr/luciapplicationsopenmptcprouter/zh_Hans/ --- .../po/zh_Hans/openmptcprouter.po | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 5e8dbf796..d08b8af7d 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: 2021-01-23 03:44+0000\n" -"Last-Translator: wysh \n" +"PO-Revision-Date: 2021-01-27 13:47+0000\n" +"Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -220,10 +220,8 @@ msgid "" msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 -#, fuzzy -#| msgid "Label for the interface" msgid "Disable renaming interfaces" -msgstr "接口标签" +msgstr "禁用网卡重命名" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 msgid "Disable server" @@ -628,7 +626,7 @@ msgstr "目前服务器如果有多个公网IP仅支持ShadowSocks." msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." -msgstr "" +msgstr "必须仅将一个接口设置为“主”,这应该是最稳定的接口。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Only one server can be master, else all servers are set as backup." @@ -907,10 +905,8 @@ msgid "Update" msgstr "更新" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 -#, fuzzy -#| msgid "Update remotly the server to latest version when needed." msgid "Update remotly servers to latest version and reboot them." -msgstr "在需要时,将服务器远程更新到最新版本." +msgstr "远程将服务器更新到最新版本并重置它们。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:24 @@ -980,7 +976,7 @@ msgstr "启用后,将在外部站点上进行检查,以获取每个WAN IP和 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 msgid "When proxy shadowsocks is used, use it for UDP if proxy down" -msgstr "" +msgstr "当使用代理程序shadowsocks时,如果代理关闭则将其用于UDP协议" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 msgid "Wizard" From 6db49b733dc343a4f66362304fcc8cb6567a8fbd Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 10 Feb 2021 19:36:57 +0000 Subject: [PATCH 111/195] 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 | 505 +++++++++-------- .../po/fr/openmptcprouter.po | 510 +++++++++-------- .../po/it/openmptcprouter.po | 507 +++++++++-------- .../po/oc/openmptcprouter.po | 507 +++++++++-------- .../po/zh_Hans/openmptcprouter.po | 512 ++++++++++-------- 5 files changed, 1455 insertions(+), 1086 deletions(-) diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index 705bad290..d09b988b9 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -10,28 +10,34 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "A Dead Simple VPN key" msgstr "Schlüssel 'Dead Simple VPN'" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +msgid "" +"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " +"IPv6 are set" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 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:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 msgid "Add an interface" msgstr "Interface hinzufügen" @@ -40,11 +46,11 @@ msgstr "Interface hinzufügen" msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -56,19 +62,19 @@ msgstr "" msgid "All router settings" msgstr "Alle Router-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 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:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "Authentication Type" msgstr "Authentifizierungs Methode" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 msgid "Backup" msgstr "Backup" @@ -85,21 +91,21 @@ msgstr "" msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:307 msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 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:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 #, fuzzy #| msgid "By default VPN is used for any traffic that is not TCP." msgid "" @@ -108,43 +114,43 @@ msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t access and use server part" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:294 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 msgid "Can\\'t get public IP address from V2Ray" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:281 msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 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:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 msgid "Common server settings" msgstr "Allgemeine Servereinstellungen" @@ -152,11 +158,17 @@ msgstr "Allgemeine Servereinstellungen" msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 msgid "DHCP" msgstr "DHCP" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#, fuzzy +#| msgid "DHCP" +msgid "DHCPv6" +msgstr "DHCP" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "" @@ -165,24 +177,24 @@ msgstr "" msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 msgid "Default VPN" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 msgid "Delete" msgstr "Löschen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 msgid "Device" msgstr "" @@ -238,7 +250,7 @@ msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" msgid "Disable renaming interfaces" msgstr "Bezeichnung der Schnittstelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -258,12 +270,13 @@ msgstr "Server-Ping Status-Prüfung aus" msgid "Disable tracebox test" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Download speed (Kb/s)" msgstr "Download-Geschwindigkeit (kBits/s)" @@ -272,11 +285,11 @@ msgid "Dynamic change" msgstr "Dynamische Anpassung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "Enable IPv6" msgstr "IPv6 aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 msgid "Enable SQM" msgstr "SQM aktiv" @@ -294,16 +307,17 @@ msgstr "TCP-Fast-Open aus" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "Enabled" msgstr "Aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "Encryption" msgstr "Verschlüsselung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -313,33 +327,34 @@ msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 #, 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:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 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:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Glorytun key" msgstr "Glorytun Schlüssel" @@ -383,30 +398,44 @@ msgstr "IPv4 TCP SYN Wiederholversuche" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 msgid "IPv4 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 msgid "IPv4 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 msgid "IPv4 netmask" msgstr "IPv4-Netzmaske" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#, fuzzy +#| msgid "IPv4 address" +msgid "IPv6 address" +msgstr "IPv4-Adresse" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#, fuzzy +#| msgid "IPv4 gateway" +msgid "IPv6 gateway" +msgstr "IPv4-Standardgateway" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -416,47 +445,47 @@ msgstr "VPN-Einstellungen" msgid "IPv6 tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:347 msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 msgid "Interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 msgid "Label" msgstr "Bezeichnung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 msgid "Label for the interface" msgstr "Bezeichnung der Schnittstelle" @@ -465,46 +494,46 @@ msgid "Last available backup on server:" msgstr "Aktuellstes auf dem Server verfügbares Backup:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:324 #, fuzzy #| msgid "Last available backup on server:" msgid "Latest available version" msgstr "Aktuellstes auf dem Server verfügbares Backup:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "MLVPN password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:303 msgid "MPTCP is not enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "MPTCP over VPN" msgstr "MPTCP über VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 msgid "Master" msgstr "" @@ -520,15 +549,15 @@ msgstr "Maximaler CPU-Takt" msgid "Minimum scaling CPU frequency" msgstr "Minimaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "ModemManager" msgstr "" @@ -536,43 +565,43 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 msgid "Network overview" msgstr "Netzwerk-Übersicht" @@ -580,8 +609,8 @@ msgstr "Netzwerk-Übersicht" msgid "Networks settings" msgstr "Netzwerk-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No IP defined" msgstr "" @@ -589,15 +618,19 @@ msgstr "" msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "No WAN IP address detected in less than 1 second" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +msgid "No WAN with multipath enabled:" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Keine Konfigurations-Sicherung des Routers auf dem Server verfügbar." @@ -606,35 +639,35 @@ msgstr "Keine Konfigurations-Sicherung des Routers auf dem Server verfügbar." msgid "No change" msgstr "Keine Änderungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "No gateway defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:260 msgid "No output" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:264 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:277 #, fuzzy #| msgid "Common server settings" msgid "No server defined" msgstr "Allgemeine Servereinstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 msgid "None" msgstr "Keine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 msgid "Normal" msgstr "" @@ -660,17 +693,17 @@ 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:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 msgid "Only one server can be master, else all servers are set as backup." msgstr "Nur eine Verbindung kann als 'primär' definiert werden." @@ -678,7 +711,7 @@ msgstr "Nur eine Verbindung kann als 'primär' definiert werden." msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -686,8 +719,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 #, fuzzy msgid "Other" msgstr "Andere" @@ -698,50 +731,56 @@ msgstr "Andere" msgid "Other settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#, fuzzy +#| msgid "Server IP" +msgid "Primary server IP" +msgstr "Server IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 msgid "Protocol" msgstr "Protokoll" @@ -749,17 +788,17 @@ msgstr "Protokoll" msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:352 msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 msgid "QMI" msgstr "" @@ -771,14 +810,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:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 #, 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:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Save & Apply" msgstr "Speichern und Anwenden" @@ -794,7 +833,13 @@ msgstr "Speichern der vnstat-Daten" msgid "Scaling governor" msgstr "Methode der CPU-Taktung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#, fuzzy +#| msgid "Server IP" +msgid "Secondary server IP" +msgstr "Server IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 msgid "Select the device you want to base the interface on." msgstr "Schnittstelle auswählen für diese Verbindung" @@ -802,12 +847,11 @@ 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:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 #, fuzzy #| msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgid "Server IP will be set for proxy and VPN" @@ -815,40 +859,44 @@ msgstr "" "Die Server-IP wird für die Protokolle ShadowSockes, Glorytun, OpenVPN und " "MLVPN verwendet." -#: 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:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 msgid "Server key" msgstr "Server-Schlüssel" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 msgid "Server settings" msgstr "Server-Einstellungen" -#: 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 msgid "Server username" msgstr "Server-Benutzername" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 #, fuzzy #| msgid "Server key" msgid "Service Type" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 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:575 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "Set here IP of the modem" msgstr "IPv4 des Modems" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Set server as master" msgstr "Server als 'primär' definieren" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -860,7 +908,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:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -872,14 +920,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:788 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 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:804 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:882 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -896,12 +944,12 @@ msgstr "Parametrierungs-Assistent" msgid "ShadowSocks is not running" msgstr "Einstellungen ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "ShadowSocks is used for TCP." msgstr "SchadowSocks wird für TCP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "ShadowSocks key" msgstr "ShadowSocks Schlüssel" @@ -909,8 +957,8 @@ msgstr "ShadowSocks Schlüssel" msgid "Show all settings" msgstr "Alle Einstellungen anzeigen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 msgid "Static address" msgstr "Statische Adresse" @@ -929,7 +977,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -950,26 +998,26 @@ msgid "" "retransmissions remain unacknowledged." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:362 msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "UBOND password" msgstr "UBOND Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 msgid "UMTS/GPRS" msgstr "" @@ -988,17 +1036,17 @@ msgstr "automatische Aktualiserung des Servers" msgid "Update server" msgstr "Aktualisierung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 msgid "Upload speed (Kb/s)" msgstr "Upstream-Bandbreite (kBit/s)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 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 " @@ -1008,31 +1056,36 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 #, 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 msgid "V2Ray user id" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +msgid "VLAN" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 #, fuzzy #| msgid "VPN settings" msgid "VPN is not running" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "VPN settings" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:357 msgid "VPN traffic:" msgstr "" @@ -1040,12 +1093,13 @@ msgstr "" msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 msgid "Wan IP and gateway are identical" msgstr "" @@ -1056,10 +1110,10 @@ msgid "" msgstr "Externe Prüfung der IP-Adressen der WAN-Adapter und der Server-IP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 msgid "Wizard" msgstr "Assistent" @@ -1068,17 +1122,17 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 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:373 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 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." @@ -1086,23 +1140,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:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 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:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 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:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 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 " @@ -1122,7 +1176,7 @@ msgstr "" msgid "address:" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 msgid "auto" msgstr "" @@ -1130,37 +1184,49 @@ msgstr "" msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#, fuzzy +#| msgid "Add an interface" +msgid "interface:" +msgstr "Interface hinzufügen" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 #, fuzzy #| msgid "Static address" msgid "ip address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#, fuzzy +#| msgid "Static address" +msgid "ipv6 address:" +msgstr "Statische Adresse" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "other" msgstr "andere" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 msgid "phone number:" msgstr "" @@ -1168,24 +1234,31 @@ msgstr "" msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 #, fuzzy #| msgid "Static address" msgid "wan address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#, fuzzy +#| msgid "Static address" +msgid "wan ipv6 address:" +msgstr "Statische Adresse" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 msgid "whois:" msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 2d256818a..1e5d91c74 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -13,30 +13,36 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "A Dead Simple VPN key" msgstr "Clef Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +msgid "" +"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " +"IPv6 are set" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 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:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Add a new server" msgstr "Ajouter un serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 msgid "Add an interface" msgstr "Ajouter une interface" @@ -45,11 +51,11 @@ msgstr "Ajouter une interface" msgid "Advanced Settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Advanced settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -61,18 +67,18 @@ msgstr "" msgid "All router settings" msgstr "Tous les paramètres du routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 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:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "Authentication Type" msgstr "Type d'authentification" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 msgid "Backup" msgstr "Sauvegarder" @@ -89,51 +95,51 @@ msgstr "Équilibrage" msgid "Beta" msgstr "Bêta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:307 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:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 msgid "Bridge" msgstr "Passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 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:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 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:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t access and use server part" msgstr "Impossible d\\'accéder et d\\'utiliser la partie serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:294 msgid "Can\\'t contact Server Admin Script" msgstr "Impossible de contacter le script d\\'administration du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 #, fuzzy #| msgid "Can\\'t get public IP address from ShadowSocks" msgid "Can\\'t get public IP address from V2Ray" msgstr "Pas d'adresse IP publique récupérée via ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:281 msgid "Can\\'t ping server" msgstr "Pas de réponse du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -141,13 +147,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:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 msgid "Choose physical interface." msgstr "Choisissez l'interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 msgid "Common server settings" msgstr "Paramètres des serveurs" @@ -155,11 +161,17 @@ msgstr "Paramètres des serveurs" msgid "Core temp:" msgstr "Température du cœur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 msgid "DHCP" msgstr "DHCP" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#, fuzzy +#| msgid "DHCP" +msgid "DHCPv6" +msgstr "DHCP" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "Soucis DNS : impossible de résoudre le domaine" @@ -168,22 +180,22 @@ msgstr "Soucis DNS : impossible de résoudre le domaine" msgid "Debug" msgstr "Débugger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "Default Proxy" msgstr "Proxy par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 msgid "Default VPN" msgstr "VPN par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 msgid "Delete" msgstr "Supprimer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 msgid "Device" msgstr "Appareil" @@ -241,7 +253,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Étiquette pour l'interface" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 msgid "Disable server" msgstr "Désactiver le serveur" @@ -257,12 +269,13 @@ 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:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 msgid "Disabled" msgstr "Désactiver" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Download speed (Kb/s)" msgstr "Vitesse de téléchargement (Kb/s)" @@ -271,11 +284,11 @@ msgid "Dynamic change" msgstr "Changement dynamique" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "Enable IPv6" msgstr "Activer IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 msgid "Enable SQM" msgstr "Active SQM" @@ -291,16 +304,17 @@ 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:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "Enabled" msgstr "Activer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "Encryption" msgstr "Chiffrement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 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 " @@ -310,29 +324,30 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Système de fichiers en lecture seule" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 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:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Force retrieve settings" msgstr "Forcer la récupération des paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 msgid "GPRS only" msgstr "seulement GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 msgid "Gateway DOWN" msgstr "La passerelle ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 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:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Glorytun key" msgstr "Clef Glorytun" @@ -374,30 +389,44 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 msgid "IPv4 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 msgid "IPv4 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 msgid "IPv4 netmask" msgstr "Masque de sous-réseau IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 msgid "IPv6 Prefix" msgstr "Préfixe IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#, fuzzy +#| msgid "IPv4 address" +msgid "IPv6 address" +msgstr "Adresse IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#, fuzzy +#| msgid "IPv4 gateway" +msgid "IPv6 gateway" +msgstr "Passerelle IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 msgid "IPv6 route received" msgstr "Route IPv6 reçue" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 msgid "IPv6 settings" msgstr "Paramètres IPv6" @@ -405,24 +434,24 @@ msgstr "Paramètres IPv6" msgid "IPv6 tunnel DOWN" msgstr "Le tunnel IPv6 ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:347 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 msgid "Interfaces settings" msgstr "Paramètres des interfaces" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -430,21 +459,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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 msgid "LAN interfaces settings" msgstr "Paramètres des interfaces LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 msgid "Label" msgstr "Étiquette" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 msgid "Label for the interface" msgstr "Étiquette pour l'interface" @@ -453,42 +482,42 @@ msgid "Last available backup on server:" msgstr "Dernière sauvegarde disponible sur le serveur :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:324 msgid "Latest available version" msgstr "Dernière version disponible" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "Load:" msgstr "Charge :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "MLVPN password" msgstr "Mot de passe MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:303 msgid "MPTCP is not enabled on the server" msgstr "MPTCP n'est pas activé sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 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:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "MPTCP over VPN" msgstr "MPTCP sur VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 msgid "Master" msgstr "Master" @@ -504,15 +533,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:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 msgid "Modem default" msgstr "Modem par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "ModemManager" msgstr "ModemManager" @@ -520,43 +549,43 @@ 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:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 msgid "Multipath current state is" msgstr "Multipath est actuellement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 msgid "Multipath master already defined" msgstr "Maître multipath déjà défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath semble bloquer sur la connexion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 msgid "NONE" msgstr "AUCUN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 msgid "Network interface duplicated" msgstr "Interface réseau dupliquée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 msgid "Network overview" msgstr "Aperçu réseau" @@ -564,8 +593,8 @@ msgstr "Aperçu réseau" msgid "Networks settings" msgstr "Paramètres réseaux" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No IP defined" msgstr "Aucune IP définie" @@ -573,15 +602,19 @@ msgstr "Aucune IP définie" msgid "No IPv6 access" msgstr "Pas d'accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 msgid "No Server ping response after 1 second" msgstr "Pas de réponse du serveur après 1 seconde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "No WAN IP address detected in less than 1 second" msgstr "Aucune adresse IP WAN détectée en moins d'une seconde" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +msgid "No WAN with multipath enabled:" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Aucune sauvegarde disponible sur le serveur." @@ -590,33 +623,33 @@ msgstr "Aucune sauvegarde disponible sur le serveur." msgid "No change" msgstr "Pas de changement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "No data" msgstr "Pas de données" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "No gateway defined" msgstr "Aucune passerelle définie" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:260 msgid "No output" msgstr "Pas de sortie" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:264 msgid "No server IP address, No WAN IP address" msgstr "Pas d'adresse IP du serveur, pas d'adresse IP WAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:277 msgid "No server defined" msgstr "Aucun serveur défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 msgid "None" msgstr "Aucun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 msgid "Normal" msgstr "Normal" @@ -644,19 +677,19 @@ 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:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 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:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 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." @@ -665,7 +698,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN ne peut pas être utilisé dans une configuration multi VPS." @@ -673,8 +706,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:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 msgid "Other" msgstr "Autre" @@ -682,46 +715,52 @@ msgstr "Autre" msgid "Other settings" msgstr "Autres paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "PAP/CHAP password" msgstr "Mot de passe PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 msgid "PAP/CHAP username" msgstr "Identifiant PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 msgid "PIN code" msgstr "Code PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 msgid "Physical interface" msgstr "l'interface physique," -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 msgid "Prefer LTE" msgstr "Préférer LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 msgid "Prefer UMTS" msgstr "Préférer l'UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#, fuzzy +#| msgid "Server IP" +msgid "Primary server IP" +msgstr "IP du serveur" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 msgid "Protocol" msgstr "Protocole" @@ -729,15 +768,15 @@ msgstr "Protocole" msgid "Proxy is DISABLED" msgstr "Le proxy est DÉSACTIVÉ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 msgid "Proxy settings" msgstr "Paramètres du Proxy" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:352 msgid "Proxy traffic:" msgstr "Trafic proxy :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 msgid "QMI" msgstr "QMI" @@ -749,12 +788,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:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Retrieve settings from server" msgstr "Récupérer les paramètres du serveur" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Save & Apply" msgstr "Sauvegarder et Appliquer" @@ -770,7 +809,13 @@ msgstr "Sauvegarder les statistiques de vnstats" msgid "Scaling governor" msgstr "Régulateur de mise à l'échelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#, fuzzy +#| msgid "Server IP" +msgid "Secondary server IP" +msgstr "IP du serveur" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 msgid "Select the device you want to base the interface on." msgstr "Sélectionnez le périphérique pour l'interface." @@ -778,47 +823,50 @@ 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:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 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:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 msgid "Server key" msgstr "Clef du serveur" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 msgid "Server settings" msgstr "Paramètres du serveur" -#: 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 msgid "Server username" msgstr "Nom d'utilisateur sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 msgid "Service Type" msgstr "Type du service" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 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:575 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Set server as master" msgstr "Configurer le serveur en tant que maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -826,7 +874,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:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -834,14 +882,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:788 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 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:804 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:882 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -856,12 +904,12 @@ msgstr "Assistant de configuration" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks est utilisé pour le TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "ShadowSocks key" msgstr "Clef de ShadowSocks" @@ -869,8 +917,8 @@ msgstr "Clef de ShadowSocks" msgid "Show all settings" msgstr "Voir tous les paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 msgid "Static address" msgstr "Adresse statique" @@ -892,7 +940,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:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -918,24 +966,24 @@ msgstr "" "Cette valeur influence le délai d'expiration d'une connexion TCP active, " "lorsque les retransmissions RTO ne sont pas acquittées." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:362 msgid "Total traffic:" msgstr "Trafic total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "Type" msgstr "Type" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "UBOND password" msgstr "Mot de passe UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -954,17 +1002,17 @@ 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:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 msgid "Upload speed (Kb/s)" msgstr "Vitesse d'envoi (Kb/s)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "Uptime:" msgstr "Durée de fonctionnement :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 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 " @@ -974,27 +1022,34 @@ msgstr "" msgid "V2Ray is not running" msgstr "V2Ray n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray est utilisé pour TCP et UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "V2Ray user" msgstr "Utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 msgid "V2Ray user id" msgstr "ID utilisateur V2Ray" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#, fuzzy +#| msgid "MacVLAN" +msgid "VLAN" +msgstr "MacVLAN" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "Le VPN n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "VPN settings" msgstr "Paramètres du VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:357 msgid "VPN traffic:" msgstr "Trafic VPN :" @@ -1002,12 +1057,13 @@ msgstr "Trafic VPN :" msgid "VPN tunnel DOWN" msgstr "Le VPN ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Version" msgstr "Version" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 msgid "Wan IP and gateway are identical" msgstr "La passerelle et l'adresse IP du WAN sont identiques" @@ -1018,10 +1074,10 @@ msgid "" msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 msgid "Wizard" msgstr "Assistant" @@ -1030,18 +1086,18 @@ msgstr "Assistant" msgid "You" msgstr "Vous" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 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:373 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 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:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 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." @@ -1050,23 +1106,23 @@ msgstr "" "Choisissez autre si vous utilisez un autre protocole dans la page Réseau " "Interfaces." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 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:444 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 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:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 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:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 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 " @@ -1086,7 +1142,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:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 msgid "auto" msgstr "auto" @@ -1094,35 +1150,47 @@ msgstr "auto" msgid "empty key" msgstr "clef vide" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#, fuzzy +#| msgid "Interface" +msgid "interface:" +msgstr "Nom de l'interface" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "ip address:" msgstr "adresse ip :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#, fuzzy +#| msgid "ip address:" +msgid "ipv6 address:" +msgstr "adresse ip :" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "latency:" msgstr "latence :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 msgid "multipath:" msgstr "multipath :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 msgid "operator:" msgstr "opérateur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 msgid "phone number:" msgstr "Numéro de téléphone :" @@ -1130,22 +1198,29 @@ msgstr "Numéro de téléphone :" msgid "range:" msgstr "plage :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 msgid "state:" msgstr "État :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 msgid "traffic control:" msgstr "Contrôle du trafic :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 msgid "wan address:" msgstr "adresse WAN :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#, fuzzy +#| msgid "wan address:" +msgid "wan ipv6 address:" +msgstr "adresse WAN :" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 msgid "whois:" msgstr "whois :" @@ -1258,9 +1333,6 @@ msgstr "whois :" #~ msgid "Error" #~ msgstr "Erreur" -#~ msgid "Interface" -#~ msgstr "Nom de l'interface" - #~ msgid "Loading" #~ msgstr "Chargement" diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index b925d3f39..f4ed681e5 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -10,29 +10,35 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "A Dead Simple VPN key" msgstr "Chiave Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +msgid "" +"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " +"IPv6 are set" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 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:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 msgid "Add an interface" msgstr "Aggiungi un'interfaccia" @@ -41,11 +47,11 @@ msgstr "Aggiungi un'interfaccia" msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Advanced settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -57,7 +63,7 @@ msgstr "" msgid "All router settings" msgstr "Impostazioni del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." @@ -65,12 +71,12 @@ msgstr "" "Un set di istruzioni Advanced Encryption Standard (AES) è integrato nel " "processore." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 msgid "Backup" msgstr "Backup" @@ -87,54 +93,54 @@ msgstr "Bilanciamento" msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:307 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:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 msgid "Bridge" msgstr "Ponte" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 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:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 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:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t access and use server part" msgstr "Impossibile accedere e utilizzare la parte server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:294 msgid "Can\\'t contact Server Admin Script" msgstr "Impossibile contattare Server Admin Script" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 #, fuzzy #| msgid "Can\\'t get public IP address from ShadowSocks" msgid "Can\\'t get public IP address from V2Ray" msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:281 msgid "Can\\'t ping server" msgstr "Impossibile eseguire il ping del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -142,13 +148,13 @@ msgstr "" "Scegli MacVLAN se desideri creare un'interfaccia virtuale basata su " "un'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 msgid "Choose physical interface." msgstr "Scegli l'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 msgid "Common server settings" msgstr "Impostazioni comuni del server" @@ -156,11 +162,17 @@ msgstr "Impostazioni comuni del server" msgid "Core temp:" msgstr "Temp. Nucleo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 msgid "DHCP" msgstr "DHCP" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#, fuzzy +#| msgid "DHCP" +msgid "DHCPv6" +msgstr "DHCP" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "Problema DNS: impossibile risolvere il nome host" @@ -169,22 +181,22 @@ msgstr "Problema DNS: impossibile risolvere il nome host" msgid "Debug" msgstr "Debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "Default Proxy" msgstr "Proxy predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 msgid "Default VPN" msgstr "VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 msgid "Delete" msgstr "Elimina" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 msgid "Device" msgstr "Dispositivo" @@ -240,7 +252,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Etichetta per l'interfaccia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 msgid "Disable server" msgstr "Disabilita il server" @@ -256,12 +268,13 @@ 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:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 msgid "Disabled" msgstr "Disabilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Download speed (Kb/s)" msgstr "Velocità di download (Kb / s)" @@ -270,11 +283,11 @@ msgid "Dynamic change" msgstr "Cambiamento dinamico" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "Enable IPv6" msgstr "Abilita IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 msgid "Enable SQM" msgstr "Abilita MQ" @@ -290,16 +303,17 @@ msgstr "Abilita TCP bassa latenza" msgid "Enable debug logs" msgstr "Abilita registro di debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "Enabled" msgstr "Abilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "Encryption" msgstr "Crittografia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" "Il metodo di crittografia viene utilizzato per Shadowsocks, V2Ray, Glorytun " @@ -309,30 +323,31 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Il filesystem è di sola lettura" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 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:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Force retrieve settings" msgstr "Forza il recupero delle impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 msgid "GPRS only" msgstr "Solo GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 msgid "Gateway DOWN" msgstr "Tipi di pagamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 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:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Glorytun key" msgstr "Chiave Glorytun" @@ -374,30 +389,44 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 msgid "IPv4 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 msgid "IPv4 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 msgid "IPv4 netmask" msgstr "Netmask IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 msgid "IPv6 Prefix" msgstr "Prefisso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#, fuzzy +#| msgid "IPv4 address" +msgid "IPv6 address" +msgstr "Indirizzi IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#, fuzzy +#| msgid "IPv4 gateway" +msgid "IPv6 gateway" +msgstr "Gateway IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 msgid "IPv6 route received" msgstr "Instradamento IPv6 ricevuto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 msgid "IPv6 settings" msgstr "Impostazioni IPv6" @@ -405,26 +434,26 @@ msgstr "Impostazioni IPv6" msgid "IPv6 tunnel DOWN" msgstr "Tunnel IPv6 GIÙ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:347 msgid "IPv6:" msgstr "IPv6:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 msgid "Interfaces settings" msgstr "Impostazioni delle interfacce" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -432,21 +461,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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 msgid "LAN interfaces settings" msgstr "Impostazioni delle interfacce LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 msgid "Label" msgstr "Etichetta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 msgid "Label for the interface" msgstr "Etichetta per l'interfaccia" @@ -455,42 +484,42 @@ msgid "Last available backup on server:" msgstr "Ultimo backup disponibile sul server:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:324 msgid "Latest available version" msgstr "Ultima versione disponibile" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "Load:" msgstr "Carico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "MLVPN password" msgstr "Password MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:303 msgid "MPTCP is not enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "MPTCP may not be enabled on the server" msgstr "MPTCP non è abilitato sul server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "MPTCP over VPN" msgstr "MPTCP su VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 msgid "Master" msgstr "Principale" @@ -506,15 +535,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:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 msgid "Modem default" msgstr "Impostazione predefinita del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 msgid "Modem init timeout" msgstr "Timeout inizializzazione modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "ModemManager" msgstr "ModemManager" @@ -522,43 +551,43 @@ 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:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 msgid "Multipath current state is" msgstr "Lo stato corrente di Multipath è" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 msgid "Multipath master already defined" msgstr "Multipath master già definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath sembra essere bloccato sulla connessione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 msgid "NONE" msgstr "NESSUNO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 msgid "Network interface duplicated" msgstr "Interfaccia di rete duplicata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 msgid "Network overview" msgstr "Panoramica della rete" @@ -566,8 +595,8 @@ msgstr "Panoramica della rete" msgid "Networks settings" msgstr "Impostazioni reti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No IP defined" msgstr "Nessun IP definito" @@ -575,15 +604,19 @@ msgstr "Nessun IP definito" msgid "No IPv6 access" msgstr "Nessun accesso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 msgid "No Server ping response after 1 second" msgstr "Nessuna risposta al ping del server dopo 1 secondo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "No WAN IP address detected in less than 1 second" msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +msgid "No WAN with multipath enabled:" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Nessun backup disponibile sul server." @@ -592,33 +625,33 @@ msgstr "Nessun backup disponibile sul server." msgid "No change" msgstr "Nessun cambiamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "No data" msgstr "Nessun dato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "No gateway defined" msgstr "Nessun gateway definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:260 msgid "No output" msgstr "Nessun output" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:264 msgid "No server IP address, No WAN IP address" msgstr "Nessun indirizzo IP del server, nessun indirizzo IP WAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:277 msgid "No server defined" msgstr "Nessun server definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 msgid "None" msgstr "Nessuno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 msgid "Normal" msgstr "Normale" @@ -646,17 +679,17 @@ 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:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 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 " @@ -666,7 +699,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN non può essere utilizzato nella configurazione multi VPS." @@ -674,8 +707,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:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 msgid "Other" msgstr "Altro" @@ -683,46 +716,52 @@ msgstr "Altro" msgid "Other settings" msgstr "Altre impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "PAP/CHAP password" msgstr "PAP/CHAP password" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 msgid "PAP/CHAP username" msgstr "Nome utente PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 msgid "PIN code" msgstr "Codice PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 msgid "Physical interface" msgstr "Interfaccia fisica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 msgid "Prefer LTE" msgstr "Preferisci LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 msgid "Prefer UMTS" msgstr "Preferisci UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#, fuzzy +#| msgid "Server IP" +msgid "Primary server IP" +msgstr "Indirizzo IP del server" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 msgid "Protocol" msgstr "Protocollo" @@ -730,15 +769,15 @@ msgstr "Protocollo" msgid "Proxy is DISABLED" msgstr "Il proxy è DISABILITATO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 msgid "Proxy settings" msgstr "Impostazioni Proxy" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:352 msgid "Proxy traffic:" msgstr "Traffico proxy:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 msgid "QMI" msgstr "QMI" @@ -750,12 +789,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:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Retrieve settings from server" msgstr "Recupera le impostazioni dal server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Save & Apply" msgstr "Salva e applica" @@ -771,7 +810,13 @@ msgstr "Salva le statistiche di vnstats" msgid "Scaling governor" msgstr "Governatore in scala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#, fuzzy +#| msgid "Server IP" +msgid "Secondary server IP" +msgstr "Indirizzo IP del server" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 msgid "Select the device you want to base the interface on." msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." @@ -779,47 +824,50 @@ msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." msgid "Send backup" msgstr "Invia backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 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:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 msgid "Server key" msgstr "Chiave server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 msgid "Server settings" msgstr "Impostazioni 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 msgid "Server username" msgstr "Nome utente del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 msgid "Service Type" msgstr "Tipo di servizio" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 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:575 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "Set here IP of the modem" msgstr "Imposta qui l'IP del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Set server as master" msgstr "Imposta server come master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -827,7 +875,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:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -839,14 +887,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:788 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 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:804 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:882 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -861,12 +909,12 @@ msgstr "Configurazione guidata" msgid "ShadowSocks is not running" msgstr "ShadowSocks non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks viene utilizzato per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "ShadowSocks key" msgstr "Chiave ShadowSocks" @@ -874,8 +922,8 @@ msgstr "Chiave ShadowSocks" msgid "Show all settings" msgstr "Mostra tutte le impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 msgid "Static address" msgstr "Indirizzo statico" @@ -897,7 +945,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:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -923,24 +971,24 @@ msgstr "" "Questo valore influenza il timeout di una connessione TCP attiva, quando le " "ritrasmissioni RTO rimangono non riconosciute." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:362 msgid "Total traffic:" msgstr "Traffico globale:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "Type" msgstr "Tipo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "UBOND password" msgstr "Password UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -960,17 +1008,17 @@ msgstr "" msgid "Update server" msgstr "Aggiorna server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 msgid "Upload speed (Kb/s)" msgstr "Velocità di caricamento (Kb / s)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "Uptime:" msgstr "Tempo di funzionamento:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 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." @@ -978,27 +1026,34 @@ 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:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray è utilizzato per TCP e UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "V2Ray user" msgstr "Utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 msgid "V2Ray user id" msgstr "ID utente V2Ray" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#, fuzzy +#| msgid "MacVLAN" +msgid "VLAN" +msgstr "MacVLAN" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "VPN non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "VPN settings" msgstr "Impostazioni VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:357 msgid "VPN traffic:" msgstr "Traffico VPN:" @@ -1006,12 +1061,13 @@ msgstr "Traffico VPN:" msgid "VPN tunnel DOWN" msgstr "Tunnel VPN non stabilito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Version" msgstr "Versione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 msgid "Wan IP and gateway are identical" msgstr "IP Wan e gateway sono identici" @@ -1024,10 +1080,10 @@ msgstr "" "ogni IP WAN e l'IP utilizzato per uscire." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 msgid "Wizard" msgstr "Wizard" @@ -1036,37 +1092,37 @@ msgstr "Wizard" msgid "You" msgstr "Ti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 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:373 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 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:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 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:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 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:444 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 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:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 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:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "È necessario disabilitare SQM per LTE o qualsiasi interfaccia con velocità " @@ -1084,7 +1140,7 @@ msgstr "Il tuo IP non è stato affittato da questo router" msgid "address:" msgstr "Indirizzo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 msgid "auto" msgstr "Auto" @@ -1092,35 +1148,47 @@ msgstr "Auto" msgid "empty key" msgstr "chiave vuota" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#, fuzzy +#| msgid "Add an interface" +msgid "interface:" +msgstr "Aggiungi un'interfaccia" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "ip address:" msgstr "Indirizzo IP:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#, fuzzy +#| msgid "ip address:" +msgid "ipv6 address:" +msgstr "Indirizzo IP:" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "latency:" msgstr "latenza:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "mtu:" msgstr "mtu:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 msgid "multipath:" msgstr "multipath:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 msgid "operator:" msgstr "operatore:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "other" msgstr "Altro" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 msgid "phone number:" msgstr "numero di telefono:" @@ -1128,22 +1196,29 @@ msgstr "numero di telefono:" msgid "range:" msgstr "intervallo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 msgid "state:" msgstr "stato:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 msgid "traffic control:" msgstr "controllo del traffico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 msgid "wan address:" msgstr "indirizzo wan:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#, fuzzy +#| msgid "wan address:" +msgid "wan ipv6 address:" +msgstr "indirizzo wan:" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 msgid "whois:" msgstr "whois:" diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po index 453835bd9..d58ea87b6 100644 --- a/luci-app-openmptcprouter/po/oc/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po @@ -10,32 +10,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "A Dead Simple VPN key" msgstr "Clau Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +msgid "" +"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " +"IPv6 are set" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 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:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 #, fuzzy #| msgid "Add server" msgid "Add a new server" msgstr "Ajustar un servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 msgid "Add an interface" msgstr "Ajustar una interfàcia" @@ -44,11 +50,11 @@ msgstr "Ajustar una interfàcia" msgid "Advanced Settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Advanced settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -60,18 +66,18 @@ msgstr "" msgid "All router settings" msgstr "Totes los paramètres del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 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:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "Authentication Type" msgstr "Tipe d’autentificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 msgid "Backup" msgstr "Salvagarda" @@ -88,62 +94,62 @@ msgstr "Equilibratge" msgid "Beta" msgstr "Beta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:307 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:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 msgid "Bridge" msgstr "Pont" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 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:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 #, 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:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t access and use server part" msgstr "Accès e utilizacion impossible la part servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:294 msgid "Can\\'t contact Server Admin Script" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 msgid "Can\\'t get public IP address from V2Ray" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:281 msgid "Can\\'t ping server" msgstr "Cap de responsa del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 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:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 msgid "Choose physical interface." msgstr "Causissètz l’interfàcia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 msgid "Common server settings" msgstr "Paramètres dels servidors" @@ -151,11 +157,17 @@ msgstr "Paramètres dels servidors" msgid "Core temp:" msgstr "Temperatura del còr :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 msgid "DHCP" msgstr "DHCP" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#, fuzzy +#| msgid "DHCP" +msgid "DHCPv6" +msgstr "DHCP" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "" @@ -164,24 +176,24 @@ msgstr "" msgid "Debug" msgstr "Desbugatge" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 msgid "Default VPN" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 msgid "Delete" msgstr "Suprimir" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 msgid "Device" msgstr "Periferic" @@ -240,7 +252,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Etiqueta per l’interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -260,12 +272,13 @@ 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:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 msgid "Disabled" msgstr "Desactivat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Download speed (Kb/s)" msgstr "Velocitat de telecargament (Kb/s)" @@ -274,11 +287,11 @@ msgid "Dynamic change" msgstr "Cambiament dinamic" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "Enable IPv6" msgstr "Activar l’IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 msgid "Enable SQM" msgstr "Active SQM" @@ -296,16 +309,17 @@ msgstr "Desactivar TCP Fast Open" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "Enabled" msgstr "Activat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "Encryption" msgstr "Chiframent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -315,7 +329,7 @@ msgstr "Metòde de chiframent utilizat per Glorytun." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Force retrieve all keys from server." @@ -323,27 +337,28 @@ msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 msgid "GPRS only" msgstr "solament GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 msgid "Gateway DOWN" msgstr "La palanca respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 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:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Glorytun key" msgstr "Clau Glorytun" @@ -387,30 +402,44 @@ msgstr "Ensages IPv4 TCP SYN" msgid "IPv4 TCP SYN retries2" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 msgid "IPv4 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 msgid "IPv4 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 msgid "IPv4 netmask" msgstr "Masqueta ret IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 msgid "IPv6 Prefix" msgstr "Prefix IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#, fuzzy +#| msgid "IPv4 address" +msgid "IPv6 address" +msgstr "Adreça IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#, fuzzy +#| msgid "IPv4 gateway" +msgid "IPv6 gateway" +msgstr "Palanca IPv4" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -420,24 +449,24 @@ msgstr "Paramètres del VPN" msgid "IPv6 tunnel DOWN" msgstr "Lo tunèl IPv6 respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:347 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 msgid "Interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -445,23 +474,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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 msgid "Label" msgstr "Etiqueta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 msgid "Label for the interface" msgstr "Etiqueta per l’interfàcia" @@ -470,43 +499,43 @@ msgid "Last available backup on server:" msgstr "Darrièra salvagarda disponibla sul servidor :" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:324 msgid "Latest available version" msgstr "Darrièra salvagarda disponibla sul servidor" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "Load:" msgstr "Carga :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "MLVPN password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:303 msgid "MPTCP is not enabled on the server" msgstr "MPTCP es pas activat sul servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "MPTCP over VPN" msgstr "MPTCP over VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 msgid "Master" msgstr "Principal" @@ -522,15 +551,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:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 msgid "Modem default" msgstr "Modem per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "ModemManager" msgstr "ModemManager" @@ -538,43 +567,43 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 msgid "Multipath current state is" msgstr "Multipath es actualament" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 msgid "NONE" msgstr "CAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 msgid "Network interface duplicated" msgstr "Interfàcia ret doblada" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 msgid "Network overview" msgstr "Vista ret" @@ -582,8 +611,8 @@ msgstr "Vista ret" msgid "Networks settings" msgstr "Paramètres ret" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No IP defined" msgstr "Cap d’IP pas definida" @@ -591,15 +620,19 @@ msgstr "Cap d’IP pas definida" msgid "No IPv6 access" msgstr "Cap d’accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 msgid "No Server ping response after 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "No WAN IP address detected in less than 1 second" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +msgid "No WAN with multipath enabled:" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "Cap de salvagarda pas disponibla sul servidor." @@ -608,35 +641,35 @@ msgstr "Cap de salvagarda pas disponibla sul servidor." msgid "No change" msgstr "Cap de modificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "No data" msgstr "Cap de donadas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "No gateway defined" msgstr "Cap de palanca pas definida" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:260 msgid "No output" msgstr "Cap de sortida" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:264 msgid "No server IP address, No WAN IP address" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:277 #, fuzzy #| msgid "Common server settings" msgid "No server defined" msgstr "Paramètres dels servidors" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 msgid "None" msgstr "Cap" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 msgid "Normal" msgstr "Normala" @@ -662,17 +695,17 @@ 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:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 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 " @@ -682,7 +715,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -690,8 +723,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 msgid "Other" msgstr "Autre" @@ -701,50 +734,56 @@ msgstr "Autre" msgid "Other settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 msgid "PAP/CHAP username" msgstr "Identificant PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 msgid "PIN code" msgstr "Còdi PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 msgid "Prefer LTE" msgstr "Preferir LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 msgid "Prefer UMTS" msgstr "Preferir UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#, fuzzy +#| msgid "Server IP" +msgid "Primary server IP" +msgstr "IP servidor" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 msgid "Protocol" msgstr "Protocòl" @@ -752,17 +791,17 @@ msgstr "Protocòl" msgid "Proxy is DISABLED" msgstr "Lo servidor mandatari es DESACTIVAT" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:352 msgid "Proxy traffic:" msgstr "Trafic mandatari :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 msgid "QMI" msgstr "QMI" @@ -774,12 +813,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:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Retrieve settings from server" msgstr "Recuperar la configuracion personalizada del servidor estant" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Save & Apply" msgstr "Salvagardar e aplicar" @@ -795,7 +834,13 @@ msgstr "Salvagardar las estatisticas de vnstats" msgid "Scaling governor" msgstr "Regulator a l’escala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#, fuzzy +#| msgid "Server IP" +msgid "Secondary server IP" +msgstr "IP servidor" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 msgid "Select the device you want to base the interface on." msgstr "Seleccionatz lo periferic per l’interfàcia." @@ -803,50 +848,53 @@ msgstr "Seleccionatz lo periferic per l’interfàcia." msgid "Send backup" msgstr "Enviar la salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 #, 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:78 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 msgid "Server key" msgstr "Clau servidor" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 msgid "Server settings" msgstr "Paramètres servidor" -#: 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 msgid "Server username" msgstr "Lo nom d'utilizaire servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 msgid "Service Type" msgstr "Tipe de servici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 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:575 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "Set here IP of the modem" msgstr "Botatz l’IP del modem aquí" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Set server as master" msgstr "Configurar lo servidor coma servidor màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -858,7 +906,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:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -870,14 +918,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:788 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 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:804 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:882 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -894,12 +942,12 @@ msgstr "Assistent de configuracion" msgid "ShadowSocks is not running" msgstr "Paramètres ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks es utilizat per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "ShadowSocks key" msgstr "Clau de ShadowSocks" @@ -907,8 +955,8 @@ msgstr "Clau de ShadowSocks" msgid "Show all settings" msgstr "Veire totes los paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 msgid "Static address" msgstr "Adreça estatica" @@ -927,7 +975,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -948,25 +996,25 @@ msgid "" "retransmissions remain unacknowledged." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:362 msgid "Total traffic:" msgstr "Tradif total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "Type" msgstr "Tipe" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "UBOND password" msgstr "Senhal UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -985,17 +1033,17 @@ 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:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 msgid "Upload speed (Kb/s)" msgstr "Velocitat de mandadís (Kb/s)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 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 " @@ -1005,31 +1053,38 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 #, 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 msgid "V2Ray user id" msgstr "" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#, fuzzy +#| msgid "MacVLAN" +msgid "VLAN" +msgstr "MacVLAN" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 #, fuzzy #| msgid "VPN settings" msgid "VPN is not running" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "VPN settings" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:357 msgid "VPN traffic:" msgstr "" @@ -1037,12 +1092,13 @@ msgstr "" msgid "VPN tunnel DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 msgid "Wan IP and gateway are identical" msgstr "" @@ -1054,10 +1110,10 @@ msgstr "" "Utiliza de sites extèrns per obténer d’adreças IP extèrnas quand activat." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 msgid "Wizard" msgstr "Assistent" @@ -1066,16 +1122,16 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 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:373 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 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." @@ -1083,21 +1139,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:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:444 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 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:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 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:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 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 " @@ -1115,7 +1171,7 @@ msgstr "" msgid "address:" msgstr "Adreça IPv4 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 msgid "auto" msgstr "auto" @@ -1123,35 +1179,47 @@ msgstr "auto" msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#, fuzzy +#| msgid "Add an interface" +msgid "interface:" +msgstr "Ajustar una interfàcia" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "ip address:" msgstr "Adreça IP :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#, fuzzy +#| msgid "ip address:" +msgid "ipv6 address:" +msgstr "Adreça IP :" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 msgid "phone number:" msgstr "" @@ -1159,22 +1227,29 @@ msgstr "" msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 msgid "wan address:" msgstr "Adreça wan :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#, fuzzy +#| msgid "wan address:" +msgid "wan ipv6 address:" +msgstr "Adreça wan :" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 msgid "whois:" msgstr "" diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index d08b8af7d..acc389441 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -13,28 +13,34 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:251 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "A Dead Simple VPN key" msgstr "简单VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:73 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +msgid "" +"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " +"IPv6 are set" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 msgid "API username to retrieve personnalized settings from the server." msgstr "API用户名,以从聚合服务器检索个性化设置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:118 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Add a new server" msgstr "添加一个新聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:827 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 msgid "Add an interface" msgstr "添加网卡" @@ -43,11 +49,11 @@ msgstr "添加网卡" msgid "Advanced Settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 msgid "Advanced settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -57,18 +63,18 @@ msgstr "这里可用的所有VPN都可以通过MPTCP或使用自己的内部进 msgid "All router settings" msgstr "所有路由器设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:225 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "处理器中集成了高级加密标准(AES)指令集." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:680 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 msgid "Authentication Type" msgstr "认证类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:718 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 msgid "Backup" msgstr "备份" @@ -85,60 +91,60 @@ msgstr "均衡" msgid "Beta" msgstr "测试版" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:296 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:307 msgid "Big time difference between the server and the router" msgstr "服务器和路由器之间的时间差距很大" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:478 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 msgid "Bridge" msgstr "桥接" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 msgid "By default VPN is used for any traffic that is not TCP." msgstr "默认情况下,VPN用于非TCP的任何流量." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:170 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 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:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 msgid "CHAP" msgstr "CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:268 msgid "Can\\'t access and use server part" msgstr "无法访问和使用聚合服务器部分服务" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:294 msgid "Can\\'t contact Server Admin Script" msgstr "无法联系聚合服务器管理脚本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:273 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t get public IP address from ShadowSocks" msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:276 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 msgid "Can\\'t get public IP address from V2Ray" msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:270 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:281 msgid "Can\\'t ping server" msgstr "无法ping聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:482 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 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:416 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:548 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 msgid "Choose physical interface." msgstr "选择物理接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:123 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 msgid "Common server settings" msgstr "通用服务器设置聚合" @@ -146,11 +152,17 @@ msgstr "通用服务器设置聚合" msgid "Core temp:" msgstr "核心温度:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:368 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 msgid "DHCP" msgstr "DHCP" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#, fuzzy +#| msgid "DHCP" +msgid "DHCPv6" +msgstr "DHCP" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" msgstr "DNS问题:无法解析主机名" @@ -159,22 +171,22 @@ msgstr "DNS问题:无法解析主机名" msgid "Debug" msgstr "调试模式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 msgid "Default Proxy" msgstr "默认代理" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 msgid "Default VPN" msgstr "默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:457 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 msgid "Delete" msgstr "删除" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:580 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:628 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 msgid "Device" msgstr "设备" @@ -223,7 +235,7 @@ msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向 msgid "Disable renaming interfaces" msgstr "禁用网卡重命名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:106 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 msgid "Disable server" msgstr "关闭禁用聚合服务器" @@ -239,12 +251,13 @@ msgstr "禁用服务器ping状态检查" msgid "Disable tracebox test" msgstr "禁用跟踪框测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:716 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 msgid "Disabled" msgstr "关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:778 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Download speed (Kb/s)" msgstr "下载速度 (Kb/s)" @@ -253,11 +266,11 @@ msgid "Dynamic change" msgstr "动态变化" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 msgid "Enable IPv6" msgstr "开启 IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 msgid "Enable SQM" msgstr "开启 SQM" @@ -273,16 +286,17 @@ msgstr "启用TCP低延迟" msgid "Enable debug logs" msgstr "启用调试日志" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:715 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:731 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "Enabled" msgstr "开启" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 msgid "Encryption" msgstr "加密" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" @@ -290,29 +304,30 @@ msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" msgid "Filesystem is readonly" msgstr "文件系统处于只读状态/重新刷机吧" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 msgid "Force retrieve all keys from server." msgstr "强制从服务器检索并应用所有密钥。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Force retrieve settings" msgstr "强制检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:674 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 msgid "GPRS only" msgstr "仅GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:504 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:665 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 msgid "Gateway DOWN" msgstr "网关不通" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun TCP默认用于UDP和ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:241 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Glorytun key" msgstr "Glorytun密钥" @@ -352,30 +367,44 @@ msgstr "IPv4 TCP SYN重试1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN重试2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:424 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 msgid "IPv4 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 msgid "IPv4 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:430 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 msgid "IPv4 netmask" msgstr "IPv4网络掩码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:158 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 msgid "IPv6 Prefix" msgstr "IPv6前缀" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:544 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:705 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#, fuzzy +#| msgid "IPv4 address" +msgid "IPv6 address" +msgstr "IPv4地址" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#, fuzzy +#| msgid "IPv4 gateway" +msgid "IPv6 gateway" +msgstr "IPv4网关" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 msgid "IPv6 route received" msgstr "经过的IPv6路由" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 msgid "IPv6 settings" msgstr "IPv6设置" @@ -383,44 +412,44 @@ msgstr "IPv6设置" msgid "IPv6 tunnel DOWN" msgstr "IPv6隧道DOWN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:347 msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 msgid "Interfaces settings" msgstr "接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "Key is retrieved from server API by default." msgstr "默认情况下,密钥是从服务器API检索的." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 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:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:359 msgid "LAN interfaces settings" msgstr "局域网接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "LTE" msgstr "4G LTE制式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 msgid "Label" msgstr "标签" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:358 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:468 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 msgid "Label for the interface" msgstr "接口标签" @@ -429,42 +458,42 @@ msgid "Last available backup on server:" msgstr "服务器上的上次可用备份:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:124 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:313 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:324 msgid "Latest available version" msgstr "最新可用的版本" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:130 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:319 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 msgid "Load:" msgstr "负载:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:268 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:263 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "MLVPN password" msgstr "MLVPN密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:292 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:303 msgid "MPTCP is not enabled on the server" msgstr "服务器上未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:330 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 msgid "MPTCP may not be enabled on the server" msgstr "服务器上可能未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 msgid "MPTCP over VPN" msgstr "通过MPTCP的VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 msgid "MacVLAN" msgstr "Macvlan" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:717 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:733 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 msgid "Master" msgstr "主" @@ -480,15 +509,15 @@ msgstr "最大扩展CPU频率" msgid "Minimum scaling CPU frequency" msgstr "最小扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:669 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 msgid "Modem default" msgstr "调制解调器默认" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:703 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 msgid "Modem init timeout" msgstr "调制解调器初始化超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:514 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 msgid "ModemManager" msgstr "调制解调器管理器" @@ -496,43 +525,43 @@ msgstr "调制解调器管理器" msgid "More than one default VPN is enabled" msgstr "启用了多个默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:712 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:728 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "Multipath TCP" msgstr "多路径TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:527 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:533 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:688 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:694 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 msgid "Multipath current state is" msgstr "多路径当前状态为" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:522 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 msgid "Multipath master already defined" msgstr "已定义多路径主机" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:668 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 msgid "Multipath seems to be blocked on the connection" msgstr "多路径似乎在连接上被阻止" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 msgid "NONE" msgstr "无" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:539 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 msgid "Network interface duplicated" msgstr "网络接口重复" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:800 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:802 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 msgid "Network overview" msgstr "网络概览" @@ -540,8 +569,8 @@ msgstr "网络概览" msgid "Networks settings" msgstr "网络设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "No IP defined" msgstr "没有定义IP" @@ -549,15 +578,19 @@ msgstr "没有定义IP" msgid "No IPv6 access" msgstr "没有IPv6地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:672 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 msgid "No Server ping response after 1 second" msgstr "1秒后无服务器ping响应" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:279 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "No WAN IP address detected in less than 1 second" msgstr "不到1秒内未检测到WAN IP地址" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +msgid "No WAN with multipath enabled:" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." msgstr "服务器上没有可用的备份." @@ -566,33 +599,33 @@ msgstr "服务器上没有可用的备份." msgid "No change" msgstr "没有改变" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "No data" msgstr "没有数据" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:662 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "No gateway defined" msgstr "未定义网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:248 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:249 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:260 msgid "No output" msgstr "无网络输出" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:264 msgid "No server IP address, No WAN IP address" msgstr "没有服务器IP地址,没有WAN IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:266 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:277 msgid "No server defined" msgstr "未定义聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 msgid "None" msgstr "没有" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:476 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 msgid "Normal" msgstr "正常" @@ -618,17 +651,17 @@ msgstr "双方都将启用混淆" msgid "On wizard change" msgstr "通过向导更改" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:182 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "目前服务器如果有多个公网IP仅支持ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:722 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "必须仅将一个接口设置为“主”,这应该是最稳定的接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 msgid "Only one server can be master, else all servers are set as backup." msgstr "只能将一台服务器作为主服务器,否则将所有服务器都设置为备用服务器." @@ -636,7 +669,7 @@ msgstr "只能将一台服务器作为主服务器,否则将所有服务器都 msgid "OpenMPTCProuter" msgstr "聚合路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN不能用于多VPS配置." @@ -644,8 +677,8 @@ msgstr "OpenVPN不能用于多VPS配置." msgid "Optimize for latency instead of bandwidth" msgstr "优化延迟而不是带宽" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:518 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 msgid "Other" msgstr "其他" @@ -653,46 +686,52 @@ msgstr "其他" msgid "Other settings" msgstr "聚合其他设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:684 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 msgid "PAP/CHAP password" msgstr "PAP/CHAP 密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:691 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 msgid "PAP/CHAP username" msgstr "PAP/CHAP 账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:660 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 msgid "PIN code" msgstr "PIN码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:516 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 msgid "PPPoE" msgstr "PPPoE拨号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:527 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 msgid "Physical interface" msgstr "物理接口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:670 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 msgid "Prefer LTE" msgstr "首选4G LTE制式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 msgid "Prefer UMTS" msgstr "首选3G UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:508 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#, fuzzy +#| msgid "Server IP" +msgid "Primary server IP" +msgstr "服务器IP" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 msgid "Protocol" msgstr "协议" @@ -700,15 +739,15 @@ msgstr "协议" msgid "Proxy is DISABLED" msgstr "代理已禁用" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 msgid "Proxy settings" msgstr "代理设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:341 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:352 msgid "Proxy traffic:" msgstr "代理流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:517 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 msgid "QMI" msgstr "QMI" @@ -720,12 +759,12 @@ msgstr "将所有端口从服务器重定向到此路由器" msgid "Restore backup" msgstr "恢复备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 msgid "Retrieve settings from server" msgstr "从服务器检索设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Save & Apply" msgstr "保存并且应用设置" @@ -741,7 +780,13 @@ msgstr "保存vnstats统计信息" msgid "Scaling governor" msgstr "超频" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:830 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#, fuzzy +#| msgid "Server IP" +msgid "Secondary server IP" +msgstr "服务器IP" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 msgid "Select the device you want to base the interface on." msgstr "选择要作为基础的接口." @@ -749,47 +794,50 @@ msgstr "选择要作为基础的接口." msgid "Send backup" msgstr "发送备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:58 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:60 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 msgid "Server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 msgid "Server IP will be set for proxy and VPN" msgstr "将为代理和VPN设置服务器IP" -#: 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:93 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 msgid "Server key" msgstr "服务器密钥" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:42 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 msgid "Server settings" 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:83 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 msgid "Server username" msgstr "服务器用户名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:666 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 msgid "Service Type" msgstr "服务类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 msgid "Set an IP in the same network as the modem" msgstr "在与调制解调器相同的网络中设置IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 msgid "Set here IP of the modem" msgstr "在此处设置调制解调器的IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:92 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Set server as master" msgstr "将服务器设置为主服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -797,7 +845,7 @@ msgstr "" "设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代" "理." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -805,12 +853,12 @@ msgstr "" "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" "ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 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:804 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:882 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / QoS." @@ -823,12 +871,12 @@ msgstr "聚合设置向导" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks用于TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 msgid "ShadowSocks key" msgstr "ShadowSocks密钥" @@ -836,8 +884,8 @@ msgstr "ShadowSocks密钥" msgid "Show all settings" msgstr "显示所有设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:512 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 msgid "Static address" msgstr "静态地址" @@ -858,7 +906,7 @@ msgstr "" "孤立的(不再被任何应用程序引用)连接在本地端中止之前将保持FIN_WAIT_2状态的时" "间。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:227 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -879,24 +927,24 @@ msgid "" "retransmissions remain unacknowledged." msgstr "当未确认RTO重传时,此值会影响有效TCP连接的超时。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:362 msgid "Total traffic:" msgstr "总流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:473 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 msgid "Type" msgstr "类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:275 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "UBOND password" msgstr "UBOND密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:673 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -913,17 +961,17 @@ msgstr "远程将服务器更新到最新版本并重置它们。" msgid "Update server" msgstr "更新服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 msgid "Upload speed (Kb/s)" msgstr "上传速度 (Kb/s)" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:141 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:325 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:336 msgid "Uptime:" msgstr "运行时间:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:783 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:799 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." @@ -931,27 +979,34 @@ msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." msgid "V2Ray is not running" msgstr "V2Ray没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:203 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray用于TCP和UDP传输." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 msgid "V2Ray user" msgstr "V2Ray账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 msgid "V2Ray user id" msgstr "V2Ray账号ID" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#, fuzzy +#| msgid "MacVLAN" +msgid "VLAN" +msgstr "Macvlan" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 msgid "VPN is not running" msgstr "VPN没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:235 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 msgid "VPN settings" msgstr "VPN设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:346 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:357 msgid "VPN traffic:" msgstr "VPN流量:" @@ -959,12 +1014,13 @@ msgstr "VPN流量:" msgid "VPN tunnel DOWN" msgstr "VPN隧道关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:306 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:317 msgid "Version" msgstr "版本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:676 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 msgid "Wan IP and gateway are identical" msgstr "WAN IP和网关相同" @@ -975,10 +1031,12 @@ msgid "" msgstr "启用后,将在外部站点上进行检查,以获取每个WAN IP和用于外出的IP." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:258 -msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +#, fuzzy +#| msgid "When proxy shadowsocks is used, use it for UDP if proxy down" +msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "当使用代理程序shadowsocks时,如果代理关闭则将其用于UDP协议" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:40 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 msgid "Wizard" msgstr "聚合向导" @@ -987,15 +1045,15 @@ msgstr "聚合向导" msgid "You" msgstr "你" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 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:373 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "如果您有多个真实的以太网端口,则可以使用DHCP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:522 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 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." @@ -1003,19 +1061,19 @@ msgstr "" "如果您有多个真实的以太网端口,则可以使用DHCP。 如果要使用“网络接口”页面中可用" "的其他协议,请选择“其他”." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 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:444 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 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:153 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:171 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:773 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "您应该为LTE或任何网速不稳的接口禁用SQM." @@ -1031,7 +1089,7 @@ msgstr "您访问的IP来源未通过此路由器" msgid "address:" msgstr "地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:675 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 msgid "auto" msgstr "自动" @@ -1039,35 +1097,47 @@ msgstr "自动" msgid "empty key" msgstr "空键" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:447 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:638 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#, fuzzy +#| msgid "Interface" +msgid "interface:" +msgstr "Nom de l'interface" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 msgid "ip address:" msgstr "IP地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:459 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#, fuzzy +#| msgid "ip address:" +msgid "ipv6 address:" +msgstr "IP地址:" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "latency:" msgstr "时延:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:463 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:654 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:707 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 msgid "multipath:" msgstr "多路聚合:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:467 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 msgid "operator:" msgstr "运营商:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 msgid "other" msgstr "其他" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 msgid "phone number:" msgstr "电话号码:" @@ -1075,22 +1145,29 @@ msgstr "电话号码:" msgid "range:" msgstr "漫游:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 msgid "state:" msgstr "状态:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:710 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 msgid "traffic control:" msgstr "流量控制:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:451 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:642 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 msgid "wan address:" msgstr "互联网地址 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:455 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:646 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#, fuzzy +#| msgid "wan address:" +msgid "wan ipv6 address:" +msgstr "互联网地址 :" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 msgid "whois:" msgstr "whois查询 :" @@ -1198,9 +1275,6 @@ msgstr "whois查询 :" #~ msgid "Error" #~ msgstr "Erreur" -#~ msgid "Interface" -#~ msgstr "Nom de l'interface" - #~ msgid "Loading" #~ msgstr "Chargement" From b55ed4ea2d39c2fe9881c4dc55905aa96975b9e2 Mon Sep 17 00:00:00 2001 From: wysh Date: Fri, 12 Feb 2021 07:20:27 +0000 Subject: [PATCH 112/195] 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 f40ceecd8..db45787bd 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-12-04 16:02+0000\n" -"Last-Translator: antrouter \n" +"PO-Revision-Date: 2021-02-13 08:01+0000\n" +"Last-Translator: wysh \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -29,7 +29,7 @@ msgstr "平均:" #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:34 msgid "BLEST" -msgstr "蚂蚁最好的" +msgstr "最好的" #: luci-app-mptcp/luasrc/controller/mptcp.lua:11 msgid "Bandwidth" From f8294051f7ec4c22d5209d5d6bf87cd591338b38 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 12 Mar 2021 15:30:18 +0000 Subject: [PATCH 113/195] 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 | 468 +++++++++-------- .../po/fr/openmptcprouter.po | 472 ++++++++++-------- .../po/it/openmptcprouter.po | 472 ++++++++++-------- .../po/oc/openmptcprouter.po | 472 ++++++++++-------- .../po/zh_Hans/openmptcprouter.po | 472 ++++++++++-------- 5 files changed, 1281 insertions(+), 1075 deletions(-) diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index d09b988b9..dc7613576 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -10,34 +10,37 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "Schlüssel 'Dead Simple VPN'" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 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:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "Interface hinzufügen" @@ -46,11 +49,11 @@ msgstr "Interface hinzufügen" msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -62,19 +65,19 @@ msgstr "" msgid "All router settings" msgstr "Alle Router-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 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:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "Authentifizierungs Methode" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "Backup" @@ -95,17 +98,21 @@ msgstr "Beta" msgid "Big time difference between the server and the router" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 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:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 #, fuzzy #| msgid "By default VPN is used for any traffic that is not TCP." msgid "" @@ -114,7 +121,7 @@ msgstr "" "IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " "übertragen." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "" @@ -138,19 +145,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 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:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "Allgemeine Servereinstellungen" @@ -158,12 +165,12 @@ msgstr "Allgemeine Servereinstellungen" msgid "Core temp:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 #, fuzzy #| msgid "DHCP" msgid "DHCPv6" @@ -177,24 +184,24 @@ msgstr "" msgid "Debug" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "Standard VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "Löschen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "" @@ -250,7 +257,7 @@ msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" msgid "Disable renaming interfaces" msgstr "Bezeichnung der Schnittstelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -270,13 +277,13 @@ msgstr "Server-Ping Status-Prüfung aus" msgid "Disable tracebox test" msgstr "Externe Prüfung aus" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "Download-Geschwindigkeit (kBits/s)" @@ -285,11 +292,11 @@ msgid "Dynamic change" msgstr "Dynamische Anpassung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "IPv6 aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "SQM aktiv" @@ -307,17 +314,17 @@ msgstr "TCP-Fast-Open aus" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "Aktiv" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "Verschlüsselung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -327,34 +334,37 @@ msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 #, 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:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +msgid "Gateway IPv6 DOWN" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "Glorytun Schlüssel" @@ -398,44 +408,44 @@ msgstr "IPv4 TCP SYN Wiederholversuche" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN Wiederholversuche" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "IPv4-Netzmaske" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 #, fuzzy #| msgid "IPv4 address" msgid "IPv6 address" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 #, fuzzy #| msgid "IPv4 gateway" msgid "IPv6 gateway" msgstr "IPv4-Standardgateway" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -449,43 +459,43 @@ msgstr "" msgid "IPv6:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Schnittstellen-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "Bezeichnung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "Bezeichnung der Schnittstelle" @@ -505,14 +515,14 @@ msgstr "Aktuellstes auf dem Server verfügbares Backup:" msgid "Load:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "MLVPN Schlüssel" @@ -524,16 +534,29 @@ msgstr "" msgid "MPTCP may not be enabled on the server" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "MPTCP über VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#, fuzzy +#| msgid "MPTCP over VPN" +msgid "MPTCP over VPN settings" +msgstr "MPTCP über VPN" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "" @@ -549,15 +572,15 @@ msgstr "Maximaler CPU-Takt" msgid "Minimum scaling CPU frequency" msgstr "Minimaler CPU-Takt" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "" @@ -565,43 +588,47 @@ msgstr "" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +msgid "Network interface MAC address duplicated" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "Netzwerk-Übersicht" @@ -609,8 +636,8 @@ msgstr "Netzwerk-Übersicht" msgid "Networks settings" msgstr "Netzwerk-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "" @@ -618,8 +645,8 @@ msgstr "" msgid "No IPv6 access" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "" @@ -627,7 +654,7 @@ msgstr "" msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -639,12 +666,12 @@ msgstr "Keine Konfigurations-Sicherung des Routers auf dem Server verfügbar." msgid "No change" msgstr "Keine Änderungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "" @@ -663,11 +690,11 @@ msgstr "" msgid "No server defined" msgstr "Allgemeine Servereinstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "Keine" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "" @@ -693,17 +720,17 @@ 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Only one server can be master, else all servers are set as backup." msgstr "Nur eine Verbindung kann als 'primär' definiert werden." @@ -711,7 +738,7 @@ msgstr "Nur eine Verbindung kann als 'primär' definiert werden." msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -719,8 +746,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 #, fuzzy msgid "Other" msgstr "Andere" @@ -731,56 +758,56 @@ msgstr "Andere" msgid "Other settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "MLVPN Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 #, fuzzy #| msgid "Server IP" msgid "Primary server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "Protokoll" @@ -788,7 +815,7 @@ msgstr "Protokoll" msgid "Proxy is DISABLED" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" @@ -798,7 +825,7 @@ msgstr "VPN-Einstellungen" msgid "Proxy traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "" @@ -806,18 +833,22 @@ msgstr "" msgid "Redirects all ports from server to this router" msgstr "Weiterleitung aller Ports vom Server auf den Router" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Parameter-Sicherung auf den Router wiederherstellen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 #, 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:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "Speichern und Anwenden" @@ -833,13 +864,13 @@ msgstr "Speichern der vnstat-Daten" msgid "Scaling governor" msgstr "Methode der CPU-Taktung" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 #, fuzzy #| msgid "Server IP" msgid "Secondary server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "Schnittstelle auswählen für diese Verbindung" @@ -847,11 +878,14 @@ 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:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "Server IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 #, fuzzy #| msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN" msgid "Server IP will be set for proxy and VPN" @@ -859,44 +893,48 @@ msgstr "" "Die Server-IP wird für die Protokolle ShadowSockes, Glorytun, OpenVPN und " "MLVPN verwendet." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "Server-Schlüssel" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "Server-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "Server-Benutzername" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 #, fuzzy #| msgid "Server key" msgid "Service Type" msgstr "Server-Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 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:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "IPv4 des Modems" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "Server als 'primär' definieren" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -908,7 +946,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:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -920,14 +958,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:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -944,12 +982,12 @@ msgstr "Parametrierungs-Assistent" msgid "ShadowSocks is not running" msgstr "Einstellungen ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "SchadowSocks wird für TCP genutzt." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "ShadowSocks Schlüssel" @@ -957,8 +995,8 @@ msgstr "ShadowSocks Schlüssel" msgid "Show all settings" msgstr "Alle Einstellungen anzeigen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "Statische Adresse" @@ -977,7 +1015,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -1002,22 +1040,22 @@ msgstr "" msgid "Total traffic:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "UBOND Schlüssel" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "" @@ -1036,7 +1074,7 @@ msgstr "automatische Aktualiserung des Servers" msgid "Update server" msgstr "Aktualisierung des Servers" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "Upstream-Bandbreite (kBit/s)" @@ -1045,8 +1083,8 @@ msgstr "Upstream-Bandbreite (kBit/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 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 " @@ -1056,22 +1094,22 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #, 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:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 msgid "VLAN" msgstr "" @@ -1081,7 +1119,7 @@ msgstr "" msgid "VPN is not running" msgstr "VPN-Einstellungen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "VPN-Einstellungen" @@ -1097,9 +1135,9 @@ msgstr "" msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "" @@ -1113,7 +1151,7 @@ msgstr "Externe Prüfung der IP-Adressen der WAN-Adapter und der Server-IP" msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "Assistent" @@ -1122,17 +1160,17 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 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:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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." @@ -1140,23 +1178,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:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 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:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 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:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 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 " @@ -1176,7 +1214,7 @@ msgstr "" msgid "address:" msgstr "IPv4-Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "" @@ -1184,49 +1222,49 @@ msgstr "" msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 #, fuzzy #| msgid "Add an interface" msgid "interface:" msgstr "Interface hinzufügen" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 #, fuzzy #| msgid "Static address" msgid "ip address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 #, fuzzy #| msgid "Static address" msgid "ipv6 address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "andere" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "" @@ -1234,31 +1272,31 @@ msgstr "" msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 #, fuzzy #| msgid "Static address" msgid "wan address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 #, fuzzy #| msgid "Static address" msgid "wan ipv6 address:" msgstr "Statische Adresse" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "" diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 1e5d91c74..fa47a4e52 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -13,36 +13,39 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "Clef Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 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:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "Add a new server" msgstr "Ajouter un serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "Ajouter une interface" @@ -51,11 +54,11 @@ msgstr "Ajouter une interface" msgid "Advanced Settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "Configuration avancée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -67,18 +70,18 @@ msgstr "" msgid "All router settings" msgstr "Tous les paramètres du routeur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 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:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "Type d'authentification" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "Sauvegarder" @@ -99,21 +102,25 @@ 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:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "Passerelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 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:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 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:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "CHAP" @@ -139,7 +146,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:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -147,13 +154,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:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "Choisissez l'interface physique." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "Paramètres des serveurs" @@ -161,12 +168,12 @@ msgstr "Paramètres des serveurs" msgid "Core temp:" msgstr "Température du cœur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 #, fuzzy #| msgid "DHCP" msgid "DHCPv6" @@ -180,22 +187,22 @@ msgstr "Soucis DNS : impossible de résoudre le domaine" msgid "Debug" msgstr "Débugger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "Default Proxy" msgstr "Proxy par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "VPN par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "Supprimer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "Appareil" @@ -253,7 +260,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Étiquette pour l'interface" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Disable server" msgstr "Désactiver le serveur" @@ -269,13 +276,13 @@ 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:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "Désactiver" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "Vitesse de téléchargement (Kb/s)" @@ -284,11 +291,11 @@ msgid "Dynamic change" msgstr "Changement dynamique" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "Activer IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "Active SQM" @@ -304,17 +311,17 @@ 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:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "Activer" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "Chiffrement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 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 " @@ -324,30 +331,35 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Système de fichiers en lecture seule" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 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:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "Force retrieve settings" msgstr "Forcer la récupération des paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "seulement GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "La passerelle ne répond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +#, fuzzy +#| msgid "Gateway DOWN" +msgid "Gateway IPv6 DOWN" +msgstr "La passerelle ne répond pas" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "Clef Glorytun" @@ -389,44 +401,44 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "Masque de sous-réseau IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "Préfixe IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 #, fuzzy #| msgid "IPv4 address" msgid "IPv6 address" msgstr "Adresse IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 #, fuzzy #| msgid "IPv4 gateway" msgid "IPv6 gateway" msgstr "Passerelle IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "Route IPv6 reçue" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 msgid "IPv6 settings" msgstr "Paramètres IPv6" @@ -438,20 +450,20 @@ msgstr "Le tunnel IPv6 ne répond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "Paramètres des interfaces" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -459,21 +471,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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 msgid "LAN interfaces settings" msgstr "Paramètres des interfaces LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "Étiquette" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "Étiquette pour l'interface" @@ -491,12 +503,12 @@ msgstr "Dernière version disponible" msgid "Load:" msgstr "Charge :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "Mot de passe MLVPN" @@ -508,16 +520,29 @@ 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:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "MPTCP sur VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#, fuzzy +#| msgid "MPTCP over VPN" +msgid "MPTCP over VPN settings" +msgstr "MPTCP sur VPN" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "Master" @@ -533,15 +558,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:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "Modem par défaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "Délai max. d'initialisation du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "ModemManager" @@ -549,43 +574,49 @@ 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:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "Multipath est actuellement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "Maître multipath déjà défini" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath semble bloquer sur la connexion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "AUCUN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#, fuzzy +#| msgid "Network interface duplicated" +msgid "Network interface MAC address duplicated" +msgstr "Interface réseau dupliquée" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "Interface réseau dupliquée" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "Aperçu réseau" @@ -593,8 +624,8 @@ msgstr "Aperçu réseau" msgid "Networks settings" msgstr "Paramètres réseaux" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "Aucune IP définie" @@ -602,8 +633,8 @@ msgstr "Aucune IP définie" msgid "No IPv6 access" msgstr "Pas d'accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "Pas de réponse du serveur après 1 seconde" @@ -611,7 +642,7 @@ msgstr "Pas de réponse du serveur après 1 seconde" msgid "No WAN IP address detected in less than 1 second" msgstr "Aucune adresse IP WAN détectée en moins d'une seconde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -623,12 +654,12 @@ msgstr "Aucune sauvegarde disponible sur le serveur." msgid "No change" msgstr "Pas de changement" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "Pas de données" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "Aucune passerelle définie" @@ -645,11 +676,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:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "Aucun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "Normal" @@ -677,19 +708,19 @@ 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 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:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 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." @@ -698,7 +729,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN ne peut pas être utilisé dans une configuration multi VPS." @@ -706,8 +737,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:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "Other" msgstr "Autre" @@ -715,52 +746,52 @@ msgstr "Autre" msgid "Other settings" msgstr "Autres paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "PAP/CHAP password" msgstr "Mot de passe PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "Identifiant PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "Code PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Physical interface" msgstr "l'interface physique," -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "Préférer LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "Préférer l'UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 #, fuzzy #| msgid "Server IP" msgid "Primary server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "Protocole" @@ -768,7 +799,7 @@ msgstr "Protocole" msgid "Proxy is DISABLED" msgstr "Le proxy est DÉSACTIVÉ" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "Proxy settings" msgstr "Paramètres du Proxy" @@ -776,7 +807,7 @@ msgstr "Paramètres du Proxy" msgid "Proxy traffic:" msgstr "Trafic proxy :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "QMI" @@ -784,16 +815,20 @@ msgstr "QMI" msgid "Redirects all ports from server to this router" msgstr "Rediriger tous les ports du serveur vers ce routeur" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Restauration de la sauvegarde" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 msgid "Retrieve settings from server" msgstr "Récupérer les paramètres du serveur" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "Sauvegarder et Appliquer" @@ -809,13 +844,13 @@ msgstr "Sauvegarder les statistiques de vnstats" msgid "Scaling governor" msgstr "Régulateur de mise à l'échelle" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 #, fuzzy #| msgid "Server IP" msgid "Secondary server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "Sélectionnez le périphérique pour l'interface." @@ -823,50 +858,57 @@ 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:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "IP du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 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:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "Clef du serveur" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "Paramètres du serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "Nom d'utilisateur sur le serveur" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 msgid "Service Type" msgstr "Type du service" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 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:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "Mettez ici l'IP du modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "Configurer le serveur en tant que maître" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -874,7 +916,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:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -882,14 +924,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:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -904,12 +946,12 @@ msgstr "Assistant de configuration" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks est utilisé pour le TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "Clef de ShadowSocks" @@ -917,8 +959,8 @@ msgstr "Clef de ShadowSocks" msgid "Show all settings" msgstr "Voir tous les paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "Adresse statique" @@ -940,7 +982,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:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -970,20 +1012,20 @@ msgstr "" msgid "Total traffic:" msgstr "Trafic total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "Type" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "Mot de passe UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -1002,7 +1044,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:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "Vitesse d'envoi (Kb/s)" @@ -1011,8 +1053,8 @@ msgstr "Vitesse d'envoi (Kb/s)" msgid "Uptime:" msgstr "Durée de fonctionnement :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 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 " @@ -1022,20 +1064,20 @@ msgstr "" msgid "V2Ray is not running" msgstr "V2Ray n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray est utilisé pour TCP et UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "Utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "ID utilisateur V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 #, fuzzy #| msgid "MacVLAN" msgid "VLAN" @@ -1045,7 +1087,7 @@ msgstr "MacVLAN" msgid "VPN is not running" msgstr "Le VPN n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "Paramètres du VPN" @@ -1061,9 +1103,9 @@ msgstr "Le VPN ne répond pas" msgid "Version" msgstr "Version" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "La passerelle et l'adresse IP du WAN sont identiques" @@ -1077,7 +1119,7 @@ msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé." msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "Assistant" @@ -1086,18 +1128,18 @@ msgstr "Assistant" msgid "You" msgstr "Vous" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 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:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 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:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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." @@ -1106,23 +1148,23 @@ msgstr "" "Choisissez autre si vous utilisez un autre protocole dans la page Réseau " "Interfaces." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 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:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 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:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 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:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 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 " @@ -1142,7 +1184,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:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "auto" @@ -1150,47 +1192,47 @@ msgstr "auto" msgid "empty key" msgstr "clef vide" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 #, fuzzy #| msgid "Interface" msgid "interface:" msgstr "Nom de l'interface" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "ip address:" msgstr "adresse ip :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 #, fuzzy #| msgid "ip address:" msgid "ipv6 address:" msgstr "adresse ip :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "latence :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "multipath :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "opérateur :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "Numéro de téléphone :" @@ -1198,29 +1240,29 @@ msgstr "Numéro de téléphone :" msgid "range:" msgstr "plage :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "État :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "Contrôle du trafic :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "wan address:" msgstr "adresse WAN :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 #, fuzzy #| msgid "wan address:" msgid "wan ipv6 address:" msgstr "adresse WAN :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "whois :" diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index f4ed681e5..330d1358f 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -10,35 +10,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "Chiave Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 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:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "Aggiungi un'interfaccia" @@ -47,11 +50,11 @@ msgstr "Aggiungi un'interfaccia" msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "Impostazioni avanzate" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -63,7 +66,7 @@ msgstr "" msgid "All router settings" msgstr "Impostazioni del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." @@ -71,12 +74,12 @@ msgstr "" "Un set di istruzioni Advanced Encryption Standard (AES) è integrato nel " "processore." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "Backup" @@ -97,24 +100,28 @@ 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:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "Ponte" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 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:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 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:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "CHAP" @@ -140,7 +147,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:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." @@ -148,13 +155,13 @@ msgstr "" "Scegli MacVLAN se desideri creare un'interfaccia virtuale basata su " "un'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "Scegli l'interfaccia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "Impostazioni comuni del server" @@ -162,12 +169,12 @@ msgstr "Impostazioni comuni del server" msgid "Core temp:" msgstr "Temp. Nucleo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 #, fuzzy #| msgid "DHCP" msgid "DHCPv6" @@ -181,22 +188,22 @@ msgstr "Problema DNS: impossibile risolvere il nome host" msgid "Debug" msgstr "Debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "Default Proxy" msgstr "Proxy predefinito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "VPN predefinita" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "Elimina" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "Dispositivo" @@ -252,7 +259,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Etichetta per l'interfaccia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Disable server" msgstr "Disabilita il server" @@ -268,13 +275,13 @@ 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:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "Disabilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "Velocità di download (Kb / s)" @@ -283,11 +290,11 @@ msgid "Dynamic change" msgstr "Cambiamento dinamico" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "Abilita IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "Abilita MQ" @@ -303,17 +310,17 @@ msgstr "Abilita TCP bassa latenza" msgid "Enable debug logs" msgstr "Abilita registro di debug" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "Abilitato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "Crittografia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "" "Il metodo di crittografia viene utilizzato per Shadowsocks, V2Ray, Glorytun " @@ -323,31 +330,36 @@ msgstr "" msgid "Filesystem is readonly" msgstr "Il filesystem è di sola lettura" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 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:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "Force retrieve settings" msgstr "Forza il recupero delle impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "Solo GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "Tipi di pagamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +#, fuzzy +#| msgid "Gateway DOWN" +msgid "Gateway IPv6 DOWN" +msgstr "Tipi di pagamento" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "Chiave Glorytun" @@ -389,44 +401,44 @@ msgstr "IPv4 TCP SYN retries1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN retries2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "Netmask IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "Prefisso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 #, fuzzy #| msgid "IPv4 address" msgid "IPv6 address" msgstr "Indirizzi IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 #, fuzzy #| msgid "IPv4 gateway" msgid "IPv6 gateway" msgstr "Gateway IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "Instradamento IPv6 ricevuto" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 msgid "IPv6 settings" msgstr "Impostazioni IPv6" @@ -438,22 +450,22 @@ msgstr "Tunnel IPv6 GIÙ" msgid "IPv6:" msgstr "IPv6:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "Impostazioni delle interfacce" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -461,21 +473,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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 msgid "LAN interfaces settings" msgstr "Impostazioni delle interfacce LAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "Etichetta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "Etichetta per l'interfaccia" @@ -493,12 +505,12 @@ msgstr "Ultima versione disponibile" msgid "Load:" msgstr "Carico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "Password MLVPN" @@ -510,16 +522,29 @@ 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:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "MPTCP su VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#, fuzzy +#| msgid "MPTCP over VPN" +msgid "MPTCP over VPN settings" +msgstr "MPTCP su VPN" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "Principale" @@ -535,15 +560,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:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "Impostazione predefinita del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "Timeout inizializzazione modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "ModemManager" @@ -551,43 +576,49 @@ 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:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "Lo stato corrente di Multipath è" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "Multipath master già definito" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "Multipath sembra essere bloccato sulla connessione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "NESSUNO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#, fuzzy +#| msgid "Network interface duplicated" +msgid "Network interface MAC address duplicated" +msgstr "Interfaccia di rete duplicata" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "Interfaccia di rete duplicata" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "Panoramica della rete" @@ -595,8 +626,8 @@ msgstr "Panoramica della rete" msgid "Networks settings" msgstr "Impostazioni reti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "Nessun IP definito" @@ -604,8 +635,8 @@ msgstr "Nessun IP definito" msgid "No IPv6 access" msgstr "Nessun accesso IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "Nessuna risposta al ping del server dopo 1 secondo" @@ -613,7 +644,7 @@ msgstr "Nessuna risposta al ping del server dopo 1 secondo" msgid "No WAN IP address detected in less than 1 second" msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -625,12 +656,12 @@ msgstr "Nessun backup disponibile sul server." msgid "No change" msgstr "Nessun cambiamento" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "Nessun dato" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "Nessun gateway definito" @@ -647,11 +678,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:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "Nessuno" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "Normale" @@ -679,17 +710,17 @@ 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 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 " @@ -699,7 +730,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN non può essere utilizzato nella configurazione multi VPS." @@ -707,8 +738,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:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "Other" msgstr "Altro" @@ -716,52 +747,52 @@ msgstr "Altro" msgid "Other settings" msgstr "Altre impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "PAP/CHAP password" msgstr "PAP/CHAP password" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "Nome utente PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "Codice PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Physical interface" msgstr "Interfaccia fisica" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "Preferisci LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "Preferisci UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 #, fuzzy #| msgid "Server IP" msgid "Primary server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "Protocollo" @@ -769,7 +800,7 @@ msgstr "Protocollo" msgid "Proxy is DISABLED" msgstr "Il proxy è DISABILITATO" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "Proxy settings" msgstr "Impostazioni Proxy" @@ -777,7 +808,7 @@ msgstr "Impostazioni Proxy" msgid "Proxy traffic:" msgstr "Traffico proxy:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "QMI" @@ -785,16 +816,20 @@ msgstr "QMI" msgid "Redirects all ports from server to this router" msgstr "Reindirizza tutte le porte dal server a questo router" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Ripristina backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 msgid "Retrieve settings from server" msgstr "Recupera le impostazioni dal server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "Salva e applica" @@ -810,13 +845,13 @@ msgstr "Salva le statistiche di vnstats" msgid "Scaling governor" msgstr "Governatore in scala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 #, fuzzy #| msgid "Server IP" msgid "Secondary server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." @@ -824,50 +859,57 @@ msgstr "Seleziona il dispositivo su cui vuoi basare l'interfaccia." msgid "Send backup" msgstr "Invia backup" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "Indirizzo IP del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 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:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "Chiave server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "Impostazioni server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "Nome utente del server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 msgid "Service Type" msgstr "Tipo di servizio" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 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:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "Imposta qui l'IP del modem" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "Imposta server come master" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -875,7 +917,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:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -887,14 +929,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:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -909,12 +951,12 @@ msgstr "Configurazione guidata" msgid "ShadowSocks is not running" msgstr "ShadowSocks non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks viene utilizzato per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "Chiave ShadowSocks" @@ -922,8 +964,8 @@ msgstr "Chiave ShadowSocks" msgid "Show all settings" msgstr "Mostra tutte le impostazioni" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "Indirizzo statico" @@ -945,7 +987,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:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -975,20 +1017,20 @@ msgstr "" msgid "Total traffic:" msgstr "Traffico globale:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "Tipo" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "Password UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -1008,7 +1050,7 @@ msgstr "" msgid "Update server" msgstr "Aggiorna server" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "Velocità di caricamento (Kb / s)" @@ -1017,8 +1059,8 @@ msgstr "Velocità di caricamento (Kb / s)" msgid "Uptime:" msgstr "Tempo di funzionamento:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 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." @@ -1026,20 +1068,20 @@ 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:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray è utilizzato per TCP e UDP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "Utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "ID utente V2Ray" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 #, fuzzy #| msgid "MacVLAN" msgid "VLAN" @@ -1049,7 +1091,7 @@ msgstr "MacVLAN" msgid "VPN is not running" msgstr "VPN non è in esecuzione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "Impostazioni VPN" @@ -1065,9 +1107,9 @@ msgstr "Tunnel VPN non stabilito" msgid "Version" msgstr "Versione" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "IP Wan e gateway sono identici" @@ -1083,7 +1125,7 @@ msgstr "" msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "Wizard" @@ -1092,37 +1134,37 @@ msgstr "Wizard" msgid "You" msgstr "Ti" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 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:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 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:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 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:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 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:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 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:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "" "È necessario disabilitare SQM per LTE o qualsiasi interfaccia con velocità " @@ -1140,7 +1182,7 @@ msgstr "Il tuo IP non è stato affittato da questo router" msgid "address:" msgstr "Indirizzo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "Auto" @@ -1148,47 +1190,47 @@ msgstr "Auto" msgid "empty key" msgstr "chiave vuota" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 #, fuzzy #| msgid "Add an interface" msgid "interface:" msgstr "Aggiungi un'interfaccia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "ip address:" msgstr "Indirizzo IP:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 #, fuzzy #| msgid "ip address:" msgid "ipv6 address:" msgstr "Indirizzo IP:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "latenza:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "mtu:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "multipath:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "operatore:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "Altro" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "numero di telefono:" @@ -1196,29 +1238,29 @@ msgstr "numero di telefono:" msgid "range:" msgstr "intervallo:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "stato:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "controllo del traffico:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "wan address:" msgstr "indirizzo wan:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 #, fuzzy #| msgid "wan address:" msgid "wan ipv6 address:" msgstr "indirizzo wan:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "whois:" diff --git a/luci-app-openmptcprouter/po/oc/openmptcprouter.po b/luci-app-openmptcprouter/po/oc/openmptcprouter.po index d58ea87b6..8ac446903 100644 --- a/luci-app-openmptcprouter/po/oc/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/oc/openmptcprouter.po @@ -10,38 +10,41 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "Clau Dead Simple VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 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:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 #, fuzzy #| msgid "Add server" msgid "Add a new server" msgstr "Ajustar un servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "Ajustar una interfàcia" @@ -50,11 +53,11 @@ msgstr "Ajustar una interfàcia" msgid "Advanced Settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "Paramètres avançats" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -66,18 +69,18 @@ msgstr "" msgid "All router settings" msgstr "Totes los paramètres del router" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 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:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "Tipe d’autentificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "Salvagarda" @@ -98,22 +101,26 @@ 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:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "Pont" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 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:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 #, 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:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "CHAP" @@ -137,19 +144,19 @@ msgstr "" msgid "Can\\'t ping server" msgstr "Cap de responsa del servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 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:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "Causissètz l’interfàcia fisica." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "Paramètres dels servidors" @@ -157,12 +164,12 @@ msgstr "Paramètres dels servidors" msgid "Core temp:" msgstr "Temperatura del còr :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 #, fuzzy #| msgid "DHCP" msgid "DHCPv6" @@ -176,24 +183,24 @@ msgstr "" msgid "Debug" msgstr "Desbugatge" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 #, fuzzy #| msgid "Default VPN" msgid "Default Proxy" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "VPN per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "Suprimir" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "Periferic" @@ -252,7 +259,7 @@ msgstr "" msgid "Disable renaming interfaces" msgstr "Etiqueta per l’interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 #, fuzzy #| msgid "Disable server ping" msgid "Disable server" @@ -272,13 +279,13 @@ 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:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "Desactivat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "Velocitat de telecargament (Kb/s)" @@ -287,11 +294,11 @@ msgid "Dynamic change" msgstr "Cambiament dinamic" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "Activar l’IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "Active SQM" @@ -309,17 +316,17 @@ msgstr "Desactivar TCP Fast Open" msgid "Enable debug logs" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "Activat" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "Chiframent" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 #, fuzzy #| msgid "Encryption method is also used for Glorytun." msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." @@ -329,7 +336,7 @@ msgstr "Metòde de chiframent utilizat per Glorytun." msgid "Filesystem is readonly" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 #, fuzzy #| msgid "API username to retrieve personnalized settings from the server." msgid "Force retrieve all keys from server." @@ -337,28 +344,33 @@ msgstr "" "Nom d’utilizaire per recuperar la configuracion personalizada del servidor " "estant." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 #, fuzzy #| msgid "Server settings" msgid "Force retrieve settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "solament GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "La palanca respond pas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +#, fuzzy +#| msgid "Gateway DOWN" +msgid "Gateway IPv6 DOWN" +msgstr "La palanca respond pas" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 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:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "Clau Glorytun" @@ -402,44 +414,44 @@ msgstr "Ensages IPv4 TCP SYN" msgid "IPv4 TCP SYN retries2" msgstr "Ensages IPv4 TCP SYN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "Masqueta ret IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "Prefix IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 #, fuzzy #| msgid "IPv4 address" msgid "IPv6 address" msgstr "Adreça IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 #, fuzzy #| msgid "IPv4 gateway" msgid "IPv6 gateway" msgstr "Palanca IPv4" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 #, fuzzy #| msgid "VPN settings" msgid "IPv6 settings" @@ -453,20 +465,20 @@ msgstr "Lo tunèl IPv6 respond pas" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "Key is retrieved from server API by default." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 msgid "" "Key to configure and retrieve others keys from Server and to set server " "settings from OpenMPTCProuter." @@ -474,23 +486,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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 #, fuzzy #| msgid "Interfaces settings" msgid "LAN interfaces settings" msgstr "Paramètres interfàcias" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "Etiqueta" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "Etiqueta per l’interfàcia" @@ -508,13 +520,13 @@ msgstr "Darrièra salvagarda disponibla sul servidor" msgid "Load:" msgstr "Carga :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 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:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "Senhal MLVPN" @@ -526,16 +538,29 @@ 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:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "MPTCP over VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#, fuzzy +#| msgid "MPTCP over VPN" +msgid "MPTCP over VPN settings" +msgstr "MPTCP over VPN" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "MacVLAN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "Principal" @@ -551,15 +576,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:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "Modem per defaut" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "ModemManager" @@ -567,43 +592,49 @@ msgstr "ModemManager" msgid "More than one default VPN is enabled" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "Multipath TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "Multipath es actualament" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "CAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#, fuzzy +#| msgid "Network interface duplicated" +msgid "Network interface MAC address duplicated" +msgstr "Interfàcia ret doblada" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "Interfàcia ret doblada" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "Vista ret" @@ -611,8 +642,8 @@ msgstr "Vista ret" msgid "Networks settings" msgstr "Paramètres ret" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "Cap d’IP pas definida" @@ -620,8 +651,8 @@ msgstr "Cap d’IP pas definida" msgid "No IPv6 access" msgstr "Cap d’accès IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "" @@ -629,7 +660,7 @@ msgstr "" msgid "No WAN IP address detected in less than 1 second" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -641,12 +672,12 @@ msgstr "Cap de salvagarda pas disponibla sul servidor." msgid "No change" msgstr "Cap de modificacion" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "Cap de donadas" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "Cap de palanca pas definida" @@ -665,11 +696,11 @@ msgstr "" msgid "No server defined" msgstr "Paramètres dels servidors" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "Cap" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "Normala" @@ -695,17 +726,17 @@ 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:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 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 " @@ -715,7 +746,7 @@ msgstr "" msgid "OpenMPTCProuter" msgstr "OpenMPTCProuter" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "" @@ -723,8 +754,8 @@ msgstr "" msgid "Optimize for latency instead of bandwidth" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "Other" msgstr "Autre" @@ -734,56 +765,56 @@ msgstr "Autre" msgid "Other settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 #, fuzzy #| msgid "MLVPN password" msgid "PAP/CHAP password" msgstr "Senhal MLVPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "Identificant PAP / CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "Còdi PIN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "PPPoE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 #, fuzzy #| msgid "Add an interface" msgid "Physical interface" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "Preferir LTE" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "Preferir UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 #, fuzzy #| msgid "Server IP" msgid "Primary server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "Protocòl" @@ -791,7 +822,7 @@ msgstr "Protocòl" msgid "Proxy is DISABLED" msgstr "Lo servidor mandatari es DESACTIVAT" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 #, fuzzy #| msgid "VPN settings" msgid "Proxy settings" @@ -801,7 +832,7 @@ msgstr "Paramètres del VPN" msgid "Proxy traffic:" msgstr "Trafic mandatari :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "QMI" @@ -809,16 +840,20 @@ msgstr "QMI" msgid "Redirects all ports from server to this router" msgstr "Redigir totes los pòrts del servidor cap a aqueste router" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "Restaurar salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 msgid "Retrieve settings from server" msgstr "Recuperar la configuracion personalizada del servidor estant" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "Salvagardar e aplicar" @@ -834,13 +869,13 @@ msgstr "Salvagardar las estatisticas de vnstats" msgid "Scaling governor" msgstr "Regulator a l’escala" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 #, fuzzy #| msgid "Server IP" msgid "Secondary server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "Seleccionatz lo periferic per l’interfàcia." @@ -848,53 +883,60 @@ msgstr "Seleccionatz lo periferic per l’interfàcia." msgid "Send backup" msgstr "Enviar la salvagarda" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "IP servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 #, 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:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "Clau servidor" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "Paramètres servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "Lo nom d'utilizaire servidor" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 msgid "Service Type" msgstr "Tipe de servici" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 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:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "Botatz l’IP del modem aquí" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "Configurar lo servidor coma servidor màger" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -906,7 +948,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:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 #, fuzzy #| msgid "" #| "Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, " @@ -918,14 +960,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:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "" @@ -942,12 +984,12 @@ msgstr "Assistent de configuracion" msgid "ShadowSocks is not running" msgstr "Paramètres ShadowSocks" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks es utilizat per TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "Clau de ShadowSocks" @@ -955,8 +997,8 @@ msgstr "Clau de ShadowSocks" msgid "Show all settings" msgstr "Veire totes los paramètres" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "Adreça estatica" @@ -975,7 +1017,7 @@ msgid "" "local end." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -1000,21 +1042,21 @@ msgstr "" msgid "Total traffic:" msgstr "Tradif total :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "Tipe" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 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:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "Senhal UBOND" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "UMTS / GPRS" @@ -1033,7 +1075,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:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "Velocitat de mandadís (Kb/s)" @@ -1042,8 +1084,8 @@ msgstr "Velocitat de mandadís (Kb/s)" msgid "Uptime:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 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 " @@ -1053,22 +1095,22 @@ msgstr "" msgid "V2Ray is not running" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #, 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:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 #, fuzzy #| msgid "MacVLAN" msgid "VLAN" @@ -1080,7 +1122,7 @@ msgstr "MacVLAN" msgid "VPN is not running" msgstr "Paramètres del VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "Paramètres del VPN" @@ -1096,9 +1138,9 @@ msgstr "" msgid "Version" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "" @@ -1113,7 +1155,7 @@ msgstr "" msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "Assistent" @@ -1122,16 +1164,16 @@ msgstr "Assistent" msgid "You" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 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:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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." @@ -1139,21 +1181,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:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 msgid "You can use a public IPv6 prefix only if you set only one server." msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 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:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 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:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 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 " @@ -1171,7 +1213,7 @@ msgstr "" msgid "address:" msgstr "Adreça IPv4 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "auto" @@ -1179,47 +1221,47 @@ msgstr "auto" msgid "empty key" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 #, fuzzy #| msgid "Add an interface" msgid "interface:" msgstr "Ajustar una interfàcia" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "ip address:" msgstr "Adreça IP :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 #, fuzzy #| msgid "ip address:" msgid "ipv6 address:" msgstr "Adreça IP :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "autre" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "" @@ -1227,29 +1269,29 @@ msgstr "" msgid "range:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "wan address:" msgstr "Adreça wan :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 #, fuzzy #| msgid "wan address:" msgid "wan ipv6 address:" msgstr "Adreça wan :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "" diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index acc389441..8325c6221 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -13,34 +13,37 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.0.4\n" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 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:269 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 msgid "A Dead Simple VPN key" msgstr "简单VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:89 msgid "" -"A secondary server IP can be set for dual IPv4/IPv6 server contact if WAN " -"IPv6 are set" +"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:100 msgid "API username to retrieve personnalized settings from the server." msgstr "API用户名,以从聚合服务器检索个性化设置." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:732 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:776 msgid "APN" msgstr "APN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:695 +msgid "Accept IPv6 RA" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145 msgid "Add a new server" msgstr "添加一个新聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:912 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:956 msgid "Add an interface" msgstr "添加网卡" @@ -49,11 +52,11 @@ msgstr "添加网卡" msgid "Advanced Settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:140 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152 msgid "Advanced settings" msgstr "高级设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "All VPN available here can do aggregation over MPTCP or using own internal " "method." @@ -63,18 +66,18 @@ msgstr "这里可用的所有VPN都可以通过MPTCP或使用自己的内部进 msgid "All router settings" msgstr "所有路由器设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:243 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:255 msgid "" "An Advanced Encryption Standard (AES) instruction set is integrated in the " "processor." msgstr "处理器中集成了高级加密标准(AES)指令集." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:758 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:802 msgid "Authentication Type" msgstr "认证类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:812 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 msgid "Backup" msgstr "备份" @@ -95,20 +98,24 @@ msgstr "测试版" msgid "Big time difference between the server and the router" msgstr "服务器和路由器之间的时间差距很大" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:496 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:525 msgid "Bridge" msgstr "桥接" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:602 +msgid "Bridge can't have multipath enabled" +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:266 msgid "By default VPN is used for any traffic that is not TCP." msgstr "默认情况下,VPN用于非TCP的任何流量." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 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:763 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:807 msgid "CHAP" msgstr "CHAP" @@ -132,19 +139,19 @@ msgstr "无法通过聚合服务器ShadowSocks获取公网IP地址" msgid "Can\\'t ping server" msgstr "无法ping聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:500 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 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:434 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:572 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:463 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:549 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 msgid "Choose physical interface." msgstr "选择物理接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:138 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 msgid "Common server settings" msgstr "通用服务器设置聚合" @@ -152,12 +159,12 @@ msgstr "通用服务器设置聚合" msgid "Core temp:" msgstr "核心温度:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:386 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:531 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:560 msgid "DHCP" msgstr "DHCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:532 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:561 #, fuzzy #| msgid "DHCP" msgid "DHCPv6" @@ -171,22 +178,22 @@ msgstr "DNS问题:无法解析主机名" msgid "Debug" msgstr "调试模式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:202 msgid "Default Proxy" msgstr "默认代理" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:304 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:316 msgid "Default VPN" msgstr "默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:63 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:475 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:66 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:504 msgid "Delete" msgstr "删除" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:685 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:706 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:702 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:729 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 msgid "Device" msgstr "设备" @@ -235,7 +242,7 @@ msgstr "禁用防火墙中定义的从服务器到此路由器的端口重定向 msgid "Disable renaming interfaces" msgstr "禁用网卡重命名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:121 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133 msgid "Disable server" msgstr "关闭禁用聚合服务器" @@ -251,13 +258,13 @@ msgstr "禁用服务器ping状态检查" msgid "Disable tracebox test" msgstr "禁用跟踪框测试" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:166 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:810 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:838 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:854 msgid "Disabled" msgstr "关闭" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:856 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:900 msgid "Download speed (Kb/s)" msgstr "下载速度 (Kb/s)" @@ -266,11 +273,11 @@ msgid "Dynamic change" msgstr "动态变化" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:187 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:175 msgid "Enable IPv6" msgstr "开启 IPv6" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:846 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:890 msgid "Enable SQM" msgstr "开启 SQM" @@ -286,17 +293,17 @@ msgstr "启用TCP低延迟" msgid "Enable debug logs" msgstr "启用调试日志" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:837 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:853 msgid "Enabled" msgstr "开启" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:226 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238 msgid "Encryption" msgstr "加密" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" @@ -304,30 +311,35 @@ msgstr "加密方法用于Shadowsocks,V2Ray,Glorytun和OpenVPN。" msgid "Filesystem is readonly" msgstr "文件系统处于只读状态/重新刷机吧" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:155 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:167 msgid "Force retrieve all keys from server." msgstr "强制从服务器检索并应用所有密钥。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:150 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162 msgid "Force retrieve settings" msgstr "强制检索设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:752 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:796 msgid "GPRS only" msgstr "仅GPRS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:552 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:555 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:727 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:554 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:739 msgid "Gateway DOWN" msgstr "网关不通" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:557 +#, fuzzy +#| msgid "Gateway DOWN" +msgid "Gateway IPv6 DOWN" +msgstr "网关不通" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 msgid "Glorytun TCP is used by default for UDP and ICMP" msgstr "Glorytun TCP默认用于UDP和ICMP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:259 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:269 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:271 msgid "Glorytun key" msgstr "Glorytun密钥" @@ -367,44 +379,44 @@ msgstr "IPv4 TCP SYN重试1" msgid "IPv4 TCP SYN retries2" msgstr "IPv4 TCP SYN重试2" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:442 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:578 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:471 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:614 msgid "IPv4 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:630 msgid "IPv4 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:448 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:477 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:624 msgid "IPv4 netmask" msgstr "IPv4网络掩码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:176 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:188 msgid "IPv6 Prefix" msgstr "IPv6前缀" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:608 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:644 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:671 #, fuzzy #| msgid "IPv4 address" msgid "IPv6 address" msgstr "IPv4地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:622 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:645 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:681 #, fuzzy #| msgid "IPv4 gateway" msgid "IPv6 gateway" msgstr "IPv4网关" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:600 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:612 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:779 msgid "IPv6 route received" msgstr "经过的IPv6路由" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:161 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 msgid "IPv6 settings" msgstr "IPv6设置" @@ -416,40 +428,40 @@ msgstr "IPv6隧道DOWN" msgid "IPv6:" msgstr "IPv6 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:461 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:490 msgid "Interfaces settings" msgstr "接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:274 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "Key is retrieved from server API by default." msgstr "默认情况下,密钥是从服务器API检索的." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:98 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:110 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:359 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:388 msgid "LAN interfaces settings" msgstr "局域网接口设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:750 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:794 msgid "LTE" msgstr "4G LTE制式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:510 msgid "Label" msgstr "标签" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:486 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:405 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:515 msgid "Label for the interface" msgstr "接口标签" @@ -467,12 +479,12 @@ msgstr "最新可用的版本" msgid "Load:" msgstr "负载:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 msgid "MLVPN can replace Glorytun with connections with same latency" msgstr "MLVPN可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:281 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "MLVPN password" msgstr "MLVPN密码" @@ -484,16 +496,29 @@ msgstr "服务器上未启用MPTCP" msgid "MPTCP may not be enabled on the server" msgstr "服务器上可能未启用MPTCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:836 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:372 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:880 msgid "MPTCP over VPN" msgstr "通过MPTCP的VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:369 +#, fuzzy +#| msgid "MPTCP over VPN" +msgid "MPTCP over VPN settings" +msgstr "通过MPTCP的VPN" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370 +msgid "" +"MPTCP over VPN should be used only when Multipath TCP is blocked on a " +"connection." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:524 msgid "MacVLAN" msgstr "Macvlan" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:811 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:839 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:855 msgid "Master" msgstr "主" @@ -509,15 +534,15 @@ msgstr "最大扩展CPU频率" msgid "Minimum scaling CPU frequency" msgstr "最小扩展CPU频率" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:747 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:791 msgid "Modem default" msgstr "调制解调器默认" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:781 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Modem init timeout" msgstr "调制解调器初始化超时" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:533 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:562 msgid "ModemManager" msgstr "调制解调器管理器" @@ -525,43 +550,49 @@ msgstr "调制解调器管理器" msgid "More than one default VPN is enabled" msgstr "启用了多个默认VPN" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:790 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:834 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:850 msgid "Multipath TCP" msgstr "多路径TCP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:589 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:756 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:585 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:591 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:768 msgid "Multipath current state is" msgstr "多路径当前状态为" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:578 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:745 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:580 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:757 msgid "Multipath master already defined" msgstr "已定义多路径主机" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:558 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:730 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:560 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:742 msgid "Multipath seems to be blocked on the connection" msgstr "多路径似乎在连接上被阻止" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "NCM" msgstr "NCM" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:761 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:805 msgid "NONE" msgstr "无" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:595 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 +#, fuzzy +#| msgid "Network interface duplicated" +msgid "Network interface MAC address duplicated" +msgstr "网络接口重复" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:597 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:774 msgid "Network interface duplicated" msgstr "网络接口重复" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:862 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:864 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:874 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:876 msgid "Network overview" msgstr "网络概览" @@ -569,8 +600,8 @@ msgstr "网络概览" msgid "Networks settings" msgstr "网络设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:545 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:547 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:732 msgid "No IP defined" msgstr "没有定义IP" @@ -578,8 +609,8 @@ msgstr "没有定义IP" msgid "No IPv6 access" msgstr "没有IPv6地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:562 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:734 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:746 msgid "No Server ping response after 1 second" msgstr "1秒后无服务器ping响应" @@ -587,7 +618,7 @@ msgstr "1秒后无服务器ping响应" msgid "No WAN IP address detected in less than 1 second" msgstr "不到1秒内未检测到WAN IP地址" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:631 msgid "No WAN with multipath enabled:" msgstr "" @@ -599,12 +630,12 @@ msgstr "服务器上没有可用的备份." msgid "No change" msgstr "没有改变" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:794 msgid "No data" msgstr "没有数据" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:549 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:551 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:736 msgid "No gateway defined" msgstr "未定义网关" @@ -621,11 +652,11 @@ msgstr "没有服务器IP地址,没有WAN IP地址" msgid "No server defined" msgstr "未定义聚合服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:232 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:244 msgid "None" msgstr "没有" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:494 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:523 msgid "Normal" msgstr "正常" @@ -651,17 +682,17 @@ msgstr "双方都将启用混淆" msgid "On wizard change" msgstr "通过向导更改" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:200 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:212 msgid "Only ShadowSocks is supported with server multiple IPs for now." msgstr "目前服务器如果有多个公网IP仅支持ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:800 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:844 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "必须仅将一个接口设置为“主”,这应该是最稳定的接口。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:112 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124 msgid "Only one server can be master, else all servers are set as backup." msgstr "只能将一台服务器作为主服务器,否则将所有服务器都设置为备用服务器." @@ -669,7 +700,7 @@ msgstr "只能将一台服务器作为主服务器,否则将所有服务器都 msgid "OpenMPTCProuter" msgstr "聚合路由器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "OpenVPN can't be used in multi VPS configuration." msgstr "OpenVPN不能用于多VPS配置." @@ -677,8 +708,8 @@ msgstr "OpenVPN不能用于多VPS配置." msgid "Optimize for latency instead of bandwidth" msgstr "优化延迟而不是带宽" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:387 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:537 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:416 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:566 msgid "Other" msgstr "其他" @@ -686,52 +717,52 @@ msgstr "其他" msgid "Other settings" msgstr "聚合其他设置" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:762 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:806 msgid "PAP" msgstr "PAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:764 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:808 msgid "PAP/CHAP" msgstr "PAP/CHAP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:775 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:819 msgid "PAP/CHAP password" msgstr "PAP/CHAP 密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:813 msgid "PAP/CHAP username" msgstr "PAP/CHAP 账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:782 msgid "PIN code" msgstr "PIN码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:535 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "PPPoE" msgstr "PPPoE拨号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:505 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:546 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:428 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:534 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:575 msgid "Physical interface" msgstr "物理接口" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:748 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:792 msgid "Prefer LTE" msgstr "首选4G LTE制式" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:749 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:793 msgid "Prefer UMTS" msgstr "首选3G UMTS" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 #, fuzzy #| msgid "Server IP" msgid "Primary server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:381 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:526 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:555 msgid "Protocol" msgstr "协议" @@ -739,7 +770,7 @@ msgstr "协议" msgid "Proxy is DISABLED" msgstr "代理已禁用" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 msgid "Proxy settings" msgstr "代理设置" @@ -747,7 +778,7 @@ msgstr "代理设置" msgid "Proxy traffic:" msgstr "代理流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:536 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:565 msgid "QMI" msgstr "QMI" @@ -755,16 +786,20 @@ msgstr "QMI" msgid "Redirects all ports from server to this router" msgstr "将所有端口从服务器重定向到此路由器" +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:966 +msgid "Reset" +msgstr "" + #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" msgstr "恢复备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:148 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:160 msgid "Retrieve settings from server" msgstr "从服务器检索设置" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:352 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:965 msgid "Save & Apply" msgstr "保存并且应用设置" @@ -780,13 +815,13 @@ msgstr "保存vnstats统计信息" msgid "Scaling governor" msgstr "超频" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:84 #, fuzzy #| msgid "Server IP" msgid "Secondary server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:915 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:959 msgid "Select the device you want to base the interface on." msgstr "选择要作为基础的接口." @@ -794,50 +829,57 @@ msgstr "选择要作为基础的接口." msgid "Send backup" msgstr "发送备份" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:69 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:81 msgid "Server IP" msgstr "服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:74 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:76 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:86 msgid "Server IP will be set for proxy and VPN" msgstr "将为代理和VPN设置服务器IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:105 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 msgid "Server key" msgstr "服务器密钥" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:43 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:53 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:56 msgid "Server settings" msgstr "聚合服务器设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:85 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:97 msgid "Server username" msgstr "服务器用户名" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:744 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:788 msgid "Service Type" msgstr "服务类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:583 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:613 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:640 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:380 +msgid "Set VPN to use for MPTCP over VPN." +msgstr "" + +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:649 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:676 msgid "Set an IP in the same network as the modem" msgstr "在与调制解调器相同的网络中设置IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:627 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:650 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:635 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:663 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:686 msgid "Set here IP of the modem" msgstr "在此处设置调制解调器的IP" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119 msgid "Set server as master" msgstr "将服务器设置为主服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:199 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." @@ -845,7 +887,7 @@ msgstr "" "设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代" "理." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:351 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:363 msgid "" "Set the default VPN used for ICMP (and UDP if proxy used is shadowsocks), " "for all traffic if proxy is disabled." @@ -853,12 +895,12 @@ msgstr "" "启用ShadowSocks时,为所有流量设置默认的VPN,用于UDP和ICMP,如果禁用" "ShadowSocks." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:866 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:910 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:882 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:926 msgid "" "Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS." msgstr "设置为最大上传速度链接的80-95%之间的值。 0禁用SQM / QoS." @@ -871,12 +913,12 @@ msgstr "聚合设置向导" msgid "ShadowSocks is not running" msgstr "ShadowSocks n'est pas lancé" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:211 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 msgid "ShadowSocks is used for TCP." msgstr "ShadowSocks用于TCP." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:206 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:208 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:220 msgid "ShadowSocks key" msgstr "ShadowSocks密钥" @@ -884,8 +926,8 @@ msgstr "ShadowSocks密钥" msgid "Show all settings" msgstr "显示所有设定" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:385 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:530 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Static address" msgstr "静态地址" @@ -906,7 +948,7 @@ msgstr "" "孤立的(不再被任何应用程序引用)连接在本地端中止之前将保持FIN_WAIT_2状态的时" "间。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:245 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257 msgid "" "There is no Advanced Encryption Standard (AES) instruction set integrated in " "the processor, you should use chacha20." @@ -931,20 +973,20 @@ msgstr "当未确认RTO重传时,此值会影响有效TCP连接的超时。" msgid "Total traffic:" msgstr "总流量:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:520 msgid "Type" msgstr "类型" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:298 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:310 msgid "UBOND can replace Glorytun with connections with same latency" msgstr "UBOND可以用具有相同延迟的连接替换Glorytun" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:293 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:305 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "UBOND password" msgstr "UBOND密码" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:751 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:795 msgid "UMTS/GPRS" msgstr "UMTS/GPRS" @@ -961,7 +1003,7 @@ msgstr "远程将服务器更新到最新版本并重置它们。" msgid "Update server" msgstr "更新服务器" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:872 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:916 msgid "Upload speed (Kb/s)" msgstr "上传速度 (Kb/s)" @@ -970,8 +1012,8 @@ msgstr "上传速度 (Kb/s)" msgid "Uptime:" msgstr "运行时间:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:861 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:905 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:921 msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value." msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." @@ -979,20 +1021,20 @@ msgstr "如果启用,则由Glorytun UDP和使用SQM / QoS, 默认值0." msgid "V2Ray is not running" msgstr "V2Ray没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 msgid "V2Ray is used for TCP and UDP." msgstr "V2Ray用于TCP和UDP传输." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:218 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:230 msgid "V2Ray user" msgstr "V2Ray账号" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:216 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:228 msgid "V2Ray user id" msgstr "V2Ray账号ID" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:569 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:604 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 #, fuzzy #| msgid "MacVLAN" msgid "VLAN" @@ -1002,7 +1044,7 @@ msgstr "Macvlan" msgid "VPN is not running" msgstr "VPN没有运行" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:265 msgid "VPN settings" msgstr "VPN设置" @@ -1018,9 +1060,9 @@ msgstr "VPN隧道关闭" msgid "Version" msgstr "版本" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:566 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:738 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:568 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:573 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:750 msgid "Wan IP and gateway are identical" msgstr "WAN IP和网关相同" @@ -1036,7 +1078,7 @@ msgstr "启用后,将在外部站点上进行检查,以获取每个WAN IP和 msgid "When proxy shadowsocks is used, use it for UDP if VPN down" msgstr "当使用代理程序shadowsocks时,如果代理关闭则将其用于UDP协议" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:54 msgid "Wizard" msgstr "聚合向导" @@ -1045,15 +1087,15 @@ msgstr "聚合向导" msgid "You" msgstr "你" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:841 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:885 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:391 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420 msgid "You can use DHCP if you have multiple real ethernet ports." msgstr "如果您有多个真实的以太网端口,则可以使用DHCP。" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:541 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:570 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,19 +1103,19 @@ msgstr "" "如果您有多个真实的以太网端口,则可以使用DHCP。 如果要使用“网络接口”页面中可用" "的其他协议,请选择“其他”." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193 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:462 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:491 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:171 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183 msgid "You should disable IPv6 here if server doesn't provide IPv6." msgstr "如果服务器不提供IPv6,则应在此处禁用IPv6." -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:851 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:895 msgid "You should disable SQM for LTE or any interfaces with variable speed." msgstr "您应该为LTE或任何网速不稳的接口禁用SQM." @@ -1089,7 +1131,7 @@ msgstr "您访问的IP来源未通过此路由器" msgid "address:" msgstr "地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:753 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:797 msgid "auto" msgstr "自动" @@ -1097,47 +1139,47 @@ msgstr "自动" msgid "empty key" msgstr "空键" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:495 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:497 #, fuzzy #| msgid "Interface" msgid "interface:" msgstr "Nom de l'interface" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:479 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:700 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:481 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 msgid "ip address:" msgstr "IP地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:483 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:485 #, fuzzy #| msgid "ip address:" msgid "ipv6 address:" msgstr "IP地址:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:507 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:712 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:509 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:724 msgid "latency:" msgstr "时延:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:511 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:513 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:728 msgid "mtu:" msgstr "mtu :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:769 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:619 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:781 msgid "multipath:" msgstr "多路聚合:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:515 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:517 msgid "operator:" msgstr "运营商:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:236 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:248 msgid "other" msgstr "其他" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:519 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:521 msgid "phone number:" msgstr "电话号码:" @@ -1145,29 +1187,29 @@ msgstr "电话号码:" msgid "range:" msgstr "漫游:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:523 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:525 msgid "state:" msgstr "状态:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:610 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:772 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:622 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:784 msgid "traffic control:" msgstr "流量控制:" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:487 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:704 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:489 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:716 msgid "wan address:" msgstr "互联网地址 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:491 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:493 #, fuzzy #| msgid "wan address:" msgid "wan ipv6 address:" msgstr "互联网地址 :" -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:499 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:503 -#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:708 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:501 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:505 +#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:720 msgid "whois:" msgstr "whois查询 :" From 93839a8420791323b20c255248468f9f42a6a945 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Mar 2021 14:12:07 +0100 Subject: [PATCH 114/195] Add missing ' in all settings teb --- .../root/bin/anonymous_config.sh | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/luci-app-openmptcprouter/root/bin/anonymous_config.sh b/luci-app-openmptcprouter/root/bin/anonymous_config.sh index 80e67487c..b15183dae 100755 --- a/luci-app-openmptcprouter/root/bin/anonymous_config.sh +++ b/luci-app-openmptcprouter/root/bin/anonymous_config.sh @@ -1,23 +1,23 @@ #!/bin/sh uci show | \ - sed -e "/password=/s/......$/xxxxxx/" \ - -e "/detected_public_ipv4=/s/......$/xxxxxx/" \ - -e "/detected_ss_ipv4=/s/......$/xxxxxx/" \ - -e "/detected_public_ipv6=/s/......$/xxxxxx/" \ - -e "/detected_ss_ipv6=/s/......$/xxxxxx/" \ - -e "/publicip=/s/......$/xxxxxx/" \ - -e "/\.host=/s/......$/xxxxxx/" \ - -e "/\.ip=/s/......$/xxxxxx/" \ - -e "/\.ipv6=/s/......$/xxxxxx/" \ - -e "/user_id=/s/......$/xxxxxx/" \ - -e "/openvpn\.omr\.remote=/s/......$/xxxxxx/" \ - -e "/shadowsocks-libev\.sss.*\.server=/s/......$/xxxxxx/" \ - -e "/shadowsocks-libev\.sss.*\.key=/s/......$/xxxxxx/" \ - -e "/external_ip=/s/......$/xxxxxx/" \ - -e "/obfs_host=/s/......$/xxxxxx/" \ - -e "/vmess_address=/s/......$/xxxxxx/" \ - -e "/vless_address=/s/......$/xxxxxx/" \ - -e "/vpn\.key=/s/......$/xxxxxx/" \ - -e "/vps\.key=/s/......$/xxxxxx/" \ - -e "/token=/s/............$/xxxxxx/" \ No newline at end of file + sed -e "/password=/s/......$/xxxxxx'/" \ + -e "/detected_public_ipv4=/s/......$/xxxxxx'/" \ + -e "/detected_ss_ipv4=/s/......$/xxxxxx'/" \ + -e "/detected_public_ipv6=/s/......$/xxxxxx'/" \ + -e "/detected_ss_ipv6=/s/......$/xxxxxx'/" \ + -e "/publicip=/s/......$/xxxxxx'/" \ + -e "/\.host=/s/......$/xxxxxx'/" \ + -e "/\.ip=/s/......$/xxxxxx'/" \ + -e "/\.ipv6=/s/......$/xxxxxx'/" \ + -e "/user_id=/s/......$/xxxxxx'/" \ + -e "/openvpn\.omr\.remote=/s/......$/xxxxxx'/" \ + -e "/shadowsocks-libev\.sss.*\.server=/s/......$/xxxxxx'/" \ + -e "/shadowsocks-libev\.sss.*\.key=/s/......$/xxxxxx'/" \ + -e "/external_ip=/s/......$/xxxxxx'/" \ + -e "/obfs_host=/s/..........$/xxxxxx'/" \ + -e "/vmess_address=/s/......$/xxxxxx'/" \ + -e "/vless_address=/s/......$/xxxxxx'/" \ + -e "/vpn\.key=/s/......$/xxxxxx'/" \ + -e "/vps\.key=/s/......$/xxxxxx'/" \ + -e "/token=/s/............$/xxxxxx'/" \ No newline at end of file From ade033299944d9b5efbb4d04745ab5050f8b115a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 15 Mar 2021 15:41:27 +0100 Subject: [PATCH 115/195] Fix on bandwidth display --- luci-app-mptcp/luasrc/controller/mptcp.lua | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua index eb84bc718..53ead344f 100644 --- a/luci-app-mptcp/luasrc/controller/mptcp.lua +++ b/luci-app-mptcp/luasrc/controller/mptcp.lua @@ -118,12 +118,8 @@ function multipath_bandwidth() 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 + res[key][i][j]= tonumber(res[key][i][j]) + res["total"][i][j]= tonumber(res["total"][i][j]) if j ==1 then if res[key][i][j] ~= nil then res["total"][i][j] = res[key][i][j] From 1071323ea66d7781cb9c99a85f89613b6a447cec Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 16 Mar 2021 14:07:11 +0800 Subject: [PATCH 116/195] Update omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 33 ++++++++++++------------ 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 2c9e086e8..9d3d7e208 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -34,22 +34,23 @@ config defaults 'defaults' config proxy 'proxy' option enabled '1' - list hosts '1.2.4.8' - list hosts '114.114.114.114' - list hosts '223.5.5.5' - list hosts '223.6.6.6' - list hosts '210.2.4.8' - list hosts '180.76.76.76' - list hosts '182.254.116.116' - list hosts '114.114.115.115' - list hosts '199.85.126.10' - list hosts '199.85.127.10' - list hosts '199.85.126.20' - list hosts '199.85.127.20' - list hosts '199.85.126.30' - list hosts '199.85.126.30' - list hosts '119.29.29.29' - list hosts '182.254.118.118' + list hosts '116.162.9.8' + list hosts '123.58.180.7' + list hosts '49.7.40.103' + list hosts '49.7.40.106' + list hosts '59.36.206.8' + list hosts '59.36.206.7' + list hosts '59.36.206.4' + list hosts '59.36.206.2' + list hosts '59.36.206.1' + list hosts '59.36.206.3' + list hosts '212.27.48.10' + list hosts '198.27.92.1' + list hosts '151.101.129.164' + list hosts '77.88.55.77' + 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' From 0dd12e548595a34ddb7a940b3425ebacc6726cf2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 16 Mar 2021 09:30:31 +0100 Subject: [PATCH 117/195] Add mlvpn configuration to server --- .../files/etc/init.d/openmptcprouter-vps | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index f218d2d81..51cfe728c 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -128,7 +128,7 @@ _set_openvpn_vps() { current_key="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.client_key')" current_port="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.port')" current_cipher="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.cipher')" - if [ "$curent_key" != "$key" ]; then + if [ "$current_key" != "$key" ]; then uci -q set openmptcprouter.${servername}.get_config="1" fi if [ "$current_port" != "$port" ] || [ "$current_cipher" != "$cipher" ]; then @@ -140,6 +140,32 @@ _set_openvpn_vps() { fi } +_set_mlvpn_vps() { + local enabled port key + enabled="$(uci -q get mlvpn.general.enable)" + [ "$enabled" != "1" ] && echo "MLVPN disabled" && return + timeout="$(uci -q get mlvpn.general.timeout)" + reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)" + loss_tolerence="$(uci -q get mlvpn.general.loss_tolerence)" + password="$(uci -q get mlvpn.general.password)" + cleartext_data="$(uci -q get mlvpn.general.cleartext_data)" + local current_timeout current_reorder_buffer_size current_loss_tolerence current_password current_cleartext_data + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + current_timeout="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.timeout')" + current_reorder_buffer_size="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.reorder_buffer_size')" + current_loss_tolerence="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.loss_tolerence')" + current_password="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.key')" + current_cleartext_data="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.cleartext_data')" + if [ "$current_timeout" != "$timeout" ] || [ "$current_reorder_buffer_size" != "$reorder_buffer_size" ] || [ "$current_loss_tolerence" != "$loss_tolerence" ] || [ "$current_password" != "$password" ] || [ "$current_cleartext_data" != "$cleartext_data" ]; then + local settings + settings='{"timeout": '$timeout', "reorder_buffer_size": "'$reorder_buffer_size'", "loss_tolerence": "'$loss_tolerence'", "password": "'$password'", "cleartext_data": "'$cleartext_data'"}' + echo $(_set_json "mlvpn" "$settings") + else + echo 1 + fi +} + _set_wireguard_vps() { local enabled port key ipskey="" @@ -1729,6 +1755,7 @@ _config_service() { _set_v2ray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 + [ -z "$(_set_mlvpn_vps)" ] && error=1 _set_vps_firewall _set_wireguard_vps fi From 5d0ed06efa54d44ce7d6b876eafc812e388b39b2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 16 Mar 2021 09:30:45 +0100 Subject: [PATCH 118/195] Fix obfs --- shadowsocks-libev/files/shadowsocks-libev.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index fa1b1602d..3a453da4b 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -412,7 +412,7 @@ validate_common_server_options_() { 'plugin:string' \ 'plugin_opts:string' \ 'obfs:bool:0' \ - 'obfs_plugin:or("v2ray","obfs-simple"):v2ray' \ + 'obfs_plugin:or("v2ray","obfs"):v2ray' \ 'obfs_type:or("http","tls"):http' } From 054e9f5ac56a4bf3037491621540b6cf73b13a83 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 17 Mar 2021 03:54:07 +0800 Subject: [PATCH 119/195] Update omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 9d3d7e208..22cbee561 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -35,11 +35,21 @@ config defaults 'defaults' config proxy 'proxy' option enabled '1' list hosts '116.162.9.8' - list hosts '123.58.180.7' - list hosts '49.7.40.103' + list hosts '115.231.187.154' + list hosts '117.34.14.154' + list hosts '125.39.174.154' + list hosts '42.236.94.154' + list hosts '113.207.102.154' + list hosts '180.163.188.24' + list hosts '115.231.187.140' + list hosts '58.211.137.140' + list hosts '117.34.14.140' + list hosts '125.39.174.140' + list hosts '42.236.94.140' + list hosts '113.207.102.140' list hosts '49.7.40.106' - list hosts '59.36.206.8' - list hosts '59.36.206.7' + list hosts '115.231.187.137' + list hosts '113.207.102.137' list hosts '59.36.206.4' list hosts '59.36.206.2' list hosts '59.36.206.1' From 649b88cf7b612b7c5dbcee9c71d1198a3874b8d2 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 17 Mar 2021 18:13:18 +0800 Subject: [PATCH 120/195] Update omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 3 --- 1 file changed, 3 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 22cbee561..199edbd9f 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -34,9 +34,6 @@ config defaults 'defaults' config proxy 'proxy' option enabled '1' - list hosts '116.162.9.8' - list hosts '115.231.187.154' - list hosts '117.34.14.154' list hosts '125.39.174.154' list hosts '42.236.94.154' list hosts '113.207.102.154' From 0605f03e4e2dd5981a9ae948adc00a146350eadc Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 17 Mar 2021 18:15:40 +0800 Subject: [PATCH 121/195] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2fcba3bf7..ef6a56144 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: build: strategy: matrix: - OMR_TARGET: [rpi2, p2w_r619ac, r2s, x86_64, cm520-79f, nanopi_neo] + OMR_TARGET: [rpi2, rpi4, p2w_r619ac, r2s, x86_64, cm520-79f, nanopi_neo] runs-on: ubuntu-latest continue-on-error: true From eba4ec997f9c5b498f254e75c0f2fb6029bacdd7 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 17 Mar 2021 21:51:06 +0800 Subject: [PATCH 122/195] Update omr-tracker --- omr-tracker/files/etc/config/omr-tracker | 73 ++++++++---------------- 1 file changed, 25 insertions(+), 48 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 199edbd9f..6f9d1c258 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -1,56 +1,33 @@ config defaults 'defaults' option enabled '1' - list hosts '1.2.4.8' - list hosts '114.114.114.114' - list hosts '223.5.5.5' - list hosts '223.6.6.6' - list hosts '210.2.4.8' - list hosts '180.76.76.76' - list hosts '182.254.116.116' - list hosts '114.114.115.115' - list hosts '199.85.126.10' - list hosts '199.85.127.10' - list hosts '199.85.126.20' - list hosts '199.85.127.20' - list hosts '199.85.126.30' - list hosts '199.85.126.30' - list hosts '119.29.29.29' - list hosts '182.254.118.118' - list hosts6 '2400:3200::1 2400:3200:baba::1' - list hosts6 '2400:da00::6666' - list hosts6 '2606:4700:4700::1111' - list hosts6 '2606:4700:4700::1001' - list hosts6 '2620:fe::fe' - list hosts6 '2620:fe::9' - list hosts6 '2001:4860:4860::8888' - list hosts6 '2001:4860:4860::8844' - option timeout '10' - option tries '3' - option interval '2' - option interval_tries '1' - option type 'ping' - option wait_test '0' - option options '' + 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' + list hosts6 '2606:4700:4700::1111' + list hosts6 '2606:4700:4700::1001' + list hosts6 '2620:fe::fe' + list hosts6 '2620:fe::9' + list hosts6 '2001:4860:4860::8888' + list hosts6 '2001:4860:4860::8844' + option timeout '2' + option tries '3' + option interval '2' + option interval_tries '1' + option type 'ping' + option wait_test '0' + option options '' config proxy 'proxy' option enabled '1' - list hosts '125.39.174.154' - list hosts '42.236.94.154' - list hosts '113.207.102.154' - list hosts '180.163.188.24' - list hosts '115.231.187.140' - list hosts '58.211.137.140' - list hosts '117.34.14.140' - list hosts '125.39.174.140' - list hosts '42.236.94.140' - list hosts '113.207.102.140' - list hosts '49.7.40.106' - list hosts '115.231.187.137' - list hosts '113.207.102.137' - list hosts '59.36.206.4' - list hosts '59.36.206.2' - list hosts '59.36.206.1' - list hosts '59.36.206.3' + list hosts '1.0.0.1' list hosts '212.27.48.10' list hosts '198.27.92.1' list hosts '151.101.129.164' From b0c773f3fbc72af844ce3be1f036717c1ce6d85d Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 17 Mar 2021 21:51:52 +0800 Subject: [PATCH 123/195] Revert "Update omr-tracker" This reverts commit eba4ec997f9c5b498f254e75c0f2fb6029bacdd7. --- omr-tracker/files/etc/config/omr-tracker | 73 ++++++++++++++++-------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 6f9d1c258..199edbd9f 100755 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -1,33 +1,56 @@ 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' - list hosts6 '2606:4700:4700::1111' - list hosts6 '2606:4700:4700::1001' - list hosts6 '2620:fe::fe' - list hosts6 '2620:fe::9' - list hosts6 '2001:4860:4860::8888' - list hosts6 '2001:4860:4860::8844' - option timeout '2' - option tries '3' - option interval '2' - option interval_tries '1' - option type 'ping' - option wait_test '0' - option options '' + list hosts '1.2.4.8' + list hosts '114.114.114.114' + list hosts '223.5.5.5' + list hosts '223.6.6.6' + list hosts '210.2.4.8' + list hosts '180.76.76.76' + list hosts '182.254.116.116' + list hosts '114.114.115.115' + list hosts '199.85.126.10' + list hosts '199.85.127.10' + list hosts '199.85.126.20' + list hosts '199.85.127.20' + list hosts '199.85.126.30' + list hosts '199.85.126.30' + list hosts '119.29.29.29' + list hosts '182.254.118.118' + list hosts6 '2400:3200::1 2400:3200:baba::1' + list hosts6 '2400:da00::6666' + list hosts6 '2606:4700:4700::1111' + list hosts6 '2606:4700:4700::1001' + list hosts6 '2620:fe::fe' + list hosts6 '2620:fe::9' + list hosts6 '2001:4860:4860::8888' + list hosts6 '2001:4860:4860::8844' + option timeout '10' + option tries '3' + option interval '2' + option interval_tries '1' + option type 'ping' + option wait_test '0' + option options '' config proxy 'proxy' option enabled '1' - list hosts '1.0.0.1' + list hosts '125.39.174.154' + list hosts '42.236.94.154' + list hosts '113.207.102.154' + list hosts '180.163.188.24' + list hosts '115.231.187.140' + list hosts '58.211.137.140' + list hosts '117.34.14.140' + list hosts '125.39.174.140' + list hosts '42.236.94.140' + list hosts '113.207.102.140' + list hosts '49.7.40.106' + list hosts '115.231.187.137' + list hosts '113.207.102.137' + list hosts '59.36.206.4' + list hosts '59.36.206.2' + list hosts '59.36.206.1' + list hosts '59.36.206.3' list hosts '212.27.48.10' list hosts '198.27.92.1' list hosts '151.101.129.164' From 05aeea1bafbddaff2459d663ac34dfa7c44a07ec Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:44:55 +0100 Subject: [PATCH 124/195] Set a specific OMR version to package --- luci-app-firewall/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-firewall/Makefile b/luci-app-firewall/Makefile index 9d308b0e1..372169986 100644 --- a/luci-app-firewall/Makefile +++ b/luci-app-firewall/Makefile @@ -10,6 +10,7 @@ LUCI_TITLE:=Firewall and Portforwarding application LUCI_DEPENDS:=+firewall PKG_LICENSE:=Apache-2.0 +PKG_VERSION:=omr-202103 include $(TOPDIR)/feeds/luci/luci.mk From 2b40d1317b58de275f0b8a3a3c9845b8ea98ed60 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:45:06 +0100 Subject: [PATCH 125/195] Set a specific OMR version to package --- luci-app-https-dns-proxy/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-https-dns-proxy/Makefile b/luci-app-https-dns-proxy/Makefile index 80b150c5b..c6f2da879 100644 --- a/luci-app-https-dns-proxy/Makefile +++ b/luci-app-https-dns-proxy/Makefile @@ -11,6 +11,7 @@ LUCI_DESCRIPTION:=Provides Web UI for DNS Over HTTPS Proxy LUCI_DEPENDS:=+luci-compat +luci-mod-admin-full +https-dns-proxy LUCI_PKGARCH:=all PKG_RELEASE:=3 +PKG_VERSION:=omr-202103 include $(TOPDIR)/feeds/luci/luci.mk From c2d89b0d9346cf3606d77b4be47fc74b32afb63f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:45:44 +0100 Subject: [PATCH 126/195] Set IPv6 rules in omr-bypass only if IPv6 is enabled --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 4 ++-- 1 file changed, 2 insertions(+), 2 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 128d42e2b..119e8f4e5 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -179,7 +179,7 @@ _bypass_lan_ip() { -A omr-bypass-local -s $ip -j MARK --set-mark 0x539 COMMIT EOF - elif [ "$valid_ip6" = "ok" ]; then + elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then ip6tables-restore -w --wait=60 --noflush <<-EOF *mangle -A omr-bypass6 -s $ip -j MARK --set-mark 0x6539 @@ -198,7 +198,7 @@ _bypass_lan_ip() { -A omr-bypass-local -s $ip -j MARK --set-mark 0x539$intfid COMMIT EOF - elif [ "$valid_ip6" = "ok" ]; then + elif [ "$valid_ip6" = "ok" ] && [ "$disableipv6" = "0" ]; then ip6tables-restore -w --wait=60 --noflush <<-EOF *mangle -A omr-bypass6 -s $ip -j MARK --set-mark 0x6539$intfid From 0c83cf9f6dc7e258126b5b1cf7e686b96e1c6f8b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:46:18 +0100 Subject: [PATCH 127/195] Always display IPv6 host in omr-tracker interface --- luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua | 10 ++++++---- 1 file changed, 6 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 3484b1afa..8717e1e82 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -127,12 +127,12 @@ o.default = false o.disabled = 0 o.enabled = 1 -o = s:option(DynamicList, "hosts", translate("Hosts"),translate("Must be IPs and not domains")) +o = s:option(DynamicList, "hosts", translate("Hosts"), translate("Must be IPs and not domains")) o.placeholder = "4.2.2.1" o.default = { "4.2.2.1", "8.8.8.8" } o.rmempty = false -o = s:option(DynamicList, "hosts6", translate("Hosts IPv6"),translate("Must be IPs and not domains")) +o = s:option(DynamicList, "hosts6", translate("Hosts IPv6"), translate("Must be IPs and not domains")) o.placeholder = "2001:4860:4860::8844" o.default = { "2001:4860:4860::8888", "2001:4860:4860::8844" } o.rmempty = false @@ -188,11 +188,13 @@ o.default = false o.disabled = 0 o.enabled = 1 - -o = s:option(DynamicList, "hosts", translate("Hosts")) +o = s:option(DynamicList, "hosts", translate("Hosts"), translate("Must be IPs and not domains")) o.placeholder = "4.2.2.1" o.default = { "4.2.2.1", "8.8.8.8" } o.rmempty = false +o = s:option(DynamicList, "hosts6", translate("Hosts IPv6"), translate("Must be IPs and not domains")) +o.placeholder = "2001:4860:4860::8844" +o.rmempty = false return m From b3395d12e83569dd23eebf5bff00f74e6683949c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:46:58 +0100 Subject: [PATCH 128/195] Fix if only one IP set for server --- .../luasrc/controller/openmptcprouter.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 98963fc69..000f6f953 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -583,10 +583,15 @@ function wizard_add() if default_proxy == "shadowsocks" and serversnb > disablednb then ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","0") end + nbip = nbip + 1 if disableipv6 == "1" and nbip > 0 then + ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") break end - nbip = nbip + 1 + end + if nbip == 1 then + --ucic:set("shadowsocks-libev","sss" .. nbip,"server",server_ip) + ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") end end k = k + 1 @@ -621,6 +626,10 @@ function wizard_add() break end end + if nbip == 1 then + -- ucic:set("shadowsocks-libev","sss" .. nbip,"server",server_ip) + ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") + end end end end From 0ffa2d664ced98b466fa44ffbda2d16e8e9164b6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:47:19 +0100 Subject: [PATCH 129/195] Display less errors --- luci-app-openmptcprouter/root/etc/init.d/openmptcprouter | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index fe110bdfd..10cd90834 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -62,7 +62,8 @@ omr_set_settings() { config_get type "$1" type config_get ipv6 "$1" ipv6 config_get addlatency "$1" addlatency - [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return + [ -z "$multipath" ] || [ "$multipath" = "off" ] && return + [ "$1" = "omrvpn" ] || [ "$1" = "glorytun" ] && return uci -q set openmptcprouter.$1=interface uci -q set openmptcprouter.$1.multipath="$multipath" @@ -86,13 +87,13 @@ omr_set_settings() { fi if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then - tc qdisc del dev ${ifname} root netem + tc qdisc del dev ${ifname} root netem 2>&1 >/dev/null fi if [ "$addlatency" != "0" ]; then if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then - tc qdisc add dev ${ifname} root netem delay ${addlatency}ms + tc qdisc add dev ${ifname} root netem delay ${addlatency}ms 2>&1 >/dev/null elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then - tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms + tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms 2>&1 >/dev/null fi fi fi From fdf87a858f4118ca62784621a32ef7cb4f0828b7 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:47:39 +0100 Subject: [PATCH 130/195] Set a specific OMR version to package --- luci-app-shadowsocks-libev/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-shadowsocks-libev/Makefile b/luci-app-shadowsocks-libev/Makefile index 29955e933..6a19308fb 100644 --- a/luci-app-shadowsocks-libev/Makefile +++ b/luci-app-shadowsocks-libev/Makefile @@ -11,6 +11,7 @@ LUCI_TITLE:=LuCI Support for shadowsocks-libev LUCI_DEPENDS:=+luci-compat PKG_LICENSE:=Apache-2.0 +PKG_VERSION:=omr-202103 include $(TOPDIR)/feeds/luci/luci.mk From 835dea3b2652cda1078be906ac1517e8c3a5f04d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:47:54 +0100 Subject: [PATCH 131/195] Set a specific OMR version to package --- luci-proto-modemmanager/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-proto-modemmanager/Makefile b/luci-proto-modemmanager/Makefile index 37d96f118..8d968ff7e 100644 --- a/luci-proto-modemmanager/Makefile +++ b/luci-proto-modemmanager/Makefile @@ -8,6 +8,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Support for ModemManager LUCI_DEPENDS:=+modemmanager +PKG_VERSION:=omr-202103 include $(TOPDIR)/feeds/luci/luci.mk From 3dab748b13cd1fcd7b9b7fab744b1dcd38458fdd Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:48:24 +0100 Subject: [PATCH 132/195] Run MPTCP config only if needed --- mptcp/files/etc/hotplug.d/iface/30-mptcp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mptcp/files/etc/hotplug.d/iface/30-mptcp b/mptcp/files/etc/hotplug.d/iface/30-mptcp index a28c5eb12..c37447553 100644 --- a/mptcp/files/etc/hotplug.d/iface/30-mptcp +++ b/mptcp/files/etc/hotplug.d/iface/30-mptcp @@ -5,6 +5,10 @@ /etc/init.d/mptcp enabled || exit 0 -logger -t "mptcp" "Reloading mptcp config due to $ACTION of $INTERFACE ($DEVICE)" -/etc/init.d/mptcp reload "$DEVICE" >/dev/null || exit 0 +if [ -z "$(echo $DEVICE | grep oip | grep gre)" ]; then + logger -t "mptcp" "Reloading mptcp config due to $ACTION of $INTERFACE ($DEVICE)" + /etc/init.d/mptcp reload "$DEVICE" >/dev/null || exit 0 +else + multipath $DEVICE off 2>&1 >/dev/null +fi From 87a6e44ff13c3697d899004a4bb3d70b25cdc1d5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:48:45 +0100 Subject: [PATCH 133/195] Display less errors --- mptcp/files/etc/init.d/mptcp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 663c5cc91..059da16aa 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -206,7 +206,7 @@ interface_multipath_settings() { commit network EOF else - ip rule del table $id > /dev/null 2>&1 + [ -n "$(ip rule list | grep $id)" ] && ip rule del table $id > /dev/null 2>&1 ip route flush $id > /dev/null 2>&1 fi @@ -239,10 +239,10 @@ interface_multipath_settings() { else #echo "Add routes for $ipaddr table $id" ip rule add from $ipaddr table $id pref 0 - ip route replace $network/$netmask dev $iface scope link metric $id - ip route replace $network/$netmask dev $iface scope link table $id - ip route replace default via $gateway dev $iface table $id - ip route replace default via $gateway dev $iface metric $id + ip route replace $network/$netmask dev $iface scope link metric $id 2>&1 >/dev/null + ip route replace $network/$netmask dev $iface scope link table $id 2>&1 >/dev/null + ip route replace default via $gateway dev $iface table $id 2>&1 >/dev/null + ip route replace default via $gateway dev $iface metric $id 2>&1 >/dev/null #ip route flush $id fi @@ -250,7 +250,7 @@ interface_multipath_settings() { #[ "$mode" = "" ] && mode="$(uci -q get openmptcprouter.${config}.multipath)" [ "$mode" = "master" ] && { #echo "ip route replace default via $gateway dev $iface" - ip route replace default via $gateway dev $iface + ip route replace default via $gateway dev $iface 2>&1 >/dev/null } if [ "$txqueuelen" != "" ]; then ifconfig $iface txqueuelen $txqueuelen > /dev/null 2>&1 @@ -294,7 +294,7 @@ interface_multipath_settings() { commit network EOF else - ip -6 rule del table 6$id > /dev/null 2>&1 + [ -n "$(ip -6 rule list | grep 6$id)" ] && ip -6 rule del table 6$id > /dev/null 2>&1 ip -6 route flush 6$id > /dev/null 2>&1 fi if [ -n "$ip6addr" ] && [ -n "$gateway6" ] && [ -n "$network6" ]; then @@ -322,17 +322,17 @@ interface_multipath_settings() { commit network 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 - ip -6 route flush 6$id + ip -6 rule add from $ip6addr table 6$id pref 0 2>&1 >/dev/null + ip -6 route replace $network6/$netmask6 dev $iface scope link metric 6$id 2>&1 >/dev/null + ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id 2>&1 >/dev/null + ip -6 route replace default via $gateway6 dev $iface table 6$id 2>&1 >/dev/null + ip -6 route replace default via $gateway6 dev $iface metric 6$id 2>&1 >/dev/null + ip -6 route flush 6$id 2>&1 >/dev/null fi #config_get mode "$config" multipath "off" [ "$mode" = "master" ] && { - ip -6 route replace default via $gateway6 dev $iface + ip -6 route replace default via $gateway6 dev $iface 2>&1 >/dev/null } #[ "$mode" = "off" ] && { # ifconfig $iface txqueuelen 50 > /dev/null 2>&1 @@ -386,7 +386,7 @@ add_route() { [ -n "$(echo $iface | grep '@')" ] && iface=$(ifstatus "$interface" | jsonfilter -q -e '@["device"]') routeset="$routeset dev $iface" logger -t "MPTCP" "Add route $routeset" - ip route replace $routeset + ip route replace $routeset 2>&1 >/dev/null } add_route6() { @@ -407,7 +407,7 @@ add_route6() { [ -n "$(echo $iface | grep '@')" ] && iface=$(ifstatus "$interface" | jsonfilter -q -e '@["device"]') routeset="$routeset dev $iface" logger -t "MPTCP" "Add IPv6 route $routeset" - ip -6 route replace $routeset + ip -6 route replace $routeset 2>&1 >/dev/null } remove() { From c7559aea4dcf5f5e168b57eb6bd8f3d06864f7b5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:49:16 +0100 Subject: [PATCH 134/195] Apply route only when needed --- .../share/omr/post-tracking.d/post-tracking | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 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 f1f354957..61ad14c4c 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -28,8 +28,8 @@ set_route() { fi if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && ip route replace default scope global nexthop via $interface_gw dev $interface_if - ip route replace default via $interface_gw dev $interface_if table 991337 && SETROUTE=true + [ "$SETDEFAULT" = "yes" ] && ip route replace default scope global nexthop via $interface_gw dev $interface_if 2>&1 >/dev/null + ip route replace default via $interface_gw dev $interface_if table 991337 2>&1 >/dev/null && SETROUTE=true fi fi } @@ -62,8 +62,8 @@ set_route6() { fi if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep ':')" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && ip -6 route replace default scope global nexthop via $interface_gw dev $interface_if - ip -6 route replace default via $interface_gw dev $interface_if table 991337 && SETROUTE=true + [ "$SETDEFAULT" = "yes" ] && ip -6 route replace default scope global nexthop via $interface_gw dev $interface_if 2>&1 >/dev/null + ip -6 route replace default via $interface_gw dev $interface_if table 991337 2>&1 >/dev/null && SETROUTE=true fi fi } @@ -84,7 +84,7 @@ set_server_default_route() { if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then ip r delete $serverip >/dev/null 2>&1 fi - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 2>&1 >/dev/null fi } config_list_foreach $server ip server_route @@ -106,7 +106,7 @@ set_server_default_route6() { if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then ip -6 r delete $serverip >/dev/null 2>&1 fi - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 2>&1 >/dev/null fi } config_list_foreach $server ip server_route @@ -121,7 +121,7 @@ delete_server_default_route() { [ "$disabled" = "1" ] && return if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - ip route del $serverip metric 1 >/dev/null 2>&1 + [ -n "$(ip route show $serverip metric 1)" ] && ip route del $serverip metric 1 >/dev/null 2>&1 fi } config_list_foreach $server ip delete_route @@ -136,7 +136,7 @@ delete_server_default_route6() { [ "$disabled" = "1" ] && return if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - ip -6 route del $serverip metric 1 >/dev/null 2>&1 + [ -n "$(ip -6 route show $serverip metric 1)" ] && ip -6 route del $serverip metric 1 >/dev/null 2>&1 fi } config_list_foreach $server ip delete_route @@ -387,17 +387,17 @@ set_server_all_routes() { config_foreach set_routes_intf interface uintf="$(echo $routesintf | awk '{print $5}')" uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then + if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip route replace $serverip scope global metric 1 $routesintf + ip route replace $serverip scope global metric 1 $routesintf 2>&1 >/dev/null [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" - ip route replace $serverip scope global metric 999 $routesintfbackup + ip route replace $serverip scope global metric 999 $routesintfbackup 2>&1 >/dev/null fi fi } @@ -429,17 +429,17 @@ set_server_all_routes6() { config_foreach set_routes_intf6 interface uintf="$(echo $routesintf6 | awk '{print $5}')" uintfb="$(echo $routesintfbackup6 | awk '{print $5}')" - if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then + if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip -6 r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6" - ip -6 route replace $serverip scope global metric 1 $routesintf6 + ip -6 route replace $serverip scope global metric 1 $routesintf6 2>&1 >/dev/null [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" - ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 + ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 2>&1 >/dev/null fi fi } @@ -471,12 +471,12 @@ set_server_route() { #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null fi } config_list_foreach $server ip server_route if [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null fi } @@ -503,12 +503,12 @@ set_server_route6() { #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null fi } config_list_foreach $server ip server_route if [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null fi } @@ -520,14 +520,14 @@ del_server_route() { [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" local metric metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 } config_list_foreach $server ip remove_route if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip route show default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE)" ] && ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 else - ip route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip route show default dev $OMR_TRACKER_DEVICE)" ] && ip route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 fi } @@ -539,14 +539,14 @@ del_server_route6() { [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" local metric metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 } config_list_foreach $server ip remove_route if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then - ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip -6 route show default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 else - ip -6 route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + [ -n "$(ip -6 route show default dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 fi } @@ -738,7 +738,7 @@ fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null if [ "$(pgrep openmptcprouter-vps)" = "" ]; then /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 fi @@ -836,7 +836,7 @@ if [ "$multipath_config" = "master" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null fi config_load openmptcprouter #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then @@ -849,7 +849,7 @@ if [ "$multipath_config" = "master" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" - ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE + ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null fi config_load openmptcprouter #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then @@ -871,36 +871,36 @@ if [ "$multipath_config" = "master" ]; then config_foreach set_route_balancing interface config_foreach set_route_balancing6 interface [ -n "$routesbalancing" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { + ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { _log "Set ip route replace default scope global $routesbalancing" - ip route replace default scope global metric 0 $routesbalancing + ip route replace default scope global metric 1 $routesbalancing 2>&1 >/dev/null } } [ -n "$routesbalancing6" ] && { ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" - ip -6 route replace default scope global metric 1 $routesbalancing6 + ip -6 route replace default scope global metric 1 $routesbalancing6 2>&1 >/dev/null } } [ -n "$routesbalancingbackup" ] && { ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { _log "Set backup ip route replace default scope global $routesbalancingbackup" - ip route replace default scope global metric 999 $routesbalancingbackup + ip route replace default scope global metric 999 $routesbalancingbackup 2>&1 >/dev/null } } [ -n "$routesbalancingbackup6" ] && { ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" - ip -6 route replace default scope global metric 999 $routesbalancingbackup6 + ip -6 route replace default scope global metric 999 $routesbalancingbackup6 2>&1 >/dev/null } } fi fi if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE " ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 2>&1 >/dev/null fi if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE " ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 2>&1 >/dev/null fi if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then [ "$(pgrep openmptcprouter-vps)" = "" ] && /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 From 8cfcc6888b14b1d3e6b5dd9e82fc604b320e8a6d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:49:32 +0100 Subject: [PATCH 135/195] Update msmtp --- msmtp/Makefile | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/msmtp/Makefile b/msmtp/Makefile index 7c62d6923..d4588bbcf 100644 --- a/msmtp/Makefile +++ b/msmtp/Makefile @@ -1,6 +1,7 @@ # # Copyright (C) 2009 David Cooper # Copyright (C) 2009-2016 OpenWrt.org +# Copyright (C) 2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -9,21 +10,20 @@ include $(TOPDIR)/rules.mk PKG_NAME:=msmtp -PKG_VERSION:=1.6.8 +PKG_VERSION:=1.8.14 PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://marlam.de/msmtp/releases -PKG_HASH:=55ff95a304d888b56d07d9c62327ab9bfe26532c9c2a2ed6aefc43bea1b659fb +PKG_HASH:=d56f065d711486e9c234618515a02a48a48dab4051b34f3e108fbecb6fb773b4 -PKG_LICENSE:=GPL-3.0+ +PKG_MAINTAINER:= +PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=COPYING -PKG_MAINTAINER:=Nicolas Thill +PKG_CPE_ID:=cpe:/a:marlam:msmtp -PKG_FIXUP:=autoreconf PKG_INSTALL:=1 - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) +PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/nls.mk @@ -33,7 +33,7 @@ define Package/msmtp/Default CATEGORY:=Mail DEPENDS:=$(INTL_DEPENDS) TITLE:=Simple sendmail SMTP forwarding - URL:=http://msmtp.sourceforge.net/ + URL:=https://marlam.de/msmtp endef define Package/msmtp/Default/description @@ -46,9 +46,10 @@ endef define Package/msmtp $(call Package/msmtp/Default) - DEPENDS+= +libopenssl +ca-bundle + DEPENDS+= +libgnutls +ca-bundle TITLE+= (with SSL support) VARIANT:=ssl + DEFAULT_VARIANT:=1 endef define Package/msmtp/conffiles @@ -64,6 +65,7 @@ define Package/msmtp-nossl $(call Package/msmtp/Default) TITLE+= (without SSL support) VARIANT:=nossl + PROVIDES:=msmtp endef define Package/msmtp-nossl/description @@ -75,7 +77,9 @@ define Package/msmtp-mta $(call Package/msmtp/Default) TITLE+= (as MTA) DEPENDS+=+msmtp -# DEPENDS+=@(PACKAGE_msmtp||PACKAGE_msmtp-nossl) + ALTERNATIVES:=\ + 100:/usr/sbin/sendmail:/usr/bin/msmtp \ + 100:/usr/lib/sendmail:/usr/bin/msmtp endef define Package/msmtp-mta/description @@ -86,7 +90,7 @@ endef define Package/msmtp-queue $(call Package/msmtp/Default) - DEPENDS+= +bash @(PACKAGE_msmtp||PACKAGE_msmtp-nossl) + DEPENDS+= +bash +msmtp TITLE+= (queue scripts) endef @@ -102,21 +106,12 @@ CONFIGURE_ARGS += \ --without-libidn \ --without-libsecret \ --without-macosx-keyring \ - -ifneq ($(CONFIG_USE_UCLIBC),) - CONFIGURE_ARGS += --disable-gai-idn -endif - -MAKE_FLAGS := + --without-msmtpd ifeq ($(BUILD_VARIANT),ssl) - CONFIGURE_ARGS += \ - --with-tls=openssl -endif - -ifeq ($(BUILD_VARIANT),nossl) - CONFIGURE_ARGS += \ - --with-tls=no + CONFIGURE_ARGS += --with-tls=openssl +else + CONFIGURE_ARGS += --without-tls endif define Package/msmtp/install @@ -129,8 +124,6 @@ endef define Package/msmtp-mta/install $(INSTALL_DIR) $(1)/usr/sbin $(1)/usr/lib - ln -sf ../bin/msmtp $(1)/usr/sbin/sendmail - ln -sf ../bin/msmtp $(1)/usr/lib/sendmail endef Package/msmtp-nossl/conffiles = $(Package/msmtp/conffiles) From 9b32a6aab556b9bb60087cde8316fce1b37b0eca Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:50:12 +0100 Subject: [PATCH 136/195] Fix --- omr-6in4/files/etc/init.d/omr-6in4 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index e9ef23296..907be1c4c 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -18,7 +18,7 @@ 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") - previous="$(uci get network.lan.ipv6)" + previous="$(uci -q 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 @@ -40,6 +40,8 @@ set_ipv6_state() { delete dhcp.lan.ra_default delete dhcp.lan.ra_management delete dhcp.lan.ra_preference + unbound.ub_main.protocol='ip4_only' + commit unbound del_list v2ray.main.inbounds="omr6" commit v2ray EOF @@ -50,6 +52,7 @@ set_ipv6_state() { commit dhcp commit shadowsocks-libev EOF + [ ! -f /etc/wgetrc ] && cp /etc/wgetrc4 /etc/wgetrc else logger -t "omr-6in4" "Enable IPv6" uci -q batch <<-EOF >/dev/null @@ -66,6 +69,8 @@ set_ipv6_state() { set network.omr6in4.force_link=1 set network.omr6in4.metric=1 delete network.omr6in4.auto + unbound.ub_main.protocol='mixed' + commit unbound EOF if [ "$(network.lan.ip6assign)" = "" ]; then uci -q set network.lan.ip6assign='60' @@ -92,6 +97,7 @@ set_ipv6_state() { EOF /etc/init.d/v2ray restart fi + rm -f /etc/wgetrc fi /etc/init.d/odhcpd restart if [ "$previous" != "1" ]; then From 728253d324fb81a37d9f4afbec4113b6fa75aa29 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:50:39 +0100 Subject: [PATCH 137/195] Delete route only if exist --- omr-tracker/files/bin/omr-tracker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index f9e4fa504..47e308993 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -359,7 +359,7 @@ while true; do _dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" statusb=$? fi - ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 + [ -n "$(ip route show ${OMR_TRACKER_HOST} via ${OMR_TRACKER_DEVICE_GATEWAY} dev ${OMR_TRACKER_DEVICE} src ${OMR_TRACKER_DEVICE_IP})" ] && ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 if $(exit $statusb); then OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" From ffb6a7fe6861c13a1c17a89f9ff541e7b03907f0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:52:50 +0100 Subject: [PATCH 138/195] Fix ss-redir initial creation --- .../files/etc/uci-defaults/1930-omr-shadowsocks | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 91a0ad9cc..f47a4200c 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -57,10 +57,19 @@ if [ "$(uci -q get shadowsocks-libev.hi3)" != "" ]; then uci -q batch <<-EOF >/dev/null set shadowsocks-libev.hi$c.local_port=$port set shadowsocks-libev.hi$c.server=sss0 + set shadowsocks-libev.hi$((c+1))=ss_redir set shadowsocks-libev.hi$((c+1)).local_address="::" set shadowsocks-libev.hi$((c+1)).local_port=$port set shadowsocks-libev.hi$((c+1)).local_address="::" set shadowsocks-libev.hi$((c+1)).server=sss1 + set shadowsocks-libev.hi$((c+1)).mode=tcp_and_udp + set shadowsocks-libev.hi$((c+1)).timeout=1000 + set shadowsocks-libev.hi$((c+1)).fast_open=1 + set shadowsocks-libev.hi$((c+1)).reuse_port=1 + set shadowsocks-libev.hi$((c+1)).syslog=1 + set shadowsocks-libev.hi$((c+1)).mptcp=1 + set shadowsocks-libev.hi$((c+1)).no_delay=1 + set shadowsocks-libev.hi$((c+1)).verbose=0 commit shadowsocks-libev EOF port=$((port+1)) From a9fb7609d437e0f2db02fa440a7dd28cd1d0bde2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:53:30 +0100 Subject: [PATCH 139/195] Create a wgetrc4 only used when IPv6 is disabled --- openmptcprouter/files/etc/{wgetrc => wgetrc4} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openmptcprouter/files/etc/{wgetrc => wgetrc4} (100%) diff --git a/openmptcprouter/files/etc/wgetrc b/openmptcprouter/files/etc/wgetrc4 similarity index 100% rename from openmptcprouter/files/etc/wgetrc rename to openmptcprouter/files/etc/wgetrc4 From e4882bb64055959f6168d6f3f71627ede00e7453 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:53:54 +0100 Subject: [PATCH 140/195] Update protobuf --- protobuf/Makefile | 51 ++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/protobuf/Makefile b/protobuf/Makefile index c93527f05..cc314bbea 100644 --- a/protobuf/Makefile +++ b/protobuf/Makefile @@ -8,31 +8,32 @@ include $(TOPDIR)/rules.mk PKG_NAME:=protobuf -PKG_VERSION:=3.5.1 -PKG_RELEASE:=1 +PKG_VERSION:=3.14.0 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-cpp-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/google/protobuf/releases/download/v$(PKG_VERSION) -PKG_HASH:=c28dba8782da2cfea1e11c61d335958c31a9c1bc553063546af9cbe98f204092 +PKG_HASH:=50ec5a07c0c55d4ec536dd49021f2e194a26bfdbc531d03d1e9d4d3e27175659 +PKG_MAINTAINER:=Ken Keys PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE +PKG_CPE_ID:=cpe:/a:google:protobuf -PKG_BUILD_DEPENDS:=protobuf/host -PKG_USE_MIPS16:=0# MIPS16 prevents protobuf's usage of the 'sync' asm-opcode - -PKG_INSTALL:=1 +HOST_BUILD_PARALLEL:=1 +PKG_BUILD_PARALLEL:=1 +CMAKE_SOURCE_SUBDIR:=cmake include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/cmake.mk define Package/protobuf/Default SECTION:=libs CATEGORY:=Libraries TITLE:=A structured data encoding library URL:=https://github.com/google/protobuf - DEPENDS:=+zlib +libpthread +libstdcpp - MAINTAINER:=Ken Keys + DEPENDS:=+zlib +libpthread +libatomic +libstdcpp endef define Package/protobuf @@ -65,20 +66,28 @@ This package provides the libprotobuf-lite library. endef -CONFIGURE_ARGS += --with-protoc=$(STAGING_DIR_HOSTPKG)/bin/protoc +CMAKE_HOST_OPTIONS += \ + -Dprotobuf_BUILD_PROTOC_BINARIES=ON \ + -Dprotobuf_BUILD_TESTS=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_SKIP_RPATH=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_INSTALL_RPATH="${STAGING_DIR_HOSTPKG}/lib" + +CMAKE_OPTIONS += \ + -Dprotobuf_BUILD_PROTOC_BINARIES=ON \ + -Dprotobuf_BUILD_TESTS=OFF \ + -Dprotobuf_WITH_ZLIB=ON \ + -DBUILD_SHARED_LIBS=ON + +TARGET_LDFLAGS += -latomic $(if $(CONFIG_USE_GLIBC),-lm) define Build/InstallDev - $(INSTALL_DIR) \ - $(1)/usr/lib \ - $(1)/usr/include - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/include/* \ - $(1)/usr/include/ - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/* \ - $(1)/usr/lib/ + $(call Build/InstallDev/cmake,$(1)) + $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/protobuf.pc + $(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/protobuf.pc + $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/protobuf-lite.pc + $(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/protobuf-lite.pc endef define Package/protobuf-lite/install From 79a56da436d894bc7258cb47cf175fccbec90433 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:54:20 +0100 Subject: [PATCH 141/195] Set a specific OMR version to package --- shadowsocks-libev/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile index 25f8e750c..4f09cf2ba 100644 --- a/shadowsocks-libev/Makefile +++ b/shadowsocks-libev/Makefile @@ -1,6 +1,6 @@ # # Copyright (C) 2017-2018 Yousong Zhou -# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -15,7 +15,7 @@ include $(TOPDIR)/rules.mk # PKG_NAME:=shadowsocks-libev PKG_VERSION:=3.3.5 -PKG_RELEASE:=2 +PKG_RELEASE:=10 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION) From 05cfb033a6fd4653a5bac591493bbbafa4fcee28 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 18 Mar 2021 15:55:22 +0100 Subject: [PATCH 142/195] Add wait to v2ray rules --- v2ray-core/files/usr/bin/v2ray-rules | 4 ++-- v2ray-core/files/usr/bin/v2ray-rules6 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2ray-core/files/usr/bin/v2ray-rules b/v2ray-core/files/usr/bin/v2ray-rules index 98978f12e..25f435cc9 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules +++ b/v2ray-core/files/usr/bin/v2ray-rules @@ -112,7 +112,7 @@ v2r_rules_parse_args() { __errmsg "Requires at least -l or -L option" return 1 fi - if [ -n "$o_dst_forward_recentrst" ] && ! iptables -m recent -h >/dev/null; then + if [ -n "$o_dst_forward_recentrst" ] && ! iptables -w -m recent -h >/dev/null; then __errmsg "Please install iptables-mod-conntrack-extra with opkg" return 1 fi @@ -166,7 +166,7 @@ v2r_rules_iptchains_init() { } v2r_rules_iptchains_init_mark() { - if [ "$(iptables -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then + if [ "$(iptables -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then iptables-restore -w --noflush <<-EOF *mangle -A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 diff --git a/v2ray-core/files/usr/bin/v2ray-rules6 b/v2ray-core/files/usr/bin/v2ray-rules6 index 5e1714110..c62b50ba0 100755 --- a/v2ray-core/files/usr/bin/v2ray-rules6 +++ b/v2ray-core/files/usr/bin/v2ray-rules6 @@ -95,7 +95,7 @@ v2ray_rules6_parse_args() { __errmsg "Requires at least -l or -L option" return 1 fi - if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -m recent -h >/dev/null; then + if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -w -m recent -h >/dev/null; then __errmsg "Please install ip6tables-mod-conntrack-extra with opkg" return 1 fi From f6ddf305e4ce888e6d0ebf2cd0e368f755a09c46 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Fri, 19 Mar 2021 12:56:30 +0800 Subject: [PATCH 143/195] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ef6a56144..2c9db9174 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: build: strategy: matrix: - OMR_TARGET: [rpi2, rpi4, p2w_r619ac, r2s, x86_64, cm520-79f, nanopi_neo] + OMR_TARGET: [rpi2, rpi4, r2s, x86_64, cm520-79f, nanopi_neo] runs-on: ubuntu-latest continue-on-error: true From b1182ed8134a6308f033dd737846f53cca8964fe Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 23 Mar 2021 16:43:45 +0800 Subject: [PATCH 144/195] Update omr-logo.png --- .../openmptcprouter/images/omr-logo.png | Bin 8175 -> 35829 bytes 1 file changed, 0 insertions(+), 0 deletions(-) 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 7ee7779108d5a958e17f305962fef3f5715fbafd..90030f3bb28da3b8fa305f28d2ebae6710a5d649 100755 GIT binary patch literal 35829 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 Date: Tue, 23 Mar 2021 09:46:14 +0100 Subject: [PATCH 145/195] Fix VPS firewall --- .../files/etc/init.d/openmptcprouter-vps | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 51cfe728c..57ada41aa 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -543,7 +543,6 @@ _get_gre_tunnel() { set network.oip${i}.ipaddr="$peeraddr" set network.oip${i}.netmask="255.255.255.252" set network.oip${i}.lookup="667${i}" - commit network EOF allintf=$(uci -q get firewall.zone_vpn.network) uci -q del firewall.zone_vpn.network @@ -553,7 +552,6 @@ _get_gre_tunnel() { uci -q batch <<-EOF >/dev/null add_list firewall.zone_vpn.network="oip${i}gre" add_list firewall.zone_vpn.network="oip${i}" - commit firewall EOF ssport="$(echo $tunnel | jsonfilter -q -e '@.shadowsocks_port')" uci -q batch <<-EOF >/dev/null @@ -584,11 +582,15 @@ _get_gre_tunnel() { set shadowsocks-libev.oip${i}_rule.dst_default='bypass' set shadowsocks-libev.oip${i}_rule.local_default='bypass' set shadowsocks-libev.oip${i}_rule.redir_tcp="oip${i}" - commit shadowsocks-libev EOF fi i=$((i+1)) done + uci -q batch <<-EOF >/dev/null + commit network + commit firewall + commit shadowsocks-libev + EOF fi } @@ -866,6 +868,7 @@ _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 v2ray $1 name config_get dmz $1 dmz "0" if [ -z "$src_dport" ] && [ -n "$dest_port" ]; then src_dport=$dest_port @@ -887,7 +890,7 @@ _vps_firewall_redirect_port() { [ "$(uci -q get v2ray.main.enabled)" = "0" ] && v2ray="0" [ "$proto" = "all" ] && proto="tcp udp" [ "$proto" = "" ] && proto="tcp udp" - [ "$src" = "vpn" ] && [ -n "$proto" ] && [ -n "$src_dport" ] && [ "$enabled" != "0" ] && { + [ "$src" = "vpn" ] && [ -n "$proto" ] && [ -n "$src_dport" ] && [ "$enabled" != "0" ] && [ "$name" != "Allow-DHCP-Request-VPN" ] && { for protoi in $proto; do if [ "$v2ray" = "0" ]; then checkfw="" @@ -1078,6 +1081,10 @@ _set_vps_firewall() { logger -t "OMR-VPS" "Remove old firewall rules" _vps_firewall_close_port } + uci -q batch <<-EOF >/dev/null + set openmptcprouter.${fwservername}.set_firewall=0 + commit openmptcprouter + EOF } set_vps_firewall() { @@ -1840,6 +1847,7 @@ start_service() { } service_triggers() { - procd_add_reload_trigger openmptcprouter shadowsocks-libev glorytun glorytun-udp mlvpn openvpn network upnpd dsvpn v2ray firewall + procd_add_reload_trigger openmptcprouter network shadowsocks-libev v2ray glorytun glorytun-udp mlspn openvpn dsvpn + procd_add_config_trigger "config.change" "firewall" /etc/init.d/openmptcprouter-vps set_vps_firewall #procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd } \ No newline at end of file From 27979c78d3c6a0ee9b5bd39c29e34c39015cc5be Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Mar 2021 09:49:12 +0100 Subject: [PATCH 146/195] Add wan http test to API --- .../luasrc/model/cbi/omr-tracker.lua | 14 ++++++ .../luasrc/view/openmptcprouter/settings.htm | 12 ++++- .../luasrc/view/openmptcprouter/wanstatus.htm | 5 ++ .../root/usr/libexec/rpcd/openmptcprouter | 46 ++++++++++++++++++- omr-tracker/files/bin/omr-tracker | 36 ++++++++++++--- omr-tracker/files/etc/config/omr-tracker | 1 + omr-tracker/files/etc/init.d/omr-tracker | 9 ++-- .../files/etc/uci-defaults/omr-tracker | 14 ++++++ 8 files changed, 125 insertions(+), 12 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 8717e1e82..9915e8516 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -120,6 +120,13 @@ o:value("httping","httping") o:value("dns","dns") o:value("none","none") +o = s:option(Flag, "server_http_test", translate("Server http test"), translate("Check if connection work with http by sending a request to server")) +o.optional = false +o.rmempty = false +o.default = true +o.disabled = 0 +o.enabled = 1 + o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection state change")) o.optional = false o.rmempty = false @@ -181,6 +188,13 @@ o:value("httping","httping") o:value("dns","dns") o:value("none","none") +o = s:option(Flag, "server_http_test", translate("Server http test"), translate("Check if connection work with http by sending a request to server")) +o.optional = false +o.rmempty = false +o.default = true +o.disabled = 0 +o.enabled = 1 + o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection status change. You need to configure e-mail settings here.")) o.optional = false o.rmempty = false diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 941890008..28ad25bd1 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -240,7 +240,17 @@ checked<% end %>>
- <%:Disable gateway ping status check%> + <%:Disable gateway ping check in status page%> +
+
+
+
+ +
+ checked<% end %>> +
+
+ <%:Disable HTTP test on Server API in status page%>
diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index fe5c85e4a..074a047db 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -452,6 +452,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm var gw_ping = mArray.wans[i].gw_ping; var gw_ping6 = mArray.wans[i].gw_ping6; var server_ping = mArray.wans[i].server_ping; + var server_http = mArray.wans[i].server_http; var ipv6_discover = mArray.wans[i].ipv6_discover; var multipath_available = mArray.wans[i].multipath_available; var multipath_state = mArray.wans[i].multipath_state; @@ -563,6 +564,10 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { statusMessage += '<%:No Server ping response after 1 second%>' + '
'; } + if(server_http == 'DOWN' && mArray.openmptcprouter.service_addr !== "") + { + statusMessage += '<%:No Server http response after 1 second%>' + '
'; + } if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.wans[i].gateway) { statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 4a9a7a21f..9ed558f76 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -836,6 +836,7 @@ function interfaces_status() mArray.openmptcprouter["vps_hostname"] = "Server" -- Get VPS info + local adminport = "" ucic:foreach("openmptcprouter", "server", function(s) local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" } local master = uci:get("openmptcprouter",s[".name"],"master") or "1" @@ -849,7 +850,7 @@ function interfaces_status() if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then mArray.openmptcprouter["vps_admin_error"] = true end - local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" + adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" local token = uci:get("openmptcprouter",s[".name"],"token") or "" if token ~= "" then local vpsinfo_json = "" @@ -1120,6 +1121,7 @@ function interfaces_status() local ipv6 = section["ipv6"] or "0" local mac = section ["macaddr"] or "" local itype = section ["type"] or "" + local state = section ["state"] or "" --if not ipaddr or not gateway then return end -- Don't show if0 in the overview @@ -1325,6 +1327,7 @@ function interfaces_status() local latency = "" local server_ping = "" + local server_http = "" --if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then local serverip = mArray.openmptcprouter["service_addr"] @@ -1345,6 +1348,40 @@ function interfaces_status() latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f5 | cut -d '.' -f1")) end end + + if adminport == "" then + adminport = "65500" + end + if server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then + local server_http_result = "" + local server_http_test = "" + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + server_http_test = sys.exec("httping -l " .. mArray.openmptcprouter["service_addr_ip"] .. ":" .. adminport .. " -y " .. ipaddr .. " -t 1 -c 1") + server_http_result = ut.trim(sys.exec("echo '" .. server_http_test .. "' | grep '100.00% failed'")) + if server_http_result ~= "" then + server_http = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end + end + end + if mArray.openmptcprouter["service_addr_ip6"] ~= "" then + server_http_test = sys.exec("httping -l [" .. mArray.openmptcprouter["service_addr_ip6"] .. "]:" .. adminport .. " -y " .. ipaddr .. " -t 1 -c 1") + server_http_result = ut.trim(sys.exec("echo '" .. server_http_test .. "' | grep '100.00% failed'")) + if server_http_result ~= "" then + server_http = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end + end + end + if server_http_result ~= "" then + server_http = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end + end + end end local multipath_available = "" @@ -1443,6 +1480,11 @@ function interfaces_status() rx = ut.trim(sys.exec("devstatus " .. ifname .. " | jsonfilter -e '@.statistics.rx_bytes'")) tx = ut.trim(sys.exec("devstatus " .. ifname .. " | jsonfilter -e '@.statistics.tx_bytes'")) end + + if state == "down" then + connectivity = "ERROR" + end + local data = { label = section["label"] or interface, name = interface, @@ -1466,6 +1508,7 @@ function interfaces_status() gw_ping = gw_ping, gw_ping6 = gw_ping6, server_ping = server_ping, + server_http = server_http, ipv6_discover = ipv6_discover, multipath_available = multipath_available, multipath_state = current_multipath_state, @@ -1481,6 +1524,7 @@ function interfaces_status() tx = tx, zonewan = zonewan, iftype = itype, + state = state, } if ifname ~= nil and ifname:match("^tun.*") then table.insert(mArray.tunnels, data); diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 47e308993..f5d9ac653 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -174,11 +174,10 @@ _httping() { ret=$(httping "${host}" \ -y "${deviceip}" \ -t "$OMR_TRACKER_TIMEOUT" \ - -c 1 \ - -q + -c 1 2>&1 ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then - OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1) + OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') _update_rto "$OMR_TRACKER_LATENCY" fi return @@ -187,11 +186,10 @@ _httping() { ret=$(httping -l "${host}" \ -y "${deviceip}" \ -t "$OMR_TRACKER_TIMEOUT" \ - -c 1 \ - -q + -c 1 2>&1 ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then - OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1) + OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') _update_rto "$OMR_TRACKER_LATENCY" fi return @@ -370,12 +368,24 @@ while true; do else OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_LIST_HOSTS,$OMR_TRACKER_HOST" fi + OMR_TRACKER_STATUS_MSG="check error" fi else OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" break fi + elif [ "$server_ping" != false ] && [ "$OMR_TRACKER_TYPE" != "httping" ] && [ "$OMR_TRACKER_SERVER_HTTP_TEST" = "1" ]; then + serverip_ping=false + config_load openmptcprouter + config_foreach _httping_server server $OMR_TRACKER_DEVICE_IP + if [ "$serverip_ping" = false ]; then + OMR_TRACKER_STATUS_MSG="No access to server API" + else + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + fi else OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" @@ -454,16 +464,28 @@ while true; do break else if [ "$OMR_TRACKER_LIST_HOSTS6" = "" ]; then - OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST6" + OMR_TRACKER_LIST_HOSTS6="$OMR_TRACKER_HOST6" else OMR_TRACKER_LIST_HOSTS6="$OMR_TRACKER_LIST_HOSTS6,$OMR_TRACKER_HOST6" fi + OMR_TRACKER_STATUS_MSG="check error" fi else OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" break fi + elif [ "$server_ping" != false ] && [ "$OMR_TRACKER_TYPE" != "httping" ] && [ "$OMR_TRACKER_SERVER_HTTP_TEST" = "1" ]; then + serverip_ping=false + config_load openmptcprouter + config_foreach _httping_server server $OMR_TRACKER_DEVICE_IP + if [ "$serverip_ping" = false ]; then + OMR_TRACKER_STATUS_MSG="No access to server API" + else + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + fi else OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 6f9d1c258..a88fb6a7c 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -23,6 +23,7 @@ config defaults 'defaults' option interval_tries '1' option type 'ping' option wait_test '0' + option server_http_test '1' option options '' config proxy 'proxy' diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 31c306a73..fa113ec71 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -15,7 +15,7 @@ _validate_section() { local tmp_hosts=$hosts tmp_hosts6=$hosts6 tmp_timeout=$timeout tmp_tries=$tries - local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled tmp_wait_test=$wait_test + local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled tmp_wait_test=$wait_test tmp_server_http_test=$server_http_test uci_validate_section omr-tracker "$1" "$2" \ 'hosts:list(host)' \ @@ -27,6 +27,7 @@ _validate_section() { 'wait_test:uinteger' \ 'type:string:undef' \ 'enabled:bool:1' \ + 'server_http_test:bool:1' \ 'options:string' [ -z "$hosts" ] && hosts=$tmp_hosts @@ -38,6 +39,7 @@ _validate_section() { [ -z "$wait_test" ] && wait_test=$tmp_wait_test [ -z "$options" ] && options=$tmp_options [ "$type" = "undef" ] && type=${tmp_type:-ping} + [ -z "$server_http_test" ] && server_http_test=$tmp_server_http_test [ -z "$enabled" ] && enabled=$tmp_enabled } @@ -46,7 +48,7 @@ _launch_tracker() { loopback|lan*|if0*) return;; esac - local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test ipv6 proto + local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test ipv6 proto server_http_test _validate_section "defaults" "defaults" _validate_section "interface" "$1" @@ -84,6 +86,7 @@ _launch_tracker() { procd_append_param env "OMR_TRACKER_IPV6=$ipv6" procd_append_param env "OMR_TRACKER_PROTO=$proto" procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" + procd_append_param env "OMR_TRACKER_SERVER_HTTP_TEST=$server_http_test" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -268,7 +271,7 @@ start_service() { } service_triggers() { - procd_add_reload_trigger omr-tracker network shadowsocks-libev + procd_add_reload_trigger omr-tracker network shadowsocks-libev v2ray } reload_service() { diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index 3380a6bcd..13e4fe990 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -65,6 +65,13 @@ if [ "$(uci -q get omr-tracker.proxy.hosts | grep '176.103.130.130')" != "" ]; t EOF fi +if [ "$(uci -q get omr-tracker.proxy.hosts | grep '198.41.212.162')" = "" ]; then + uci -q batch <<-EOF >/dev/null + add_list omr-tracker.proxy.hosts='198.41.212.162' + commit omr-tracker + EOF +fi + if [ -z "$(uci -q get omr-tracker.defaults.hosts6)" ]; then uci -q batch <<-EOF >/dev/null add_list omr-tracker.defaults.hosts6='2606:4700:4700::1111' @@ -86,4 +93,11 @@ if [ "$(uci -q get omr-tracker.defaults.wait_test)" = "" ]; then EOF fi +if [ "$(uci -q get omr-tracker.defaults.server_http_test)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set omr-tracker.defaults.server_http_test=1 + commit omr-tracker + EOF +fi + exit 0 \ No newline at end of file From ead533fc4d1b01b5e4643fa5a0ba9df1c16c9bcc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Mar 2021 09:51:21 +0100 Subject: [PATCH 147/195] Reload all firewall config less often --- luci-app-omr-bypass/root/etc/init.d/omr-bypass | 3 +-- .../root/etc/uci-defaults/41_omr-bypass | 2 +- .../usr/share/omr/post-tracking.d/post-tracking | 16 ++++++++++++++++ openmptcprouter/files/etc/firewall.omr-server | 15 ++++++++++++++- .../files/etc/uci-defaults/1980-omr-firewall | 2 +- v2ray-core/files/etc/uci-defaults/3010-omr-v2ray | 2 +- 6 files changed, 34 insertions(+), 6 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 119e8f4e5..433151599 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -808,8 +808,7 @@ stop_service() { } service_triggers() { - PROCD_RELOAD_DELAY=1000 - procd_add_reload_trigger omr-bypass network + procd_add_reload_trigger omr-bypass network firewall } reload_service() { diff --git a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass index 6a89ee79e..37bbf4ce3 100755 --- a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass +++ b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass @@ -60,7 +60,7 @@ if [ "$(uci -q get firewall.omr_bypass)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.omr_bypass=include set firewall.omr_bypass.path=/etc/firewall.omr-bypass - set firewall.omr_bypass.reload=1 + set firewall.omr_bypass.reload=0 commit firewall EOF fi 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 61ad14c4c..580991545 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1340,4 +1340,20 @@ 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 +fi + +if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ] || [ -z "$(iptables-save | grep omr_dst_bypass_${OMR_TRACKER_DEVICE})" ]); then + /etc/init.d/openmptcprouter-vps set_vps_firewall >/dev/null 2>&1 + + run_fw_include() { + [ "$(uci -q get firewall.$1.reload)" = "0" ] && sh $(uci -q get firewall.$1.path) >/dev/null 2>&1 + } + config_load firewall + config_foreach run_fw_include include + + #/etc/init.d/shadowsocks-libev rules_up >/dev/null 2>&1 + #/etc/init.d/v2ray rules_up >/dev/null 2>&1 + #/etc/init.d/omr-bypass reload_rules >/dev/null 2>&1 + #sh /etc/firewall.gre-tunnel >/dev/null 2>&1 + sleep 5 fi \ No newline at end of file diff --git a/openmptcprouter/files/etc/firewall.omr-server b/openmptcprouter/files/etc/firewall.omr-server index 0af88d7ff..4f5a33809 100644 --- a/openmptcprouter/files/etc/firewall.omr-server +++ b/openmptcprouter/files/etc/firewall.omr-server @@ -1,2 +1,15 @@ #!/bin/sh -/etc/init.d/openmptcprouter-vps set_vps_firewall + +. /lib/functions.sh + +_enable_firewall_check() { + server=$1 + uci -q batch <<-EOF + set openmptcprouter.${server}.set_firewall=1 + EOF +} + +config_load openmptcprouter +config_foreach _enable_firewall_check server +uci -q commit firewall +#/etc/init.d/openmptcprouter-vps set_vps_firewall & diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index a4483f94e..519636647 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -133,7 +133,7 @@ if [ "$(uci -q get firewall.gre_tunnel)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.gre_tunnel=include set firewall.gre_tunnel.path=/etc/firewall.gre-tunnel - set firewall.gre_tunnel.reload=1 + set firewall.gre_tunnel.reload=0 commit firewall EOF fi diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index f0a22aff0..3676a2512 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -94,7 +94,7 @@ if [ "$(uci -q get firewall.v2ray)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.v2ray=include set firewall.v2ray.path=/etc/firewall.v2ray-rules - set firewall.v2ray.reload=1 + set firewall.v2ray.reload=0 commit firewall EOF fi From e83b3a76967c0a1ec5c72c3e85251c60469e4d4e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Mar 2021 09:52:58 +0100 Subject: [PATCH 148/195] Remove shadowsocks change in omr-tracker-server --- omr-tracker/files/bin/omr-tracker-server | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index 8c0e7c577..428a2d1a8 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -57,6 +57,7 @@ _check_master() { local name=$1 local count=0 local countips=0 + local changes="0" config_get master $1 master config_get ip $1 ip config_get port $1 port "65500" @@ -69,10 +70,10 @@ _check_master() { if [ "$server_ping" = true ]; then if [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; then logger -t "OMR-Tracker-Server" "Master server ${name} up ($ip), set it back" + changes="1" #logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip" uci -q batch <<-EOF >/dev/null set shadowsocks-libev.sss${count}.server=$ip - commit shadowsocks-libev EOF if [ "$count" -eq "0" ]; then uci -q batch <<-EOF >/dev/null @@ -97,7 +98,6 @@ _check_master() { /etc/init.d/openvpn restart >/dev/null 2>/dev/null /etc/init.d/dsvpn restart >/dev/null 2>/dev/null fi - /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null fi config_load shadowsocks-libev config_foreach _enable_redir ss_redir @@ -109,6 +109,14 @@ _check_master() { countips=$((countips+1)) } config_list_foreach $1 ip set_ip + #if [ "$server_ping" = true ] && [ "$countips" = "1" ]; then + # uci -q batch <<-EOF >/dev/null + # set shadowsocks-libev.sss${count}.server=$ip + # EOF + # config_foreach _enable_redir ss_redir + #fi + uci -q commit shadowsocks-libev + [ "$changes" = "1" ] && /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null break } } @@ -117,6 +125,7 @@ _check_backup() { local name=$1 local count=0 local countips=0 + local changes="0" config_get backup $1 backup config_get ip $1 ip config_get port $1 port @@ -129,9 +138,9 @@ _check_backup() { if [ "$server_ping" = true ]; then if [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; then logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" + changes="1" uci -q batch <<-EOF >/dev/null set shadowsocks-libev.sss${count}.server=$ip - commit shadowsocks-libev EOF if [ "$count" -eq "0" ]; then uci -q batch <<-EOF >/dev/null @@ -156,7 +165,6 @@ _check_backup() { /etc/init.d/openvpn restart >/dev/null 2>/dev/null /etc/init.d/dsvpn restart >/dev/null 2>/dev/null fi - /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null sleep $waittest fi config_load shadowsocks-libev @@ -169,7 +177,14 @@ _check_backup() { countips=$((countips+1)) } config_list_foreach $1 ip set_ip + #if [ "$server_ping" = true ] && [ "$countips" = "1" ]; then + # uci -q batch <<-EOF >/dev/null + # set shadowsocks-libev.sss${count}.server=$ip + # EOF + # config_foreach _enable_redir ss_redir + #fi uci -q commit shadowsocks-libev + [ "$changes" = "1" ] && /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null [ "$server_ping" = true ] && break } } From 6be97273d0b4cba08f6fd613c94f776ec9d90bde Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 23 Mar 2021 09:53:52 +0100 Subject: [PATCH 149/195] Reload init when needed --- omr-6in4/files/etc/init.d/omr-6in4 | 2 +- openmptcprouter/files/etc/init.d/mptcpovervpn | 2 +- openmptcprouter/files/etc/init.d/openvpnbonding | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 907be1c4c..757ee609c 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -126,7 +126,7 @@ start_service() { } service_triggers() { - procd_add_interface_trigger "omrvpn" + procd_add_reload_trigger "openmptcprouter" } reload_service() { diff --git a/openmptcprouter/files/etc/init.d/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn index d08fca7e5..9ada8c50e 100755 --- a/openmptcprouter/files/etc/init.d/mptcpovervpn +++ b/openmptcprouter/files/etc/init.d/mptcpovervpn @@ -274,5 +274,5 @@ start_service() } service_triggers() { - procd_add_reload_trigger "mptcpovervpn" "network" + procd_add_reload_trigger "openmptcprouter" "network" } \ No newline at end of file diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index 87dfdf483..adad30b5b 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -99,5 +99,5 @@ start_service() } service_triggers() { - procd_add_reload_trigger "openvpn" "network" + procd_add_reload_trigger "openvpn" "network" "openmptcprouter" } \ No newline at end of file From b6e39b3ae9d45174a1428ac3be57a8290c65c0a2 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 24 Mar 2021 13:43:11 +0800 Subject: [PATCH 150/195] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2c9db9174..37f56f40a 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: build: strategy: matrix: - OMR_TARGET: [rpi2, rpi4, r2s, x86_64, cm520-79f, nanopi_neo] + OMR_TARGET: [rpi2, rpi4, x86_64, 4018, 4019] runs-on: ubuntu-latest continue-on-error: true From f064b58a7f3e0976c808a7b454caa8302ab8341f Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Wed, 24 Mar 2021 22:16:20 +0800 Subject: [PATCH 151/195] fixfengge --- .../luci-static/openmptcprouter/cascade.css | 4 ++-- .../openmptcprouter/images/omr-logo.png | Bin 35829 -> 7004 bytes .../view/themes/openmptcprouter/header.htm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/omr-logo.png diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css index 9e25d3b62..b3ba73a8b 100755 --- a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css +++ b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/cascade.css @@ -786,8 +786,8 @@ header h3 { header h3 a, header .brand { float: left; display: block; - padding: 8px 20px 12px; - margin-left: -10px; + /* padding: 8px 20px 12px; */ + /* margin-left: -10px; */ color: #fff; font-size: 20px; font-weight: 200; 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 old mode 100755 new mode 100644 index 90030f3bb28da3b8fa305f28d2ebae6710a5d649..b73be850853aedbd6d0ff959b3ce468a4eaa5e36 GIT binary patch literal 7004 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 literal 35829 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
From 21866054c6a6f857b8d1991754925e802c87c9b8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Mar 2021 16:24:14 +0100 Subject: [PATCH 152/195] Add -w to iptables where missing --- shadowsocks-libev/files/ss-rules | 4 ++-- shadowsocks-libev/files/ss-rules6 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shadowsocks-libev/files/ss-rules b/shadowsocks-libev/files/ss-rules index 2f4583e47..87973133f 100755 --- a/shadowsocks-libev/files/ss-rules +++ b/shadowsocks-libev/files/ss-rules @@ -112,7 +112,7 @@ ss_rules_parse_args() { __errmsg "Requires at least -l or -L option" return 1 fi - if [ -n "$o_dst_forward_recentrst" ] && ! iptables -m recent -h >/dev/null; then + if [ -n "$o_dst_forward_recentrst" ] && ! iptables -w -m recent -h >/dev/null; then __errmsg "Please install iptables-mod-conntrack-extra with opkg" return 1 fi @@ -166,7 +166,7 @@ ss_rules_iptchains_init() { } ss_rules_iptchains_init_mark() { - if [ "$(iptables -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then + if [ "$(iptables -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then iptables-restore -w --noflush <<-EOF *mangle -A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 diff --git a/shadowsocks-libev/files/ss-rules6 b/shadowsocks-libev/files/ss-rules6 index 3225573a1..21e257b10 100755 --- a/shadowsocks-libev/files/ss-rules6 +++ b/shadowsocks-libev/files/ss-rules6 @@ -95,7 +95,7 @@ ss_rules6_parse_args() { __errmsg "Requires at least -l or -L option" return 1 fi - if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -m recent -h >/dev/null; then + if [ -n "$o_dst_forward_recentrst" ] && ! ip6tables -w -m recent -h >/dev/null; then __errmsg "Please install ip6tables-mod-conntrack-extra with opkg" return 1 fi From 716f32fc10a0f83e636bf46b85ac4eb6092b70b2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 25 Mar 2021 16:24:46 +0100 Subject: [PATCH 153/195] Change shadowsocks boot order --- shadowsocks-libev/files/shadowsocks-libev.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 3a453da4b..c524c37d0 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -9,7 +9,7 @@ USE_PROCD=1 EXTRA_COMMANDS="rules_up rules_down rules_exist" -START=99 +START=91 ss_confdir=/var/etc/shadowsocks-libev ss_bindir=/usr/bin From 866cd7a9c2c8600b472771bde3b3840b9d7a54da Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Thu, 25 Mar 2021 23:29:15 +0800 Subject: [PATCH 154/195] fix status --- luci-app-status/Makefile | 0 .../resources/status/css/wanstatus.css | 0 .../resources/status/images/status-doing.png | Bin .../resources/status/images/status-done.png | Bin .../resources/status/images/status-error.png | Bin .../resources/status/images/status-todo.png | Bin .../resources/status/images/status-warn.png | Bin .../resources/status/images/statusError.png | Bin .../resources/status/images/statusOK.png | Bin .../resources/status/images/statusWarning.png | Bin luci-app-status/luasrc/controller/status.lua | 0 luci-app-status/luasrc/view/status/server.htm | 0 .../luasrc/view/status/wanstatus.htm | 431 +++++++++++------- luci-app-status/po/templates/status.pot | 0 luci-app-status/po/zh_Hans/status.po | 0 .../share/luci/menu.d/luci-app-status.json | 0 .../usr/share/rpcd/acl.d/luci-app-status.json | 0 17 files changed, 258 insertions(+), 173 deletions(-) mode change 100755 => 100644 luci-app-status/Makefile mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/css/wanstatus.css mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/status-doing.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/status-done.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/status-error.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/status-todo.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/status-warn.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/statusError.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/statusOK.png mode change 100755 => 100644 luci-app-status/htdocs/luci-static/resources/status/images/statusWarning.png mode change 100755 => 100644 luci-app-status/luasrc/controller/status.lua mode change 100755 => 100644 luci-app-status/luasrc/view/status/server.htm mode change 100755 => 100644 luci-app-status/luasrc/view/status/wanstatus.htm mode change 100755 => 100644 luci-app-status/po/templates/status.pot mode change 100755 => 100644 luci-app-status/po/zh_Hans/status.po mode change 100755 => 100644 luci-app-status/root/usr/share/luci/menu.d/luci-app-status.json mode change 100755 => 100644 luci-app-status/root/usr/share/rpcd/acl.d/luci-app-status.json diff --git a/luci-app-status/Makefile b/luci-app-status/Makefile old mode 100755 new mode 100644 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 old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/status-doing.png b/luci-app-status/htdocs/luci-static/resources/status/images/status-doing.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/status-done.png b/luci-app-status/htdocs/luci-static/resources/status/images/status-done.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/status-error.png b/luci-app-status/htdocs/luci-static/resources/status/images/status-error.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/status-todo.png b/luci-app-status/htdocs/luci-static/resources/status/images/status-todo.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/status-warn.png b/luci-app-status/htdocs/luci-static/resources/status/images/status-warn.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/statusError.png b/luci-app-status/htdocs/luci-static/resources/status/images/statusError.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/statusOK.png b/luci-app-status/htdocs/luci-static/resources/status/images/statusOK.png old mode 100755 new mode 100644 diff --git a/luci-app-status/htdocs/luci-static/resources/status/images/statusWarning.png b/luci-app-status/htdocs/luci-static/resources/status/images/statusWarning.png old mode 100755 new mode 100644 diff --git a/luci-app-status/luasrc/controller/status.lua b/luci-app-status/luasrc/controller/status.lua old mode 100755 new mode 100644 diff --git a/luci-app-status/luasrc/view/status/server.htm b/luci-app-status/luasrc/view/status/server.htm old mode 100755 new mode 100644 diff --git a/luci-app-status/luasrc/view/status/wanstatus.htm b/luci-app-status/luasrc/view/status/wanstatus.htm old mode 100755 new mode 100644 index 16535a648..799b81264 --- a/luci-app-status/luasrc/view/status/wanstatus.htm +++ b/luci-app-status/luasrc/view/status/wanstatus.htm @@ -19,7 +19,7 @@ -- along with OverTheBox. If not, see (http://www.gnu.org/licenses/) -%> <% --- Copyright 2018-2020 Ycarus (Yannick Chabanois) ycarus@zugaina.org +-- Copyright 2018 Ycarus (Yannick Chabanois) ycarus@zugaina.org -- -- Small changes to make this work with OpenMPTCProuter -- New features: @@ -55,10 +55,13 @@ end local curifname = luci.http.formvalue("dev") or "all" - local bandwidthtotalurl = "admin/system/status/multipath_bandwidth" - local bandwidthintfurl = "admin/system/status/interface_bandwidth" -%> <%+header%> +<% +local ucic = luci.model.uci.cursor() +local menuentry = ucic:get("openmptcprouter","settings","menu") or "status" +local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openmptcprouter.png" +%> @@ -75,7 +78,8 @@ return false; } } - XHR.poll(20, '/cgi-bin/luci/admin/system/status/interfaces_status', null, + 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/" .. menuentry:lower() .. "/interfaces_status")%>', null, function(x, mArray) { var status = document.getElementById('openmptcprouter_status'); @@ -99,12 +103,12 @@ { if (mArray.openmptcprouter.remote_from_lease == false) { - var title = String.format("%s (%s)",'You', mArray.openmptcprouter.remote_addr); + var title = String.format("%s (%s)",'<%:You%>', mArray.openmptcprouter.remote_addr); var statusMessageClass = "warning"; var statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; - var statusMessage = _('Your IP was not leased by this router'); + var statusMessage = '<%:Your IP was not leased by this router%>'; } else { - var title = String.format('
%s (%s)', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('You'), mArray.openmptcprouter.remote_addr) + var title = String.format('
%s (%s)', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('<%:You%>'), mArray.openmptcprouter.remote_addr) var statusMessageClass = ""; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; var statusMessage = ""; @@ -130,7 +134,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"; @@ -143,24 +147,24 @@ content += "Version " + mArray.openmptcprouter.version; if (mArray.openmptcprouter.latest_version_omr != mArray.openmptcprouter.version && mArray.openmptcprouter.latest_version_omr != "") { - content += "
(" + _('Latest available version') + " " + mArray.openmptcprouter.latest_version_omr + ")"; + content += "
(" + '<%:Latest available version%>' + " " + mArray.openmptcprouter.latest_version_omr + ")"; } content += "
"; } if (mArray.openmptcprouter.loadavg) { - content += _('Load:') + " " + mArray.openmptcprouter.loadavg; + content += '<%:Load:%>' + " " + mArray.openmptcprouter.loadavg; content += "
"; } if (mArray.openmptcprouter.core_temp) { - content += _('Core temp:') + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °"; + content += '<%:Core temp:%>' + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °"; content += "
"; } if (mArray.openmptcprouter.uptime) { var date = new Date(null); - content += _('Uptime:') + " " + String.format('%t', mArray.openmptcprouter.uptime); + content += '<%:Uptime:%>' + " " + String.format('%t', mArray.openmptcprouter.uptime); content += "
"; } if (mArray.openmptcprouter.dhcpd) @@ -168,38 +172,46 @@ for ( dhcpd in mArray.openmptcprouter.dhcpd ) { var dhcp = mArray.openmptcprouter.dhcpd[dhcpd]; - content += String.format('%s %s %s
', dhcp.interface, _('address:') ,dhcp.router); - content += String.format('%s %s %s - %s
', dhcp.interface, _('range:'), dhcp.range_start, dhcp.range_end); + content += String.format('%s %s %s
', dhcp.interface, '<%:address:%>' ,dhcp.router); + content += String.format('%s %s %s - %s
', dhcp.interface, '<%:range:%>', dhcp.range_start, dhcp.range_end); } } - if (mArray.openmptcprouter.socks_service_enabled == true && mArray.openmptcprouter.service_addr != "") + if (mArray.openmptcprouter.shadowsocks_enabled == true && mArray.openmptcprouter.service_addr != "") { - if (mArray.openmptcprouter.socks_service == false) + if (mArray.openmptcprouter.shadowsocks_service == false) { - statusMessage += _('ShadowSocks is not running'); - if (mArray.openmptcprouter.socks_service_key == false && mArray.openmptcprouter.socks_service_method !== "none") + statusMessage += '<%:ShadowSocks is not running%>'; + if (mArray.openmptcprouter.shadowsocks_service_key == false && mArray.openmptcprouter.shadowsocks_service_method !== "none") { - statusMessage += ' (' + _('empty key') + ')'; + statusMessage += ' (' + '<%:empty key%>' + ')'; } statusMessage += '
'; } } + if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.service_addr != "") + { + if (mArray.openmptcprouter.v2ray_service == false) + { + statusMessage += '<%:V2Ray is not running%>'; + statusMessage += '
'; + } + } if (mArray.openmptcprouter.fsro == true) { - statusMessage += _('Filesystem is readonly') + '
'; + statusMessage += '<%:Filesystem is readonly%>' + '
'; } if (mArray.openmptcprouter.multi_vpn == true) { - statusMessage += _('More than one default VPN is enabled') + '
'; + statusMessage += '<%:More than one default VPN is enabled%>' + '
'; } if (mArray.openmptcprouter.tun_service == false && mArray.openmptcprouter.service_addr != "") { - statusMessage += _('VPN is not running') + '
'; + statusMessage += '<%:VPN is not running%>' + '
'; } if (mArray.openmptcprouter.dns == false) { - statusMessage += _('DNS issue: can\'t resolve hostname') + '
'; + statusMessage += '<%:DNS issue: can\'t resolve hostname%>' + '
'; } if(statusMessage !== "") @@ -208,22 +220,22 @@ statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png"; } else if (mArray.openmptcprouter.service_addr != "") { - if (mArray.openmptcprouter.socks_service_enabled == false) + if (mArray.openmptcprouter.v2ray_enabled == false && mArray.openmptcprouter.shadowsocks_enabled == false) { - statusMessage += _('ShadowSocks is DISABLED') + '
'; + statusMessage += '<%:Proxy is DISABLED%>' + '
'; } if (mArray.openmptcprouter.tun_state == "DOWN") { - statusMessage += _('VPN tunnel DOWN') + '
'; + statusMessage += '<%:VPN tunnel DOWN%>' + '
'; } if (mArray.openmptcprouter.ipv6 == "enabled") { if (mArray.openmptcprouter.tun6_state == "DOWN") { - statusMessage += _('VPN IPv6 tunnel DOWN') + '
'; + statusMessage += '<%:IPv6 tunnel DOWN%>' + '
'; } else if (mArray.openmptcprouter.wan_addr6 == '') { - statusMessage += _('No IPv6 access') + '
'; + statusMessage += '<%:No IPv6 access%>' + '
'; } } if (statusMessage !== "") @@ -237,38 +249,49 @@ temp += ''; temp += '
'; temp += ''; - temp += '
'; + temp += ''; var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png"; var equipmentIcon = ''; content = ""; statusMessage = ""; - if (mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr && mArray.openmptcprouter.wan_addr != "") + if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); + } else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip6) && mArray.openmptcprouter.wan_addr6 != "") + { + var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6); } else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); + } else if (mArray.openmptcprouter.wan_addr6 != "" && mArray.openmptcprouter.service_addr == "127.0.0.1") + { + var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6); } else if (mArray.openmptcprouter.wan_addr != "") { var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr); statusMessageClass = "warning"; statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; + } else if (mArray.openmptcprouter.wan_addr6 != "") + { + var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr6); + statusMessageClass = "warning"; + statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; } else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.ss_addr); } else if (mArray.openmptcprouter.external_check == false) { var title = String.format("%s ?", mArray.openmptcprouter.vps_hostname); } else { - var title = _('No output'); - statusMessage += _('No output') + '
'; + var title = '<%:No output%>'; + statusMessage += '<%:No output%>' + '
'; } - if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) + if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { - statusMessage += _('No VPS IP address, No WAN IP address') + '
'; + statusMessage += '<%:No server IP address, No WAN IP address%>' + '
'; } - if (mArray.openmptcprouter.service_addr !== "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN") + if (mArray.openmptcprouter.service_addr !== "" && (mArray.openmptcprouter.wan_addr !== "" || mArray.openmptcprouter.wan_addr6 !== "") && mArray.openmptcprouter.vps_status == "DOWN") { - statusMessage += _('Can\'t access and use server part') + '
'; + statusMessage += '<%:Can\'t access and use server part%>' + '
'; } if (statusMessage !== "") { @@ -277,21 +300,24 @@ } if (mArray.openmptcprouter.service_addr == "") { - statusMessage += _('No server defined') + '
'; + statusMessage += '<%:No server defined%>' + '
'; } else { if (mArray.openmptcprouter.vps_status == "DOWN") { - statusMessage += _('Can\'t ping server') + '
'; - } else if (mArray.openmptcprouter.socks_service_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) + statusMessage += '<%:Can\'t ping server%>' + '
'; + } else if (mArray.openmptcprouter.shadowsocks_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { - statusMessage += _('Can\'t get public IP address from ShadowSocks') + '
'; - } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.external_check == true) + statusMessage += '<%:Can\'t get public IP address from ShadowSocks%>' + '
'; + } else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { - statusMessage += _('No WAN IP address detected in less than 1 second') + '
'; + statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '
'; + } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.external_check == true) + { + statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '
'; } if (mArray.openmptcprouter.vps_admin == false) { - statusMessage += _('Can\'t contact Server Admin Script'); + statusMessage += '<%:Can\'t contact Server Admin Script%>'; if (mArray.openmptcprouter.vps_admin_error_msg !== "") { statusMessage += ' (' + mArray.openmptcprouter.vps_admin_error_msg + ')'; @@ -300,11 +326,11 @@ } if (mArray.openmptcprouter.vps_mptcp == "0") { - statusMessage += _('MPTCP is not enabled on the server') + '
'; + statusMessage += '<%:MPTCP is not enabled on the server%>' + '
'; } if (mArray.openmptcprouter.vps_time_accurate == false) { - statusMessage += _('Big time difference between the server and the router') + '
'; + statusMessage += '<%:Big time difference between the server and the router%>' + '
'; } } if (statusMessage !== "" && statusMessageClass !== "error") @@ -314,37 +340,52 @@ } if (mArray.openmptcprouter.vps_omr_version) { - content += _('Version') + " " + mArray.openmptcprouter.vps_omr_version; + content += '<%:Version%>' + " " + mArray.openmptcprouter.vps_omr_version; if (mArray.openmptcprouter.vps_kernel) { content += " " + mArray.openmptcprouter.vps_kernel; } if (mArray.openmptcprouter.latest_version_vps !== mArray.openmptcprouter.vps_omr_version && mArray.openmptcprouter.latest_version_vps !== "") { - content += "
(" + _('Latest available version') + " " + mArray.openmptcprouter.latest_version_vps + ")"; + content += "
(" + '<%:Latest available version%>' + " " + mArray.openmptcprouter.latest_version_vps + ")"; } content += "
"; } if (mArray.openmptcprouter.vps_loadavg) { - content += _('Load:') + " " + mArray.openmptcprouter.vps_loadavg; + content += '<%:Load:%>' + " " + mArray.openmptcprouter.vps_loadavg; content += "
"; } if (mArray.openmptcprouter.vps_uptime) { var date = new Date(null); - content += _('Uptime:') + " " + String.format('%t', mArray.openmptcprouter.vps_uptime); + content += '<%:Uptime:%>' + " " + String.format('%t', mArray.openmptcprouter.vps_uptime); content += "
"; } if (mArray.openmptcprouter.server_mptcp == "disabled") { - statusMessage += _('MPTCP may not be enabled on the server') + '
'; + statusMessage += '<%:MPTCP may not be enabled on the server%>' + '
'; statusMessageClass = "warning"; statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; } if (mArray.openmptcprouter.wan_addr6) { - content += _('IPv6:') + " " + mArray.openmptcprouter.wan_addr6; + content += '<%:IPv6:%>' + " " + mArray.openmptcprouter.wan_addr6; + content += '
'; + } + if (mArray.openmptcprouter.proxy_traffic && mArray.openmptcprouter.proxy_traffic != 0) + { + content += '<%:Proxy traffic:%>' + " " + formatBytes(mArray.openmptcprouter.proxy_traffic); + content += '
'; + } + if (mArray.openmptcprouter.vpn_traffic && mArray.openmptcprouter.vpn_traffic != 0) + { + content += '<%:VPN traffic:%>' + " " + formatBytes(mArray.openmptcprouter.vpn_traffic); + content += '
'; + } + if (mArray.openmptcprouter.total_traffic && mArray.openmptcprouter.total_traffic != 0) + { + content += '<%:Total traffic:%>' + " " + formatBytes(mArray.openmptcprouter.total_traffic); content += '
'; } content += '
'; @@ -388,23 +429,37 @@ statusMessage = ""; } // Populate info - var wanip = mArray.wans[i].wanip; + var wanip = mArray.wans[i].wanip; if (anonymize == "true" && testPrivateIP(wanip) == false) { wanip=replaceLastNChars(wanip,"x",6); } - var ipaddr = mArray.wans[i].ipaddr; + var wanip6 = mArray.wans[i].wanip6; + if (anonymize == "true") + { + wanip6=replaceLastNChars(wanip6,"x",6); + } + var ipaddr = mArray.wans[i].ipaddr; if (anonymize == "true" && testPrivateIP(ipaddr) == false) { ipaddr=replaceLastNChars(ipaddr,"x",6); } - var whois = mArray.wans[i].whois; - var signal = mArray.wans[i].signal; + var ip6addr = mArray.wans[i].ip6addr; + if (anonymize == "true") + { + ip6addr=replaceLastNChars(ip6addr,"x",6); + } + var ifname = mArray.wans[i].ifname; + var iftype = mArray.wans[i].iftype; + var whois = mArray.wans[i].whois; + var whois6 = mArray.wans[i].whois6; + var signal = mArray.wans[i].signal; var multipath = mArray.wans[i].multipath; if(multipath == 'master') { master++; } + var zonewan = mArray.wans[i].zonewan; var latency = mArray.wans[i].latency; var mtu = mArray.wans[i].mtu; var operator = mArray.wans[i].operator; @@ -416,12 +471,20 @@ { gateway=replaceLastNChars(gateway,"x",6); } + var gateway6 = mArray.wans[i].gateway6; + if (anonymize == "true" && testPrivateIP(gateway6) == false) + { + gateway6=replaceLastNChars(gateway6,"x",10); + } var gw_ping = mArray.wans[i].gw_ping; + var gw_ping6 = mArray.wans[i].gw_ping6; var server_ping = mArray.wans[i].server_ping; + var server_http = mArray.wans[i].server_http; var ipv6_discover = mArray.wans[i].ipv6_discover; var multipath_available = mArray.wans[i].multipath_available; var multipath_state = mArray.wans[i].multipath_state; var duplicateif = mArray.wans[i].duplicateif; + var duplicatemac = mArray.wans[i].duplicatemac; // Generate template if(mArray.openmptcprouter.remote_from_lease == true && mArray.wans.length == 1) { @@ -434,41 +497,60 @@ if (mArray.wans[i].gateway !== "") { var title = mArray.wans[i].label + " (" + gateway + ")"; + } else if (mArray.wans[i].gateway6 !== "") + { + var title = mArray.wans[i].label + " (" + gateway6 + ")"; } else { var title = mArray.wans[i].label; } var content = ""; if(ipaddr !== '') { - content += String.format('%s %s
',_('ip address:'), ipaddr); + content += String.format('%s %s
','<%:ip address:%>', ipaddr); + } + if(ip6addr !== '' && gateway6 !== '') + { + content += String.format('%s %s
','<%:ipv6 address:%>', ip6addr); } if(wanip !== '') { - content += String.format('%s %s
',_('wan address:'), wanip); + content += String.format('%s %s
','<%:wan address:%>', wanip); + } + if(wanip6 !== '') + { + content += String.format('%s %s
','<%:wan ipv6 address:%>', wanip6); + } + if(ifname !== '' && ifname !== mArray.wans[i].label) + { + content += String.format('%s %s
','<%:interface:%>', ifname); } if(whois !== '') { - content += String.format('%s %s
',_('whois:'), whois); + content += String.format('%s %s
','<%:whois:%>', whois); + } + if(whois6 !== '' && whois6 != whois) + { + content += String.format('%s %s
','<%:whois:%>', whois6); } if(latency !== '') { - content += String.format('%s %s ms
',_('latency:'), latency); + content += String.format('%s %s ms
','<%:latency:%>', latency); } if(mtu !== '') { - content += String.format('%s %s
',_('mtu:'), mtu); + content += String.format('%s %s
','<%:mtu:%>', mtu); } if (operator !== '') { - content += String.format('%s %s
',_('operator:'), operator); + content += String.format('%s %s
','<%:operator:%>', operator); } if (phonenumber !== '' && anonymize !== 'true') { - content += String.format('%s %s
',_('phone number:'), phonenumber); + content += String.format('%s %s
','<%:phone number:%>', phonenumber); } if (donglestate !== '') { - content += String.format('%s %s
',_('state:'), donglestate); + content += String.format('%s %s
','<%:state:%>', donglestate); } if(signal !== '') @@ -488,66 +570,104 @@ { title += String.format(' %s',networktype); } - if(ipaddr == '') + if(ipaddr == '' && ip6addr == '') { - statusMessage += _('No IP defined') + '
'; + statusMessage += '<%:No IP defined%>' + '
'; } - if(gateway == '') + if(gateway == '' && gateway6 == '') { - statusMessage += _('No gateway defined') + '
'; - } else if(gw_ping == 'DOWN') + statusMessage += '<%:No gateway defined%>' + '
'; + } else if(gateway != '' && gw_ping == 'DOWN') { - statusMessage += _('Gateway DOWN') + '
'; + statusMessage += '<%:Gateway DOWN%>' + '
'; + } else if(gateway6 != '' && gw_ping6 == 'DOWN') + { + statusMessage += '<%:Gateway IPv6 DOWN%>' + '
'; } else if(multipath_available == 'ERROR') { - statusMessage += _('Multipath seems to be blocked on the connection') + '
'; + statusMessage += '<%:Multipath seems to be blocked on the connection%>' + '
'; } if(server_ping == 'DOWN' && mArray.openmptcprouter.service_addr !== "") { - statusMessage += _('No Server ping response after 1 second') + '
'; + statusMessage += '<%:No Server ping response after 1 second%>' + '
'; + } + if(server_http == 'DOWN' && mArray.openmptcprouter.service_addr !== "") + { + statusMessage += '<%:No Server http response after 1 second%>' + '
'; } if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.wans[i].gateway) { - statusMessage += _('Wan IP and gateway are identical') + '
'; + statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; + statusMessageClass = "error"; + } + if (stat == 'Offline' && ip6addr != '' && ip6addr == mArray.wans[i].gateway6) + { + statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; statusMessageClass = "error"; } if(multipath == 'master') { if (master > 1) { - statusMessage += _('Multipath master already defined') + '
'; + statusMessage += '<%:Multipath master already defined%>' + '
'; statusMessageClass = "error"; } if(multipath_state !== 'on' && multipath_state !== '') { - statusMessage += _('Multipath current state is ') + multipath_state + '
'; + statusMessage += '<%:Multipath current state is %>' + multipath_state + '
'; statusMessageClass = "error"; } } else { if(multipath !== multipath_state && multipath_state !== '') { - statusMessage += _('Multipath current state is ') + multipath_state + '
'; + statusMessage += '<%:Multipath current state is %>' + multipath_state + '
'; statusMessageClass = "error"; } } if(duplicateif) { - statusMessage += _('Network interface duplicated') + '
'; + statusMessage += '<%:Network interface duplicated%>' + '
'; + statusMessageClass = "error"; + } + if(iftype == "bridge") + { + statusMessage += '<%:Bridge can't have multipath enabled%>' + '
'; + statusMessageClass = "error"; + } + if(duplicatemac) + { + statusMessage += '<%:Network interface MAC address duplicated%>' + '
'; + statusMessageClass = "error"; + } + if(zonewan == "NO") + { + statusMessage += '<%:Network interface not in WAN firewall zone%>' + '
'; statusMessageClass = "error"; } if(ipv6_discover == 'DETECTED') { - statusMessage += _('IPv6 route received') + '
' + statusMessage += '<%:IPv6 route received%>' + '
' } - content += String.format('multipath: %s
',multipath); + if (statusMessage !== "" && statusMessageClass !== "error") + { + statusMessageClass = "warning"; + statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; + } + content += String.format('<%:multipath:%> %s
',multipath); if(mArray.wans[i].qos && mArray.wans[i].download > 0 && mArray.wans[i].upload > 0) { - content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos) + content += String.format('%s %s/%s kbps (%s)','<%:traffic control:%>', mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos) } temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content); temp += '
'; } + if (mArray.wans.length == 0) + { + temp += '
  • '; + temp += '<%:No WAN with multipath enabled:%>'; + temp += '
  • '; + } for( var i = 0; i < mArray.tunnels.length; i++ ) { // Get link color @@ -626,79 +746,79 @@ var content = ""; if(ipaddr !== '') { - content += String.format('%s %s
    ',_('ip address:'), ipaddr); + content += String.format('%s %s
    ','<%:ip address:%>', ipaddr); } if(wanip !== '') { - content += String.format('%s %s
    ',_('wan address:'), wanip); + content += String.format('%s %s
    ','<%:wan address:%>', wanip); } if(whois !== '') { - content += String.format('%s %s
    ',_('whois:'), whois); + content += String.format('%s %s
    ','<%:whois:%>', whois); } if(latency !== '') { - content += String.format('%s %s ms
    ',_('latency:'), latency); + content += String.format('%s %s ms
    ','<%:latency:%>', latency); } if(mtu !== '') { - content += String.format('%s %s
    ',_('mtu:'), mtu); + content += String.format('%s %s
    ','<%:mtu:%>', mtu); } if(ipaddr == '') { - statusMessage += _('No IP defined') + '
    ' + statusMessage += '<%:No IP defined%>' + '
    ' } if(gateway == '') { - statusMessage += _('No gateway defined') + '
    ' + statusMessage += '<%:No gateway defined%>' + '
    ' } else if(gw_ping == 'DOWN') { - statusMessage += _('Gateway DOWN') + '
    ' + statusMessage += '<%:Gateway DOWN%>' + '
    ' } else if(multipath_available == 'ERROR') { - statusMessage += _('Multipath seems to be blocked on the connection') + '
    ' + statusMessage += '<%:Multipath seems to be blocked on the connection%>' + '
    ' } if(server_ping == 'DOWN') { - statusMessage += _('No Server ping response after 1 second') + '
    ' + statusMessage += '<%:No Server ping response after 1 second%>' + '
    ' } if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.tunnels[i].gateway) { - statusMessage += _('Wan IP and gateway are identical') + '
    '; + statusMessage += '<%:Wan IP and gateway are identical%>' + '
    '; statusMessageClass = "error"; } if(multipath == 'master') { if (master > 1) { - statusMessage += _('Multipath master already defined') + '
    '; + statusMessage += '<%:Multipath master already defined%>' + '
    '; statusMessageClass = "error"; } if(multipath_state !== 'on' && multipath_state !== '') { - statusMessage += _('Multipath current state is ') + multipath_state + '
    '; + statusMessage += '<%:Multipath current state is %>' + multipath_state + '
    '; statusMessageClass = "error"; } } else { if(multipath !== multipath_state && multipath_state !== '') { - statusMessage += _('Multipath current state is ') + multipath_state + '
    '; + statusMessage += '<%:Multipath current state is %>' + multipath_state + '
    '; statusMessageClass = "error"; } } if(duplicateif) { - statusMessage += _('Network interface duplicated') + '
    '; + statusMessage += '<%:Network interface duplicated%>' + '
    '; statusMessageClass = "error"; } if(ipv6_discover == 'DETECTED') { - statusMessage += _('IPv6 route received') + '
    ' + statusMessage += '<%:IPv6 route received%>' + '
    ' } - content += String.format('multipath: %s
    ',multipath); + content += String.format('<%:multipath:%> %s
    ',multipath); if(mArray.tunnels[i].qos && mArray.tunnels[i].download > 0 && mArray.tunnels[i].upload > 0) { - content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos) + content += String.format('%s %s/%s kbps (%s)','<%:traffic control:%>', mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos) } temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content); @@ -708,7 +828,7 @@ temp += ''; } if (mArray === null) { - temp += _('No data'); + temp += '<%:No data%>'; } temp += ''; // Close tree @@ -791,23 +911,21 @@