|
@ -1,45 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (C) 2010-2015 OpenWrt.org
|
|
||||||
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
|
||||||
# - 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 <jo@mein.io>
|
|
||||||
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))
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -1,12 +1,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=bcm27xx-eeprom
|
PKG_NAME:=bcm27xx-eeprom
|
||||||
PKG_VERSION:=2fec47bd7f981c9cb21b0fb3fdd4fe07f23f9e3b
|
PKG_VERSION:=47976e4409c6999a8e211976c75c60a97c90275c
|
||||||
PKG_RELEASE:=4
|
PKG_RELEASE:=4
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)?
|
||||||
PKG_HASH:=f54c26ec399801dee7d3d0cc0e969c28878b6f42c982e166c863edb91d2d2a21
|
PKG_HASH:=skip
|
||||||
|
|
||||||
PKG_LICENSE:=BSD-3-Clause Custom
|
PKG_LICENSE:=BSD-3-Clause Custom
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
||||||
|
|
||||||
--- a/rpi-eeprom-update
|
--- a/rpi-eeprom-update
|
||||||
+++ b/rpi-eeprom-update
|
+++ b/rpi-eeprom-update
|
||||||
@@ -24,17 +24,17 @@ else
|
@@ -24,12 +24,12 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Selects the release sub-directory
|
# Selects the release sub-directory
|
||||||
|
@ -26,15 +26,9 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
||||||
ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
|
ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
|
||||||
RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin}
|
RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin}
|
||||||
BOOTFS=${BOOTFS:-/boot}
|
BOOTFS=${BOOTFS:-/boot}
|
||||||
-VCMAILBOX=${VCMAILBOX:-/opt/vc/bin/vcmailbox}
|
|
||||||
+VCMAILBOX=${VCMAILBOX:-/usr/bin/vcmailbox}
|
|
||||||
CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
|
CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
|
||||||
RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
|
RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
|
||||||
|
|
||||||
DT_BOOTLOADER_TS=${DT_BOOTLOADER_TS:-/proc/device-tree/chosen/bootloader/build-timestamp}
|
|
||||||
|
|
||||||
EXIT_SUCCESS=0
|
|
||||||
EXIT_UPDATE_REQUIRED=1
|
|
||||||
--- a/rpi-eeprom-update-default
|
--- a/rpi-eeprom-update-default
|
||||||
+++ b/rpi-eeprom-update-default
|
+++ b/rpi-eeprom-update-default
|
||||||
@@ -1,8 +1,9 @@
|
@@ -1,8 +1,9 @@
|
||||||
|
|
58
cryptodev-linux/Makefile
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2014 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
|
PKG_NAME:=cryptodev-linux
|
||||||
|
PKG_VERSION:=1.12
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE_URL:=https://codeload.github.com/$(PKG_NAME)/$(PKG_NAME)/tar.gz/$(PKG_NAME)-$(PKG_VERSION)?
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
PKG_HASH:=f51c2254749233b1b1d7ec9445158bd709f124f88e1c650fe2faac83c3a81938
|
||||||
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
|
||||||
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define KernelPackage/cryptodev
|
||||||
|
SUBMENU:=Cryptographic API modules
|
||||||
|
TITLE:=Driver for cryptographic acceleration
|
||||||
|
URL:=http://cryptodev-linux.org/
|
||||||
|
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
|
||||||
|
DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash
|
||||||
|
FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX)
|
||||||
|
AUTOLOAD:=$(call AutoLoad,50,cryptodev)
|
||||||
|
MODPARAMS.cryptodev:=cryptodev_verbosity=-1
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/cryptodev/description
|
||||||
|
This is a driver for that allows to use the Linux kernel supported
|
||||||
|
hardware ciphers by user-space applications.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(MAKE) -C $(PKG_BUILD_DIR) \
|
||||||
|
$(KERNEL_MAKE_FLAGS) \
|
||||||
|
KERNEL_DIR="$(LINUX_DIR)"
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/InstallDev
|
||||||
|
$(INSTALL_DIR) $(STAGING_DIR)/usr/include/crypto
|
||||||
|
$(CP) $(PKG_BUILD_DIR)/crypto/cryptodev.h $(STAGING_DIR)/usr/include/crypto/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,cryptodev))
|
|
@ -29,6 +29,16 @@ validate_section() {
|
||||||
'externalip:string:auto'
|
'externalip:string:auto'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
version_over_5_4() {
|
||||||
|
MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}')
|
||||||
|
MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}')
|
||||||
|
if [ $MAJOR_VERSION -ge 5 ] && [ $MINOR_VERSION -gt 13 ] || [ $MAJOR_VERSION -gt 5 ] ; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
start_instance() {
|
start_instance() {
|
||||||
local enable key host port dev
|
local enable key host port dev
|
||||||
|
|
||||||
|
@ -49,7 +59,7 @@ start_instance() {
|
||||||
key=""
|
key=""
|
||||||
|
|
||||||
if [ "$(uci -q get network.omrvpn)" != "" ] && [ "$(uci -q get network.omrvpn)" != "$dev" ]; then
|
if [ "$(uci -q get network.omrvpn)" != "" ] && [ "$(uci -q get network.omrvpn)" != "$dev" ]; then
|
||||||
uci -q set network.omrvpn.ifname=$dev
|
uci -q set network.omrvpn.device=$dev
|
||||||
uci -q commit
|
uci -q commit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -58,6 +68,10 @@ start_instance() {
|
||||||
|
|
||||||
_log "starting ${PROG_NAME} ${1} instance $*"
|
_log "starting ${PROG_NAME} ${1} instance $*"
|
||||||
|
|
||||||
|
if version_over_5_4; then
|
||||||
|
PROG="mptcpize run ${PROG}"
|
||||||
|
fi
|
||||||
|
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
|
|
||||||
procd_set_param command ${PROG} ${mode} \
|
procd_set_param command ${PROG} ${mode} \
|
||||||
|
|
|
@ -50,7 +50,7 @@ start_instance() {
|
||||||
key=""
|
key=""
|
||||||
|
|
||||||
if [ "$(uci -q get network.omrvpn)" != "" ]; then
|
if [ "$(uci -q get network.omrvpn)" != "" ]; then
|
||||||
uci -q set network.omrvpn.ifname=$dev
|
uci -q set network.omrvpn.device=$dev
|
||||||
uci -q commit
|
uci -q commit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,14 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=glorytun
|
PKG_NAME:=glorytun
|
||||||
PKG_VERSION:=0.0.35
|
|
||||||
PKG_RELEASE:=6
|
PKG_RELEASE:=6
|
||||||
|
PKG_SOURCE_PROTO:=git
|
||||||
|
PKG_SOURCE_VERSION:=6d58536f4232fea8eaa10fb60aace8ba11f29ed6
|
||||||
PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/angt/glorytun/releases/download/v$(PKG_VERSION)
|
PKG_SOURCE_URL:=https://github.com/Ysurac/glorytun.git
|
||||||
PKG_HASH:=49e4d8ea4ff2990300b37947b0bd0da3c8e0985bc6eddf29f4146306188fff64
|
PKG_VERSION:=0.0.35-$(PKG_SOURCE_VERSION)
|
||||||
|
|
||||||
|
PKG_FIXUP:=autoreconf
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
|
|
@ -59,9 +59,10 @@ start_instance() {
|
||||||
key=""
|
key=""
|
||||||
|
|
||||||
if [ "$(uci -q get network.omrvpn)" != "" ]; then
|
if [ "$(uci -q get network.omrvpn)" != "" ]; then
|
||||||
uci -q set network.omrvpn.ifname=${dev}
|
uci -q set network.omrvpn.device=${dev}
|
||||||
uci -q commit network
|
uci -q commit network
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_log "starting ${PROG_NAME} ${1} instance $*"
|
_log "starting ${PROG_NAME} ${1} instance $*"
|
||||||
|
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
|
|
|
@ -13,10 +13,11 @@ endif
|
||||||
# Unset environment variables
|
# Unset environment variables
|
||||||
# There are more magic variables to track down, but ain't nobody got time for that
|
# There are more magic variables to track down, but ain't nobody got time for that
|
||||||
|
|
||||||
# From https://golang.org/cmd/go/#hdr-Environment_variables
|
# From https://pkg.go.dev/cmd/go#hdr-Environment_variables
|
||||||
|
|
||||||
# General-purpose environment variables:
|
# General-purpose environment variables:
|
||||||
unexport \
|
unexport \
|
||||||
|
GO111MODULE \
|
||||||
GCCGO \
|
GCCGO \
|
||||||
GOARCH \
|
GOARCH \
|
||||||
GOBIN \
|
GOBIN \
|
||||||
|
@ -36,6 +37,7 @@ unexport \
|
||||||
# GONOPROXY
|
# GONOPROXY
|
||||||
# GOSUMDB
|
# GOSUMDB
|
||||||
# GONOSUMDB
|
# GONOSUMDB
|
||||||
|
# GOVCS
|
||||||
|
|
||||||
# Environment variables for use with cgo:
|
# Environment variables for use with cgo:
|
||||||
unexport \
|
unexport \
|
||||||
|
@ -63,23 +65,20 @@ unexport \
|
||||||
# Special-purpose environment variables:
|
# Special-purpose environment variables:
|
||||||
unexport \
|
unexport \
|
||||||
GCCGOTOOLDIR \
|
GCCGOTOOLDIR \
|
||||||
|
GOEXPERIMENT \
|
||||||
GOROOT_FINAL \
|
GOROOT_FINAL \
|
||||||
GO_EXTLINK_ENABLED
|
GO_EXTLINK_ENABLED
|
||||||
# Unmodified:
|
# Unmodified:
|
||||||
# GIT_ALLOW_PROTOCOL
|
# GIT_ALLOW_PROTOCOL
|
||||||
|
|
||||||
# From https://golang.org/cmd/go/#hdr-Module_support
|
# From https://pkg.go.dev/runtime#hdr-Environment_Variables
|
||||||
unexport \
|
|
||||||
GO111MODULE
|
|
||||||
|
|
||||||
# From https://golang.org/pkg/runtime/#hdr-Environment_Variables
|
|
||||||
unexport \
|
unexport \
|
||||||
GOGC \
|
GOGC \
|
||||||
GOMAXPROCS \
|
GOMAXPROCS \
|
||||||
GORACE \
|
GORACE \
|
||||||
GOTRACEBACK
|
GOTRACEBACK
|
||||||
|
|
||||||
# From https://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command
|
# From https://pkg.go.dev/cmd/cgo#hdr-Using_cgo_with_the_go_command
|
||||||
unexport \
|
unexport \
|
||||||
CC_FOR_TARGET \
|
CC_FOR_TARGET \
|
||||||
CXX_FOR_TARGET
|
CXX_FOR_TARGET
|
||||||
|
@ -111,10 +110,6 @@ unexport \
|
||||||
BOOT_GO_GCFLAGS \
|
BOOT_GO_GCFLAGS \
|
||||||
BOOT_GO_LDFLAGS
|
BOOT_GO_LDFLAGS
|
||||||
|
|
||||||
# From https://golang.org/src/cmd/dist/buildruntime.go
|
|
||||||
unexport \
|
|
||||||
GOEXPERIMENT
|
|
||||||
|
|
||||||
# From https://golang.org/src/cmd/dist/buildtool.go
|
# From https://golang.org/src/cmd/dist/buildtool.go
|
||||||
unexport \
|
unexport \
|
||||||
GOBOOTSTRAP_TOOLEXEC
|
GOBOOTSTRAP_TOOLEXEC
|
||||||
|
@ -148,8 +143,11 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(GO_ARCH),386)
|
ifeq ($(GO_ARCH),386)
|
||||||
# ensure binaries can run on older CPUs
|
ifeq ($(CONFIG_TARGET_x86_geode)$(CONFIG_TARGET_x86_legacy),y)
|
||||||
GO_386:=387
|
GO_386:=softfloat
|
||||||
|
else
|
||||||
|
GO_386:=sse2
|
||||||
|
endif
|
||||||
|
|
||||||
# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors
|
# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors
|
||||||
GO_CFLAGS_TO_REMOVE:=-fno-plt
|
GO_CFLAGS_TO_REMOVE:=-fno-plt
|
||||||
|
@ -195,19 +193,23 @@ GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||pow
|
||||||
|
|
||||||
# ASLR/PIE
|
# ASLR/PIE
|
||||||
|
|
||||||
|
# From https://golang.org/src/cmd/internal/sys/supported.go
|
||||||
GO_PIE_SUPPORTED_OS_ARCH:= \
|
GO_PIE_SUPPORTED_OS_ARCH:= \
|
||||||
android_386 android_amd64 android_arm android_arm64 \
|
android_386 android_amd64 android_arm android_arm64 \
|
||||||
linux_386 linux_amd64 linux_arm linux_arm64 \
|
linux_386 linux_amd64 linux_arm linux_arm64 \
|
||||||
\
|
\
|
||||||
windows_386 windows_amd64 windows_arm \
|
windows_386 windows_amd64 windows_arm \
|
||||||
|
\
|
||||||
|
darwin_amd64 darwin_arm64 \
|
||||||
|
ios_amd64 ios_arm64 \
|
||||||
\
|
\
|
||||||
darwin_amd64 \
|
|
||||||
freebsd_amd64 \
|
freebsd_amd64 \
|
||||||
\
|
\
|
||||||
aix_ppc64 \
|
aix_ppc64 \
|
||||||
\
|
\
|
||||||
linux_ppc64le linux_s390x
|
linux_ppc64le linux_riscv64 linux_s390x
|
||||||
|
|
||||||
|
# From https://golang.org/src/cmd/go/internal/work/init.go
|
||||||
go_pie_install_suffix=$(if $(filter $(1),aix_ppc64 windows_386 windows_amd64 windows_arm),,shared)
|
go_pie_install_suffix=$(if $(filter $(1),aix_ppc64 windows_386 windows_amd64 windows_arm),,shared)
|
||||||
|
|
||||||
ifneq ($(filter $(GO_HOST_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),)
|
ifneq ($(filter $(GO_HOST_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),)
|
||||||
|
@ -236,7 +238,7 @@ endif
|
||||||
|
|
||||||
# General build info
|
# General build info
|
||||||
|
|
||||||
GO_BUILD_CACHE_DIR:=$(or $(call qstrip,$(CONFIG_GOLANG_BUILD_CACHE_DIR)),$(TOPDIR)/.go-build)
|
GO_BUILD_CACHE_DIR:=$(or $(call qstrip,$(CONFIG_GOLANG_BUILD_CACHE_DIR)),$(TMP_DIR)/go-build)
|
||||||
GO_MOD_CACHE_DIR:=$(DL_DIR)/go-mod-cache
|
GO_MOD_CACHE_DIR:=$(DL_DIR)/go-mod-cache
|
||||||
|
|
||||||
GO_MOD_ARGS= \
|
GO_MOD_ARGS= \
|
||||||
|
@ -249,6 +251,6 @@ GO_GENERAL_BUILD_CONFIG_VARS= \
|
||||||
GO_MOD_ARGS="$(GO_MOD_ARGS)"
|
GO_MOD_ARGS="$(GO_MOD_ARGS)"
|
||||||
|
|
||||||
define Go/CacheCleanup
|
define Go/CacheCleanup
|
||||||
$(GENERAL_BUILD_CONFIG_VARS) \
|
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup
|
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
GO_VERSION_MAJOR_MINOR:=1.15
|
GO_VERSION_MAJOR_MINOR:=1.17
|
||||||
GO_VERSION_PATCH:=2
|
GO_VERSION_PATCH:=3
|
||||||
|
|
||||||
PKG_NAME:=golang
|
PKG_NAME:=golang
|
||||||
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
|
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
|
||||||
|
@ -20,7 +20,7 @@ GO_SOURCE_URLS:=https://dl.google.com/go/ \
|
||||||
|
|
||||||
PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
|
PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
|
||||||
PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
|
PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
|
||||||
PKG_HASH:=28bf9d0bcde251011caae230a4a05d917b172ea203f2a62f2c2f9533589d4b4d
|
PKG_HASH:=705c64251e5b25d5d55ede1039c6aa22bea40a7a931d14c370339853643c3df0
|
||||||
|
|
||||||
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
|
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
@ -48,12 +48,13 @@ HOST_GO_VALID_OS_ARCH:= \
|
||||||
freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \
|
freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \
|
||||||
linux_386 linux_amd64 linux_arm linux_arm64 \
|
linux_386 linux_amd64 linux_arm linux_arm64 \
|
||||||
openbsd_386 openbsd_amd64 openbsd_arm openbsd_arm64 \
|
openbsd_386 openbsd_amd64 openbsd_arm openbsd_arm64 \
|
||||||
|
netbsd_386 netbsd_amd64 netbsd_arm netbsd_arm64 \
|
||||||
|
windows_386 windows_amd64 windows_arm windows_arm64 \
|
||||||
\
|
\
|
||||||
netbsd_386 netbsd_amd64 netbsd_arm \
|
|
||||||
plan9_386 plan9_amd64 plan9_arm \
|
plan9_386 plan9_amd64 plan9_arm \
|
||||||
windows_386 windows_amd64 windows_arm \
|
|
||||||
\
|
\
|
||||||
darwin_amd64 darwin_arm64 \
|
darwin_amd64 darwin_arm64 \
|
||||||
|
ios_amd64 ios_arm64 \
|
||||||
\
|
\
|
||||||
dragonfly_amd64 \
|
dragonfly_amd64 \
|
||||||
illumos_amd64 \
|
illumos_amd64 \
|
||||||
|
@ -64,7 +65,9 @@ HOST_GO_VALID_OS_ARCH:= \
|
||||||
\
|
\
|
||||||
linux_ppc64 linux_ppc64le \
|
linux_ppc64 linux_ppc64le \
|
||||||
linux_mips linux_mipsle linux_mips64 linux_mips64le \
|
linux_mips linux_mipsle linux_mips64 linux_mips64le \
|
||||||
linux_riscv64 linux_s390x
|
linux_riscv64 linux_s390x \
|
||||||
|
\
|
||||||
|
openbsd_mips64
|
||||||
|
|
||||||
BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
|
BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
|
||||||
BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
|
BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
|
||||||
|
@ -258,12 +261,14 @@ endif
|
||||||
$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$(PKG_GO_VERSION_ID),$(GO_OS_ARCH),$(PKG_GO_INSTALL_SUFFIX)))
|
$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$(PKG_GO_VERSION_ID),$(GO_OS_ARCH),$(PKG_GO_INSTALL_SUFFIX)))
|
||||||
|
|
||||||
PKG_GO_ZBOOTSTRAP_MODS:= \
|
PKG_GO_ZBOOTSTRAP_MODS:= \
|
||||||
s/defaultGO386 = `[^`]*`/defaultGO386 = `$(or $(GO_386),387)`/; \
|
s/defaultGO386 = `[^`]*`/defaultGO386 = `$(or $(GO_386),sse2)`/; \
|
||||||
s/defaultGOARM = `[^`]*`/defaultGOARM = `$(or $(GO_ARM),5)`/; \
|
s/defaultGOARM = `[^`]*`/defaultGOARM = `$(or $(GO_ARM),5)`/; \
|
||||||
s/defaultGOMIPS = `[^`]*`/defaultGOMIPS = `$(or $(GO_MIPS),hardfloat)`/; \
|
s/defaultGOMIPS = `[^`]*`/defaultGOMIPS = `$(or $(GO_MIPS),hardfloat)`/; \
|
||||||
s/defaultGOMIPS64 = `[^`]*`/defaultGOMIPS64 = `$(or $(GO_MIPS64),hardfloat)`/; \
|
s/defaultGOMIPS64 = `[^`]*`/defaultGOMIPS64 = `$(or $(GO_MIPS64),hardfloat)`/; \
|
||||||
s/defaultGOPPC64 = `[^`]*`/defaultGOPPC64 = `power8`/;
|
s/defaultGOPPC64 = `[^`]*`/defaultGOPPC64 = `power8`/;
|
||||||
|
|
||||||
|
PKG_GO_ZBOOTSTRAP_PATH:=$(PKG_BUILD_DIR)/src/internal/buildcfg/zbootstrap.go
|
||||||
|
|
||||||
PKG_GO_VARS= \
|
PKG_GO_VARS= \
|
||||||
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
||||||
GOENV=off \
|
GOENV=off \
|
||||||
|
@ -306,8 +311,17 @@ define Build/Compile
|
||||||
$(PKG_GO_VARS) \
|
$(PKG_GO_VARS) \
|
||||||
)
|
)
|
||||||
|
|
||||||
$(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' \
|
$(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' "$(PKG_GO_ZBOOTSTRAP_PATH)"
|
||||||
"$(PKG_BUILD_DIR)/src/cmd/internal/objabi/zbootstrap.go"
|
|
||||||
|
( \
|
||||||
|
if echo 'int main() { return 0; }' | $(TARGET_CC) -o $(PKG_BUILD_DIR)/test-ldso -x c - > /dev/null 2>&1; then \
|
||||||
|
LDSO=$$$$( \
|
||||||
|
readelf -l $(PKG_BUILD_DIR)/test-ldso | \
|
||||||
|
sed -n -e 's/^.*interpreter: \(.*\)[]]/\1/p' \
|
||||||
|
) ; \
|
||||||
|
fi ; \
|
||||||
|
$(SED) "s,defaultGO_LDSO = \`[^\`]*\`,defaultGO_LDSO = \`$$$$LDSO\`," "$(PKG_GO_ZBOOTSTRAP_PATH)" ; \
|
||||||
|
)
|
||||||
|
|
||||||
@echo "Building target Go second stage"
|
@echo "Building target Go second stage"
|
||||||
|
|
||||||
|
|
60
grpcurl/Makefile
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=grpcurl
|
||||||
|
PKG_VERSION:=1.8.6
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=v$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://github.com/fullstorydev/grpcurl/archive/refs/tags/
|
||||||
|
PKG_HASH:=18b457f644baabeef0de350596dd8d23563586ee94a3ed3cb290063e097ab934
|
||||||
|
|
||||||
|
PKG_LICENSE:=MIT
|
||||||
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
PKG_MAINTAINER:=Yannick Chabanois <ycarus@zugaina.org>
|
||||||
|
|
||||||
|
PKG_BUILD_DEPENDS:=golang/host
|
||||||
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
PKG_USE_MIPS16:=0
|
||||||
|
|
||||||
|
GO_PKG:=github.com/fullstorydev/grpcurl
|
||||||
|
GO_PKG_BUILD_PKG:=github.com/fullstorydev/grpcurl/cmd/grpcurl
|
||||||
|
GO_PKG_LDFLAGS_X:= \
|
||||||
|
$(GO_PKG)/constant.Version=$(PKG_VERSION) \
|
||||||
|
$(GO_PKG)/constant.Commit=v$(PKG_VERSION)
|
||||||
|
GO_PKG_LDFLAGS:=-s -w
|
||||||
|
GO_PKG_TAGS:=master
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||||
|
|
||||||
|
define Package/grpcurl
|
||||||
|
TITLE:=grpcurl is a command-line tool that lets you interact with gRPC servers
|
||||||
|
URL:=https://github.com/fullstorydev/grpcurl
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
DEPENDS:=$(GO_ARCH_DEPENDS) +protobuf
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/grpcurl/description
|
||||||
|
grpcurl is a command-line tool that lets you interact with gRPC servers. It's basically curl for gRPC servers.
|
||||||
|
|
||||||
|
The main purpose for this tool is to invoke RPC methods on a gRPC server from the command-line. gRPC servers use a binary encoding on the wire (protocol buffers, or "protobufs" for short). So they are basically impossible to interact with using regular curl (and older versions of curl that do not support HTTP/2 are of course non-starters). This program accepts messages using JSON encoding, which is much more friendly for both humans and scripts.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/v2ray-core/install
|
||||||
|
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
|
||||||
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/grpcurl $(1)/usr/bin
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call GoBinPackage,grpcurl))
|
||||||
|
$(eval $(call BuildPackage,grpcurl))
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
|
@ -8,10 +8,10 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=ell
|
PKG_NAME:=ell
|
||||||
PKG_VERSION:=0.30
|
PKG_VERSION:=0.41
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_HASH:=51cf8cc66a9d1038e41f7d619ea5660aa4476904496562b2d45ca79370ca4a5e
|
PKG_HASH:=4e8dba6c53cf152dbd0fd1dc3d4c7b04abf79e20a948895f85943e586870505c
|
||||||
PKG_SOURCE_URL:=@KERNEL/linux/libs/ell
|
PKG_SOURCE_URL:=@KERNEL/linux/libs/ell
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
PKG_LICENSE_FILES:=GPL
|
PKG_LICENSE_FILES:=GPL
|
||||||
|
|
|
@ -1,24 +1,22 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016 Velocloud Inc.
|
# Copyright (C) 2016 Velocloud Inc.
|
||||||
# Copyright (C) 2016 Aleksander Morgado <aleksander@aleksander.es>
|
# Copyright (C) 2016 Aleksander Morgado <aleksander@aleksander.es>
|
||||||
# Copyright (C) 2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libmbim.git
|
|
||||||
PKG_SOURCE_VERSION:=c90c7c5b877de6e413b4833aaf1a42d2d128b051
|
|
||||||
|
|
||||||
PKG_NAME:=libmbim
|
PKG_NAME:=libmbim
|
||||||
PKG_VERSION:=1.25.3-$(PKG_SOURCE_VERSION)
|
PKG_VERSION:=1.26.2
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_MAINTAINER:=Nicholas Smith <nicholas.smith@telcoantennas.com.au>
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
|
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libmbim
|
||||||
|
PKG_HASH:=10c77bf5b5eb8c92ba80e9b519923ad9b898362bc8e1928e2bc9a17eeba649af
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
||||||
|
|
||||||
PKG_FIXUP:=autoreconf
|
|
||||||
PKG_INSTALL:=1
|
PKG_INSTALL:=1
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016 Velocloud Inc.
|
# Copyright (C) 2016 Velocloud Inc.
|
||||||
# Copyright (C) 2016 Aleksander Morgado <aleksander@aleksander.es>
|
# Copyright (C) 2016 Aleksander Morgado <aleksander@aleksander.es>
|
||||||
# Copyright (C) 2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libqmi.git
|
|
||||||
PKG_SOURCE_VERSION:=29fab8a1d4496ca5a1d32bb486013b1868a718ba
|
|
||||||
PKG_NAME:=libqmi
|
PKG_NAME:=libqmi
|
||||||
PKG_VERSION:=1.29.3-$(PKG_SOURCE_VERSION)
|
PKG_VERSION:=1.30.4
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_FIXUP:=autoreconf
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_MAINTAINER:=Nicholas Smith <nicholas.smith@telcoantennas.com.au>
|
PKG_SOURCE_URL:=https://www.freedesktop.org/software/libqmi
|
||||||
|
PKG_HASH:=00d7da30a4f8d1185f37cba289cfaf1dfcd04a58f2f76d6acfdf5b85312d6ed6
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
|
||||||
|
|
||||||
PKG_INSTALL:=1
|
PKG_INSTALL:=1
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
@ -67,12 +66,22 @@ CONFIGURE_ARGS += \
|
||||||
--disable-gtk-doc-pdf \
|
--disable-gtk-doc-pdf \
|
||||||
--disable-silent-rules \
|
--disable-silent-rules \
|
||||||
--enable-firmware-update \
|
--enable-firmware-update \
|
||||||
--$(if $(LIBQMI_WITH_MBIM_QMUX),en,dis)able-mbim-qmux \
|
|
||||||
--$(if $(LIBQMI_WITH_QRTR_GLIB),en,dis)able-qrtr \
|
|
||||||
--enable-more-warnings=yes \
|
--enable-more-warnings=yes \
|
||||||
--without-udev \
|
--without-udev \
|
||||||
--without-udev-base-dir
|
--without-udev-base-dir
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_LIBQMI_WITH_MBIM_QMUX),y)
|
||||||
|
CONFIGURE_ARGS += --enable-mbim-qmux
|
||||||
|
else
|
||||||
|
CONFIGURE_ARGS += --disable-mbim-qmux
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_LIBQMI_WITH_QRTR_GLIB),y)
|
||||||
|
CONFIGURE_ARGS += --enable-qrtr
|
||||||
|
else
|
||||||
|
CONFIGURE_ARGS += --disable-qrtr
|
||||||
|
endif
|
||||||
|
|
||||||
define Build/InstallDev
|
define Build/InstallDev
|
||||||
$(INSTALL_DIR) $(1)/usr/include
|
$(INSTALL_DIR) $(1)/usr/include
|
||||||
$(CP) \
|
$(CP) \
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2021-04-30 16:16+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"glorytun-tcp/fr/>\n"
|
"glorytun-tcp/fr/>\n"
|
||||||
|
@ -8,7 +8,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32
|
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32
|
||||||
msgid "Advanced Settings"
|
msgid "Advanced Settings"
|
||||||
|
@ -89,7 +89,7 @@ msgstr "Serveur"
|
||||||
|
|
||||||
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:73
|
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:73
|
||||||
msgid "Timeout"
|
msgid "Timeout"
|
||||||
msgstr "Temporisation"
|
msgstr "Hors Délais"
|
||||||
|
|
||||||
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:70
|
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:70
|
||||||
msgid "chacha"
|
msgid "chacha"
|
||||||
|
|
|
@ -15,7 +15,7 @@ if [ "$(uci -q get network.glorytun)" = "" ] && [ "$(uci -q get network.omrvpn)"
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
delete network.glorytun
|
delete network.glorytun
|
||||||
set network.glorytun=interface
|
set network.glorytun=interface
|
||||||
set network.glorytun.ifname=tun0
|
set network.glorytun.device=tun0
|
||||||
set network.glorytun.proto=dhcp
|
set network.glorytun.proto=dhcp
|
||||||
set network.glorytun.ip4table=vpn
|
set network.glorytun.ip4table=vpn
|
||||||
set network.glorytun.multipath=off
|
set network.glorytun.multipath=off
|
||||||
|
@ -48,6 +48,7 @@ if [ "$(uci -q show firewall | grep Allow-All-LAN-to-VPN)" = "" ]; then
|
||||||
set firewall.@rule[-1].name='Allow-All-LAN-to-VPN'
|
set firewall.@rule[-1].name='Allow-All-LAN-to-VPN'
|
||||||
set firewall.@rule[-1].dest='vpn'
|
set firewall.@rule[-1].dest='vpn'
|
||||||
set firewall.@rule[-1].src='lan'
|
set firewall.@rule[-1].src='lan'
|
||||||
|
set firewall.@rule[-1].proto='all'
|
||||||
commit firewall
|
commit firewall
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -8,3 +8,7 @@ config glorytun-udp 'vpn'
|
||||||
option localip '10.255.254.2'
|
option localip '10.255.254.2'
|
||||||
option remoteip '10.255.254.1'
|
option remoteip '10.255.254.1'
|
||||||
option mode 'to'
|
option mode 'to'
|
||||||
|
option kxtimeout '7d'
|
||||||
|
option timetolerance '10m'
|
||||||
|
option keepalive '25s'
|
||||||
|
option rateauto '0'
|
|
@ -11,7 +11,7 @@ if [ "$(uci -q get network.glorytun-udp)" = "" ] && [ "$(uci -q get network.omrv
|
||||||
uci -q batch <<-EOF >/dev/null
|
uci -q batch <<-EOF >/dev/null
|
||||||
delete network.glorytun-udp
|
delete network.glorytun-udp
|
||||||
set network.glorytun-udp=interface
|
set network.glorytun-udp=interface
|
||||||
set network.glorytun-udp.ifname=tun0
|
set network.glorytun-udp.device=tun0
|
||||||
set network.glorytun-udp.proto=dhcp
|
set network.glorytun-udp.proto=dhcp
|
||||||
set network.glorytun-udp.ip4table=vpn
|
set network.glorytun-udp.ip4table=vpn
|
||||||
set network.glorytun-udp.multipath=off
|
set network.glorytun-udp.multipath=off
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-05-21 19:20+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsiperf/fr/>\n"
|
"luciapplicationsiperf/fr/>\n"
|
||||||
|
@ -74,7 +74,7 @@ msgstr "Vitesse souhaitée (Mbits/s)"
|
||||||
|
|
||||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:169
|
#: luci-app-iperf/luasrc/view/iperf/test.htm:169
|
||||||
msgid "Test"
|
msgid "Test"
|
||||||
msgstr "Teste"
|
msgstr "Essai"
|
||||||
|
|
||||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
|
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
|
||||||
msgid "This iPerf interface is in bêta. No support for this."
|
msgid "This iPerf interface is in bêta. No support for this."
|
||||||
|
|
|
@ -82,6 +82,12 @@ return L.view.extend({
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.modalonly = true;
|
o.modalonly = true;
|
||||||
|
|
||||||
|
o = s.taboption('advanced', form.Value, 'latency_tolerance', _('Latency tolerance'));
|
||||||
|
o.default = '300';
|
||||||
|
o.datatype = "uinteger";
|
||||||
|
o.rmempty = false;
|
||||||
|
o.modalonly = true;
|
||||||
|
|
||||||
return m.render();
|
return m.render();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2021-04-30 16:16+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsmlvpn/fr/>\n"
|
"luciapplicationsmlvpn/fr/>\n"
|
||||||
|
@ -8,7 +8,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32
|
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32
|
||||||
msgid "Advanced Settings"
|
msgid "Advanced Settings"
|
||||||
|
@ -20,7 +20,7 @@ msgstr "Client"
|
||||||
|
|
||||||
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:75
|
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:75
|
||||||
msgid "Disable encryption"
|
msgid "Disable encryption"
|
||||||
msgstr ""
|
msgstr "Désactiver le chiffrement"
|
||||||
|
|
||||||
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34
|
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
|
|
|
@ -63,7 +63,10 @@ function multipath_bandwidth()
|
||||||
local label = s["label"]
|
local label = s["label"]
|
||||||
local dev = get_device(intname)
|
local dev = get_device(intname)
|
||||||
if dev == "" then
|
if dev == "" then
|
||||||
dev = get_device(s["ifname"])
|
dev = get_device(s["device"])
|
||||||
|
if dev == "" then
|
||||||
|
dev = get_device(s["ifname"])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local multipath = s["multipath"] or ""
|
local multipath = s["multipath"] or ""
|
||||||
if dev ~= "lo" and dev ~= "" then
|
if dev ~= "lo" and dev ~= "" then
|
||||||
|
@ -206,8 +209,8 @@ end
|
||||||
function mptcp_monitor_data()
|
function mptcp_monitor_data()
|
||||||
luci.http.prepare_content("text/plain")
|
luci.http.prepare_content("text/plain")
|
||||||
local fullmesh
|
local fullmesh
|
||||||
fullmesh = io.popen("cat /proc/net/mptcp_net/snmp")
|
fullmesh = io.popen("multipath -m")
|
||||||
if fullmesh then
|
if fullmesh:read() ~= nil then
|
||||||
while true do
|
while true do
|
||||||
local ln = fullmesh:read("*l")
|
local ln = fullmesh:read("*l")
|
||||||
if not ln then break end
|
if not ln then break end
|
||||||
|
@ -222,7 +225,7 @@ function mptcp_connections_data()
|
||||||
luci.http.prepare_content("text/plain")
|
luci.http.prepare_content("text/plain")
|
||||||
local connections
|
local connections
|
||||||
connections = io.popen("multipath -c")
|
connections = io.popen("multipath -c")
|
||||||
if connections then
|
if connections:read() ~= nil then
|
||||||
while true do
|
while true do
|
||||||
local ln = connections:read("*l")
|
local ln = connections:read("*l")
|
||||||
if not ln then break end
|
if not ln then break end
|
||||||
|
|
|
@ -21,56 +21,80 @@ o:value(0, translate("disable"))
|
||||||
o = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh"))
|
o = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh"))
|
||||||
o:value("default", translate("default"))
|
o:value("default", translate("default"))
|
||||||
o:value("fullmesh", "fullmesh")
|
o:value("fullmesh", "fullmesh")
|
||||||
o:value("ndiffports", "ndiffports")
|
if uname.release:sub(1,4) ~= "5.14" then
|
||||||
o:value("binder", "binder")
|
o:value("ndiffports", "ndiffports")
|
||||||
if uname.release:sub(1,4) ~= "4.14" then
|
o:value("binder", "binder")
|
||||||
|
if uname.release:sub(1,4) ~= "4.14" then
|
||||||
o:value("netlink", translate("Netlink"))
|
o:value("netlink", translate("Netlink"))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
o = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler"))
|
o = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler"))
|
||||||
o:value("default", translate("default"))
|
o:value("default", translate("default"))
|
||||||
o:value("roundrobin", "round-robin")
|
if uname.release:sub(1,4) ~= "5.15" then
|
||||||
o:value("redundant", "redundant")
|
o:value("roundrobin", "round-robin")
|
||||||
if uname.release:sub(1,4) ~= "4.14" then
|
o:value("redundant", "redundant")
|
||||||
|
if uname.release:sub(1,4) ~= "4.14" then
|
||||||
o:value("blest", "BLEST")
|
o:value("blest", "BLEST")
|
||||||
o:value("ecf", "ECF")
|
o:value("ecf", "ECF")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if uname.release:sub(1,4) ~= "5.15" then
|
||||||
|
o = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries"))
|
||||||
|
o.datatype = "uinteger"
|
||||||
|
o.rmempty = false
|
||||||
|
end
|
||||||
|
if uname.release:sub(1,4) ~= "5.15" then
|
||||||
|
o = s:option(Value, "mptcp_version", translate("Multipath TCP version"))
|
||||||
|
o.datatype = "uinteger"
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = 0
|
||||||
end
|
end
|
||||||
o = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries"))
|
|
||||||
o.datatype = "uinteger"
|
|
||||||
o.rmempty = false
|
|
||||||
o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic"))
|
o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic"))
|
||||||
local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs")
|
local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs")
|
||||||
for cong in string.gmatch(availablecong, "[^%s]+") do
|
for cong in string.gmatch(availablecong, "[^%s]+") do
|
||||||
o:value(cong, translate(cong))
|
o:value(cong, translate(cong))
|
||||||
end
|
end
|
||||||
|
|
||||||
o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses"))
|
if uname.release:sub(1,4) == "5.15" then
|
||||||
o.datatype = "uinteger"
|
o = s:option(Value, "mptcp_subflows", translate("specifies the maximum number of additional subflows allowed for each MPTCP connection"))
|
||||||
o.rmempty = false
|
o.datatype = "uinteger"
|
||||||
o.default = 1
|
o.rmempty = false
|
||||||
--o:depends("mptcp_path_manager","fullmesh")
|
o.default = 3
|
||||||
|
|
||||||
|
o = s:option(Value, "mptcp_add_addr_accepted", translate("specifies the maximum number of ADD_ADDR suboptions accepted for each MPTCP connection"))
|
||||||
|
o.datatype = "uinteger"
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = 1
|
||||||
|
else
|
||||||
|
o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses"))
|
||||||
|
o.datatype = "uinteger"
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = 1
|
||||||
|
--o:depends("mptcp_path_manager","fullmesh")
|
||||||
|
|
||||||
o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout"))
|
o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout"))
|
||||||
o:value(1, translate("enable"))
|
o:value(1, translate("enable"))
|
||||||
o:value(0, translate("disable"))
|
o:value(0, translate("disable"))
|
||||||
--o:depends("mptcp_path_manager","fullmesh")
|
--o:depends("mptcp_path_manager","fullmesh")
|
||||||
|
|
||||||
o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number"))
|
o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number"))
|
||||||
o.datatype = "uinteger"
|
o.datatype = "uinteger"
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
o.default = 1
|
o.default = 1
|
||||||
--o:depends("mptcp_path_manager","ndiffports")
|
--o:depends("mptcp_path_manager","ndiffports")
|
||||||
|
|
||||||
o = s:option(ListValue, "mptcp_rr_cwnd_limited", translate("Fill the congestion window on all subflows for round robin"))
|
o = s:option(ListValue, "mptcp_rr_cwnd_limited", translate("Fill the congestion window on all subflows for round robin"))
|
||||||
o:value("Y", translate("enable"))
|
o:value("Y", translate("enable"))
|
||||||
o:value("N", translate("disable"))
|
o:value("N", translate("disable"))
|
||||||
o.default = "Y"
|
o.default = "Y"
|
||||||
--o:depends("mptcp_scheduler","roundrobin")
|
--o:depends("mptcp_scheduler","roundrobin")
|
||||||
|
|
||||||
o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin"))
|
o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin"))
|
||||||
o.datatype = "uinteger"
|
o.datatype = "uinteger"
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
o.default = 1
|
o.default = 1
|
||||||
--o:depends("mptcp_scheduler","roundrobin")
|
--o:depends("mptcp_scheduler","roundrobin")
|
||||||
|
end
|
||||||
|
|
||||||
s = m:section(TypedSection, "interface", translate("Interfaces Settings"))
|
s = m:section(TypedSection, "interface", translate("Interfaces Settings"))
|
||||||
o = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master"))
|
o = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master"))
|
||||||
|
|
|
@ -238,8 +238,8 @@
|
||||||
labelup_25.parentNode.appendChild(textup);
|
labelup_25.parentNode.appendChild(textup);
|
||||||
}
|
}
|
||||||
|
|
||||||
labeldn_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 3, data_wanted / 60);
|
labeldn_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 4, data_wanted / 60);
|
||||||
labelup_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 3, data_wanted / 60);
|
labelup_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 4, data_wanted / 60);
|
||||||
|
|
||||||
/* render datasets, start update interval */
|
/* render datasets, start update interval */
|
||||||
XHR.poll(3, '<%=build_url(bandwidthtotalurl, all)%>', null,
|
XHR.poll(3, '<%=build_url(bandwidthtotalurl, all)%>', null,
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-04-30 16:16+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsmptcp/fr/>\n"
|
"luciapplicationsmptcp/fr/>\n"
|
||||||
|
@ -11,7 +11,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:775
|
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:775
|
||||||
msgid "(%d minute window, %d second interval)"
|
msgid "(%d minute window, %d second interval)"
|
||||||
|
@ -44,7 +44,7 @@ msgstr "Contrôle de la congestion"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:69
|
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:69
|
||||||
msgid "Consecutive segments that should be sent for round robin"
|
msgid "Consecutive segments that should be sent for round robin"
|
||||||
msgstr ""
|
msgstr "Segments consécutifs à envoyer pour round robin"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:311
|
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:311
|
||||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:314
|
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:314
|
||||||
|
@ -77,7 +77,7 @@ msgstr "Connexions établies"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:63
|
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:63
|
||||||
msgid "Fill the congestion window on all subflows for round robin"
|
msgid "Fill the congestion window on all subflows for round robin"
|
||||||
msgstr ""
|
msgstr "Remplir la fenêtre de congestion de tous les sous-flux pour round robin"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:46
|
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:46
|
||||||
msgid "Fullmesh subflows for each pair of IP addresses"
|
msgid "Fullmesh subflows for each pair of IP addresses"
|
||||||
|
@ -215,7 +215,7 @@ msgstr "Paramètres"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65
|
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65
|
||||||
msgid "Test"
|
msgid "Test"
|
||||||
msgstr ""
|
msgstr "Essai"
|
||||||
|
|
||||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
|
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
|
||||||
msgid "Upload:"
|
msgid "Upload:"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI Interface to bypass domains
|
LUCI_TITLE:=LuCI Interface to bypass domains
|
||||||
LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +iptables-mod-extra +kmod-ipt-ndpi +iptables
|
LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-extra +iptables
|
||||||
|
|
||||||
PKG_LICENSE:=GPLv3
|
PKG_LICENSE:=GPLv3
|
||||||
|
|
||||||
|
|
|
@ -190,7 +190,7 @@ return L.view.extend({
|
||||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||||
o.default = o.enabled;
|
o.default = o.enabled;
|
||||||
|
|
||||||
o = s.option(form.Value, 'proto', _('Protocol/Service'));
|
o = s.option(form.ListValue, 'proto', _('Protocol/Service'));
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.load = function(section_id) {
|
o.load = function(section_id) {
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-04-30 16:16+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsomr-bypass/fr/>\n"
|
"luciapplicationsomr-bypass/fr/>\n"
|
||||||
|
@ -11,7 +11,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:166
|
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:166
|
||||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:174
|
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:174
|
||||||
|
@ -94,7 +94,7 @@ msgstr "Ports de destination"
|
||||||
|
|
||||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:90
|
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:90
|
||||||
msgid "Ports source"
|
msgid "Ports source"
|
||||||
msgstr ""
|
msgstr "Ports source"
|
||||||
|
|
||||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:193
|
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:193
|
||||||
msgid "Protocol/Service"
|
msgid "Protocol/Service"
|
||||||
|
|
|
@ -14,13 +14,18 @@ _add_proto() {
|
||||||
if [ "$(dd if=/proc/net/xt_ndpi/proto bs=4096 2> /dev/null | grep $protoname)" = "" ]; then
|
if [ "$(dd if=/proc/net/xt_ndpi/proto bs=4096 2> /dev/null | grep $protoname)" = "" ]; then
|
||||||
echo "add_custom $protoname" >/proc/net/xt_ndpi/proto
|
echo "add_custom $protoname" >/proc/net/xt_ndpi/proto
|
||||||
fi
|
fi
|
||||||
|
allurls="$(dd if=/proc/net/xt_ndpi/host_proto bs=4096 2> /dev/null)"
|
||||||
hosts="$( uci -q get omr-bypass.$protoname.url )"
|
hosts="$( uci -q get omr-bypass.$protoname.url )"
|
||||||
for url in $hosts; do
|
for url in $hosts; do
|
||||||
echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto
|
if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $url)" = "" ]; then
|
||||||
|
echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
ip="$( uci -q get omr-bypass.$protoname.ip )"
|
ip="$( uci -q get omr-bypass.$protoname.ip )"
|
||||||
for ip in $ips; do
|
for ip in $ips; do
|
||||||
echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto
|
if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $ip)" = "" ]; then
|
||||||
|
echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,12 +105,14 @@ _bypass_domain() {
|
||||||
fi
|
fi
|
||||||
if [ "$(uci -q get dhcp.@dnsmasq[0].ipset | grep /$domain/)" = "" ]; then
|
if [ "$(uci -q get dhcp.@dnsmasq[0].ipset | grep /$domain/)" = "" ]; then
|
||||||
uci -q add_list dhcp.@dnsmasq[0].ipset="/$domain/omr_dst_bypass_$intf,omr6_dst_bypass_$intf"
|
uci -q add_list dhcp.@dnsmasq[0].ipset="/$domain/omr_dst_bypass_$intf,omr6_dst_bypass_$intf"
|
||||||
|
add_domains="true"
|
||||||
else
|
else
|
||||||
dnsmasqipset=$(uci -q get dhcp.@dnsmasq[0].ipset | sed 's/ /\n/g')
|
dnsmasqipset=$(uci -q get dhcp.@dnsmasq[0].ipset | sed 's/ /\n/g')
|
||||||
for dnsipset in $dnsmasqipset; do
|
for dnsipset in $dnsmasqipset; do
|
||||||
if [ "$(echo $dnsipset | cut -d/ -f2)" = "$domain" ]; then
|
if [ "$(echo $dnsipset | cut -d/ -f2)" = "$domain" ]; then
|
||||||
uci -q del_list dhcp.@dnsmasq[0].ipset=$dnsipset
|
uci -q del_list dhcp.@dnsmasq[0].ipset=$dnsipset
|
||||||
uci -q add_list dhcp.@dnsmasq[0].ipset="$dnsipset,omr_dst_bypass_$intf,omr6_dst_bypass_$intf"
|
uci -q add_list dhcp.@dnsmasq[0].ipset="$dnsipset,omr_dst_bypass_$intf,omr6_dst_bypass_$intf"
|
||||||
|
add_domains="true"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
@ -501,9 +508,10 @@ _intf_rule_v2ray_rules() {
|
||||||
|
|
||||||
_intf_rule() {
|
_intf_rule() {
|
||||||
local intf
|
local intf
|
||||||
config_get intf $1 ifname
|
intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
||||||
[ -z "$intf" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
|
||||||
[ -n "$(echo $intf | grep '@')" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
[ -n "$(echo $intf | grep '@')" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
||||||
|
[ -z "$intf" ] && config_get intf $1 device
|
||||||
|
[ -n "$(echo $intf | grep '/')" ] && return
|
||||||
#count=$((count+1))
|
#count=$((count+1))
|
||||||
config_get count $1 metric
|
config_get count $1 metric
|
||||||
local mode
|
local mode
|
||||||
|
@ -537,7 +545,7 @@ _intf_rule() {
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
ip rule add prio 1 fwmark 0x539$count lookup $count pref 1 > /dev/null 2>&1
|
ip rule add prio 1 fwmark 0x539$count lookup $count pref 1 > /dev/null 2>&1
|
||||||
ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count > /dev/null 2>&1
|
ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count pref 1 > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
|
if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||||
|
@ -680,6 +688,7 @@ boot() {
|
||||||
start_service() {
|
start_service() {
|
||||||
#local count
|
#local count
|
||||||
logger -t "omr-bypass" "Starting OMR-ByPass..."
|
logger -t "omr-bypass" "Starting OMR-ByPass..."
|
||||||
|
add_domains="false"
|
||||||
config_load omr-bypass
|
config_load omr-bypass
|
||||||
config_foreach _add_proto proto
|
config_foreach _add_proto proto
|
||||||
disableipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)"
|
disableipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)"
|
||||||
|
@ -797,11 +806,11 @@ start_service() {
|
||||||
config_foreach _bypass_proto dpis
|
config_foreach _bypass_proto dpis
|
||||||
uci -q commit omr-bypass
|
uci -q commit omr-bypass
|
||||||
|
|
||||||
[ -z "$RELOAD" ] && {
|
[ -z "$RELOAD" ] && [ "$add_domains" = "true" ] && {
|
||||||
logger -t "omr-bypass" "Restart dnsmasq..."
|
logger -t "omr-bypass" "Restart dnsmasq..."
|
||||||
/etc/init.d/dnsmasq restart
|
/etc/init.d/dnsmasq restart
|
||||||
}
|
}
|
||||||
[ -n "$RELOAD" ] && {
|
[ -n "$RELOAD" ] && [ "$add_domains" = "true" ] && {
|
||||||
logger -t "omr-bypass" "Reload dnsmasq..."
|
logger -t "omr-bypass" "Reload dnsmasq..."
|
||||||
/etc/init.d/dnsmasq reload
|
/etc/init.d/dnsmasq reload
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-03-31 15:07+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsomr-dscp/fr/>\n"
|
"luciapplicationsomr-dscp/fr/>\n"
|
||||||
|
@ -11,7 +11,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:21
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:21
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:73
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:73
|
||||||
|
@ -36,15 +36,15 @@ msgstr "CS3 - SIP"
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:25
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:25
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
|
||||||
msgid "CS4 - Real-Time Interactive"
|
msgid "CS4 - Real-Time Interactive"
|
||||||
msgstr ""
|
msgstr "CS4 - Temps réel interactif"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78
|
||||||
msgid "CS5 - Broadcast Video"
|
msgid "CS5 - Broadcast Video"
|
||||||
msgstr ""
|
msgstr "CS5 - Diffusion vidéo"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
|
||||||
msgid "CS5 - Broadcast video"
|
msgid "CS5 - Broadcast video"
|
||||||
msgstr ""
|
msgstr "CS5 - Diffusion vidéo"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:27
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:27
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:79
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:79
|
||||||
|
@ -54,7 +54,7 @@ msgstr "CS6 - Routage réseau"
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:28
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:28
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
|
||||||
msgid "CS7 - Latency sensitive"
|
msgid "CS7 - Latency sensitive"
|
||||||
msgstr ""
|
msgstr "CS7 - Sensible à la latence"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:20
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:20
|
||||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:72
|
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:72
|
||||||
|
@ -116,7 +116,7 @@ msgstr "EF - Voix"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json:3
|
#: luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json:3
|
||||||
msgid "Grant UCI access for luci-app-dscp"
|
msgid "Grant UCI access for luci-app-dscp"
|
||||||
msgstr ""
|
msgstr "Permettre l'accès pour luci-app-dscp"
|
||||||
|
|
||||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:4
|
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:4
|
||||||
#: luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json:3
|
#: luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json:3
|
||||||
|
|
|
@ -256,3 +256,8 @@ config domains
|
||||||
option class 'cs1'
|
option class 'cs1'
|
||||||
option comment 'WindowsUpdate'
|
option comment 'WindowsUpdate'
|
||||||
|
|
||||||
|
config domains
|
||||||
|
option name 'tv.milkywan.fr'
|
||||||
|
option class 'cs5'
|
||||||
|
option comment 'MilkyWan TV'
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,10 @@ config_get lan_device lan ifname
|
||||||
config_load dscp
|
config_load dscp
|
||||||
|
|
||||||
_ipt4() {
|
_ipt4() {
|
||||||
iptables -w -t mangle "$@"
|
iptables -w -t mangle "$@" 2>&1 >/dev/null
|
||||||
}
|
}
|
||||||
_ipt6() {
|
_ipt6() {
|
||||||
ip6tables -w -t mangle "$@"
|
ip6tables -w -t mangle "$@" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
_add_dscp_rule() {
|
_add_dscp_rule() {
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-04-30 16:16+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsomr-quota/fr/>\n"
|
"luciapplicationsomr-quota/fr/>\n"
|
||||||
|
@ -11,7 +11,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.5.2\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
|
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
|
@ -23,7 +23,7 @@ msgstr "Activer"
|
||||||
|
|
||||||
#: luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json:3
|
#: luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json:3
|
||||||
msgid "Grant UCI access for luci-app-omr-quota"
|
msgid "Grant UCI access for luci-app-omr-quota"
|
||||||
msgstr ""
|
msgstr "Permettre l'accès à luci-app-omr-quota"
|
||||||
|
|
||||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
||||||
msgid "Interfaces"
|
msgid "Interfaces"
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
"PO-Revision-Date: 2022-02-11 13:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Riccardo Tornesello <riccardo.tornesello@gmail.com>\n"
|
||||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsomr-tracker/it/>\n"
|
"luciapplicationsomr-tracker/it/>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.0.4\n"
|
"X-Generator: Weblate 4.6.1\n"
|
||||||
|
|
||||||
#: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:8
|
#: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:8
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr "Aggiungi"
|
||||||
|
|
||||||
#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:117
|
#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:117
|
||||||
#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:192
|
#: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:192
|
||||||
|
|
0
luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json
Normal file → Executable file
0
luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json
Normal file → Executable file
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css
Normal file → Executable file
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png
Normal file → Executable file
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png
Normal file → Executable file
Before Width: | Height: | Size: 607 B After Width: | Height: | Size: 607 B |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png
Normal file → Executable file
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png
Normal file → Executable file
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png
Normal file → Executable file
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 544 B |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png
Normal file → Executable file
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png
Normal file → Executable file
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png
Normal file → Executable file
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
0
luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif
Normal file → Executable file
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
111
luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua
Normal file → Executable file
|
@ -26,7 +26,11 @@ end
|
||||||
function interface_from_device(dev)
|
function interface_from_device(dev)
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
for _, iface in ipairs(net:get_networks()) do
|
||||||
local ifacen = iface:name()
|
local ifacen = iface:name()
|
||||||
local ifacename = ucic:get("network",ifacen,"ifname")
|
local ifacename = ""
|
||||||
|
ifacename = ucic:get("network",ifacen,"device")
|
||||||
|
if ifacename == "" then
|
||||||
|
ifacename = ucic:get("network",ifacen,"ifname")
|
||||||
|
end
|
||||||
if ifacename == dev then
|
if ifacename == dev then
|
||||||
return ifacen
|
return ifacen
|
||||||
end
|
end
|
||||||
|
@ -34,6 +38,17 @@ function interface_from_device(dev)
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function uci_device_from_interface(intf)
|
||||||
|
intfname = ucic:get("network",intf,"device")
|
||||||
|
deviceuci = ""
|
||||||
|
ucic:foreach("network", "device", function(s)
|
||||||
|
if intfname == ucic:get("network",s[".name"],"name") then
|
||||||
|
deviceuci = s[".name"]
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
return deviceuci
|
||||||
|
end
|
||||||
|
|
||||||
function wizard_add()
|
function wizard_add()
|
||||||
local gostatus = true
|
local gostatus = true
|
||||||
|
|
||||||
|
@ -113,7 +128,10 @@ function wizard_add()
|
||||||
end)
|
end)
|
||||||
local defif = "eth0"
|
local defif = "eth0"
|
||||||
if add_interface_ifname == "" then
|
if add_interface_ifname == "" then
|
||||||
local defif1 = ucic:get("network","wan1_dev","ifname") or ""
|
local defif1 = ucic:get("network","wan1_dev","device") or ""
|
||||||
|
if defif1 == "" then
|
||||||
|
defif1 = ucic:get("network","wan1_dev","ifname") or ""
|
||||||
|
end
|
||||||
if defif1 ~= "" then
|
if defif1 ~= "" then
|
||||||
defif = defif1
|
defif = defif1
|
||||||
end
|
end
|
||||||
|
@ -126,17 +144,29 @@ function wizard_add()
|
||||||
if ointf ~= "" then
|
if ointf ~= "" then
|
||||||
if ucic:get("network",ointf,"type") == "" then
|
if ucic:get("network",ointf,"type") == "" then
|
||||||
ucic:set("network",ointf,"type","macvlan")
|
ucic:set("network",ointf,"type","macvlan")
|
||||||
|
ucic:set("network",ointf,"device",ointf)
|
||||||
|
ucic:set("network",ointf .. "_dev","device")
|
||||||
|
ucic:set("network",ointf .. "_dev","type","macvlan")
|
||||||
|
ucic:set("network",ointf .. "_dev","mode","vepa")
|
||||||
|
ucic:set("network",ointf .. "_dev","ifname",defif)
|
||||||
|
ucic:set("network",ointf .. "_dev","name",ointf)
|
||||||
end
|
end
|
||||||
wanif = "wan" .. i
|
wanif = "wan" .. i
|
||||||
end
|
end
|
||||||
|
|
||||||
ucic:set("network","wan" .. i,"interface")
|
ucic:set("network","wan" .. i,"interface")
|
||||||
ucic:set("network","wan" .. i,"ifname",defif)
|
ucic:set("network","wan" .. i,"device",defif)
|
||||||
ucic:set("network","wan" .. i,"proto","static")
|
ucic:set("network","wan" .. i,"proto","static")
|
||||||
ucic:set("openmptcprouter","wan" .. i,"interface")
|
ucic:set("openmptcprouter","wan" .. i,"interface")
|
||||||
if ointf ~= "" then
|
if ointf ~= "" then
|
||||||
ucic:set("network","wan" .. i,"type","macvlan")
|
ucic:set("network","wan" .. i,"type","macvlan")
|
||||||
|
ucic:set("network","wan" .. i,"device","wan" .. i)
|
||||||
ucic:set("network","wan" .. i,"masterintf",defif)
|
ucic:set("network","wan" .. i,"masterintf",defif)
|
||||||
|
ucic:set("network","wan" .. i .. "_dev","device")
|
||||||
|
ucic:set("network","wan" .. i .. "_dev","type","macvlan")
|
||||||
|
ucic:set("network","wan" .. i .. "_dev","mode","vepa")
|
||||||
|
ucic:set("network","wan" .. i .. "_dev","ifname",defif)
|
||||||
|
ucic:set("network","wan" .. i .. "_dev","name","wan" .. i)
|
||||||
end
|
end
|
||||||
ucic:set("network","wan" .. i,"ip4table","wan")
|
ucic:set("network","wan" .. i,"ip4table","wan")
|
||||||
if multipath_master then
|
if multipath_master then
|
||||||
|
@ -171,7 +201,7 @@ function wizard_add()
|
||||||
ucic:set("sqm","wan" .. i,"script","simple.qos")
|
ucic:set("sqm","wan" .. i,"script","simple.qos")
|
||||||
ucic:set("sqm","wan" .. i,"qdisc_advanced","0")
|
ucic:set("sqm","wan" .. i,"qdisc_advanced","0")
|
||||||
ucic:set("sqm","wan" .. i,"linklayer","none")
|
ucic:set("sqm","wan" .. i,"linklayer","none")
|
||||||
ucic:set("sqm","wan" .. i,"enabled","0")
|
ucic:set("sqm","wan" .. i,"enabled","1")
|
||||||
ucic:set("sqm","wan" .. i,"debug_logging","0")
|
ucic:set("sqm","wan" .. i,"debug_logging","0")
|
||||||
ucic:set("sqm","wan" .. i,"verbosity","5")
|
ucic:set("sqm","wan" .. i,"verbosity","5")
|
||||||
ucic:set("sqm","wan" .. i,"download","0")
|
ucic:set("sqm","wan" .. i,"download","0")
|
||||||
|
@ -197,7 +227,10 @@ function wizard_add()
|
||||||
local delete_intf = luci.http.formvaluetable("delete") or ""
|
local delete_intf = luci.http.formvaluetable("delete") or ""
|
||||||
if delete_intf ~= "" then
|
if delete_intf ~= "" then
|
||||||
for intf, _ in pairs(delete_intf) do
|
for intf, _ in pairs(delete_intf) do
|
||||||
local defif = ucic:get("network",intf,"ifname")
|
local defif = ucic:get("network",intf,"ifname") or ""
|
||||||
|
if defif == "" then
|
||||||
|
defif = ucic:get("network",intf,"ifname")
|
||||||
|
end
|
||||||
ucic:delete("network",intf)
|
ucic:delete("network",intf)
|
||||||
if ucic:get("network",intf .. "_dev") ~= "" then
|
if ucic:get("network",intf .. "_dev") ~= "" then
|
||||||
ucic:delete("network",intf .. "_dev")
|
ucic:delete("network",intf .. "_dev")
|
||||||
|
@ -251,6 +284,7 @@ function wizard_add()
|
||||||
local sqmenabled = luci.http.formvalue("cbid.sqm.%s.enabled" % intf) or "0"
|
local sqmenabled = luci.http.formvalue("cbid.sqm.%s.enabled" % intf) or "0"
|
||||||
local multipath = luci.http.formvalue("cbid.network.%s.multipath" % intf) or "on"
|
local multipath = luci.http.formvalue("cbid.network.%s.multipath" % intf) or "on"
|
||||||
local lan = luci.http.formvalue("cbid.network.%s.lan" % intf) or "0"
|
local lan = luci.http.formvalue("cbid.network.%s.lan" % intf) or "0"
|
||||||
|
local ttl = luci.http.formvalue("cbid.network.%s.ttl" % intf) or ""
|
||||||
if typeintf ~= "" then
|
if typeintf ~= "" then
|
||||||
if typeintf == "normal" then
|
if typeintf == "normal" then
|
||||||
typeintf = ""
|
typeintf = ""
|
||||||
|
@ -262,15 +296,48 @@ function wizard_add()
|
||||||
end
|
end
|
||||||
if typeintf == "macvlan" and masterintf ~= "" then
|
if typeintf == "macvlan" and masterintf ~= "" then
|
||||||
ucic:set("network",intf,"type","macvlan")
|
ucic:set("network",intf,"type","macvlan")
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","type","macvlan")
|
||||||
|
ucic:set("network",intf .. "_dev","ifname",masterinf)
|
||||||
|
ucic:set("network",intf .. "_dev","mode","vepa")
|
||||||
|
ucic:set("network",intf .. "_dev","name",intf)
|
||||||
ucic:set("network",intf,"masterintf",masterintf)
|
ucic:set("network",intf,"masterintf",masterintf)
|
||||||
elseif typeintf == "" and ifname ~= "" and (proto == "static" or proto == "dhcp" or proto == "dhcpv6") then
|
elseif typeintf == "" and ifname ~= "" and (proto == "static" or proto == "dhcp" or proto == "dhcpv6") then
|
||||||
ucic:set("network",intf,"ifname",ifname)
|
ucic:set("network",intf,"device",ifname)
|
||||||
|
if uci_device_from_interface(intf) == "" then
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","name",ifname)
|
||||||
|
end
|
||||||
elseif typeintf == "" and device ~= "" and proto == "ncm" then
|
elseif typeintf == "" and device ~= "" and proto == "ncm" then
|
||||||
ucic:set("network",intf,"device",device_ncm)
|
ucic:set("network",intf,"device",device_ncm)
|
||||||
|
if uci_device_from_interface(intf) == "" then
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","name",device_ncm)
|
||||||
|
end
|
||||||
elseif typeintf == "" and device ~= "" and proto == "qmi" then
|
elseif typeintf == "" and device ~= "" and proto == "qmi" then
|
||||||
ucic:set("network",intf,"device",device_qmi)
|
ucic:set("network",intf,"device",device_qmi)
|
||||||
|
if uci_device_from_interface(intf) == "" then
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","name",device_qmi)
|
||||||
|
end
|
||||||
elseif typeintf == "" and device ~= "" and proto == "modemmanager" then
|
elseif typeintf == "" and device ~= "" and proto == "modemmanager" then
|
||||||
ucic:set("network",intf,"device",device_manager)
|
ucic:set("network",intf,"device",device_manager)
|
||||||
|
if uci_device_from_interface(intf) == "" then
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","name",device_manager)
|
||||||
|
end
|
||||||
|
elseif typeintf == "" and ifname ~= "" and proto == "static" then
|
||||||
|
ucic:set("network",intf,"device",ifname)
|
||||||
|
if uci_device_from_interface(intf) == "" then
|
||||||
|
ucic:set("network",intf .. "_dev","device")
|
||||||
|
ucic:set("network",intf .. "_dev","name",ifname)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if typeintf ~= "macvlan" and ucic:get("network",intf .. "_dev","type") == "macvlan" then
|
||||||
|
ucic:delete("network",intf .. "_dev","type")
|
||||||
|
ucic:delete("network",intf .. "_dev","mode")
|
||||||
|
ucic:delete("network",intf .. "_dev","ifname")
|
||||||
|
ucic:delete("network",intf .. "_dev","macaddr")
|
||||||
end
|
end
|
||||||
if proto == "pppoe" then
|
if proto == "pppoe" then
|
||||||
ucic:set("network",intf,"pppd_options","persist maxfail 0")
|
ucic:set("network",intf,"pppd_options","persist maxfail 0")
|
||||||
|
@ -278,6 +345,13 @@ function wizard_add()
|
||||||
if proto ~= "other" then
|
if proto ~= "other" then
|
||||||
ucic:set("network",intf,"proto",proto)
|
ucic:set("network",intf,"proto",proto)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
uci_device = uci_device_from_interface(intf)
|
||||||
|
if uci_device == "" then
|
||||||
|
uci_device = intf .. "_dev"
|
||||||
|
end
|
||||||
|
ucic:set("network",uci_device,"ttl",ttl)
|
||||||
|
|
||||||
ucic:set("network",intf,"apn",apn)
|
ucic:set("network",intf,"apn",apn)
|
||||||
ucic:set("network",intf,"pincode",pincode)
|
ucic:set("network",intf,"pincode",pincode)
|
||||||
ucic:set("network",intf,"delay",delay)
|
ucic:set("network",intf,"delay",delay)
|
||||||
|
@ -342,7 +416,10 @@ function wizard_add()
|
||||||
if not ucic:get("sqm",intf) ~= "" then
|
if not ucic:get("sqm",intf) ~= "" then
|
||||||
local defif = get_device(intf)
|
local defif = get_device(intf)
|
||||||
if defif == "" then
|
if defif == "" then
|
||||||
defif = ucic:get("network",intf,"ifname") or ""
|
defif = ucic:get("network",intf,"device") or ""
|
||||||
|
if defif == "" then
|
||||||
|
defif = ucic:get("network",intf,"ifname") or ""
|
||||||
|
end
|
||||||
end
|
end
|
||||||
ucic:set("sqm",intf,"queue")
|
ucic:set("sqm",intf,"queue")
|
||||||
ucic:set("sqm",intf,"interface",defif)
|
ucic:set("sqm",intf,"interface",defif)
|
||||||
|
@ -442,7 +519,7 @@ function wizard_add()
|
||||||
ucic:set("network","omrvpn","proto","bonding")
|
ucic:set("network","omrvpn","proto","bonding")
|
||||||
end
|
end
|
||||||
if vpn_intf ~= "" then
|
if vpn_intf ~= "" then
|
||||||
ucic:set("network","omrvpn","ifname",vpn_intf)
|
ucic:set("network","omrvpn","device",vpn_intf)
|
||||||
ucic:set("sqm","omrvpn","interface",vpn_intf)
|
ucic:set("sqm","omrvpn","interface",vpn_intf)
|
||||||
ucic:save("network")
|
ucic:save("network")
|
||||||
ucic:commit("network")
|
ucic:commit("network")
|
||||||
|
@ -809,7 +886,7 @@ function wizard_add()
|
||||||
|
|
||||||
local dsvpn_key = luci.http.formvalue("dsvpn_key")
|
local dsvpn_key = luci.http.formvalue("dsvpn_key")
|
||||||
if dsvpn_key ~= "" then
|
if dsvpn_key ~= "" then
|
||||||
ucic:set("dsvpn","vpn","port","65011")
|
ucic:set("dsvpn","vpn","port","65401")
|
||||||
ucic:set("dsvpn","vpn","key",dsvpn_key)
|
ucic:set("dsvpn","vpn","key",dsvpn_key)
|
||||||
ucic:set("dsvpn","vpn","localip","10.255.251.2")
|
ucic:set("dsvpn","vpn","localip","10.255.251.2")
|
||||||
ucic:set("dsvpn","vpn","remoteip","10.255.251.1")
|
ucic:set("dsvpn","vpn","remoteip","10.255.251.1")
|
||||||
|
@ -894,7 +971,7 @@ function wizard_add()
|
||||||
-- Restart all
|
-- Restart all
|
||||||
menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter"
|
menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter"
|
||||||
if gostatus == true then
|
if gostatus == true then
|
||||||
luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null")
|
--luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null")
|
||||||
luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null")
|
luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null")
|
||||||
luci.sys.call("ip addr flush dev tun0 >/dev/null 2>/dev/null")
|
luci.sys.call("ip addr flush dev tun0 >/dev/null 2>/dev/null")
|
||||||
luci.sys.call("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null")
|
luci.sys.call("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null")
|
||||||
|
@ -916,6 +993,7 @@ function wizard_add()
|
||||||
luci.sys.call("/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")
|
||||||
luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null")
|
luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null")
|
||||||
luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null")
|
luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null")
|
||||||
|
luci.sys.call("/etc/init.d/sysntpd restart >/dev/null 2>/dev/null")
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/status"))
|
luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/status"))
|
||||||
else
|
else
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/wizard"))
|
luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/wizard"))
|
||||||
|
@ -1112,6 +1190,19 @@ function settings_add()
|
||||||
local sfe_bridge = luci.http.formvalue("sfe_bridge") or "0"
|
local sfe_bridge = luci.http.formvalue("sfe_bridge") or "0"
|
||||||
ucic:set("openmptcprouter","settings","sfe_bridge",sfe_bridge)
|
ucic:set("openmptcprouter","settings","sfe_bridge",sfe_bridge)
|
||||||
|
|
||||||
|
-- Enable/disable SIP ALG
|
||||||
|
local sipalg = luci.http.formvalue("sipalg") or "0"
|
||||||
|
ucic:set("openmptcprouter","settings","sipalg",sipalg)
|
||||||
|
ucic:foreach("firewall", "zone", function (section)
|
||||||
|
ucic:set("firewall",section[".name"],"auto_helper",sipalg)
|
||||||
|
end)
|
||||||
|
if sipalg == "1" then
|
||||||
|
luci.sys.call("modprobe nf_conntrack_ip >/dev/null 2>/dev/null")
|
||||||
|
luci.sys.call("modprobe nf_nat_sip >/dev/null 2>/dev/null")
|
||||||
|
else
|
||||||
|
luci.sys.call("rmmod nf_nat_sip >/dev/null 2>/dev/null")
|
||||||
|
luci.sys.call("rmmod nf_conntrack_ip >/dev/null 2>/dev/null")
|
||||||
|
end
|
||||||
|
|
||||||
ucic:save("openmptcprouter")
|
ucic:save("openmptcprouter")
|
||||||
ucic:commit("openmptcprouter")
|
ucic:commit("openmptcprouter")
|
||||||
|
|
0
luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm
Normal file → Executable file
0
luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm
Normal file → Executable file
6
luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm
Normal file → Executable file
|
@ -219,6 +219,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="cbi-value">
|
||||||
|
<label class="cbi-value-title"><%:Enable SIP ALG%></label>
|
||||||
|
<div class="cbi-value-field">
|
||||||
|
<input type="checkbox" name="sipalg" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter","settings","sipalg") == "1" then %>checked<% end %>>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<hr />
|
<hr />
|
||||||
<fieldset class="cbi-section" id="other">
|
<fieldset class="cbi-section" id="other">
|
||||||
|
|
6
luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm
Normal file → Executable file
|
@ -19,7 +19,7 @@
|
||||||
-- along with OverTheBox. If not, see (http://www.gnu.org/licenses/)
|
-- along with OverTheBox. If not, see (http://www.gnu.org/licenses/)
|
||||||
-%>
|
-%>
|
||||||
<%
|
<%
|
||||||
-- Copyright 2018-2020 Ycarus (Yannick Chabanois) ycarus@zugaina.org for OpenMPTCProuter
|
-- Copyright 2018-2022 Ycarus (Yannick Chabanois) ycarus@zugaina.org for OpenMPTCProuter
|
||||||
--
|
--
|
||||||
-- Small changes to make this work with OpenMPTCProuter
|
-- Small changes to make this work with OpenMPTCProuter
|
||||||
-- New features:
|
-- New features:
|
||||||
|
@ -307,7 +307,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
|
||||||
}
|
}
|
||||||
if (mArray.openmptcprouter.vps_time_accurate == false)
|
if (mArray.openmptcprouter.vps_time_accurate == false)
|
||||||
{
|
{
|
||||||
statusMessage += '<%:Big time difference between the server and the router%>' + '<br/>';
|
var vps_time = new Date(mArray.openmptcprouter.vps_time*1000).toISOString();
|
||||||
|
var omr_time = new Date(mArray.openmptcprouter.omr_time*1000).toISOString();
|
||||||
|
statusMessage += '<%:Big time difference between the server and the router%> (' + vps_time + '/' + omr_time + ') <br/>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (statusMessage !== "" && statusMessageClass !== "error")
|
if (statusMessage !== "" && statusMessageClass !== "error")
|
||||||
|
|
53
luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm
Normal file → Executable file
|
@ -7,11 +7,17 @@
|
||||||
local sys = require "luci.sys"
|
local sys = require "luci.sys"
|
||||||
local ut = require "luci.util"
|
local ut = require "luci.util"
|
||||||
local ifaces = sys.net:devices()
|
local ifaces = sys.net:devices()
|
||||||
|
local ifttyu = nixio.fs.glob("/dev/ttyUSB*")
|
||||||
|
local ifttyc = nixio.fs.glob("/dev/cdc-wdm*")
|
||||||
menuentry = uci:get("openmptcprouter","settings","menu") or "openmptcprouter"
|
menuentry = uci:get("openmptcprouter","settings","menu") or "openmptcprouter"
|
||||||
function device_notvirtual(dev)
|
function device_notvirtual(dev)
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
if dev:match("^eth.*") or dev:match("^wwan.*") or dev:match("^tun.*") or dev:match("/") then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
networks = net:get_networks()
|
||||||
|
for _, iface in ipairs(networks) do
|
||||||
local ifacen = iface:name()
|
local ifacen = iface:name()
|
||||||
local ifacename = uci:get("network",ifacen,"ifname")
|
local ifacename = uci:get("network",ifacen,"device")
|
||||||
local ifacetype = uci:get("network",ifacen,"type") or ""
|
local ifacetype = uci:get("network",ifacen,"type") or ""
|
||||||
local ifaceproto = uci:get("network",ifacen,"proto") or ""
|
local ifaceproto = uci:get("network",ifacen,"proto") or ""
|
||||||
--if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
|
--if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
|
||||||
|
@ -428,7 +434,7 @@
|
||||||
<%
|
<%
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
for _, iface in ipairs(net:get_networks()) do
|
||||||
local ifname = iface:name()
|
local ifname = iface:name()
|
||||||
local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_lan.network | grep " .. ifname))
|
local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_lan.network | tr ' ' '\n' | grep \'^" .. ifname .. "$\'"))
|
||||||
if firewall_lan ~= "" then
|
if firewall_lan ~= "" then
|
||||||
%>
|
%>
|
||||||
<h3><%=ifname%></h3>
|
<h3><%=ifname%></h3>
|
||||||
|
@ -473,7 +479,7 @@
|
||||||
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.*") or ifacea:match("^bond.*")) and device_notvirtual(ifacea) then
|
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.*") or ifacea:match("^bond.*")) and device_notvirtual(ifacea) then
|
||||||
if uci:get("network",ifname,"proto") ~= "macvlan" then
|
if uci:get("network",ifname,"proto") ~= "macvlan" then
|
||||||
%>
|
%>
|
||||||
<option value="<%=ifacea%>"<% if uci:get("network",ifname,"ifname") == ifacea then iffind = 1 %> selected="selected"<% end %>><%=ifacea%></option>
|
<option value="<%=ifacea%>"<% if uci:get("network",ifname,"device") == ifacea then iffind = 1 %> selected="selected"<% end %>><%=ifacea%></option>
|
||||||
<%
|
<%
|
||||||
else
|
else
|
||||||
%>
|
%>
|
||||||
|
@ -483,9 +489,9 @@
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if uci:get("network",ifname,"proto") ~= "macvlan" then
|
if uci:get("network",ifname,"proto") ~= "macvlan" then
|
||||||
if iffind == 0 and uci:get("network",ifname,"ifname") ~= nil then
|
if iffind == 0 and uci:get("network",ifname,"device") ~= nil then
|
||||||
%>
|
%>
|
||||||
<option value="<%=uci:get("network",ifname,"ifname")%>" selected="selected"><%=uci:get("network",ifname,"ifname")%></option>
|
<option value="<%=uci:get("network",ifname,"device")%>" selected="selected"><%=uci:get("network",ifname,"device")%></option>
|
||||||
<%
|
<%
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -531,7 +537,7 @@
|
||||||
<%
|
<%
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
for _, iface in ipairs(net:get_networks()) do
|
||||||
local ifname = iface:name()
|
local ifname = iface:name()
|
||||||
local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_wan.network | grep " .. ifname))
|
local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_wan.network | tr ' ' '\n' | grep \'^" .. ifname .. "$\'"))
|
||||||
if firewall_wan ~= "" then
|
if firewall_wan ~= "" then
|
||||||
|
|
||||||
-- local multipath = uci:get("network",ifname,"multipath")
|
-- local multipath = uci:get("network",ifname,"multipath")
|
||||||
|
@ -616,7 +622,7 @@
|
||||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
|
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
|
||||||
<%
|
<%
|
||||||
iffind=0
|
iffind=0
|
||||||
uciifname=uci:get("network",ifname,"ifname")
|
uciifname=uci:get("network",ifname,"device")
|
||||||
if uciifname ~= nil then
|
if uciifname ~= nil then
|
||||||
if uciifname:match("/") then
|
if uciifname:match("/") then
|
||||||
realifname=uciifname
|
realifname=uciifname
|
||||||
|
@ -682,7 +688,7 @@
|
||||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-index="8">
|
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-index="8">
|
||||||
<label class="cbi-value-title"><%:IPv6 address%></label>
|
<label class="cbi-value-title"><%:IPv6 address%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="<%=value%>" data-type="ip6addr">
|
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="<%=value%>" data-type="ip6addr" data-optional="true">
|
||||||
<br />
|
<br />
|
||||||
<div class="cbi-value-description">
|
<div class="cbi-value-description">
|
||||||
<%:Set an IP in the same network as the modem%>
|
<%:Set an IP in the same network as the modem%>
|
||||||
|
@ -696,7 +702,7 @@
|
||||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-index="9">
|
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-index="9">
|
||||||
<label class="cbi-value-title"><%:IPv6 gateway%></label>
|
<label class="cbi-value-title"><%:IPv6 gateway%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr">
|
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr" data-optional="true">
|
||||||
<br />
|
<br />
|
||||||
<div class="cbi-value-description">
|
<div class="cbi-value-description">
|
||||||
<%:Set here IP of the modem%>
|
<%:Set here IP of the modem%>
|
||||||
|
@ -743,14 +749,12 @@
|
||||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device.ncm" name="cbid.network.<%=ifname%>.device.ncm" size="1">
|
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device.ncm" name="cbid.network.<%=ifname%>.device.ncm" size="1">
|
||||||
<%
|
<%
|
||||||
iffind=0
|
iffind=0
|
||||||
iftty = nixio.fs.glob("/dev/ttyUSB*")
|
for tty in ifttyu do
|
||||||
for tty in iftty do
|
|
||||||
%>
|
%>
|
||||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||||
<%
|
<%
|
||||||
end
|
end
|
||||||
iftty = nixio.fs.glob("/dev/cdc-wdm*")
|
for tty in ifttyc do
|
||||||
for tty in iftty do
|
|
||||||
%>
|
%>
|
||||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||||
<%
|
<%
|
||||||
|
@ -770,8 +774,7 @@
|
||||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device.qmi" name="cbid.network.<%=ifname%>.device.qmi" size="1">
|
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device.qmi" name="cbid.network.<%=ifname%>.device.qmi" size="1">
|
||||||
<%
|
<%
|
||||||
iffind=0
|
iffind=0
|
||||||
iftty = nixio.fs.glob("/dev/cdc-wdm*")
|
for tty in ifttyc do
|
||||||
for tty in iftty do
|
|
||||||
%>
|
%>
|
||||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||||
<%
|
<%
|
||||||
|
@ -893,6 +896,16 @@
|
||||||
<%
|
<%
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
|
<div class="cbi-value" data-index="14">
|
||||||
|
<label class="cbi-value-title"><%:Force TTL%></label>
|
||||||
|
<div class="cbi-value-field">
|
||||||
|
<input type="text" name="cbid.network.<%=ifname%>.ttl" class="cbi-input-text" value="<%=ttl%>" data-type="uinteger" data-optional="true">
|
||||||
|
<br />
|
||||||
|
<div class="cbi-value-description">
|
||||||
|
<%:You can force a TTL. Some LTE provider detect tethering by inpecting packet TTL value, setting it to 65 often solve the issue.%>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<%
|
<%
|
||||||
local download = "0"
|
local download = "0"
|
||||||
|
@ -909,7 +922,7 @@
|
||||||
-- end
|
-- end
|
||||||
--end
|
--end
|
||||||
%>
|
%>
|
||||||
<div class="cbi-value" data-index="14">
|
<div class="cbi-value" data-index="15">
|
||||||
<label class="cbi-value-title"><%:MPTCP over VPN%></label>
|
<label class="cbi-value-title"><%:MPTCP over VPN%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input class="cbi-input-checkbox" type="checkbox" name="multipathvpn.<%=ifname%>.enabled" value="1" <% if uci:get("openmptcprouter",ifname,"multipathvpn") == "1" then %>checked<% end %> />
|
<input class="cbi-input-checkbox" type="checkbox" name="multipathvpn.<%=ifname%>.enabled" value="1" <% if uci:get("openmptcprouter",ifname,"multipathvpn") == "1" then %>checked<% end %> />
|
||||||
|
@ -919,7 +932,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cbi-value" data-index="15">
|
<div class="cbi-value" data-index="16">
|
||||||
<label class="cbi-value-title"><%:Enable SQM%></label>
|
<label class="cbi-value-title"><%:Enable SQM%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == "1" then %>checked<% end %> />
|
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == "1" then %>checked<% end %> />
|
||||||
|
@ -929,7 +942,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cbi-value" data-index="16">
|
<div class="cbi-value" data-index="17">
|
||||||
<label class="cbi-value-title"><%:Download speed (Kb/s)%></label>
|
<label class="cbi-value-title"><%:Download speed (Kb/s)%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input type="text" name="cbid.sqm.<%=ifname%>.download" class="cbi-input-text" value="<%=download%>" data-type="uinteger">
|
<input type="text" name="cbid.sqm.<%=ifname%>.download" class="cbi-input-text" value="<%=download%>" data-type="uinteger">
|
||||||
|
@ -945,7 +958,7 @@
|
||||||
-->
|
-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cbi-value" data-index="17">
|
<div class="cbi-value" data-index="18">
|
||||||
<label class="cbi-value-title"><%:Upload speed (Kb/s)%></label>
|
<label class="cbi-value-title"><%:Upload speed (Kb/s)%></label>
|
||||||
<div class="cbi-value-field">
|
<div class="cbi-value-field">
|
||||||
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">
|
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2020-10-21 12:55+0000\n"
|
"PO-Revision-Date: 2022-02-19 10:30+0000\n"
|
||||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsopenmptcprouter/de/>\n"
|
"luciapplicationsopenmptcprouter/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.0.4\n"
|
"X-Generator: Weblate 4.10.1\n"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
|
||||||
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
|
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
|
||||||
|
@ -23,10 +23,12 @@ msgstr "Schlüssel 'Dead Simple VPN'"
|
||||||
msgid ""
|
msgid ""
|
||||||
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
|
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Die zweite IP eines Servers kann für Dual-IPv4/IPv6-Server festgelegt "
|
||||||
|
"werden, wenn WAN-IPv6 eingerichtet ist"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111
|
||||||
msgid "API username to retrieve personnalized settings from the server."
|
msgid "API username to retrieve personnalized settings from the server."
|
||||||
msgstr "API Benutzername zum Download der Settings vom Server."
|
msgstr "API Benutzername zum Download der Einstellungen vom Server."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809
|
||||||
msgid "APN"
|
msgid "APN"
|
||||||
|
@ -88,7 +90,7 @@ msgstr "Backup der Router-Einstellungen auf den Server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:371
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:371
|
||||||
msgid "Balancing"
|
msgid "Balancing"
|
||||||
msgstr ""
|
msgstr "Ausgleich"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
|
||||||
msgid "Beta"
|
msgid "Beta"
|
||||||
|
@ -96,11 +98,11 @@ msgstr "Beta"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:310
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:310
|
||||||
msgid "Big time difference between the server and the router"
|
msgid "Big time difference between the server and the router"
|
||||||
msgstr ""
|
msgstr "Großer Zeitunterschied zwischen dem Server und dem Router"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564
|
||||||
msgid "Bridge"
|
msgid "Bridge"
|
||||||
msgstr ""
|
msgstr "Netzwerkbrücke"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
||||||
msgid "Bridge can't have multipath enabled"
|
msgid "Bridge can't have multipath enabled"
|
||||||
|
@ -113,28 +115,27 @@ msgstr ""
|
||||||
"übertragen."
|
"übertragen."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"By default proxy is used for any traffic that is TCP (and UDP for V2Ray)."
|
"By default proxy is used for any traffic that is TCP (and UDP for V2Ray)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll "
|
"Standard wird TCP Netzwerk Verkehr über Proxy übertragen (Auch UDP für "
|
||||||
"übertragen."
|
"V2Ray)."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840
|
||||||
msgid "CHAP"
|
msgid "CHAP"
|
||||||
msgstr ""
|
msgstr "CHAP"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271
|
||||||
msgid "Can\\'t access and use server part"
|
msgid "Can\\'t access and use server part"
|
||||||
msgstr ""
|
msgstr "Kann Server Teil nicht öffnen und verwenden"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:297
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:297
|
||||||
msgid "Can\\'t contact Server Admin Script"
|
msgid "Can\\'t contact Server Admin Script"
|
||||||
msgstr ""
|
msgstr "Kann nicht verbinden zum Server Admin Skript"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287
|
||||||
msgid "Can\\'t get public IP address from ShadowSocks"
|
msgid "Can\\'t get public IP address from ShadowSocks"
|
||||||
msgstr ""
|
msgstr "Kann keine Public IP Adresse vom ShadowSocks beziehen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290
|
||||||
msgid "Can\\'t get public IP address from V2Ray"
|
msgid "Can\\'t get public IP address from V2Ray"
|
||||||
|
@ -142,7 +143,7 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284
|
||||||
msgid "Can\\'t ping server"
|
msgid "Can\\'t ping server"
|
||||||
msgstr ""
|
msgstr "Kann Server nicht pingen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
|
||||||
msgid "China"
|
msgid "China"
|
||||||
|
@ -153,20 +154,22 @@ msgid ""
|
||||||
"Choose MacVLAN if you want to create a virtual interface based on a physical "
|
"Choose MacVLAN if you want to create a virtual interface based on a physical "
|
||||||
"interface."
|
"interface."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Wähle MacVLAN um ein virtuelles Interface basierend auf ein Physikalisches "
|
||||||
|
"Interface an zu legen."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:647
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:647
|
||||||
msgid "Choose physical interface."
|
msgid "Choose physical interface."
|
||||||
msgstr ""
|
msgstr "Wähle physikalische Schnittstelle."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135
|
||||||
msgid "Core temp:"
|
msgid "Core temp:"
|
||||||
msgstr ""
|
msgstr "Kerntemperatur:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
|
||||||
msgid "Country"
|
msgid "Country"
|
||||||
msgstr ""
|
msgstr "Land"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
|
@ -179,22 +182,20 @@ msgid "DHCP"
|
||||||
msgstr "DHCP"
|
msgstr "DHCP"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
|
||||||
#, fuzzy
|
|
||||||
msgid "DHCPv6"
|
msgid "DHCPv6"
|
||||||
msgstr "DHCP"
|
msgstr "DHCPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
|
||||||
msgid "DNS issue: can\\'t resolve hostname"
|
msgid "DNS issue: can\\'t resolve hostname"
|
||||||
msgstr ""
|
msgstr "DNS Problem: Hostnamen nicht beziehbar"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:355
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:355
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr ""
|
msgstr "Debug"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223
|
||||||
#, fuzzy
|
|
||||||
msgid "Default Proxy"
|
msgid "Default Proxy"
|
||||||
msgstr "Standard VPN"
|
msgstr "Standard Proxy"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337
|
||||||
msgid "Default VPN"
|
msgid "Default VPN"
|
||||||
|
@ -209,7 +210,7 @@ msgstr "Löschen"
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:789
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:789
|
||||||
msgid "Device"
|
msgid "Device"
|
||||||
msgstr ""
|
msgstr "Gerät"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
|
@ -232,13 +233,12 @@ msgstr ""
|
||||||
"Abschalten von TCP-Fast-Open für Linux und die ShadowsSocks-Einstellungen"
|
"Abschalten von TCP-Fast-Open für Linux und die ShadowsSocks-Einstellungen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable default gateway"
|
msgid "Disable default gateway"
|
||||||
msgstr "Gateway-Ping aus"
|
msgstr "Default Gateway aus"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:300
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:300
|
||||||
msgid "Disable default gateway, no internet if VPS are down"
|
msgid "Disable default gateway, no internet if VPS are down"
|
||||||
msgstr ""
|
msgstr "Default Gateway aus, kein Internet wenn VPS down ist"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193
|
||||||
msgid "Disable external check"
|
msgid "Disable external check"
|
||||||
|
@ -254,13 +254,12 @@ msgid "Disable gateway ping check in status page"
|
||||||
msgstr "Gateway-Ping Statusüberprüfung aus"
|
msgstr "Gateway-Ping Statusüberprüfung aus"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable interfaces auto rename"
|
msgid "Disable interfaces auto rename"
|
||||||
msgstr "Externe Prüfung aus"
|
msgstr "Automatische Umbenennung von Interfaces deaktivieren"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330
|
||||||
msgid "Disable multipath test using tracebox"
|
msgid "Disable multipath test using tracebox"
|
||||||
msgstr ""
|
msgstr "Deaktiviere multipath Test mittels Tracebox"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
|
@ -277,9 +276,8 @@ msgid ""
|
||||||
msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten"
|
msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable renaming interfaces"
|
msgid "Disable renaming interfaces"
|
||||||
msgstr "Bezeichnung der Schnittstelle"
|
msgstr "Umbenennung der Schnittstelle deaktivieren"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320
|
||||||
|
@ -288,14 +286,12 @@ msgid "Disable route loop detection"
|
||||||
msgstr "Server-Ping aus"
|
msgstr "Server-Ping aus"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable server"
|
msgid "Disable server"
|
||||||
msgstr "Server-Ping aus"
|
msgstr "Server deaktivieren"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable server http test"
|
msgid "Disable server http test"
|
||||||
msgstr "Server-Ping aus"
|
msgstr "Server-http-Test aus"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305
|
||||||
msgid "Disable server ping"
|
msgid "Disable server ping"
|
||||||
|
@ -306,15 +302,14 @@ msgid "Disable server ping status check"
|
||||||
msgstr "Server-Ping Status-Prüfung aus"
|
msgstr "Server-Ping Status-Prüfung aus"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:325
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:325
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable tracebox test"
|
msgid "Disable tracebox test"
|
||||||
msgstr "Externe Prüfung aus"
|
msgstr "Deaktiviere tracebox Test"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:871
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:871
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:887
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:887
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr ""
|
msgstr "inaktiv"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:933
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:933
|
||||||
msgid "Download speed (Kb/s)"
|
msgid "Download speed (Kb/s)"
|
||||||
|
@ -351,13 +346,12 @@ msgid "Enable ShadowSocks Obfuscating"
|
||||||
msgstr "Shadowsocks-Verschleierung aktiv"
|
msgstr "Shadowsocks-Verschleierung aktiv"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213
|
||||||
#, fuzzy
|
|
||||||
msgid "Enable TCP Low Latency"
|
msgid "Enable TCP Low Latency"
|
||||||
msgstr "TCP-Fast-Open aus"
|
msgstr "Aktiviere TCP Low Latency"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:360
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:360
|
||||||
msgid "Enable debug logs"
|
msgid "Enable debug logs"
|
||||||
msgstr ""
|
msgstr "Aktiviere debug Logs"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:870
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:870
|
||||||
|
@ -370,31 +364,30 @@ msgid "Encryption"
|
||||||
msgstr "Verschlüsselung"
|
msgstr "Verschlüsselung"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280
|
||||||
#, fuzzy
|
|
||||||
msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN."
|
msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN."
|
||||||
msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt."
|
msgstr ""
|
||||||
|
"Verschlüsselungverfahren wird verwendet für Shadowsocks, V2Ray, Glorytun "
|
||||||
|
"and OpenVPN."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176
|
||||||
msgid "Filesystem is readonly"
|
msgid "Filesystem is readonly"
|
||||||
msgstr ""
|
msgstr "Filesystem ist nur lesen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419
|
||||||
msgid "For China, set an accessible DNS and disable DNSSEC."
|
msgid "For China, set an accessible DNS and disable DNSSEC."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178
|
||||||
#, fuzzy
|
|
||||||
msgid "Force retrieve all keys from server."
|
msgid "Force retrieve all keys from server."
|
||||||
msgstr "API Benutzername zum Download der Settings vom Server."
|
msgstr "Erzwingen alle Schlüssel vom Server runter zu laden."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173
|
||||||
#, fuzzy
|
|
||||||
msgid "Force retrieve settings"
|
msgid "Force retrieve settings"
|
||||||
msgstr "Server-Einstellungen"
|
msgstr "Erzwingen Einstellungen runter zu laden."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829
|
||||||
msgid "GPRS only"
|
msgid "GPRS only"
|
||||||
msgstr ""
|
msgstr "Nur GPRS"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:561
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:561
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:764
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:764
|
||||||
|
@ -472,15 +465,13 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710
|
||||||
#, fuzzy
|
|
||||||
msgid "IPv6 address"
|
msgid "IPv6 address"
|
||||||
msgstr "IPv4-Adresse"
|
msgstr "IPv6-Adresse"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720
|
||||||
#, fuzzy
|
|
||||||
msgid "IPv6 gateway"
|
msgid "IPv6 gateway"
|
||||||
msgstr "IPv4-Standardgateway"
|
msgstr "IPv6-Standardgateway"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804
|
||||||
|
@ -488,9 +479,8 @@ msgid "IPv6 route received"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:184
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:184
|
||||||
#, fuzzy
|
|
||||||
msgid "IPv6 settings"
|
msgid "IPv6 settings"
|
||||||
msgstr "VPN-Einstellungen"
|
msgstr "IPv6-Einstellungen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209
|
||||||
msgid "IPv6 tunnel DOWN"
|
msgid "IPv6 tunnel DOWN"
|
||||||
|
@ -637,7 +627,7 @@ msgstr ""
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:867
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:867
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:883
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:883
|
||||||
msgid "Multipath TCP"
|
msgid "Multipath TCP"
|
||||||
msgstr ""
|
msgstr "Multipath-TCP"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:601
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:601
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607
|
||||||
|
@ -790,7 +780,7 @@ msgstr "Nur eine Verbindung kann als 'primär' definiert werden."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
||||||
msgid "Only work with Shadowsocks as proxy."
|
msgid "Only work with Shadowsocks as proxy."
|
||||||
msgstr ""
|
msgstr "Funktioniert nur mit Shadowsocks als Proxy."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3
|
#: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3
|
||||||
msgid "OpenMPTCProuter"
|
msgid "OpenMPTCProuter"
|
||||||
|
@ -802,7 +792,7 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218
|
||||||
msgid "Optimize for latency instead of bandwidth"
|
msgid "Optimize for latency instead of bandwidth"
|
||||||
msgstr ""
|
msgstr "Für niedrige Latenz anstatt für Bandbreite optimieren"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605
|
||||||
|
@ -849,11 +839,11 @@ msgstr "Interface hinzufügen"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825
|
||||||
msgid "Prefer LTE"
|
msgid "Prefer LTE"
|
||||||
msgstr ""
|
msgstr "Bevorzuge LTE"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:826
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:826
|
||||||
msgid "Prefer UMTS"
|
msgid "Prefer UMTS"
|
||||||
msgstr ""
|
msgstr "Bevorzuge UMTS"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
|
@ -921,9 +911,8 @@ msgid "Scaling governor"
|
||||||
msgstr "Methode der CPU-Taktung"
|
msgstr "Methode der CPU-Taktung"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
|
||||||
#, fuzzy
|
|
||||||
msgid "Secondary server IP"
|
msgid "Secondary server IP"
|
||||||
msgstr "Server IPv4"
|
msgstr "zweite Server IP"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
|
||||||
msgid "Select the device you want to base the interface on."
|
msgid "Select the device you want to base the interface on."
|
||||||
|
@ -963,9 +952,8 @@ msgid "Server username"
|
||||||
msgstr "Server-Benutzername"
|
msgstr "Server-Benutzername"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:821
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:821
|
||||||
#, fuzzy
|
|
||||||
msgid "Service Type"
|
msgid "Service Type"
|
||||||
msgstr "Server-Schlüssel"
|
msgstr "Dienst Typ"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401
|
||||||
msgid "Set VPN to use for MPTCP over VPN."
|
msgid "Set VPN to use for MPTCP over VPN."
|
||||||
|
@ -1106,7 +1094,7 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr "Typ"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:331
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:331
|
||||||
msgid "UBOND can replace Glorytun with connections with same latency"
|
msgid "UBOND can replace Glorytun with connections with same latency"
|
||||||
|
@ -1176,9 +1164,8 @@ msgid "VLAN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184
|
||||||
#, fuzzy
|
|
||||||
msgid "VPN is not running"
|
msgid "VPN is not running"
|
||||||
msgstr "VPN-Einstellungen"
|
msgstr "VPN läuft nicht"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286
|
||||||
msgid "VPN settings"
|
msgid "VPN settings"
|
||||||
|
@ -1313,7 +1300,7 @@ msgstr "Statische Adresse"
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:516
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:516
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:749
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:749
|
||||||
msgid "latency:"
|
msgid "latency:"
|
||||||
msgstr ""
|
msgstr "Latenz:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:520
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:520
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:753
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:753
|
||||||
|
@ -1352,14 +1339,12 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:741
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:741
|
||||||
#, fuzzy
|
|
||||||
msgid "wan address:"
|
msgid "wan address:"
|
||||||
msgstr "Statische Adresse"
|
msgstr "öffentliche IP Adresse:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:500
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:500
|
||||||
#, fuzzy
|
|
||||||
msgid "wan ipv6 address:"
|
msgid "wan ipv6 address:"
|
||||||
msgstr "Statische Adresse"
|
msgstr "öffentliche ipv6 Adresse:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:508
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:508
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:512
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:512
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-06-01 06:35+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsopenmptcprouter/fr/>\n"
|
"luciapplicationsopenmptcprouter/fr/>\n"
|
||||||
|
@ -87,7 +87,7 @@ msgstr "Type d'authentification"
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:873
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:873
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:889
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:889
|
||||||
msgid "Backup"
|
msgid "Backup"
|
||||||
msgstr "Sauvegarder"
|
msgstr "Remplaçant"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21
|
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10
|
||||||
|
@ -112,7 +112,7 @@ msgstr "Passerelle"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
||||||
msgid "Bridge can't have multipath enabled"
|
msgid "Bridge can't have multipath enabled"
|
||||||
msgstr "Un pont ne peut avoir multipath d'activer"
|
msgstr "Les passerelles ne peuvent pas utiliser le protocole multipath"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287
|
||||||
msgid "By default VPN is used for any traffic that is not TCP."
|
msgid "By default VPN is used for any traffic that is not TCP."
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2020-12-01 17:19+0000\n"
|
"PO-Revision-Date: 2022-02-19 10:30+0000\n"
|
||||||
"Last-Translator: Giuseppe Dipierro <giuseppe.dipierro@uania.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationsopenmptcprouter/it/>\n"
|
"luciapplicationsopenmptcprouter/it/>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.0.4\n"
|
"X-Generator: Weblate 4.10.1\n"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
|
||||||
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
|
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
|
||||||
|
@ -23,6 +23,8 @@ msgstr "Chiave Dead Simple VPN"
|
||||||
msgid ""
|
msgid ""
|
||||||
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
|
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Può essere impostato un secondo IP per il doppio server IPv4/IPv6 se è stato "
|
||||||
|
"impostato il server WAN IPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111
|
||||||
msgid "API username to retrieve personnalized settings from the server."
|
msgid "API username to retrieve personnalized settings from the server."
|
||||||
|
@ -106,7 +108,7 @@ msgstr "Ponte"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
|
||||||
msgid "Bridge can't have multipath enabled"
|
msgid "Bridge can't have multipath enabled"
|
||||||
msgstr ""
|
msgstr "Il Bridge non può avere il multipath abilitato"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287
|
||||||
msgid "By default VPN is used for any traffic that is not TCP."
|
msgid "By default VPN is used for any traffic that is not TCP."
|
||||||
|
@ -138,9 +140,8 @@ msgid "Can\\'t get public IP address from ShadowSocks"
|
||||||
msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks"
|
msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290
|
||||||
#, fuzzy
|
|
||||||
msgid "Can\\'t get public IP address from V2Ray"
|
msgid "Can\\'t get public IP address from V2Ray"
|
||||||
msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks"
|
msgstr "Impossibile ottenere un indirizzo IP pubblico da V2Ray"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284
|
||||||
msgid "Can\\'t ping server"
|
msgid "Can\\'t ping server"
|
||||||
|
@ -148,7 +149,7 @@ msgstr "Impossibile eseguire il ping del server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
|
||||||
msgid "China"
|
msgid "China"
|
||||||
msgstr ""
|
msgstr "Cina"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -170,12 +171,11 @@ msgstr "Temp. Nucleo:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
|
||||||
msgid "Country"
|
msgid "Country"
|
||||||
msgstr ""
|
msgstr "Nazione"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
|
||||||
#, fuzzy
|
|
||||||
msgid "Country settings"
|
msgid "Country settings"
|
||||||
msgstr "Impostazioni del router"
|
msgstr "Impostazioni nazionali del router"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:454
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:454
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599
|
||||||
|
@ -183,9 +183,8 @@ msgid "DHCP"
|
||||||
msgstr "DHCP"
|
msgstr "DHCP"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
|
||||||
#, fuzzy
|
|
||||||
msgid "DHCPv6"
|
msgid "DHCPv6"
|
||||||
msgstr "DHCP"
|
msgstr "DHCPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
|
||||||
msgid "DNS issue: can\\'t resolve hostname"
|
msgid "DNS issue: can\\'t resolve hostname"
|
||||||
|
@ -215,15 +214,13 @@ msgid "Device"
|
||||||
msgstr "Dispositivo"
|
msgstr "Dispositivo"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable HTTP test on Server API in status page"
|
msgid "Disable HTTP test on Server API in status page"
|
||||||
msgstr "Disabilitare il controllo dello stato del ping del server"
|
msgstr "Disabilitare il test HTTP sulle API Server nella pagina di stato"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:345
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:345
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:350
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:350
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable ModemManager"
|
msgid "Disable ModemManager"
|
||||||
msgstr "ModemManager"
|
msgstr "Disabilita ModemManager"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203
|
||||||
msgid "Disable TCP Fast Open"
|
msgid "Disable TCP Fast Open"
|
||||||
|
@ -251,24 +248,20 @@ msgid "Disable gateway ping"
|
||||||
msgstr "Disabilita il ping del gateway"
|
msgstr "Disabilita il ping del gateway"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable gateway ping check in status page"
|
msgid "Disable gateway ping check in status page"
|
||||||
msgstr "Disabilitare il controllo dello stato del ping del gateway"
|
msgstr "Disabilita il controllo del ping del gateway nella pagina di stato"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable interfaces auto rename"
|
msgid "Disable interfaces auto rename"
|
||||||
msgstr "Disabilita il test Tracebox"
|
msgstr "Disabilita auto rinomina interfacce"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330
|
||||||
msgid "Disable multipath test using tracebox"
|
msgid "Disable multipath test using tracebox"
|
||||||
msgstr "Disabilita il test multipath usando tracebox"
|
msgstr "Disabilita il test multipath usando tracebox"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Disabled"
|
|
||||||
msgid "Disable nDPI"
|
msgid "Disable nDPI"
|
||||||
msgstr "Disabilitato"
|
msgstr "Disabilita nDPI"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:340
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:340
|
||||||
msgid "Disable nDPI, used for protocols in OMR-ByPass"
|
msgid "Disable nDPI, used for protocols in OMR-ByPass"
|
||||||
|
@ -282,9 +275,8 @@ msgstr ""
|
||||||
"a questo router"
|
"a questo router"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable renaming interfaces"
|
msgid "Disable renaming interfaces"
|
||||||
msgstr "Etichetta per l'interfaccia"
|
msgstr "Disabilita rinomina interfaccia"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320
|
||||||
|
@ -297,9 +289,8 @@ msgid "Disable server"
|
||||||
msgstr "Disabilita il server"
|
msgstr "Disabilita il server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
|
||||||
#, fuzzy
|
|
||||||
msgid "Disable server http test"
|
msgid "Disable server http test"
|
||||||
msgstr "Disabilita il ping del server"
|
msgstr "Disabilita http test server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305
|
||||||
msgid "Disable server ping"
|
msgid "Disable server ping"
|
||||||
|
@ -329,12 +320,11 @@ msgstr "Cambiamento dinamico"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:390
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:390
|
||||||
msgid "Enable Bridge Acceleration"
|
msgid "Enable Bridge Acceleration"
|
||||||
msgstr ""
|
msgstr "Abilita Accelerazione modalità Bridge"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209
|
||||||
#, fuzzy
|
|
||||||
msgid "Enable DNS64"
|
msgid "Enable DNS64"
|
||||||
msgstr "Abilita MQ"
|
msgstr "Abilita DNS64"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:384
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:384
|
||||||
msgid "Enable Fast Patch offloading for connections"
|
msgid "Enable Fast Patch offloading for connections"
|
||||||
|
@ -383,7 +373,7 @@ msgstr "Il filesystem è di sola lettura"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419
|
||||||
msgid "For China, set an accessible DNS and disable DNSSEC."
|
msgid "For China, set an accessible DNS and disable DNSSEC."
|
||||||
msgstr ""
|
msgstr "Per la Cina, imposta un DNS accessibile e disabilita DNSSEC."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178
|
||||||
msgid "Force retrieve all keys from server."
|
msgid "Force retrieve all keys from server."
|
||||||
|
@ -403,9 +393,8 @@ msgid "Gateway DOWN"
|
||||||
msgstr "Tipi di pagamento"
|
msgstr "Tipi di pagamento"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564
|
||||||
#, fuzzy
|
|
||||||
msgid "Gateway IPv6 DOWN"
|
msgid "Gateway IPv6 DOWN"
|
||||||
msgstr "Tipi di pagamento"
|
msgstr "Gateway IPv6 SPENTO"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295
|
||||||
msgid "Glorytun TCP is used by default for UDP and ICMP"
|
msgid "Glorytun TCP is used by default for UDP and ICMP"
|
||||||
|
@ -475,15 +464,13 @@ msgstr "Prefisso IPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710
|
||||||
#, fuzzy
|
|
||||||
msgid "IPv6 address"
|
msgid "IPv6 address"
|
||||||
msgstr "Indirizzi IPv4"
|
msgstr "Indirizzi IPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720
|
||||||
#, fuzzy
|
|
||||||
msgid "IPv6 gateway"
|
msgid "IPv6 gateway"
|
||||||
msgstr "Gateway IPv4"
|
msgstr "Gateway IPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804
|
||||||
|
@ -504,7 +491,7 @@ msgstr "IPv6:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214
|
||||||
msgid "If host support NAT64, you can enable DNS64 support."
|
msgid "If host support NAT64, you can enable DNS64 support."
|
||||||
msgstr ""
|
msgstr "Se l'host supporta NAT64, puoi abilitare il supporto DNS64."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529
|
||||||
msgid "Interfaces settings"
|
msgid "Interfaces settings"
|
||||||
|
@ -588,15 +575,16 @@ msgid "MPTCP over VPN"
|
||||||
msgstr "MPTCP su VPN"
|
msgstr "MPTCP su VPN"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:390
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:390
|
||||||
#, fuzzy
|
|
||||||
msgid "MPTCP over VPN settings"
|
msgid "MPTCP over VPN settings"
|
||||||
msgstr "MPTCP su VPN"
|
msgstr "Impostazioni MPTCP su VPN"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
||||||
msgid ""
|
msgid ""
|
||||||
"MPTCP over VPN should be used only when Multipath TCP is blocked on a "
|
"MPTCP over VPN should be used only when Multipath TCP is blocked on a "
|
||||||
"connection."
|
"connection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"MPTCP su VPN deve essere usato solo quando il Multipath TCP è bloccatp su "
|
||||||
|
"una connessione."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563
|
||||||
msgid "MacVLAN"
|
msgid "MacVLAN"
|
||||||
|
@ -650,7 +638,7 @@ msgstr "Lo stato corrente di Multipath è"
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:596
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:596
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782
|
||||||
msgid "Multipath master already defined"
|
msgid "Multipath master already defined"
|
||||||
msgstr "Multipath master già definito"
|
msgstr "Multipath principale già definito"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:567
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:567
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767
|
||||||
|
@ -666,9 +654,8 @@ msgid "NONE"
|
||||||
msgstr "NESSUNO"
|
msgstr "NESSUNO"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:623
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:623
|
||||||
#, fuzzy
|
|
||||||
msgid "Network interface MAC address duplicated"
|
msgid "Network interface MAC address duplicated"
|
||||||
msgstr "Interfaccia di rete duplicata"
|
msgstr "Interfaccia di rete con MAC address duplicata"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:613
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:613
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:799
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:799
|
||||||
|
@ -676,9 +663,8 @@ msgid "Network interface duplicated"
|
||||||
msgstr "Interfaccia di rete duplicata"
|
msgstr "Interfaccia di rete duplicata"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:579
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:579
|
||||||
#, fuzzy
|
|
||||||
msgid "Network interface not in WAN firewall zone"
|
msgid "Network interface not in WAN firewall zone"
|
||||||
msgstr "Interfaccia di rete duplicata"
|
msgstr "Interfaccia di rete non in WAN firewall zone"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:899
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:899
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:901
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:901
|
||||||
|
@ -699,18 +685,17 @@ msgid "No IPv6 access"
|
||||||
msgstr "Nessun accesso IPv6"
|
msgstr "Nessun accesso IPv6"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:575
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:575
|
||||||
#, fuzzy
|
|
||||||
msgid "No Server http response after 1 second"
|
msgid "No Server http response after 1 second"
|
||||||
msgstr "Nessuna risposta al ping del server dopo 1 secondo"
|
msgstr "Nessuna risposta dal server HTTP dopo 1 secondo"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:771
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:771
|
||||||
msgid "No Server ping response after 1 second"
|
msgid "No Server ping response after 1 second"
|
||||||
msgstr "Nessuna risposta al ping del server dopo 1 secondo"
|
msgstr "Nessuna risposta al ping dal server dopo 1 secondo"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:656
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:656
|
||||||
msgid "No WAN with multipath enabled:"
|
msgid "No WAN with multipath enabled:"
|
||||||
msgstr ""
|
msgstr "Nessuna WAN con multipath abilitata:"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26
|
||||||
msgid "No available backup on server."
|
msgid "No available backup on server."
|
||||||
|
@ -735,14 +720,12 @@ msgid "No output"
|
||||||
msgstr "Nessun output"
|
msgstr "Nessun output"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:293
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:293
|
||||||
#, fuzzy
|
|
||||||
msgid "No public IP address detected in less than 1 second"
|
msgid "No public IP address detected in less than 1 second"
|
||||||
msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo"
|
msgstr "Nessun indirizzo IP pubblico rilevato in meno di 1 secondo"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:267
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:267
|
||||||
#, fuzzy
|
|
||||||
msgid "No server IP address, No public IP address"
|
msgid "No server IP address, No public IP address"
|
||||||
msgstr "Nessun indirizzo IP del server, nessun indirizzo IP WAN"
|
msgstr "Nessun indirizzo IP del server, nessun indirizzo IP pubblico"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:280
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:280
|
||||||
msgid "No server defined"
|
msgid "No server defined"
|
||||||
|
@ -783,13 +766,15 @@ msgstr "Al cambio della procedura guidata"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233
|
||||||
msgid "Only ShadowSocks is supported with server multiple IPs for now."
|
msgid "Only ShadowSocks is supported with server multiple IPs for now."
|
||||||
msgstr ""
|
msgstr "Solo ShadowSocks è supportato con server multi IP per adesso."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877
|
||||||
msgid ""
|
msgid ""
|
||||||
"Only one interface must be set as \"Master\", this should be the most stable "
|
"Only one interface must be set as \"Master\", this should be the most stable "
|
||||||
"interface."
|
"interface."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Solo un' interfaccia può essere impostata come \"Master\", deve essere "
|
||||||
|
"impostata l'interfaccia più stabile."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135
|
||||||
msgid "Only one server can be master, else all servers are set as backup."
|
msgid "Only one server can be master, else all servers are set as backup."
|
||||||
|
@ -799,7 +784,7 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
|
||||||
msgid "Only work with Shadowsocks as proxy."
|
msgid "Only work with Shadowsocks as proxy."
|
||||||
msgstr ""
|
msgstr "Funziona solo con Shadowsocks come proxy."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3
|
#: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3
|
||||||
msgid "OpenMPTCProuter"
|
msgid "OpenMPTCProuter"
|
||||||
|
@ -861,9 +846,8 @@ msgid "Prefer UMTS"
|
||||||
msgstr "Preferisci UMTS"
|
msgstr "Preferisci UMTS"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
|
||||||
#, fuzzy
|
|
||||||
msgid "Primary server IP"
|
msgid "Primary server IP"
|
||||||
msgstr "Indirizzo IP del server"
|
msgstr "IP principale del server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594
|
||||||
|
@ -896,7 +880,7 @@ msgstr "Reindirizza tutte le porte dal server a questo router"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:999
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:999
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr "Resetta"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32
|
||||||
msgid "Restore backup"
|
msgid "Restore backup"
|
||||||
|
@ -924,9 +908,8 @@ msgid "Scaling governor"
|
||||||
msgstr "Governatore in scala"
|
msgstr "Governatore in scala"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
|
||||||
#, fuzzy
|
|
||||||
msgid "Secondary server IP"
|
msgid "Secondary server IP"
|
||||||
msgstr "Indirizzo IP del server"
|
msgstr "IP secondario del server"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
|
||||||
msgid "Select the device you want to base the interface on."
|
msgid "Select the device you want to base the interface on."
|
||||||
|
@ -968,7 +951,7 @@ msgstr "Tipo di servizio"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401
|
||||||
msgid "Set VPN to use for MPTCP over VPN."
|
msgid "Set VPN to use for MPTCP over VPN."
|
||||||
msgstr ""
|
msgstr "Seleziona la VPN da utilizzare per MPTCP su VPN."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:688
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:688
|
||||||
|
@ -1225,7 +1208,7 @@ msgstr ""
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:65
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:65
|
||||||
msgid "Wizard"
|
msgid "Wizard"
|
||||||
msgstr "Wizard"
|
msgstr "Procedura guidata"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414
|
||||||
msgid "World"
|
msgid "World"
|
||||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2021-06-02 09:51+0000\n"
|
"PO-Revision-Date: 2022-01-11 10:52+0000\n"
|
||||||
"Last-Translator: antrouter <xinyangla@188.com>\n"
|
"Last-Translator: antrouter <xinyangla@188.com>\n"
|
||||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||||
"projects/omr/luciapplicationsopenmptcprouter/zh_Hans/>\n"
|
"projects/omr/luciapplicationsopenmptcprouter/zh_Hans/>\n"
|
||||||
|
@ -113,7 +113,7 @@ msgstr "默认情况下,VPN用于非TCP的任何流量."
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
|
||||||
msgid ""
|
msgid ""
|
||||||
"By default proxy is used for any traffic that is TCP (and UDP for V2Ray)."
|
"By default proxy is used for any traffic that is TCP (and UDP for V2Ray)."
|
||||||
msgstr "默认情况下,代理用于任何TCP(对于V2Ray是UDP)流量。"
|
msgstr "默认情况下,仅代理TCP(如果选用V2Ray则代理TCP跟UDP还有ICMP任何)流量。"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840
|
||||||
msgid "CHAP"
|
msgid "CHAP"
|
||||||
|
@ -946,9 +946,7 @@ msgstr "将服务器设置为主服务器"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and "
|
"Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and "
|
||||||
"UDP when V2Ray is enabled."
|
"UDP when V2Ray is enabled."
|
||||||
msgstr ""
|
msgstr "启用ShadowSocks时用于默认代理TC流量,启用V2Ray时用于默认代理TCP和UDP还有ICMP任何流量."
|
||||||
"设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代"
|
|
||||||
"理."
|
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -1098,7 +1096,7 @@ msgstr "V2Ray没有运行"
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254
|
||||||
msgid "V2Ray is used for TCP and UDP."
|
msgid "V2Ray is used for TCP and UDP."
|
||||||
msgstr "V2Ray用于TCP和UDP传输."
|
msgstr "V2Ray用于TCP和UDP代理."
|
||||||
|
|
||||||
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251
|
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251
|
||||||
msgid "V2Ray user"
|
msgid "V2Ray user"
|
||||||
|
|
|
@ -21,5 +21,6 @@ uci show | \
|
||||||
-e "/vpn\.key=/s/......$/xxxxxx'/" \
|
-e "/vpn\.key=/s/......$/xxxxxx'/" \
|
||||||
-e "/vps\.key=/s/......$/xxxxxx'/" \
|
-e "/vps\.key=/s/......$/xxxxxx'/" \
|
||||||
-e "/wgkey=/s/......$/xxxxxx'/" \
|
-e "/wgkey=/s/......$/xxxxxx'/" \
|
||||||
|
-e "/key=/s/......$/xxxxxx'/" \
|
||||||
-e "/ula_prefix=2/s/=.........../='xxxxxxxxxxx/" \
|
-e "/ula_prefix=2/s/=.........../='xxxxxxxxxxx/" \
|
||||||
-e "/token=/s/............$/xxxxxx'/"
|
-e "/token=/s/............$/xxxxxx'/"
|
|
@ -10,7 +10,7 @@ timeout 1 mmcli -L | while read MODEM; do
|
||||||
OPERATOR=$(echo "$MODEM_INFO" | grep 'modem.3gpp.operator-name ' | awk -F": " '{print $2}')
|
OPERATOR=$(echo "$MODEM_INFO" | grep 'modem.3gpp.operator-name ' | awk -F": " '{print $2}')
|
||||||
NUMBER=$(echo "$MODEM_INFO" | grep 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}')
|
NUMBER=$(echo "$MODEM_INFO" | grep 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}')
|
||||||
STATE=$(echo "$MODEM_INFO" | grep 'modem.generic.state ' | awk -F": " '{print $2}')
|
STATE=$(echo "$MODEM_INFO" | grep 'modem.generic.state ' | awk -F": " '{print $2}')
|
||||||
TYPE=$(echo "$MODEM_INFO" | grep 'modem.generic.access-technologies.values[1]' | awk -F": " '{print $2}')
|
TYPE=$(echo "$MODEM_INFO" | grep 'modem.generic.access-technologies.value\[1\]' | awk -F": " '{print $2}')
|
||||||
[ -z "$INFO" ] && echo $PERCENT
|
[ -z "$INFO" ] && echo $PERCENT
|
||||||
[ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE"
|
[ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE"
|
||||||
exit
|
exit
|
||||||
|
|
|
@ -12,9 +12,17 @@ get_mptcp_from_server() {
|
||||||
get_mptcp() {
|
get_mptcp() {
|
||||||
serverip=$1
|
serverip=$1
|
||||||
if [ "$(echo $serverip | grep :)" ]; then
|
if [ "$(echo $serverip | grep :)" ]; then
|
||||||
support="$(curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)"
|
if [ -f /proc/sys/net/mptcp/enabled ]; then
|
||||||
|
support="$(mptcpize run curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)"
|
||||||
|
else
|
||||||
|
support="$(curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
support="$(curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)"
|
if [ -f /proc/sys/net/mptcp/enabled ]; then
|
||||||
|
support="$(mptcpize run curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)"
|
||||||
|
else
|
||||||
|
support="$(curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
[ -n "$support" ] && {
|
[ -n "$support" ] && {
|
||||||
support=$(echo $support | jsonfilter -e '@.mptcp')
|
support=$(echo $support | jsonfilter -e '@.mptcp')
|
||||||
|
@ -56,8 +64,10 @@ get_mptcp_from_website6() {
|
||||||
support=""
|
support=""
|
||||||
config_load openmptcprouter
|
config_load openmptcprouter
|
||||||
config_foreach get_mptcp_from_server server
|
config_foreach get_mptcp_from_server server
|
||||||
[ -z "$support" ] && [ -n "$(ip -4 a show dev $intf)" ] && get_mptcp_from_website
|
if [ ! -f /proc/sys/net/mptcp/enabled ] && [ -z "$support" ]; then
|
||||||
[ -z "$support" ] && [ -n "$(ip -6 a show dev $intf)" ] && get_mptcp_from_website6
|
[ -n "$(ip -4 a show dev $intf)" ] && get_mptcp_from_website
|
||||||
|
[ -n "$(ip -6 a show dev $intf)" ] && get_mptcp_from_website6
|
||||||
|
fi
|
||||||
if [ "$support" = "working" ]; then
|
if [ "$support" = "working" ]; then
|
||||||
echo "MPTCP enabled"
|
echo "MPTCP enabled"
|
||||||
elif [ "$support" = "not working" ]; then
|
elif [ "$support" = "not working" ]; then
|
||||||
|
|
0
luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename
Normal file → Executable file
|
@ -6,6 +6,8 @@ START=5
|
||||||
|
|
||||||
USE_PROCD=1
|
USE_PROCD=1
|
||||||
|
|
||||||
|
. /lib/functions/network.sh
|
||||||
|
|
||||||
omr_intf_del() {
|
omr_intf_del() {
|
||||||
[ -z "$1" ] && return
|
[ -z "$1" ] && return
|
||||||
uci -q delete openmptcprouter.$1
|
uci -q delete openmptcprouter.$1
|
||||||
|
@ -18,11 +20,14 @@ omr_intf_check() {
|
||||||
omr_intf_set() {
|
omr_intf_set() {
|
||||||
local device
|
local device
|
||||||
local ifname
|
local ifname
|
||||||
config_get ifname "$1" ifname
|
network_get_device ifname $1
|
||||||
config_get device "$1" device
|
[ -z "$ifname" ] && network_get_physdev ifname $1
|
||||||
config_get type "$1" type
|
[ -z "$ifname" ] && config_get ifname "$1" device
|
||||||
|
[ -z "$ifname" ] && config_get ifname "$1" ifname
|
||||||
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
||||||
|
#config_get devicename "$1" _modem_device
|
||||||
|
devicename=${ifname}
|
||||||
|
config_get type "$1" type
|
||||||
|
|
||||||
if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then
|
if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then
|
||||||
devicepath=$(readlink -f /sys/class/net/${ifname})
|
devicepath=$(readlink -f /sys/class/net/${ifname})
|
||||||
|
@ -34,11 +39,11 @@ omr_intf_set() {
|
||||||
uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')-$mac"
|
uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')-$mac"
|
||||||
uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')"
|
uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')"
|
||||||
elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then
|
elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then
|
||||||
uci -q delete network.$1.device
|
#uci -q delete network.$1.device
|
||||||
uci -q delete network.$1.modalias
|
uci -q delete network.$1.modalias
|
||||||
uci -q delete network.$1.product
|
uci -q delete network.$1.product
|
||||||
fi
|
fi
|
||||||
elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then
|
elif [ "$type" != "macvlan" ] && [ -n "$devicename" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then
|
||||||
mac=""
|
mac=""
|
||||||
if [ -f /sys/class/net/${ifname}/address ]; then
|
if [ -f /sys/class/net/${ifname}/address ]; then
|
||||||
mac="$(cat /sys/class/net/${ifname}/address | tr -d '\n')"
|
mac="$(cat /sys/class/net/${ifname}/address | tr -d '\n')"
|
||||||
|
@ -56,7 +61,10 @@ omr_set_settings() {
|
||||||
local ifname
|
local ifname
|
||||||
local multipath
|
local multipath
|
||||||
config_get multipath "$1" multipath
|
config_get multipath "$1" multipath
|
||||||
config_get ifname "$1" ifname
|
network_get_device ifname $1
|
||||||
|
[ -z "$ifname" ] && network_get_physdev ifname $1
|
||||||
|
[ -z "$ifname" ] && config_get ifname "$1" device
|
||||||
|
[ -z "$ifname" ] && config_get ifname "$1" ifname
|
||||||
config_get device "$1" device
|
config_get device "$1" device
|
||||||
config_get proto "$1" proto
|
config_get proto "$1" proto
|
||||||
config_get type "$1" type
|
config_get type "$1" type
|
||||||
|
@ -76,7 +84,8 @@ omr_set_settings() {
|
||||||
[ -z "$addlatency" ] && addlatency=0
|
[ -z "$addlatency" ] && addlatency=0
|
||||||
devicename=$(echo "$device" | cut -d'/' -f3)
|
devicename=$(echo "$device" | cut -d'/' -f3)
|
||||||
|
|
||||||
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
||||||
|
[ -z "$ifname" ] && config_get ifname "$1" ifname
|
||||||
[ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
[ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
||||||
|
|
||||||
if [ -n "$ifname" ]; then
|
if [ -n "$ifname" ]; then
|
||||||
|
@ -144,15 +153,13 @@ start_service() {
|
||||||
del_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
|
del_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
|
||||||
add_list dhcp.@dnsmasq[0].server='114.114.114.114'
|
add_list dhcp.@dnsmasq[0].server='114.114.114.114'
|
||||||
set dhcp.@dnsmasq[0].dnsseccheckunsigned='0'
|
set dhcp.@dnsmasq[0].dnsseccheckunsigned='0'
|
||||||
delete dhcp.@dnsmasq[0].dnssec='1'
|
delete dhcp.@dnsmasq[0].dnssec
|
||||||
commit dhcp
|
commit dhcp
|
||||||
EOF
|
EOF
|
||||||
elif [ "$(uci -q get openmptcprouter.settings.country)" = "world" ] && [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '114.114.114.114')" ]; then
|
elif [ "$(uci -q get openmptcprouter.settings.country)" = "world" ] && [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '114.114.114.114')" ]; then
|
||||||
uci -q batch <<-EOF > /dev/null
|
uci -q batch <<-EOF > /dev/null
|
||||||
add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
|
add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
|
||||||
del_list dhcp.@dnsmasq[0].server='114.114.114.114'
|
del_list dhcp.@dnsmasq[0].server='114.114.114.114'
|
||||||
set dhcp.@dnsmasq[0].dnsseccheckunsigned='1'
|
|
||||||
set dhcp.@dnsmasq[0].dnssec='1'
|
|
||||||
commit dhcp
|
commit dhcp
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -11,7 +11,7 @@ local jsonc = require "luci.jsonc"
|
||||||
function interface_from_device(dev)
|
function interface_from_device(dev)
|
||||||
for _, iface in ipairs(net:get_networks()) do
|
for _, iface in ipairs(net:get_networks()) do
|
||||||
local ifacen = iface:name()
|
local ifacen = iface:name()
|
||||||
local ifacename = ucic:get("network",ifacen,"ifname")
|
local ifacename = ucic:get("network",ifacen,"device")
|
||||||
if ifacename == dev then
|
if ifacename == dev then
|
||||||
return ifacen
|
return ifacen
|
||||||
end
|
end
|
||||||
|
@ -72,7 +72,7 @@ function add_interface(add_interface_ifname)
|
||||||
end
|
end
|
||||||
|
|
||||||
ucic:set("network","wan" .. i,"interface")
|
ucic:set("network","wan" .. i,"interface")
|
||||||
ucic:set("network","wan" .. i,"ifname",defif)
|
ucic:set("network","wan" .. i,"device",defif)
|
||||||
ucic:set("network","wan" .. i,"proto","static")
|
ucic:set("network","wan" .. i,"proto","static")
|
||||||
if ointf ~= "" then
|
if ointf ~= "" then
|
||||||
ucic:set("network","wan" .. i,"type","macvlan")
|
ucic:set("network","wan" .. i,"type","macvlan")
|
||||||
|
@ -128,7 +128,7 @@ end
|
||||||
|
|
||||||
function remove_interface(intf)
|
function remove_interface(intf)
|
||||||
-- Remove existing interface
|
-- Remove existing interface
|
||||||
local defif = ucic:get("network",intf,"ifname")
|
local defif = ucic:get("network",intf,"device")
|
||||||
ucic:delete("network",intf)
|
ucic:delete("network",intf)
|
||||||
ucic:delete("network",intf .. "_dev")
|
ucic:delete("network",intf .. "_dev")
|
||||||
ucic:save("network")
|
ucic:save("network")
|
||||||
|
@ -170,7 +170,7 @@ function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspee
|
||||||
if not ucic:get("sqm",intf) ~= "" then
|
if not ucic:get("sqm",intf) ~= "" then
|
||||||
local defif = get_device(intf)
|
local defif = get_device(intf)
|
||||||
if defif == "" then
|
if defif == "" then
|
||||||
defif = ucic:get("network",intf,"ifname") or ""
|
defif = ucic:get("network",intf,"device") or ""
|
||||||
end
|
end
|
||||||
ucic:set("sqm",intf,"queue")
|
ucic:set("sqm",intf,"queue")
|
||||||
ucic:set("sqm",intf,"interface",defif)
|
ucic:set("sqm",intf,"interface",defif)
|
||||||
|
@ -268,7 +268,7 @@ function default_vpn(default_vpn)
|
||||||
ucic:set("network","omrvpn","proto","dhcp")
|
ucic:set("network","omrvpn","proto","dhcp")
|
||||||
end
|
end
|
||||||
if vpn_intf ~= "" then
|
if vpn_intf ~= "" then
|
||||||
ucic:set("network","omrvpn","ifname",vpn_intf)
|
ucic:set("network","omrvpn","device",vpn_intf)
|
||||||
ucic:save("network")
|
ucic:save("network")
|
||||||
ucic:commit("network")
|
ucic:commit("network")
|
||||||
end
|
end
|
||||||
|
@ -824,7 +824,7 @@ function interfaces_status()
|
||||||
if mArray.openmptcprouter["external_check"] ~= false then
|
if mArray.openmptcprouter["external_check"] ~= false then
|
||||||
mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website))
|
mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website))
|
||||||
if mArray.openmptcprouter["proxy_addr"] == "" then
|
if mArray.openmptcprouter["proxy_addr"] == "" then
|
||||||
mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.co"))
|
mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.me"))
|
||||||
end
|
end
|
||||||
--mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com")
|
--mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com")
|
||||||
end
|
end
|
||||||
|
@ -931,6 +931,11 @@ function interfaces_status()
|
||||||
else
|
else
|
||||||
mArray.openmptcprouter["vps_admin"] = false
|
mArray.openmptcprouter["vps_admin"] = false
|
||||||
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
|
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
|
||||||
|
uci:set("openmptcprouter",s[".name"],"admin_error","1")
|
||||||
|
mArray.openmptcprouter["vps_admin_error"] = true
|
||||||
|
uci:delete("openmptcprouter",s[".name"],"token")
|
||||||
|
uci:save("openmptcprouter",s[".name"])
|
||||||
|
uci:commit("openmptcprouter",s[".name"])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
mArray.openmptcprouter["vps_admin"] = false
|
mArray.openmptcprouter["vps_admin"] = false
|
||||||
|
@ -961,7 +966,10 @@ function interfaces_status()
|
||||||
if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?dsvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") then
|
if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?dsvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") then
|
||||||
mArray.openmptcprouter["tun_service"] = true
|
mArray.openmptcprouter["tun_service"] = true
|
||||||
mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn")
|
mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn")
|
||||||
local tun_dev = uci:get("network","omrvpn","ifname")
|
local tun_dev = uci:get("network","omrvpn","device")
|
||||||
|
if tun_dev == "" then
|
||||||
|
tun_dev = uci:get("network","omrvpn","ifname")
|
||||||
|
end
|
||||||
if tun_dev == "" then
|
if tun_dev == "" then
|
||||||
tun_dev = get_device("omrvpn")
|
tun_dev = get_device("omrvpn")
|
||||||
end
|
end
|
||||||
|
@ -1019,7 +1027,7 @@ function interfaces_status()
|
||||||
mArray.openmptcprouter["multi_vpn"] = true
|
mArray.openmptcprouter["multi_vpn"] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check Shadowsocks is running
|
-- check Shadowsocks is running
|
||||||
mArray.openmptcprouter["shadowsocks_service"] = false
|
mArray.openmptcprouter["shadowsocks_service"] = false
|
||||||
if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then
|
if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then
|
||||||
|
@ -1027,10 +1035,16 @@ function interfaces_status()
|
||||||
end
|
end
|
||||||
|
|
||||||
mArray.openmptcprouter["shadowsocks_enabled"] = true
|
mArray.openmptcprouter["shadowsocks_enabled"] = true
|
||||||
local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0"
|
local ss_server = "1"
|
||||||
|
ucic:foreach("shadowsocks-libev", "server", function(s)
|
||||||
|
if uci:get("shadowsocks-libev",s[".name"],"disabled") == "0" then
|
||||||
|
ss_server = "0"
|
||||||
|
end
|
||||||
|
end)
|
||||||
if ss_server == "1" then
|
if ss_server == "1" then
|
||||||
mArray.openmptcprouter["shadowsocks_enabled"] = false
|
mArray.openmptcprouter["shadowsocks_enabled"] = false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check V2Ray is running
|
-- check V2Ray is running
|
||||||
mArray.openmptcprouter["v2ray_service"] = false
|
mArray.openmptcprouter["v2ray_service"] = false
|
||||||
if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then
|
if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then
|
||||||
|
@ -1139,14 +1153,14 @@ function interfaces_status()
|
||||||
|
|
||||||
local ifname = get_device(interface)
|
local ifname = get_device(interface)
|
||||||
if ifname == "" or ifname == nil then
|
if ifname == "" or ifname == nil then
|
||||||
ifname = section["ifname"] or ""
|
ifname = section["device"] or ""
|
||||||
end
|
end
|
||||||
--if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
|
--if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
|
||||||
--ifname = get_device(interface:sub(5))
|
--ifname = get_device(interface:sub(5))
|
||||||
--end
|
--end
|
||||||
|
|
||||||
duplicateif = false
|
duplicateif = false
|
||||||
if ifname ~= "" and ifname ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then
|
if ifname ~= "" and ifname ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) and (proto == "static" or proto == "dhcp") then
|
||||||
if allintf[ifname] then
|
if allintf[ifname] then
|
||||||
connectivity = "ERROR"
|
connectivity = "ERROR"
|
||||||
duplicateif = true
|
duplicateif = true
|
||||||
|
@ -1156,7 +1170,7 @@ function interfaces_status()
|
||||||
end
|
end
|
||||||
|
|
||||||
duplicatemac = false
|
duplicatemac = false
|
||||||
if mac ~= "" and mac ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then
|
if mac ~= "" and mac ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) and not (ifname ~= nil and ifname:match("%.")) then
|
||||||
if allmac[mac] then
|
if allmac[mac] then
|
||||||
connectivity = "ERROR"
|
connectivity = "ERROR"
|
||||||
duplicatemac = true
|
duplicatemac = true
|
||||||
|
@ -1371,7 +1385,8 @@ function interfaces_status()
|
||||||
if adminport == "" then
|
if adminport == "" then
|
||||||
adminport = "65500"
|
adminport = "65500"
|
||||||
end
|
end
|
||||||
if server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then
|
-- httping disable for now, with -l (ssl) timeout is ignored
|
||||||
|
if false and server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then
|
||||||
local server_http_result = ""
|
local server_http_result = ""
|
||||||
local server_http_test = ""
|
local server_http_test = ""
|
||||||
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
|
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
|
||||||
|
|
1870
luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter.bak
Normal file
|
@ -1,6 +1,6 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2021-05-21 19:20+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"luciapplicationssnmpd/fr/>\n"
|
"luciapplicationssnmpd/fr/>\n"
|
||||||
|
@ -57,7 +57,7 @@ msgstr ""
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr "Général"
|
||||||
|
|
||||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||||
msgid "Grant UCI access for luci-app-snmpd"
|
msgid "Grant UCI access for luci-app-snmpd"
|
||||||
|
@ -80,11 +80,11 @@ msgstr "Interface"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||||
msgid "Level"
|
msgid "Level"
|
||||||
msgstr ""
|
msgstr "Niveau"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||||
msgid "Location"
|
msgid "Location"
|
||||||
msgstr ""
|
msgstr "Localisation"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||||
|
@ -97,11 +97,11 @@ msgstr "Réseaux"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||||
msgid "Notify"
|
msgid "Notify"
|
||||||
msgstr ""
|
msgstr "Notifier"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||||
msgid "ObjectID"
|
msgid "ObjectID"
|
||||||
msgstr ""
|
msgstr "ObjectID"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||||
|
@ -110,7 +110,7 @@ msgstr "Interface de sortie"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||||
msgid "Program"
|
msgid "Program"
|
||||||
msgstr ""
|
msgstr "Programme"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||||
|
@ -119,28 +119,28 @@ msgstr "Protocoles"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||||
msgid "Read"
|
msgid "Read"
|
||||||
msgstr ""
|
msgstr "Lecture"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||||
msgid "Read-only"
|
msgid "Read-only"
|
||||||
msgstr ""
|
msgstr "Lecture Seule"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||||
msgid "Read-write"
|
msgid "Read-write"
|
||||||
msgstr ""
|
msgstr "Lecture-écriture"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||||
msgid "SNMPd"
|
msgid "SNMPd"
|
||||||
msgstr ""
|
msgstr "SNMPd"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||||
msgid "SNMPd settings interface (Beta)"
|
msgid "SNMPd settings interface (Beta)"
|
||||||
msgstr ""
|
msgstr "Paramètres du protocole SNMPd (Beta)"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||||
msgid "Server"
|
msgid "Server"
|
||||||
|
@ -148,7 +148,7 @@ msgstr "Serveur"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr "Source"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||||
msgid "System"
|
msgid "System"
|
||||||
|
@ -156,23 +156,23 @@ msgstr "Système"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||||
msgid "Write"
|
msgid "Write"
|
||||||
msgstr ""
|
msgstr "Ecriture"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||||
msgid "any"
|
msgid "any"
|
||||||
msgstr ""
|
msgstr "Tout"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||||
msgid "auth"
|
msgid "auth"
|
||||||
msgstr ""
|
msgstr "Authentification"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||||
msgid "com2sec security"
|
msgid "com2sec security"
|
||||||
msgstr ""
|
msgstr "com2sec security"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||||
msgid "noauth"
|
msgid "noauth"
|
||||||
msgstr ""
|
msgstr "pas d'authentification"
|
||||||
|
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||||
msgid "secname"
|
msgid "secname"
|
||||||
|
@ -181,4 +181,4 @@ msgstr ""
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||||
msgid "version"
|
msgid "version"
|
||||||
msgstr ""
|
msgstr "version"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
start_service()
|
start_service()
|
||||||
{
|
{
|
||||||
if [ -f /etc/backup/installed_packages.txt ]; then
|
if [ -f /etc/backup/installed_packages.txt ]; then
|
||||||
if [ "$(opkg -V0 update)" = "" ]; then
|
if [ "$(opkg -V0 update 2>&1)" = "" ]; then
|
||||||
grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install
|
grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install
|
||||||
rm /etc/backup/installed_packages.txt
|
rm /etc/backup/installed_packages.txt
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -371,7 +371,7 @@ return baseclass.extend({
|
||||||
|
|
||||||
release: {
|
release: {
|
||||||
title: _('Firmware Version'),
|
title: _('Firmware Version'),
|
||||||
value: boardinfo.release.description ? boardinfo.release.description : null
|
value: (typeof boardinfo.release !== "undefined") ? ((typeof boardinfo.release.description !== "undefined") ? boardinfo.release.description : null) : null
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"PO-Revision-Date: 2021-05-31 18:51+0000\n"
|
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||||
"lucimoddashboard/fr/>\n"
|
"lucimoddashboard/fr/>\n"
|
||||||
|
@ -47,11 +47,11 @@ msgstr "Tableau de bord"
|
||||||
|
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136
|
||||||
msgid "Devices"
|
msgid "Devices"
|
||||||
msgstr "Appareils"
|
msgstr "Périphériques"
|
||||||
|
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195
|
||||||
msgid "Devices Connected"
|
msgid "Devices Connected"
|
||||||
msgstr "Appareils connectés"
|
msgstr "Périphériques connectés"
|
||||||
|
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86
|
||||||
msgid "Down."
|
msgid "Down."
|
||||||
|
@ -71,7 +71,7 @@ msgstr "Version du micrologiciel"
|
||||||
|
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173
|
||||||
msgid "GHz"
|
msgid "GHz"
|
||||||
msgstr "Ghz"
|
msgstr "GHz"
|
||||||
|
|
||||||
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25
|
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25
|
||||||
msgid "Grant access to DHCP status display"
|
msgid "Grant access to DHCP status display"
|
||||||
|
@ -83,7 +83,7 @@ msgstr "Permettre l'accès à l'affichage de l'état principal"
|
||||||
|
|
||||||
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3
|
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3
|
||||||
msgid "Grant access to the system route status"
|
msgid "Grant access to the system route status"
|
||||||
msgstr "Permettre l'acces au Status du Routage"
|
msgstr "Permettre l’accès au status de routage"
|
||||||
|
|
||||||
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34
|
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34
|
||||||
msgid "Grant access to wireless status display"
|
msgid "Grant access to wireless status display"
|
||||||
|
@ -220,4 +220,4 @@ msgstr "non"
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101
|
||||||
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65
|
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65
|
||||||
msgid "yes"
|
msgid "yes"
|
||||||
msgstr "Oui"
|
msgstr "oui"
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||||
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||||
#
|
#
|
||||||
# From https://github.com/openwrt/luci/commit/f5c04e1a2e173f536597f220db0380cc08869e8e
|
# From https://github.com/openwrt/luci/commit/b88157e69a060ade618e48b30947729310935d61
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
|
917
luci-mod-network/htdocs/luci-static/resources/tools/network.js
Normal file
|
@ -0,0 +1,917 @@
|
||||||
|
'use strict';
|
||||||
|
'require ui';
|
||||||
|
'require dom';
|
||||||
|
'require uci';
|
||||||
|
'require form';
|
||||||
|
'require network';
|
||||||
|
'require baseclass';
|
||||||
|
'require validation';
|
||||||
|
'require tools.widgets as widgets';
|
||||||
|
|
||||||
|
function validateAddr(section_id, value) {
|
||||||
|
if (value == '')
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var ipv6 = /6$/.test(this.section.formvalue(section_id, 'mode')),
|
||||||
|
addr = ipv6 ? validation.parseIPv6(value) : validation.parseIPv4(value);
|
||||||
|
|
||||||
|
return addr ? true : (ipv6 ? _('Expecting a valid IPv6 address') : _('Expecting a valid IPv4 address'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateQoSMap(section_id, value) {
|
||||||
|
if (value == '')
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var m = value.match(/^(\d+):(\d+)$/);
|
||||||
|
|
||||||
|
if (!m || +m[1] > 0xFFFFFFFF || +m[2] > 0xFFFFFFFF)
|
||||||
|
return _('Expecting two priority values separated by a colon');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function deviceSectionExists(section_id, devname) {
|
||||||
|
var exists = false;
|
||||||
|
|
||||||
|
uci.sections('network', 'device', function(ss) {
|
||||||
|
exists = exists || (
|
||||||
|
ss['.name'] != section_id &&
|
||||||
|
ss.name == devname
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isBridgePort(dev) {
|
||||||
|
if (!dev)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (dev.isBridgePort())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var isPort = false;
|
||||||
|
|
||||||
|
uci.sections('network', null, function(s) {
|
||||||
|
if (s['.type'] != 'interface' && s['.type'] != 'device')
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (s.type == 'bridge' && L.toArray(s.ifname).indexOf(dev.getName()) > -1)
|
||||||
|
isPort = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
return isPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateDevBadge(node, dev) {
|
||||||
|
var type = dev.getType(),
|
||||||
|
up = dev.getCarrier();
|
||||||
|
|
||||||
|
dom.content(node, [
|
||||||
|
E('img', {
|
||||||
|
'class': 'middle',
|
||||||
|
'src': L.resource('icons/%s%s.png').format(type, up ? '' : '_disabled')
|
||||||
|
}),
|
||||||
|
'\x0a', dev.getName()
|
||||||
|
]);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderDevBadge(dev) {
|
||||||
|
return updateDevBadge(E('span', {
|
||||||
|
'class': 'ifacebadge port-status-device',
|
||||||
|
'style': 'font-weight:normal',
|
||||||
|
'data-device': dev.getName()
|
||||||
|
}), dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updatePortStatus(node, dev) {
|
||||||
|
var carrier = dev.getCarrier(),
|
||||||
|
duplex = dev.getDuplex(),
|
||||||
|
speed = dev.getSpeed(),
|
||||||
|
desc, title;
|
||||||
|
|
||||||
|
if (carrier && speed > 0 && duplex != null) {
|
||||||
|
desc = '%d%s'.format(speed, duplex == 'full' ? 'FD' : 'HD');
|
||||||
|
title = '%s, %d MBit/s, %s'.format(_('Connected'), speed, duplex == 'full' ? _('full-duplex') : _('half-duplex'));
|
||||||
|
}
|
||||||
|
else if (carrier) {
|
||||||
|
desc = _('Connected');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
desc = _('no link');
|
||||||
|
}
|
||||||
|
|
||||||
|
dom.content(node, [
|
||||||
|
E('img', {
|
||||||
|
'class': 'middle',
|
||||||
|
'src': L.resource('icons/port_%s.png').format(carrier ? 'up' : 'down')
|
||||||
|
}),
|
||||||
|
'\x0a', desc
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (title)
|
||||||
|
node.setAttribute('data-tooltip', title);
|
||||||
|
else
|
||||||
|
node.removeAttribute('data-tooltip');
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderPortStatus(dev) {
|
||||||
|
return updatePortStatus(E('span', {
|
||||||
|
'class': 'ifacebadge port-status-link',
|
||||||
|
'data-device': dev.getName()
|
||||||
|
}), dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updatePlaceholders(opt, section_id) {
|
||||||
|
var dev = network.instantiateDevice(opt.getUIElement(section_id).getValue());
|
||||||
|
|
||||||
|
for (var i = 0, co; (co = opt.section.children[i]) != null; i++) {
|
||||||
|
if (co !== opt) {
|
||||||
|
switch (co.option) {
|
||||||
|
case 'mtu':
|
||||||
|
case 'mtu6':
|
||||||
|
co.getUIElement(section_id).setPlaceholder(dev.getMTU());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'macaddr':
|
||||||
|
co.getUIElement(section_id).setPlaceholder(dev.getMAC());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'txqueuelen':
|
||||||
|
co.getUIElement(section_id).setPlaceholder(dev._devstate('qlen'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var cbiTagValue = form.Value.extend({
|
||||||
|
renderWidget: function(section_id, option_index, cfgvalue) {
|
||||||
|
var widget = new ui.Dropdown(cfgvalue || ['-'], {
|
||||||
|
'-': E([], [
|
||||||
|
E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ '—' ]),
|
||||||
|
E('span', { 'class': 'hide-close' }, [ _('Do not participate', 'VLAN port state') ])
|
||||||
|
]),
|
||||||
|
'u': E([], [
|
||||||
|
E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ 'u' ]),
|
||||||
|
E('span', { 'class': 'hide-close' }, [ _('Egress untagged', 'VLAN port state') ])
|
||||||
|
]),
|
||||||
|
't': E([], [
|
||||||
|
E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ 't' ]),
|
||||||
|
E('span', { 'class': 'hide-close' }, [ _('Egress tagged', 'VLAN port state') ])
|
||||||
|
]),
|
||||||
|
'*': E([], [
|
||||||
|
E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ '*' ]),
|
||||||
|
E('span', { 'class': 'hide-close' }, [ _('Primary VLAN ID', 'VLAN port state') ])
|
||||||
|
])
|
||||||
|
}, {
|
||||||
|
id: this.cbid(section_id),
|
||||||
|
sort: [ '-', 'u', 't', '*' ],
|
||||||
|
optional: false,
|
||||||
|
multiple: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var field = this;
|
||||||
|
|
||||||
|
widget.toggleItem = function(sb, li, force_state) {
|
||||||
|
var lis = li.parentNode.querySelectorAll('li'),
|
||||||
|
toggle = ui.Dropdown.prototype.toggleItem;
|
||||||
|
|
||||||
|
toggle.apply(this, [sb, li, force_state]);
|
||||||
|
|
||||||
|
if (force_state != null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (li.getAttribute('data-value'))
|
||||||
|
{
|
||||||
|
case '-':
|
||||||
|
if (li.hasAttribute('selected')) {
|
||||||
|
for (var i = 0; i < lis.length; i++) {
|
||||||
|
switch (lis[i].getAttribute('data-value')) {
|
||||||
|
case '-':
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
toggle.apply(this, [sb, lis[i], false]);
|
||||||
|
lis[i].setAttribute('unselectable', '');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
toggle.apply(this, [sb, lis[i], false]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
case 'u':
|
||||||
|
if (li.hasAttribute('selected')) {
|
||||||
|
for (var i = 0; i < lis.length; i++) {
|
||||||
|
switch (lis[i].getAttribute('data-value')) {
|
||||||
|
case li.getAttribute('data-value'):
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
lis[i].removeAttribute('unselectable');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
toggle.apply(this, [sb, lis[i], false]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toggle.apply(this, [sb, li, true]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
if (li.hasAttribute('selected')) {
|
||||||
|
var section_ids = field.section.cfgsections();
|
||||||
|
|
||||||
|
for (var i = 0; i < section_ids.length; i++) {
|
||||||
|
var other_widget = field.getUIElement(section_ids[i]),
|
||||||
|
other_value = L.toArray(other_widget.getValue());
|
||||||
|
|
||||||
|
if (other_widget === this)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var new_value = other_value.filter(function(v) { return v != '*' });
|
||||||
|
|
||||||
|
if (new_value.length == other_value.length)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
other_widget.setValue(new_value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var node = widget.render();
|
||||||
|
|
||||||
|
node.style.minWidth = '4em';
|
||||||
|
|
||||||
|
if (cfgvalue == '-')
|
||||||
|
node.querySelector('li[data-value="*"]').setAttribute('unselectable', '');
|
||||||
|
|
||||||
|
return E('div', { 'style': 'display:inline-block' }, node);
|
||||||
|
},
|
||||||
|
|
||||||
|
cfgvalue: function(section_id) {
|
||||||
|
var ports = L.toArray(uci.get('network', section_id, 'ports'));
|
||||||
|
|
||||||
|
for (var i = 0; i < ports.length; i++) {
|
||||||
|
var s = ports[i].split(/:/);
|
||||||
|
|
||||||
|
if (s[0] != this.port)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var t = /t/.test(s[1] || '') ? 't' : 'u';
|
||||||
|
|
||||||
|
return /\*/.test(s[1] || '') ? [t, '*'] : [t];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['-'];
|
||||||
|
},
|
||||||
|
|
||||||
|
write: function(section_id, value) {
|
||||||
|
var ports = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < this.section.children.length; i++) {
|
||||||
|
var opt = this.section.children[i];
|
||||||
|
|
||||||
|
if (opt.port) {
|
||||||
|
var val = L.toArray(opt.formvalue(section_id)).join('');
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case '-':
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
ports.push(opt.port);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ports.push('%s:%s'.format(opt.port, val));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uci.set('network', section_id, 'ports', ports);
|
||||||
|
},
|
||||||
|
|
||||||
|
remove: function() {}
|
||||||
|
});
|
||||||
|
|
||||||
|
return baseclass.extend({
|
||||||
|
replaceOption: function(s, tabName, optionClass, optionName, optionTitle, optionDescription) {
|
||||||
|
var o = s.getOption(optionName);
|
||||||
|
|
||||||
|
if (o) {
|
||||||
|
if (o.tab) {
|
||||||
|
s.tabs[o.tab].children = s.tabs[o.tab].children.filter(function(opt) {
|
||||||
|
return opt.option != optionName;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
s.children = s.children.filter(function(opt) {
|
||||||
|
return opt.option != optionName;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.taboption(tabName, optionClass, optionName, optionTitle, optionDescription);
|
||||||
|
},
|
||||||
|
|
||||||
|
addDeviceOptions: function(s, dev, isNew) {
|
||||||
|
var parent_dev = dev ? dev.getParent() : null,
|
||||||
|
o, ss;
|
||||||
|
|
||||||
|
s.tab('devgeneral', _('General device options'));
|
||||||
|
s.tab('devadvanced', _('Advanced device options'));
|
||||||
|
s.tab('brport', _('Bridge port specific options'));
|
||||||
|
s.tab('bridgevlan', _('Bridge VLAN filtering'));
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.ListValue, 'type', _('Device type'));
|
||||||
|
o.readonly = !isNew;
|
||||||
|
o.value('', _('Network device'));
|
||||||
|
o.value('bridge', _('Bridge device'));
|
||||||
|
o.value('8021q', _('VLAN (802.1q)'));
|
||||||
|
o.value('8021ad', _('VLAN (802.1ad)'));
|
||||||
|
o.value('macvlan', _('MAC VLAN'));
|
||||||
|
o.value('veth', _('Virtual Ethernet'));
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
if (value == 'bridge' || value == 'veth')
|
||||||
|
updatePlaceholders(this.section.getOption('name_complex'), section_id);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'name_simple', _('Existing device'));
|
||||||
|
o.readonly = !isNew;
|
||||||
|
o.rmempty = false;
|
||||||
|
o.noaliases = true;
|
||||||
|
o.default = (dev ? dev.getName() : '');
|
||||||
|
o.ucioption = 'name';
|
||||||
|
o.filter = function(section_id, value) {
|
||||||
|
var dev = network.instantiateDevice(value);
|
||||||
|
return !deviceSectionExists(section_id, value) && (dev.getType() != 'wifi' || dev.isUp());
|
||||||
|
};
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
updatePlaceholders(this, section_id);
|
||||||
|
|
||||||
|
return deviceSectionExists(section_id, value)
|
||||||
|
? _('A configuration for the device "%s" already exists').format(value) : true;
|
||||||
|
};
|
||||||
|
o.onchange = function(ev, section_id, values) {
|
||||||
|
updatePlaceholders(this, section_id);
|
||||||
|
};
|
||||||
|
o.depends('type', '');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_single', _('Base device'));
|
||||||
|
o.readonly = !isNew;
|
||||||
|
o.rmempty = false;
|
||||||
|
o.noaliases = true;
|
||||||
|
o.default = (dev ? dev.getName() : '').match(/^.+\.\d+$/) ? dev.getName().replace(/\.\d+$/, '') : '';
|
||||||
|
o.ucioption = 'ifname';
|
||||||
|
o.filter = function(section_id, value) {
|
||||||
|
var dev = network.instantiateDevice(value);
|
||||||
|
return (dev.getType() != 'wifi' || dev.isUp());
|
||||||
|
};
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
updatePlaceholders(this, section_id);
|
||||||
|
|
||||||
|
if (isNew) {
|
||||||
|
var type = this.section.formvalue(section_id, 'type'),
|
||||||
|
name = this.section.getUIElement(section_id, 'name_complex');
|
||||||
|
|
||||||
|
if (type == 'macvlan' && value && name && !name.isChanged()) {
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
while (deviceSectionExists(section_id, '%smac%d'.format(value, i)))
|
||||||
|
i++;
|
||||||
|
|
||||||
|
name.setValue('%smac%d'.format(value, i));
|
||||||
|
name.triggerValidation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
o.onchange = function(ev, section_id, values) {
|
||||||
|
updatePlaceholders(this, section_id);
|
||||||
|
};
|
||||||
|
o.depends('type', '8021q');
|
||||||
|
o.depends('type', '8021ad');
|
||||||
|
o.depends('type', 'macvlan');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'vid', _('VLAN ID'));
|
||||||
|
o.readonly = !isNew;
|
||||||
|
o.datatype = 'range(1, 4094)';
|
||||||
|
o.rmempty = false;
|
||||||
|
o.default = (dev ? dev.getName() : '').match(/^.+\.\d+$/) ? dev.getName().replace(/^.+\./, '') : '';
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
var base = this.section.formvalue(section_id, 'ifname_single'),
|
||||||
|
vid = this.section.formvalue(section_id, 'vid'),
|
||||||
|
name = this.section.getUIElement(section_id, 'name_complex');
|
||||||
|
|
||||||
|
if (base && vid && name && !name.isChanged()) {
|
||||||
|
name.setValue('%s.%d'.format(base, vid));
|
||||||
|
name.triggerValidation();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
o.depends('type', '8021q');
|
||||||
|
o.depends('type', '8021ad');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.ListValue, 'mode', _('Mode'));
|
||||||
|
o.value('vepa', _('VEPA (Virtual Ethernet Port Aggregator)', 'MACVLAN mode'));
|
||||||
|
o.value('private', _('Private (Prevent communication between MAC VLANs)', 'MACVLAN mode'));
|
||||||
|
o.value('bridge', _('Bridge (Support direct communication between MAC VLANs)', 'MACVLAN mode'));
|
||||||
|
o.value('passthru', _('Pass-through (Mirror physical device to single MAC VLAN)', 'MACVLAN mode'));
|
||||||
|
o.depends('type', 'macvlan');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'name_complex', _('Device name'));
|
||||||
|
o.rmempty = false;
|
||||||
|
o.datatype = 'maxlength(15)';
|
||||||
|
o.readonly = !isNew;
|
||||||
|
o.ucioption = 'name';
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
var dev = network.instantiateDevice(value);
|
||||||
|
|
||||||
|
if (deviceSectionExists(section_id, value) || (isNew && (dev.dev || {}).idx))
|
||||||
|
return _('The device name "%s" is already taken').format(value);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
o.depends({ type: '', '!reverse': true });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.DynamicList, 'ingress_qos_mapping', _('Ingress QoS mapping'), _('Defines a mapping of VLAN header priority to the Linux internal packet priority on incoming frames'));
|
||||||
|
o.rmempty = true;
|
||||||
|
o.validate = validateQoSMap;
|
||||||
|
o.depends('type', '8021q');
|
||||||
|
o.depends('type', '8021ad');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.DynamicList, 'egress_qos_mapping', _('Egress QoS mapping'), _('Defines a mapping of Linux internal packet priority to VLAN header priority but for outgoing frames'));
|
||||||
|
o.rmempty = true;
|
||||||
|
o.validate = validateQoSMap;
|
||||||
|
o.depends('type', '8021q');
|
||||||
|
o.depends('type', '8021ad');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_multi', _('Bridge ports'));
|
||||||
|
o.size = 10;
|
||||||
|
o.rmempty = true;
|
||||||
|
o.multiple = true;
|
||||||
|
o.noaliases = true;
|
||||||
|
o.nobridges = true;
|
||||||
|
o.ucioption = 'ports';
|
||||||
|
o.default = L.toArray(dev ? dev.getPorts() : null).filter(function(p) { return p.getType() != 'wifi' }).map(function(p) { return p.getName() });
|
||||||
|
o.filter = function(section_id, device_name) {
|
||||||
|
var bridge_name = uci.get('network', section_id, 'name'),
|
||||||
|
choice_dev = network.instantiateDevice(device_name),
|
||||||
|
parent_dev = choice_dev.getParent();
|
||||||
|
|
||||||
|
/* only show wifi networks which are already present in "option ifname" */
|
||||||
|
if (choice_dev.getType() == 'wifi') {
|
||||||
|
var ifnames = L.toArray(uci.get('network', section_id, 'ports'));
|
||||||
|
|
||||||
|
for (var i = 0; i < ifnames.length; i++)
|
||||||
|
if (ifnames[i] == device_name)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (!parent_dev || parent_dev.getName() != bridge_name);
|
||||||
|
};
|
||||||
|
o.description = _('Specifies the wired ports to attach to this bridge. In order to attach wireless networks, choose the associated interface as network in the wireless settings.')
|
||||||
|
o.onchange = function(ev, section_id, values) {
|
||||||
|
ss.updatePorts(values);
|
||||||
|
|
||||||
|
return ss.parse().then(function() {
|
||||||
|
ss.redraw();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Flag, 'bridge_empty', _('Bring up empty bridge'), _('Bring up the bridge interface even if no ports are attached'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'priority', _('Priority'));
|
||||||
|
o.placeholder = '32767';
|
||||||
|
o.datatype = 'range(0, 65535)';
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'ageing_time', _('Ageing time'), _('Timeout in seconds for learned MAC addresses in the forwarding database'));
|
||||||
|
o.placeholder = '30';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'stp', _('Enable <abbr title="Spanning Tree Protocol">STP</abbr>'), _('Enables the Spanning Tree Protocol on this bridge'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'hello_time', _('Hello interval'), _('Interval in seconds for STP hello packets'));
|
||||||
|
o.placeholder = '2';
|
||||||
|
o.datatype = 'range(1, 10)';
|
||||||
|
o.depends({ type: 'bridge', stp: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'forward_delay', _('Forward delay'), _('Time in seconds to spend in listening and learning states'));
|
||||||
|
o.placeholder = '15';
|
||||||
|
o.datatype = 'range(2, 30)';
|
||||||
|
o.depends({ type: 'bridge', stp: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'max_age', _('Maximum age'), _('Timeout in seconds until topology updates on link loss'));
|
||||||
|
o.placeholder = '20';
|
||||||
|
o.datatype = 'range(6, 40)';
|
||||||
|
o.depends({ type: 'bridge', stp: '1' });
|
||||||
|
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'igmp_snooping', _('Enable <abbr title="Internet Group Management Protocol">IGMP</abbr> snooping'), _('Enables IGMP snooping on this bridge'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'hash_max', _('Maximum snooping table size'));
|
||||||
|
o.placeholder = '512';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.depends({ type: 'bridge', igmp_snooping: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'multicast_querier', _('Enable multicast querier'));
|
||||||
|
o.defaults = { '1': [{'igmp_snooping': '1'}], '0': [{'igmp_snooping': '0'}] };
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'robustness', _('Robustness'), _('The robustness value allows tuning for the expected packet loss on the network. If a network is expected to be lossy, the robustness value may be increased. IGMP is robust to (Robustness-1) packet losses'));
|
||||||
|
o.placeholder = '2';
|
||||||
|
o.datatype = 'min(1)';
|
||||||
|
o.depends({ type: 'bridge', multicast_querier: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'query_interval', _('Query interval'), _('Interval in centiseconds between multicast general queries. By varying the value, an administrator may tune the number of IGMP messages on the subnet; larger values cause IGMP Queries to be sent less often'));
|
||||||
|
o.placeholder = '12500';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.depends({ type: 'bridge', multicast_querier: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'query_response_interval', _('Query response interval'), _('The max response time in centiseconds inserted into the periodic general queries. By varying the value, an administrator may tune the burstiness of IGMP messages on the subnet; larger values make the traffic less bursty, as host responses are spread out over a larger interval'));
|
||||||
|
o.placeholder = '1000';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
var qiopt = L.toArray(this.map.lookupOption('query_interval', section_id))[0],
|
||||||
|
qival = qiopt ? (qiopt.formvalue(section_id) || qiopt.placeholder) : '';
|
||||||
|
|
||||||
|
if (value != '' && qival != '' && +value >= +qival)
|
||||||
|
return _('The query response interval must be lower than the query interval value');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
o.depends({ type: 'bridge', multicast_querier: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'last_member_interval', _('Last member interval'), _('The max response time in centiseconds inserted into group-specific queries sent in response to leave group messages. It is also the amount of time between group-specific query messages. This value may be tuned to modify the "leave latency" of the network. A reduced value results in reduced time to detect the loss of the last member of a group'));
|
||||||
|
o.placeholder = '100';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.depends({ type: 'bridge', multicast_querier: '1' });
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'mtu', _('MTU'));
|
||||||
|
o.datatype = 'range(576, 9200)';
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
var parent_mtu = (dev && dev.getType() == 'vlan') ? (parent_dev ? parent_dev.getMTU() : null) : null;
|
||||||
|
|
||||||
|
if (parent_mtu !== null && +value > parent_mtu)
|
||||||
|
return _('The MTU must not exceed the parent device MTU of %d bytes').format(parent_mtu);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'macaddr', _('MAC address'));
|
||||||
|
o.datatype = 'macaddr';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'peer_name', _('Peer device name'));
|
||||||
|
o.rmempty = true;
|
||||||
|
o.datatype = 'maxlength(15)';
|
||||||
|
o.depends('type', 'veth');
|
||||||
|
o.load = function(section_id) {
|
||||||
|
var sections = uci.sections('network', 'device'),
|
||||||
|
idx = 0;
|
||||||
|
|
||||||
|
for (var i = 0; i < sections.length; i++)
|
||||||
|
if (sections[i]['.name'] == section_id)
|
||||||
|
break;
|
||||||
|
else if (sections[i].type == 'veth')
|
||||||
|
idx++;
|
||||||
|
|
||||||
|
this.placeholder = 'veth%d'.format(idx);
|
||||||
|
|
||||||
|
return form.Value.prototype.load.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'peer_macaddr', _('Peer MAC address'));
|
||||||
|
o.rmempty = true;
|
||||||
|
o.datatype = 'macaddr';
|
||||||
|
o.depends('type', 'veth');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'txqueuelen', _('TX queue length'));
|
||||||
|
o.placeholder = dev ? dev._devstate('qlen') : '';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'promisc', _('Enable promiscuous mode'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'rpfilter', _('Reverse path filter'));
|
||||||
|
o.default = '';
|
||||||
|
o.value('', _('disabled'));
|
||||||
|
o.value('loose', _('Loose filtering'));
|
||||||
|
o.value('strict', _('Strict filtering'));
|
||||||
|
o.cfgvalue = function(section_id) {
|
||||||
|
var val = form.ListValue.prototype.cfgvalue.apply(this, [section_id]);
|
||||||
|
|
||||||
|
switch (val || '') {
|
||||||
|
case 'loose':
|
||||||
|
case '1':
|
||||||
|
return 'loose';
|
||||||
|
|
||||||
|
case 'strict':
|
||||||
|
case '2':
|
||||||
|
return 'strict';
|
||||||
|
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'acceptlocal', _('Accept local'), _('Accept packets with local source addresses'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'sendredirects', _('Send ICMP redirects'));
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'neighreachabletime', _('Neighbour cache validity'), _('Time in milliseconds'));
|
||||||
|
o.placeholder = '30000';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'neighgcstaletime', _('Stale neighbour cache timeout'), _('Timeout in seconds'));
|
||||||
|
o.placeholder = '60';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'neighlocktime', _('Minimum ARP validity time'), _('Minimum required time in seconds before an ARP entry may be replaced. Prevents ARP cache thrashing.'));
|
||||||
|
o.placeholder = '0';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Value, 'ttl', _('Force TTL'), _('Some LTE providers detect tethering by inspecting packet TTL values'));
|
||||||
|
o.placeholder = '65';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Flag, 'ipv6', _('Enable IPv6'));
|
||||||
|
o.migrate = false;
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'mtu6', _('IPv6 MTU'));
|
||||||
|
o.datatype = 'max(9200)';
|
||||||
|
o.depends('ipv6', '1');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devgeneral', form.Value, 'dadtransmits', _('DAD transmits'), _('Amount of Duplicate Address Detection probes to send'));
|
||||||
|
o.placeholder = '1';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.depends('ipv6', '1');
|
||||||
|
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.Flag, 'multicast', _('Enable multicast support'));
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'igmpversion', _('Force IGMP version'));
|
||||||
|
o.value('', _('No enforcement'));
|
||||||
|
o.value('1', _('Enforce IGMPv1'));
|
||||||
|
o.value('2', _('Enforce IGMPv2'));
|
||||||
|
o.value('3', _('Enforce IGMPv3'));
|
||||||
|
o.depends('multicast', '1');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'mldversion', _('Force MLD version'));
|
||||||
|
o.value('', _('No enforcement'));
|
||||||
|
o.value('1', _('Enforce MLD version 1'));
|
||||||
|
o.value('2', _('Enforce MLD version 2'));
|
||||||
|
o.depends('multicast', '1');
|
||||||
|
|
||||||
|
if (isBridgePort(dev)) {
|
||||||
|
o = this.replaceOption(s, 'brport', form.Flag, 'learning', _('Enable MAC address learning'));
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'brport', form.Flag, 'unicast_flood', _('Enable unicast flooding'));
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'brport', form.Flag, 'isolated', _('Port isolation'), _('Only allow communication with non-isolated bridge ports when enabled'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'brport', form.ListValue, 'multicast_router', _('Multicast routing'));
|
||||||
|
o.value('', _('Never'));
|
||||||
|
o.value('1', _('Learn'));
|
||||||
|
o.value('2', _('Always'));
|
||||||
|
o.depends('multicast', '1');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'brport', form.Flag, 'multicast_to_unicast', _('Multicast to unicast'), _('Forward multicast packets as unicast packets on this device.'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
o.depends('multicast', '1');
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'brport', form.Flag, 'multicast_fast_leave', _('Enable multicast fast leave'));
|
||||||
|
o.default = o.disabled;
|
||||||
|
o.depends('multicast', '1');
|
||||||
|
}
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'bridgevlan', form.Flag, 'vlan_filtering', _('Enable VLAN filtering'));
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
o.updateDefaultValue = function(section_id) {
|
||||||
|
var device = uci.get('network', s.section, 'name'),
|
||||||
|
uielem = this.getUIElement(section_id),
|
||||||
|
has_vlans = false;
|
||||||
|
|
||||||
|
uci.sections('network', 'bridge-vlan', function(bvs) {
|
||||||
|
has_vlans = has_vlans || (bvs.device == device);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.default = has_vlans ? this.enabled : this.disabled;
|
||||||
|
|
||||||
|
if (uielem && !uielem.isChanged())
|
||||||
|
uielem.setValue(this.default);
|
||||||
|
};
|
||||||
|
|
||||||
|
o = this.replaceOption(s, 'bridgevlan', form.SectionValue, 'bridge-vlan', form.TableSection, 'bridge-vlan');
|
||||||
|
o.depends('type', 'bridge');
|
||||||
|
|
||||||
|
ss = o.subsection;
|
||||||
|
ss.addremove = true;
|
||||||
|
ss.anonymous = true;
|
||||||
|
|
||||||
|
ss.renderHeaderRows = function(/* ... */) {
|
||||||
|
var node = form.TableSection.prototype.renderHeaderRows.apply(this, arguments);
|
||||||
|
|
||||||
|
node.querySelectorAll('.th').forEach(function(th) {
|
||||||
|
th.classList.add('left');
|
||||||
|
th.classList.add('middle');
|
||||||
|
});
|
||||||
|
|
||||||
|
return node;
|
||||||
|
};
|
||||||
|
|
||||||
|
ss.filter = function(section_id) {
|
||||||
|
var devname = uci.get('network', s.section, 'name');
|
||||||
|
return (uci.get('network', section_id, 'device') == devname);
|
||||||
|
};
|
||||||
|
|
||||||
|
ss.render = function(/* ... */) {
|
||||||
|
return form.TableSection.prototype.render.apply(this, arguments).then(L.bind(function(node) {
|
||||||
|
node.style.overflow = 'auto hidden';
|
||||||
|
node.style.paddingTop = '1em';
|
||||||
|
|
||||||
|
if (this.node)
|
||||||
|
this.node.parentNode.replaceChild(node, this.node);
|
||||||
|
|
||||||
|
this.node = node;
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}, this));
|
||||||
|
};
|
||||||
|
|
||||||
|
ss.redraw = function() {
|
||||||
|
return this.load().then(L.bind(this.render, this));
|
||||||
|
};
|
||||||
|
|
||||||
|
ss.updatePorts = function(ports) {
|
||||||
|
var devices = ports.map(function(port) {
|
||||||
|
return network.instantiateDevice(port)
|
||||||
|
}).filter(function(dev) {
|
||||||
|
return dev.getType() != 'wifi' || dev.isUp();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.children = this.children.filter(function(opt) { return !opt.option.match(/^port_/) });
|
||||||
|
|
||||||
|
for (var i = 0; i < devices.length; i++) {
|
||||||
|
o = ss.option(cbiTagValue, 'port_%s'.format(sfh(devices[i].getName())), renderDevBadge(devices[i]), renderPortStatus(devices[i]));
|
||||||
|
o.port = devices[i].getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
var section_ids = this.cfgsections(),
|
||||||
|
device_names = devices.reduce(function(names, dev) { names[dev.getName()] = true; return names }, {});
|
||||||
|
|
||||||
|
for (var i = 0; i < section_ids.length; i++) {
|
||||||
|
var old_spec = L.toArray(uci.get('network', section_ids[i], 'ports')),
|
||||||
|
new_spec = old_spec.filter(function(spec) { return device_names[spec.replace(/:[ut*]+$/, '')] });
|
||||||
|
|
||||||
|
if (old_spec.length != new_spec.length)
|
||||||
|
uci.set('network', section_ids[i], 'ports', new_spec.length ? new_spec : null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ss.handleAdd = function(ev) {
|
||||||
|
return s.parse().then(L.bind(function() {
|
||||||
|
var device = uci.get('network', s.section, 'name'),
|
||||||
|
section_ids = this.cfgsections(),
|
||||||
|
section_id = null,
|
||||||
|
max_vlan_id = 0;
|
||||||
|
|
||||||
|
if (!device)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (var i = 0; i < section_ids.length; i++) {
|
||||||
|
var vid = +uci.get('network', section_ids[i], 'vlan');
|
||||||
|
|
||||||
|
if (vid > max_vlan_id)
|
||||||
|
max_vlan_id = vid;
|
||||||
|
}
|
||||||
|
|
||||||
|
section_id = uci.add('network', 'bridge-vlan');
|
||||||
|
uci.set('network', section_id, 'device', device);
|
||||||
|
uci.set('network', section_id, 'vlan', max_vlan_id + 1);
|
||||||
|
|
||||||
|
s.children.forEach(function(opt) {
|
||||||
|
switch (opt.option) {
|
||||||
|
case 'type':
|
||||||
|
case 'name_complex':
|
||||||
|
var input = opt.map.findElement('id', 'widget.%s'.format(opt.cbid(s.section)));
|
||||||
|
if (input)
|
||||||
|
input.disabled = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
s.getOption('vlan_filtering').updateDefaultValue(s.section);
|
||||||
|
|
||||||
|
s.map.addedVLANs = s.map.addedVLANs || [];
|
||||||
|
s.map.addedVLANs.push(section_id);
|
||||||
|
|
||||||
|
return this.redraw();
|
||||||
|
}, this));
|
||||||
|
};
|
||||||
|
|
||||||
|
o = ss.option(form.Value, 'vlan', _('VLAN ID'));
|
||||||
|
o.datatype = 'range(1, 4094)';
|
||||||
|
|
||||||
|
o.renderWidget = function(/* ... */) {
|
||||||
|
var node = form.Value.prototype.renderWidget.apply(this, arguments);
|
||||||
|
|
||||||
|
node.style.width = '5em';
|
||||||
|
|
||||||
|
return node;
|
||||||
|
};
|
||||||
|
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
var section_ids = this.section.cfgsections();
|
||||||
|
|
||||||
|
for (var i = 0; i < section_ids.length; i++) {
|
||||||
|
if (section_ids[i] == section_id)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (uci.get('network', section_ids[i], 'vlan') == value)
|
||||||
|
return _('The VLAN ID must be unique');
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
o = ss.option(form.Flag, 'local', _('Local'));
|
||||||
|
o.default = o.enabled;
|
||||||
|
|
||||||
|
var ports = [];
|
||||||
|
|
||||||
|
var seen_ports = {};
|
||||||
|
|
||||||
|
L.toArray(uci.get('network', s.section, 'ports')).forEach(function(port) {
|
||||||
|
seen_ports[port] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
uci.sections('network', 'bridge-vlan', function(bvs) {
|
||||||
|
if (uci.get('network', s.section, 'name') != bvs.device)
|
||||||
|
return;
|
||||||
|
|
||||||
|
L.toArray(bvs.ports).forEach(function(portspec) {
|
||||||
|
var m = portspec.match(/^([^:]+)(?::[ut*]+)?$/);
|
||||||
|
|
||||||
|
if (m)
|
||||||
|
seen_ports[m[1]] = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var port_name in seen_ports)
|
||||||
|
ports.push(port_name);
|
||||||
|
|
||||||
|
ports.sort(function(a, b) {
|
||||||
|
var m1 = a.match(/^(.+?)([0-9]*)$/),
|
||||||
|
m2 = b.match(/^(.+?)([0-9]*)$/);
|
||||||
|
|
||||||
|
if (m1[1] < m2[1])
|
||||||
|
return -1;
|
||||||
|
else if (m1[1] > m2[1])
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return +(m1[2] || 0) - +(m2[2] || 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
ss.updatePorts(ports);
|
||||||
|
},
|
||||||
|
|
||||||
|
updateDevBadge: updateDevBadge,
|
||||||
|
updatePortStatus: updatePortStatus
|
||||||
|
});
|
|
@ -34,8 +34,8 @@ CBILeaseStatus = form.DummyValue.extend({
|
||||||
E('table', { 'id': 'lease_status_table', 'class': 'table' }, [
|
E('table', { 'id': 'lease_status_table', 'class': 'table' }, [
|
||||||
E('tr', { 'class': 'tr table-titles' }, [
|
E('tr', { 'class': 'tr table-titles' }, [
|
||||||
E('th', { 'class': 'th' }, _('Hostname')),
|
E('th', { 'class': 'th' }, _('Hostname')),
|
||||||
E('th', { 'class': 'th' }, _('IPv4-Address')),
|
E('th', { 'class': 'th' }, _('IPv4 address')),
|
||||||
E('th', { 'class': 'th' }, _('MAC-Address')),
|
E('th', { 'class': 'th' }, _('MAC address')),
|
||||||
E('th', { 'class': 'th' }, _('Lease time remaining'))
|
E('th', { 'class': 'th' }, _('Lease time remaining'))
|
||||||
]),
|
]),
|
||||||
E('tr', { 'class': 'tr placeholder' }, [
|
E('tr', { 'class': 'tr placeholder' }, [
|
||||||
|
@ -53,7 +53,7 @@ CBILease6Status = form.DummyValue.extend({
|
||||||
E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [
|
E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [
|
||||||
E('tr', { 'class': 'tr table-titles' }, [
|
E('tr', { 'class': 'tr table-titles' }, [
|
||||||
E('th', { 'class': 'th' }, _('Host')),
|
E('th', { 'class': 'th' }, _('Host')),
|
||||||
E('th', { 'class': 'th' }, _('IPv6-Address')),
|
E('th', { 'class': 'th' }, _('IPv6 address')),
|
||||||
E('th', { 'class': 'th' }, _('DUID')),
|
E('th', { 'class': 'th' }, _('DUID')),
|
||||||
E('th', { 'class': 'th' }, _('Lease time remaining'))
|
E('th', { 'class': 'th' }, _('Lease time remaining'))
|
||||||
]),
|
]),
|
||||||
|
@ -279,7 +279,8 @@ return view.extend({
|
||||||
|
|
||||||
o.optional = true;
|
o.optional = true;
|
||||||
o.placeholder = '/example.org/10.1.2.3';
|
o.placeholder = '/example.org/10.1.2.3';
|
||||||
// o.validate = validateServerSpec;
|
o.validate = validateServerSpec;
|
||||||
|
|
||||||
|
|
||||||
o = s.taboption('general', form.DynamicList, 'address', _('Addresses'),
|
o = s.taboption('general', form.DynamicList, 'address', _('Addresses'),
|
||||||
_('List of domains to force to an IP address.'));
|
_('List of domains to force to an IP address.'));
|
||||||
|
@ -287,6 +288,7 @@ return view.extend({
|
||||||
o.optional = true;
|
o.optional = true;
|
||||||
o.placeholder = '/router.local/192.168.0.1';
|
o.placeholder = '/router.local/192.168.0.1';
|
||||||
|
|
||||||
|
|
||||||
o = s.taboption('general', form.Flag, 'rebind_protection',
|
o = s.taboption('general', form.Flag, 'rebind_protection',
|
||||||
_('Rebind protection'),
|
_('Rebind protection'),
|
||||||
_('Discard upstream RFC1918 responses'));
|
_('Discard upstream RFC1918 responses'));
|
||||||
|
@ -407,7 +409,7 @@ return view.extend({
|
||||||
|
|
||||||
o = s.taboption('leases', form.SectionValue, '__leases__', form.GridSection, 'host', null,
|
o = s.taboption('leases', form.SectionValue, '__leases__', form.GridSection, 'host', null,
|
||||||
_('Static leases are used to assign fixed IP addresses and symbolic hostnames to DHCP clients. They are also required for non-dynamic interface configurations where only hosts with a corresponding lease are served.') + '<br />' +
|
_('Static leases are used to assign fixed IP addresses and symbolic hostnames to DHCP clients. They are also required for non-dynamic interface configurations where only hosts with a corresponding lease are served.') + '<br />' +
|
||||||
_('Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</em> identifies the host, the <em>IPv4-Address</em> specifies the fixed address to use, and the <em>Hostname</em> is assigned as a symbolic name to the requesting host. The optional <em>Lease time</em> can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.'));
|
_('Use the <em>Add</em> Button to add a new lease entry. The <em>MAC address</em> identifies the host, the <em>IPv4 address</em> specifies the fixed address to use, and the <em>Hostname</em> is assigned as a symbolic name to the requesting host. The optional <em>Lease time</em> can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.'));
|
||||||
|
|
||||||
ss = o.subsection;
|
ss = o.subsection;
|
||||||
|
|
||||||
|
@ -448,7 +450,11 @@ return view.extend({
|
||||||
|
|
||||||
node.addEventListener('cbi-dropdown-change', L.bind(function(ipopt, section_id, ev) {
|
node.addEventListener('cbi-dropdown-change', L.bind(function(ipopt, section_id, ev) {
|
||||||
var mac = ev.detail.value.value;
|
var mac = ev.detail.value.value;
|
||||||
if (mac == null || mac == '' || !hosts[mac] || !hosts[mac].ipv4)
|
if (mac == null || mac == '' || !hosts[mac])
|
||||||
|
return;
|
||||||
|
|
||||||
|
var iphint = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0];
|
||||||
|
if (iphint == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var ip = ipopt.formvalue(section_id);
|
var ip = ipopt.formvalue(section_id);
|
||||||
|
@ -457,16 +463,35 @@ return view.extend({
|
||||||
|
|
||||||
var node = ipopt.map.findElement('id', ipopt.cbid(section_id));
|
var node = ipopt.map.findElement('id', ipopt.cbid(section_id));
|
||||||
if (node)
|
if (node)
|
||||||
dom.callClassMethod(node, 'setValue', hosts[mac].ipv4);
|
dom.callClassMethod(node, 'setValue', iphint);
|
||||||
}, this, ipopt, section_id));
|
}, this, ipopt, section_id));
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
Object.keys(hosts).forEach(function(mac) {
|
Object.keys(hosts).forEach(function(mac) {
|
||||||
var hint = hosts[mac].name || hosts[mac].ipv4;
|
var hint = hosts[mac].name || L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0];
|
||||||
so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
|
so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
so.write = function(section, value) {
|
||||||
|
var ip = this.map.lookupOption('ip', section)[0].formvalue(section);
|
||||||
|
var hosts = uci.sections('dhcp', 'host');
|
||||||
|
var section_removed = false;
|
||||||
|
|
||||||
|
for (var i = 0; i < hosts.length; i++) {
|
||||||
|
if (ip == hosts[i].ip) {
|
||||||
|
uci.set('dhcp', hosts[i]['.name'], 'mac', [hosts[i].mac, value].join(' '));
|
||||||
|
uci.remove('dhcp', section);
|
||||||
|
section_removed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!section_removed) {
|
||||||
|
uci.set('dhcp', section, 'mac', value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
so = ss.option(form.Value, 'ip', _('<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address'));
|
so = ss.option(form.Value, 'ip', _('<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address'));
|
||||||
so.datatype = 'or(ip4addr,"ignore")';
|
so.datatype = 'or(ip4addr,"ignore")';
|
||||||
so.validate = function(section, value) {
|
so.validate = function(section, value) {
|
||||||
|
@ -480,19 +505,21 @@ return view.extend({
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var ipaddrs = {};
|
||||||
|
|
||||||
Object.keys(hosts).forEach(function(mac) {
|
Object.keys(hosts).forEach(function(mac) {
|
||||||
if (hosts[mac].ipv4) {
|
var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
|
||||||
var hint = hosts[mac].name;
|
|
||||||
so.value(hosts[mac].ipv4, hint ? '%s (%s)'.format(hosts[mac].ipv4, hint) : hosts[mac].ipv4);
|
for (var i = 0; i < addrs.length; i++)
|
||||||
}
|
ipaddrs[addrs[i]] = hosts[mac].name;
|
||||||
});
|
});
|
||||||
|
|
||||||
so = ss.option(form.Value, 'gw', _('Gateway'));
|
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
|
||||||
so.datatype = 'or(ip4addr,"ignore")';
|
so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4);
|
||||||
so.rmempty = true;
|
});
|
||||||
|
|
||||||
so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in minutes (mini 2m), hours (eg 1h) or "infinite"'));
|
so = ss.option(form.Value, 'leasetime', _('Lease time'));
|
||||||
so.placeholder = '12h';
|
|
||||||
so.rmempty = true;
|
so.rmempty = true;
|
||||||
|
|
||||||
so = ss.option(form.Value, 'duid', _('<abbr title="The DHCP Unique Identifier">DUID</abbr>'));
|
so = ss.option(form.Value, 'duid', _('<abbr title="The DHCP Unique Identifier">DUID</abbr>'));
|
||||||
|
@ -547,7 +574,7 @@ return view.extend({
|
||||||
exp = '%t'.format(lease.expires);
|
exp = '%t'.format(lease.expires);
|
||||||
|
|
||||||
var hint = lease.macaddr ? hosts[lease.macaddr] : null,
|
var hint = lease.macaddr ? hosts[lease.macaddr] : null,
|
||||||
name = hint ? (hint.name || hint.ipv4 || hint.ipv6) : null,
|
name = hint ? (hint.name || L.toArray(hint.ipaddrs || hint.ipv4)[0] || L.toArray(hint.ip6addrs || hint.ipv6)[0]) : null,
|
||||||
host = null;
|
host = null;
|
||||||
|
|
||||||
if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name)
|
if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name)
|
||||||
|
|
|
@ -31,11 +31,18 @@ return view.extend({
|
||||||
o = s.option(form.Value, 'ip', _('IP address'));
|
o = s.option(form.Value, 'ip', _('IP address'));
|
||||||
o.datatype = 'ipaddr';
|
o.datatype = 'ipaddr';
|
||||||
o.rmempty = true;
|
o.rmempty = true;
|
||||||
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
|
|
||||||
o.value(hosts[mac].ipv4, '%s (%s)'.format(
|
var ipaddrs = {};
|
||||||
hosts[mac].ipv4,
|
|
||||||
hosts[mac].name || mac
|
Object.keys(hosts).forEach(function(mac) {
|
||||||
));
|
var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
|
||||||
|
|
||||||
|
for (var i = 0; i < addrs.length; i++)
|
||||||
|
ipaddrs[addrs[i]] = hosts[mac].name || mac;
|
||||||
|
});
|
||||||
|
|
||||||
|
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
|
||||||
|
o.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
|
||||||
});
|
});
|
||||||
|
|
||||||
return m.render();
|
return m.render();
|
||||||
|
|
|
@ -20,6 +20,7 @@ return view.extend({
|
||||||
s.anonymous = true;
|
s.anonymous = true;
|
||||||
s.addremove = true;
|
s.addremove = true;
|
||||||
s.sortable = true;
|
s.sortable = true;
|
||||||
|
s.nodescriptions = true;
|
||||||
|
|
||||||
s.tab('general', _('General Settings'));
|
s.tab('general', _('General Settings'));
|
||||||
s.tab('advanced', _('Advanced Settings'));
|
s.tab('advanced', _('Advanced Settings'));
|
||||||
|
@ -28,6 +29,10 @@ return view.extend({
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.nocreate = true;
|
o.nocreate = true;
|
||||||
|
|
||||||
|
o = s.taboption('general', form.Flag, 'disabled', _('Disable'), _('Disable this route'));
|
||||||
|
o.rmempty = true;
|
||||||
|
o.default = o.disabled;
|
||||||
|
|
||||||
o = s.taboption('general', form.Value, 'target', _('Target'), (i == 4) ? _('Host-<abbr title="Internet Protocol Address">IP</abbr> or Network') : _('<abbr title="Internet Protocol Version 6">IPv6</abbr>-Address or Network (CIDR)'));
|
o = s.taboption('general', form.Value, 'target', _('Target'), (i == 4) ? _('Host-<abbr title="Internet Protocol Address">IP</abbr> or Network') : _('<abbr title="Internet Protocol Version 6">IPv6</abbr>-Address or Network (CIDR)'));
|
||||||
o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
|
o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
|
@ -199,7 +199,9 @@ function format_wifirate(rate) {
|
||||||
var s = '%.1f\xa0%s, %d\xa0%s'.format(rate.rate / 1000, _('Mbit/s'), rate.mhz, _('MHz')),
|
var s = '%.1f\xa0%s, %d\xa0%s'.format(rate.rate / 1000, _('Mbit/s'), rate.mhz, _('MHz')),
|
||||||
ht = rate.ht, vht = rate.vht,
|
ht = rate.ht, vht = rate.vht,
|
||||||
mhz = rate.mhz, nss = rate.nss,
|
mhz = rate.mhz, nss = rate.nss,
|
||||||
mcs = rate.mcs, sgi = rate.short_gi;
|
mcs = rate.mcs, sgi = rate.short_gi,
|
||||||
|
he = rate.he, he_gi = rate.he_gi,
|
||||||
|
he_dcm = rate.he_dcm;
|
||||||
|
|
||||||
if (ht || vht) {
|
if (ht || vht) {
|
||||||
if (vht) s += ', VHT-MCS\xa0%d'.format(mcs);
|
if (vht) s += ', VHT-MCS\xa0%d'.format(mcs);
|
||||||
|
@ -208,6 +210,13 @@ function format_wifirate(rate) {
|
||||||
if (sgi) s += ', ' + _('Short GI').replace(/ /g, '\xa0');
|
if (sgi) s += ', ' + _('Short GI').replace(/ /g, '\xa0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (he) {
|
||||||
|
s += ', HE-MCS\xa0%d'.format(mcs);
|
||||||
|
if (nss) s += ', HE-NSS\xa0%d'.format(nss);
|
||||||
|
if (he_gi) s += ', HE-GI\xa0%d'.format(he_gi);
|
||||||
|
if (he_dcm) s += ', HE-DCM\xa0%d'.format(he_dcm);
|
||||||
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,16 +312,32 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
this.callFrequencyList(section_id)
|
this.callFrequencyList(section_id)
|
||||||
]).then(L.bind(function(data) {
|
]).then(L.bind(function(data) {
|
||||||
this.channels = {
|
this.channels = {
|
||||||
'11g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [],
|
'2g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [],
|
||||||
'11a': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : []
|
'5g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [],
|
||||||
|
'6g': [],
|
||||||
|
'60g': []
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i < data[1].length; i++)
|
for (var i = 0; i < data[1].length; i++) {
|
||||||
this.channels[(data[1][i].mhz > 2484) ? '11a' : '11g'].push(
|
var band;
|
||||||
|
|
||||||
|
if (data[1][i].mhz >= 2412 && data[1][i].mhz <= 2484)
|
||||||
|
band = '2g';
|
||||||
|
else if (data[1][i].mhz >= 5160 && data[1][i].mhz <= 5885)
|
||||||
|
band = '5g';
|
||||||
|
else if (data[1][i].mhz >= 5925 && data[1][i].mhz <= 7125)
|
||||||
|
band = '6g';
|
||||||
|
else if (data[1][i].mhz >= 58329 && data[1][i].mhz <= 69120)
|
||||||
|
band = '60g';
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
this.channels[band].push(
|
||||||
data[1][i].channel,
|
data[1][i].channel,
|
||||||
'%d (%d Mhz)'.format(data[1][i].channel, data[1][i].mhz),
|
'%d (%d Mhz)'.format(data[1][i].channel, data[1][i].mhz),
|
||||||
!data[1][i].restricted
|
!data[1][i].restricted
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
var hwmodelist = L.toArray(data[0] ? data[0].getHWModes() : null)
|
var hwmodelist = L.toArray(data[0] ? data[0].getHWModes() : null)
|
||||||
.reduce(function(o, v) { o[v] = true; return o }, {});
|
.reduce(function(o, v) { o[v] = true; return o }, {});
|
||||||
|
@ -320,7 +345,8 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
this.modes = [
|
this.modes = [
|
||||||
'', 'Legacy', true,
|
'', 'Legacy', true,
|
||||||
'n', 'N', hwmodelist.n,
|
'n', 'N', hwmodelist.n,
|
||||||
'ac', 'AC', hwmodelist.ac
|
'ac', 'AC', hwmodelist.ac,
|
||||||
|
'ax', 'AX', hwmodelist.ax
|
||||||
];
|
];
|
||||||
|
|
||||||
var htmodelist = L.toArray(data[0] ? data[0].getHTModes() : null)
|
var htmodelist = L.toArray(data[0] ? data[0].getHTModes() : null)
|
||||||
|
@ -337,20 +363,30 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
'VHT40', '40 MHz', htmodelist.VHT40,
|
'VHT40', '40 MHz', htmodelist.VHT40,
|
||||||
'VHT80', '80 MHz', htmodelist.VHT80,
|
'VHT80', '80 MHz', htmodelist.VHT80,
|
||||||
'VHT160', '160 MHz', htmodelist.VHT160
|
'VHT160', '160 MHz', htmodelist.VHT160
|
||||||
|
],
|
||||||
|
'ax': [
|
||||||
|
'HE20', '20 MHz', htmodelist.HE20,
|
||||||
|
'HE40', '40 MHz', htmodelist.HE40,
|
||||||
|
'HE80', '80 MHz', htmodelist.HE80,
|
||||||
|
'HE160', '160 MHz', htmodelist.HE160
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
this.bands = {
|
this.bands = {
|
||||||
'': [
|
'': [
|
||||||
'11g', '2.4 GHz', this.channels['11g'].length > 3,
|
'2g', '2.4 GHz', this.channels['2g'].length > 3,
|
||||||
'11a', '5 GHz', this.channels['11a'].length > 3
|
'5g', '5 GHz', this.channels['5g'].length > 3
|
||||||
],
|
],
|
||||||
'n': [
|
'n': [
|
||||||
'11g', '2.4 GHz', this.channels['11g'].length > 3,
|
'2g', '2.4 GHz', this.channels['2g'].length > 3,
|
||||||
'11a', '5 GHz', this.channels['11a'].length > 3
|
'5g', '5 GHz', this.channels['5g'].length > 3
|
||||||
],
|
],
|
||||||
'ac': [
|
'ac': [
|
||||||
'11a', '5 GHz', true
|
'5g', '5 GHz', true
|
||||||
|
],
|
||||||
|
'ax': [
|
||||||
|
'2g', '2.4 GHz', this.channels['2g'].length > 3,
|
||||||
|
'5g', '5 GHz', this.channels['5g'].length > 3
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
}, this));
|
}, this));
|
||||||
|
@ -392,6 +428,8 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
|
|
||||||
this.setValues(band, this.bands[mode.value]);
|
this.setValues(band, this.bands[mode.value]);
|
||||||
this.toggleWifiChannel(elem);
|
this.toggleWifiChannel(elem);
|
||||||
|
|
||||||
|
this.map.checkDepends();
|
||||||
},
|
},
|
||||||
|
|
||||||
toggleWifiChannel: function(elem) {
|
toggleWifiChannel: function(elem) {
|
||||||
|
@ -408,11 +446,14 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
bwdt = elem.querySelector('.htmode'),
|
bwdt = elem.querySelector('.htmode'),
|
||||||
htval = uci.get('wireless', section_id, 'htmode'),
|
htval = uci.get('wireless', section_id, 'htmode'),
|
||||||
hwval = uci.get('wireless', section_id, 'hwmode'),
|
hwval = uci.get('wireless', section_id, 'hwmode'),
|
||||||
chval = uci.get('wireless', section_id, 'channel');
|
chval = uci.get('wireless', section_id, 'channel'),
|
||||||
|
bandval = uci.get('wireless', section_id, 'band');
|
||||||
|
|
||||||
this.setValues(mode, this.modes);
|
this.setValues(mode, this.modes);
|
||||||
|
|
||||||
if (/VHT20|VHT40|VHT80|VHT160/.test(htval))
|
if (/HE20|HE40|HE80|HE160/.test(htval))
|
||||||
|
mode.value = 'ax';
|
||||||
|
else if (/VHT20|VHT40|VHT80|VHT160/.test(htval))
|
||||||
mode.value = 'ac';
|
mode.value = 'ac';
|
||||||
else if (/HT20|HT40/.test(htval))
|
else if (/HT20|HT40/.test(htval))
|
||||||
mode.value = 'n';
|
mode.value = 'n';
|
||||||
|
@ -421,15 +462,24 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
|
|
||||||
this.toggleWifiMode(elem);
|
this.toggleWifiMode(elem);
|
||||||
|
|
||||||
if (/a/.test(hwval))
|
if (hwval != null) {
|
||||||
band.value = '11a';
|
this.useBandOption = false;
|
||||||
else
|
|
||||||
band.value = '11g';
|
if (/a/.test(hwval))
|
||||||
|
band.value = '5g';
|
||||||
|
else
|
||||||
|
band.value = '2g';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.useBandOption = true;
|
||||||
|
|
||||||
|
band.value = bandval;
|
||||||
|
}
|
||||||
|
|
||||||
this.toggleWifiBand(elem);
|
this.toggleWifiBand(elem);
|
||||||
|
|
||||||
bwdt.value = htval;
|
bwdt.value = htval;
|
||||||
chan.value = chval;
|
chan.value = chval || chan.options[0].value;
|
||||||
|
|
||||||
return elem;
|
return elem;
|
||||||
},
|
},
|
||||||
|
@ -461,6 +511,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
E('select', {
|
E('select', {
|
||||||
'class': 'channel',
|
'class': 'channel',
|
||||||
'style': 'width:auto',
|
'style': 'width:auto',
|
||||||
|
'change': L.bind(this.map.checkDepends, this.map),
|
||||||
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
|
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
|
||||||
})
|
})
|
||||||
]),
|
]),
|
||||||
|
@ -469,6 +520,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
E('select', {
|
E('select', {
|
||||||
'class': 'htmode',
|
'class': 'htmode',
|
||||||
'style': 'width:auto',
|
'style': 'width:auto',
|
||||||
|
'change': L.bind(this.map.checkDepends, this.map),
|
||||||
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
|
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
|
||||||
})
|
})
|
||||||
]),
|
]),
|
||||||
|
@ -481,7 +533,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
cfgvalue: function(section_id) {
|
cfgvalue: function(section_id) {
|
||||||
return [
|
return [
|
||||||
uci.get('wireless', section_id, 'htmode'),
|
uci.get('wireless', section_id, 'htmode'),
|
||||||
uci.get('wireless', section_id, 'hwmode'),
|
uci.get('wireless', section_id, 'hwmode') || uci.get('wireless', section_id, 'band'),
|
||||||
uci.get('wireless', section_id, 'channel')
|
uci.get('wireless', section_id, 'channel')
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
@ -498,7 +550,12 @@ var CBIWifiFrequencyValue = form.Value.extend({
|
||||||
|
|
||||||
write: function(section_id, value) {
|
write: function(section_id, value) {
|
||||||
uci.set('wireless', section_id, 'htmode', value[0] || null);
|
uci.set('wireless', section_id, 'htmode', value[0] || null);
|
||||||
uci.set('wireless', section_id, 'hwmode', value[1]);
|
|
||||||
|
if (this.useBandOption)
|
||||||
|
uci.set('wireless', section_id, 'band', value[1]);
|
||||||
|
else
|
||||||
|
uci.set('wireless', section_id, 'hwmode', (value[1] == '2g') ? '11g' : '11a');
|
||||||
|
|
||||||
uci.set('wireless', section_id, 'channel', value[2]);
|
uci.set('wireless', section_id, 'channel', value[2]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -883,6 +940,9 @@ return view.extend({
|
||||||
o.ucisection = s.section;
|
o.ucisection = s.section;
|
||||||
|
|
||||||
if (hwtype == 'mac80211') {
|
if (hwtype == 'mac80211') {
|
||||||
|
o = ss.taboption('general', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates'), _('Legacy or badly behaving devices may require legacy 802.11b rates to interoperate. Airtime efficiency may be significantly reduced where these are used. It is recommended to not allow 802.11b rates where possible.'));
|
||||||
|
o.depends({'_freq': '11g', '!contains': true});
|
||||||
|
|
||||||
o = ss.taboption('general', CBIWifiTxPowerValue, 'txpower', _('Maximum transmit power'), _('Specifies the maximum transmit power the wireless radio may use. Depending on regulatory requirements and wireless usage, the actual transmit power may be reduced by the driver.'));
|
o = ss.taboption('general', CBIWifiTxPowerValue, 'txpower', _('Maximum transmit power'), _('Specifies the maximum transmit power the wireless radio may use. Depending on regulatory requirements and wireless usage, the actual transmit power may be reduced by the driver.'));
|
||||||
o.wifiNetwork = radioNet;
|
o.wifiNetwork = radioNet;
|
||||||
|
|
||||||
|
@ -895,9 +955,6 @@ return view.extend({
|
||||||
o.value('2', _('High'));
|
o.value('2', _('High'));
|
||||||
o.value('3', _('Very High'));
|
o.value('3', _('Very High'));
|
||||||
|
|
||||||
o = ss.taboption('advanced', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates'));
|
|
||||||
o.default = o.enabled;
|
|
||||||
|
|
||||||
o = ss.taboption('advanced', form.Value, 'distance', _('Distance Optimization'), _('Distance to farthest network member in meters.'));
|
o = ss.taboption('advanced', form.Value, 'distance', _('Distance Optimization'), _('Distance to farthest network member in meters.'));
|
||||||
o.datatype = 'or(range(0,114750),"auto")';
|
o.datatype = 'or(range(0,114750),"auto")';
|
||||||
o.placeholder = 'auto';
|
o.placeholder = 'auto';
|
||||||
|
@ -983,8 +1040,17 @@ return view.extend({
|
||||||
return net || network.addNetwork(name, { proto: 'none' });
|
return net || network.addNetwork(name, { proto: 'none' });
|
||||||
}, this, values[i])).then(L.bind(function(dev, net) {
|
}, this, values[i])).then(L.bind(function(dev, net) {
|
||||||
if (net) {
|
if (net) {
|
||||||
if (!net.isEmpty())
|
if (!net.isEmpty()) {
|
||||||
net.set('type', 'bridge');
|
var target_dev = net.getDevice();
|
||||||
|
|
||||||
|
/* Resolve parent interface of vlan */
|
||||||
|
while (target_dev && target_dev.getType() == 'vlan')
|
||||||
|
target_dev = target_dev.getParent();
|
||||||
|
|
||||||
|
if (!target_dev || target_dev.getType() != 'bridge')
|
||||||
|
net.set('type', 'bridge');
|
||||||
|
}
|
||||||
|
|
||||||
net.addDevice(dev);
|
net.addDevice(dev);
|
||||||
}
|
}
|
||||||
}, this, dev)));
|
}, this, dev)));
|
||||||
|
@ -1014,7 +1080,7 @@ return view.extend({
|
||||||
bssid.depends('mode', 'sta');
|
bssid.depends('mode', 'sta');
|
||||||
bssid.depends('mode', 'sta-wds');
|
bssid.depends('mode', 'sta-wds');
|
||||||
|
|
||||||
o = ss.taboption('macfilter', form.ListValue, 'macfilter', _('MAC-Address Filter'));
|
o = ss.taboption('macfilter', form.ListValue, 'macfilter', _('MAC Address Filter'));
|
||||||
o.depends('mode', 'ap');
|
o.depends('mode', 'ap');
|
||||||
o.depends('mode', 'ap-wds');
|
o.depends('mode', 'ap-wds');
|
||||||
o.value('', _('disable'));
|
o.value('', _('disable'));
|
||||||
|
@ -1069,11 +1135,11 @@ return view.extend({
|
||||||
return mode;
|
return mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
o = ss.taboption('general', form.Flag, 'hidden', _('Hide <abbr title="Extended Service Set Identifier">ESSID</abbr>'));
|
o = ss.taboption('general', form.Flag, 'hidden', _('Hide <abbr title="Extended Service Set Identifier">ESSID</abbr>'), _('Where the ESSID is hidden, clients may fail to roam and airtime efficiency may be significantly reduced.'));
|
||||||
o.depends('mode', 'ap');
|
o.depends('mode', 'ap');
|
||||||
o.depends('mode', 'ap-wds');
|
o.depends('mode', 'ap-wds');
|
||||||
|
|
||||||
o = ss.taboption('general', form.Flag, 'wmm', _('WMM Mode'));
|
o = ss.taboption('general', form.Flag, 'wmm', _('WMM Mode'), _('Where Wi-Fi Multimedia (WMM) Mode QoS is disabled, clients may be limited to 802.11a/802.11g rates.'));
|
||||||
o.depends('mode', 'ap');
|
o.depends('mode', 'ap');
|
||||||
o.depends('mode', 'ap-wds');
|
o.depends('mode', 'ap-wds');
|
||||||
o.default = o.enabled;
|
o.default = o.enabled;
|
||||||
|
@ -1609,34 +1675,32 @@ return view.extend({
|
||||||
|
|
||||||
if (hwtype == 'mac80211') {
|
if (hwtype == 'mac80211') {
|
||||||
// ieee802.11w options
|
// ieee802.11w options
|
||||||
if (L.hasSystemFeature('hostapd', '11w')) {
|
o = ss.taboption('encryption', form.ListValue, 'ieee80211w', _('802.11w Management Frame Protection'), _("Note: Some wireless drivers do not fully support 802.11w. E.g. mwlwifi may have problems"));
|
||||||
o = ss.taboption('encryption', form.ListValue, 'ieee80211w', _('802.11w Management Frame Protection'), _("Requires the 'full' version of wpad/hostapd and support from the wifi driver <br />(as of Jan 2019: ath9k, ath10k, mwlwifi and mt76)"));
|
o.value('', _('Disabled'));
|
||||||
o.value('', _('Disabled'));
|
o.value('1', _('Optional'));
|
||||||
o.value('1', _('Optional'));
|
o.value('2', _('Required'));
|
||||||
o.value('2', _('Required'));
|
add_dependency_permutations(o, { mode: ['ap', 'ap-wds', 'sta', 'sta-wds'], encryption: ['owe', 'psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] });
|
||||||
add_dependency_permutations(o, { mode: ['ap', 'ap-wds', 'sta', 'sta-wds'], encryption: ['owe', 'psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] });
|
|
||||||
|
|
||||||
o.defaults = {
|
o.defaults = {
|
||||||
'2': [{ encryption: 'sae' }, { encryption: 'owe' }, { encryption: 'wpa3' }, { encryption: 'wpa3-mixed' }],
|
'2': [{ encryption: 'sae' }, { encryption: 'owe' }, { encryption: 'wpa3' }, { encryption: 'wpa3-mixed' }],
|
||||||
'1': [{ encryption: 'sae-mixed'}],
|
'1': [{ encryption: 'sae-mixed'}],
|
||||||
'': []
|
'': []
|
||||||
};
|
|
||||||
|
|
||||||
o = ss.taboption('encryption', form.Value, 'ieee80211w_max_timeout', _('802.11w maximum timeout'), _('802.11w Association SA Query maximum timeout'));
|
|
||||||
o.depends('ieee80211w', '1');
|
|
||||||
o.depends('ieee80211w', '2');
|
|
||||||
o.datatype = 'uinteger';
|
|
||||||
o.placeholder = '1000';
|
|
||||||
o.rmempty = true;
|
|
||||||
|
|
||||||
o = ss.taboption('encryption', form.Value, 'ieee80211w_retry_timeout', _('802.11w retry timeout'), _('802.11w Association SA Query retry timeout'));
|
|
||||||
o.depends('ieee80211w', '1');
|
|
||||||
o.depends('ieee80211w', '2');
|
|
||||||
o.datatype = 'uinteger';
|
|
||||||
o.placeholder = '201';
|
|
||||||
o.rmempty = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
o = ss.taboption('encryption', form.Value, 'ieee80211w_max_timeout', _('802.11w maximum timeout'), _('802.11w Association SA Query maximum timeout'));
|
||||||
|
o.depends('ieee80211w', '1');
|
||||||
|
o.depends('ieee80211w', '2');
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.placeholder = '1000';
|
||||||
|
o.rmempty = true;
|
||||||
|
|
||||||
|
o = ss.taboption('encryption', form.Value, 'ieee80211w_retry_timeout', _('802.11w retry timeout'), _('802.11w Association SA Query retry timeout'));
|
||||||
|
o.depends('ieee80211w', '1');
|
||||||
|
o.depends('ieee80211w', '2');
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.placeholder = '201';
|
||||||
|
o.rmempty = true;
|
||||||
|
|
||||||
o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.'));
|
o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.'));
|
||||||
add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] });
|
add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] });
|
||||||
|
|
||||||
|
@ -2082,7 +2146,7 @@ return view.extend({
|
||||||
var table = E('table', { 'class': 'table assoclist', 'id': 'wifi_assoclist_table' }, [
|
var table = E('table', { 'class': 'table assoclist', 'id': 'wifi_assoclist_table' }, [
|
||||||
E('tr', { 'class': 'tr table-titles' }, [
|
E('tr', { 'class': 'tr table-titles' }, [
|
||||||
E('th', { 'class': 'th nowrap' }, _('Network')),
|
E('th', { 'class': 'th nowrap' }, _('Network')),
|
||||||
E('th', { 'class': 'th hide-xs' }, _('MAC-Address')),
|
E('th', { 'class': 'th hide-xs' }, _('MAC address')),
|
||||||
E('th', { 'class': 'th' }, _('Host')),
|
E('th', { 'class': 'th' }, _('Host')),
|
||||||
E('th', { 'class': 'th' }, _('Signal / Noise')),
|
E('th', { 'class': 'th' }, _('Signal / Noise')),
|
||||||
E('th', { 'class': 'th' }, _('RX Rate / TX Rate'))
|
E('th', { 'class': 'th' }, _('RX Rate / TX Rate'))
|
||||||
|
|
|
@ -4,7 +4,11 @@
|
||||||
"read": {
|
"read": {
|
||||||
"cgi-io": [ "exec" ],
|
"cgi-io": [ "exec" ],
|
||||||
"file": {
|
"file": {
|
||||||
"/usr/libexec/luci-peeraddr": [ "exec" ]
|
"/etc/iproute2/rt_tables": [ "read" ],
|
||||||
|
"/proc/sys/net/ipv6/conf/*/mtu": [ "read" ],
|
||||||
|
"/proc/sys/net/ipv6/conf/*/hop_limit": [ "read" ],
|
||||||
|
"/usr/libexec/luci-peeraddr": [ "exec" ],
|
||||||
|
"/usr/lib/opkg/info/netifd.control": [ "read" ]
|
||||||
},
|
},
|
||||||
"ubus": {
|
"ubus": {
|
||||||
"file": [ "exec" ],
|
"file": [ "exec" ],
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
LUCI_TITLE:=Support for ModemManager
|
|
||||||
LUCI_DEPENDS:=+modemmanager
|
|
||||||
PKG_VERSION:=omr-202103
|
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
|
||||||
|
|
||||||
# call BuildPackage - OpenWrt buildroot signature
|
|
|
@ -1,121 +0,0 @@
|
||||||
'use strict';
|
|
||||||
'require fs';
|
|
||||||
'require form';
|
|
||||||
'require network';
|
|
||||||
|
|
||||||
function getModemList() {
|
|
||||||
return fs.exec_direct('/usr/bin/mmcli', [ '-L' ]).then(function(res) {
|
|
||||||
var lines = (res || '').split(/\n/),
|
|
||||||
tasks = [];
|
|
||||||
|
|
||||||
for (var i = 0; i < lines.length; i++) {
|
|
||||||
var m = lines[i].match(/\/Modem\/(\d+)/);
|
|
||||||
if (m)
|
|
||||||
tasks.push(fs.exec_direct('/usr/bin/mmcli', [ '-m', m[1] ]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.all(tasks).then(function(res) {
|
|
||||||
var modems = [];
|
|
||||||
|
|
||||||
for (var i = 0; i < res.length; i++) {
|
|
||||||
var man = res[i].match(/manufacturer: ([^\n]+)/),
|
|
||||||
mod = res[i].match(/model: ([^\n]+)/),
|
|
||||||
dev = res[i].match(/device: ([^\n]+)/);
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
modems.push({
|
|
||||||
device: dev[1].trim(),
|
|
||||||
manufacturer: (man ? man[1].trim() : '') || '?',
|
|
||||||
model: (mod ? mod[1].trim() : '') || dev[1].trim()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return modems;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
network.registerPatternVirtual(/^mobiledata-.+$/);
|
|
||||||
network.registerErrorCode('CALL_FAILED', _('Call failed'));
|
|
||||||
network.registerErrorCode('NO_CID', _('Unable to obtain client ID'));
|
|
||||||
network.registerErrorCode('PLMN_FAILED', _('Setting PLMN failed'));
|
|
||||||
|
|
||||||
return network.registerProtocol('modemmanager', {
|
|
||||||
getI18n: function() {
|
|
||||||
return _('ModemManager');
|
|
||||||
},
|
|
||||||
|
|
||||||
getIfname: function() {
|
|
||||||
return this._ubus('l3_device') || 'modemmanager-%s'.format(this.sid);
|
|
||||||
},
|
|
||||||
|
|
||||||
getOpkgPackage: function() {
|
|
||||||
return 'modemmanager';
|
|
||||||
},
|
|
||||||
|
|
||||||
isFloating: function() {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
isVirtual: function() {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
getDevices: function() {
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
|
|
||||||
containsDevice: function(ifname) {
|
|
||||||
return (network.getIfnameOf(ifname) == this.getIfname());
|
|
||||||
},
|
|
||||||
|
|
||||||
renderFormOptions: function(s) {
|
|
||||||
var dev = this.getL3Device() || this.getDevice(), o;
|
|
||||||
|
|
||||||
o = s.taboption('general', form.ListValue, 'device', _('Modem device'));
|
|
||||||
o.rmempty = false;
|
|
||||||
o.load = function(section_id) {
|
|
||||||
return getModemList().then(L.bind(function(devices) {
|
|
||||||
for (var i = 0; i < devices.length; i++)
|
|
||||||
this.value(devices[i].device,
|
|
||||||
'%s - %s (%s)'.format(devices[i].manufacturer, devices[i].model, devices[i].device));
|
|
||||||
return form.Value.prototype.load.apply(this, [section_id]);
|
|
||||||
}, this));
|
|
||||||
};
|
|
||||||
|
|
||||||
s.taboption('general', form.Value, 'apn', _('APN'));
|
|
||||||
s.taboption('general', form.Value, 'pincode', _('PIN'));
|
|
||||||
|
|
||||||
o = s.taboption('general', form.ListValue, 'auth', _('Authentication Type'));
|
|
||||||
o.value('both', _('PAP/CHAP (both)'));
|
|
||||||
o.value('pap', 'PAP');
|
|
||||||
o.value('chap', 'CHAP');
|
|
||||||
o.value('none', _('None'));
|
|
||||||
o.default = 'none';
|
|
||||||
|
|
||||||
o = s.taboption('general', form.Value, 'username', _('PAP/CHAP username'));
|
|
||||||
o.depends('auth', 'pap');
|
|
||||||
o.depends('auth', 'chap');
|
|
||||||
o.depends('auth', 'both');
|
|
||||||
|
|
||||||
o = s.taboption('general', form.Value, 'password', _('PAP/CHAP password'));
|
|
||||||
o.depends('auth', 'pap');
|
|
||||||
o.depends('auth', 'chap');
|
|
||||||
o.depends('auth', 'both');
|
|
||||||
o.password = true;
|
|
||||||
|
|
||||||
o = s.taboption('general', form.ListValue, 'iptype', _('IP Type'));
|
|
||||||
o.value('ipv4v6', _('IPv4/IPv6 (both - defaults to IPv4)'))
|
|
||||||
o.value('ipv4', _('IPv4 only'));
|
|
||||||
o.value('ipv6', _('IPv6 only'));
|
|
||||||
o.default = 'ipv4v6';
|
|
||||||
|
|
||||||
o = s.taboption('advanced', form.Value, 'mtu', _('Override MTU'));
|
|
||||||
o.placeholder = dev ? (dev.getMTU() || '1500') : '1500';
|
|
||||||
o.datatype = 'max(9200)';
|
|
||||||
|
|
||||||
s.taboption('general', form.Value, 'metric', _('Gateway metric'));
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"luci-proto-modemmanager": {
|
|
||||||
"description": "Grant access to mmcli",
|
|
||||||
"read": {
|
|
||||||
"cgi-io": [ "exec" ],
|
|
||||||
"file": {
|
|
||||||
"/usr/bin/mmcli -L": [ "exec" ],
|
|
||||||
"/usr/bin/mmcli -m [0-9]": [ "exec" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
0
luci-theme-openmptcprouter/Makefile
Normal file → Executable file
0
luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js
Normal file → Executable file
0
luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css
Normal file → Executable file
0
luci-theme-openmptcprouter/htdocs/luci-static/resources/menu-openmptcprouter.js
Normal file → Executable file
0
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2
Normal file → Executable file
0
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css
Normal file → Executable file
0
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png
Normal file → Executable file
Before Width: | Height: | Size: 535 B After Width: | Height: | Size: 535 B |
0
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png
Normal file → Executable file
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
0
luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg
Normal file → Executable file
Before Width: | Height: | Size: 582 B After Width: | Height: | Size: 582 B |
0
luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js
Normal file → Executable file
0
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm
Normal file → Executable file
0
luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm
Normal file → Executable file
|
@ -13,6 +13,7 @@ _save_macaddr() {
|
||||||
local _macaddr
|
local _macaddr
|
||||||
uci -q get "network.$1_dev.ifname" >/dev/null && {
|
uci -q get "network.$1_dev.ifname" >/dev/null && {
|
||||||
_ifname=$(uci -q get "network.$1.ifname")
|
_ifname=$(uci -q get "network.$1.ifname")
|
||||||
|
[ -z "$_ifname" ] && _ifname=$(uci -q get "network.$1.device")
|
||||||
if [ -n "$(uci -q get network.$1.macaddr)" ] && [ "$(uci -q get network.$1.macaddr)" != "$(uci -q get network.$1_dev.macaddr)" ]; then
|
if [ -n "$(uci -q get network.$1.macaddr)" ] && [ "$(uci -q get network.$1.macaddr)" != "$(uci -q get network.$1_dev.macaddr)" ]; then
|
||||||
uci -q set network.$1_dev.macaddr="$(uci -q get network.$1.macaddr)"
|
uci -q set network.$1_dev.macaddr="$(uci -q get network.$1.macaddr)"
|
||||||
else
|
else
|
||||||
|
@ -25,7 +26,8 @@ _save_macaddr() {
|
||||||
}
|
}
|
||||||
[ -z "$(uci -q get network.$1.macaddr)" ] && {
|
[ -z "$(uci -q get network.$1.macaddr)" ] && {
|
||||||
_ifname=$(uci -q get "network.$1.ifname")
|
_ifname=$(uci -q get "network.$1.ifname")
|
||||||
[ -n "$_ifname" ] && {
|
[ -z "$_ifname" ] && _ifname=$(uci -q get "network.$1.device")
|
||||||
|
[ -n "$_ifname" ] && [ -z "$(echo $_ifname | grep '\.')" ] && {
|
||||||
_macaddr=$(ip link show dev $_ifname 2>/dev/null | grep link | awk '{print $2}')
|
_macaddr=$(ip link show dev $_ifname 2>/dev/null | grep link | awk '{print $2}')
|
||||||
[ -n "$_macaddr" ] && {
|
[ -n "$_macaddr" ] && {
|
||||||
uci -q set network.$1.macaddr=$_macaddr
|
uci -q set network.$1.macaddr=$_macaddr
|
||||||
|
@ -42,8 +44,6 @@ _delete_device() {
|
||||||
uci -q batch <<-EOF
|
uci -q batch <<-EOF
|
||||||
delete network.$1
|
delete network.$1
|
||||||
commit network
|
commit network
|
||||||
delete macvlan.$1
|
|
||||||
commit macvlan
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -67,7 +67,7 @@ _setup_interface() {
|
||||||
[ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname)
|
[ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname)
|
||||||
[ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf)
|
[ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf)
|
||||||
[ -n "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr)
|
[ -n "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr)
|
||||||
uci set network.$1.ifname=$1
|
uci set network.$1.device=$1
|
||||||
uci -q commit network
|
uci -q commit network
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -75,9 +75,11 @@ _setup_interface() {
|
||||||
uci -q batch <<-EOF
|
uci -q batch <<-EOF
|
||||||
set network.$1_dev=device
|
set network.$1_dev=device
|
||||||
set network.$1_dev.name=$1
|
set network.$1_dev.name=$1
|
||||||
set network.$1_dev.type=macvlan
|
set network.$1_dev.type='macvlan'
|
||||||
set network.$1_dev.ifname=$_ifname
|
set network.$1_dev.ifname=$_ifname
|
||||||
set network.$1.ifname=$1
|
set network.$1_dev.mode='private'
|
||||||
|
set network.$1_dev.multicast=0
|
||||||
|
set network.$1.device=$1
|
||||||
set network.$1.masterintf=$_ifname
|
set network.$1.masterintf=$_ifname
|
||||||
set network.$1.type=macvlan
|
set network.$1.type=macvlan
|
||||||
set network.$1.defaultroute=0
|
set network.$1.defaultroute=0
|
||||||
|
@ -86,7 +88,7 @@ _setup_interface() {
|
||||||
|
|
||||||
#_macaddr=$(uci -q get "network.$1.macaddr")
|
#_macaddr=$(uci -q get "network.$1.macaddr")
|
||||||
#_setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}"
|
#_setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}"
|
||||||
_setup_macaddr "$1" "auto$(date +%s)"
|
_setup_macaddr "$1" "$(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/')"
|
||||||
uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu)
|
uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu)
|
||||||
uci -q commit network
|
uci -q commit network
|
||||||
}
|
}
|
||||||
|
|
59
mc/Config.in
|
@ -1,59 +0,0 @@
|
||||||
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
|
|
128
mc/Makefile
|
@ -1,128 +0,0 @@
|
||||||
#
|
|
||||||
# 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 <dev@brenken.org>
|
|
||||||
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))
|
|
|
@ -1,11 +0,0 @@
|
||||||
-- 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]);
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- 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 "[<";
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
--- 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@
|
|
|
@ -8,13 +8,13 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mlvpn
|
PKG_NAME:=mlvpn
|
||||||
PKG_VERSION:=2263bab
|
PKG_VERSION:=8aa1b16
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git
|
PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git
|
||||||
PKG_SOURCE_VERSION:=2263bab7e5f983e1daa33887b53120c12646398f
|
PKG_SOURCE_VERSION:=ddafba3c0bd63e0d733d3d5a4532e275714991b3
|
||||||
PKG_SOURCE_DATE:=2020-12-16
|
PKG_SOURCE_DATE:=2021-10-28
|
||||||
#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git
|
#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git
|
||||||
#PKG_SOURCE_VERSION:=8f9720978b28c1954f9f229525333547283316d2
|
#PKG_SOURCE_VERSION:=8f9720978b28c1954f9f229525333547283316d2
|
||||||
#PKG_SOURCE_DATE:=2018-09-03
|
#PKG_SOURCE_DATE:=2018-09-03
|
||||||
|
|
|
@ -8,3 +8,5 @@ config mlvpn 'general'
|
||||||
option host '128.128.128.128'
|
option host '128.128.128.128'
|
||||||
option firstport '65201'
|
option firstport '65201'
|
||||||
option interface_name 'mlvpn0'
|
option interface_name 'mlvpn0'
|
||||||
|
option loss_tolerance '50'
|
||||||
|
option latency_tolerance '300'
|
||||||
|
|
|
@ -13,7 +13,8 @@ interface_multipath_settings() {
|
||||||
mode="$(uci -q get openmptcprouter.$config.multipath)"
|
mode="$(uci -q get openmptcprouter.$config.multipath)"
|
||||||
}
|
}
|
||||||
[ "$mode" = "off" ] || [ "$mode" = "" ] && return 1
|
[ "$mode" = "off" ] || [ "$mode" = "" ] && return 1
|
||||||
config_get ifname "$config" ifname
|
config_get ifname "$config" device
|
||||||
|
[ -z "$ifname" ] && config_get ifname "$config" ifname
|
||||||
[ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]')
|
[ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]')
|
||||||
[ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
[ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
|
||||||
[ -z "$ifname" ] && return 1
|
[ -z "$ifname" ] && return 1
|
||||||
|
@ -32,21 +33,22 @@ interface_multipath_settings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
local enable timeout mode password reorder_buffer_size interface_name host firstport loss_tolerence
|
local enable timeout mode password reorder_buffer_size interface_name host firstport loss_tolerance latency_tolerance
|
||||||
[ "$(uci -q get mlvpn.general.enable)" = "1" ] || return 1
|
[ "$(uci -q get mlvpn.general.enable)" = "1" ] || return 1
|
||||||
interface_name="$(uci -q get mlvpn.general.interface_name)"
|
interface_name="$(uci -q get mlvpn.general.interface_name)"
|
||||||
timeout="$(uci -q get mlvpn.general.timeout)"
|
timeout="$(uci -q get mlvpn.general.timeout)"
|
||||||
mode="$(uci -q get mlvpn.general.mode)"
|
mode="$(uci -q get mlvpn.general.mode)"
|
||||||
password="$(uci -q get mlvpn.general.password)"
|
password="$(uci -q get mlvpn.general.password)"
|
||||||
reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)"
|
reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)"
|
||||||
loss_tolerence="$(uci -q get mlvpn.general.loss_tolerence)"
|
loss_tolerance="$(uci -q get mlvpn.general.loss_tolerance)"
|
||||||
|
latency_tolerance="$(uci -q get mlvpn.general.latency_tolerance)"
|
||||||
cleartext_data="$(uci -q get mlvpn.general.cleartext_data)"
|
cleartext_data="$(uci -q get mlvpn.general.cleartext_data)"
|
||||||
[ -z "$cleartext_data" ] && cleartext_data="0"
|
[ -z "$cleartext_data" ] && cleartext_data="0"
|
||||||
host="$(uci -q get mlvpn.general.host)"
|
host="$(uci -q get mlvpn.general.host)"
|
||||||
firstport="$(uci -q get mlvpn.general.firstport)"
|
firstport="$(uci -q get mlvpn.general.firstport)"
|
||||||
|
|
||||||
if [ "$(uci -q get network.omrvpn)" != "${interface_name}" ]; then
|
if [ "$(uci -q get network.omrvpn)" != "${interface_name}" ]; then
|
||||||
uci -q set network.omrvpn.ifname=${interface_name}
|
uci -q set network.omrvpn.device=${interface_name}
|
||||||
uci -q commit
|
uci -q commit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -58,7 +60,8 @@ start() {
|
||||||
timeout = ${timeout}
|
timeout = ${timeout}
|
||||||
reorder_buffer = yes
|
reorder_buffer = yes
|
||||||
reorder_buffer_size = ${reorder_buffer_size}
|
reorder_buffer_size = ${reorder_buffer_size}
|
||||||
loss_tolerence = ${loss_tolerence}
|
loss_tolerence = ${loss_tolerance}
|
||||||
|
latency_tolerence = ${latency_tolerance}
|
||||||
cleartext_data = ${cleartext_data}
|
cleartext_data = ${cleartext_data}
|
||||||
password = "${password}"
|
password = "${password}"
|
||||||
mtu = 1452
|
mtu = 1452
|
||||||
|
|