1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Revert "fix"

This reverts commit 9916032c7a.
This commit is contained in:
suyuan168 2022-05-20 08:37:04 +08:00
parent 9916032c7a
commit 5f521932b2
185 changed files with 7761 additions and 4020 deletions

View file

@ -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))

View file

@ -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
}

View file

@ -1,12 +1,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bcm27xx-eeprom
PKG_VERSION:=2fec47bd7f981c9cb21b0fb3fdd4fe07f23f9e3b
PKG_VERSION:=47976e4409c6999a8e211976c75c60a97c90275c
PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
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_FILES:=LICENSE

View file

@ -14,7 +14,7 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
--- a/rpi-eeprom-update
+++ b/rpi-eeprom-update
@@ -24,17 +24,17 @@ else
@@ -24,12 +24,12 @@ else
fi
# 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}
RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin}
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}
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
+++ b/rpi-eeprom-update-default
@@ -1,8 +1,9 @@

58
cryptodev-linux/Makefile Normal file
View 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))

View file

@ -29,6 +29,16 @@ validate_section() {
'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() {
local enable key host port dev
@ -49,7 +59,7 @@ start_instance() {
key=""
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
fi
@ -58,6 +68,10 @@ start_instance() {
_log "starting ${PROG_NAME} ${1} instance $*"
if version_over_5_4; then
PROG="mptcpize run ${PROG}"
fi
procd_open_instance
procd_set_param command ${PROG} ${mode} \

View file

@ -50,7 +50,7 @@ start_instance() {
key=""
if [ "$(uci -q get network.omrvpn)" != "" ]; then
uci -q set network.omrvpn.ifname=$dev
uci -q set network.omrvpn.device=$dev
uci -q commit
fi

View file

@ -9,11 +9,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=glorytun
PKG_VERSION:=0.0.35
PKG_RELEASE:=6
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=6d58536f4232fea8eaa10fb60aace8ba11f29ed6
PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/angt/glorytun/releases/download/v$(PKG_VERSION)
PKG_HASH:=49e4d8ea4ff2990300b37947b0bd0da3c8e0985bc6eddf29f4146306188fff64
PKG_SOURCE_URL:=https://github.com/Ysurac/glorytun.git
PKG_VERSION:=0.0.35-$(PKG_SOURCE_VERSION)
PKG_FIXUP:=autoreconf
include $(INCLUDE_DIR)/package.mk

View file

@ -59,9 +59,10 @@ start_instance() {
key=""
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
fi
_log "starting ${PROG_NAME} ${1} instance $*"
procd_open_instance

View file

@ -13,10 +13,11 @@ endif
# Unset environment variables
# 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:
unexport \
GO111MODULE \
GCCGO \
GOARCH \
GOBIN \
@ -36,6 +37,7 @@ unexport \
# GONOPROXY
# GOSUMDB
# GONOSUMDB
# GOVCS
# Environment variables for use with cgo:
unexport \
@ -63,23 +65,20 @@ unexport \
# Special-purpose environment variables:
unexport \
GCCGOTOOLDIR \
GOEXPERIMENT \
GOROOT_FINAL \
GO_EXTLINK_ENABLED
# Unmodified:
# GIT_ALLOW_PROTOCOL
# From https://golang.org/cmd/go/#hdr-Module_support
unexport \
GO111MODULE
# From https://golang.org/pkg/runtime/#hdr-Environment_Variables
# From https://pkg.go.dev/runtime#hdr-Environment_Variables
unexport \
GOGC \
GOMAXPROCS \
GORACE \
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 \
CC_FOR_TARGET \
CXX_FOR_TARGET
@ -111,10 +110,6 @@ unexport \
BOOT_GO_GCFLAGS \
BOOT_GO_LDFLAGS
# From https://golang.org/src/cmd/dist/buildruntime.go
unexport \
GOEXPERIMENT
# From https://golang.org/src/cmd/dist/buildtool.go
unexport \
GOBOOTSTRAP_TOOLEXEC
@ -148,8 +143,11 @@ else
endif
ifeq ($(GO_ARCH),386)
# ensure binaries can run on older CPUs
GO_386:=387
ifeq ($(CONFIG_TARGET_x86_geode)$(CONFIG_TARGET_x86_legacy),y)
GO_386:=softfloat
else
GO_386:=sse2
endif
# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors
GO_CFLAGS_TO_REMOVE:=-fno-plt
@ -195,19 +193,23 @@ GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||pow
# ASLR/PIE
# From https://golang.org/src/cmd/internal/sys/supported.go
GO_PIE_SUPPORTED_OS_ARCH:= \
android_386 android_amd64 android_arm android_arm64 \
linux_386 linux_amd64 linux_arm linux_arm64 \
\
windows_386 windows_amd64 windows_arm \
\
darwin_amd64 \
darwin_amd64 darwin_arm64 \
ios_amd64 ios_arm64 \
\
freebsd_amd64 \
\
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)
ifneq ($(filter $(GO_HOST_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),)
@ -236,7 +238,7 @@ endif
# 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_ARGS= \
@ -249,6 +251,6 @@ GO_GENERAL_BUILD_CONFIG_VARS= \
GO_MOD_ARGS="$(GO_MOD_ARGS)"
define Go/CacheCleanup
$(GENERAL_BUILD_CONFIG_VARS) \
$(GO_GENERAL_BUILD_CONFIG_VARS) \
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup
endef

View file

@ -7,8 +7,8 @@
include $(TOPDIR)/rules.mk
GO_VERSION_MAJOR_MINOR:=1.15
GO_VERSION_PATCH:=2
GO_VERSION_MAJOR_MINOR:=1.17
GO_VERSION_PATCH:=3
PKG_NAME:=golang
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_URL:=$(GO_SOURCE_URLS)
PKG_HASH:=28bf9d0bcde251011caae230a4a05d917b172ea203f2a62f2c2f9533589d4b4d
PKG_HASH:=705c64251e5b25d5d55ede1039c6aa22bea40a7a931d14c370339853643c3df0
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=BSD-3-Clause
@ -48,12 +48,13 @@ HOST_GO_VALID_OS_ARCH:= \
freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \
linux_386 linux_amd64 linux_arm linux_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 \
windows_386 windows_amd64 windows_arm \
\
darwin_amd64 darwin_arm64 \
ios_amd64 ios_arm64 \
\
dragonfly_amd64 \
illumos_amd64 \
@ -64,7 +65,9 @@ HOST_GO_VALID_OS_ARCH:= \
\
linux_ppc64 linux_ppc64le \
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_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)))
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/defaultGOMIPS = `[^`]*`/defaultGOMIPS = `$(or $(GO_MIPS),hardfloat)`/; \
s/defaultGOMIPS64 = `[^`]*`/defaultGOMIPS64 = `$(or $(GO_MIPS64),hardfloat)`/; \
s/defaultGOPPC64 = `[^`]*`/defaultGOPPC64 = `power8`/;
PKG_GO_ZBOOTSTRAP_PATH:=$(PKG_BUILD_DIR)/src/internal/buildcfg/zbootstrap.go
PKG_GO_VARS= \
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
GOENV=off \
@ -306,8 +311,17 @@ define Build/Compile
$(PKG_GO_VARS) \
)
$(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' \
"$(PKG_BUILD_DIR)/src/cmd/internal/objabi/zbootstrap.go"
$(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' "$(PKG_GO_ZBOOTSTRAP_PATH)"
( \
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"

60
grpcurl/Makefile Normal file
View 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))

View file

@ -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.
# See /LICENSE for more information.
@ -8,10 +8,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ell
PKG_VERSION:=0.30
PKG_VERSION:=0.41
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_HASH:=51cf8cc66a9d1038e41f7d619ea5660aa4476904496562b2d45ca79370ca4a5e
PKG_HASH:=4e8dba6c53cf152dbd0fd1dc3d4c7b04abf79e20a948895f85943e586870505c
PKG_SOURCE_URL:=@KERNEL/linux/libs/ell
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=GPL

View file

@ -1,24 +1,22 @@
#
# Copyright (C) 2016 Velocloud Inc.
# 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.
#
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_VERSION:=1.25.3-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=10
PKG_VERSION:=1.26.2
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_BUILD_PARALLEL:=1

View file

@ -1,22 +1,21 @@
#
# Copyright (C) 2016 Velocloud Inc.
# 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.
#
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_VERSION:=1.29.3-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=10
PKG_VERSION:=1.30.4
PKG_RELEASE:=$(AUTORELEASE)
PKG_FIXUP:=autoreconf
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/libqmi
PKG_HASH:=00d7da30a4f8d1185f37cba289cfaf1dfcd04a58f2f76d6acfdf5b85312d6ed6
PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
@ -67,12 +66,22 @@ CONFIGURE_ARGS += \
--disable-gtk-doc-pdf \
--disable-silent-rules \
--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 \
--without-udev \
--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
$(INSTALL_DIR) $(1)/usr/include
$(CP) \

View file

@ -1,6 +1,6 @@
msgid ""
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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"glorytun-tcp/fr/>\n"
@ -8,7 +8,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 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
msgid "Advanced Settings"
@ -89,7 +89,7 @@ msgstr "Serveur"
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:73
msgid "Timeout"
msgstr "Temporisation"
msgstr "Hors Délais"
#: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:70
msgid "chacha"

View file

@ -15,7 +15,7 @@ if [ "$(uci -q get network.glorytun)" = "" ] && [ "$(uci -q get network.omrvpn)"
uci -q batch <<-EOF >/dev/null
delete network.glorytun
set network.glorytun=interface
set network.glorytun.ifname=tun0
set network.glorytun.device=tun0
set network.glorytun.proto=dhcp
set network.glorytun.ip4table=vpn
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].dest='vpn'
set firewall.@rule[-1].src='lan'
set firewall.@rule[-1].proto='all'
commit firewall
EOF
fi

View file

@ -8,3 +8,7 @@ config glorytun-udp 'vpn'
option localip '10.255.254.2'
option remoteip '10.255.254.1'
option mode 'to'
option kxtimeout '7d'
option timetolerance '10m'
option keepalive '25s'
option rateauto '0'

View file

@ -11,7 +11,7 @@ if [ "$(uci -q get network.glorytun-udp)" = "" ] && [ "$(uci -q get network.omrv
uci -q batch <<-EOF >/dev/null
delete network.glorytun-udp
set network.glorytun-udp=interface
set network.glorytun-udp.ifname=tun0
set network.glorytun-udp.device=tun0
set network.glorytun-udp.proto=dhcp
set network.glorytun-udp.ip4table=vpn
set network.glorytun-udp.multipath=off

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsiperf/fr/>\n"
@ -74,7 +74,7 @@ msgstr "Vitesse souhaitée (Mbits/s)"
#: luci-app-iperf/luasrc/view/iperf/test.htm:169
msgid "Test"
msgstr "Teste"
msgstr "Essai"
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
msgid "This iPerf interface is in bêta. No support for this."

View file

@ -82,6 +82,12 @@ return L.view.extend({
o.rmempty = false;
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();
}
});

View file

@ -1,6 +1,6 @@
msgid ""
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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsmlvpn/fr/>\n"
@ -8,7 +8,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.5.2\n"
"X-Generator: Weblate 4.6.1\n"
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32
msgid "Advanced Settings"
@ -20,7 +20,7 @@ msgstr "Client"
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:75
msgid "Disable encryption"
msgstr ""
msgstr "Désactiver le chiffrement"
#: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34
msgid "Enabled"

View file

@ -62,9 +62,12 @@ function multipath_bandwidth()
local intname = s[".name"]
local label = s["label"]
local dev = get_device(intname)
if dev == "" then
dev = get_device(s["device"])
if dev == "" then
dev = get_device(s["ifname"])
end
end
local multipath = s["multipath"] or ""
if dev ~= "lo" and dev ~= "" then
if multipath == "" then
@ -206,8 +209,8 @@ end
function mptcp_monitor_data()
luci.http.prepare_content("text/plain")
local fullmesh
fullmesh = io.popen("cat /proc/net/mptcp_net/snmp")
if fullmesh then
fullmesh = io.popen("multipath -m")
if fullmesh:read() ~= nil then
while true do
local ln = fullmesh:read("*l")
if not ln then break end
@ -222,7 +225,7 @@ function mptcp_connections_data()
luci.http.prepare_content("text/plain")
local connections
connections = io.popen("multipath -c")
if connections then
if connections:read() ~= nil then
while true do
local ln = connections:read("*l")
if not ln then break end

View file

@ -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:value("default", translate("default"))
o:value("fullmesh", "fullmesh")
o:value("ndiffports", "ndiffports")
o:value("binder", "binder")
if uname.release:sub(1,4) ~= "4.14" then
if uname.release:sub(1,4) ~= "5.14" then
o:value("ndiffports", "ndiffports")
o:value("binder", "binder")
if uname.release:sub(1,4) ~= "4.14" then
o:value("netlink", translate("Netlink"))
end
end
o = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler"))
o:value("default", translate("default"))
o:value("roundrobin", "round-robin")
o:value("redundant", "redundant")
if uname.release:sub(1,4) ~= "4.14" then
if uname.release:sub(1,4) ~= "5.15" then
o:value("roundrobin", "round-robin")
o:value("redundant", "redundant")
if uname.release:sub(1,4) ~= "4.14" then
o:value("blest", "BLEST")
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
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"))
local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs")
for cong in string.gmatch(availablecong, "[^%s]+") do
o:value(cong, translate(cong))
end
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")
if uname.release:sub(1,4) == "5.15" then
o = s:option(Value, "mptcp_subflows", translate("specifies the maximum number of additional subflows allowed for each MPTCP connection"))
o.datatype = "uinteger"
o.rmempty = false
o.default = 3
o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout"))
o:value(1, translate("enable"))
o:value(0, translate("disable"))
--o:depends("mptcp_path_manager","fullmesh")
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(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number"))
o.datatype = "uinteger"
o.rmempty = false
o.default = 1
--o:depends("mptcp_path_manager","ndiffports")
o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout"))
o:value(1, translate("enable"))
o:value(0, translate("disable"))
--o:depends("mptcp_path_manager","fullmesh")
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("N", translate("disable"))
o.default = "Y"
--o:depends("mptcp_scheduler","roundrobin")
o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number"))
o.datatype = "uinteger"
o.rmempty = false
o.default = 1
--o:depends("mptcp_path_manager","ndiffports")
o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin"))
o.datatype = "uinteger"
o.rmempty = false
o.default = 1
--o:depends("mptcp_scheduler","roundrobin")
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("N", translate("disable"))
o.default = "Y"
--o:depends("mptcp_scheduler","roundrobin")
o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin"))
o.datatype = "uinteger"
o.rmempty = false
o.default = 1
--o:depends("mptcp_scheduler","roundrobin")
end
s = m:section(TypedSection, "interface", translate("Interfaces Settings"))
o = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master"))

View file

@ -238,8 +238,8 @@
labelup_25.parentNode.appendChild(textup);
}
labeldn_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)%>', 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)%>', 4, data_wanted / 60);
/* render datasets, start update interval */
XHR.poll(3, '<%=build_url(bandwidthtotalurl, all)%>', null,

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsmptcp/fr/>\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.5.2\n"
"X-Generator: Weblate 4.6.1\n"
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:775
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
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:314
@ -77,7 +77,7 @@ msgstr "Connexions établies"
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:63
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
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
msgid "Test"
msgstr ""
msgstr "Essai"
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
msgid "Upload:"

View file

@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
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

View file

@ -190,7 +190,7 @@ return L.view.extend({
o = s.option(form.Flag, 'enabled', _('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.load = function(section_id) {
return Promise.all([

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsomr-bypass/fr/>\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 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:174
@ -94,7 +94,7 @@ msgstr "Ports de destination"
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:90
msgid "Ports source"
msgstr ""
msgstr "Ports source"
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:193
msgid "Protocol/Service"

View file

@ -14,13 +14,18 @@ _add_proto() {
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
fi
allurls="$(dd if=/proc/net/xt_ndpi/host_proto bs=4096 2> /dev/null)"
hosts="$( uci -q get omr-bypass.$protoname.url )"
for url in $hosts; do
if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $url)" = "" ]; then
echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto
fi
done
ip="$( uci -q get omr-bypass.$protoname.ip )"
for ip in $ips; do
if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $ip)" = "" ]; then
echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto
fi
done
}
@ -100,12 +105,14 @@ _bypass_domain() {
fi
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"
add_domains="true"
else
dnsmasqipset=$(uci -q get dhcp.@dnsmasq[0].ipset | sed 's/ /\n/g')
for dnsipset in $dnsmasqipset; do
if [ "$(echo $dnsipset | cut -d/ -f2)" = "$domain" ]; then
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"
add_domains="true"
fi
done
fi
@ -501,9 +508,10 @@ _intf_rule_v2ray_rules() {
_intf_rule() {
local intf
config_get intf $1 ifname
[ -z "$intf" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_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))
config_get count $1 metric
local mode
@ -537,7 +545,7 @@ _intf_rule() {
EOF
else
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
}
if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
@ -680,6 +688,7 @@ boot() {
start_service() {
#local count
logger -t "omr-bypass" "Starting OMR-ByPass..."
add_domains="false"
config_load omr-bypass
config_foreach _add_proto proto
disableipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)"
@ -797,11 +806,11 @@ start_service() {
config_foreach _bypass_proto dpis
uci -q commit omr-bypass
[ -z "$RELOAD" ] && {
[ -z "$RELOAD" ] && [ "$add_domains" = "true" ] && {
logger -t "omr-bypass" "Restart dnsmasq..."
/etc/init.d/dnsmasq restart
}
[ -n "$RELOAD" ] && {
[ -n "$RELOAD" ] && [ "$add_domains" = "true" ] && {
logger -t "omr-bypass" "Reload dnsmasq..."
/etc/init.d/dnsmasq reload
}

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsomr-dscp/fr/>\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 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.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.lua:77
msgid "CS4 - Real-Time Interactive"
msgstr ""
msgstr "CS4 - Temps réel interactif"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78
msgid "CS5 - Broadcast Video"
msgstr ""
msgstr "CS5 - Diffusion vidéo"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
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.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.lua:80
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.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
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/root/usr/share/luci/menu.d/luci-app-omr-dscp.json:3

View file

@ -256,3 +256,8 @@ config domains
option class 'cs1'
option comment 'WindowsUpdate'
config domains
option name 'tv.milkywan.fr'
option class 'cs5'
option comment 'MilkyWan TV'

View file

@ -19,10 +19,10 @@ config_get lan_device lan ifname
config_load dscp
_ipt4() {
iptables -w -t mangle "$@"
iptables -w -t mangle "$@" 2>&1 >/dev/null
}
_ipt6() {
ip6tables -w -t mangle "$@"
ip6tables -w -t mangle "$@" >/dev/null
}
_add_dscp_rule() {

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsomr-quota/fr/>\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.5.2\n"
"X-Generator: Weblate 4.6.1\n"
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
msgid "Add"
@ -23,7 +23,7 @@ msgstr "Activer"
#: 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"
msgstr ""
msgstr "Permettre l'accès à luci-app-omr-quota"
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
msgid "Interfaces"

View file

@ -1,18 +1,18 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
"PO-Revision-Date: 2022-02-11 13:53+0000\n"
"Last-Translator: Riccardo Tornesello <riccardo.tornesello@gmail.com>\n"
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsomr-tracker/it/>\n"
"Language: it\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.4\n"
"X-Generator: Weblate 4.6.1\n"
#: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:8
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:192

View file

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 536 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 607 B

After

Width:  |  Height:  |  Size: 607 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 575 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 536 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before After
Before After

View file

@ -26,7 +26,11 @@ end
function interface_from_device(dev)
for _, iface in ipairs(net:get_networks()) do
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
return ifacen
end
@ -34,6 +38,17 @@ function interface_from_device(dev)
return ""
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()
local gostatus = true
@ -113,7 +128,10 @@ function wizard_add()
end)
local defif = "eth0"
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
defif = defif1
end
@ -126,17 +144,29 @@ function wizard_add()
if ointf ~= "" then
if ucic:get("network",ointf,"type") == "" then
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
wanif = "wan" .. i
end
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("openmptcprouter","wan" .. i,"interface")
if ointf ~= "" then
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 .. "_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
ucic:set("network","wan" .. i,"ip4table","wan")
if multipath_master then
@ -171,7 +201,7 @@ function wizard_add()
ucic:set("sqm","wan" .. i,"script","simple.qos")
ucic:set("sqm","wan" .. i,"qdisc_advanced","0")
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,"verbosity","5")
ucic:set("sqm","wan" .. i,"download","0")
@ -197,7 +227,10 @@ function wizard_add()
local delete_intf = luci.http.formvaluetable("delete") or ""
if delete_intf ~= "" then
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)
if ucic:get("network",intf .. "_dev") ~= "" then
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 multipath = luci.http.formvalue("cbid.network.%s.multipath" % intf) or "on"
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 == "normal" then
typeintf = ""
@ -262,15 +296,48 @@ function wizard_add()
end
if typeintf == "macvlan" and masterintf ~= "" then
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)
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
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
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
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
if proto == "pppoe" then
ucic:set("network",intf,"pppd_options","persist maxfail 0")
@ -278,6 +345,13 @@ function wizard_add()
if proto ~= "other" then
ucic:set("network",intf,"proto",proto)
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,"pincode",pincode)
ucic:set("network",intf,"delay",delay)
@ -341,9 +415,12 @@ function wizard_add()
if not ucic:get("sqm",intf) ~= "" then
local defif = get_device(intf)
if defif == "" then
defif = ucic:get("network",intf,"device") or ""
if defif == "" then
defif = ucic:get("network",intf,"ifname") or ""
end
end
ucic:set("sqm",intf,"queue")
ucic:set("sqm",intf,"interface",defif)
ucic:set("sqm",intf,"qdisc","fq_codel")
@ -442,7 +519,7 @@ function wizard_add()
ucic:set("network","omrvpn","proto","bonding")
end
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:save("network")
ucic:commit("network")
@ -809,7 +886,7 @@ function wizard_add()
local dsvpn_key = luci.http.formvalue("dsvpn_key")
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","localip","10.255.251.2")
ucic:set("dsvpn","vpn","remoteip","10.255.251.1")
@ -894,7 +971,7 @@ function wizard_add()
-- Restart all
menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter"
if gostatus == true then
luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null")
--luci.sys.call("/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("ip addr flush dev tun0 >/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/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/sysntpd restart >/dev/null 2>/dev/null")
luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/status"))
else
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"
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:commit("openmptcprouter")

View file

View file

View file

@ -219,6 +219,12 @@
</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>
<hr />
<fieldset class="cbi-section" id="other">

View file

@ -19,7 +19,7 @@
-- 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
-- New features:
@ -307,7 +307,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
}
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")

View file

@ -7,11 +7,17 @@
local sys = require "luci.sys"
local ut = require "luci.util"
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"
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 ifacename = uci:get("network",ifacen,"ifname")
local ifacename = uci:get("network",ifacen,"device")
local ifacetype = uci:get("network",ifacen,"type") or ""
local ifaceproto = uci:get("network",ifacen,"proto") or ""
--if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
@ -428,7 +434,7 @@
<%
for _, iface in ipairs(net:get_networks()) do
local ifname = iface:name()
local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_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
%>
<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 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
%>
@ -483,9 +489,9 @@
end
end
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
else
@ -531,7 +537,7 @@
<%
for _, iface in ipairs(net:get_networks()) do
local ifname = iface:name()
local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_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
-- 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">
<%
iffind=0
uciifname=uci:get("network",ifname,"ifname")
uciifname=uci:get("network",ifname,"device")
if uciifname ~= nil then
if uciifname:match("/") then
realifname=uciifname
@ -682,7 +688,7 @@
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-index="8">
<label class="cbi-value-title"><%:IPv6 address%></label>
<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 />
<div class="cbi-value-description">
<%: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">
<label class="cbi-value-title"><%:IPv6 gateway%></label>
<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 />
<div class="cbi-value-description">
<%: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">
<%
iffind=0
iftty = nixio.fs.glob("/dev/ttyUSB*")
for tty in iftty do
for tty in ifttyu do
%>
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
<%
end
iftty = nixio.fs.glob("/dev/cdc-wdm*")
for tty in iftty do
for tty in ifttyc do
%>
<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">
<%
iffind=0
iftty = nixio.fs.glob("/dev/cdc-wdm*")
for tty in iftty do
for tty in ifttyc do
%>
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
<%
@ -893,6 +896,16 @@
<%
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"
@ -909,7 +922,7 @@
-- 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>
<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 %> />
@ -919,7 +932,7 @@
</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>
<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 %> />
@ -929,7 +942,7 @@
</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>
<div class="cbi-value-field">
<input type="text" name="cbid.sqm.<%=ifname%>.download" class="cbi-input-text" value="<%=download%>" data-type="uinteger">
@ -945,7 +958,7 @@
-->
</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>
<div class="cbi-value-field">
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">

View file

@ -1,14 +1,14 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-10-21 12:55+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"
"PO-Revision-Date: 2022-02-19 10:30+0000\n"
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsopenmptcprouter/de/>\n"
"Language: de\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.4\n"
"X-Generator: Weblate 4.10.1\n"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
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 ""
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
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
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
msgid "APN"
@ -88,7 +90,7 @@ msgstr "Backup der Router-Einstellungen auf den Server"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:371
msgid "Balancing"
msgstr ""
msgstr "Ausgleich"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
msgid "Beta"
@ -96,11 +98,11 @@ msgstr "Beta"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:310
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
msgid "Bridge"
msgstr ""
msgstr "Netzwerkbrücke"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
msgid "Bridge can't have multipath enabled"
@ -113,28 +115,27 @@ msgstr ""
"übertragen."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
#, fuzzy
msgid ""
"By default proxy is used for any traffic that is TCP (and UDP for V2Ray)."
msgstr ""
"IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll "
"übertragen."
"Standard wird TCP Netzwerk Verkehr über Proxy übertragen (Auch UDP für "
"V2Ray)."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840
msgid "CHAP"
msgstr ""
msgstr "CHAP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271
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
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
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
msgid "Can\\'t get public IP address from V2Ray"
@ -142,7 +143,7 @@ msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284
msgid "Can\\'t ping server"
msgstr ""
msgstr "Kann Server nicht pingen"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
msgid "China"
@ -153,20 +154,22 @@ msgid ""
"Choose MacVLAN if you want to create a virtual interface based on a physical "
"interface."
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:588
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:647
msgid "Choose physical interface."
msgstr ""
msgstr "Wähle physikalische Schnittstelle."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135
msgid "Core temp:"
msgstr ""
msgstr "Kerntemperatur:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
msgid "Country"
msgstr ""
msgstr "Land"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
#, fuzzy
@ -179,22 +182,20 @@ msgid "DHCP"
msgstr "DHCP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
#, fuzzy
msgid "DHCPv6"
msgstr "DHCP"
msgstr "DHCPv6"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
msgid "DNS issue: can\\'t resolve hostname"
msgstr ""
msgstr "DNS Problem: Hostnamen nicht beziehbar"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:355
msgid "Debug"
msgstr ""
msgstr "Debug"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223
#, fuzzy
msgid "Default Proxy"
msgstr "Standard VPN"
msgstr "Standard Proxy"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337
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:789
msgid "Device"
msgstr ""
msgstr "Gerät"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
#, fuzzy
@ -232,13 +233,12 @@ msgstr ""
"Abschalten von TCP-Fast-Open für Linux und die ShadowsSocks-Einstellungen"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295
#, fuzzy
msgid "Disable default gateway"
msgstr "Gateway-Ping aus"
msgstr "Default Gateway aus"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:300
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
msgid "Disable external check"
@ -254,13 +254,12 @@ msgid "Disable gateway ping check in status page"
msgstr "Gateway-Ping Statusüberprüfung aus"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279
#, fuzzy
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
msgid "Disable multipath test using tracebox"
msgstr ""
msgstr "Deaktiviere multipath Test mittels Tracebox"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
#, fuzzy
@ -277,9 +276,8 @@ msgid ""
msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
#, fuzzy
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:320
@ -288,14 +286,12 @@ msgid "Disable route loop detection"
msgstr "Server-Ping aus"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144
#, fuzzy
msgid "Disable server"
msgstr "Server-Ping aus"
msgstr "Server deaktivieren"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
#, fuzzy
msgid "Disable server http test"
msgstr "Server-Ping aus"
msgstr "Server-http-Test aus"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305
msgid "Disable server ping"
@ -306,15 +302,14 @@ msgid "Disable server ping status check"
msgstr "Server-Ping Status-Prüfung aus"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:325
#, fuzzy
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:871
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:887
msgid "Disabled"
msgstr ""
msgstr "inaktiv"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:933
msgid "Download speed (Kb/s)"
@ -351,13 +346,12 @@ msgid "Enable ShadowSocks Obfuscating"
msgstr "Shadowsocks-Verschleierung aktiv"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213
#, fuzzy
msgid "Enable TCP Low Latency"
msgstr "TCP-Fast-Open aus"
msgstr "Aktiviere TCP Low Latency"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:360
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:870
@ -370,31 +364,30 @@ msgid "Encryption"
msgstr "Verschlüsselung"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280
#, fuzzy
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
msgid "Filesystem is readonly"
msgstr ""
msgstr "Filesystem ist nur lesen"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419
msgid "For China, set an accessible DNS and disable DNSSEC."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178
#, fuzzy
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
#, fuzzy
msgid "Force retrieve settings"
msgstr "Server-Einstellungen"
msgstr "Erzwingen Einstellungen runter zu laden."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829
msgid "GPRS only"
msgstr ""
msgstr "Nur GPRS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:561
#: 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:710
#, fuzzy
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:720
#, fuzzy
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:804
@ -488,9 +479,8 @@ msgid "IPv6 route received"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:184
#, fuzzy
msgid "IPv6 settings"
msgstr "VPN-Einstellungen"
msgstr "IPv6-Einstellungen"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209
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:883
msgid "Multipath TCP"
msgstr ""
msgstr "Multipath-TCP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:601
#: 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
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
msgid "OpenMPTCProuter"
@ -802,7 +792,7 @@ msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218
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:605
@ -849,11 +839,11 @@ msgstr "Interface hinzufügen"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825
msgid "Prefer LTE"
msgstr ""
msgstr "Bevorzuge LTE"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:826
msgid "Prefer UMTS"
msgstr ""
msgstr "Bevorzuge UMTS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
#, fuzzy
@ -921,9 +911,8 @@ msgid "Scaling governor"
msgstr "Methode der CPU-Taktung"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
#, fuzzy
msgid "Secondary server IP"
msgstr "Server IPv4"
msgstr "zweite Server IP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
msgid "Select the device you want to base the interface on."
@ -963,9 +952,8 @@ msgid "Server username"
msgstr "Server-Benutzername"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:821
#, fuzzy
msgid "Service Type"
msgstr "Server-Schlüssel"
msgstr "Dienst Typ"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401
msgid "Set VPN to use for MPTCP over VPN."
@ -1106,7 +1094,7 @@ msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559
msgid "Type"
msgstr ""
msgstr "Typ"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:331
msgid "UBOND can replace Glorytun with connections with same latency"
@ -1176,9 +1164,8 @@ msgid "VLAN"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184
#, fuzzy
msgid "VPN is not running"
msgstr "VPN-Einstellungen"
msgstr "VPN läuft nicht"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286
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:749
msgid "latency:"
msgstr ""
msgstr "Latenz:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:520
#: 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:741
#, fuzzy
msgid "wan address:"
msgstr "Statische Adresse"
msgstr "öffentliche IP Adresse:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:500
#, fuzzy
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:512

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"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:889
msgid "Backup"
msgstr "Sauvegarder"
msgstr "Remplaçant"
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10
@ -112,7 +112,7 @@ msgstr "Passerelle"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618
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
msgid "By default VPN is used for any traffic that is not TCP."

View file

@ -1,14 +1,14 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-12-01 17:19+0000\n"
"Last-Translator: Giuseppe Dipierro <giuseppe.dipierro@uania.com>\n"
"PO-Revision-Date: 2022-02-19 10:30+0000\n"
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationsopenmptcprouter/it/>\n"
"Language: it\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0.4\n"
"X-Generator: Weblate 4.10.1\n"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
@ -23,6 +23,8 @@ msgstr "Chiave Dead Simple VPN"
msgid ""
"A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set"
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
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
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
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"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290
#, fuzzy
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
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
msgid "China"
msgstr ""
msgstr "Cina"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568
msgid ""
@ -170,12 +171,11 @@ msgstr "Temp. Nucleo:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
msgid "Country"
msgstr ""
msgstr "Nazione"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407
#, fuzzy
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:599
@ -183,9 +183,8 @@ msgid "DHCP"
msgstr "DHCP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600
#, fuzzy
msgid "DHCPv6"
msgstr "DHCP"
msgstr "DHCPv6"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188
msgid "DNS issue: can\\'t resolve hostname"
@ -215,15 +214,13 @@ msgid "Device"
msgstr "Dispositivo"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253
#, fuzzy
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:350
#, fuzzy
msgid "Disable ModemManager"
msgstr "ModemManager"
msgstr "Disabilita ModemManager"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203
msgid "Disable TCP Fast Open"
@ -251,24 +248,20 @@ msgid "Disable gateway ping"
msgstr "Disabilita il ping del gateway"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243
#, fuzzy
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
#, fuzzy
msgid "Disable interfaces auto rename"
msgstr "Disabilita il test Tracebox"
msgstr "Disabilita auto rinomina interfacce"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330
msgid "Disable multipath test using tracebox"
msgstr "Disabilita il test multipath usando tracebox"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335
#, fuzzy
#| msgid "Disabled"
msgid "Disable nDPI"
msgstr "Disabilitato"
msgstr "Disabilita nDPI"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:340
msgid "Disable nDPI, used for protocols in OMR-ByPass"
@ -282,9 +275,8 @@ msgstr ""
"a questo router"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284
#, fuzzy
msgid "Disable renaming interfaces"
msgstr "Etichetta per l&#39;interfaccia"
msgstr "Disabilita rinomina interfaccia"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320
@ -297,9 +289,8 @@ msgid "Disable server"
msgstr "Disabilita il server"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248
#, fuzzy
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
msgid "Disable server ping"
@ -329,12 +320,11 @@ msgstr "Cambiamento dinamico"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:390
msgid "Enable Bridge Acceleration"
msgstr ""
msgstr "Abilita Accelerazione modalità Bridge"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209
#, fuzzy
msgid "Enable DNS64"
msgstr "Abilita MQ"
msgstr "Abilita DNS64"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:384
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
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
msgid "Force retrieve all keys from server."
@ -403,9 +393,8 @@ msgid "Gateway DOWN"
msgstr "Tipi di pagamento"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564
#, fuzzy
msgid "Gateway IPv6 DOWN"
msgstr "Tipi di pagamento"
msgstr "Gateway IPv6 SPENTO"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295
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:710
#, fuzzy
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:720
#, fuzzy
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:804
@ -504,7 +491,7 @@ msgstr "IPv6:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214
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
msgid "Interfaces settings"
@ -588,15 +575,16 @@ msgid "MPTCP over VPN"
msgstr "MPTCP su VPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:390
#, fuzzy
msgid "MPTCP over VPN settings"
msgstr "MPTCP su VPN"
msgstr "Impostazioni MPTCP su VPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391
msgid ""
"MPTCP over VPN should be used only when Multipath TCP is blocked on a "
"connection."
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
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:782
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:767
@ -666,9 +654,8 @@ msgid "NONE"
msgstr "NESSUNO"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:623
#, fuzzy
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:799
@ -676,9 +663,8 @@ msgid "Network interface duplicated"
msgstr "Interfaccia di rete duplicata"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:579
#, fuzzy
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:901
@ -699,18 +685,17 @@ msgid "No IPv6 access"
msgstr "Nessun accesso IPv6"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:575
#, fuzzy
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:771
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
msgid "No WAN with multipath enabled:"
msgstr ""
msgstr "Nessuna WAN con multipath abilitata:"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26
msgid "No available backup on server."
@ -735,14 +720,12 @@ msgid "No output"
msgstr "Nessun output"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:293
#, fuzzy
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
#, fuzzy
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
msgid "No server defined"
@ -783,13 +766,15 @@ msgstr "Al cambio della procedura guidata"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233
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
msgid ""
"Only one interface must be set as \"Master\", this should be the most stable "
"interface."
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
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
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
msgid "OpenMPTCProuter"
@ -861,9 +846,8 @@ msgid "Prefer UMTS"
msgstr "Preferisci UMTS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94
#, fuzzy
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:594
@ -896,7 +880,7 @@ msgstr "Reindirizza tutte le porte dal server a questo router"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:999
msgid "Reset"
msgstr ""
msgstr "Resetta"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32
msgid "Restore backup"
@ -924,9 +908,8 @@ msgid "Scaling governor"
msgstr "Governatore in scala"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95
#, fuzzy
msgid "Secondary server IP"
msgstr "Indirizzo IP del server"
msgstr "IP secondario del server"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992
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
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:688
@ -1225,7 +1208,7 @@ msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:65
msgid "Wizard"
msgstr "Wizard"
msgstr "Procedura guidata"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414
msgid "World"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
"projects/omr/luciapplicationsopenmptcprouter/zh_Hans/>\n"
@ -113,7 +113,7 @@ msgstr "默认情况下VPN用于非TCP的任何流量."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221
msgid ""
"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
msgid "CHAP"
@ -946,9 +946,7 @@ msgstr "将服务器设置为主服务器"
msgid ""
"Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and "
"UDP when V2Ray is enabled."
msgstr ""
"设置启用ShadowSocks时用于TCP的默认代理启用V2Ray时设置用于TCP和UDP的默认代"
"理."
msgstr "启用ShadowSocks时用于默认代理TC流量启用V2Ray时用于默认代理TCP和UDP还有ICMP任何流量."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384
msgid ""
@ -1098,7 +1096,7 @@ msgstr "V2Ray没有运行"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254
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
msgid "V2Ray user"

View file

@ -21,5 +21,6 @@ uci show | \
-e "/vpn\.key=/s/......$/xxxxxx'/" \
-e "/vps\.key=/s/......$/xxxxxx'/" \
-e "/wgkey=/s/......$/xxxxxx'/" \
-e "/key=/s/......$/xxxxxx'/" \
-e "/ula_prefix=2/s/=.........../='xxxxxxxxxxx/" \
-e "/token=/s/............$/xxxxxx'/"

View file

@ -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}')
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}')
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
[ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE"
exit

View file

@ -12,10 +12,18 @@ get_mptcp_from_server() {
get_mptcp() {
serverip=$1
if [ "$(echo $serverip | grep :)" ]; then
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
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
[ -n "$support" ] && {
support=$(echo $support | jsonfilter -e '@.mptcp')
break
@ -56,8 +64,10 @@ get_mptcp_from_website6() {
support=""
config_load openmptcprouter
config_foreach get_mptcp_from_server server
[ -z "$support" ] && [ -n "$(ip -4 a show dev $intf)" ] && get_mptcp_from_website
[ -z "$support" ] && [ -n "$(ip -6 a show dev $intf)" ] && get_mptcp_from_website6
if [ ! -f /proc/sys/net/mptcp/enabled ] && [ -z "$support" ]; then
[ -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
echo "MPTCP enabled"
elif [ "$support" = "not working" ]; then

View file

View file

@ -6,6 +6,8 @@ START=5
USE_PROCD=1
. /lib/functions/network.sh
omr_intf_del() {
[ -z "$1" ] && return
uci -q delete openmptcprouter.$1
@ -18,11 +20,14 @@ omr_intf_check() {
omr_intf_set() {
local device
local ifname
config_get ifname "$1" ifname
config_get device "$1" device
config_get type "$1" type
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
[ -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
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.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
uci -q delete network.$1.device
#uci -q delete network.$1.device
uci -q delete network.$1.modalias
uci -q delete network.$1.product
fi
elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(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=""
if [ -f /sys/class/net/${ifname}/address ]; then
mac="$(cat /sys/class/net/${ifname}/address | tr -d '\n')"
@ -56,7 +61,10 @@ omr_set_settings() {
local ifname
local 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 proto "$1" proto
config_get type "$1" type
@ -76,7 +84,8 @@ omr_set_settings() {
[ -z "$addlatency" ] && addlatency=0
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"]')
if [ -n "$ifname" ]; then
@ -144,15 +153,13 @@ start_service() {
del_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
add_list dhcp.@dnsmasq[0].server='114.114.114.114'
set dhcp.@dnsmasq[0].dnsseccheckunsigned='0'
delete dhcp.@dnsmasq[0].dnssec='1'
delete dhcp.@dnsmasq[0].dnssec
commit dhcp
EOF
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
add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
del_list dhcp.@dnsmasq[0].server='114.114.114.114'
set dhcp.@dnsmasq[0].dnsseccheckunsigned='1'
set dhcp.@dnsmasq[0].dnssec='1'
commit dhcp
EOF
fi

View file

@ -11,7 +11,7 @@ local jsonc = require "luci.jsonc"
function interface_from_device(dev)
for _, iface in ipairs(net:get_networks()) do
local ifacen = iface:name()
local ifacename = ucic:get("network",ifacen,"ifname")
local ifacename = ucic:get("network",ifacen,"device")
if ifacename == dev then
return ifacen
end
@ -72,7 +72,7 @@ function add_interface(add_interface_ifname)
end
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")
if ointf ~= "" then
ucic:set("network","wan" .. i,"type","macvlan")
@ -128,7 +128,7 @@ end
function remove_interface(intf)
-- 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 .. "_dev")
ucic:save("network")
@ -170,7 +170,7 @@ function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspee
if not ucic:get("sqm",intf) ~= "" then
local defif = get_device(intf)
if defif == "" then
defif = ucic:get("network",intf,"ifname") or ""
defif = ucic:get("network",intf,"device") or ""
end
ucic:set("sqm",intf,"queue")
ucic:set("sqm",intf,"interface",defif)
@ -268,7 +268,7 @@ function default_vpn(default_vpn)
ucic:set("network","omrvpn","proto","dhcp")
end
if vpn_intf ~= "" then
ucic:set("network","omrvpn","ifname",vpn_intf)
ucic:set("network","omrvpn","device",vpn_intf)
ucic:save("network")
ucic:commit("network")
end
@ -824,7 +824,7 @@ function interfaces_status()
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))
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
--mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com")
end
@ -931,6 +931,11 @@ function interfaces_status()
else
mArray.openmptcprouter["vps_admin"] = false
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
else
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
mArray.openmptcprouter["tun_service"] = true
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
tun_dev = get_device("omrvpn")
end
@ -1027,10 +1035,16 @@ function interfaces_status()
end
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
mArray.openmptcprouter["shadowsocks_enabled"] = false
end
-- check V2Ray is running
mArray.openmptcprouter["v2ray_service"] = false
if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then
@ -1139,14 +1153,14 @@ function interfaces_status()
local ifname = get_device(interface)
if ifname == "" or ifname == nil then
ifname = section["ifname"] or ""
ifname = section["device"] or ""
end
--if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
--ifname = get_device(interface:sub(5))
--end
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
connectivity = "ERROR"
duplicateif = true
@ -1156,7 +1170,7 @@ function interfaces_status()
end
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
connectivity = "ERROR"
duplicatemac = true
@ -1371,7 +1385,8 @@ function interfaces_status()
if adminport == "" then
adminport = "65500"
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_test = ""
if mArray.openmptcprouter["service_addr_ip"] ~= "" then

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
msgid ""
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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"luciapplicationssnmpd/fr/>\n"
@ -57,7 +57,7 @@ msgstr ""
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
msgid "General"
msgstr ""
msgstr "Général"
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
msgid "Grant UCI access for luci-app-snmpd"
@ -80,11 +80,11 @@ msgstr "Interface"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
msgid "Level"
msgstr ""
msgstr "Niveau"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
msgid "Location"
msgstr ""
msgstr "Localisation"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
#: 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
msgid "Notify"
msgstr ""
msgstr "Notifier"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
msgid "ObjectID"
msgstr ""
msgstr "ObjectID"
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
#: 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
msgid "Program"
msgstr ""
msgstr "Programme"
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
@ -119,28 +119,28 @@ msgstr "Protocoles"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
msgid "Read"
msgstr ""
msgstr "Lecture"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
msgid "Read-only"
msgstr ""
msgstr "Lecture Seule"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
msgid "Read-write"
msgstr ""
msgstr "Lecture-écriture"
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
msgid "SNMPd"
msgstr ""
msgstr "SNMPd"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
msgid "SNMPd settings interface (Beta)"
msgstr ""
msgstr "Paramètres du protocole SNMPd (Beta)"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
msgid "Server"
@ -148,7 +148,7 @@ msgstr "Serveur"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
msgid "Source"
msgstr ""
msgstr "Source"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
msgid "System"
@ -156,23 +156,23 @@ msgstr "Système"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
msgid "Write"
msgstr ""
msgstr "Ecriture"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
msgid "any"
msgstr ""
msgstr "Tout"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
msgid "auth"
msgstr ""
msgstr "Authentification"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
msgid "com2sec security"
msgstr ""
msgstr "com2sec security"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
msgid "noauth"
msgstr ""
msgstr "pas d'authentification"
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
msgid "secname"
@ -181,4 +181,4 @@ msgstr ""
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
msgid "version"
msgstr ""
msgstr "version"

View file

@ -11,7 +11,7 @@
start_service()
{
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
rm /etc/backup/installed_packages.txt
fi

View file

@ -371,7 +371,7 @@ return baseclass.extend({
release: {
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
}
};

View file

@ -1,6 +1,6 @@
msgid ""
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"
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
"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
msgid "Devices"
msgstr "Appareils"
msgstr "Périphériques"
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195
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
msgid "Down."
@ -71,7 +71,7 @@ msgstr "Version du micrologiciel"
#: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173
msgid "GHz"
msgstr "Ghz"
msgstr "GHz"
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25
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
msgid "Grant access to the system route status"
msgstr "Permettre l'acces au Status du Routage"
msgstr "Permettre laccès au status de routage"
#: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34
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/30_wifi.js:65
msgid "yes"
msgstr "Oui"
msgstr "oui"

View file

@ -1,10 +1,10 @@
#
# 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 .
#
# From https://github.com/openwrt/luci/commit/f5c04e1a2e173f536597f220db0380cc08869e8e
# From https://github.com/openwrt/luci/commit/b88157e69a060ade618e48b30947729310935d61
include $(TOPDIR)/rules.mk

View 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
});

View file

@ -34,8 +34,8 @@ CBILeaseStatus = form.DummyValue.extend({
E('table', { 'id': 'lease_status_table', 'class': 'table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Hostname')),
E('th', { 'class': 'th' }, _('IPv4-Address')),
E('th', { 'class': 'th' }, _('MAC-Address')),
E('th', { 'class': 'th' }, _('IPv4 address')),
E('th', { 'class': 'th' }, _('MAC address')),
E('th', { 'class': 'th' }, _('Lease time remaining'))
]),
E('tr', { 'class': 'tr placeholder' }, [
@ -53,7 +53,7 @@ CBILease6Status = form.DummyValue.extend({
E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Host')),
E('th', { 'class': 'th' }, _('IPv6-Address')),
E('th', { 'class': 'th' }, _('IPv6 address')),
E('th', { 'class': 'th' }, _('DUID')),
E('th', { 'class': 'th' }, _('Lease time remaining'))
]),
@ -279,7 +279,8 @@ return view.extend({
o.optional = true;
o.placeholder = '/example.org/10.1.2.3';
// o.validate = validateServerSpec;
o.validate = validateServerSpec;
o = s.taboption('general', form.DynamicList, 'address', _('Addresses'),
_('List of domains to force to an IP address.'));
@ -287,6 +288,7 @@ return view.extend({
o.optional = true;
o.placeholder = '/router.local/192.168.0.1';
o = s.taboption('general', form.Flag, 'rebind_protection',
_('Rebind protection'),
_('Discard upstream RFC1918 responses'));
@ -407,7 +409,7 @@ return view.extend({
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 />' +
_('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;
@ -448,7 +450,11 @@ return view.extend({
node.addEventListener('cbi-dropdown-change', L.bind(function(ipopt, section_id, ev) {
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;
var ip = ipopt.formvalue(section_id);
@ -457,16 +463,35 @@ return view.extend({
var node = ipopt.map.findElement('id', ipopt.cbid(section_id));
if (node)
dom.callClassMethod(node, 'setValue', hosts[mac].ipv4);
dom.callClassMethod(node, 'setValue', iphint);
}, this, ipopt, section_id));
return node;
};
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.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.datatype = 'or(ip4addr,"ignore")';
so.validate = function(section, value) {
@ -480,19 +505,21 @@ return view.extend({
return true;
};
var ipaddrs = {};
Object.keys(hosts).forEach(function(mac) {
if (hosts[mac].ipv4) {
var hint = hosts[mac].name;
so.value(hosts[mac].ipv4, hint ? '%s (%s)'.format(hosts[mac].ipv4, hint) : hosts[mac].ipv4);
}
var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
for (var i = 0; i < addrs.length; i++)
ipaddrs[addrs[i]] = hosts[mac].name;
});
so = ss.option(form.Value, 'gw', _('Gateway'));
so.datatype = 'or(ip4addr,"ignore")';
so.rmempty = true;
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4);
});
so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in minutes (mini 2m), hours (eg 1h) or "infinite"'));
so.placeholder = '12h';
so = ss.option(form.Value, 'leasetime', _('Lease time'));
so.rmempty = true;
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);
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;
if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name)

View file

@ -31,11 +31,18 @@ return view.extend({
o = s.option(form.Value, 'ip', _('IP address'));
o.datatype = 'ipaddr';
o.rmempty = true;
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac
));
var ipaddrs = {};
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();

View file

@ -20,6 +20,7 @@ return view.extend({
s.anonymous = true;
s.addremove = true;
s.sortable = true;
s.nodescriptions = true;
s.tab('general', _('General Settings'));
s.tab('advanced', _('Advanced Settings'));
@ -28,6 +29,10 @@ return view.extend({
o.rmempty = false;
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.datatype = (i == 4) ? 'ip4addr' : 'ip6addr';
o.rmempty = false;

View file

@ -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')),
ht = rate.ht, vht = rate.vht,
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 (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 (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;
}
@ -303,16 +312,32 @@ var CBIWifiFrequencyValue = form.Value.extend({
this.callFrequencyList(section_id)
]).then(L.bind(function(data) {
this.channels = {
'11g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [],
'11a': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : []
'2g': 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++)
this.channels[(data[1][i].mhz > 2484) ? '11a' : '11g'].push(
for (var i = 0; i < data[1].length; i++) {
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,
'%d (%d Mhz)'.format(data[1][i].channel, data[1][i].mhz),
!data[1][i].restricted
);
}
var hwmodelist = L.toArray(data[0] ? data[0].getHWModes() : null)
.reduce(function(o, v) { o[v] = true; return o }, {});
@ -320,7 +345,8 @@ var CBIWifiFrequencyValue = form.Value.extend({
this.modes = [
'', 'Legacy', true,
'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)
@ -337,20 +363,30 @@ var CBIWifiFrequencyValue = form.Value.extend({
'VHT40', '40 MHz', htmodelist.VHT40,
'VHT80', '80 MHz', htmodelist.VHT80,
'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 = {
'': [
'11g', '2.4 GHz', this.channels['11g'].length > 3,
'11a', '5 GHz', this.channels['11a'].length > 3
'2g', '2.4 GHz', this.channels['2g'].length > 3,
'5g', '5 GHz', this.channels['5g'].length > 3
],
'n': [
'11g', '2.4 GHz', this.channels['11g'].length > 3,
'11a', '5 GHz', this.channels['11a'].length > 3
'2g', '2.4 GHz', this.channels['2g'].length > 3,
'5g', '5 GHz', this.channels['5g'].length > 3
],
'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));
@ -392,6 +428,8 @@ var CBIWifiFrequencyValue = form.Value.extend({
this.setValues(band, this.bands[mode.value]);
this.toggleWifiChannel(elem);
this.map.checkDepends();
},
toggleWifiChannel: function(elem) {
@ -408,11 +446,14 @@ var CBIWifiFrequencyValue = form.Value.extend({
bwdt = elem.querySelector('.htmode'),
htval = uci.get('wireless', section_id, 'htmode'),
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);
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';
else if (/HT20|HT40/.test(htval))
mode.value = 'n';
@ -421,15 +462,24 @@ var CBIWifiFrequencyValue = form.Value.extend({
this.toggleWifiMode(elem);
if (hwval != null) {
this.useBandOption = false;
if (/a/.test(hwval))
band.value = '11a';
band.value = '5g';
else
band.value = '11g';
band.value = '2g';
}
else {
this.useBandOption = true;
band.value = bandval;
}
this.toggleWifiBand(elem);
bwdt.value = htval;
chan.value = chval;
chan.value = chval || chan.options[0].value;
return elem;
},
@ -461,6 +511,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
E('select', {
'class': 'channel',
'style': 'width:auto',
'change': L.bind(this.map.checkDepends, this.map),
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
})
]),
@ -469,6 +520,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
E('select', {
'class': 'htmode',
'style': 'width:auto',
'change': L.bind(this.map.checkDepends, this.map),
'disabled': (this.disabled != null) ? this.disabled : this.map.readonly
})
]),
@ -481,7 +533,7 @@ var CBIWifiFrequencyValue = form.Value.extend({
cfgvalue: function(section_id) {
return [
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')
];
},
@ -498,7 +550,12 @@ var CBIWifiFrequencyValue = form.Value.extend({
write: function(section_id, value) {
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]);
}
});
@ -883,6 +940,9 @@ return view.extend({
o.ucisection = s.section;
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.wifiNetwork = radioNet;
@ -895,9 +955,6 @@ return view.extend({
o.value('2', _('High'));
o.value('3', _('Very High'));
o = ss.taboption('advanced', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates'));
o.default = o.enabled;
o = ss.taboption('advanced', form.Value, 'distance', _('Distance Optimization'), _('Distance to farthest network member in meters.'));
o.datatype = 'or(range(0,114750),"auto")';
o.placeholder = 'auto';
@ -983,8 +1040,17 @@ return view.extend({
return net || network.addNetwork(name, { proto: 'none' });
}, this, values[i])).then(L.bind(function(dev, net) {
if (net) {
if (!net.isEmpty())
if (!net.isEmpty()) {
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);
}
}, this, dev)));
@ -1014,7 +1080,7 @@ return view.extend({
bssid.depends('mode', 'sta');
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-wds');
o.value('', _('disable'));
@ -1069,11 +1135,11 @@ return view.extend({
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-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-wds');
o.default = o.enabled;
@ -1609,8 +1675,7 @@ return view.extend({
if (hwtype == 'mac80211') {
// ieee802.11w options
if (L.hasSystemFeature('hostapd', '11w')) {
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 = 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.value('', _('Disabled'));
o.value('1', _('Optional'));
o.value('2', _('Required'));
@ -1635,7 +1700,6 @@ return view.extend({
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.'));
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' }, [
E('tr', { 'class': 'tr table-titles' }, [
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' }, _('Signal / Noise')),
E('th', { 'class': 'th' }, _('RX Rate / TX Rate'))

View file

@ -4,7 +4,11 @@
"read": {
"cgi-io": [ "exec" ],
"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": {
"file": [ "exec" ],

View file

@ -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

View file

@ -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'));
}
});

View file

@ -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
View file

View file

View file

View file

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 535 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 582 B

Before After
Before After

View file

View file

View file

@ -13,6 +13,7 @@ _save_macaddr() {
local _macaddr
uci -q get "network.$1_dev.ifname" >/dev/null && {
_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
uci -q set network.$1_dev.macaddr="$(uci -q get network.$1.macaddr)"
else
@ -25,7 +26,8 @@ _save_macaddr() {
}
[ -z "$(uci -q get network.$1.macaddr)" ] && {
_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}')
[ -n "$_macaddr" ] && {
uci -q set network.$1.macaddr=$_macaddr
@ -42,8 +44,6 @@ _delete_device() {
uci -q batch <<-EOF
delete network.$1
commit network
delete macvlan.$1
commit macvlan
EOF
}
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)
[ -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)
uci set network.$1.ifname=$1
uci set network.$1.device=$1
uci -q commit network
return 0
}
@ -75,9 +75,11 @@ _setup_interface() {
uci -q batch <<-EOF
set network.$1_dev=device
set network.$1_dev.name=$1
set network.$1_dev.type=macvlan
set network.$1_dev.type='macvlan'
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.type=macvlan
set network.$1.defaultroute=0
@ -86,7 +88,7 @@ _setup_interface() {
#_macaddr=$(uci -q get "network.$1.macaddr")
#_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 commit network
}

View file

@ -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

View file

@ -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))

View file

@ -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]);

View file

@ -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 "[<";
}

View file

@ -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@

View file

@ -8,13 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mlvpn
PKG_VERSION:=2263bab
PKG_VERSION:=8aa1b16
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git
PKG_SOURCE_VERSION:=2263bab7e5f983e1daa33887b53120c12646398f
PKG_SOURCE_DATE:=2020-12-16
PKG_SOURCE_VERSION:=ddafba3c0bd63e0d733d3d5a4532e275714991b3
PKG_SOURCE_DATE:=2021-10-28
#PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git
#PKG_SOURCE_VERSION:=8f9720978b28c1954f9f229525333547283316d2
#PKG_SOURCE_DATE:=2018-09-03

View file

@ -8,3 +8,5 @@ config mlvpn 'general'
option host '128.128.128.128'
option firstport '65201'
option interface_name 'mlvpn0'
option loss_tolerance '50'
option latency_tolerance '300'

View file

@ -13,7 +13,8 @@ interface_multipath_settings() {
mode="$(uci -q get openmptcprouter.$config.multipath)"
}
[ "$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"]')
[ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]')
[ -z "$ifname" ] && return 1
@ -32,21 +33,22 @@ interface_multipath_settings() {
}
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
interface_name="$(uci -q get mlvpn.general.interface_name)"
timeout="$(uci -q get mlvpn.general.timeout)"
mode="$(uci -q get mlvpn.general.mode)"
password="$(uci -q get mlvpn.general.password)"
reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)"
loss_tolerence="$(uci -q get mlvpn.general.loss_tolerence)"
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)"
[ -z "$cleartext_data" ] && cleartext_data="0"
host="$(uci -q get mlvpn.general.host)"
firstport="$(uci -q get mlvpn.general.firstport)"
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
fi
@ -58,7 +60,8 @@ start() {
timeout = ${timeout}
reorder_buffer = yes
reorder_buffer_size = ${reorder_buffer_size}
loss_tolerence = ${loss_tolerence}
loss_tolerence = ${loss_tolerance}
latency_tolerence = ${latency_tolerance}
cleartext_data = ${cleartext_data}
password = "${password}"
mtu = 1452

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