mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 11:01:50 +00:00
Fix merge conflict from develop
This commit is contained in:
commit
49633fde48
192 changed files with 36238 additions and 4030 deletions
|
@ -31,7 +31,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -94,7 +94,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -155,7 +155,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -216,7 +216,68 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
- cache-{{ checksum "/tmp/cache-version" }}
|
||||
- cache-{{ checksum "/tmp/cache-target" }}
|
||||
|
||||
- run:
|
||||
name: Build toolchain
|
||||
no_output_timeout: 40m
|
||||
command: |
|
||||
git clone https://github.com/ysurac/openmptcprouter || true
|
||||
cd openmptcprouter
|
||||
git checkout ${CIRCLE_BRANCH:-$CIRCLE_TAG} || true
|
||||
git pull || true
|
||||
export OMR_PATH="$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/${CIRCLE_BRANCH:-$CIRCLE_TAG}"
|
||||
export OMR_FEED_URL="$CIRCLE_REPOSITORY_URL"
|
||||
export OMR_FEED_SRC="${CIRCLE_BRANCH:-$CIRCLE_TAG}"
|
||||
pyenv global 3.5.2
|
||||
sh build.sh prepare {tools,toolchain}/install -j2
|
||||
echo -e "$OMR_PRIVKEY" > ~/openmptcprouter/$OMR_TARGET/source/key-build
|
||||
echo -e "$OMR_PUBKEY" > ~/openmptcprouter/$OMR_TARGET/source/key-build.pub
|
||||
|
||||
- save_cache:
|
||||
key: cache-{{ checksum "/tmp/cache-target" }}
|
||||
paths:
|
||||
- openmptcprouter
|
||||
|
||||
- run:
|
||||
name: Build
|
||||
no_output_timeout: 40m
|
||||
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/$OMR_TARGET/source package/{compile,install,index} target/compile -j2 package/compile -j2 target/install -j2
|
||||
|
||||
- run:
|
||||
name: Deploy
|
||||
command: |
|
||||
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${CIRCLE_TAG:-$OMR_KERNEL}/$OMR_TARGET
|
||||
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/${CIRCLE_BRANCH:-release}/${CIRCLE_TAG:-$OMR_KERNEL}/$OMR_TARGET
|
||||
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
|
||||
|
||||
- save_cache:
|
||||
key: cache-{{ checksum "/tmp/cache-version" }}
|
||||
paths:
|
||||
- openmptcprouter
|
||||
|
||||
build_r2s:
|
||||
machine:
|
||||
image: ubuntu-1604:201903-01
|
||||
|
||||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: r2s
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
steps:
|
||||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -277,7 +338,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -338,7 +399,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -399,7 +460,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -463,7 +524,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -523,7 +584,7 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 106 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 107 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 108 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
|
@ -652,6 +713,15 @@ workflows:
|
|||
branches:
|
||||
only:
|
||||
- develop
|
||||
- build_r2s:
|
||||
requires:
|
||||
- prepare
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
branches:
|
||||
only:
|
||||
- develop
|
||||
- build_rpi2:
|
||||
requires:
|
||||
- prepare
|
||||
|
|
149
.github/workflows/main.yml
vendored
Normal file
149
.github/workflows/main.yml
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
name: openmptcprouter
|
||||
on: [push]
|
||||
|
||||
env:
|
||||
REPO_URL: 'https://github.com/ysurac/openmptcprouter'
|
||||
OMR_KERNEL: '5.4'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
OMR_TARGET: [bpi-r2, bpi-r64, rpi2, rpi4, wrt32x, espressobin, r2s, rpi3, wrt3200acm, x86, x86_64]
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
|
||||
steps:
|
||||
- name: Branch name
|
||||
id: branch_name
|
||||
run: |
|
||||
echo ::set-output name=SOURCE_NAME::${GITHUB_REF#refs/*/}
|
||||
echo ::set-output name=SOURCE_BRANCH::${GITHUB_REF#refs/heads/}
|
||||
echo ::set-output name=SOURCE_TAG::${GITHUB_REF#refs/tags/}
|
||||
echo ::set-output name=WORKSPACE::${GITHUB_WORKSPACE}
|
||||
- name: Prepare
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler
|
||||
- name: Free disk space
|
||||
run: |
|
||||
df -h
|
||||
sudo swapoff -a >/dev/null 2>&1 || true
|
||||
sudo rm -f /swapfile >/dev/null 2>&1 || true
|
||||
sudo apt-get autoremove -y >/dev/null 2>&1 || true
|
||||
sudo apt-get autoclean -y >/dev/null 2>&1 || true
|
||||
sudo rm -rf "/usr/local/share/boost" >/dev/null 2>&1 || true
|
||||
sudo rm -rf "$AGENT_TOOLSDIRECTORY" >/dev/null 2>&1 || true
|
||||
sudo docker rmi $(docker images -qf "dangling=true") >/dev/null 2>&1 || true
|
||||
df -h
|
||||
- name: Clone source code
|
||||
working-directory: ../../
|
||||
env:
|
||||
REPO_URL: https://github.com/ysurac/openmptcprouter
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
GITHUB_WORKSPACE: ${{ steps.branch_name.outputs.WORKSPACE }}
|
||||
run: |
|
||||
git clone --depth 1 $REPO_URL omr
|
||||
cd omr
|
||||
if [ "$SOURCE_NAME" != "Test-Github-Actions" ] && [ "$SOURCE_NAME" != "develop" ]; then
|
||||
git checkout master
|
||||
else
|
||||
git checkout develop
|
||||
fi
|
||||
git pull
|
||||
pwd
|
||||
- name: Build toolchain
|
||||
working-directory: ../../omr
|
||||
env:
|
||||
OMR_FEED_URL: https://github.com/ysurac/openmptcprouter-feeds
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
OMR_TARGET: ${{ matrix.OMR_TARGET }}
|
||||
OMR_HOST: ${{ secrets.OMR_HOST }}
|
||||
OMR_PORT: ${{ secrets.OMR_PORT }}
|
||||
run: |
|
||||
OMR_FEED_SRC="${SOURCE_NAME}" sh build.sh prepare {tools,toolchain}/install -j$(nproc) || OMR_FEED_SRC="${SOURCE_NAME}" sh build.sh prepare {tools,toolchain}/install -j1 V=s
|
||||
#echo -e "${{ secrets.OMR_PRIVKEY }}" > $OMR_TARGET/source/key-build
|
||||
#echo -e "${{ secrets.OMR_PUBKEY }}" > $OMR_TARGET/source/key-build.pub
|
||||
- name: Build packages
|
||||
working-directory: ../../omr
|
||||
env:
|
||||
OMR_TARGET: ${{ matrix.OMR_TARGET }}
|
||||
run: |
|
||||
make IGNORE_ERRORS=m -C $OMR_TARGET/source package/{compile,install,index} -j$(nproc) || make IGNORE_ERRORS=m -C $OMR_TARGET/source package/{compile,install,index} -j1 V=s
|
||||
- name: Build image
|
||||
working-directory: ../../omr
|
||||
env:
|
||||
OMR_TARGET: ${{ matrix.OMR_TARGET }}
|
||||
run: |
|
||||
make IGNORE_ERRORS=m -C $OMR_TARGET/source target/install -j$(nproc) || make IGNORE_ERRORS=m -C $OMR_TARGET/source target/install -j1 V=s
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ matrix.OMR_TARGET }}
|
||||
path: /home/runner/work/omr/${{ matrix.OMR_TARGET }}/source/bin
|
||||
- if: steps.branch_name.outputs.SOURCE_BRANCH == ''
|
||||
name: Deploy - Create directory
|
||||
uses: ysurac/ssh-action@master
|
||||
env:
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
SOURCE_BRANCH: ${{ steps.branch_name.outputs.SOURCE_BRANCH }}
|
||||
SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }}
|
||||
with:
|
||||
command: |
|
||||
mkdir -p deploy/release/${{env.SOURCE_TAG}}/${{matrix.OMR_TARGET}}
|
||||
host: ${{ secrets.OMR_DEPLOY_HOST }}
|
||||
user: deploy
|
||||
port: ${{ secrets.OMR_DEPLOY_PORT }}
|
||||
key: ${{ secrets.PRIVATE_KEY }}
|
||||
- if: steps.branch_name.outputs.SOURCE_BRANCH != ''
|
||||
name: Deploy - Create directory
|
||||
uses: ysurac/ssh-action@master
|
||||
env:
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
SOURCE_BRANCH: ${{ steps.branch_name.outputs.SOURCE_BRANCH }}
|
||||
SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }}
|
||||
with:
|
||||
command: |
|
||||
mkdir -p deploy/${{env.SOURCE_BRANCH}}/${{env.OMR_KERNEL}}/${{matrix.OMR_TARGET}}
|
||||
host: ${{ secrets.OMR_DEPLOY_HOST }}
|
||||
user: deploy
|
||||
port: ${{ secrets.OMR_DEPLOY_PORT }}
|
||||
key: ${{ secrets.PRIVATE_KEY }}
|
||||
- name: Move binaries for rsync
|
||||
working-directory: ../../omr
|
||||
env:
|
||||
OMR_TARGET: ${{ matrix.OMR_TARGET }}
|
||||
GITHUB_WORKSPACE: ${{ steps.branch_name.outputs.WORKSPACE }}
|
||||
run: |
|
||||
mv ${OMR_TARGET}/source/bin ${GITHUB_WORKSPACE}/
|
||||
- if: steps.branch_name.outputs.SOURCE_BRANCH == ''
|
||||
name: Deploy - Upload via rsync
|
||||
uses: ysurac/action-rsync@master
|
||||
env:
|
||||
ARGS: -av --delete-after
|
||||
TARGET: deploy/release/${{steps.branch_name.outputs.SOURCE_TAG}}/${{matrix.OMR_TARGET}}
|
||||
SOURCE: ./bin/
|
||||
KEY: ${{ secrets.PRIVATE_KEY }}
|
||||
USER: deploy
|
||||
HOST: ${{ secrets.OMR_DEPLOY_HOST }}
|
||||
PORT: ${{ secrets.OMR_DEPLOY_PORT }}
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
SOURCE_BRANCH: ${{ steps.branch_name.outputs.SOURCE_BRANCH }}
|
||||
SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }}
|
||||
GITHUB_WORKSPACE: ${{ steps.branch_name.outputs.WORKSPACE }}
|
||||
- if: steps.branch_name.outputs.SOURCE_BRANCH != ''
|
||||
name: Deploy - Upload via rsync
|
||||
uses: ysurac/action-rsync@master
|
||||
env:
|
||||
ARGS: -av --delete-after
|
||||
TARGET: deploy/${{ steps.branch_name.outputs.SOURCE_BRANCH }}/${{env.OMR_KERNEL}}/${{matrix.OMR_TARGET}}
|
||||
SOURCE: ./bin/
|
||||
KEY: ${{ secrets.PRIVATE_KEY }}
|
||||
USER: deploy
|
||||
HOST: ${{ secrets.OMR_DEPLOY_HOST }}
|
||||
PORT: ${{ secrets.OMR_DEPLOY_PORT }}
|
||||
SOURCE_NAME: ${{ steps.branch_name.outputs.SOURCE_NAME }}
|
||||
SOURCE_BRANCH: ${{ steps.branch_name.outputs.SOURCE_BRANCH }}
|
||||
SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }}
|
||||
GITHUB_WORKSPACE: ${{ steps.branch_name.outputs.WORKSPACE }}
|
||||
|
19
.github/workflows/stale.yml
vendored
Normal file
19
.github/workflows/stale.yml
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
name: Mark stale issues and pull requests
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3.0.10
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-message: "This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days"
|
||||
stale-pr-message: 'It has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days'
|
||||
days-before-stale: 120
|
||||
days-before-close: 5
|
||||
exempt-issue-labels: 'work-in-progress,enhancement'
|
||||
exempt-pr-labels: 'work-in-progress,enhancement'
|
|
@ -164,4 +164,8 @@ This is used to bypass a protocol
|
|||
|
||||
|
||||
# License
|
||||
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FYsurac%2Fopenmptcprouter-feeds.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FYsurac%2Fopenmptcprouter-feeds?ref=badge_large)
|
||||
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FYsurac%2Fopenmptcprouter-feeds.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FYsurac%2Fopenmptcprouter-feeds?ref=badge_large)
|
||||
|
||||
## Translation status
|
||||
|
||||
[![Translation status](https://weblate.openmptcprouter.com/widgets/omr/-/multi-auto.svg)](https://weblate.openmptcprouter.com/engage/omr/?utm_source=widget)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bcm27xx-eeprom
|
||||
PKG_VERSION:=1a44b1330805663c292de8ce818065bbe9f2e130
|
||||
PKG_VERSION:=1a099a5a9de4cbd71a68afaa6421fd3b9cf3ef2e
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=d18573a4026578ed20cd7e3ac7df029dbef7fd271729a60cd80abae2235eca25
|
||||
PKG_HASH:=c991a69fb92f60fb03cb0d0d482dafd162ae1ad0fb279509d9e2489055891ac3
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause Custom
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
@ -21,7 +21,7 @@ TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
|||
define Package/bcm27xx-eeprom
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
DEPENDS:=bcm27xx-userland +blkid +pciutils +python3-light
|
||||
DEPENDS:=bcm27xx-userland +blkid +pciutils +python3-light +coreutils-od
|
||||
TITLE:=BCM27xx EEPROM tools
|
||||
endef
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/angt/glorytun.git
|
||||
PKG_SOURCE_VERSION:=3622f928caf03709c4031a34feec85c623bc5281
|
||||
PKG_SOURCE_VERSION:=97607fdf5c6c33df512ed85190a1fd93b5f45e77
|
||||
PKG_NAME:=glorytun-udp
|
||||
PKG_VERSION:=0.3.4-$(PKG_SOURCE_VERSION)
|
||||
PKG_RELEASE:=23
|
||||
|
|
204
golang/golang-build.sh
Normal file
204
golang/golang-build.sh
Normal file
|
@ -0,0 +1,204 @@
|
|||
#!/bin/sh
|
||||
|
||||
nl="
|
||||
"
|
||||
|
||||
log() {
|
||||
# shellcheck disable=SC2039
|
||||
local IFS=" "
|
||||
printf '%s\n' "$*"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
# shellcheck disable=SC2039
|
||||
local IFS=" "
|
||||
printf 'Error: %s\n' "$*" >&2
|
||||
}
|
||||
|
||||
link_contents() {
|
||||
# shellcheck disable=SC2039
|
||||
local src="$1" dest="$2" IFS="$nl" dirs dir base
|
||||
|
||||
if [ -n "$(find "$src" -mindepth 1 -maxdepth 1 -name "*.go" -not -type d)" ]; then
|
||||
log_error "$src is already a Go library"
|
||||
return 1
|
||||
fi
|
||||
|
||||
dirs="$(find "$src" -mindepth 1 -maxdepth 1 -type d)"
|
||||
for dir in $dirs; do
|
||||
base="${dir##*/}"
|
||||
if [ -d "$dest/$base" ]; then
|
||||
case "$dir" in
|
||||
*$GO_BUILD_DEPENDS_SRC/$GO_PKG)
|
||||
log "$GO_PKG is already installed. Please check for circular dependencies."
|
||||
;;
|
||||
*)
|
||||
link_contents "$src/$base" "$dest/$base"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
log "...${src#$GO_BUILD_DEPENDS_SRC}/$base"
|
||||
ln -sf "$src/$base" "$dest/$base"
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
configure() {
|
||||
# shellcheck disable=SC2039
|
||||
local files code testdata gomod pattern extra IFS file dest
|
||||
|
||||
cd "$BUILD_DIR" || return 1
|
||||
|
||||
files="$(find ./ -path "*/.*" -prune -o -not -type d -print)"
|
||||
|
||||
if [ "$GO_INSTALL_ALL" != 1 ]; then
|
||||
code="$(printf '%s\n' "$files" | grep '\.\(c\|cc\|cpp\|go\|h\|hh\|hpp\|proto\|s\)$')"
|
||||
testdata="$(printf '%s\n' "$files" | grep '/testdata/')"
|
||||
gomod="$(printf '%s\n' "$files" | grep '/go\.\(mod\|sum\)$')"
|
||||
|
||||
for pattern in $GO_INSTALL_EXTRA; do
|
||||
extra="$(printf '%s\n' "$extra"; printf '%s\n' "$files" | grep -e "$pattern")"
|
||||
done
|
||||
|
||||
files="$(printf '%s\n%s\n%s\n%s\n' "$code" "$testdata" "$gomod" "$extra" | grep -v '^[[:space:]]*$' | sort -u)"
|
||||
fi
|
||||
|
||||
IFS="$nl"
|
||||
|
||||
log "Copying files from $BUILD_DIR into $GO_BUILD_DIR/src/$GO_PKG"
|
||||
mkdir -p "$GO_BUILD_DIR/src"
|
||||
for file in $files; do
|
||||
log "${file#./}"
|
||||
dest="$GO_BUILD_DIR/src/$GO_PKG/${file#./}"
|
||||
mkdir -p "${dest%/*}"
|
||||
cp -fpR "$file" "$dest"
|
||||
done
|
||||
log
|
||||
|
||||
if [ "$GO_SOURCE_ONLY" != 1 ]; then
|
||||
if [ -d "$GO_BUILD_DEPENDS_SRC" ]; then
|
||||
log "Symlinking directories from $GO_BUILD_DEPENDS_SRC into $GO_BUILD_DIR/src"
|
||||
link_contents "$GO_BUILD_DEPENDS_SRC" "$GO_BUILD_DIR/src"
|
||||
else
|
||||
log "$GO_BUILD_DEPENDS_SRC does not exist, skipping symlinks"
|
||||
fi
|
||||
else
|
||||
log "Not building binaries, skipping symlinks"
|
||||
fi
|
||||
log
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
build() {
|
||||
# shellcheck disable=SC2039
|
||||
local modargs pattern targets retval
|
||||
|
||||
cd "$GO_BUILD_DIR" || return 1
|
||||
|
||||
if [ -f "$BUILD_DIR/go.mod" ] ; then
|
||||
mkdir -p "$GO_MOD_CACHE_DIR"
|
||||
modargs="$GO_MOD_ARGS"
|
||||
fi
|
||||
|
||||
log "Finding targets"
|
||||
# shellcheck disable=SC2086
|
||||
targets="$(go list $modargs $GO_BUILD_PKG)"
|
||||
for pattern in $GO_EXCLUDES; do
|
||||
targets="$(printf '%s\n' "$targets" | grep -v "$pattern")"
|
||||
done
|
||||
log
|
||||
|
||||
if [ "$GO_GO_GENERATE" = 1 ]; then
|
||||
log "Calling go generate"
|
||||
# shellcheck disable=SC2086
|
||||
GOOS='' GOARCH='' GO386='' GOARM='' GOMIPS='' GOMIPS64='' \
|
||||
go generate -v $targets
|
||||
log
|
||||
fi
|
||||
|
||||
if [ "$GO_SOURCE_ONLY" = 1 ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
log "Building targets"
|
||||
mkdir -p "$GO_BUILD_DIR/bin" "$GO_BUILD_CACHE_DIR"
|
||||
# shellcheck disable=SC2086
|
||||
go install $modargs "$@" $targets
|
||||
retval="$?"
|
||||
log
|
||||
|
||||
if [ "$retval" -eq 0 ] && [ -z "$(find "$GO_BUILD_BIN_DIR" -maxdepth 0 -type d -not -empty 2>/dev/null)" ]; then
|
||||
log_error "No binaries were built"
|
||||
retval=1
|
||||
fi
|
||||
|
||||
if [ "$retval" -ne 0 ]; then
|
||||
cache_cleanup
|
||||
fi
|
||||
|
||||
return "$retval"
|
||||
}
|
||||
|
||||
install_bin() {
|
||||
# shellcheck disable=SC2039
|
||||
local dest="$1"
|
||||
install -d -m0755 "$dest/$GO_INSTALL_BIN_PATH"
|
||||
install -m0755 "$GO_BUILD_BIN_DIR"/* "$dest/$GO_INSTALL_BIN_PATH/"
|
||||
}
|
||||
|
||||
install_src() {
|
||||
# shellcheck disable=SC2039
|
||||
local dest="$1" dir="${GO_PKG%/*}"
|
||||
install -d -m0755 "$dest/$GO_BUILD_DEPENDS_PATH/src/$dir"
|
||||
cp -fpR "$GO_BUILD_DIR/src/$GO_PKG" "$dest/$GO_BUILD_DEPENDS_PATH/src/$dir/"
|
||||
}
|
||||
|
||||
cache_cleanup() {
|
||||
if ! [ -d "$GO_MOD_CACHE_DIR" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# in case go is called without -modcacherw
|
||||
find "$GO_MOD_CACHE_DIR" -type d -not -perm -u+w -exec chmod u+w '{}' +
|
||||
|
||||
if [ -n "$CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE" ]; then
|
||||
find "$GO_MOD_CACHE_DIR" -type d -not -perm -go+rx -exec chmod go+rx '{}' +
|
||||
find "$GO_MOD_CACHE_DIR" -not -type d -not -perm -go+r -exec chmod go+r '{}' +
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
if [ "$#" -lt 1 ]; then
|
||||
log_error "Missing command"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
command="$1"
|
||||
shift 1
|
||||
|
||||
case "$command" in
|
||||
configure)
|
||||
configure
|
||||
;;
|
||||
build)
|
||||
build "$@"
|
||||
;;
|
||||
install_bin)
|
||||
install_bin "$@"
|
||||
;;
|
||||
install_src)
|
||||
install_src "$@"
|
||||
;;
|
||||
cache_cleanup)
|
||||
cache_cleanup
|
||||
;;
|
||||
*)
|
||||
log_error "Invalid command \"$command\""
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2018 Jeffery To
|
||||
# Copyright (C) 2018, 2020 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -24,8 +24,8 @@ endef
|
|||
# $(4) additional environment variables (optional)
|
||||
define GoCompiler/Default/Make
|
||||
( \
|
||||
cd $(1)/src ; \
|
||||
$(if $(2),GOROOT_FINAL=$(2)/lib/go-$(3)) \
|
||||
cd "$(1)/src" ; \
|
||||
$(if $(2),GOROOT_FINAL="$(2)/lib/go-$(3)") \
|
||||
$(4) \
|
||||
$(BASH) make.bash --no-banner ; \
|
||||
)
|
||||
|
@ -34,8 +34,8 @@ endef
|
|||
# $(1) destination prefix
|
||||
# $(2) go version id
|
||||
define GoCompiler/Default/Install/make-dirs
|
||||
$(INSTALL_DIR) $(1)/lib/go-$(2)
|
||||
$(INSTALL_DIR) $(1)/share/go-$(2)
|
||||
$(INSTALL_DIR) "$(1)/lib/go-$(2)"
|
||||
$(INSTALL_DIR) "$(1)/share/go-$(2)"
|
||||
endef
|
||||
|
||||
# $(1) source go root
|
||||
|
@ -43,48 +43,49 @@ endef
|
|||
# $(3) go version id
|
||||
# $(4) file/directory name
|
||||
define GoCompiler/Default/Install/install-share-data
|
||||
$(CP) $(1)/$(4) $(2)/share/go-$(3)/
|
||||
$(LN) ../../share/go-$(3)/$(4) $(2)/lib/go-$(3)/
|
||||
$(CP) "$(1)/$(4)" "$(2)/share/go-$(3)/"
|
||||
$(LN) "../../share/go-$(3)/$(4)" "$(2)/lib/go-$(3)/"
|
||||
endef
|
||||
|
||||
# $(1) source go root
|
||||
# $(2) destination prefix
|
||||
# $(3) go version id
|
||||
# $(4) GOOS_GOARCH
|
||||
# $(5) install suffix (optional)
|
||||
define GoCompiler/Default/Install/Bin
|
||||
$(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
|
||||
|
||||
$(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),api)
|
||||
|
||||
$(INSTALL_DATA) -p $(1)/VERSION $(2)/lib/go-$(3)/
|
||||
$(INSTALL_DATA) -p "$(1)/VERSION" "$(2)/lib/go-$(3)/"
|
||||
|
||||
for file in AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE PATENTS README README.md; do \
|
||||
if [ -f $(1)/$$$$file ]; then \
|
||||
$(INSTALL_DATA) -p $(1)/$$$$file $(2)/share/go-$(3)/ ; \
|
||||
for file in AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE PATENTS README.md SECURITY.md; do \
|
||||
if [ -f "$(1)/$$$$file" ]; then \
|
||||
$(INSTALL_DATA) -p "$(1)/$$$$file" "$(2)/share/go-$(3)/" ; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
$(INSTALL_DIR) $(2)/lib/go-$(3)/bin
|
||||
$(INSTALL_DIR) "$(2)/lib/go-$(3)/bin"
|
||||
|
||||
ifeq ($(4),$(GO_HOST_OS_ARCH))
|
||||
$(INSTALL_BIN) -p $(1)/bin/* $(2)/lib/go-$(3)/bin/
|
||||
$(INSTALL_BIN) -p "$(1)/bin"/* "$(2)/lib/go-$(3)/bin/"
|
||||
else
|
||||
$(INSTALL_BIN) -p $(1)/bin/$(4)/* $(2)/lib/go-$(3)/bin/
|
||||
$(INSTALL_BIN) -p "$(1)/bin/$(4)"/* "$(2)/lib/go-$(3)/bin/"
|
||||
endif
|
||||
|
||||
$(INSTALL_DIR) $(2)/lib/go-$(3)/pkg
|
||||
$(CP) $(1)/pkg/$(4) $(2)/lib/go-$(3)/pkg/
|
||||
$(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg"
|
||||
$(CP) "$(1)/pkg/$(4)$(if $(5),_$(5))" "$(2)/lib/go-$(3)/pkg/"
|
||||
|
||||
$(INSTALL_DIR) $(2)/lib/go-$(3)/pkg/tool/$(4)
|
||||
$(INSTALL_BIN) -p $(1)/pkg/tool/$(4)/* $(2)/lib/go-$(3)/pkg/tool/$(4)/
|
||||
$(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg/tool/$(4)"
|
||||
$(INSTALL_BIN) -p "$(1)/pkg/tool/$(4)"/* "$(2)/lib/go-$(3)/pkg/tool/$(4)/"
|
||||
endef
|
||||
|
||||
# $(1) destination prefix
|
||||
# $(2) go version id
|
||||
define GoCompiler/Default/Install/BinLinks
|
||||
$(INSTALL_DIR) $(1)/bin
|
||||
$(LN) ../lib/go-$(2)/bin/go $(1)/bin/go
|
||||
$(LN) ../lib/go-$(2)/bin/gofmt $(1)/bin/gofmt
|
||||
$(INSTALL_DIR) "$(1)/bin"
|
||||
$(LN) "../lib/go-$(2)/bin/go" "$(1)/bin/go"
|
||||
$(LN) "../lib/go-$(2)/bin/gofmt" "$(1)/bin/gofmt"
|
||||
endef
|
||||
|
||||
# $(1) source go root
|
||||
|
@ -110,29 +111,29 @@ define GoCompiler/Default/Install/Src
|
|||
$(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),test)
|
||||
|
||||
$(FIND) \
|
||||
$(2)/share/go-$(3)/src/ \
|
||||
\! -type d -a \( -name '*.bat' -o -name '*.rc' \) \
|
||||
"$(2)/share/go-$(3)/src/" \
|
||||
\! -type d -a \( -name "*.bat" -o -name "*.rc" \) \
|
||||
-delete
|
||||
|
||||
if [ -d $(1)/pkg/include ]; then \
|
||||
$(INSTALL_DIR) $(2)/lib/go-$(3)/pkg ; \
|
||||
$(INSTALL_DIR) $(2)/share/go-$(3)/pkg ; \
|
||||
$(CP) $(1)/pkg/include $(2)/share/go-$(3)/pkg/ ; \
|
||||
$(LN) ../../../share/go-$(3)/pkg/include $(2)/lib/go-$(3)/pkg/ ; \
|
||||
if [ -d "$(1)/pkg/include" ]; then \
|
||||
$(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg" ; \
|
||||
$(INSTALL_DIR) "$(2)/share/go-$(3)/pkg" ; \
|
||||
$(CP) "$(1)/pkg/include" "$(2)/share/go-$(3)/pkg/" ; \
|
||||
$(LN) "../../../share/go-$(3)/pkg/include" "$(2)/lib/go-$(3)/pkg/" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# $(1) destination prefix
|
||||
# $(2) go version id
|
||||
define GoCompiler/Default/Uninstall
|
||||
rm -rf $(1)/lib/go-$(2)
|
||||
rm -rf $(1)/share/go-$(2)
|
||||
rm -rf "$(1)/lib/go-$(2)"
|
||||
rm -rf "$(1)/share/go-$(2)"
|
||||
endef
|
||||
|
||||
# $(1) destination prefix
|
||||
define GoCompiler/Default/Uninstall/BinLinks
|
||||
rm -f $(1)/bin/go
|
||||
rm -f $(1)/bin/gofmt
|
||||
rm -f "$(1)/bin/go"
|
||||
rm -f "$(1)/bin/gofmt"
|
||||
endef
|
||||
|
||||
|
||||
|
@ -141,6 +142,7 @@ endef
|
|||
# $(3) destination prefix
|
||||
# $(4) go version id
|
||||
# $(5) GOOS_GOARCH
|
||||
# $(6) install suffix (optional)
|
||||
define GoCompiler/AddProfile
|
||||
|
||||
# $$(1) valid GOOS_GOARCH combinations
|
||||
|
@ -155,7 +157,7 @@ define GoCompiler/AddProfile
|
|||
|
||||
# $$(1) override install prefix (optional)
|
||||
define GoCompiler/$(1)/Install/Bin
|
||||
$$(call GoCompiler/Default/Install/Bin,$(2),$$(or $$(1),$(3)),$(4),$(5))
|
||||
$$(call GoCompiler/Default/Install/Bin,$(2),$$(or $$(1),$(3)),$(4),$(5),$(6))
|
||||
endef
|
||||
|
||||
# $$(1) override install prefix (optional)
|
||||
|
|
220
golang/golang-host-build.mk
Normal file
220
golang/golang-host-build.mk
Normal file
|
@ -0,0 +1,220 @@
|
|||
#
|
||||
# Copyright (C) 2020 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
ifeq ($(origin GO_INCLUDE_DIR),undefined)
|
||||
GO_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
|
||||
endif
|
||||
|
||||
include $(GO_INCLUDE_DIR)/golang-values.mk
|
||||
|
||||
|
||||
# these variables have the same meanings as in golang-package.mk
|
||||
GO_HOST_INSTALL_EXTRA?=$(GO_PKG_INSTALL_EXTRA)
|
||||
GO_HOST_INSTALL_ALL?=$(GO_PKG_INSTALL_ALL)
|
||||
GO_HOST_SOURCE_ONLY?=$(GO_PKG_SOURCE_ONLY)
|
||||
GO_HOST_BUILD_PKG?=$(GO_PKG_BUILD_PKG)
|
||||
GO_HOST_EXCLUDES?=$(GO_PKG_EXCLUDES)
|
||||
GO_HOST_GO_GENERATE?=$(GO_PKG_GO_GENERATE)
|
||||
GO_HOST_GCFLAGS?=$(GO_PKG_GCFLAGS)
|
||||
GO_HOST_LDFLAGS?=$(GO_PKG_LDFLAGS)
|
||||
GO_HOST_LDFLAGS_X?=$(GO_PKG_LDFLAGS_X)
|
||||
GO_HOST_TAGS?=$(GO_PKG_TAGS)
|
||||
GO_HOST_INSTALL_BIN_PATH?=/bin
|
||||
|
||||
|
||||
# need to repeat this here in case golang-package.mk is not included
|
||||
GO_PKG_BUILD_PKG?=$(strip $(GO_PKG))/...
|
||||
|
||||
GO_HOST_WORK_DIR_NAME:=.go_work
|
||||
GO_HOST_BUILD_DIR=$(HOST_BUILD_DIR)/$(GO_HOST_WORK_DIR_NAME)/build
|
||||
GO_HOST_BUILD_BIN_DIR=$(GO_HOST_BUILD_DIR)/bin
|
||||
|
||||
GO_HOST_BUILD_DEPENDS_PATH:=/share/gocode
|
||||
GO_HOST_BUILD_DEPENDS_SRC=$(STAGING_DIR_HOSTPKG)$(GO_HOST_BUILD_DEPENDS_PATH)/src
|
||||
|
||||
GO_HOST_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
|
||||
GO_HOST_STAGING_DIR:=$(TMP_DIR)/host-stage-$(GO_HOST_DIR_NAME)
|
||||
GO_HOST_STAGING_FILES_LIST_DIR:=$(HOST_BUILD_PREFIX)/stamp
|
||||
GO_HOST_BIN_STAGING_FILES_LIST:=$(GO_HOST_STAGING_FILES_LIST_DIR)/$(GO_HOST_DIR_NAME)-bin.list
|
||||
GO_HOST_SRC_STAGING_FILES_LIST:=$(GO_HOST_STAGING_FILES_LIST_DIR)/$(GO_HOST_DIR_NAME)-src.list
|
||||
|
||||
ifeq ($(GO_HOST_PIE_SUPPORTED),1)
|
||||
GO_HOST_ENABLE_PIE:=1
|
||||
endif
|
||||
|
||||
GO_HOST_BUILD_CONFIG_VARS= \
|
||||
GO_PKG="$(strip $(GO_PKG))" \
|
||||
GO_INSTALL_EXTRA="$(strip $(GO_HOST_INSTALL_EXTRA))" \
|
||||
GO_INSTALL_ALL="$(strip $(GO_HOST_INSTALL_ALL))" \
|
||||
GO_SOURCE_ONLY="$(strip $(GO_HOST_SOURCE_ONLY))" \
|
||||
GO_BUILD_PKG="$(strip $(GO_HOST_BUILD_PKG))" \
|
||||
GO_EXCLUDES="$(strip $(GO_HOST_EXCLUDES))" \
|
||||
GO_GO_GENERATE="$(strip $(GO_HOST_GO_GENERATE))" \
|
||||
GO_INSTALL_BIN_PATH="$(strip $(GO_HOST_INSTALL_BIN_PATH))" \
|
||||
BUILD_DIR="$(HOST_BUILD_DIR)" \
|
||||
GO_BUILD_DIR="$(GO_HOST_BUILD_DIR)" \
|
||||
GO_BUILD_BIN_DIR="$(GO_HOST_BUILD_BIN_DIR)" \
|
||||
GO_BUILD_DEPENDS_PATH="$(GO_HOST_BUILD_DEPENDS_PATH)" \
|
||||
GO_BUILD_DEPENDS_SRC="$(GO_HOST_BUILD_DEPENDS_SRC)"
|
||||
|
||||
GO_HOST_MORE_CFLAGS?= \
|
||||
-Wformat -Werror=format-security \
|
||||
-fstack-protector-strong \
|
||||
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 \
|
||||
-Wl,-z,now -Wl,-z,relro \
|
||||
$(if $(GO_HOST_ENABLE_PIE),$(FPIC))
|
||||
|
||||
GO_HOST_MORE_LDFLAGS?= \
|
||||
-znow -zrelro \
|
||||
$(if $(GO_HOST_ENABLE_PIE),$(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs)
|
||||
|
||||
GO_HOST_TARGET_VARS= \
|
||||
CGO_ENABLED=1 \
|
||||
CC=gcc \
|
||||
CXX=g++ \
|
||||
PKG_CONFIG=pkg-config \
|
||||
CGO_CFLAGS="$(HOST_CFLAGS) $(GO_HOST_MORE_CFLAGS)" \
|
||||
CGO_CPPFLAGS="$(HOST_CPPFLAGS) $(GO_HOST_MORE_CPPFLAGS)" \
|
||||
CGO_CXXFLAGS="$(HOST_CFLAGS) $(GO_HOST_MORE_CFLAGS)" \
|
||||
CGO_LDFLAGS="$(HOST_LDFLAGS) $(GO_HOST_MORE_LDFLAGS)" \
|
||||
GO_GCC_HELPER_CC="$(HOSTCC)" \
|
||||
GO_GCC_HELPER_CXX="$(HOSTCXX)" \
|
||||
GO_GCC_HELPER_PATH="$$$$PATH" \
|
||||
PATH="$(STAGING_DIR_HOSTPKG)/lib/go-cross/openwrt:$$$$PATH"
|
||||
|
||||
GO_HOST_BUILD_VARS= \
|
||||
GOPATH="$(GO_HOST_BUILD_DIR)" \
|
||||
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
||||
GOMODCACHE="$(GO_MOD_CACHE_DIR)" \
|
||||
GOENV=off
|
||||
|
||||
GO_HOST_VARS= \
|
||||
$(GO_HOST_TARGET_VARS) \
|
||||
$(GO_HOST_BUILD_VARS)
|
||||
|
||||
GO_HOST_DEFAULT_LDFLAGS= \
|
||||
-linkmode external \
|
||||
-extldflags '$(patsubst -z%,-Wl$(comma)-z$(comma)%,$(HOST_LDFLAGS) $(GO_HOST_MORE_LDFLAGS))'
|
||||
|
||||
GO_HOST_CUSTOM_LDFLAGS= \
|
||||
$(GO_HOST_LDFLAGS) \
|
||||
$(patsubst %,-X %,$(GO_HOST_LDFLAGS_X))
|
||||
|
||||
GO_HOST_INSTALL_ARGS= \
|
||||
-v \
|
||||
-ldflags "all=$(GO_HOST_DEFAULT_LDFLAGS)" \
|
||||
$(if $(filter $(GO_HOST_ENABLE_PIE),1),-buildmode pie) \
|
||||
$(if $(GO_HOST_GCFLAGS),-gcflags "$(GO_HOST_GCFLAGS)") \
|
||||
$(if $(GO_HOST_CUSTOM_LDFLAGS),-ldflags "$(GO_HOST_CUSTOM_LDFLAGS) $(GO_HOST_DEFAULT_LDFLAGS)") \
|
||||
$(if $(GO_HOST_TAGS),-tags "$(GO_HOST_TAGS)")
|
||||
|
||||
define GoHost/Host/Configure
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_HOST_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh configure
|
||||
endef
|
||||
|
||||
# $(1) additional arguments for go command line (optional)
|
||||
define GoHost/Host/Compile
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_HOST_BUILD_CONFIG_VARS) \
|
||||
$(GO_HOST_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh build $(GO_HOST_INSTALL_ARGS) $(1)
|
||||
endef
|
||||
|
||||
define GoHost/Host/Install/Bin
|
||||
rm -rf "$(GO_HOST_STAGING_DIR)"
|
||||
mkdir -p "$(GO_HOST_STAGING_DIR)" "$(GO_HOST_STAGING_FILES_LIST_DIR)"
|
||||
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_HOST_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_bin "$(GO_HOST_STAGING_DIR)"
|
||||
|
||||
if [ -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ]; then \
|
||||
"$(SCRIPT_DIR)/clean-package.sh" \
|
||||
"$(GO_HOST_BIN_STAGING_FILES_LIST)" \
|
||||
"$(1)" ; \
|
||||
fi
|
||||
|
||||
cd "$(GO_HOST_STAGING_DIR)" && find ./ > "$(GO_HOST_STAGING_DIR).files"
|
||||
|
||||
$(call locked, \
|
||||
mv "$(GO_HOST_STAGING_DIR).files" "$(GO_HOST_BIN_STAGING_FILES_LIST)" && \
|
||||
$(CP) "$(GO_HOST_STAGING_DIR)"/* "$(1)/", \
|
||||
host-staging-dir \
|
||||
)
|
||||
|
||||
rm -rf "$(GO_HOST_STAGING_DIR)"
|
||||
endef
|
||||
|
||||
define GoHost/Host/Install/Src
|
||||
rm -rf "$(GO_HOST_STAGING_DIR)"
|
||||
mkdir -p "$(GO_HOST_STAGING_DIR)" "$(GO_HOST_STAGING_FILES_LIST_DIR)"
|
||||
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_HOST_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_src "$(GO_HOST_STAGING_DIR)"
|
||||
|
||||
if [ -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ]; then \
|
||||
"$(SCRIPT_DIR)/clean-package.sh" \
|
||||
"$(GO_HOST_SRC_STAGING_FILES_LIST)" \
|
||||
"$(1)" ; \
|
||||
fi
|
||||
|
||||
cd "$(GO_HOST_STAGING_DIR)" && find ./ > "$(GO_HOST_STAGING_DIR).files"
|
||||
|
||||
$(call locked, \
|
||||
mv "$(GO_HOST_STAGING_DIR).files" "$(GO_HOST_SRC_STAGING_FILES_LIST)" && \
|
||||
$(CP) "$(GO_HOST_STAGING_DIR)"/* "$(1)/", \
|
||||
host-staging-dir \
|
||||
)
|
||||
|
||||
rm -rf "$(GO_HOST_STAGING_DIR)"
|
||||
endef
|
||||
|
||||
define GoHost/Host/Install
|
||||
$(if $(filter $(GO_HOST_SOURCE_ONLY),1),, \
|
||||
$(call GoHost/Host/Install/Bin,$(1)) \
|
||||
)
|
||||
$(call GoHost/Host/Install/Src,$(1))
|
||||
endef
|
||||
|
||||
define GoHost/Host/Uninstall
|
||||
if [ -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ]; then \
|
||||
"$(SCRIPT_DIR)/clean-package.sh" \
|
||||
"$(GO_HOST_BIN_STAGING_FILES_LIST)" \
|
||||
"$(HOST_BUILD_PREFIX)" ; \
|
||||
rm -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ; \
|
||||
fi
|
||||
|
||||
if [ -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ]; then \
|
||||
"$(SCRIPT_DIR)/clean-package.sh" \
|
||||
"$(GO_HOST_SRC_STAGING_FILES_LIST)" \
|
||||
"$(HOST_BUILD_PREFIX)" ; \
|
||||
rm -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
|
||||
ifneq ($(strip $(GO_PKG)),)
|
||||
Host/Configure=$(call GoHost/Host/Configure)
|
||||
Host/Compile=$(call GoHost/Host/Compile)
|
||||
Hooks/HostCompile/Post+=Go/CacheCleanup
|
||||
Host/Uninstall=$(call GoHost/Host/Uninstall,$(1))
|
||||
endif
|
||||
|
||||
define GoHostBuild
|
||||
Host/Install=$$(call GoHost/Host/Install,$$(1))
|
||||
endef
|
||||
|
||||
define GoBinHostBuild
|
||||
Host/Install=$$(call GoHost/Host/Install/Bin,$$(1))
|
||||
endef
|
||||
|
||||
define GoSrcHostBuild
|
||||
Host/Install=$$(call GoHost/Host/Install/Src,$$(1))
|
||||
endef
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2018 Jeffery To
|
||||
# Copyright (C) 2018-2020 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -28,10 +28,12 @@ include $(GO_INCLUDE_DIR)/golang-values.mk
|
|||
# files are installed:
|
||||
#
|
||||
# * Files with one of these extensions:
|
||||
# .go, .c, .cc, .h, .hh, .proto, .s
|
||||
# .go, .c, .cc, .cpp, .h, .hh, .hpp, .proto, .s
|
||||
#
|
||||
# * Files in any 'testdata' directory
|
||||
#
|
||||
# * go.mod and go.sum, in any directory
|
||||
#
|
||||
# e.g. GO_PKG_INSTALL_EXTRA:=example.toml marshal_test.toml
|
||||
#
|
||||
#
|
||||
|
@ -54,7 +56,7 @@ include $(GO_INCLUDE_DIR)/golang-values.mk
|
|||
# GO_PKG_BUILD_PKG - list of build targets, default GO_PKG/...
|
||||
#
|
||||
# Build targets for compiling this Go package, i.e. arguments passed
|
||||
# to 'go install'
|
||||
# to 'go install'.
|
||||
#
|
||||
# e.g. GO_PKG_BUILD_PKG:=github.com/debian/ratt/cmd/...
|
||||
#
|
||||
|
@ -74,28 +76,92 @@ include $(GO_INCLUDE_DIR)/golang-values.mk
|
|||
# not necessary.
|
||||
#
|
||||
# e.g. GO_PKG_GO_GENERATE:=1
|
||||
#
|
||||
#
|
||||
# GO_PKG_GCFLAGS - list of options, default empty
|
||||
#
|
||||
# Additional go tool compile options to use when building targets.
|
||||
#
|
||||
# e.g. GO_PKG_GCFLAGS:=-N -l
|
||||
#
|
||||
#
|
||||
# GO_PKG_LDFLAGS - list of options, default empty
|
||||
#
|
||||
# Additional go tool link options to use when building targets.
|
||||
#
|
||||
# Note that the OpenWrt build system has an option to strip binaries
|
||||
# (enabled by default), so -s (Omit the symbol table and debug
|
||||
# information) and -w (Omit the DWARF symbol table) flags are not
|
||||
# necessary.
|
||||
#
|
||||
# e.g. GO_PKG_LDFLAGS:=-r dir1:dir2 -u
|
||||
#
|
||||
#
|
||||
# GO_PKG_LDFLAGS_X - list of string variable definitions, default empty
|
||||
#
|
||||
# Each definition will be passed as the parameter to the -X go tool
|
||||
# link option, i.e. -ldflags "-X importpath.name=value".
|
||||
#
|
||||
# e.g. GO_PKG_LDFLAGS_X:=main.Version=$(PKG_VERSION) main.BuildStamp=$(SOURCE_DATE_EPOCH)
|
||||
#
|
||||
#
|
||||
# GO_PKG_TAGS - list of build tags, default empty
|
||||
#
|
||||
# Build tags to consider satisfied during the build, passed as the
|
||||
# parameter to the -tags option for 'go install'.
|
||||
#
|
||||
# e.g. GO_PKG_TAGS:=release,noupgrade
|
||||
#
|
||||
#
|
||||
# GO_PKG_INSTALL_BIN_PATH - target directory path, default /usr/bin
|
||||
#
|
||||
# Directory path under "dest_dir" where binaries will be installed by
|
||||
# '$(call GoPackage/Package/Install/Bin,dest_dir)'.
|
||||
#
|
||||
# e.g. GO_PKG_INSTALL_BIN_PATH:=/sbin
|
||||
|
||||
# Credit for this package build process (GoPackage/Build/Configure and
|
||||
# GoPackage/Build/Compile) belong to Debian's dh-golang completely.
|
||||
# https://anonscm.debian.org/cgit/pkg-go/packages/dh-golang.git
|
||||
# https://salsa.debian.org/go-team/packages/dh-golang
|
||||
|
||||
|
||||
# for building packages, not user code
|
||||
GO_PKG_PATH:=/usr/share/gocode
|
||||
|
||||
GO_PKG_BUILD_PKG?=$(GO_PKG)/...
|
||||
GO_PKG_BUILD_PKG?=$(strip $(GO_PKG))/...
|
||||
GO_PKG_INSTALL_BIN_PATH?=/usr/bin
|
||||
|
||||
GO_PKG_WORK_DIR_NAME:=.go_work
|
||||
GO_PKG_WORK_DIR:=$(PKG_BUILD_DIR)/$(GO_PKG_WORK_DIR_NAME)
|
||||
GO_PKG_BUILD_DIR=$(PKG_BUILD_DIR)/$(GO_PKG_WORK_DIR_NAME)/build
|
||||
GO_PKG_BUILD_BIN_DIR=$(GO_PKG_BUILD_DIR)/bin$(if $(GO_HOST_TARGET_DIFFERENT),/$(GO_OS_ARCH))
|
||||
|
||||
GO_PKG_BUILD_DIR:=$(GO_PKG_WORK_DIR)/build
|
||||
GO_PKG_CACHE_DIR:=$(GO_PKG_WORK_DIR)/cache
|
||||
GO_PKG_TMP_DIR:=$(GO_PKG_WORK_DIR)/tmp
|
||||
GO_PKG_BUILD_DEPENDS_PATH:=/usr/share/gocode
|
||||
GO_PKG_BUILD_DEPENDS_SRC=$(STAGING_DIR)$(GO_PKG_BUILD_DEPENDS_PATH)/src
|
||||
|
||||
GO_PKG_BUILD_BIN_DIR:=$(GO_PKG_BUILD_DIR)/bin$(if \
|
||||
$(GO_HOST_TARGET_DIFFERENT),/$(GO_OS)_$(GO_ARCH))
|
||||
ifdef CONFIG_PKG_ASLR_PIE_ALL
|
||||
ifeq ($(strip $(PKG_ASLR_PIE)),1)
|
||||
ifeq ($(GO_TARGET_PIE_SUPPORTED),1)
|
||||
GO_PKG_ENABLE_PIE:=1
|
||||
else
|
||||
$(warning PIE buildmode is not supported for $(GO_OS)/$(GO_ARCH))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
GO_PKG_BUILD_DEPENDS_SRC:=$(STAGING_DIR)$(GO_PKG_PATH)/src
|
||||
ifdef CONFIG_PKG_ASLR_PIE_REGULAR
|
||||
ifeq ($(strip $(PKG_ASLR_PIE_REGULAR)),1)
|
||||
ifeq ($(GO_TARGET_PIE_SUPPORTED),1)
|
||||
GO_PKG_ENABLE_PIE:=1
|
||||
else
|
||||
$(warning PIE buildmode is not supported for $(GO_OS)/$(GO_ARCH))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef CONFIG_GOLANG_SPECTRE
|
||||
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
|
||||
GO_PKG_ENABLE_SPECTRE:=1
|
||||
else
|
||||
$(warning Spectre mitigations are not supported for $(GO_ARCH))
|
||||
endif
|
||||
endif
|
||||
|
||||
# sstrip causes corrupted section header size
|
||||
ifneq ($(CONFIG_USE_SSTRIP),)
|
||||
|
@ -105,16 +171,6 @@ ifneq ($(CONFIG_USE_SSTRIP),)
|
|||
GO_PKG_STRIP_ARGS:=--strip-all
|
||||
endif
|
||||
STRIP:=$(TARGET_CROSS)strip $(GO_PKG_STRIP_ARGS)
|
||||
RSTRIP= \
|
||||
export CROSS="$(TARGET_CROSS)" \
|
||||
$(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \
|
||||
$(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \
|
||||
$(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \
|
||||
NM="$(TARGET_CROSS)nm" \
|
||||
STRIP="$(STRIP)" \
|
||||
STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \
|
||||
PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf" \
|
||||
$(SCRIPT_DIR)/rstrip.sh
|
||||
endif
|
||||
|
||||
define GoPackage/GoSubMenu
|
||||
|
@ -123,151 +179,87 @@ define GoPackage/GoSubMenu
|
|||
CATEGORY:=Languages
|
||||
endef
|
||||
|
||||
define GoPackage/Environment
|
||||
GOOS=$(GO_OS) \
|
||||
GOARCH=$(GO_ARCH) \
|
||||
GO386=$(GO_386) \
|
||||
GOARM=$(GO_ARM) \
|
||||
GOMIPS=$(GO_MIPS) \
|
||||
GOMIPS64=$(GO_MIPS64) \
|
||||
GO_PKG_BUILD_CONFIG_VARS= \
|
||||
GO_PKG="$(strip $(GO_PKG))" \
|
||||
GO_INSTALL_EXTRA="$(strip $(GO_PKG_INSTALL_EXTRA))" \
|
||||
GO_INSTALL_ALL="$(strip $(GO_PKG_INSTALL_ALL))" \
|
||||
GO_SOURCE_ONLY="$(strip $(GO_PKG_SOURCE_ONLY))" \
|
||||
GO_BUILD_PKG="$(strip $(GO_PKG_BUILD_PKG))" \
|
||||
GO_EXCLUDES="$(strip $(GO_PKG_EXCLUDES))" \
|
||||
GO_GO_GENERATE="$(strip $(GO_PKG_GO_GENERATE))" \
|
||||
GO_INSTALL_BIN_PATH="$(strip $(GO_PKG_INSTALL_BIN_PATH))" \
|
||||
BUILD_DIR="$(PKG_BUILD_DIR)" \
|
||||
GO_BUILD_DIR="$(GO_PKG_BUILD_DIR)" \
|
||||
GO_BUILD_BIN_DIR="$(GO_PKG_BUILD_BIN_DIR)" \
|
||||
GO_BUILD_DEPENDS_PATH="$(GO_PKG_BUILD_DEPENDS_PATH)" \
|
||||
GO_BUILD_DEPENDS_SRC="$(GO_PKG_BUILD_DEPENDS_SRC)"
|
||||
|
||||
GO_PKG_TARGET_VARS= \
|
||||
GOOS="$(GO_OS)" \
|
||||
GOARCH="$(GO_ARCH)" \
|
||||
GO386="$(GO_386)" \
|
||||
GOARM="$(GO_ARM)" \
|
||||
GOMIPS="$(GO_MIPS)" \
|
||||
GOMIPS64="$(GO_MIPS64)" \
|
||||
CGO_ENABLED=1 \
|
||||
CC="$(TARGET_CC)" \
|
||||
CXX="$(TARGET_CXX)" \
|
||||
CGO_CFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CFLAGS))" \
|
||||
CGO_CPPFLAGS="$(TARGET_CPPFLAGS)" \
|
||||
CGO_CXXFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CXXFLAGS))"
|
||||
endef
|
||||
CGO_CXXFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CXXFLAGS))" \
|
||||
CGO_LDFLAGS="$(TARGET_LDFLAGS)"
|
||||
|
||||
# false if directory does not exist
|
||||
GoPackage/is_dir_not_empty=$$$$($(FIND) $(1) -maxdepth 0 -type d \! -empty 2>/dev/null)
|
||||
GO_PKG_BUILD_VARS= \
|
||||
GOPATH="$(GO_PKG_BUILD_DIR)" \
|
||||
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
||||
GOMODCACHE="$(GO_MOD_CACHE_DIR)" \
|
||||
GOENV=off
|
||||
|
||||
GoPackage/has_binaries=$(call GoPackage/is_dir_not_empty,$(GO_PKG_BUILD_BIN_DIR))
|
||||
GO_PKG_VARS= \
|
||||
$(GO_PKG_TARGET_VARS) \
|
||||
$(GO_PKG_BUILD_VARS)
|
||||
|
||||
GO_PKG_DEFAULT_GCFLAGS= \
|
||||
$(if $(GO_PKG_ENABLE_SPECTRE),-spectre all)
|
||||
|
||||
GO_PKG_DEFAULT_ASMFLAGS= \
|
||||
$(if $(GO_PKG_ENABLE_SPECTRE),-spectre all)
|
||||
|
||||
GO_PKG_DEFAULT_LDFLAGS= \
|
||||
-buildid '$(SOURCE_DATE_EPOCH)' \
|
||||
-linkmode external \
|
||||
-extldflags '$(patsubst -z%,-Wl$(comma)-z$(comma)%,$(TARGET_LDFLAGS))'
|
||||
|
||||
GO_PKG_CUSTOM_LDFLAGS= \
|
||||
$(GO_PKG_LDFLAGS) \
|
||||
$(patsubst %,-X %,$(GO_PKG_LDFLAGS_X))
|
||||
|
||||
GO_PKG_INSTALL_ARGS= \
|
||||
-v \
|
||||
-trimpath \
|
||||
-ldflags "all=$(GO_PKG_DEFAULT_LDFLAGS)" \
|
||||
$(if $(GO_PKG_DEFAULT_GCFLAGS),-gcflags "all=$(GO_PKG_DEFAULT_GCFLAGS)") \
|
||||
$(if $(GO_PKG_DEFAULT_ASMFLAGS),-asmflags "all=$(GO_PKG_DEFAULT_ASMFLAGS)") \
|
||||
$(if $(filter $(GO_PKG_ENABLE_PIE),1),-buildmode pie) \
|
||||
$(if $(filter $(GO_ARCH),arm),-installsuffix "v$(GO_ARM)") \
|
||||
$(if $(filter $(GO_ARCH),mips mipsle),-installsuffix "$(GO_MIPS)") \
|
||||
$(if $(filter $(GO_ARCH),mips64 mips64le),-installsuffix "$(GO_MIPS64)") \
|
||||
$(if $(GO_PKG_GCFLAGS),-gcflags "$(GO_PKG_GCFLAGS) $(GO_PKG_DEFAULT_GCFLAGS)") \
|
||||
$(if $(GO_PKG_CUSTOM_LDFLAGS),-ldflags "$(GO_PKG_CUSTOM_LDFLAGS) $(GO_PKG_DEFAULT_LDFLAGS)") \
|
||||
$(if $(GO_PKG_TAGS),-tags "$(GO_PKG_TAGS)")
|
||||
|
||||
define GoPackage/Build/Configure
|
||||
( \
|
||||
cd $(PKG_BUILD_DIR) ; \
|
||||
mkdir -p $(GO_PKG_BUILD_DIR)/bin $(GO_PKG_BUILD_DIR)/src \
|
||||
$(GO_PKG_CACHE_DIR) $(GO_PKG_TMP_DIR) ; \
|
||||
\
|
||||
files=$$$$($(FIND) ./ \
|
||||
-type d -a \( -path './.git' -o -path './$(GO_PKG_WORK_DIR_NAME)' \) -prune -o \
|
||||
\! -type d -print | \
|
||||
sed 's|^\./||') ; \
|
||||
\
|
||||
if [ "$(GO_PKG_INSTALL_ALL)" != 1 ]; then \
|
||||
code=$$$$(echo "$$$$files" | grep '\.\(c\|cc\|go\|h\|hh\|proto\|s\)$$$$') ; \
|
||||
testdata=$$$$(echo "$$$$files" | grep '\(^\|/\)testdata/') ; \
|
||||
\
|
||||
for pattern in $(GO_PKG_INSTALL_EXTRA); do \
|
||||
extra=$$$$(echo "$$$$extra"; echo "$$$$files" | grep "$$$$pattern") ; \
|
||||
done ; \
|
||||
\
|
||||
files=$$$$(echo "$$$$code"; echo "$$$$testdata"; echo "$$$$extra") ; \
|
||||
files=$$$$(echo "$$$$files" | grep -v '^[[:space:]]*$$$$' | sort -u) ; \
|
||||
fi ; \
|
||||
\
|
||||
echo "Copying files from $(PKG_BUILD_DIR) into $(GO_PKG_BUILD_DIR)/src/$(GO_PKG)" ; \
|
||||
for file in $$$$files; do \
|
||||
echo $$$$file ; \
|
||||
dest=$(GO_PKG_BUILD_DIR)/src/$(GO_PKG)/$$$$file ; \
|
||||
mkdir -p $$$$(dirname $$$$dest) ; \
|
||||
$(CP) $$$$file $$$$dest ; \
|
||||
done ; \
|
||||
echo ; \
|
||||
\
|
||||
link_contents() { \
|
||||
local src=$$$$1 ; \
|
||||
local dest=$$$$2 ; \
|
||||
local dirs dir base ; \
|
||||
\
|
||||
if [ -n "$$$$($(FIND) $$$$src -mindepth 1 -maxdepth 1 -name '*.go' \! -type d)" ]; then \
|
||||
echo "$$$$src is already a Go library" ; \
|
||||
return 1 ; \
|
||||
fi ; \
|
||||
\
|
||||
dirs=$$$$($(FIND) $$$$src -mindepth 1 -maxdepth 1 -type d) ; \
|
||||
for dir in $$$$dirs; do \
|
||||
base=$$$$(basename $$$$dir) ; \
|
||||
if [ -d $$$$dest/$$$$base ]; then \
|
||||
case $$$$dir in \
|
||||
*$(GO_PKG_PATH)/src/$(GO_PKG)) \
|
||||
echo "$(GO_PKG) is already installed. Please check for circular dependencies." ;; \
|
||||
*) \
|
||||
link_contents $$$$src/$$$$base $$$$dest/$$$$base ;; \
|
||||
esac ; \
|
||||
else \
|
||||
echo "...$$$${src#$(GO_PKG_BUILD_DEPENDS_SRC)}/$$$$base" ; \
|
||||
$(LN) $$$$src/$$$$base $$$$dest/$$$$base ; \
|
||||
fi ; \
|
||||
done ; \
|
||||
} ; \
|
||||
\
|
||||
if [ "$(GO_PKG_SOURCE_ONLY)" != 1 ]; then \
|
||||
if [ -d $(GO_PKG_BUILD_DEPENDS_SRC) ]; then \
|
||||
echo "Symlinking directories from $(GO_PKG_BUILD_DEPENDS_SRC) into $(GO_PKG_BUILD_DIR)/src" ; \
|
||||
link_contents $(GO_PKG_BUILD_DEPENDS_SRC) $(GO_PKG_BUILD_DIR)/src ; \
|
||||
else \
|
||||
echo "$(GO_PKG_BUILD_DEPENDS_SRC) does not exist, skipping symlinks" ; \
|
||||
fi ; \
|
||||
else \
|
||||
echo "Not building binaries, skipping symlinks" ; \
|
||||
fi ; \
|
||||
echo ; \
|
||||
)
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh configure
|
||||
endef
|
||||
|
||||
# $(1) additional arguments for go command line (optional)
|
||||
define GoPackage/Build/Compile
|
||||
( \
|
||||
cd $(GO_PKG_BUILD_DIR) ; \
|
||||
export GOPATH=$(GO_PKG_BUILD_DIR) \
|
||||
GOCACHE=$(GO_PKG_CACHE_DIR) \
|
||||
GOTMPDIR=$(GO_PKG_TMP_DIR) \
|
||||
GOROOT_FINAL=$(GO_TARGET_ROOT) \
|
||||
CC=$(TARGET_CC) \
|
||||
CXX=$(TARGET_CXX) \
|
||||
$(call GoPackage/Environment) ; \
|
||||
\
|
||||
echo "Finding targets" ; \
|
||||
targets=$$$$(go list $(GO_PKG_BUILD_PKG)) ; \
|
||||
for pattern in $(GO_PKG_EXCLUDES); do \
|
||||
targets=$$$$(echo "$$$$targets" | grep -v "$$$$pattern") ; \
|
||||
done ; \
|
||||
echo ; \
|
||||
\
|
||||
if [ "$(GO_PKG_GO_GENERATE)" = 1 ]; then \
|
||||
echo "Calling go generate" ; \
|
||||
go generate -v $(1) $$$$targets ; \
|
||||
echo ; \
|
||||
fi ; \
|
||||
\
|
||||
if [ "$(GO_PKG_SOURCE_ONLY)" != 1 ]; then \
|
||||
echo "Building targets" ; \
|
||||
case $(GO_ARCH) in \
|
||||
arm) installsuffix="-installsuffix v$(GO_ARM)" ;; \
|
||||
mips|mipsle) installsuffix="-installsuffix $(GO_MIPS)" ;; \
|
||||
mips64|mips64le) installsuffix="-installsuffix $(GO_MIPS64)" ;; \
|
||||
esac ; \
|
||||
ldflags="all=-linkmode external -extldflags '$(TARGET_LDFLAGS)'" ; \
|
||||
go install \
|
||||
$$$$installsuffix \
|
||||
-trimpath \
|
||||
-ldflags "$$$$ldflags" \
|
||||
-v \
|
||||
$(1) \
|
||||
$$$$targets ; \
|
||||
retval=$$$$? ; \
|
||||
echo ; \
|
||||
\
|
||||
if [ "$$$$retval" -eq 0 ] && [ -z "$(call GoPackage/has_binaries)" ]; then \
|
||||
echo "No binaries were generated, consider adding GO_PKG_SOURCE_ONLY:=1 to Makefile" ; \
|
||||
echo ; \
|
||||
fi ; \
|
||||
\
|
||||
echo "Cleaning module download cache (golang/go#27455)" ; \
|
||||
go clean -modcache ; \
|
||||
echo ; \
|
||||
fi ; \
|
||||
exit $$$$retval ; \
|
||||
)
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh build $(GO_PKG_INSTALL_ARGS) $(1)
|
||||
endef
|
||||
|
||||
define GoPackage/Build/InstallDev
|
||||
|
@ -275,27 +267,33 @@ define GoPackage/Build/InstallDev
|
|||
endef
|
||||
|
||||
define GoPackage/Package/Install/Bin
|
||||
if [ -n "$(call GoPackage/has_binaries)" ]; then \
|
||||
$(INSTALL_DIR) $(1)/usr/bin ; \
|
||||
$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/* $(1)/usr/bin/ ; \
|
||||
fi
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_bin "$(1)"
|
||||
endef
|
||||
|
||||
define GoPackage/Package/Install/Src
|
||||
dir=$$$$(dirname $(GO_PKG)) ; \
|
||||
$(INSTALL_DIR) $(1)$(GO_PKG_PATH)/src/$$$$dir ; \
|
||||
$(CP) $(GO_PKG_BUILD_DIR)/src/$(GO_PKG) $(1)$(GO_PKG_PATH)/src/$$$$dir/
|
||||
$(GO_GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(GO_PKG_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_src "$(1)"
|
||||
endef
|
||||
|
||||
define GoPackage/Package/Install
|
||||
$(call GoPackage/Package/Install/Bin,$(1))
|
||||
$(if $(filter $(GO_PKG_SOURCE_ONLY),1),, \
|
||||
$(call GoPackage/Package/Install/Bin,$(1)) \
|
||||
)
|
||||
$(call GoPackage/Package/Install/Src,$(1))
|
||||
endef
|
||||
|
||||
|
||||
ifneq ($(GO_PKG),)
|
||||
ifneq ($(strip $(GO_PKG)),)
|
||||
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
|
||||
PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
|
||||
endif
|
||||
|
||||
Build/Configure=$(call GoPackage/Build/Configure)
|
||||
Build/Compile=$(call GoPackage/Build/Compile)
|
||||
Hooks/Compile/Post+=Go/CacheCleanup
|
||||
Build/InstallDev=$(call GoPackage/Build/InstallDev,$(1))
|
||||
endif
|
||||
|
||||
|
@ -316,3 +314,14 @@ define GoSrcPackage
|
|||
Package/$(1)/install=$$(call GoPackage/Package/Install/Src,$$(1))
|
||||
endif
|
||||
endef
|
||||
|
||||
|
||||
# Deprecated variables - these will be removed after the next OpenWrt release
|
||||
GO_PKG_PATH=$(GO_PKG_BUILD_DEPENDS_PATH)
|
||||
GO_PKG_WORK_DIR=$(PKG_BUILD_DIR)/$(GO_PKG_WORK_DIR_NAME)
|
||||
GO_PKG_CACHE_DIR=$(GO_BUILD_CACHE_DIR)
|
||||
GO_PKG_DEFAULT_VARS=$(GO_PKG_VARS)
|
||||
GoPackage/Environment=$(GO_PKG_VARS)
|
||||
GoPackage/is_dir_not_empty=$$$$($(FIND) "$(1)" -maxdepth 0 -type d \! -empty 2>/dev/null)
|
||||
GoPackage/has_binaries=$(call GoPackage/is_dir_not_empty,$(GO_PKG_BUILD_BIN_DIR))
|
||||
# End of deprecated variables
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2018 Jeffery To
|
||||
# Copyright (C) 2018, 2020 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -9,23 +9,118 @@ ifeq ($(origin GO_INCLUDE_DIR),undefined)
|
|||
GO_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
|
||||
endif
|
||||
|
||||
include $(GO_INCLUDE_DIR)/golang-version.mk
|
||||
|
||||
# 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
|
||||
|
||||
# General-purpose environment variables:
|
||||
unexport \
|
||||
GOARCH GOBIN GOCACHE GODEBUG GOHOSTARCH GOOS GOPATH GORACE GOROOT GOTMPDIR GCCGO \
|
||||
GCCGO \
|
||||
GOARCH \
|
||||
GOBIN \
|
||||
GOCACHE \
|
||||
GOMODCACHE \
|
||||
GODEBUG \
|
||||
GOENV \
|
||||
GOFLAGS \
|
||||
GOOS \
|
||||
GOPATH \
|
||||
GOROOT \
|
||||
GOTMPDIR
|
||||
# Unmodified:
|
||||
# GOINSECURE
|
||||
# GOPRIVATE
|
||||
# GOPROXY
|
||||
# GONOPROXY
|
||||
# GOSUMDB
|
||||
# GONOSUMDB
|
||||
|
||||
# Environment variables for use with cgo:
|
||||
unexport \
|
||||
AR \
|
||||
CC \
|
||||
CGO_ENABLED \
|
||||
CGO_CFLAGS CGO_CFLAGS_ALLOW CGO_CFLAGS_DISALLOW \
|
||||
CGO_CFLAGS CGO_CFLAGS_ALLOW CGO_CFLAGS_DISALLOW \
|
||||
CGO_CPPFLAGS CGO_CPPFLAGS_ALLOW CGO_CPPFLAGS_DISALLOW \
|
||||
CGO_CXXFLAGS CGO_CXXFLAGS_ALLOW CGO_CXXFLAGS_DISALLOW \
|
||||
CGO_FFLAGS CGO_FFLAGS_ALLOW CGO_FFLAGS_DISALLOW \
|
||||
CGO_LDFLAGS CGO_LDFLAGS_ALLOW CGO_LDFLAGS_DISALLOW \
|
||||
GOARM GO386 GOMIPS GOMIPS64 \
|
||||
GOROOT_FINAL GO_EXTLINK_ENABLED GIT_ALLOW_PROTOCOL \
|
||||
CC_FOR_TARGET CXX_FOR_TARGET GO_DISTFLAGS GO_GCFLAGS GO_LDFLAGS GOBUILDTIMELOGFILE GOROOT_BOOTSTRAP \
|
||||
BOOT_GO_GCFLAGS GOEXPERIMENT GOBOOTSTRAP_TOOLEXEC
|
||||
# there are more magic environment variables to track down, but ain't nobody got time for that
|
||||
# deliberately left untouched: GOPROXY GONOPROXY GOSUMDB GONOSUMDB GOPRIVATE
|
||||
CGO_FFLAGS CGO_FFLAGS_ALLOW CGO_FFLAGS_DISALLOW \
|
||||
CGO_LDFLAGS CGO_LDFLAGS_ALLOW CGO_LDFLAGS_DISALLOW \
|
||||
CXX \
|
||||
FC
|
||||
# Unmodified:
|
||||
# PKG_CONFIG
|
||||
|
||||
# Architecture-specific environment variables:
|
||||
unexport \
|
||||
GOARM \
|
||||
GO386 \
|
||||
GOMIPS \
|
||||
GOMIPS64 \
|
||||
GOWASM
|
||||
|
||||
# Special-purpose environment variables:
|
||||
unexport \
|
||||
GCCGOTOOLDIR \
|
||||
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
|
||||
unexport \
|
||||
GOGC \
|
||||
GOMAXPROCS \
|
||||
GORACE \
|
||||
GOTRACEBACK
|
||||
|
||||
# From https://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command
|
||||
unexport \
|
||||
CC_FOR_TARGET \
|
||||
CXX_FOR_TARGET
|
||||
# Todo:
|
||||
# CC_FOR_${GOOS}_${GOARCH}
|
||||
# CXX_FOR_${GOOS}_${GOARCH}
|
||||
|
||||
# From https://golang.org/doc/install/source#environment
|
||||
unexport \
|
||||
GOHOSTOS \
|
||||
GOHOSTARCH \
|
||||
GOPPC64
|
||||
|
||||
# From https://golang.org/src/make.bash
|
||||
unexport \
|
||||
GO_GCFLAGS \
|
||||
GO_LDFLAGS \
|
||||
GO_LDSO \
|
||||
GO_DISTFLAGS \
|
||||
GOBUILDTIMELOGFILE \
|
||||
GOROOT_BOOTSTRAP
|
||||
|
||||
# From https://golang.org/doc/go1.9#parallel-compile
|
||||
unexport \
|
||||
GO19CONCURRENTCOMPILATION
|
||||
|
||||
# From https://golang.org/src/cmd/dist/build.go
|
||||
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
|
||||
|
||||
|
||||
# GOOS / GOARCH
|
||||
|
||||
go_arch=$(subst \
|
||||
aarch64,arm64,$(subst \
|
||||
|
@ -43,31 +138,117 @@ GO_HOST_OS:=$(call tolower,$(HOST_OS))
|
|||
GO_HOST_ARCH:=$(call go_arch,$(subst \
|
||||
armv6l,arm,$(subst \
|
||||
armv7l,arm,$(subst \
|
||||
i486,i386,$(subst \
|
||||
i586,i386,$(subst \
|
||||
i686,i386,$(HOST_ARCH)))))))
|
||||
i686,i386,$(HOST_ARCH)))))
|
||||
GO_HOST_OS_ARCH:=$(GO_HOST_OS)_$(GO_HOST_ARCH)
|
||||
|
||||
GO_HOST_TARGET_SAME:=$(if $(and $(findstring $(GO_OS_ARCH),$(GO_HOST_OS_ARCH)),$(findstring $(GO_HOST_OS_ARCH),$(GO_OS_ARCH))),1)
|
||||
GO_HOST_TARGET_DIFFERENT:=$(if $(GO_HOST_TARGET_SAME),,1)
|
||||
ifeq ($(GO_OS_ARCH),$(GO_HOST_OS_ARCH))
|
||||
GO_HOST_TARGET_SAME:=1
|
||||
else
|
||||
GO_HOST_TARGET_DIFFERENT:=1
|
||||
endif
|
||||
|
||||
# ensure binaries can run on older CPUs
|
||||
GO_386:=387
|
||||
ifeq ($(GO_ARCH),386)
|
||||
# ensure binaries can run on older CPUs
|
||||
GO_386:=387
|
||||
|
||||
GO_ARM:=$(if $(CONFIG_arm_v7),7,$(if $(CONFIG_arm_v6),6,$(if $(findstring $(GO_ARCH),arm),5,)))
|
||||
# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors
|
||||
GO_CFLAGS_TO_REMOVE:=-fno-plt
|
||||
|
||||
GO_MIPS:=$(if $(filter $(GO_ARCH),mips mipsle),$(if $(CONFIG_HAS_FPU),hardfloat,softfloat),)
|
||||
else ifeq ($(GO_ARCH),arm)
|
||||
GO_TARGET_FPU:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE))))
|
||||
|
||||
GO_MIPS64:=$(if $(filter $(GO_ARCH),mips64 mips64le),$(if $(CONFIG_HAS_FPU),hardfloat,softfloat),)
|
||||
# FPU names from https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gcc/ARM-Options.html#index-mfpu-1
|
||||
# see also https://github.com/gcc-mirror/gcc/blob/releases/gcc-8.4.0/gcc/config/arm/arm-cpus.in
|
||||
|
||||
# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors
|
||||
# -mips32r2: conflicts with -march=mips32 set by go
|
||||
GO_CFLAGS_TO_REMOVE:=$(if \
|
||||
$(filter $(GO_ARCH),386),-fno-plt,$(if \
|
||||
$(filter $(GO_ARCH),mips mipsle),-mips32r2,))
|
||||
ifeq ($(GO_TARGET_FPU),)
|
||||
GO_ARM:=5
|
||||
else ifneq ($(filter $(GO_TARGET_FPU),vfp vfpv2),)
|
||||
GO_ARM:=6
|
||||
else
|
||||
GO_ARM:=7
|
||||
endif
|
||||
|
||||
else ifneq ($(filter $(GO_ARCH),mips mipsle),)
|
||||
ifeq ($(CONFIG_HAS_FPU),y)
|
||||
GO_MIPS:=hardfloat
|
||||
else
|
||||
GO_MIPS:=softfloat
|
||||
endif
|
||||
|
||||
# -mips32r2: conflicts with -march=mips32 set by go
|
||||
GO_CFLAGS_TO_REMOVE:=-mips32r2
|
||||
|
||||
else ifneq ($(filter $(GO_ARCH),mips64 mips64le),)
|
||||
ifeq ($(CONFIG_HAS_FPU),y)
|
||||
GO_MIPS64:=hardfloat
|
||||
else
|
||||
GO_MIPS64:=softfloat
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
# Target Go
|
||||
|
||||
GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||powerpc64||x86_64)
|
||||
|
||||
GO_TARGET_PREFIX:=/usr
|
||||
GO_TARGET_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR)
|
||||
GO_TARGET_ROOT:=$(GO_TARGET_PREFIX)/lib/go-$(GO_TARGET_VERSION_ID)
|
||||
|
||||
# ASLR/PIE
|
||||
|
||||
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 \
|
||||
freebsd_amd64 \
|
||||
\
|
||||
aix_ppc64 \
|
||||
\
|
||||
linux_ppc64le linux_s390x
|
||||
|
||||
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)),)
|
||||
GO_HOST_PIE_SUPPORTED:=1
|
||||
GO_HOST_PIE_INSTALL_SUFFIX:=$(call go_pie_install_suffix,$(GO_HOST_OS_ARCH))
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(GO_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),)
|
||||
GO_TARGET_PIE_SUPPORTED:=1
|
||||
GO_TARGET_PIE_INSTALL_SUFFIX:=$(call go_pie_install_suffix,$(GO_OS_ARCH))
|
||||
endif
|
||||
|
||||
|
||||
# Spectre mitigations
|
||||
|
||||
GO_SPECTRE_SUPPORTED_ARCH:=amd64
|
||||
|
||||
ifneq ($(filter $(GO_HOST_ARCH),$(GO_SPECTRE_SUPPORTED_ARCH)),)
|
||||
GO_HOST_SPECTRE_SUPPORTED:=1
|
||||
endif
|
||||
|
||||
ifneq ($(filter $(GO_ARCH),$(GO_SPECTRE_SUPPORTED_ARCH)),)
|
||||
GO_TARGET_SPECTRE_SUPPORTED:=1
|
||||
endif
|
||||
|
||||
|
||||
# General build info
|
||||
|
||||
GO_BUILD_CACHE_DIR:=$(or $(call qstrip,$(CONFIG_GOLANG_BUILD_CACHE_DIR)),$(TOPDIR)/.go-build)
|
||||
GO_MOD_CACHE_DIR:=$(DL_DIR)/go-mod-cache
|
||||
|
||||
GO_MOD_ARGS= \
|
||||
-modcacherw
|
||||
|
||||
GO_GENERAL_BUILD_CONFIG_VARS= \
|
||||
CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE="$(CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE)" \
|
||||
GO_BUILD_CACHE_DIR="$(GO_BUILD_CACHE_DIR)" \
|
||||
GO_MOD_CACHE_DIR="$(GO_MOD_CACHE_DIR)" \
|
||||
GO_MOD_ARGS="$(GO_MOD_ARGS)"
|
||||
|
||||
define Go/CacheCleanup
|
||||
$(GENERAL_BUILD_CONFIG_VARS) \
|
||||
$(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup
|
||||
endef
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
#
|
||||
# Copyright (C) 2018 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
ifeq ($(origin GO_INCLUDE_DIR),undefined)
|
||||
GO_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
|
||||
endif
|
||||
|
||||
|
||||
GO_VERSION_MAJOR_MINOR:=1.13
|
||||
GO_VERSION_PATCH:=4
|
33
golang/golang/Config.in
Normal file
33
golang/golang/Config.in
Normal file
|
@ -0,0 +1,33 @@
|
|||
menu "Configuration"
|
||||
|
||||
config GOLANG_EXTERNAL_BOOTSTRAP_ROOT
|
||||
string "External bootstrap Go root directory"
|
||||
default ""
|
||||
help
|
||||
Path to a working Go tree (>= Go 1.4), with bin, pkg, and src
|
||||
subdirectories and the Go compiler at bin/go.
|
||||
|
||||
If specified, the existing Go installation will be used to
|
||||
compile host (buildroot) Go.
|
||||
|
||||
Leave blank to compile the default bootstrap Go.
|
||||
|
||||
config GOLANG_BUILD_CACHE_DIR
|
||||
string "Go build cache directory"
|
||||
default ""
|
||||
help
|
||||
Store the Go build cache in this directory.
|
||||
If not set, uses './.go-build'.
|
||||
|
||||
config GOLANG_MOD_CACHE_WORLD_READABLE
|
||||
bool "Ensure Go module cache is world-readable"
|
||||
default n
|
||||
|
||||
config GOLANG_SPECTRE
|
||||
bool "Enable Spectre mitigations"
|
||||
default n
|
||||
depends on x86_64
|
||||
help
|
||||
Currently only available for x86-64 (amd64).
|
||||
|
||||
endmenu
|
|
@ -1,12 +1,14 @@
|
|||
#
|
||||
# Copyright (C) 2018 Jeffery To
|
||||
# Copyright (C) 2018, 2020 Jeffery To
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include ../golang-version.mk
|
||||
|
||||
GO_VERSION_MAJOR_MINOR:=1.15
|
||||
GO_VERSION_PATCH:=2
|
||||
|
||||
PKG_NAME:=golang
|
||||
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
|
||||
|
@ -18,21 +20,21 @@ GO_SOURCE_URLS:=https://dl.google.com/go/ \
|
|||
|
||||
PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
|
||||
PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
|
||||
PKG_HASH:=95dbeab442ee2746b9acf0934c8e2fc26414a0565c008631b04addb8c02e7624
|
||||
PKG_HASH:=28bf9d0bcde251011caae230a4a05d917b172ea203f2a62f2c2f9533589d4b4d
|
||||
|
||||
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
|
||||
PKG_CPE_ID:=cpe:/a:golang:go
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION)
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
PKG_GO_WORK_DIR:=$(PKG_BUILD_DIR)/.go_work
|
||||
PKG_GO_HOST_CACHE_DIR:=$(PKG_GO_WORK_DIR)/host_cache
|
||||
PKG_GO_TARGET_CACHE_DIR:=$(PKG_GO_WORK_DIR)/target_cache
|
||||
PKG_GO_TMP_DIR:=$(PKG_GO_WORK_DIR)/tmp
|
||||
PKG_GO_PREFIX:=/usr
|
||||
PKG_GO_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR)
|
||||
PKG_GO_ROOT:=$(PKG_GO_PREFIX)/lib/go-$(PKG_GO_VERSION_ID)
|
||||
|
||||
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/go-$(PKG_VERSION)
|
||||
HOST_BUILD_PARALLEL:=1
|
||||
|
@ -42,18 +44,27 @@ HOST_GO_VERSION_ID:=cross
|
|||
HOST_GO_ROOT:=$(HOST_GO_PREFIX)/lib/go-$(HOST_GO_VERSION_ID)
|
||||
|
||||
HOST_GO_VALID_OS_ARCH:= \
|
||||
android_arm \
|
||||
darwin_386 darwin_amd64 darwin_arm darwin_arm64 \
|
||||
dragonfly_amd64 \
|
||||
freebsd_386 freebsd_amd64 freebsd_arm \
|
||||
linux_386 linux_amd64 linux_arm linux_arm64 \
|
||||
netbsd_386 netbsd_amd64 netbsd_arm \
|
||||
openbsd_386 openbsd_amd64 openbsd_arm \
|
||||
plan9_386 plan9_amd64 \
|
||||
solaris_amd64 \
|
||||
windows_386 windows_amd64 \
|
||||
android_386 android_amd64 android_arm android_arm64 \
|
||||
freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \
|
||||
linux_386 linux_amd64 linux_arm linux_arm64 \
|
||||
openbsd_386 openbsd_amd64 openbsd_arm openbsd_arm64 \
|
||||
\
|
||||
linux_ppc64 linux_ppc64le linux_mips linux_mipsle linux_mips64 linux_mips64le
|
||||
netbsd_386 netbsd_amd64 netbsd_arm \
|
||||
plan9_386 plan9_amd64 plan9_arm \
|
||||
windows_386 windows_amd64 windows_arm \
|
||||
\
|
||||
darwin_amd64 darwin_arm64 \
|
||||
\
|
||||
dragonfly_amd64 \
|
||||
illumos_amd64 \
|
||||
solaris_amd64 \
|
||||
\
|
||||
aix_ppc64 \
|
||||
js_wasm \
|
||||
\
|
||||
linux_ppc64 linux_ppc64le \
|
||||
linux_mips linux_mipsle linux_mips64 linux_mips64le \
|
||||
linux_riscv64 linux_s390x
|
||||
|
||||
BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
|
||||
BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
|
||||
|
@ -77,14 +88,18 @@ include $(INCLUDE_DIR)/package.mk
|
|||
include ../golang-compiler.mk
|
||||
include ../golang-package.mk
|
||||
|
||||
PKG_UNPACK:=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
|
||||
HOST_UNPACK:=$(HOST_TAR) -C $(HOST_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
|
||||
BOOTSTRAP_UNPACK:=$(HOST_TAR) -C $(BOOTSTRAP_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(BOOTSTRAP_SOURCE)
|
||||
PKG_UNPACK:=$(HOST_TAR) -C "$(PKG_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
|
||||
HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
|
||||
BOOTSTRAP_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_SOURCE)"
|
||||
|
||||
# don't strip ELF executables in test data (and go itself)
|
||||
# don't strip ELF executables in test data
|
||||
RSTRIP:=:
|
||||
STRIP:=:
|
||||
|
||||
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
|
||||
PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
|
||||
endif
|
||||
|
||||
define Package/golang/Default
|
||||
$(call GoPackage/GoSubMenu)
|
||||
TITLE:=Go programming language
|
||||
|
@ -120,6 +135,10 @@ This package provides an assembler, compiler, linker, and compiled
|
|||
libraries for the Go programming language.
|
||||
endef
|
||||
|
||||
define Package/golang/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
define Package/golang-doc
|
||||
$(call Package/golang/Default)
|
||||
TITLE+= (documentation)
|
||||
|
@ -143,36 +162,62 @@ This package provides the Go programming language source files needed
|
|||
for cross-compilation.
|
||||
endef
|
||||
|
||||
define Download/golang-bootstrap
|
||||
FILE:=$(BOOTSTRAP_SOURCE)
|
||||
URL:=$(BOOTSTRAP_SOURCE_URL)
|
||||
HASH:=$(BOOTSTRAP_HASH)
|
||||
endef
|
||||
$(eval $(call Download,golang-bootstrap))
|
||||
|
||||
$(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
|
||||
$(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH)))
|
||||
$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(GO_TARGET_PREFIX),$(GO_TARGET_VERSION_ID),$(GO_OS_ARCH)))
|
||||
# Bootstrap
|
||||
|
||||
define Host/Prepare
|
||||
$(call Host/Prepare/Default)
|
||||
mkdir -p $(BOOTSTRAP_BUILD_DIR)
|
||||
BOOTSTRAP_ROOT_DIR:=$(call qstrip,$(CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT))
|
||||
|
||||
ifeq ($(BOOTSTRAP_ROOT_DIR),)
|
||||
BOOTSTRAP_ROOT_DIR:=$(BOOTSTRAP_BUILD_DIR)
|
||||
|
||||
define Download/golang-bootstrap
|
||||
FILE:=$(BOOTSTRAP_SOURCE)
|
||||
URL:=$(BOOTSTRAP_SOURCE_URL)
|
||||
HASH:=$(BOOTSTRAP_HASH)
|
||||
endef
|
||||
$(eval $(call Download,golang-bootstrap))
|
||||
|
||||
define Bootstrap/Prepare
|
||||
mkdir -p "$(BOOTSTRAP_BUILD_DIR)"
|
||||
$(BOOTSTRAP_UNPACK)
|
||||
endef
|
||||
endef
|
||||
Hooks/HostPrepare/Post+=Bootstrap/Prepare
|
||||
|
||||
$(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
|
||||
endif
|
||||
|
||||
|
||||
# Host
|
||||
|
||||
ifeq ($(GO_HOST_PIE_SUPPORTED),1)
|
||||
HOST_GO_ENABLE_PIE:=1
|
||||
endif
|
||||
|
||||
# when using GO_LDFLAGS to set buildmode=pie, the PIE install suffix
|
||||
# does not apply (we also delete the std lib during Host/Install)
|
||||
|
||||
$(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH),$(HOST_GO_INSTALL_SUFFIX)))
|
||||
|
||||
HOST_GO_VARS= \
|
||||
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
||||
GOENV=off \
|
||||
CC="$(HOSTCC_NOCACHE)" \
|
||||
CXX="$(HOSTCXX_NOCACHE)"
|
||||
|
||||
define Host/Compile
|
||||
$(call GoCompiler/Bootstrap/CheckHost,$(BOOTSTRAP_GO_VALID_OS_ARCH))
|
||||
$(call GoCompiler/Host/CheckHost,$(HOST_GO_VALID_OS_ARCH))
|
||||
|
||||
mkdir -p "$(GO_BUILD_CACHE_DIR)"
|
||||
|
||||
$(call GoCompiler/Bootstrap/Make, \
|
||||
CC=$(HOSTCC_NOCACHE) \
|
||||
CXX=$(HOSTCXX_NOCACHE) \
|
||||
$(HOST_GO_VARS) \
|
||||
)
|
||||
|
||||
$(call GoCompiler/Host/Make, \
|
||||
GOROOT_BOOTSTRAP=$(BOOTSTRAP_BUILD_DIR) \
|
||||
CC=$(HOSTCC_NOCACHE) \
|
||||
CXX=$(HOSTCXX_NOCACHE) \
|
||||
GOROOT_BOOTSTRAP="$(BOOTSTRAP_ROOT_DIR)" \
|
||||
$(if $(HOST_GO_ENABLE_PIE),GO_LDFLAGS="-buildmode pie") \
|
||||
$(HOST_GO_VARS) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
@ -187,77 +232,111 @@ define Host/Install
|
|||
|
||||
$(call GoCompiler/Host/Install/BinLinks,)
|
||||
|
||||
rm -rf $(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH)
|
||||
rm -rf "$(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH)$(if $(HOST_GO_INSTALL_SUFFIX),_$(HOST_GO_INSTALL_SUFFIX))"
|
||||
|
||||
$(INSTALL_DIR) $(HOST_GO_ROOT)/openwrt
|
||||
$(INSTALL_BIN) ./files/go-gcc-helper $(HOST_GO_ROOT)/openwrt/
|
||||
$(LN) go-gcc-helper $(HOST_GO_ROOT)/openwrt/gcc
|
||||
$(LN) go-gcc-helper $(HOST_GO_ROOT)/openwrt/g++
|
||||
$(INSTALL_DIR) "$(HOST_GO_ROOT)/openwrt"
|
||||
$(INSTALL_BIN) ./files/go-gcc-helper "$(HOST_GO_ROOT)/openwrt/"
|
||||
$(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/gcc"
|
||||
$(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/g++"
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
rm -rf $(HOST_GO_ROOT)/openwrt
|
||||
rm -rf "$(HOST_GO_ROOT)/openwrt"
|
||||
|
||||
$(call GoCompiler/Host/Uninstall/BinLinks,)
|
||||
|
||||
$(call GoCompiler/Host/Uninstall,)
|
||||
endef
|
||||
|
||||
|
||||
# Target
|
||||
|
||||
ifeq ($(GO_PKG_ENABLE_PIE),1)
|
||||
PKG_GO_INSTALL_SUFFIX:=$(GO_TARGET_PIE_INSTALL_SUFFIX)
|
||||
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/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_VARS= \
|
||||
GOCACHE="$(GO_BUILD_CACHE_DIR)" \
|
||||
GOENV=off \
|
||||
GO_GCC_HELPER_PATH="$$$$PATH" \
|
||||
CC=gcc \
|
||||
CXX=g++ \
|
||||
PKG_CONFIG=pkg-config \
|
||||
PATH="$(HOST_GO_ROOT)/openwrt:$$$$PATH"
|
||||
|
||||
PKG_GO_GCFLAGS= \
|
||||
$(if $(GO_PKG_ENABLE_SPECTRE),-spectre all)
|
||||
|
||||
PKG_GO_ASMFLAGS= \
|
||||
$(if $(GO_PKG_ENABLE_SPECTRE),-spectre all)
|
||||
|
||||
PKG_GO_LDFLAGS= \
|
||||
-buildid '$(SOURCE_DATE_EPOCH)' \
|
||||
-linkmode external \
|
||||
-extldflags '$(patsubst -z%,-Wl$(comma)-z$(comma)%,$(TARGET_LDFLAGS))' \
|
||||
$(if $(CONFIG_NO_STRIP)$(CONFIG_DEBUG),,-s -w)
|
||||
|
||||
# setting -trimpath is not necessary here because the paths inside the
|
||||
# compiler binary are relative to GOROOT_FINAL (PKG_GO_ROOT), which is
|
||||
# static / not dependent on the build environment
|
||||
PKG_GO_INSTALL_ARGS= \
|
||||
-ldflags "all=$(PKG_GO_LDFLAGS)" \
|
||||
$(if $(PKG_GO_GCFLAGS),-gcflags "all=$(PKG_GO_GCFLAGS)") \
|
||||
$(if $(PKG_GO_ASMFLAGS),-asmflags "all=$(PKG_GO_ASMFLAGS)") \
|
||||
$(if $(filter $(GO_PKG_ENABLE_PIE),1),-buildmode pie)
|
||||
|
||||
define Build/Compile
|
||||
mkdir -p \
|
||||
$(PKG_GO_HOST_CACHE_DIR) \
|
||||
$(PKG_GO_TARGET_CACHE_DIR) \
|
||||
$(PKG_GO_TMP_DIR)
|
||||
mkdir -p "$(GO_BUILD_CACHE_DIR)"
|
||||
|
||||
@echo "Building target Go first stage"
|
||||
|
||||
$(call GoCompiler/Package/Make, \
|
||||
GOROOT_BOOTSTRAP=$(HOST_GO_ROOT) \
|
||||
GOCACHE=$(PKG_GO_HOST_CACHE_DIR) \
|
||||
GOTMPDIR=$(PKG_GO_TMP_DIR) \
|
||||
GOROOT_BOOTSTRAP="$(HOST_GO_ROOT)" \
|
||||
GO_GCC_HELPER_CC="$(HOSTCC)" \
|
||||
GO_GCC_HELPER_CXX="$(HOSTCXX)" \
|
||||
GO_GCC_HELPER_PATH=$$$$PATH \
|
||||
CC=gcc \
|
||||
CXX=g++ \
|
||||
PKG_CONFIG=pkg-config \
|
||||
PATH=$(HOST_GO_ROOT)/openwrt:$$$$PATH \
|
||||
$(PKG_GO_VARS) \
|
||||
)
|
||||
|
||||
$(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' \
|
||||
"$(PKG_BUILD_DIR)/src/cmd/internal/objabi/zbootstrap.go"
|
||||
|
||||
@echo "Building target Go second stage"
|
||||
|
||||
( \
|
||||
cd $(PKG_BUILD_DIR)/bin ; \
|
||||
cd "$(PKG_BUILD_DIR)/bin" ; \
|
||||
export $(GO_PKG_TARGET_VARS) ; \
|
||||
$(CP) go go-host ; \
|
||||
GOROOT_FINAL=$(GO_TARGET_ROOT) \
|
||||
GOCACHE=$(PKG_GO_TARGET_CACHE_DIR) \
|
||||
GOTMPDIR=$(PKG_GO_TMP_DIR) \
|
||||
GOROOT_FINAL="$(PKG_GO_ROOT)" \
|
||||
GO_GCC_HELPER_CC="$(TARGET_CC)" \
|
||||
GO_GCC_HELPER_CXX="$(TARGET_CXX)" \
|
||||
GO_GCC_HELPER_PATH=$$$$PATH \
|
||||
CC=gcc \
|
||||
CXX=g++ \
|
||||
PKG_CONFIG=pkg-config \
|
||||
PATH=$(HOST_GO_ROOT)/openwrt:$$$$PATH \
|
||||
$(call GoPackage/Environment) \
|
||||
./go-host install -a -v std cmd ; \
|
||||
retval=$$$$? ; \
|
||||
$(PKG_GO_VARS) \
|
||||
./go-host install -a $(PKG_GO_INSTALL_ARGS) std cmd ; \
|
||||
retval="$$$$?" ; \
|
||||
rm -f go-host ; \
|
||||
exit $$$$retval ; \
|
||||
exit "$$$$retval" ; \
|
||||
)
|
||||
endef
|
||||
|
||||
define Package/golang/install
|
||||
$(call GoCompiler/Package/Install/Bin,$(1)$(GO_TARGET_PREFIX))
|
||||
$(call GoCompiler/Package/Install/BinLinks,$(1)$(GO_TARGET_PREFIX))
|
||||
$(call GoCompiler/Package/Install/Bin,$(1)$(PKG_GO_PREFIX))
|
||||
$(call GoCompiler/Package/Install/BinLinks,$(1)$(PKG_GO_PREFIX))
|
||||
endef
|
||||
|
||||
define Package/golang-doc/install
|
||||
$(call GoCompiler/Package/Install/Doc,$(1)$(GO_TARGET_PREFIX))
|
||||
$(call GoCompiler/Package/Install/Doc,$(1)$(PKG_GO_PREFIX))
|
||||
endef
|
||||
|
||||
define Package/golang-src/install
|
||||
$(call GoCompiler/Package/Install/Src,$(1)$(GO_TARGET_PREFIX))
|
||||
$(call GoCompiler/Package/Install/Src,$(1)$(PKG_GO_PREFIX))
|
||||
endef
|
||||
|
||||
# src/debug contains ELF executables as test data
|
||||
|
@ -268,6 +347,7 @@ define Package/golang-src/extra_provides
|
|||
echo 'libc.so.6'
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
$(eval $(call BuildPackage,golang))
|
||||
$(eval $(call BuildPackage,golang-doc))
|
||||
|
|
|
@ -1,23 +1,41 @@
|
|||
#!/bin/sh
|
||||
|
||||
me=go-gcc-helper
|
||||
name=$(basename $0)
|
||||
name="${0##*/}"
|
||||
|
||||
case $name in
|
||||
log() {
|
||||
# shellcheck disable=SC2039
|
||||
local IFS=" "
|
||||
printf '%s\n' "$me: $*"
|
||||
}
|
||||
|
||||
case "$name" in
|
||||
gcc)
|
||||
cmd=$GO_GCC_HELPER_CC
|
||||
if [ -z "$GO_GCC_HELPER_CC" ]; then
|
||||
log "missing GO_GCC_HELPER_CC"
|
||||
exit 1
|
||||
fi
|
||||
cmd="$GO_GCC_HELPER_CC"
|
||||
;;
|
||||
g++)
|
||||
cmd=$GO_GCC_HELPER_CXX
|
||||
if [ -z "$GO_GCC_HELPER_CXX" ]; then
|
||||
log "missing GO_GCC_HELPER_CXX"
|
||||
exit 1
|
||||
fi
|
||||
cmd="$GO_GCC_HELPER_CXX"
|
||||
;;
|
||||
*)
|
||||
echo "$me: unknown command \"$name\""
|
||||
log "unknown command \"$name\""
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
export PATH="$GO_GCC_HELPER_PATH"
|
||||
if [ -n "$GO_GCC_HELPER_PATH" ]; then
|
||||
export PATH="$GO_GCC_HELPER_PATH"
|
||||
else
|
||||
log "missing GO_GCC_HELPER_PATH"
|
||||
fi
|
||||
|
||||
echo "$me: running $cmd $@"
|
||||
log "running $cmd $*"
|
||||
|
||||
$cmd "$@"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsdsvpn/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -19,11 +19,11 @@ msgstr "DSVPN"
|
|||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
|
||||
msgid "Enable"
|
||||
msgstr "anschalten"
|
||||
msgstr "Aktivieren"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
|
||||
msgid "Interface name"
|
||||
msgstr "Anschluss-Bezeichnung"
|
||||
msgstr "Name der Verbindung"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
|
||||
msgid "Key"
|
||||
|
|
|
@ -1,27 +1,28 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"Last-Translator: Ycarus <ycarus@zugaina.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"PO-Revision-Date: 2020-09-30 08:50+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsdsvpn/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6
|
||||
msgid "DSVPN"
|
||||
msgstr ""
|
||||
msgstr "DSVPN"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
|
||||
msgid "Enable"
|
||||
msgstr "Activé"
|
||||
msgstr "Activer"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
|
||||
msgid "Interface name"
|
||||
|
@ -29,7 +30,7 @@ msgstr "Nom de l'interface"
|
|||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
|
||||
msgid "Key"
|
||||
msgstr "Clef"
|
||||
msgstr "Clé"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15
|
||||
msgid "Remote host"
|
||||
|
|
50
luci-app-dsvpn/po/it/dsvpn.po
Normal file
50
luci-app-dsvpn/po/it/dsvpn.po
Normal file
|
@ -0,0 +1,50 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsdsvpn/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"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6
|
||||
msgid "DSVPN"
|
||||
msgstr "DSVPN"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
|
||||
msgid "Enable"
|
||||
msgstr "Attivare"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
|
||||
msgid "Interface name"
|
||||
msgstr "Nome interfaccia"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
|
||||
msgid "Key"
|
||||
msgstr "Key"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15
|
||||
msgid "Remote host"
|
||||
msgstr "Rimuovi server"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21
|
||||
msgid "Remote port"
|
||||
msgstr "Porta remota"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31
|
||||
msgid "Tunnel local IP"
|
||||
msgstr "IP locale del tunnel"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35
|
||||
msgid "Tunnel remote IP"
|
||||
msgstr "IP remoto del tunnel"
|
50
luci-app-dsvpn/po/oc/dsvpn.po
Normal file
50
luci-app-dsvpn/po/oc/dsvpn.po
Normal file
|
@ -0,0 +1,50 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-18 17:37+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsdsvpn/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5
|
||||
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6
|
||||
msgid "DSVPN"
|
||||
msgstr "DSVPN"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
|
||||
msgid "Enable"
|
||||
msgstr "Activat"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
|
||||
msgid "Interface name"
|
||||
msgstr "Nom de l’interfàcia"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
|
||||
msgid "Key"
|
||||
msgstr "Clau"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15
|
||||
msgid "Remote host"
|
||||
msgstr "Nom de l’òste distant o adreça IP"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21
|
||||
msgid "Remote port"
|
||||
msgstr "Pòrt distant"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31
|
||||
msgid "Tunnel local IP"
|
||||
msgstr "Adreça IP locala del tunèl"
|
||||
|
||||
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35
|
||||
msgid "Tunnel remote IP"
|
||||
msgstr "Adreça IP distanta del tunèl"
|
|
@ -281,6 +281,12 @@ return view.extend({
|
|||
fwtool.addLimitOption(s);
|
||||
fwtool.addLimitBurstOption(s);
|
||||
|
||||
o = s.taboption('advanced', form.Flag, 'v2ray', _('Use V2Ray'),
|
||||
_('Forwards ports from server using V2Ray proxy (if enabled) instead of VPN'));
|
||||
o.modalonly = true;
|
||||
o.editable = true;
|
||||
o.depends({ src: 'vpn', '!contains': true });
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'extra', _('Extra arguments'),
|
||||
_('Passes additional arguments to iptables. Use with care!'));
|
||||
o.modalonly = true;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsglorytun/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -11,11 +11,13 @@ msgstr ""
|
|||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "hinzufügen"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
msgid ""
|
||||
"Below is a list of configured Glorytun instances and their current state"
|
||||
msgstr "Liste der konfigurierten Glorytun-Instanzen und ihr aktueller Status"
|
||||
msgstr ""
|
||||
"Nachfolgend eine Liste der konfigurierten Glorytun-Instanzen und ihre "
|
||||
"aktuelle Status."
|
||||
|
||||
msgid "Bind address"
|
||||
msgstr "Bindungsadresse"
|
||||
|
@ -27,28 +29,28 @@ msgid "Bind port"
|
|||
msgstr "Verbindungs-Port"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "anschalten"
|
||||
msgstr "Aktivieren"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "aktiv"
|
||||
msgstr "Aktiv"
|
||||
|
||||
msgid "Glorytun"
|
||||
msgstr "Glorytun"
|
||||
|
||||
msgid "Glorytun instances"
|
||||
msgstr "Glorytun-Instanz"
|
||||
msgstr "Glorytun-Instanzen"
|
||||
|
||||
msgid "Instance \"%s\""
|
||||
msgstr "Instanz '%s'"
|
||||
|
||||
msgid "Interface"
|
||||
msgstr "Anschluss"
|
||||
msgstr "Schnittstelle"
|
||||
|
||||
msgid "Interface name"
|
||||
msgstr "Anschluss-Bezeichnung"
|
||||
msgstr "Name der Verbindung"
|
||||
|
||||
msgid "Invalid"
|
||||
msgstr "ungültig"
|
||||
msgstr "Ungültig"
|
||||
|
||||
msgid "Local tunnel ip address"
|
||||
msgstr "IP-Adresse des lokalen Tunnels"
|
||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-08-03 12:39+0000\n"
|
||||
"PO-Revision-Date: 2020-10-07 10:57+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsglorytun/fr/>\n"
|
||||
|
@ -20,19 +20,19 @@ msgid "Below is a list of configured Glorytun instances and their current state"
|
|||
msgstr "Ci-dessous une liste des instances Glorytun configurées et leur état actuel"
|
||||
|
||||
msgid "Bind address"
|
||||
msgstr ""
|
||||
msgstr "Adresse mappée"
|
||||
|
||||
msgid "Bind backup"
|
||||
msgstr ""
|
||||
msgstr "Lier la sauvegarde"
|
||||
|
||||
msgid "Bind port"
|
||||
msgstr "Port de connexion"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Active"
|
||||
msgstr "Activer"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
msgstr "Activer"
|
||||
|
||||
msgid "Glorytun"
|
||||
msgstr "Glorytun"
|
||||
|
@ -62,7 +62,7 @@ msgid "MTU"
|
|||
msgstr "MTU"
|
||||
|
||||
msgid "MTU auto"
|
||||
msgstr ""
|
||||
msgstr "MTU auto"
|
||||
|
||||
msgid "Overview"
|
||||
msgstr "Aperçu"
|
||||
|
|
104
luci-app-glorytun/po/it/glorytun.po
Normal file
104
luci-app-glorytun/po/it/glorytun.po
Normal file
|
@ -0,0 +1,104 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsglorytun/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"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
msgid ""
|
||||
"Below is a list of configured Glorytun instances and their current state"
|
||||
msgstr ""
|
||||
"Di seguito è riportato un elenco di istanze Glorytun configurate e il loro "
|
||||
"stato corrente"
|
||||
|
||||
msgid "Bind address"
|
||||
msgstr "Associa indirizzo"
|
||||
|
||||
msgid "Bind backup"
|
||||
msgstr "Bind backup"
|
||||
|
||||
msgid "Bind port"
|
||||
msgstr "Bind port"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Attivare"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
msgid "Glorytun"
|
||||
msgstr "Glorytun"
|
||||
|
||||
msgid "Glorytun instances"
|
||||
msgstr "Istanze di Glorytun"
|
||||
|
||||
msgid "Instance \"%s\""
|
||||
msgstr "Istanza \"%s\""
|
||||
|
||||
msgid "Interface"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
msgid "Interface name"
|
||||
msgstr "Nome interfaccia"
|
||||
|
||||
msgid "Invalid"
|
||||
msgstr "Non valido"
|
||||
|
||||
msgid "Local tunnel ip address"
|
||||
msgstr "Indirizzo IP del tunnel locale"
|
||||
|
||||
msgid "MPTCP"
|
||||
msgstr "MPTCP"
|
||||
|
||||
msgid "MTU"
|
||||
msgstr "MTU"
|
||||
|
||||
msgid "MTU auto"
|
||||
msgstr "MTU auto"
|
||||
|
||||
msgid "Overview"
|
||||
msgstr "Panoramica"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
msgid "Protocol"
|
||||
msgstr "Protocollo"
|
||||
|
||||
msgid "Remote host name or ip address"
|
||||
msgstr "Nome host remoto o indirizzo IP"
|
||||
|
||||
msgid "Remote tunnel ip address"
|
||||
msgstr "Indirizzo IP del tunnel remoto"
|
||||
|
||||
msgid "Server mode"
|
||||
msgstr "Modalità server"
|
||||
|
||||
msgid "Start/Stop"
|
||||
msgstr "Marcia/arresto"
|
||||
|
||||
msgid "Started"
|
||||
msgstr "Iniziato"
|
||||
|
||||
msgid "TCP port # for both local and remote"
|
||||
msgstr "Porta TCP # sia per locale che per remoto"
|
||||
|
||||
msgid "The secret key"
|
||||
msgstr "Chiave segreta"
|
||||
|
||||
msgid "Use ChaCha20 stream cipher"
|
||||
msgstr "Usa il cifrario a flusso ChaCha20"
|
||||
|
||||
msgid "no"
|
||||
msgstr "no"
|
||||
|
||||
msgid "yes (%i)"
|
||||
msgstr "Sì (%i)"
|
103
luci-app-glorytun/po/oc/glorytun.po
Normal file
103
luci-app-glorytun/po/oc/glorytun.po
Normal file
|
@ -0,0 +1,103 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-10-13 07:30+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsglorytun/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "Ajustar"
|
||||
|
||||
msgid ""
|
||||
"Below is a list of configured Glorytun instances and their current state"
|
||||
msgstr ""
|
||||
"Çai-jos una lista de las instàncias Glorytun configuradas e lor estat actual"
|
||||
|
||||
msgid "Bind address"
|
||||
msgstr "Adreça mapada"
|
||||
|
||||
msgid "Bind backup"
|
||||
msgstr "Associar la salvagarda"
|
||||
|
||||
msgid "Bind port"
|
||||
msgstr "Pòrt de connexion"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Activat"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
msgid "Glorytun"
|
||||
msgstr "Glorytun"
|
||||
|
||||
msgid "Glorytun instances"
|
||||
msgstr "Instàncias Glorytun"
|
||||
|
||||
msgid "Instance \"%s\""
|
||||
msgstr "Instància « %s »"
|
||||
|
||||
msgid "Interface"
|
||||
msgstr "Interfàcia"
|
||||
|
||||
msgid "Interface name"
|
||||
msgstr "Nom de l’interfàcia"
|
||||
|
||||
msgid "Invalid"
|
||||
msgstr "Invalid"
|
||||
|
||||
msgid "Local tunnel ip address"
|
||||
msgstr "Adreça IP locala del tunèl"
|
||||
|
||||
msgid "MPTCP"
|
||||
msgstr "MPTCP"
|
||||
|
||||
msgid "MTU"
|
||||
msgstr "MTU"
|
||||
|
||||
msgid "MTU auto"
|
||||
msgstr "MTU auto"
|
||||
|
||||
msgid "Overview"
|
||||
msgstr "Apercebut"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Pòrt"
|
||||
|
||||
msgid "Protocol"
|
||||
msgstr "Protocòl"
|
||||
|
||||
msgid "Remote host name or ip address"
|
||||
msgstr "Nom de l’òste alonhat o adreça IP"
|
||||
|
||||
msgid "Remote tunnel ip address"
|
||||
msgstr "Adreça IP alonhada del tunèl"
|
||||
|
||||
msgid "Server mode"
|
||||
msgstr "Mòde servidor"
|
||||
|
||||
msgid "Start/Stop"
|
||||
msgstr "Aviar/Arrestar"
|
||||
|
||||
msgid "Started"
|
||||
msgstr "Aviat"
|
||||
|
||||
msgid "TCP port # for both local and remote"
|
||||
msgstr "Pòrt TCP local e alonhat"
|
||||
|
||||
msgid "The secret key"
|
||||
msgstr "La clau secrèta"
|
||||
|
||||
msgid "Use ChaCha20 stream cipher"
|
||||
msgstr "Utilizar lo chiframent ChaCha20"
|
||||
|
||||
msgid "no"
|
||||
msgstr "non"
|
||||
|
||||
msgid "yes (%i)"
|
||||
msgstr "òc (%i)"
|
|
@ -2,15 +2,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Ycarus <ycarus@zugaina.org>\n"
|
||||
"Language-Team: \n"
|
||||
"PO-Revision-Date: 2020-09-30 08:50+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsiperf/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:128
|
||||
msgid "0 for unlimited. Need to be limited for UDP test"
|
||||
|
@ -87,7 +88,7 @@ msgstr "En attente de la réponse de la commande..."
|
|||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:8
|
||||
msgid "iPerf"
|
||||
msgstr ""
|
||||
msgstr "iPerf"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:99
|
||||
msgid "iPerf speed tests"
|
||||
|
@ -95,4 +96,4 @@ msgstr "Tests de vitesse iPerf"
|
|||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:7
|
||||
msgid "iperf"
|
||||
msgstr ""
|
||||
msgstr "iperf"
|
||||
|
|
96
luci-app-iperf/po/it/iperf.po
Normal file
96
luci-app-iperf/po/it/iperf.po
Normal file
|
@ -0,0 +1,96 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsiperf/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"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:128
|
||||
msgid "0 for unlimited. Need to be limited for UDP test"
|
||||
msgstr "0 per illimitato. Deve essere limitato per il test UDP"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
|
||||
msgid "Bad address specified!"
|
||||
msgstr "È stato specificato un indirizzo errato!"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:78
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:83
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
|
||||
msgid "Download"
|
||||
msgstr "Scarica"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:114
|
||||
msgid "Internet protocol"
|
||||
msgstr "Internet Protocol (Protocollo Internet)"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
|
||||
msgid "Loading"
|
||||
msgstr "Caricamento in corso"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:105
|
||||
msgid "Mode of operation"
|
||||
msgstr "Modalità di funzionamento"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:133
|
||||
msgid "Number of parallel client streams to run"
|
||||
msgstr "Numero di flussi client paralleli da eseguire"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:139
|
||||
msgid "Omit the first n seconds"
|
||||
msgstr "Ometti i primi n secondi"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:151
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:102
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:123
|
||||
msgid "Target bitrate (Mbits/s)"
|
||||
msgstr "Bitrate desiderato (Mbits/s)"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:165
|
||||
msgid "Test"
|
||||
msgstr "Test"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
|
||||
msgid "This iPerf interface is in bêta. No support for this."
|
||||
msgstr "Questa interfaccia iPerf è in bêta."
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:145
|
||||
msgid "Time to transmit for (s)"
|
||||
msgstr "È ora di trasmettere per (s)"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:38
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:43
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
|
||||
msgid "Upload"
|
||||
msgstr "Carica"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:27
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:67
|
||||
msgid "Waiting for command to complete..."
|
||||
msgstr "In attesa del completamento del comando ..."
|
||||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:8
|
||||
msgid "iPerf"
|
||||
msgstr "iPerf"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:99
|
||||
msgid "iPerf speed tests"
|
||||
msgstr "Prove di velocità iPerf"
|
||||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:7
|
||||
msgid "iperf"
|
||||
msgstr "iPerf"
|
96
luci-app-iperf/po/oc/iperf.po
Normal file
96
luci-app-iperf/po/oc/iperf.po
Normal file
|
@ -0,0 +1,96 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsiperf/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:128
|
||||
msgid "0 for unlimited. Need to be limited for UDP test"
|
||||
msgstr "0 per cap de limit. Requerís un limit pels ensages UDP"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
|
||||
msgid "Bad address specified!"
|
||||
msgstr "Adreça invalida !"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:78
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:83
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
|
||||
msgid "Download"
|
||||
msgstr "Telecargament"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:114
|
||||
msgid "Internet protocol"
|
||||
msgstr "Protocòl Internet"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
|
||||
msgid "Loading"
|
||||
msgstr "Cargament"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:105
|
||||
msgid "Mode of operation"
|
||||
msgstr "Mòde de foncionament"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:133
|
||||
msgid "Number of parallel client streams to run"
|
||||
msgstr "Nombre de clients en parallèl"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:139
|
||||
msgid "Omit the first n seconds"
|
||||
msgstr "Sautar las primièras n segondas"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:151
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:102
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:123
|
||||
msgid "Target bitrate (Mbits/s)"
|
||||
msgstr "Velocitat desirada (Mbits/s)"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:165
|
||||
msgid "Test"
|
||||
msgstr "Pròva"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
|
||||
msgid "This iPerf interface is in bêta. No support for this."
|
||||
msgstr "Aquesta interfàcia per iPerf es en beta. Cap de support per aquò."
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:145
|
||||
msgid "Time to transmit for (s)"
|
||||
msgstr "Temps de transmission (s)"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:38
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:43
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
|
||||
msgid "Upload"
|
||||
msgstr "Mandadís"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:27
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:67
|
||||
msgid "Waiting for command to complete..."
|
||||
msgstr "En espèra d’una responsa de la comanda..."
|
||||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:8
|
||||
msgid "iPerf"
|
||||
msgstr "iPerf"
|
||||
|
||||
#: luci-app-iperf/luasrc/view/iperf/test.htm:99
|
||||
msgid "iPerf speed tests"
|
||||
msgstr "Pròva de velocitat iPerf"
|
||||
|
||||
#: luci-app-iperf/luasrc/controller/iperf.lua:7
|
||||
msgid "iperf"
|
||||
msgstr "iperf"
|
46
luci-app-mail/po/it/mail.po
Normal file
46
luci-app-mail/po/it/mail.po
Normal file
|
@ -0,0 +1,46 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/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"
|
||||
|
||||
msgid "From"
|
||||
msgstr "Da"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "Impostazioni mail"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Configurare le impostazioni di posta per i servizi che devono inviare "
|
||||
"messaggi di posta elettronica."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
46
luci-app-mail/po/oc/mail.po
Normal file
46
luci-app-mail/po/oc/mail.po
Normal file
|
@ -0,0 +1,46 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "Paramètres e-mail"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Senhal"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Pòrt"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Definissètz los paramètres de messatjariá pels servicis que devon enviar "
|
||||
"d’e-mails."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilizaire"
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmlvpn/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -11,16 +11,16 @@ msgstr ""
|
|||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "hinzufügen"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "anschalten"
|
||||
msgstr "Aktivieren"
|
||||
|
||||
msgid "First remote port"
|
||||
msgstr "Erster Gegenstellen-Port"
|
||||
|
||||
msgid "Interface name"
|
||||
msgstr "Anschluss-Bezeichnung"
|
||||
msgstr "Name der Verbindung"
|
||||
|
||||
msgid "Interface will increase port used beginning with this"
|
||||
msgstr "Der Anschluss wird die Pornummern nutzen beginnend mit diesem Wert"
|
||||
|
@ -29,7 +29,7 @@ msgid "Interfaces"
|
|||
msgstr "Anschlüsse"
|
||||
|
||||
msgid "Invalid"
|
||||
msgstr "ungültig"
|
||||
msgstr "Ungültig"
|
||||
|
||||
msgid "Loss tolerance"
|
||||
msgstr "Verlust-Toleranz"
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Last-Translator: Ycarus <ycarus@zugaina.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"PO-Revision-Date: 2020-10-07 10:57+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmlvpn/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Activé"
|
||||
msgstr "Activer"
|
||||
|
||||
msgid "First remote port"
|
||||
msgstr "Premier port distant"
|
||||
|
@ -25,7 +26,7 @@ msgid "Interface name"
|
|||
msgstr "Nom de l'interface"
|
||||
|
||||
msgid "Interface will increase port used beginning with this"
|
||||
msgstr ""
|
||||
msgstr "L'interface augmentera le port utilisé à partir de celui ci"
|
||||
|
||||
msgid "Interfaces"
|
||||
msgstr "Interfaces"
|
||||
|
@ -34,13 +35,13 @@ msgid "Invalid"
|
|||
msgstr "Invalide"
|
||||
|
||||
msgid "Loss tolerance"
|
||||
msgstr ""
|
||||
msgstr "Tolérance aux pertes"
|
||||
|
||||
msgid "MLVPN"
|
||||
msgstr ""
|
||||
msgstr "MLVPN"
|
||||
|
||||
msgid "Mode"
|
||||
msgstr ""
|
||||
msgstr "Mode"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
@ -52,7 +53,7 @@ msgid "Remote/Bind port"
|
|||
msgstr "Port de connexion distant"
|
||||
|
||||
msgid "Reorder buffer size"
|
||||
msgstr ""
|
||||
msgstr "Taille du tampon de réordonnancement"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
|
59
luci-app-mlvpn/po/it/mlvpn.po
Normal file
59
luci-app-mlvpn/po/it/mlvpn.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmlvpn/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"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Attivare"
|
||||
|
||||
msgid "First remote port"
|
||||
msgstr "Prima porta remota"
|
||||
|
||||
msgid "Interface name"
|
||||
msgstr "Nome interfaccia"
|
||||
|
||||
msgid "Interface will increase port used beginning with this"
|
||||
msgstr "L'interfaccia aumenterà la porta utilizzata a partire da questa"
|
||||
|
||||
msgid "Interfaces"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
msgid "Invalid"
|
||||
msgstr "Non valido"
|
||||
|
||||
msgid "Loss tolerance"
|
||||
msgstr "Tolleranza alla perdita"
|
||||
|
||||
msgid "MLVPN"
|
||||
msgstr "MLVPN"
|
||||
|
||||
msgid "Mode"
|
||||
msgstr "Modo"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
msgid "Remote host"
|
||||
msgstr "Rimuovi server"
|
||||
|
||||
msgid "Remote/Bind port"
|
||||
msgstr "Porta remota / Bind"
|
||||
|
||||
msgid "Reorder buffer size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
msgid "Timeout (s)"
|
||||
msgstr ""
|
|
@ -34,12 +34,31 @@ function interface_bandwidth(iface)
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
function string.split(input, delimiter)
|
||||
input = tostring(input)
|
||||
delimiter = tostring(delimiter)
|
||||
if (delimiter=='') then return false end
|
||||
local pos,arr = 0, {}
|
||||
-- for each divider found
|
||||
for st,sp in function() return string.find(input, delimiter, pos, true) end do
|
||||
table.insert(arr, string.sub(input, pos, st - 1))
|
||||
pos = sp + 1
|
||||
end
|
||||
table.insert(arr, string.sub(input, pos))
|
||||
return arr
|
||||
end
|
||||
|
||||
function multipath_bandwidth()
|
||||
local result = { };
|
||||
local uci = luci.model.uci.cursor()
|
||||
local res={ };
|
||||
local str="";
|
||||
local tmpstr="";
|
||||
|
||||
uci:foreach("network", "interface", function(s)
|
||||
local intname = s[".name"]
|
||||
local label = s["label"]
|
||||
local dev = get_device(intname)
|
||||
if dev == "" then
|
||||
dev = get_device(s["ifname"])
|
||||
|
@ -53,17 +72,89 @@ function multipath_bandwidth()
|
|||
multipath = "off"
|
||||
end
|
||||
if multipath == "on" or multipath == "master" or multipath == "backup" or multipath == "handover" then
|
||||
local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or ""
|
||||
local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or ""
|
||||
if bwc ~= nil then
|
||||
--result[dev] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
|
||||
result[intname] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
|
||||
if label ~= nil then
|
||||
result[intname .. " (" .. label .. ")" ] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
|
||||
else
|
||||
result[intname] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
|
||||
end
|
||||
else
|
||||
result[dev] = "[]"
|
||||
if label ~= nil then
|
||||
result[intname .. " (" .. label .. ")" ] = "[]"
|
||||
else
|
||||
result[intname] = "[]"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
res["total"]={ };
|
||||
for i=1,60 do
|
||||
res["total"][i]={}
|
||||
for j=1,5 do
|
||||
res["total"][i][j]=0
|
||||
end
|
||||
end
|
||||
|
||||
for key,value in pairs(result) do
|
||||
res[key]={}
|
||||
value=(string.gsub(value, "^%[%[", ""))
|
||||
value=(string.gsub(value, "%]%]", ""))
|
||||
local temp1 = string.split(value, "],")
|
||||
if temp1[2] ~= nil then
|
||||
res[key][1]=temp1[1]
|
||||
for i=2,60 do
|
||||
res[key][i]={}
|
||||
if temp1[i] ~= nil then
|
||||
res[key][i]=(string.gsub(temp1[i], "%[", " "))
|
||||
end
|
||||
end
|
||||
for i=1,60 do
|
||||
res[key][i] = string.split(res[key][i], ",")
|
||||
for j=1,5 do
|
||||
if "string"== type(res[key][i][j]) then
|
||||
res[key][i][j]= tonumber(res[key][i][j])
|
||||
end
|
||||
if "string"==type(res["total"][i][j]) then
|
||||
res["total"][i][j]= tonumber(res["total"][i][j])
|
||||
end
|
||||
if j ==1 then
|
||||
if res[key][i][j] ~= nil then
|
||||
res["total"][i][j] = res[key][i][j]
|
||||
else
|
||||
res["total"][i][j] = 0
|
||||
end
|
||||
else
|
||||
if res[key][i][j] ~= nil then
|
||||
res["total"][i][j] = res["total"][i][j] + res[key][i][j]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for i=1,60 do
|
||||
for j=1,5 do
|
||||
if "number"== type(res["total"][i][j]) then
|
||||
res["total"][i][j]= tostring(res["total"][i][j])
|
||||
end
|
||||
end
|
||||
end
|
||||
for i=1,60 do
|
||||
if i == 60 then
|
||||
tmpstr = "["..table.concat(res["total"][i], ",")
|
||||
else
|
||||
tmpstr = "["..table.concat(res["total"][i], ",").."],"
|
||||
end
|
||||
str = str..tmpstr
|
||||
end
|
||||
str = "["..str.."]]"
|
||||
result["total"]=str
|
||||
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(result)
|
||||
end
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
-- Copyright 2015 OVH (OverTheBox@ovh.net)
|
||||
-- Simon Lelievre (simon.lelievre@corp.ovh.com)
|
||||
-- Sebastien Duponcheel (sebastien.duponcheel@ovh.net)
|
||||
-- Copyright 2018-2020 Ycarus - Yannick Chabanois (ycarus@zugaina.org)
|
||||
-- Copyright 2018-2020 Ycarus - Yannick Chabanois (ycarus@zugaina.org) for OpenMPTCProuter
|
||||
--
|
||||
-- This file is part of OverTheBox for OpenWrt.
|
||||
-- Part of this file come from OverTheBox for OpenWrt.
|
||||
--
|
||||
-- OverTheBox is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
|
@ -45,6 +45,9 @@
|
|||
end
|
||||
|
||||
local curifname = luci.http.formvalue("dev") or "all"
|
||||
local bandwidthtotalurl = "admin/network/mptcp/multipath_bandwidth"
|
||||
local bandwidthintfurl = "admin/network/mptcp/interface_bandwidth"
|
||||
|
||||
-%>
|
||||
|
||||
<%+header%>
|
||||
|
@ -54,21 +57,23 @@
|
|||
<script type="text/javascript">//<![CDATA[
|
||||
|
||||
function stringToColour(str) {
|
||||
if(str == "wan")
|
||||
if(str == "total")
|
||||
return "OrangeRed";
|
||||
if(str.substring(0, 4) == "wan")
|
||||
return "FireBrick";
|
||||
if(str == "wan1")
|
||||
if(str.substring(0, 4) == "wan1")
|
||||
return "DeepSkyBlue";
|
||||
if(str == "wan2")
|
||||
if(str.substring(0, 4) == "wan2")
|
||||
return "SeaGreen";
|
||||
if(str == "wan3")
|
||||
if(str.substring(0, 4) == "wan3")
|
||||
return "PaleGreen";
|
||||
if(str == "wan4")
|
||||
if(str.substring(0, 4) == "wan4")
|
||||
return "PowderBlue";
|
||||
if(str == "wan5")
|
||||
if(str.substring(0, 4) == "wan5")
|
||||
return "Salmon";
|
||||
if(str == "wan6")
|
||||
if(str.substring(0, 4) == "wan6")
|
||||
return "LightGreen";
|
||||
if(str == "wan7")
|
||||
if(str.substring(0, 4) == "wan7")
|
||||
return "PaleTurquoise";
|
||||
// Generate a color folowing the name
|
||||
Math.seedrandom(str);
|
||||
|
@ -185,13 +190,6 @@
|
|||
height = dnsvg.offsetHeight - 2;
|
||||
data_wanted = Math.ceil(width / step);
|
||||
|
||||
/* prefill datasets
|
||||
for (var i = 0; i < data_wanted; i++)
|
||||
{
|
||||
data_tx[i] = 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/* find svg elements */
|
||||
labeldn_25 = Gdn.getElementById('label_25');
|
||||
labeldn_50 = Gdn.getElementById('label_50');
|
||||
|
@ -244,7 +242,7 @@
|
|||
labelup_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 3, data_wanted / 60);
|
||||
|
||||
/* render datasets, start update interval */
|
||||
XHR.poll(3, '<%=build_url("admin/network/mptcp/multipath_bandwidth", all)%>', null,
|
||||
XHR.poll(3, '<%=build_url(bandwidthtotalurl, all)%>', null,
|
||||
function(x, dataarray)
|
||||
{
|
||||
var data_max_dnl = 0;
|
||||
|
@ -259,6 +257,7 @@
|
|||
var data_tx_peak = 0;
|
||||
|
||||
var data = {};
|
||||
var pre_itf = "";
|
||||
|
||||
for(var itf in dataarray)
|
||||
{
|
||||
|
@ -271,7 +270,15 @@
|
|||
// Create a new polygon to draw the bandwith
|
||||
var dnline = Gdn.createElementNS('http://www.w3.org/2000/svg', 'polyline');
|
||||
dnline.setAttributeNS(null, 'id', 'rx_' + itf);
|
||||
dnline.setAttributeNS(null, 'style', 'fill:' + color + ';fill-opacity:0.4;stroke:black;stroke-width:0.1');
|
||||
if (itf != "total")
|
||||
{
|
||||
dnline.setAttributeNS(null, 'style', 'fill:' + color + ';fill-opacity:0.4;stroke:black;stroke-width:0.1');
|
||||
}
|
||||
else
|
||||
{
|
||||
//dnline.setAttributeNS(null, 'style', 'fill: none;stroke:OrangeRed;stroke-width:1');
|
||||
dnline.setAttributeNS(null, 'style', 'fill: none;stroke:none');
|
||||
}
|
||||
Gdn.getElementById('rx').parentNode.appendChild(dnline);
|
||||
|
||||
dnPolygons[itf] = Gdn.getElementById('rx_' + itf);
|
||||
|
@ -284,11 +291,18 @@
|
|||
|
||||
// Create legend for this connextion
|
||||
var table = document.getElementById('download_stats');
|
||||
var tr = table.insertRow();
|
||||
if (pre_itf == "total")
|
||||
{
|
||||
var tr = table.insertRow(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
var tr = table.insertRow();
|
||||
}
|
||||
tr.setAttribute('id', itf + '_download');
|
||||
// Create cells of the table
|
||||
var itflabel = tr.insertCell(0);
|
||||
// Crete itf legend
|
||||
// Create itf legend
|
||||
var strong = document.createElement('strong')
|
||||
strong.appendChild(document.createTextNode(itf));
|
||||
strong.setAttribute('style', 'border-bottom:2px solid ' + color);
|
||||
|
@ -312,7 +326,15 @@
|
|||
{
|
||||
var upline = Gup.createElementNS('http://www.w3.org/2000/svg', 'polyline');
|
||||
upline.setAttributeNS(null, 'id', 'tx_' + itf);
|
||||
upline.setAttributeNS(null, 'style', 'fill:' + color + ';fill-opacity:0.4;stroke:black;stroke-width:0.1');
|
||||
if (itf != "total")
|
||||
{
|
||||
upline.setAttributeNS(null, 'style', 'fill:' + color + ';fill-opacity:0.4;stroke:black;stroke-width:0.1');
|
||||
}
|
||||
else
|
||||
{
|
||||
//upline.setAttributeNS(null, 'style', 'fill:none;stroke:OrangeRed;stroke-width:1');
|
||||
upline.setAttributeNS(null, 'style', 'fill:none;stroke:none');
|
||||
}
|
||||
Gup.getElementById('tx').parentNode.appendChild(upline);
|
||||
|
||||
upPolygons[itf] = Gup.getElementById('tx_' + itf);
|
||||
|
@ -325,7 +347,16 @@
|
|||
|
||||
// Create legend for this connextion
|
||||
var table = document.getElementById('upload_stats');
|
||||
var tr = table.insertRow();
|
||||
|
||||
if (pre_itf == "total")
|
||||
{
|
||||
var tr = table.insertRow(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var tr = table.insertRow();
|
||||
}
|
||||
tr.setAttribute('id', itf + '_upload');
|
||||
// Create cells of the table
|
||||
var itflabel = tr.insertCell(0);
|
||||
|
@ -347,8 +378,8 @@
|
|||
var itfpeak = tr.insertCell(6);
|
||||
itfpeak.setAttribute('id', itf + '_upload_peak');
|
||||
itfpeak.appendChild(document.createTextNode('0 <%:kbit/s%> (0 <%:kB/s%>)'));
|
||||
|
||||
}
|
||||
if (pre_itf != "total") pre_itf = itf;
|
||||
}
|
||||
|
||||
var dnsma = {};
|
||||
|
@ -402,6 +433,7 @@
|
|||
var toadditf = [ ];
|
||||
for (var itf in data)
|
||||
{
|
||||
//if (itf == "total") continue;
|
||||
uplineDnl[itf] = [ ];
|
||||
downlineDnl[itf]= [ ];
|
||||
uplineUpl[itf] = [ ];
|
||||
|
@ -415,11 +447,15 @@
|
|||
{
|
||||
var rx_bot=0;
|
||||
var tx_bot=0;
|
||||
if (itf != "total")
|
||||
{
|
||||
for(var j=0; j < toadditf.length; j++)
|
||||
{
|
||||
if (toadditf[j] == "total") continue;
|
||||
rx_bot += dndata[toadditf[j]][i];
|
||||
tx_bot += updata[toadditf[j]][i];
|
||||
}
|
||||
}
|
||||
// set upline of the interface
|
||||
uplineDnl[itf][i] = dndata[itf][i] + rx_bot;
|
||||
data_rx_peak = Math.max(data_rx_peak, dndata[itf][i]);
|
||||
|
@ -439,11 +475,14 @@
|
|||
}
|
||||
if(toadditf.length)
|
||||
{
|
||||
if (toadditf[toadditf.length-1] != "total")
|
||||
{
|
||||
downlineDnl[itf][i] = uplineDnl[toadditf[toadditf.length-1]][i];
|
||||
downlineUpl[itf][i] = uplineUpl[toadditf[toadditf.length-1]][i];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
toadditf.push(itf);
|
||||
|
||||
// Update stats labels
|
||||
|
@ -481,6 +520,7 @@
|
|||
|
||||
for (var itf in uplineDnl)
|
||||
{
|
||||
if (itf == "total") continue;
|
||||
var y_rx = 0;
|
||||
var y_tx = 0;
|
||||
|
||||
|
@ -551,7 +591,7 @@
|
|||
if (typeof dntopline != "object")
|
||||
{
|
||||
dntopline = Gdn.getElementById('rx');
|
||||
dntopline.setAttributeNS(null, 'style', 'stroke:DimGray;stroke-width:1;stroke-linecap="round";fill:;fill-opacity:0;');
|
||||
dntopline.setAttributeNS(null, 'style', 'stroke:DimGray;stroke-width:0;stroke-linecap="round";fill:;fill-opacity:0;');
|
||||
/* Move line on top */
|
||||
var father = dntopline.parentNode;
|
||||
father.removeChild(dntopline);
|
||||
|
@ -560,28 +600,26 @@
|
|||
if (typeof uptopline != "object")
|
||||
{
|
||||
uptopline = Gup.getElementById('tx');
|
||||
uptopline.setAttributeNS(null, 'style', 'stroke:DimGray;stroke-width:1;stroke-linecap="round";fill:;fill-opacity:0;');
|
||||
uptopline.setAttributeNS(null, 'style', 'stroke:DimGray;stroke-width:0;stroke-linecap="round";fill:;fill-opacity:0;');
|
||||
/* Move line on top */
|
||||
var father = uptopline.parentNode;
|
||||
father.removeChild(uptopline);
|
||||
father.appendChild(uptopline);
|
||||
}
|
||||
var y_rx = 0;
|
||||
var y_tx = 0;
|
||||
var y_rx = 0;
|
||||
var y_tx = 0;
|
||||
|
||||
/* plot data */
|
||||
var pt_rx = '0,' + height;
|
||||
var pt_tx = '0,' + height;
|
||||
/* plot data */
|
||||
var pt_rx = '0,' + height;
|
||||
var pt_tx = '0,' + height;
|
||||
|
||||
// draw polygon
|
||||
for (var i = 0; i < uplineDnl[itf].length; i++)
|
||||
{
|
||||
var x = i * step;
|
||||
|
||||
y_rx = height - Math.floor((uplineDnl[itf][i]) * data_scale_dnl);
|
||||
y_tx = height - Math.floor((uplineUpl[itf][i]) * data_scale_upl);
|
||||
|
||||
pt_rx += ' ' + x + ',' + y_rx;
|
||||
// draw polygon
|
||||
for (var i = 0; i < uplineDnl[itf].length; i++)
|
||||
{
|
||||
var x = i * step;
|
||||
y_rx = height - Math.floor((uplineDnl[itf][i]) * data_scale_dnl);
|
||||
y_tx = height - Math.floor((uplineUpl[itf][i]) * data_scale_upl);
|
||||
pt_rx += ' ' + x + ',' + y_rx;
|
||||
pt_tx += ' ' + x + ',' + y_tx;
|
||||
}
|
||||
// draw last tangant point in upline graph
|
||||
|
@ -737,7 +775,7 @@
|
|||
label_scale.innerHTML = String.format('<%:(%d minute window, %d second interval)%>', data_wanted / 60, 3);
|
||||
|
||||
/* render datasets, start update interval */
|
||||
XHR.poll(3, '<%=build_url("admin/network/mptcp/interface_bandwidth", curifname)%>', null,
|
||||
XHR.poll(3, '<%=build_url(bandwidthintfurl, curifname)%>', null,
|
||||
function(x, data)
|
||||
{
|
||||
var data_max = 0;
|
||||
|
@ -855,9 +893,13 @@ window.setTimeout(function()
|
|||
<ul class="cbi-tabmenu">
|
||||
<% for _, dev in ipairs(devices) do
|
||||
local ifname = get_device(dev)
|
||||
%>
|
||||
|
||||
<li class="cbi-tab<%= ifname == curifname and "" or "-disabled" %>"><a href="?dev=<%=pcdata(get_device(dev))%>"><%=pcdata(dev)%></a></li>
|
||||
local label = uci:get("network",dev,"label")
|
||||
if label ~= nil then
|
||||
%>
|
||||
<li class="cbi-tab<%= ifname == curifname and "" or "-disabled" %>"><a href="?dev=<%=pcdata(get_device(dev))%>"><%=label%></a></li>
|
||||
<% else %>
|
||||
<li class="cbi-tab<%= ifname == curifname and "" or "-disabled" %>"><a href="?dev=<%=pcdata(get_device(dev))%>"><%=pcdata(dev)%></a></li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmptcp/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -81,7 +81,7 @@ msgstr "Ankommend:"
|
|||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:48
|
||||
msgid "Interface"
|
||||
msgstr "Anschluss"
|
||||
msgstr "Schnittstelle"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:55
|
||||
msgid "Interfaces Settings"
|
||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-08-03 12:39+0000\n"
|
||||
"PO-Revision-Date: 2020-10-07 10:57+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmptcp/fr/>\n"
|
||||
|
@ -35,7 +35,7 @@ msgid "Download:"
|
|||
msgstr "Téléchargement :"
|
||||
|
||||
msgid "Fullmesh subflows for each pair of IP addresses"
|
||||
msgstr ""
|
||||
msgstr "Sous-flux Fullmesh pour chaque paire d'adresses IP"
|
||||
|
||||
msgid "Inbound:"
|
||||
msgstr "Entrant :"
|
||||
|
@ -50,13 +50,13 @@ msgid "MPTCP"
|
|||
msgstr "MPTCP"
|
||||
|
||||
msgid "Mbit/s"
|
||||
msgstr ""
|
||||
msgstr "Mbit/s"
|
||||
|
||||
msgid "Multipath TCP"
|
||||
msgstr "Multipath TCP"
|
||||
|
||||
msgid "Multipath TCP SYN retries"
|
||||
msgstr ""
|
||||
msgstr "Tentatives Multipath TCP SYN"
|
||||
|
||||
msgid "Multipath TCP checksum"
|
||||
msgstr "Somme de contrôle Multipath TCP"
|
||||
|
@ -64,7 +64,6 @@ msgstr "Somme de contrôle Multipath TCP"
|
|||
msgid "Multipath TCP path-manager"
|
||||
msgstr "Gestionnaire de chemins Multipath TCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Multipath TCP scheduler"
|
||||
msgstr "Planificateur Multipath TCP"
|
||||
|
||||
|
@ -87,7 +86,7 @@ msgid "Peak:"
|
|||
msgstr "Pointe :"
|
||||
|
||||
msgid "Re-create fullmesh subflows after a timeout"
|
||||
msgstr ""
|
||||
msgstr "Recréer les sous-flux fullmesh après le délai d'expiration"
|
||||
|
||||
msgid "Realtime Traffic"
|
||||
msgstr "Trafic temps réel"
|
||||
|
@ -98,12 +97,11 @@ msgstr "Paramètres"
|
|||
msgid "Upload:"
|
||||
msgstr "Envoie :"
|
||||
|
||||
#, fuzzy
|
||||
msgid "backup"
|
||||
msgstr "copie de sauvegarde"
|
||||
msgstr "remplaçant"
|
||||
|
||||
msgid "binder"
|
||||
msgstr ""
|
||||
msgstr "lier"
|
||||
|
||||
msgid "default"
|
||||
msgstr "Défaut"
|
||||
|
@ -121,16 +119,16 @@ msgid "enabled"
|
|||
msgstr "Activé"
|
||||
|
||||
msgid "fullmesh"
|
||||
msgstr ""
|
||||
msgstr "fullmesh"
|
||||
|
||||
msgid "handover"
|
||||
msgstr ""
|
||||
msgstr "relais"
|
||||
|
||||
msgid "kB/s"
|
||||
msgstr ""
|
||||
msgstr "Ko/s"
|
||||
|
||||
msgid "kbit/s"
|
||||
msgstr ""
|
||||
msgstr "kbit/s"
|
||||
|
||||
msgid "master"
|
||||
msgstr "maître"
|
||||
|
@ -139,14 +137,13 @@ msgid "ndiffports"
|
|||
msgstr "ndiffports"
|
||||
|
||||
msgid "ndiffports subflows number"
|
||||
msgstr ""
|
||||
msgstr "Nombre de sous-flux ndiffports"
|
||||
|
||||
#, fuzzy
|
||||
msgid "redundant"
|
||||
msgstr "redondant"
|
||||
|
||||
msgid "round-robin"
|
||||
msgstr ""
|
||||
msgstr "à tour de rôle"
|
||||
|
||||
#~ msgid "Networks MPTCP settings"
|
||||
#~ msgstr "Paramètres réseaux MPTCP"
|
||||
|
|
295
luci-app-mptcp/po/it/mptcp.po
Normal file
295
luci-app-mptcp/po/it/mptcp.po
Normal file
|
@ -0,0 +1,295 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-10-02 08:44+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmptcp/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"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:779
|
||||
msgid "(%d minute window, %d second interval)"
|
||||
msgstr "(finestra di% d minuti, intervallo di% d secondi)"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:245
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:246
|
||||
msgid "(%d minutes window, %d seconds interval)"
|
||||
msgstr "(finestra di% d minuti, intervallo di% d secondi)"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:319
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:377
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:932
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:942
|
||||
msgid "Average:"
|
||||
msgstr "Media:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:34
|
||||
msgid "BLEST"
|
||||
msgstr "BLEST"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:11
|
||||
msgid "Bandwidth"
|
||||
msgstr "Larghezza banda"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:43
|
||||
msgid "Check if MPTCP between interface and server is working."
|
||||
msgstr "Controlla se MPTCP tra l'interfaccia e il server funziona."
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:40
|
||||
msgid "Congestion Control"
|
||||
msgstr "Controllo della congestione"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:315
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:373
|
||||
msgid "Current:"
|
||||
msgstr "Corrente:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:40
|
||||
msgid "Default is bbr"
|
||||
msgstr "L'impostazione predefinita è bbr"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:908
|
||||
msgid "Download:"
|
||||
msgstr "Scarica:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:35
|
||||
msgid "ECF"
|
||||
msgstr "ECF"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:31
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:18
|
||||
msgid "Established connections"
|
||||
msgstr "Connessioni stabilite"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:45
|
||||
msgid "Fullmesh subflows for each pair of IP addresses"
|
||||
msgstr "Flussi secondari fullmesh per ogni coppia di indirizzi IP"
|
||||
|
||||
#: luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json:3
|
||||
msgid "Grant UCI access for luci-app-mptcp"
|
||||
msgstr "Concedi l'accesso UCI per luci-app-mptcp"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:929
|
||||
msgid "Inbound:"
|
||||
msgstr "In entrata:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:48
|
||||
msgid "Interface"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
msgid "Interfaces Settings"
|
||||
msgstr "Impostazioni delle interfacce"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:21
|
||||
msgid "Loading"
|
||||
msgstr "Caricamento in corso"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:90
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:690
|
||||
msgid "MB/s"
|
||||
msgstr "MB/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:9
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
|
||||
#: luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json:3
|
||||
msgid "MPTCP"
|
||||
msgstr "MPTCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:16
|
||||
msgid "MPTCP Fullmesh"
|
||||
msgstr "MPTCP Fullmesh"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:14
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:42
|
||||
msgid "MPTCP Support Check"
|
||||
msgstr "Verifica supporto MPTCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:99
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:699
|
||||
msgid "Mbit/s"
|
||||
msgstr "Mbit/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:18
|
||||
msgid "Multipath Debug"
|
||||
msgstr "Debug multipath"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:12
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
msgid "Multipath TCP"
|
||||
msgstr "Multipath TCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:37
|
||||
msgid "Multipath TCP SYN retries"
|
||||
msgstr "Multipath TCP SYN riprova"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:15
|
||||
msgid "Multipath TCP checksum"
|
||||
msgstr "Multipath TCP checksum"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:21
|
||||
msgid "Multipath TCP path-manager"
|
||||
msgstr "Multipath TCP path-manager"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:29
|
||||
msgid "Multipath TCP scheduler"
|
||||
msgstr "Multipath TCP scheduler"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:27
|
||||
msgid "Netlink"
|
||||
msgstr "Netlink"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
|
||||
msgid ""
|
||||
"Networks MPTCP settings. Visit <a href='http://multipath-tcp.org/pmwiki.php/"
|
||||
"Users/ConfigureMPTCP'>http://multipath-tcp.org/pmwiki.php/Users/"
|
||||
"ConfigureMPTCP</a> for help."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
msgid "One interface must be set as master"
|
||||
msgstr "Un'interfaccia deve essere impostata come master"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:939
|
||||
msgid "Outbound:"
|
||||
msgstr "In uscita:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:323
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:381
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:935
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:945
|
||||
msgid "Peak:"
|
||||
msgstr "Picco:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:48
|
||||
msgid "Re-create fullmesh subflows after a timeout"
|
||||
msgstr "Ricrea i flussi secondari fullmesh dopo un timeout"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:895
|
||||
msgid "Realtime Traffic"
|
||||
msgstr "Traffico in tempo reale"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:10
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:45
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65
|
||||
msgid "Test"
|
||||
msgstr "Test"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
|
||||
msgid "Upload:"
|
||||
msgstr "Carica:"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:21
|
||||
msgid "Waiting for command to complete..."
|
||||
msgstr "In attesa del completamento del comando ..."
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:61
|
||||
msgid "backup"
|
||||
msgstr "backup"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:25
|
||||
msgid "binder"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:22
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:30
|
||||
msgid "default"
|
||||
msgstr "predefinito"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:14
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:17
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:20
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:50
|
||||
msgid "disable"
|
||||
msgstr "disabilita"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
|
||||
msgid "disabled"
|
||||
msgstr "disabilitato"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:13
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:16
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:19
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:49
|
||||
msgid "enable"
|
||||
msgstr "Attivare"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:58
|
||||
msgid "enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:23
|
||||
msgid "fullmesh"
|
||||
msgstr "fullmesh"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:85
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:376
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:380
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:384
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:685
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:930
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:933
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:936
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:940
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:943
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:946
|
||||
msgid "kB/s"
|
||||
msgstr "kB/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:94
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:376
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:380
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:384
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:694
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:930
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:933
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:936
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:940
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:943
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:946
|
||||
msgid "kbit/s"
|
||||
msgstr "kbit/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:60
|
||||
msgid "master"
|
||||
msgstr "Principale"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:24
|
||||
msgid "ndiffports"
|
||||
msgstr "ndiffports"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:52
|
||||
msgid "ndiffports subflows number"
|
||||
msgstr "ndiffports subflows number"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:32
|
||||
msgid "redundant"
|
||||
msgstr "ridondante"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:31
|
||||
msgid "round-robin"
|
||||
msgstr "round-robin"
|
294
luci-app-mptcp/po/oc/mptcp.po
Normal file
294
luci-app-mptcp/po/oc/mptcp.po
Normal file
|
@ -0,0 +1,294 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-10-19 09:37+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmptcp/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:652
|
||||
msgid "(%d minute window, %d second interval)"
|
||||
msgstr "(fenèstra de %d minuta,interval de %d segonda)"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:227
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:228
|
||||
msgid "(%d minutes window, %d seconds interval)"
|
||||
msgstr "(fenèstra de %d minutas,interval de %d segondas)"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:284
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:323
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:796
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:806
|
||||
msgid "Average:"
|
||||
msgstr "Mejana :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:34
|
||||
#, fuzzy
|
||||
msgid "BLEST"
|
||||
msgstr "BLEST"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:11
|
||||
msgid "Bandwidth"
|
||||
msgstr "Benda passanta"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:43
|
||||
msgid "Check if MPTCP between interface and server is working."
|
||||
msgstr "Verificar se MPTCP entre l‘interfàcia e lo servidor fonciona."
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
|
||||
msgid "Congestion Control"
|
||||
msgstr "Contraròtle de congestion"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:280
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:319
|
||||
msgid "Current:"
|
||||
msgstr "Actualament :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
|
||||
msgid "Default is bbr"
|
||||
msgstr "Per defaut bbr"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:772
|
||||
msgid "Download:"
|
||||
msgstr "Telecargament :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:31
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:18
|
||||
msgid "Established connections"
|
||||
msgstr "Connexions establidas"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:44
|
||||
msgid "Fullmesh subflows for each pair of IP addresses"
|
||||
msgstr "Jos flux Fullmesh per cada parelh d’adreças IP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:793
|
||||
msgid "Inbound:"
|
||||
msgstr "Dintrant :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:48
|
||||
msgid "Interface"
|
||||
msgstr "Interfàcia"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:55
|
||||
msgid "Interfaces Settings"
|
||||
msgstr "Paramètres de las interfàcias"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:21
|
||||
msgid "Loading"
|
||||
msgstr "Cargament"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:79
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:563
|
||||
msgid "MB/s"
|
||||
msgstr "Mo/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:9
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
|
||||
msgid "MPTCP"
|
||||
msgstr "MPTCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:16
|
||||
msgid "MPTCP Fullmesh"
|
||||
msgstr "MPTCP Fullmesh"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:14
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:42
|
||||
msgid "MPTCP Support Check"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:88
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:572
|
||||
msgid "Mbit/s"
|
||||
msgstr "Mbit/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:18
|
||||
msgid "Multipath Debug"
|
||||
msgstr "Desbugatge multipath"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:12
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
msgid "Multipath TCP"
|
||||
msgstr "Multipath TCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:36
|
||||
msgid "Multipath TCP SYN retries"
|
||||
msgstr "Ensages Multipath TCP SYN"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:15
|
||||
msgid "Multipath TCP checksum"
|
||||
msgstr "Sòma de contraròtle Multipath TCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:21
|
||||
msgid "Multipath TCP path-manager"
|
||||
msgstr "Gestionari dels camins Multipath TCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:29
|
||||
msgid "Multipath TCP scheduler"
|
||||
msgstr "Planificator Multipath TCP"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:27
|
||||
msgid "Netlink"
|
||||
msgstr "Ligam ret"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
|
||||
msgid ""
|
||||
"Networks MPTCP settings. Visit <a href='http://multipath-tcp.org/pmwiki.php/"
|
||||
"Users/ConfigureMPTCP'>http://multipath-tcp.org/pmwiki.php/Users/"
|
||||
"ConfigureMPTCP</a> for help."
|
||||
msgstr ""
|
||||
"Paramètres ret MPTCP. Consulatz <a href='http://multipath-tcp.org/pmwiki.php/"
|
||||
"Users/ConfigureMPTCP'>http://multipath-tcp.org/pmwiki.php/Users/"
|
||||
"ConfigureMPTCP</a> per d’ajuda."
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
msgid "One interface must be set as master"
|
||||
msgstr "Una interfàcia deu èsser configurada coma principala"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:803
|
||||
msgid "Outbound:"
|
||||
msgstr "Sortent :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:288
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:327
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:799
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:809
|
||||
msgid "Peak:"
|
||||
msgstr "Punta :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:47
|
||||
msgid "Re-create fullmesh subflows after a timeout"
|
||||
msgstr "Tornar crear los jos-flus fullmesh aprèp lo relambi d’expiracion"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:762
|
||||
msgid "Realtime Traffic"
|
||||
msgstr "Trafic dirèct"
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:10
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:45
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65
|
||||
msgid "Test"
|
||||
msgstr "Pròva"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:778
|
||||
msgid "Upload:"
|
||||
msgstr "Mandadís :"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:21
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:21
|
||||
msgid "Waiting for command to complete..."
|
||||
msgstr "En espèra d’una responsa de la comanda..."
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:60
|
||||
msgid "backup"
|
||||
msgstr "subordinat"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:25
|
||||
msgid "binder"
|
||||
msgstr "associar"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:22
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:30
|
||||
msgid "default"
|
||||
msgstr "Defaut"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:14
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:17
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:20
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:49
|
||||
msgid "disable"
|
||||
msgstr "desactivar"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:58
|
||||
msgid "disabled"
|
||||
msgstr "desactivat"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:13
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:16
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:19
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:48
|
||||
msgid "enable"
|
||||
msgstr "Activar"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
msgid "enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:23
|
||||
msgid "fullmesh"
|
||||
msgstr "fullmesh"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:61
|
||||
msgid "handover"
|
||||
msgstr "relai"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:74
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:330
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:558
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:794
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:797
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:800
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:804
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:807
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:810
|
||||
msgid "kB/s"
|
||||
msgstr "kB/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:83
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:330
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:567
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:794
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:797
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:800
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:804
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:807
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:810
|
||||
msgid "kbit/s"
|
||||
msgstr "kbit/s"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
|
||||
msgid "master"
|
||||
msgstr "màger"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:24
|
||||
msgid "ndiffports"
|
||||
msgstr "ndiffports"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:51
|
||||
msgid "ndiffports subflows number"
|
||||
msgstr "Nombre de jos-flux ndiffports"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:32
|
||||
msgid "redundant"
|
||||
msgstr "redondant"
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:31
|
||||
msgid "round-robin"
|
||||
msgstr "cadun son torn"
|
|
@ -1,20 +1,20 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:652
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:779
|
||||
msgid "(%d minute window, %d second interval)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:227
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:228
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:245
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:246
|
||||
msgid "(%d minutes window, %d seconds interval)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:284
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:323
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:796
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:806
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:319
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:377
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:932
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:942
|
||||
msgid "Average:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -30,24 +30,28 @@ msgstr ""
|
|||
msgid "Check if MPTCP between interface and server is working."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:40
|
||||
msgid "Congestion Control"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:280
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:319
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:315
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:373
|
||||
msgid "Current:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:40
|
||||
msgid "Default is bbr"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:772
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:908
|
||||
msgid "Download:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:35
|
||||
msgid "ECF"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_connections.htm:31
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_fullmesh.htm:31
|
||||
|
@ -58,11 +62,15 @@ msgstr ""
|
|||
msgid "Established connections"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:44
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:45
|
||||
msgid "Fullmesh subflows for each pair of IP addresses"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:793
|
||||
#: luci-app-mptcp/root/usr/share/rpcd/acl.d/luci-app-mptcp.json:3
|
||||
msgid "Grant UCI access for luci-app-mptcp"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:929
|
||||
msgid "Inbound:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -70,7 +78,7 @@ msgstr ""
|
|||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:55
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
msgid "Interfaces Settings"
|
||||
msgstr ""
|
||||
|
||||
|
@ -80,13 +88,14 @@ msgstr ""
|
|||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:79
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:563
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:90
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:690
|
||||
msgid "MB/s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/controller/mptcp.lua:9
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
|
||||
#: luci-app-mptcp/root/usr/share/luci/menu.d/luci-app-mptcp.json:3
|
||||
msgid "MPTCP"
|
||||
msgstr ""
|
||||
|
||||
|
@ -99,8 +108,8 @@ msgstr ""
|
|||
msgid "MPTCP Support Check"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:88
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:572
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:99
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:699
|
||||
msgid "Mbit/s"
|
||||
msgstr ""
|
||||
|
||||
|
@ -109,11 +118,11 @@ msgid "Multipath Debug"
|
|||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:12
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
msgid "Multipath TCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:36
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:37
|
||||
msgid "Multipath TCP SYN retries"
|
||||
msgstr ""
|
||||
|
||||
|
@ -140,27 +149,27 @@ msgid ""
|
|||
"ConfigureMPTCP</a> for help."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
msgid "One interface must be set as master"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:803
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:939
|
||||
msgid "Outbound:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:288
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:327
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:799
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:809
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:323
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:381
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:935
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:945
|
||||
msgid "Peak:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:47
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:48
|
||||
msgid "Re-create fullmesh subflows after a timeout"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:762
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:895
|
||||
msgid "Realtime Traffic"
|
||||
msgstr ""
|
||||
|
||||
|
@ -173,7 +182,7 @@ msgstr ""
|
|||
msgid "Test"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:778
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914
|
||||
msgid "Upload:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -183,7 +192,7 @@ msgstr ""
|
|||
msgid "Waiting for command to complete..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:60
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:61
|
||||
msgid "backup"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,22 +208,22 @@ msgstr ""
|
|||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:14
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:17
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:20
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:49
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:50
|
||||
msgid "disable"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:58
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:13
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:16
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:19
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:48
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:49
|
||||
msgid "enable"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:58
|
||||
msgid "enabled"
|
||||
msgstr ""
|
||||
|
||||
|
@ -222,45 +231,41 @@ msgstr ""
|
|||
msgid "fullmesh"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:61
|
||||
msgid "handover"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:74
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:85
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:330
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:558
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:794
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:797
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:800
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:804
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:807
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:810
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:376
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:380
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:384
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:685
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:930
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:933
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:936
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:940
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:943
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:946
|
||||
msgid "kB/s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:83
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:283
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:287
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:291
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:94
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:318
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:322
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:326
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:330
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:567
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:794
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:797
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:800
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:804
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:807
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:810
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:376
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:380
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:384
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:694
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:930
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:933
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:936
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:940
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:943
|
||||
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:946
|
||||
msgid "kbit/s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:60
|
||||
msgid "master"
|
||||
msgstr ""
|
||||
|
||||
|
@ -268,7 +273,7 @@ msgstr ""
|
|||
msgid "ndiffports"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:51
|
||||
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:52
|
||||
msgid "ndiffports subflows number"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -28,6 +28,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'name', _('Domain'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
@ -44,6 +47,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'ip', _('IP'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
@ -60,6 +66,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'dport', _('port'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
@ -83,6 +92,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'sport', _('port'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
@ -106,6 +118,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'mac', _('source MAC-Address'));
|
||||
o.datatype = 'list(unique(macaddr))';
|
||||
o.rmempty = false;
|
||||
|
@ -127,6 +142,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'ip', _('IP Address'));
|
||||
o.datatype = 'or(ip4addr,ip6addr)';
|
||||
o.rmempty = false;
|
||||
|
@ -150,6 +168,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'asn', _('ASN'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
@ -166,6 +187,9 @@ return L.view.extend({
|
|||
s.anonymous = true;
|
||||
s.nodescriptions = true;
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.option(form.Value, 'proto', _('Protocol/Service'));
|
||||
o.rmempty = false;
|
||||
o.load = function(section_id) {
|
||||
|
@ -178,7 +202,7 @@ return L.view.extend({
|
|||
name = [];
|
||||
for (var i = 0; i < proto.length; i++) {
|
||||
var m = proto[i].split(/\s+/);
|
||||
if (m && m[0] != "#id")
|
||||
if (m && m[0] != "#id" && m[1] != "disabled")
|
||||
name.push(m[2]);
|
||||
}
|
||||
for (var i = 0; i < host.length; i++) {
|
||||
|
@ -194,7 +218,7 @@ return L.view.extend({
|
|||
},this));
|
||||
};
|
||||
|
||||
o = s.option(widgets.DeviceSelect, 'interface', _('Interface'),_('When none selected, MPTCP master interface is used.'));
|
||||
o = s.option(widgets.DeviceSelect, 'interface', _('Interface'),_('When none selected, MPTCP master interface is used (or an other interface if master is down).'));
|
||||
o.noaliases = true;
|
||||
o.noinactive = true;
|
||||
o.nocreate = true;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-bypass/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -15,7 +15,6 @@ msgid "<abbr title=\"Media Access Control\">MAC</abbr>-Address"
|
|||
msgstr "<abbr title=\"Media Access Control\">MAC</abbr>-Addresse"
|
||||
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:100
|
||||
#, fuzzy
|
||||
msgid "<abbr tittle=\"Autonomous System Number\">ASN</abbr>"
|
||||
msgstr "<abbr tittle=\"Autonomous System Number\">ASN</abbr>"
|
||||
|
||||
|
@ -78,7 +77,7 @@ msgstr "IPs und Netzwerke"
|
|||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:109
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:137
|
||||
msgid "Interface"
|
||||
msgstr "Anschluss"
|
||||
msgstr "Schnittstelle"
|
||||
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:24
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:39
|
||||
|
|
122
luci-app-omr-bypass/po/it/omr-bypass.po
Normal file
122
luci-app-omr-bypass/po/it/omr-bypass.po
Normal file
|
@ -0,0 +1,122 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-10-02 08:44+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-bypass/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"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:148
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:153
|
||||
msgid "ASN"
|
||||
msgstr "ASN"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:31
|
||||
msgid "Domain"
|
||||
msgstr "Dominio"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:26
|
||||
msgid "Domains"
|
||||
msgstr "Domini"
|
||||
|
||||
#: luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json:3
|
||||
msgid "Grant access to ndpi resources"
|
||||
msgstr "Concedi l'accesso alle risorse ndpi"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:47
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:130
|
||||
msgid "IP Address"
|
||||
msgstr "Indirizzo IP"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:42
|
||||
msgid "IPs and Networks"
|
||||
msgstr "IP e reti"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
msgid "Interface"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:104
|
||||
msgid "MAC-Address"
|
||||
msgstr "Indirizzo MAC"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:39
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:55
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:78
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:101
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:122
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:145
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:161
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:202
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:24
|
||||
#: luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json:3
|
||||
msgid "OMR-Bypass"
|
||||
msgstr "OMR-Bypass"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:24
|
||||
msgid "OpenMPTCProuter IP must be used as DNS."
|
||||
msgstr "L'IP di OpenMPTCProuter deve essere utilizzato come DNS."
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:58
|
||||
msgid "Ports destination"
|
||||
msgstr "Destinazione dei porti"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:81
|
||||
msgid "Ports source"
|
||||
msgstr "Origine delle porte"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:169
|
||||
msgid "Protocol/Service"
|
||||
msgstr "Protocollo / servizio"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:164
|
||||
msgid "Protocols and services"
|
||||
msgstr "Protocolli e servizi"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:125
|
||||
msgid "Source lan IP address or network"
|
||||
msgstr "Indirizzo IP lan di origine o rete"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
msgid "When none selected, MPTCP master interface is used."
|
||||
msgstr ""
|
||||
"Quando non è selezionato nessuno, viene utilizzata l'interfaccia master "
|
||||
"MPTCP."
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:63
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:86
|
||||
msgid "port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:66
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:89
|
||||
msgid "protocol"
|
||||
msgstr "Protocollo"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:109
|
||||
msgid "source MAC-Address"
|
||||
msgstr "indirizzo MAC di origine"
|
120
luci-app-omr-bypass/po/oc/omr-bypass.po
Normal file
120
luci-app-omr-bypass/po/oc/omr-bypass.po
Normal file
|
@ -0,0 +1,120 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-18 18:16+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-bypass/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:148
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:153
|
||||
msgid "ASN"
|
||||
msgstr "ASN"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:31
|
||||
msgid "Domain"
|
||||
msgstr "Domeni"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:26
|
||||
msgid "Domains"
|
||||
msgstr "Domenis"
|
||||
|
||||
#: luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json:3
|
||||
msgid "Grant access to ndpi resources"
|
||||
msgstr "Acordar l'accès a las ressorsas ndpi"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:47
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:130
|
||||
msgid "IP Address"
|
||||
msgstr "Adreça IP"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:42
|
||||
msgid "IPs and Networks"
|
||||
msgstr "IPs e rets"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
msgid "Interface"
|
||||
msgstr "Interfàcia"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:104
|
||||
msgid "MAC-Address"
|
||||
msgstr "Adreça MAC"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:39
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:55
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:78
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:101
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:122
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:145
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:161
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:202
|
||||
msgid "Note"
|
||||
msgstr "Nòta"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:24
|
||||
#: luci-app-omr-bypass/root/usr/share/luci/menu.d/luci-app-omr-bypass.json:3
|
||||
msgid "OMR-Bypass"
|
||||
msgstr "OMR-Bypass"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:24
|
||||
msgid "OpenMPTCProuter IP must be used as DNS."
|
||||
msgstr "L'IP d'OpznMPTCProuter deu èsser coma lo DNS."
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:58
|
||||
msgid "Ports destination"
|
||||
msgstr "Pòrts de destinacion"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:81
|
||||
msgid "Ports source"
|
||||
msgstr "Pòrts fonts"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:169
|
||||
msgid "Protocol/Service"
|
||||
msgstr "Protocòl/Servici"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:164
|
||||
msgid "Protocols and services"
|
||||
msgstr "Protocòls e servicis"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:125
|
||||
msgid "Source lan IP address or network"
|
||||
msgstr "Adreça IP font o rer"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
msgid "When none selected, MPTCP master interface is used."
|
||||
msgstr "Quand res es pas seleccionat, l'interfàcia MPTCP màger es utilizada."
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:63
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:86
|
||||
msgid "port"
|
||||
msgstr "pòrt"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:66
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:89
|
||||
msgid "protocol"
|
||||
msgstr "protocòl"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:109
|
||||
msgid "source MAC-Address"
|
||||
msgstr "Adreça MAC font"
|
|
@ -1,12 +1,12 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:148
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:153
|
||||
#: 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
|
||||
msgid "ASN"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:31
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
|
@ -14,45 +14,56 @@ msgstr ""
|
|||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:31
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:69
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:95
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:121
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:145
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:171
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:190
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/root/usr/share/rpcd/acl.d/luci-app-omr-bypass.json:3
|
||||
msgid "Grant access to ndpi resources"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:47
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:53
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:130
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:148
|
||||
msgid "IP Address"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:42
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:45
|
||||
msgid "IPs and Networks"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:37
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:56
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:82
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:108
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:132
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:158
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:177
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:221
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:104
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:116
|
||||
msgid "MAC-Address"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:39
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:55
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:78
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:101
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:122
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:145
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:161
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:202
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:42
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:61
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:87
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:113
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:137
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:163
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:182
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:226
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
|
@ -65,47 +76,52 @@ msgstr ""
|
|||
msgid "OpenMPTCProuter IP must be used as DNS."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:58
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:64
|
||||
msgid "Ports destination"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:81
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:90
|
||||
msgid "Ports source"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:169
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:193
|
||||
msgid "Protocol/Service"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:164
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:185
|
||||
msgid "Protocols and services"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:125
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
msgid "Source lan IP address or network"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:34
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:50
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:73
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:96
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:117
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:140
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:156
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:197
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:221
|
||||
msgid ""
|
||||
"When none selected, MPTCP master interface is used (or an other interface if "
|
||||
"master is down)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:37
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:56
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:82
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:108
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:132
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:158
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:177
|
||||
msgid "When none selected, MPTCP master interface is used."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:63
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:86
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:72
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:98
|
||||
msgid "port"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:66
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:89
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:75
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:101
|
||||
msgid "protocol"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:109
|
||||
#: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:124
|
||||
msgid "source MAC-Address"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-06-27 17:26+0000\n"
|
||||
"PO-Revision-Date: 2020-09-02 05:14+0000\n"
|
||||
"Last-Translator: antrouter <xinyangla@188.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationsomr-bypass/zh_Hans/>\n"
|
||||
|
@ -28,7 +28,7 @@ msgstr "ASN"
|
|||
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:9
|
||||
msgid "Bypass"
|
||||
msgstr "旁路"
|
||||
msgstr "绕过"
|
||||
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:150
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:151
|
||||
|
@ -88,7 +88,7 @@ msgstr "注意"
|
|||
|
||||
#: luci-app-omr-bypass/luasrc/controller/omr-bypass.lua:6
|
||||
msgid "OMR-Bypass"
|
||||
msgstr "OMR-旁路"
|
||||
msgstr "OMR-绕过"
|
||||
|
||||
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:42
|
||||
msgid "Ports destination"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
|
||||
START=99
|
||||
STOP=10
|
||||
|
@ -39,8 +39,11 @@ _bypass_ip() {
|
|||
_bypass_domains() {
|
||||
local domain
|
||||
local intf
|
||||
local enabled
|
||||
config_get domain $1 name
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
_bypass_domain $domain $intf
|
||||
}
|
||||
|
||||
|
@ -82,8 +85,11 @@ _bypass_domain() {
|
|||
_bypass_mac() {
|
||||
local mac
|
||||
local intf
|
||||
local enabled
|
||||
config_get mac $1 mac
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local intfid="$(uci -q get omr-bypass.$intf.id)"
|
||||
|
||||
[ -z "$intf" ] && intf="all"
|
||||
|
@ -120,8 +126,11 @@ _bypass_mac() {
|
|||
_bypass_lan_ip() {
|
||||
local ip
|
||||
local intf
|
||||
local enabled
|
||||
config_get ip $1 ip
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local intfid="$(uci -q get omr-bypass.$intf.id)"
|
||||
|
||||
[ -z "$intf" ] && intf="all"
|
||||
|
@ -171,9 +180,14 @@ _bypass_lan_ip() {
|
|||
|
||||
_bypass_dest_port() {
|
||||
local intf
|
||||
local enabled
|
||||
local dport
|
||||
local proto
|
||||
config_get dport $1 dport
|
||||
config_get proto $1 proto
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local intfid="$(uci -q get omr-bypass.$intf.id)"
|
||||
|
||||
[ -z "$intf" ] && intf="all"
|
||||
|
@ -221,9 +235,14 @@ _bypass_dest_port() {
|
|||
|
||||
_bypass_src_port() {
|
||||
local intf
|
||||
local enabled
|
||||
local sport
|
||||
local proto
|
||||
config_get sport $1 sport
|
||||
config_get proto $1 proto
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local intfid="$(uci -q get omr-bypass.$intf.id)"
|
||||
|
||||
[ -z "$intf" ] && intf="all"
|
||||
|
@ -272,8 +291,11 @@ _bypass_src_port() {
|
|||
_bypass_proto() {
|
||||
local proto
|
||||
local intf
|
||||
local enabled
|
||||
config_get proto $1 proto
|
||||
config_get intf $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local intfid="$(uci -q get omr-bypass.$intf.id)"
|
||||
|
||||
[ -z "$intf" ] && intf="all"
|
||||
|
@ -307,10 +329,10 @@ _bypass_proto() {
|
|||
fi
|
||||
# Use dnsmasq ipset to bypass domains of the proto
|
||||
local domains
|
||||
domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://" -e 's/*//' -e 's/,/ /g')"
|
||||
domains="$(cat /proc/net/xt_ndpi/host_proto | grep -i $proto: | sed -e "s/$proto://i" -e 's/*//' -e 's/,/ /g')"
|
||||
if [ -n "$domains" ]; then
|
||||
for domain in $domains; do
|
||||
if [ -n "$domain" ] && [ "$(uci -q show omr-bypass | grep $domain)" = "" ]; then
|
||||
if [ -n "$domain" ]; then
|
||||
_bypass_domain $domain $intf
|
||||
fi
|
||||
done
|
||||
|
@ -320,11 +342,11 @@ _bypass_proto() {
|
|||
_intf_rule_ss_rules() {
|
||||
rule_name=$1
|
||||
[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep ssr | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
-I ssr_${rule_name}_dst 1 -m mark --mark 0x539$count -j RETURN
|
||||
-I ssr_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
||||
-I ssr_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
-I ssr_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
||||
-I ssr_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
|
@ -333,18 +355,18 @@ _intf_rule_ss_rules() {
|
|||
EOF
|
||||
fi
|
||||
if [ "$disableipv6" != "1" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*mangle
|
||||
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$(ip6tables --wait=40 -t nat -L | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
-I ssr6_${rule_name}_dst 1 -m mark --mark 0x6539$count -j RETURN
|
||||
-I ssr6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
||||
-I ssr6_${rule_name}_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
-I ssr6_${rule_name}_local_out 2 -m mark --mark 0x6539$count -j RETURN
|
||||
-I ssr6_${rule_name}_pre_src 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
|
@ -355,6 +377,45 @@ _intf_rule_ss_rules() {
|
|||
fi
|
||||
}
|
||||
|
||||
_intf_rule_v2ray_rules() {
|
||||
#rule_name=$1
|
||||
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||
rule_name="def"
|
||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep v2r | grep omr_dst_bypass_$intf)" = "" ]; then
|
||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
-I v2r_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN
|
||||
-I v2r_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
-I v2r_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN
|
||||
-I v2r_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
|
||||
-I v2r_${rule_name}_pre_src 2 -m mark --mark 0x539$count -j RETURN
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$disableipv6" != "1" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*mangle
|
||||
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
-I v2r6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN
|
||||
-I v2r6_${rule_name}_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
-I v2r6_${rule_name}_local_out 2 -m mark --mark 0x6539$count -j RETURN
|
||||
-I v2r6_${rule_name}_pre_src 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
|
||||
-I v2r6_${rule_name}_pre_src 2 -m mark --mark 0x6539$count -j RETURN
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_intf_rule() {
|
||||
local intf
|
||||
config_get intf $1 ifname
|
||||
|
@ -403,6 +464,7 @@ _intf_rule() {
|
|||
fi
|
||||
config_load shadowsocks-libev
|
||||
config_foreach _intf_rule_ss_rules ss_rules
|
||||
_intf_rule_v2ray_rules
|
||||
|
||||
uci -q set omr-bypass.$intf=interface
|
||||
uci -q set omr-bypass.$intf.id=$count
|
||||
|
@ -411,16 +473,22 @@ _intf_rule() {
|
|||
_bypass_ip_set() {
|
||||
local ip
|
||||
local interface
|
||||
local enabled
|
||||
config_get ip $1 ip
|
||||
config_get interface $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
_bypass_ip $ip $interface
|
||||
}
|
||||
|
||||
_bypass_asn() {
|
||||
local asn
|
||||
local interface
|
||||
local enabled
|
||||
config_get asn $1 asn
|
||||
config_get interface $1 interface
|
||||
config_get enabled $1 enabled
|
||||
[ "$enabled" = "0" ] && return
|
||||
local asnips
|
||||
asnips=`curl --max-time 4 -s -k https://stat.ripe.net/data/announced-prefixes/data.json?resource=${asn} | jsonfilter -q -e '@.data.prefixes.*.prefix'`
|
||||
for ip in $asnips; do
|
||||
|
@ -457,14 +525,14 @@ _ss_rules_config() {
|
|||
EOF
|
||||
fi
|
||||
if [ "$disableipv6" != "1" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*mangle
|
||||
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$(ip6tables --wait=40 -t nat -L | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_all)" = "" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
|
@ -479,6 +547,45 @@ _ss_rules_config() {
|
|||
fi
|
||||
}
|
||||
|
||||
_v2ray_rules_config() {
|
||||
#rule_name=$1
|
||||
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
|
||||
rule_name="def"
|
||||
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
|
||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||
-I v2r_${rule_name}_dst 1 -m mark --mark 0x539 -j RETURN
|
||||
-I v2r_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||
-I v2r_${rule_name}_local_out 2 -m mark --mark 0x539 -j RETURN
|
||||
-I v2r_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
|
||||
-I v2r_${rule_name}_pre_src 2 -m mark --mark 0x539 -j RETURN
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$disableipv6" != "1" ]; then
|
||||
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*mangle
|
||||
-A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then
|
||||
ip6tables-restore -w --wait=60 --noflush <<-EOF
|
||||
*nat
|
||||
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
-I v2r6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN
|
||||
-I v2r6_${rule_name}_local_out 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
-I v2r6_${rule_name}_local_out 2 -m mark --mark 0x6539 -j RETURN
|
||||
-I v2r6_${rule_name}_pre_src 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539
|
||||
-I v2r6_${rule_name}_pre_src 2 -m mark --mark 0x6539 -j RETURN
|
||||
COMMIT
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
boot() {
|
||||
BOOT=1
|
||||
start "$@"
|
||||
|
@ -528,8 +635,10 @@ start_service() {
|
|||
config_load network
|
||||
config_foreach _intf_rule interface
|
||||
local ndpi_rules=""
|
||||
config_load openmptcprouter
|
||||
config_foreach _bypass_omr_server server
|
||||
if [ "$(uci -q get openmptcprouter.settings.bypass_servers)" = "1" ]; then
|
||||
config_load openmptcprouter
|
||||
config_foreach _bypass_omr_server server
|
||||
fi
|
||||
config_load omr-bypass
|
||||
config_foreach _bypass_ip_set ips
|
||||
config_foreach _bypass_mac macs
|
||||
|
@ -576,6 +685,7 @@ start_service() {
|
|||
|
||||
config_load shadowsocks-libev
|
||||
config_foreach _ss_rules_config
|
||||
_v2ray_rules_config
|
||||
|
||||
iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore -w --counters
|
||||
iptables-restore -w --wait=60 --noflush <<-EOF
|
||||
|
@ -599,6 +709,7 @@ start_service() {
|
|||
fi
|
||||
config_load omr-bypass
|
||||
config_foreach _bypass_proto dpis
|
||||
uci -q commit omr-bypass
|
||||
|
||||
[ -z "$RELOAD" ] && {
|
||||
logger -t "omr-bypass" "Restart dnsmasq..."
|
||||
|
@ -623,8 +734,7 @@ stop_service() {
|
|||
|
||||
service_triggers() {
|
||||
PROCD_RELOAD_DELAY=1000
|
||||
procd_add_reload_trigger omr-bypass
|
||||
procd_add_raw_trigger "interface.*" 2000 /etc/init.d/omr-bypass restart
|
||||
procd_add_reload_trigger omr-bypass network
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
|
|
|
@ -52,14 +52,15 @@ fi
|
|||
if [ "$(uci -q get ucitrack.@shadowsocks-libev[-1].affects | grep omr-bypass)" != "" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
del_list ucitrack.@shadowsocks-libev[-1].affects=omr-bypass
|
||||
commit ucitrack
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [ "$(uci -q get firewall.omr-bypass)" = "" ]; then
|
||||
if [ "$(uci -q get firewall.omr_bypass)" = "" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
set firewall.omr-bypass=include
|
||||
set firewall.omr-bypass.path=/etc/firewall.omr-bypass
|
||||
set firewall.omr-bypass.reload=1
|
||||
set firewall.omr_bypass=include
|
||||
set firewall.omr_bypass.path=/etc/firewall.omr-bypass
|
||||
set firewall.omr_bypass.reload=1
|
||||
commit firewall
|
||||
EOF
|
||||
fi
|
||||
|
@ -78,6 +79,10 @@ if [ "$(uci -q get omr-bypass.mycanal)" = "" ]; then
|
|||
set omr-bypass.mycanal=proto
|
||||
add_list omr-bypass.mycanal.url='mycanal.fr'
|
||||
add_list omr-bypass.mycanal.url='canal-plus.com'
|
||||
add_list omr-bypass.mycanal.url='canalplus.com'
|
||||
add_list omr-bypass.mycanal.url='canalplus-cdn.net'
|
||||
add_list omr-bypass.mycanal.url='canalplus.pro'
|
||||
add_list omr-bypass.mycanal.url='canal-plus.net'
|
||||
commit omr-bypass
|
||||
EOF
|
||||
fi
|
||||
|
|
158
luci-app-omr-dscp/po/it/omr-dscp.po
Normal file
158
luci-app-omr-dscp/po/it/omr-dscp.po
Normal file
|
@ -0,0 +1,158 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-dscp/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"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:21
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:72
|
||||
msgid "CS0 - Normal/Best Effort"
|
||||
msgstr "CS0 - Normale / Miglior sforzo"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:22
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:73
|
||||
msgid "CS1 - Low priority"
|
||||
msgstr "CS1 - Priorità bassa"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:23
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:74
|
||||
msgid "CS2 - High priority"
|
||||
msgstr "CS2 - Alta priorità"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:24
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:75
|
||||
msgid "CS3 - SIP"
|
||||
msgstr "CS3 - SIP"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:25
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:76
|
||||
msgid "CS4 - Streaming video"
|
||||
msgstr "CS4 - Streaming video"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
|
||||
msgid "CS5"
|
||||
msgstr "CS5"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:27
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78
|
||||
msgid "CS6 - Network routing"
|
||||
msgstr "CS6 - Routing di rete"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:28
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:79
|
||||
msgid "CS7"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:20
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:71
|
||||
msgid "Class"
|
||||
msgstr "Classe"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:15
|
||||
msgid "Classification Rules"
|
||||
msgstr "Regole di classificazione"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:31
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:82
|
||||
msgid "Comment"
|
||||
msgstr "Commenti"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:6
|
||||
msgid "DSCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:7
|
||||
msgid "DSCP Domains"
|
||||
msgstr "Domini DSCP"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
|
||||
msgid "DSCP by domain"
|
||||
msgstr "DSCP per dominio"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:57
|
||||
msgid "Destination host"
|
||||
msgstr "Host di destinazione"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:63
|
||||
msgid "Destination ports"
|
||||
msgstr "Porte di destinazione"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:10
|
||||
msgid "Differentiated services"
|
||||
msgstr "Servizi differenziati"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:28
|
||||
msgid "Direction"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:15
|
||||
msgid "Domain"
|
||||
msgstr "Dominio"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:10
|
||||
msgid "Domains"
|
||||
msgstr "Domini"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
|
||||
msgid "EF - Voice"
|
||||
msgstr "EF - Voce"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:29
|
||||
msgid "EF Voice"
|
||||
msgstr "EF - Voce"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:4
|
||||
msgid "OMR-DSCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:35
|
||||
msgid "Protocol"
|
||||
msgstr "Protocollo"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
|
||||
msgid "Set DSCP by domains."
|
||||
msgstr "Imposta DSCP per domini."
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:46
|
||||
msgid "Source host"
|
||||
msgstr "Host di origine"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:51
|
||||
msgid "Source ports"
|
||||
msgstr "Porte di origine"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:11
|
||||
msgid ""
|
||||
"Traffic may be classified by many different parameters, such as source "
|
||||
"address, destination address or traffic type and assigned to a specific "
|
||||
"traffic class."
|
||||
msgstr ""
|
||||
"Il traffico può essere classificato in base a molti parametri diversi, come "
|
||||
"indirizzo di origine, indirizzo di destinazione o tipo di traffico e "
|
||||
"assegnato a una classe di traffico specifica."
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:48
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:53
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:59
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:65
|
||||
msgid "all"
|
||||
msgstr "tutti"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:33
|
||||
msgid "both"
|
||||
msgstr "entrambi"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:32
|
||||
msgid "download"
|
||||
msgstr "Scarica"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:31
|
||||
msgid "upload"
|
||||
msgstr "Carica"
|
158
luci-app-omr-dscp/po/oc/omr-dscp.po
Normal file
158
luci-app-omr-dscp/po/oc/omr-dscp.po
Normal file
|
@ -0,0 +1,158 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-31 17:15+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-dscp/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:21
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:72
|
||||
msgid "CS0 - Normal/Best Effort"
|
||||
msgstr "CS0 - Esfòrç normal / optimal"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:22
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:73
|
||||
msgid "CS1 - Low priority"
|
||||
msgstr "CS1 - Prioritat febla"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:23
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:74
|
||||
msgid "CS2 - High priority"
|
||||
msgstr "CS2 - Prioritat nauta"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:24
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:75
|
||||
msgid "CS3 - SIP"
|
||||
msgstr "CS3 - SIP"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:25
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:76
|
||||
msgid "CS4 - Streaming video"
|
||||
msgstr "CS4 - Difusion vidèo"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
|
||||
msgid "CS5"
|
||||
msgstr "CS5"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:27
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78
|
||||
msgid "CS6 - Network routing"
|
||||
msgstr "CS6 - Partiment ret"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:28
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:79
|
||||
msgid "CS7"
|
||||
msgstr "CS7"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:20
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:71
|
||||
msgid "Class"
|
||||
msgstr "Classa"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:15
|
||||
msgid "Classification Rules"
|
||||
msgstr "Règlas de classificacion"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:31
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:82
|
||||
msgid "Comment"
|
||||
msgstr "Comentari"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:6
|
||||
msgid "DSCP"
|
||||
msgstr "DSCP"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:7
|
||||
msgid "DSCP Domains"
|
||||
msgstr "DSCP Domenis"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
|
||||
msgid "DSCP by domain"
|
||||
msgstr "DSCP per domeni"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:57
|
||||
msgid "Destination host"
|
||||
msgstr "Òste de destinacion"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:63
|
||||
msgid "Destination ports"
|
||||
msgstr "Pòrts de destinacion"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:10
|
||||
msgid "Differentiated services"
|
||||
msgstr "Servicis diferenciats"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:28
|
||||
msgid "Direction"
|
||||
msgstr "Direccion"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:15
|
||||
msgid "Domain"
|
||||
msgstr "Domeni"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:10
|
||||
msgid "Domains"
|
||||
msgstr "Domenis"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
|
||||
msgid "EF - Voice"
|
||||
msgstr "EF - Votz"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:29
|
||||
msgid "EF Voice"
|
||||
msgstr "EF - Votz"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:4
|
||||
msgid "OMR-DSCP"
|
||||
msgstr "OMR-DSCP"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:35
|
||||
msgid "Protocol"
|
||||
msgstr "Protocòl"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
|
||||
msgid "Set DSCP by domains."
|
||||
msgstr "Configurar DSCP per domeni."
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:46
|
||||
msgid "Source host"
|
||||
msgstr "Òste font"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:51
|
||||
msgid "Source ports"
|
||||
msgstr "Pòrts fonts"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:11
|
||||
msgid ""
|
||||
"Traffic may be classified by many different parameters, such as source "
|
||||
"address, destination address or traffic type and assigned to a specific "
|
||||
"traffic class."
|
||||
msgstr ""
|
||||
"Lo trafic pòt èsser classat segon mantuns paramètres diferents, coma l’"
|
||||
"adreça font, l’adreça de destinacion o lo tipe de trafic e atribuit a una "
|
||||
"classa de trafic especifica."
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:48
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:53
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:59
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:65
|
||||
msgid "all"
|
||||
msgstr "totes"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:33
|
||||
msgid "both"
|
||||
msgstr "Los dos"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:32
|
||||
msgid "download"
|
||||
msgstr "Telecargament"
|
||||
|
||||
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:31
|
||||
msgid "upload"
|
||||
msgstr "Mandadís"
|
|
@ -29,7 +29,7 @@ config classify
|
|||
option direction 'both'
|
||||
option proto 'udp'
|
||||
option class 'cs6'
|
||||
option dest_port '65001'
|
||||
option dest_port '65001,65301'
|
||||
option comment 'OMR vpn'
|
||||
|
||||
config domains
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-quota/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -12,11 +12,11 @@ msgstr ""
|
|||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
|
||||
msgid "Add"
|
||||
msgstr "hinzufügen"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
|
||||
msgid "Enable"
|
||||
msgstr "anschalten"
|
||||
msgstr "Aktivieren"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
||||
msgid "Interfaces"
|
||||
|
@ -28,7 +28,7 @@ msgstr "Abstand zwischen den Überfprüfungen (in Sekunden)"
|
|||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:9
|
||||
msgid "Invalid"
|
||||
msgstr "ungültig"
|
||||
msgstr "Ungültig"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
|
||||
msgid "Monthly Quota"
|
||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-08-03 12:39+0000\n"
|
||||
"PO-Revision-Date: 2020-09-30 08:50+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-quota/fr/>\n"
|
||||
|
@ -19,7 +19,7 @@ msgstr "Ajouter"
|
|||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
|
||||
msgid "Enable"
|
||||
msgstr "Activé"
|
||||
msgstr "Activer"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
||||
msgid "Interfaces"
|
||||
|
|
57
luci-app-omr-quota/po/it/omr-quota.po
Normal file
57
luci-app-omr-quota/po/it/omr-quota.po
Normal file
|
@ -0,0 +1,57 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-quota/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"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
|
||||
msgid "Enable"
|
||||
msgstr "Attivare"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
||||
msgid "Interfaces"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:33
|
||||
msgid "Interval between check (s)"
|
||||
msgstr "Intervallo tra i controlli (s)"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:9
|
||||
msgid "Invalid"
|
||||
msgstr "Non valido"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
|
||||
msgid "Monthly Quota"
|
||||
msgstr "Quota mensile"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/controller/quota.lua:11
|
||||
msgid "Quota"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:27
|
||||
msgid "RX quota (kbit)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
|
||||
msgid "Set monthly quota, when quota is reached interface state is set to down"
|
||||
msgstr ""
|
||||
"Imposta la quota mensile, quando viene raggiunta la quota, lo stato "
|
||||
"dell'interfaccia è impostato su inattivo"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:24
|
||||
msgid "TX quota (kbit)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:30
|
||||
msgid "TX+RX quota (kbit)"
|
||||
msgstr ""
|
56
luci-app-omr-quota/po/oc/omr-quota.po
Normal file
56
luci-app-omr-quota/po/oc/omr-quota.po
Normal file
|
@ -0,0 +1,56 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-quota/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
|
||||
msgid "Add"
|
||||
msgstr "Ajustar"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
|
||||
msgid "Enable"
|
||||
msgstr "Activat"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
|
||||
msgid "Interfaces"
|
||||
msgstr "Interfàcias"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:33
|
||||
msgid "Interval between check (s)"
|
||||
msgstr "Interval entre las verificacions (s)"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:9
|
||||
msgid "Invalid"
|
||||
msgstr "Invalid"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
|
||||
msgid "Monthly Quota"
|
||||
msgstr "Quòta mesadièra"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/controller/quota.lua:11
|
||||
msgid "Quota"
|
||||
msgstr "Quòta"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:27
|
||||
msgid "RX quota (kbit)"
|
||||
msgstr "RX quòta (kbit)"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
|
||||
msgid "Set monthly quota, when quota is reached interface state is set to down"
|
||||
msgstr ""
|
||||
"Definir la quòta mesadièra, quand es atenguda l'interfàcia es desactivada"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:24
|
||||
msgid "TX quota (kbit)"
|
||||
msgstr "TX quòta (kbit)"
|
||||
|
||||
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:30
|
||||
msgid "TX+RX quota (kbit)"
|
||||
msgstr "TX+RX quòta (kbit)"
|
|
@ -4,14 +4,14 @@ local m, s, o
|
|||
|
||||
m = Map("omr-tracker", translate("OMR-Tracker"))
|
||||
|
||||
s = m:section(TypedSection, "shadowsocks", translate("ShadowSocks tracker Settings"), translate("Detect if ShadowSocks is down and stop traffic redirection over it."))
|
||||
s = m:section(TypedSection, "proxy", translate("Proxy tracker Settings"), translate("Detect if Proxy is down and stop traffic redirection over it."))
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
local sdata = m:get('shadowsocks')
|
||||
local sdata = m:get('proxy')
|
||||
if not sdata then
|
||||
m:set('shadowsocks', nil, 'shadowsocks')
|
||||
m:set('shadowsocks', 'enabled', "1")
|
||||
m:set('proxy', nil, 'proxy')
|
||||
m:set('proxy', 'enabled', "1")
|
||||
end
|
||||
|
||||
o = s:option(Flag, "enabled", translate("Enable"), translate("When tracker is disabled, connection failover is also disabled"))
|
||||
|
|
42
luci-app-omr-tracker/po/it/omr-tracker.po
Normal file
42
luci-app-omr-tracker/po/it/omr-tracker.po
Normal file
|
@ -0,0 +1,42 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.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"
|
||||
|
||||
msgid ""
|
||||
"Always ping gateway, then test connection by ping or dns. None mode only "
|
||||
"ping gateway."
|
||||
msgstr ""
|
||||
"Esegui sempre il ping del gateway, quindi verifica la connessione tramite "
|
||||
"ping o DNS."
|
||||
|
||||
msgid "Defaults Settings"
|
||||
msgstr "Impostazioni predefinite"
|
||||
|
||||
msgid "Hosts"
|
||||
msgstr ""
|
||||
|
||||
msgid "OMR-Tracker"
|
||||
msgstr ""
|
||||
|
||||
msgid "OMR-Tracker detect when a connection is down"
|
||||
msgstr "OMR-Tracker rileva quando una connessione è interrotta"
|
||||
|
||||
msgid "Retry interval (s)"
|
||||
msgstr "Intervallo di ripetizione (s)"
|
||||
|
||||
msgid "Timeout (s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tries"
|
||||
msgstr "Tentativi"
|
||||
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
42
luci-app-omr-tracker/po/oc/omr-tracker.po
Normal file
42
luci-app-omr-tracker/po/oc/omr-tracker.po
Normal file
|
@ -0,0 +1,42 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-18 17:37+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsomr-tracker/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid ""
|
||||
"Always ping gateway, then test connection by ping or dns. None mode only "
|
||||
"ping gateway."
|
||||
msgstr ""
|
||||
"Totjorn enviar un ping a la palanca puèi la connexion via ping o DNS. Lo "
|
||||
"mòde \"none\" ping sonque la palanca."
|
||||
|
||||
msgid "Defaults Settings"
|
||||
msgstr "Paramètres per defaut"
|
||||
|
||||
msgid "Hosts"
|
||||
msgstr "Òstes"
|
||||
|
||||
msgid "OMR-Tracker"
|
||||
msgstr "OMR-Tracker"
|
||||
|
||||
msgid "OMR-Tracker detect when a connection is down"
|
||||
msgstr "OMR-Tracker detècta quand una connexion fonciona pas mai"
|
||||
|
||||
msgid "Retry interval (s)"
|
||||
msgstr "Interval entre ensages"
|
||||
|
||||
msgid "Timeout (s)"
|
||||
msgstr "Relambi d'espèra (s)"
|
||||
|
||||
msgid "Tries"
|
||||
msgstr "Ensages"
|
||||
|
||||
msgid "Type"
|
||||
msgstr "Tipe"
|
|
@ -213,14 +213,56 @@ function wizard_add()
|
|||
for intf, _ in pairs(interfaces) do
|
||||
local label = luci.http.formvalue("cbid.network.%s.label" % intf) or ""
|
||||
local proto = luci.http.formvalue("cbid.network.%s.proto" % intf) or "static"
|
||||
local typeintf = luci.http.formvalue("cbid.network.%s.type" % intf) or ""
|
||||
local masterintf = luci.http.formvalue("cbid.network.%s.masterintf" % intf) or ""
|
||||
local ifname = luci.http.formvalue("cbid.network.%s.intf" % intf) or ""
|
||||
local device = luci.http.formvalue("cbid.network.%s.device" % intf) or ""
|
||||
local ipaddr = luci.http.formvalue("cbid.network.%s.ipaddr" % intf) or ""
|
||||
local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or ""
|
||||
local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or ""
|
||||
local apn = luci.http.formvalue("cbid.network.%s.apn" % intf) or ""
|
||||
local pincode = luci.http.formvalue("cbid.network.%s.pincode" % intf) or ""
|
||||
local delay = luci.http.formvalue("cbid.network.%s.delay" % intf) or ""
|
||||
local username = luci.http.formvalue("cbid.network.%s.username" % intf) or ""
|
||||
local password = luci.http.formvalue("cbid.network.%s.password" % intf) or ""
|
||||
local auth = luci.http.formvalue("cbid.network.%s.auth" % intf) or ""
|
||||
local mode = luci.http.formvalue("cbid.network.%s.mode" % intf) or ""
|
||||
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"
|
||||
if typeintf ~= "" then
|
||||
if typeintf == "normal" then
|
||||
typeintf = ""
|
||||
end
|
||||
ucic:set("network",intf,"type",typeintf)
|
||||
end
|
||||
if typeintf == "macvlan" and masterintf ~= "" then
|
||||
ucic:set("network",intf,"type","macvlan")
|
||||
ucic:set("network",intf,"masterintf",masterintf)
|
||||
elseif typeintf == "" and ifname ~= "" and (proto == "static" or proto == "dhcp" ) then
|
||||
ucic:set("network",intf,"ifname",ifname)
|
||||
elseif typeintf == "" and device ~= "" and (proto == "ncm" or proto == "qmi" or proto == "modemmanager") then
|
||||
ucic:set("network",intf,"device",device)
|
||||
end
|
||||
if proto ~= "other" then
|
||||
ucic:set("network",intf,"proto",proto)
|
||||
end
|
||||
ucic:set("network",intf,"apn",apn)
|
||||
ucic:set("network",intf,"pincode",pincode)
|
||||
ucic:set("network",intf,"delay",delay)
|
||||
ucic:set("network",intf,"username",username)
|
||||
ucic:set("network",intf,"password",password)
|
||||
ucic:set("network",intf,"auth",auth)
|
||||
ucic:set("network",intf,"mode",mode)
|
||||
ucic:set("network",intf,"label",label)
|
||||
if lan == "1" then
|
||||
ucic:set("network",intf,"multipath","off")
|
||||
else
|
||||
ucic:set("network",intf,"multipath",multipath)
|
||||
ucic:set("openmptcprouter",intf,"multipath",multipath)
|
||||
end
|
||||
ucic:set("network",intf,"defaultroute",0)
|
||||
ucic:set("network",intf,"peerdns",0)
|
||||
if ipaddr ~= "" then
|
||||
ucic:set("network",intf,"ipaddr",ipaddr)
|
||||
ucic:set("network",intf,"netmask",netmask)
|
||||
|
@ -395,6 +437,24 @@ function wizard_add()
|
|||
ucic:save("openmptcprouter")
|
||||
end
|
||||
|
||||
-- Get Proxy set by default
|
||||
local default_proxy = luci.http.formvalue("default_proxy") or "shadowsocks"
|
||||
if default_proxy == "shadowsocks" and serversnb > 0 then
|
||||
ucic:set("shadowsocks-libev","sss0","disabled","0")
|
||||
ucic:set("v2ray","main","enabled","0")
|
||||
elseif default_proxy == "v2ray" and serversnb > 0 then
|
||||
ucic:set("shadowsocks-libev","sss0","disabled","1")
|
||||
ucic:set("v2ray","main","enabled","1")
|
||||
else
|
||||
ucic:set("shadowsocks-libev","sss0","disabled","1")
|
||||
ucic:set("v2ray","main","enabled","0")
|
||||
end
|
||||
ucic:set("openmptcprouter","settings","proxy",default_proxy)
|
||||
ucic:save("openmptcprouter")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:save("v2ray")
|
||||
|
||||
|
||||
local ss_servers_nginx = {}
|
||||
local ss_servers_ha = {}
|
||||
local vpn_servers = {}
|
||||
|
@ -415,6 +475,8 @@ function wizard_add()
|
|||
ucic:set("dsvpn","vpn","host",server_ip)
|
||||
ucic:set("mlvpn","general","host",server_ip)
|
||||
ucic:set("ubond","general","host",server_ip)
|
||||
ucic:set("v2ray","omrout","s_vmess_address",server_ip)
|
||||
ucic:set("v2ray","omrout","s_vless_address",server_ip)
|
||||
luci.sys.call("uci -q del openvpn.omr.remote")
|
||||
luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip)
|
||||
ucic:set("qos","serverin","srchost",server_ip)
|
||||
|
@ -434,6 +496,8 @@ function wizard_add()
|
|||
ucic:set("dsvpn","vpn","host",server_ip)
|
||||
ucic:set("mlvpn","general","host",server_ip)
|
||||
ucic:set("ubond","general","host",server_ip)
|
||||
ucic:set("v2ray","omrout","s_vmess_address",server_ip)
|
||||
ucic:set("v2ray","omrout","s_vless_address",server_ip)
|
||||
luci.sys.call("uci -q del openvpn.omr.remote")
|
||||
luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip)
|
||||
ucic:set("qos","serverin","srchost",server_ip)
|
||||
|
@ -450,6 +514,7 @@ function wizard_add()
|
|||
--ucic:commit("openvpn")
|
||||
ucic:save("mlvpn")
|
||||
ucic:save("ubond")
|
||||
ucic:save("v2ray")
|
||||
--ucic:commit("mlvpn")
|
||||
ucic:save("dsvpn")
|
||||
--ucic:commit("dsvpn")
|
||||
|
@ -463,41 +528,43 @@ function wizard_add()
|
|||
if encryption == "none" then
|
||||
ucic:set("shadowsocks-libev","sss0","method","none")
|
||||
ucic:set("openvpn","omr","cipher","none")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:set("v2ray","omrout","s_vmess_user_security","none")
|
||||
ucic:set("v2ray","omrout","s_vless_user_security","none")
|
||||
elseif encryption == "aes-256-gcm" then
|
||||
ucic:set("shadowsocks-libev","sss0","method","aes-256-gcm")
|
||||
ucic:set("glorytun","vpn","chacha20","0")
|
||||
ucic:set("openvpn","omr","cipher","AES-256-GCM")
|
||||
ucic:save("openvpn")
|
||||
ucic:save("glorytun")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm")
|
||||
ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm")
|
||||
elseif encryption == "aes-256-cfb" then
|
||||
ucic:set("shadowsocks-libev","sss0","method","aes-256-cfb")
|
||||
ucic:set("glorytun","vpn","chacha20","0")
|
||||
ucic:set("openvpn","omr","cipher","AES-256-CFB")
|
||||
ucic:save("openvpn")
|
||||
ucic:save("glorytun")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm")
|
||||
ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm")
|
||||
elseif encryption == "chacha20-ietf-poly1305" then
|
||||
ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305")
|
||||
ucic:set("glorytun","vpn","chacha20","1")
|
||||
ucic:set("openvpn","omr","cipher","AES-256-CBC")
|
||||
ucic:save("openvpn")
|
||||
ucic:save("glorytun")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:set("v2ray","omrout","s_vmess_user_security","chacha20-poly1305")
|
||||
ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305")
|
||||
end
|
||||
ucic:save("openvpn")
|
||||
ucic:save("glorytun")
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:save("v2ray")
|
||||
|
||||
-- Set ShadowSocks settings
|
||||
local shadowsocks_key = luci.http.formvalue("shadowsocks_key")
|
||||
local shadowsocks_disable = luci.http.formvalue("disableshadowsocks") or "0"
|
||||
if disablednb == serversnb then
|
||||
shadowsocks_disable = 1
|
||||
end
|
||||
--local shadowsocks_disable = luci.http.formvalue("disableshadowsocks") or "0"
|
||||
--if disablednb == serversnb then
|
||||
-- shadowsocks_disable = 1
|
||||
--end
|
||||
if shadowsocks_key ~= "" then
|
||||
ucic:set("shadowsocks-libev","sss0","key",shadowsocks_key)
|
||||
--ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305")
|
||||
--ucic:set("shadowsocks-libev","sss0","server_port","65101")
|
||||
ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable)
|
||||
--ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable)
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:commit("shadowsocks-libev")
|
||||
if shadowsocks_disable == "1" then
|
||||
|
@ -505,16 +572,19 @@ function wizard_add()
|
|||
end
|
||||
else
|
||||
if serversnb == 0 then
|
||||
shadowsocks_disable = 1
|
||||
else
|
||||
shadowsocks_disable = 0
|
||||
ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable)
|
||||
end
|
||||
ucic:set("shadowsocks-libev","sss0","key","")
|
||||
ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable)
|
||||
ucic:save("shadowsocks-libev")
|
||||
ucic:commit("shadowsocks-libev")
|
||||
luci.sys.call("/etc/init.d/shadowsocks rules_down >/dev/null 2>/dev/null")
|
||||
end
|
||||
local v2ray_user = luci.http.formvalue("v2ray_user")
|
||||
ucic:set("v2ray","omrout","s_vmess_user_id",v2ray_user)
|
||||
ucic:set("v2ray","omrout","s_vless_user_id",v2ray_user)
|
||||
ucic:save("v2ray")
|
||||
ucic:commit("v2ray")
|
||||
|
||||
|
||||
-- Set Glorytun settings
|
||||
if default_vpn:match("^glorytun.*") and disablednb ~= serversnb then
|
||||
|
@ -621,6 +691,10 @@ function wizard_add()
|
|||
end
|
||||
ucic:save("openvpn")
|
||||
ucic:commit("openvpn")
|
||||
|
||||
ucic:save("v2ray")
|
||||
ucic:commit("v2ray")
|
||||
|
||||
ucic:save("network")
|
||||
ucic:commit("network")
|
||||
|
||||
|
@ -640,10 +714,10 @@ function wizard_add()
|
|||
luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/mptcp restart >/dev/null 2>/dev/null")
|
||||
if openmptcprouter_vps_key ~= "" then
|
||||
luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("sleep 2")
|
||||
end
|
||||
--if openmptcprouter_vps_key ~= "" then
|
||||
-- luci.sys.call("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null")
|
||||
-- luci.sys.call("sleep 2")
|
||||
--end
|
||||
luci.sys.call("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null")
|
||||
|
@ -655,6 +729,7 @@ function wizard_add()
|
|||
luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null")
|
||||
luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null")
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/status"))
|
||||
else
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin/system/openmptcprouter/wizard"))
|
||||
|
@ -688,10 +763,21 @@ function settings_add()
|
|||
luci.sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries)
|
||||
luci.sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries)
|
||||
|
||||
--local tcp_retries2 = luci.http.formvalue("tcp_retries2")
|
||||
--luci.sys.exec("sysctl -w net.ipv4.tcp_retries2=%s" % tcp_retries2)
|
||||
--luci.sys.exec("sed -i 's:^net.ipv4.tcp_retries2=[0-9]*:net.ipv4.tcp_retries2=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_retries2)
|
||||
|
||||
-- Set tcp_retries1
|
||||
local tcp_retries1 = luci.http.formvalue("tcp_retries1")
|
||||
luci.sys.exec("sysctl -w net.ipv4.tcp_retries1=%s" % tcp_retries1)
|
||||
luci.sys.exec("sed -i 's:^net.ipv4.tcp_retries1=[0-9]*:net.ipv4.tcp_retries1=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_retries1)
|
||||
|
||||
-- Set tcp_retries2
|
||||
local tcp_retries2 = luci.http.formvalue("tcp_retries2")
|
||||
luci.sys.exec("sysctl -w net.ipv4.tcp_retries2=%s" % tcp_retries2)
|
||||
luci.sys.exec("sed -i 's:^net.ipv4.tcp_retries2=[0-9]*:net.ipv4.tcp_retries2=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_retries2)
|
||||
|
||||
-- Set ip_default_ttl
|
||||
local ip_default_ttl = luci.http.formvalue("ip_default_ttl")
|
||||
luci.sys.exec("sysctl -w net.ipv4.ip_default_ttl=%s" % ip_default_ttl)
|
||||
luci.sys.exec("sed -i 's:^net.ipv4.ip_default_ttl=[0-9]*:net.ipv4.ip_default_ttl=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % ip_default_ttl)
|
||||
|
||||
-- Set tcp_fastopen
|
||||
local tcp_fastopen = luci.http.formvalue("tcp_fastopen")
|
||||
local disablefastopen = luci.http.formvalue("disablefastopen") or "0"
|
||||
|
@ -718,7 +804,7 @@ function settings_add()
|
|||
|
||||
-- Enable/disable vnstat backup
|
||||
local savevnstat = luci.http.formvalue("savevnstat") or "0"
|
||||
luci.sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat)
|
||||
luci.sys.exec("uci -q set openmptcprouter.settings.vnstat_backup=%s" % savevnstat)
|
||||
ucic:commit("vnstat")
|
||||
|
||||
-- Enable/disable gateway ping
|
||||
|
@ -729,6 +815,10 @@ function settings_add()
|
|||
local disabledefaultgw = luci.http.formvalue("disabledefaultgw") or "1"
|
||||
ucic:set("openmptcprouter","settings","defaultgw",disabledefaultgw)
|
||||
|
||||
-- Enable/disable tracebox
|
||||
local tracebox = luci.http.formvalue("tracebox") or "1"
|
||||
ucic:set("openmptcprouter","settings","tracebox",tracebox)
|
||||
|
||||
-- Enable/disable server ping
|
||||
local disableserverping = luci.http.formvalue("disableserverping") or "0"
|
||||
ucic:set("openmptcprouter","settings","disableserverping",disableserverping)
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
end
|
||||
%>
|
||||
|
||||
|
||||
<hr />
|
||||
<form class="inline" method="post" action="<%=url('admin/system/openmptcprouter/settings_add')%>">
|
||||
<div class="cbi-map">
|
||||
<h2 name="content"><%:Advanced Settings%></h2>
|
||||
|
@ -111,6 +111,7 @@
|
|||
end
|
||||
%>
|
||||
</fieldset>
|
||||
<hr />
|
||||
<fieldset class="cbi-section" id="networks">
|
||||
<legend><%:Networks settings%></legend>
|
||||
<div class="cbi-section-descr"></div>
|
||||
|
@ -118,18 +119,50 @@
|
|||
<label class="cbi-value-title"><%:IPv4 TCP Keepalive time%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="tcp_keepalive_time" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_keepalive_time")):match(" %d+"))%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:How often TCP sends out keepalive messages when keepalive is enabled.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:IPv4 TCP FIN timeout%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="tcp_fin_timeout" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_fin_timeout")):match(" %d+"))%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:The length of time an orphaned (no longer referenced by any application) connection will remain in the FIN_WAIT_2 state before it is aborted at the local end.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:IPv4 TCP SYN retries%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="tcp_syn_retries" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_syn_retries")):match(" %d+"))%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Number of times initial SYNs for an active TCP connection attempt will be retransmitted.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:IPv4 TCP SYN retries1%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="tcp_retries1" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_retries1")):match(" %d+"))%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:This value influences the time, after which TCP decides, that something is wrong due to unacknowledged RTO retransmissions, and reports this suspicion to the network layer.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:IPv4 TCP SYN retries2%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="tcp_retries2" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_retries2")):match(" %d+"))%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:This value influences the timeout of an alive TCP connection, when RTO retransmissions remain unacknowledged.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
|
@ -138,6 +171,12 @@
|
|||
<input type="text" name="tcp_fastopen" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.tcp_fastopen")):match(" %d+"))%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:IPv4 IP default TTL%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="ip_default_ttl" class="cbi-input-text" value="<%=tonumber((luci.sys.exec("sysctl net.ipv4.ip_default_ttl")):match(" %d+"))%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Enable IPv6%></label>
|
||||
<div class="cbi-value-field">
|
||||
|
@ -174,10 +213,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<hr />
|
||||
<fieldset class="cbi-section" id="other">
|
||||
<legend><%:Other settings%></legend>
|
||||
<div class="cbi-section-descr"></div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Save vnstats stats%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="checkbox" name="savevnstat" class="cbi-input-checkbox" value="1" <% if luci.util.trim(luci.sys.exec("uci -q get vnstat.@vnstat[0].backup")) == "1" then %>checked<% end %>>
|
||||
<input type="checkbox" name="savevnstat" class="cbi-input-checkbox" value="1" <% if luci.util.trim(luci.sys.exec("uci -q get openmptcprouter.settings.vnstat_backup")) == "1" then %>checked<% end %>>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Save vnstats statistics on disk%>
|
||||
|
@ -214,6 +258,16 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Disable tracebox test%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="checkbox" name="disabletracebox" class="cbi-input-checkbox" value="0" <% if luci.model.uci.cursor():get("openmptcprouter","settings","tracebox") == "0" then %>checked<% end %>>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Disable multipath test using tracebox%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Debug%></label>
|
||||
<div class="cbi-value-field">
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
-- along with OverTheBox. If not, see (http://www.gnu.org/licenses/)
|
||||
-%>
|
||||
<%
|
||||
-- Copyright 2018 Ycarus (Yannick Chabanois) ycarus@zugaina.org
|
||||
-- Copyright 2018-2020 Ycarus (Yannick Chabanois) ycarus@zugaina.org for OpenMPTCProuter
|
||||
--
|
||||
-- Small changes to make this work with OpenMPTCProuter
|
||||
-- New features:
|
||||
|
@ -48,7 +48,7 @@
|
|||
}
|
||||
}
|
||||
function formatBytes(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]}
|
||||
XHR.poll(20, '/cgi-bin/luci/admin/system/openmptcprouter/interfaces_status', null,
|
||||
XHR.poll(20, '<%=build_url("admin/system/openmptcprouter/interfaces_status")%>', null,
|
||||
function(x, mArray)
|
||||
{
|
||||
var status = document.getElementById('openmptcprouter_status');
|
||||
|
@ -72,12 +72,12 @@
|
|||
{
|
||||
if (mArray.openmptcprouter.remote_from_lease == false)
|
||||
{
|
||||
var title = String.format("%s (%s)",'You', mArray.openmptcprouter.remote_addr);
|
||||
var title = String.format("%s (%s)",'<%:You%>', mArray.openmptcprouter.remote_addr);
|
||||
var statusMessageClass = "warning";
|
||||
var statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
|
||||
var statusMessage = _('Your IP was not leased by this router');
|
||||
var statusMessage = '<%:Your IP was not leased by this router%>';
|
||||
} else {
|
||||
var title = String.format('<br /><strong>%s (%s)</strong>', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('You'), mArray.openmptcprouter.remote_addr)
|
||||
var title = String.format('<br /><strong>%s (%s)</strong>', mArray.openmptcprouter.remote_hostname ? mArray.openmptcprouter.remote_hostname : _('<%:You%>'), mArray.openmptcprouter.remote_addr)
|
||||
var statusMessageClass = "";
|
||||
var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
|
||||
var statusMessage = "";
|
||||
|
@ -116,24 +116,24 @@
|
|||
content += "Version " + mArray.openmptcprouter.version;
|
||||
if (mArray.openmptcprouter.latest_version_omr != mArray.openmptcprouter.version && mArray.openmptcprouter.latest_version_omr != "")
|
||||
{
|
||||
content += "<br><i>(" + _('Latest available version') + " " + mArray.openmptcprouter.latest_version_omr + ")</i>";
|
||||
content += "<br><i>(" + '<%:Latest available version%>' + " " + mArray.openmptcprouter.latest_version_omr + ")</i>";
|
||||
}
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.loadavg)
|
||||
{
|
||||
content += _('Load:') + " " + mArray.openmptcprouter.loadavg;
|
||||
content += '<%:Load:%>' + " " + mArray.openmptcprouter.loadavg;
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.core_temp)
|
||||
{
|
||||
content += _('Core temp:') + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °";
|
||||
content += '<%:Core temp:%>' + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °";
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.uptime)
|
||||
{
|
||||
var date = new Date(null);
|
||||
content += _('Uptime:') + " " + String.format('%t', mArray.openmptcprouter.uptime);
|
||||
content += '<%:Uptime:%>' + " " + String.format('%t', mArray.openmptcprouter.uptime);
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.dhcpd)
|
||||
|
@ -141,38 +141,46 @@
|
|||
for ( dhcpd in mArray.openmptcprouter.dhcpd )
|
||||
{
|
||||
var dhcp = mArray.openmptcprouter.dhcpd[dhcpd];
|
||||
content += String.format('<span style="text-transform:capitalize;">%s</span> %s %s<br />', dhcp.interface, _('address:') ,dhcp.router);
|
||||
content += String.format('<span style="text-transform:capitalize;">%s</span> %s %s - %s<br />', dhcp.interface, _('range:'), dhcp.range_start, dhcp.range_end);
|
||||
content += String.format('<span style="text-transform:capitalize;">%s</span> %s %s<br />', dhcp.interface, '<%:address:%>' ,dhcp.router);
|
||||
content += String.format('<span style="text-transform:capitalize;">%s</span> %s %s - %s<br />', dhcp.interface, '<%:range:%>', dhcp.range_start, dhcp.range_end);
|
||||
}
|
||||
}
|
||||
|
||||
if (mArray.openmptcprouter.socks_service_enabled == true && mArray.openmptcprouter.service_addr != "")
|
||||
if (mArray.openmptcprouter.shadowsocks_enabled == true && mArray.openmptcprouter.service_addr != "")
|
||||
{
|
||||
if (mArray.openmptcprouter.socks_service == false)
|
||||
if (mArray.openmptcprouter.shadowsocks_service == false)
|
||||
{
|
||||
statusMessage += _('ShadowSocks is not running');
|
||||
if (mArray.openmptcprouter.socks_service_key == false && mArray.openmptcprouter.socks_service_method !== "none")
|
||||
statusMessage += '<%:ShadowSocks is not running%>';
|
||||
if (mArray.openmptcprouter.shadowsocks_service_key == false && mArray.openmptcprouter.shadowsocks_service_method !== "none")
|
||||
{
|
||||
statusMessage += ' <i>(' + _('empty key') + ')</i>';
|
||||
statusMessage += ' <i>(' + '<%:empty key%>' + ')</i>';
|
||||
}
|
||||
statusMessage += '<br/>';
|
||||
}
|
||||
}
|
||||
if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.service_addr != "")
|
||||
{
|
||||
if (mArray.openmptcprouter.v2ray_service == false)
|
||||
{
|
||||
statusMessage += '<%:V2Ray is not running%>';
|
||||
statusMessage += '<br/>';
|
||||
}
|
||||
}
|
||||
if (mArray.openmptcprouter.fsro == true)
|
||||
{
|
||||
statusMessage += _('Filesystem is readonly') + '<br/>';
|
||||
statusMessage += '<%:Filesystem is readonly%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.multi_vpn == true)
|
||||
{
|
||||
statusMessage += _('More than one default VPN is enabled') + '<br/>';
|
||||
statusMessage += '<%:More than one default VPN is enabled%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.tun_service == false && mArray.openmptcprouter.service_addr != "")
|
||||
{
|
||||
statusMessage += _('VPN is not running') + '<br/>';
|
||||
statusMessage += '<%:VPN is not running%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.dns == false)
|
||||
{
|
||||
statusMessage += _('DNS issue: can\'t resolve hostname') + '<br/>';
|
||||
statusMessage += '<%:DNS issue: can\'t resolve hostname%>' + '<br/>';
|
||||
}
|
||||
|
||||
if(statusMessage !== "")
|
||||
|
@ -181,22 +189,22 @@
|
|||
statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png";
|
||||
} else if (mArray.openmptcprouter.service_addr != "")
|
||||
{
|
||||
if (mArray.openmptcprouter.socks_service_enabled == false)
|
||||
if (mArray.openmptcprouter.v2ray_enabled == false && mArray.openmptcprouter.shadowsocks_enabled == false)
|
||||
{
|
||||
statusMessage += _('ShadowSocks is DISABLED') + '<br/>';
|
||||
statusMessage += '<%:Proxy is DISABLED%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.tun_state == "DOWN")
|
||||
{
|
||||
statusMessage += _('VPN tunnel DOWN') + '<br/>';
|
||||
statusMessage += '<%:VPN tunnel DOWN%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.ipv6 == "enabled")
|
||||
{
|
||||
if (mArray.openmptcprouter.tun6_state == "DOWN")
|
||||
{
|
||||
statusMessage += _('IPv6 tunnel DOWN') + '<br/>';
|
||||
statusMessage += '<%:IPv6 tunnel DOWN%>' + '<br/>';
|
||||
} else if (mArray.openmptcprouter.wan_addr6 == '')
|
||||
{
|
||||
statusMessage += _('No IPv6 access') + '<br/>';
|
||||
statusMessage += '<%:No IPv6 access%>' + '<br/>';
|
||||
}
|
||||
}
|
||||
if (statusMessage !== "")
|
||||
|
@ -215,7 +223,7 @@
|
|||
var equipmentIcon = '<img src="<%=resource%>/server.png" />';
|
||||
content = "";
|
||||
statusMessage = "";
|
||||
if (mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr && mArray.openmptcprouter.wan_addr != "")
|
||||
if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "")
|
||||
{
|
||||
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
|
||||
} else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
|
||||
|
@ -232,16 +240,16 @@
|
|||
} else if (mArray.openmptcprouter.external_check == false) {
|
||||
var title = String.format("%s ?", mArray.openmptcprouter.vps_hostname);
|
||||
} else {
|
||||
var title = _('No output');
|
||||
statusMessage += _('No output') + '<br/>';
|
||||
var title = '<%:No output%>';
|
||||
statusMessage += '<%:No output%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
|
||||
{
|
||||
statusMessage += _('No server IP address, No WAN IP address') + '<br/>';
|
||||
statusMessage += '<%:No server IP address, No WAN IP address%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.service_addr !== "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN")
|
||||
{
|
||||
statusMessage += _('Can\'t access and use server part') + '<br/>';
|
||||
statusMessage += '<%:Can\'t access and use server part%>' + '<br/>';
|
||||
}
|
||||
if (statusMessage !== "")
|
||||
{
|
||||
|
@ -250,21 +258,21 @@
|
|||
}
|
||||
if (mArray.openmptcprouter.service_addr == "")
|
||||
{
|
||||
statusMessage += _('No server defined') + '<br/>';
|
||||
statusMessage += '<%:No server defined%>' + '<br/>';
|
||||
} else {
|
||||
if (mArray.openmptcprouter.vps_status == "DOWN")
|
||||
{
|
||||
statusMessage += _('Can\'t ping server') + '<br/>';
|
||||
} else if (mArray.openmptcprouter.socks_service_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
|
||||
statusMessage += '<%:Can\'t ping server%>' + '<br/>';
|
||||
} else if (mArray.openmptcprouter.shadowsocks_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
|
||||
{
|
||||
statusMessage += _('Can\'t get public IP address from ShadowSocks') + '<br/>';
|
||||
statusMessage += '<%:Can\'t get public IP address from ShadowSocks%>' + '<br/>';
|
||||
} else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.external_check == true)
|
||||
{
|
||||
statusMessage += _('No WAN IP address detected in less than 1 second') + '<br/>';
|
||||
statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.vps_admin == false)
|
||||
{
|
||||
statusMessage += _('Can\'t contact Server Admin Script');
|
||||
statusMessage += '<%:Can\'t contact Server Admin Script%>';
|
||||
if (mArray.openmptcprouter.vps_admin_error_msg !== "")
|
||||
{
|
||||
statusMessage += ' <i>(' + mArray.openmptcprouter.vps_admin_error_msg + ')</i>';
|
||||
|
@ -273,11 +281,11 @@
|
|||
}
|
||||
if (mArray.openmptcprouter.vps_mptcp == "0")
|
||||
{
|
||||
statusMessage += _('MPTCP is not enabled on the server') + '<br/>';
|
||||
statusMessage += '<%:MPTCP is not enabled on the server%>' + '<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.vps_time_accurate == false)
|
||||
{
|
||||
statusMessage += _('Big time difference between the server and the router') + '<br/>';
|
||||
statusMessage += '<%:Big time difference between the server and the router%>' + '<br/>';
|
||||
}
|
||||
}
|
||||
if (statusMessage !== "" && statusMessageClass !== "error")
|
||||
|
@ -287,52 +295,52 @@
|
|||
}
|
||||
if (mArray.openmptcprouter.vps_omr_version)
|
||||
{
|
||||
content += _('Version') + " " + mArray.openmptcprouter.vps_omr_version;
|
||||
content += '<%:Version%>' + " " + mArray.openmptcprouter.vps_omr_version;
|
||||
if (mArray.openmptcprouter.vps_kernel)
|
||||
{
|
||||
content += " " + mArray.openmptcprouter.vps_kernel;
|
||||
}
|
||||
if (mArray.openmptcprouter.latest_version_vps !== mArray.openmptcprouter.vps_omr_version && mArray.openmptcprouter.latest_version_vps !== "")
|
||||
{
|
||||
content += "<br><i>(" + _('Latest available version') + " " + mArray.openmptcprouter.latest_version_vps + ")</i>";
|
||||
content += "<br><i>(" + '<%:Latest available version%>' + " " + mArray.openmptcprouter.latest_version_vps + ")</i>";
|
||||
}
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.vps_loadavg)
|
||||
{
|
||||
content += _('Load:') + " " + mArray.openmptcprouter.vps_loadavg;
|
||||
content += '<%:Load:%>' + " " + mArray.openmptcprouter.vps_loadavg;
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.vps_uptime)
|
||||
{
|
||||
var date = new Date(null);
|
||||
content += _('Uptime:') + " " + String.format('%t', mArray.openmptcprouter.vps_uptime);
|
||||
content += '<%:Uptime:%>' + " " + String.format('%t', mArray.openmptcprouter.vps_uptime);
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.server_mptcp == "disabled")
|
||||
{
|
||||
statusMessage += _('MPTCP may not be enabled on the server') + '<br/>';
|
||||
statusMessage += '<%:MPTCP may not be enabled on the server%>' + '<br/>';
|
||||
statusMessageClass = "warning";
|
||||
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
|
||||
}
|
||||
if (mArray.openmptcprouter.wan_addr6)
|
||||
{
|
||||
content += _('IPv6:') + " " + mArray.openmptcprouter.wan_addr6;
|
||||
content += '<%:IPv6:%>' + " " + mArray.openmptcprouter.wan_addr6;
|
||||
content += '<br />';
|
||||
}
|
||||
if (mArray.openmptcprouter.socks_service_enabled == true && mArray.openmptcprouter.ss_traffic && mArray.openmptcprouter.ss_traffic != 0)
|
||||
if (mArray.openmptcprouter.proxy_traffic && mArray.openmptcprouter.proxy_traffic != 0)
|
||||
{
|
||||
content += _('Shadowsocks traffic:') + " " + formatBytes(mArray.openmptcprouter.ss_traffic);
|
||||
content += '<%:Proxy traffic:%>' + " " + formatBytes(mArray.openmptcprouter.proxy_traffic);
|
||||
content += '<br />';
|
||||
}
|
||||
if (mArray.openmptcprouter.vpn_traffic && mArray.openmptcprouter.vpn_traffic != 0)
|
||||
{
|
||||
content += _('VPN traffic:') + " " + formatBytes(mArray.openmptcprouter.vpn_traffic);
|
||||
content += '<%:VPN traffic:%>' + " " + formatBytes(mArray.openmptcprouter.vpn_traffic);
|
||||
content += '<br />';
|
||||
}
|
||||
if (mArray.openmptcprouter.ss_traffic && mArray.openmptcprouter.vpn_traffic && mArray.openmptcprouter.vpn_traffic != 0 && mArray.openmptcprouter.ss_traffic != 0)
|
||||
if (mArray.openmptcprouter.total_traffic && mArray.openmptcprouter.total_traffic != 0)
|
||||
{
|
||||
content += _('Total traffic:') + " " + formatBytes(mArray.openmptcprouter.vpn_traffic + mArray.openmptcprouter.ss_traffic);
|
||||
content += '<%:Total traffic:%>' + " " + formatBytes(mArray.openmptcprouter.total_traffic);
|
||||
content += '<br />';
|
||||
}
|
||||
content += '<br />';
|
||||
|
@ -428,35 +436,35 @@
|
|||
var content = "";
|
||||
if(ipaddr !== '')
|
||||
{
|
||||
content += String.format('%s <strong>%s</strong><br />',_('ip address:'), ipaddr);
|
||||
content += String.format('%s <strong>%s</strong><br />','<%:ip address:%>', ipaddr);
|
||||
}
|
||||
if(wanip !== '')
|
||||
{
|
||||
content += String.format('%s <strong>%s</strong><br />',_('wan address:'), wanip);
|
||||
content += String.format('%s <strong>%s</strong><br />','<%:wan address:%>', wanip);
|
||||
}
|
||||
if(whois !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('whois:'), whois);
|
||||
content += String.format('%s %s<br />','<%:whois:%>', whois);
|
||||
}
|
||||
if(latency !== '')
|
||||
{
|
||||
content += String.format('%s %s ms<br />',_('latency:'), latency);
|
||||
content += String.format('%s %s ms<br />','<%:latency:%>', latency);
|
||||
}
|
||||
if(mtu !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('mtu:'), mtu);
|
||||
content += String.format('%s %s<br />','<%:mtu:%>', mtu);
|
||||
}
|
||||
if (operator !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('operator:'), operator);
|
||||
content += String.format('%s %s<br />','<%:operator:%>', operator);
|
||||
}
|
||||
if (phonenumber !== '' && anonymize !== 'true')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('phone number:'), phonenumber);
|
||||
content += String.format('%s %s<br />','<%:phone number:%>', phonenumber);
|
||||
}
|
||||
if (donglestate !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('state:'), donglestate);
|
||||
content += String.format('%s %s<br />','<%:state:%>', donglestate);
|
||||
}
|
||||
|
||||
if(signal !== '')
|
||||
|
@ -478,64 +486,64 @@
|
|||
}
|
||||
if(ipaddr == '')
|
||||
{
|
||||
statusMessage += _('No IP defined') + '<br />';
|
||||
statusMessage += '<%:No IP defined%>' + '<br />';
|
||||
}
|
||||
if(gateway == '')
|
||||
{
|
||||
statusMessage += _('No gateway defined') + '<br />';
|
||||
statusMessage += '<%:No gateway defined%>' + '<br />';
|
||||
} else if(gw_ping == 'DOWN')
|
||||
{
|
||||
statusMessage += _('Gateway DOWN') + '<br />';
|
||||
statusMessage += '<%:Gateway DOWN%>' + '<br />';
|
||||
} else if(multipath_available == 'ERROR')
|
||||
{
|
||||
statusMessage += _('Multipath seems to be blocked on the connection') + '<br />';
|
||||
statusMessage += '<%:Multipath seems to be blocked on the connection%>' + '<br />';
|
||||
}
|
||||
if(server_ping == 'DOWN' && mArray.openmptcprouter.service_addr !== "")
|
||||
{
|
||||
statusMessage += _('No Server ping response after 1 second') + '<br />';
|
||||
statusMessage += '<%:No Server ping response after 1 second%>' + '<br />';
|
||||
}
|
||||
if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.wans[i].gateway)
|
||||
{
|
||||
statusMessage += _('Wan IP and gateway are identical') + '<br />';
|
||||
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(multipath == 'master')
|
||||
{
|
||||
if (master > 1)
|
||||
{
|
||||
statusMessage += _('Multipath master already defined') + '<br />';
|
||||
statusMessage += '<%:Multipath master already defined%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(multipath_state !== 'on' && multipath_state !== '')
|
||||
{
|
||||
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
|
||||
statusMessage += '<%:Multipath current state is %>' + multipath_state + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
} else {
|
||||
if(multipath !== multipath_state && multipath_state !== '')
|
||||
{
|
||||
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
|
||||
statusMessage += '<%:Multipath current state is %>' + multipath_state + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
}
|
||||
if(duplicateif)
|
||||
{
|
||||
statusMessage += _('Network interface duplicated') + '<br />';
|
||||
statusMessage += '<%:Network interface duplicated%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(ipv6_discover == 'DETECTED')
|
||||
{
|
||||
statusMessage += _('IPv6 route received') + '<br />'
|
||||
statusMessage += '<%:IPv6 route received%>' + '<br />'
|
||||
}
|
||||
if (statusMessage !== "" && statusMessageClass !== "error")
|
||||
{
|
||||
statusMessageClass = "warning";
|
||||
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
|
||||
}
|
||||
content += String.format('multipath: %s<br />',multipath);
|
||||
content += String.format('<%:multipath:%> %s<br />',multipath);
|
||||
if(mArray.wans[i].qos && mArray.wans[i].download > 0 && mArray.wans[i].upload > 0)
|
||||
{
|
||||
content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos)
|
||||
content += String.format('%s %s/%s kbps (%s)','<%:traffic control:%>', mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos)
|
||||
}
|
||||
temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
|
||||
|
||||
|
@ -619,79 +627,79 @@
|
|||
var content = "";
|
||||
if(ipaddr !== '')
|
||||
{
|
||||
content += String.format('%s <strong>%s</strong><br />',_('ip address:'), ipaddr);
|
||||
content += String.format('%s <strong>%s</strong><br />','<%:ip address:%>', ipaddr);
|
||||
}
|
||||
if(wanip !== '')
|
||||
{
|
||||
content += String.format('%s <strong>%s</strong><br />',_('wan address:'), wanip);
|
||||
content += String.format('%s <strong>%s</strong><br />','<%:wan address:%>', wanip);
|
||||
}
|
||||
if(whois !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('whois:'), whois);
|
||||
content += String.format('%s %s<br />','<%:whois:%>', whois);
|
||||
}
|
||||
if(latency !== '')
|
||||
{
|
||||
content += String.format('%s %s ms<br />',_('latency:'), latency);
|
||||
content += String.format('%s %s ms<br />','<%:latency:%>', latency);
|
||||
}
|
||||
if(mtu !== '')
|
||||
{
|
||||
content += String.format('%s %s<br />',_('mtu:'), mtu);
|
||||
content += String.format('%s %s<br />','<%:mtu:%>', mtu);
|
||||
}
|
||||
if(ipaddr == '')
|
||||
{
|
||||
statusMessage += _('No IP defined') + '<br />'
|
||||
statusMessage += '<%:No IP defined%>' + '<br />'
|
||||
}
|
||||
if(gateway == '')
|
||||
{
|
||||
statusMessage += _('No gateway defined') + '<br />'
|
||||
statusMessage += '<%:No gateway defined%>' + '<br />'
|
||||
} else if(gw_ping == 'DOWN')
|
||||
{
|
||||
statusMessage += _('Gateway DOWN') + '<br />'
|
||||
statusMessage += '<%:Gateway DOWN%>' + '<br />'
|
||||
} else if(multipath_available == 'ERROR')
|
||||
{
|
||||
statusMessage += _('Multipath seems to be blocked on the connection') + '<br />'
|
||||
statusMessage += '<%:Multipath seems to be blocked on the connection%>' + '<br />'
|
||||
}
|
||||
if(server_ping == 'DOWN')
|
||||
{
|
||||
statusMessage += _('No Server ping response after 1 second') + '<br />'
|
||||
statusMessage += '<%:No Server ping response after 1 second%>' + '<br />'
|
||||
}
|
||||
if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.tunnels[i].gateway)
|
||||
{
|
||||
statusMessage += _('Wan IP and gateway are identical') + '<br />';
|
||||
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(multipath == 'master')
|
||||
{
|
||||
if (master > 1)
|
||||
{
|
||||
statusMessage += _('Multipath master already defined') + '<br />';
|
||||
statusMessage += '<%:Multipath master already defined%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(multipath_state !== 'on' && multipath_state !== '')
|
||||
{
|
||||
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
|
||||
statusMessage += '<%:Multipath current state is %>' + multipath_state + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
} else {
|
||||
if(multipath !== multipath_state && multipath_state !== '')
|
||||
{
|
||||
statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
|
||||
statusMessage += '<%:Multipath current state is %>' + multipath_state + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
}
|
||||
if(duplicateif)
|
||||
{
|
||||
statusMessage += _('Network interface duplicated') + '<br />';
|
||||
statusMessage += '<%:Network interface duplicated%>' + '<br />';
|
||||
statusMessageClass = "error";
|
||||
}
|
||||
if(ipv6_discover == 'DETECTED')
|
||||
{
|
||||
statusMessage += _('IPv6 route received') + '<br />'
|
||||
statusMessage += '<%:IPv6 route received%>' + '<br />'
|
||||
}
|
||||
content += String.format('multipath: %s<br />',multipath);
|
||||
content += String.format('<%:multipath:%> %s<br />',multipath);
|
||||
if(mArray.tunnels[i].qos && mArray.tunnels[i].download > 0 && mArray.tunnels[i].upload > 0)
|
||||
{
|
||||
content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos)
|
||||
content += String.format('%s %s/%s kbps (%s)','<%:traffic control:%>', mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos)
|
||||
}
|
||||
temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
|
||||
|
||||
|
@ -701,7 +709,7 @@
|
|||
temp += '</tr></table>';
|
||||
}
|
||||
if (mArray === null) {
|
||||
temp += _('No data');
|
||||
temp += '<%:No data%>';
|
||||
}
|
||||
temp += '</li>';
|
||||
// Close tree
|
||||
|
|
|
@ -69,7 +69,7 @@ end
|
|||
<div class="cbi-value-field">
|
||||
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="<%:Server IP%>" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"ip")%>" data-optional="false">
|
||||
<div class="cbi-value-description">
|
||||
<%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
|
||||
<%:Server IP will be set for proxy and VPN%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -125,7 +125,7 @@ end
|
|||
<div>
|
||||
<input type="text" class="cbi-section-create-name" id="cbi.cts.omr-bypass.server." name="add_server_name" data-type="uciname" data-optional="true" />
|
||||
</div>
|
||||
<input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" name="add_server" value="<%:Add server%>" />
|
||||
<input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" name="add_server" value="<%:Add a new server%>" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -175,23 +175,42 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="cbi-section" id="shadowsocks">
|
||||
<legend><%:ShadowSocks settings%></legend>
|
||||
<div class="cbi-section-descr"><%:By default ShadowSocks is used for TCP traffic.%></div>
|
||||
<fieldset class="cbi-section" id="proxy">
|
||||
<legend><%:Proxy settings%></legend>
|
||||
<div class="cbi-section-descr"><%:By default proxy is used for any traffic that is TCP (and UDP for V2Ray).%></div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Default Proxy%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" name="default_proxy" size="1">
|
||||
<% if nixio.fs.access("/etc/init.d/shadowsocks-libev") then %><option value="shadowsocks" <% if uci:get("shadowsocks-libev","sss0","disabled") == "0" or uci:get("openmptcprouter","settings","proxy") == nil then %>selected="selected"<% end %>>Shadowsocks</option><% end %>
|
||||
<% if nixio.fs.access("/etc/init.d/v2ray") then %><option value="v2ray" <% if uci:get("v2ray","main","enabled") == "1" then %>selected="selected"<% end %>>V2Ray</option><% end %>
|
||||
<option value="none" <% if uci:get("shadowsocks-libev","sss0","disabled") ~= "0" and uci:get("v2ray","main","enabled") ~= "1" and uci:get("openmptcprouter","settings","proxy") ~= nil then %>selected="selected"<% end %>>None</option>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray is enabled.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:ShadowSocks key%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" name="shadowsocks_key" placeholder="<%:ShadowSocks key%>" class="cbi-input-text" value="<%=uci:get("shadowsocks-libev","sss0","key")%>" />
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default. ShadowSocks is used for TCP.%>
|
||||
<%:Key is retrieved from server API by default.%> <%:ShadowSocks is used for TCP.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Disable ShadowSocks%></label>
|
||||
<label class="cbi-value-title"><%:V2Ray user id%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input class="cbi-input-checkbox" type="checkbox" name="disableshadowsocks" value="1" <% if uci:get("shadowsocks-libev","sss0","disabled") == "1" then %>checked<% end %> />
|
||||
<input type="text" name="v2ray_user" placeholder="<%:V2Ray user%>" class="cbi-input-text" value="<%=uci:get("v2ray","omrout","s_vmess_user_id")%>" />
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default.%> <%:V2Ray is used for TCP and UDP.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
|
@ -216,7 +235,7 @@ end
|
|||
<% else %>
|
||||
<%:There is no Advanced Encryption Standard (AES) instruction set integrated in the processor, you should use chacha20.%>
|
||||
<% end %>
|
||||
<%:Encryption method is also used for Glorytun and OpenVPN.%>
|
||||
<%:Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -231,7 +250,7 @@ end
|
|||
<input type="text" name="glorytun_key" placeholder="<%:Glorytun key%>" class="cbi-input-text" value="<%=uci:get("glorytun","vpn","key")%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default. Glorytun TCP is used by default for UDP and ICMP%>
|
||||
<%:Key is retrieved from server API by default.%> <%:Glorytun TCP is used by default for UDP and ICMP%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -243,7 +262,7 @@ end
|
|||
<input type="text" name="dsvpn_key" placeholder="<%:A Dead Simple VPN key%>" class="cbi-input-text" value="<%=uci:get("dsvpn","vpn","key")%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default. A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP%>
|
||||
<%:Key is retrieved from server API by default.%> <%:A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -255,7 +274,7 @@ end
|
|||
<input type="text" name="mlvpn_password" placeholder="<%:MLVPN password%>" class="cbi-input-text" value="<%=uci:get("mlvpn","general","password")%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default. MLVPN can replace Glorytun with connections with same latency%>
|
||||
<%:Key is retrieved from server API by default.%> <%:MLVPN can replace Glorytun with connections with same latency%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -267,7 +286,7 @@ end
|
|||
<input type="text" name="ubond_password" placeholder="<%:UBOND password%>" class="cbi-input-text" value="<%=uci:get("ubond","general","password")%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Key is retrieved from server API by default. UBOND can replace Glorytun with connections with same latency%>
|
||||
<%:Key is retrieved from server API by default.%> <%:UBOND can replace Glorytun with connections with same latency%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -291,7 +310,7 @@ end
|
|||
<% elseif vpn == "dsvpn" then %>
|
||||
<% if nixio.fs.access("/usr/sbin/dsvpn") then %><option value="dsvpn" <% if uci:get("dsvpn","vpn","enable") == "1" then %>selected="selected"<% end %>>A Dead Simple VPN</option><% end %>
|
||||
<% elseif vpn == "mlvpn" then %>
|
||||
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><!--<option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option>--><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
||||
<% elseif vpn == "ubond" then %>
|
||||
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("ubond","general","enable") == "1" then %>selected="selected"<% end %>>UBOND</option><% end %>
|
||||
<% elseif vpn == "openvpn" then %>
|
||||
|
@ -307,7 +326,7 @@ end
|
|||
<% if nixio.fs.access("/usr/sbin/glorytun") then %><option value="glorytun_tcp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" then %>selected="selected"<% end %>>Glorytun TCP</option><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><option value="glorytun_udp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" then %>selected="selected"<% end %>>Glorytun UDP</option><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/dsvpn") then %><option value="dsvpn" <% if uci:get("dsvpn","vpn","enable") == "1" then %>selected="selected"<% end %>>A Dead Simple VPN</option><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><!--<option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option>--><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("ubond","general","enable") == "1" then %>selected="selected"<% end %>>UBOND</option><% end %>
|
||||
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
|
||||
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
|
||||
|
@ -323,16 +342,108 @@ end
|
|||
</div>
|
||||
</fieldset>
|
||||
</span>
|
||||
<hr />
|
||||
<fieldset class="cbi-section" id="laninterfaces">
|
||||
<legend><%:LAN interfaces settings%></legend>
|
||||
<%
|
||||
for _, iface in ipairs(net:get_networks()) do
|
||||
local ifname = iface:name()
|
||||
local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[0].network | grep " .. ifname))
|
||||
if firewall_lan ~= "" then
|
||||
%>
|
||||
<h3><%=ifname%></h3>
|
||||
<fieldset class="cbi-section-node" id="cbi-openmptcprouter-<%=ifname%>">
|
||||
<input type="hidden" name="intf.<%=ifname%>" value="<%=ifname%>" />
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-label" data-index="1">
|
||||
<label class="cbi-value-title"><%:Label%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="hidden" id="cbid.network.<%=ifname%>.lan" name="cbid.network.<%=ifname%>.lan" value="1">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.label" name="cbid.network.<%=ifname%>.label" class="cbi-input-text" value="<%=uci:get("network",ifname,"label")%>">
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Label for the interface%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-proto" data-index="3">
|
||||
<label class="cbi-value-title"><%:Protocol%></label>
|
||||
<div class="cbi-value-field">
|
||||
<% findproto = 0 %>
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
|
||||
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" or uci:get("network",ifname,"proto") == "" then findproto = 1 %> selected="selected"<% end %>><%:Static address%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then findproto = 1 %> selected="selected"<% end %>><%:DHCP%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-other" value="other"<% if uci:get("network",ifname,"proto") ~= nil and findproto ~= 1 then %> selected="selected"<% end %>><%:Other%></option>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:You can use DHCP if you have multiple real ethernet ports.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%
|
||||
if uci:get("network",ifname,"type") ~= "bridge" then
|
||||
%>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.proto":"dhcp"}]" data-index="4">
|
||||
<label class="cbi-value-title"><%:Physical interface%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
|
||||
<%
|
||||
iffind=0
|
||||
for _, ifacea in ipairs(ifaces) do
|
||||
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
|
||||
%>
|
||||
<option value="<%=ifacea%>"<% if uci:get("network",ifname,"ifname") == ifacea then iffind = 1 %> selected="selected"<% end %>><%=ifacea%></option>
|
||||
<%
|
||||
end
|
||||
end
|
||||
if iffinf == 0 and uci:get("network",ifname,"ifname") ~= nil then
|
||||
%>
|
||||
<option value="<%=uci:get("network",ifname,"ifname")%>" selected="selected"><%=uci:get("network",ifname,"ifname")%></option>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Choose physical interface.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="5">
|
||||
<label class="cbi-value-title"><%:IPv4 address%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.ipaddr" name="cbid.network.<%=ifname%>.ipaddr" class="cbi-input-text" value="<%=uci:get("network",ifname,"ipaddr")%>" data-type="ip4addr">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="6">
|
||||
<label class="cbi-value-title"><%:IPv4 netmask%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.netmask" name="cbid.network.<%=ifname%>.netmask" class="cbi-input-text" value="<%=uci:get("network",ifname,"netmask") or "255.255.255.0"%>" data-type="ip4addr">
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<%
|
||||
end
|
||||
end
|
||||
%>
|
||||
|
||||
<hr />
|
||||
<fieldset class="cbi-section" id="interfaces">
|
||||
<legend><%:Interfaces settings%></legend>
|
||||
<div class="cbi-section-descr"><%:You must disable DHCP on your modems and set IP in different networks.%></div>
|
||||
<%
|
||||
for _, iface in ipairs(net:get_networks()) do
|
||||
local ifname = iface:name()
|
||||
local multipath = uci:get("network",ifname,"multipath")
|
||||
local multipathvpn = uci:get("openmptcprouter",ifname,"multipathvpn")
|
||||
local vpn = uci:get("openmptcprouter",ifname,"vpn")
|
||||
if (multipath ~= nil and multipath ~= "off" and vpn ~= "1") or multipathvpn == "1" then
|
||||
local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.@zone[1].network | grep " .. ifname))
|
||||
if firewall_wan ~= "" then
|
||||
|
||||
-- local multipath = uci:get("network",ifname,"multipath")
|
||||
-- local multipathvpn = uci:get("openmptcprouter",ifname,"multipathvpn")
|
||||
-- local vpn = uci:get("openmptcprouter",ifname,"vpn")
|
||||
-- if (multipath ~= nil and multipath ~= "off" and vpn ~= "1") or multipathvpn == "1" then
|
||||
%>
|
||||
<div class="cbi-section-remove right">
|
||||
<input type="submit" name="delete.<%=ifname%>" value="<%:Delete%>" class="cbi-button" />
|
||||
|
@ -350,13 +461,53 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-proto" data-index="2">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-type" data-index="2">
|
||||
<label class="cbi-value-title"><%:Type%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.type" name="cbid.network.<%=ifname%>.type" size="1">
|
||||
<option id="cbid.network.<%=ifname%>.type-normal" value="normal"><%:Normal%></option>
|
||||
<option id="cbid.network.<%=ifname%>.type-macvlan" value="macvlan"<% if uci:get("network",ifname,"type") == "macvlan" then %> selected="selected"<% end %>><%:MacVLAN%></option>
|
||||
<option id="cbid.network.<%=ifname%>.type-bridge" value="bridge"<% if uci:get("network",ifname,"type") == "bridge" then %> selected="selected"<% end %>><%:Bridge%></option>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Choose MacVLAN if you want to create a virtual interface based on a physical interface.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-masterintf" data-depends="[{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="3">
|
||||
<label class="cbi-value-title"><%:Physical interface%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.masterintf" name="cbid.network.<%=ifname%>.masterintf" size="1">
|
||||
<%
|
||||
for _, ifacea in ipairs(ifaces) do
|
||||
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
|
||||
%>
|
||||
<option value="<%=ifacea%>"<% if uci:get("network",ifname,"masterintf") == ifacea then %> selected="selected"<% end %>><%=ifacea%></option>
|
||||
<%
|
||||
end
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Choose physical interface.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-proto" data-depends="[{"cbid.network.<%=ifname%>.type":"normal"},{"cbid.network.<%=ifname%>.type":"bridge"}]" data-index="3">
|
||||
<label class="cbi-value-title"><%:Protocol%></label>
|
||||
<div class="cbi-value-field">
|
||||
<% findproto = 0 %>
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
|
||||
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" then %> selected="selected"<% end %>><%:Static address%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then %> selected="selected"<% end %>><%:DHCP%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-other" value="other"<% if uci:get("network",ifname,"proto") ~= "static" and uci:get("network",ifname,"proto") ~= "dhcp" then %> selected="selected"<% end %>><%:Other%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" or uci:get("network",ifname,"proto") == nil then findproto = 1 %> selected="selected"<% end %>><%:Static address%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then findproto = 1 %> selected="selected"<% end %>><%:DHCP%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-modemmanager" value="modemmanager"<% if uci:get("network",ifname,"proto") == "modemmanager" then findproto = 1 %> selected="selected"<% end %>><%:ModemManager%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-ncm" value="ncm"<% if uci:get("network",ifname,"proto") == "ncm" then findproto = 1 %> selected="selected"<% end %>><%:NCM%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-pppoe" value="pppoe"<% if uci:get("network",ifname,"proto") == "pppoe" then findproto = 1 %> selected="selected"<% end %>><%:PPPoE%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-qmi" value="qmi"<% if uci:get("network",ifname,"proto") == "qmi" then findproto = 1 %> selected="selected"<% end %>><%:QMI%></option>
|
||||
<option id="cbid.network.<%=ifname%>.proto-other" value="other"<% if uci:get("network",ifname,"proto") ~= nil and findproto ~= 1 then %> selected="selected"<% end %>><%:Other%></option>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
|
@ -364,7 +515,34 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="3">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.proto":"dhcp"}]" data-index="4">
|
||||
<label class="cbi-value-title"><%:Physical interface%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
|
||||
<%
|
||||
iffind=0
|
||||
for _, ifacea in ipairs(ifaces) do
|
||||
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*")) and device_notvirtual(ifacea) then
|
||||
%>
|
||||
<option value="<%=ifacea%>"<% if uci:get("network",ifname,"ifname") == ifacea then iffind = 1 %> selected="selected"<% end %>><%=ifacea%></option>
|
||||
<%
|
||||
end
|
||||
end
|
||||
if iffinf == 0 and uci:get("network",ifname,"ifname") ~= nil then
|
||||
%>
|
||||
<option value="<%=uci:get("network",ifname,"ifname")%>" selected="selected"><%=uci:get("network",ifname,"ifname")%></option>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
<br />
|
||||
<div class="cbi-value-description">
|
||||
<%:Choose physical interface.%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="5">
|
||||
<label class="cbi-value-title"><%:IPv4 address%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.ipaddr" name="cbid.network.<%=ifname%>.ipaddr" class="cbi-input-text" value="<%=uci:get("network",ifname,"ipaddr")%>" data-type="ip4addr">
|
||||
|
@ -374,13 +552,13 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="4">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="6">
|
||||
<label class="cbi-value-title"><%:IPv4 netmask%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.netmask" name="cbid.network.<%=ifname%>.netmask" class="cbi-input-text" value="<%=uci:get("network",ifname,"netmask") or "255.255.255.0"%>" data-type="ip4addr">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="5">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"},{"cbid.network.<%=ifname%>.type":"macvlan"}]" data-index="7">
|
||||
<label class="cbi-value-title"><%:IPv4 gateway%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.gateway" name="cbid.network.<%=ifname%>.gateway" class="cbi-input-text" value="<%=uci:get("network",ifname,"gateway")%>" data-type="ip4addr">
|
||||
|
@ -390,6 +568,165 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-device" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"}]" data-index="5">
|
||||
<label class="cbi-value-title"><%:Device%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device" name="cbid.network.<%=ifname%>.device" size="1">
|
||||
<%
|
||||
iffind=0
|
||||
iftty = nixio.fs.glob("/dev/ttyUSB*")
|
||||
for tty in iftty 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
|
||||
%>
|
||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||
<%
|
||||
end
|
||||
if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then
|
||||
%>
|
||||
<option value="<%=uci:get("network",ifname,"device")%>" selected="selected"><%=uci:get("network",ifname,"device")%></option>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-device" data-depends="[{"cbid.network.<%=ifname%>.proto":"qmi"}]" data-index="5">
|
||||
<label class="cbi-value-title"><%:Device%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device" name="cbid.network.<%=ifname%>.device" size="1">
|
||||
<%
|
||||
iffind=0
|
||||
iftty = nixio.fs.glob("/dev/cdc-wdm*")
|
||||
for tty in iftty do
|
||||
%>
|
||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||
<%
|
||||
end
|
||||
if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then
|
||||
%>
|
||||
<option value="<%=uci:get("network",ifname,"device")%>" selected="selected"><%=uci:get("network",ifname,"device")%></option>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-device" data-depends="[{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index="5">
|
||||
<label class="cbi-value-title"><%:Device%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.device" name="cbid.network.<%=ifname%>.device" size="1">
|
||||
<%
|
||||
iffind=0
|
||||
iftty = luci.sys.exec("/usr/bin/mmcli -L")
|
||||
for listtty in iftty:gmatch("([^\r\n]*)[\r\n]") do
|
||||
modemid = luci.util.trim(luci.sys.exec("echo '" .. listtty .. "' | awk -F' ' '{print $1}' | awk -F/ '{print $6}'"))
|
||||
if modemid ~= '' then
|
||||
modeminfo = luci.sys.exec("/usr/bin/mmcli -m " .. modemid .. " --output-keyvalue")
|
||||
tty = luci.util.trim(luci.sys.exec("echo '" .. modeminfo .. "' | grep 'modem.generic.device ' | awk -F': ' '{print $2}'"))
|
||||
%>
|
||||
<option value="<%=tty%>"<% if uci:get("network",ifname,"device") == tty then iffind = 1 %> selected="selected"<% end %>><%=tty%></option>
|
||||
<%
|
||||
end
|
||||
end
|
||||
if iffinf == 0 and uci:get("network",ifname,"device") ~= nil then
|
||||
%>
|
||||
<option value="<%=uci:get("network",ifname,"device")%>" selected="selected"><%=uci:get("network",ifname,"device")%></option>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-apn" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index="6">
|
||||
<label class="cbi-value-title"><%:APN%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.apn" name="cbid.network.<%=ifname%>.apn" class="cbi-input-text" value="<%=uci:get("network",ifname,"apn")%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-pincode" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"modemmanager"}]" data-index="7">
|
||||
<label class="cbi-value-title"><%:PIN code%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.pincode" name="cbid.network.<%=ifname%>.pincode" class="cbi-input-text" value="<%=uci:get("network",ifname,"pincode")%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-mode" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"}]" data-index="8">
|
||||
<label class="cbi-value-title"><%:Service Type%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.mode" name="cbid.network.<%=ifname%>.mode" size="1">
|
||||
<option value=""<% if uci:get("network",ifname,"mode") == "" then %> selected="selected"<% end %>><%:Modem default%></option>
|
||||
<option value="preferlte"<% if uci:get("network",ifname,"auth") == "preferlte" then %> selected="selected"<% end %>><%:Prefer LTE%></option>
|
||||
<option value="preferumts"<% if uci:get("network",ifname,"auth") == "preferumts" then %> selected="selected"<% end %>><%:Prefer UMTS%></option>
|
||||
<option value="lte"<% if uci:get("network",ifname,"auth") == "lte" then %> selected="selected"<% end %>><%:LTE%></option>
|
||||
<option value="umts"<% if uci:get("network",ifname,"auth") == "umts" then %> selected="selected"<% end %>><%:UMTS/GPRS%></option>
|
||||
<option value="gsm"<% if uci:get("network",ifname,"auth") == "gsm" then %> selected="selected"<% end %>><%:GPRS only%></option>
|
||||
<option value="auto"<% if uci:get("network",ifname,"auth") == "auto" then %> selected="selected"<% end %>><%:auto%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-auth" data-depends="[{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index="9">
|
||||
<label class="cbi-value-title"><%:Authentication Type%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.auth" name="cbid.network.<%=ifname%>.auth" size="1">
|
||||
<option value="none"<% if uci:get("network",ifname,"auth") == "none" then %> selected="selected"<% end %>><%:NONE%></option>
|
||||
<option value="pap"<% if uci:get("network",ifname,"auth") == "pap" then %> selected="selected"<% end %>><%:PAP%></option>
|
||||
<option value="chap"<% if uci:get("network",ifname,"auth") == "chap" then %> selected="selected"<% end %>><%:CHAP%></option>
|
||||
<option value="both"<% if uci:get("network",ifname,"auth") == "both" then %> selected="selected"<% end %>><%:PAP/CHAP%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-username" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index="10">
|
||||
<label class="cbi-value-title"><%:PAP/CHAP username%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.username" name="cbid.network.<%=ifname%>.username" class="cbi-input-text" value="<%=uci:get("network",ifname,"username")%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-password" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"},{"cbid.network.<%=ifname%>.proto":"pppoe"}]" data-index="11">
|
||||
<label class="cbi-value-title"><%:PAP/CHAP password%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.password" name="cbid.network.<%=ifname%>.password" class="cbi-input-text" value="<%=uci:get("network",ifname,"password")%>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-delay" data-depends="[{"cbid.network.<%=ifname%>.proto":"ncm"},{"cbid.network.<%=ifname%>.proto":"qmi"}]" data-index="12">
|
||||
<label class="cbi-value-title"><%:Modem init timeout%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="text" id="cbid.network.<%=ifname%>.delay" name="cbid.network.<%=ifname%>.delay" class="cbi-input-text" value="<%=uci:get("network",ifname,"delay")%>">
|
||||
</div>
|
||||
</div>
|
||||
<%
|
||||
if uci:get("openmptcprouter",ifname,"multipathvpn") == "1" then
|
||||
%>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-multipath" data-index="13">
|
||||
<label class="cbi-value-title"><%:Multipath TCP%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.multipath" name="cbid.network.<%=ifname%>.multipath" size="1">
|
||||
<option value="on"<% if uci:get("network","ovpn" .. ifname,"multipath") == "on" then %> selected="selected"<% end %>><%:Enabled%></option>
|
||||
<option value="off"<% if uci:get("network","ovpn" .. ifname,"multipath") == "off" then %> selected="selected"<% end %>><%:Disabled%></option>
|
||||
<option value="master"<% if uci:get("network","ovpn" .. ifname,"multipath") == "master" then %> selected="selected"<% end %>><%:Master%></option>
|
||||
<option value="backup"<% if uci:get("network","ovpn" .. ifname,"multipath") == "backup" then %> selected="selected"<% end %>><%:Backup%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-multipath" data-index="13">
|
||||
<label class="cbi-value-title"><%:Multipath TCP%></label>
|
||||
<div class="cbi-value-field">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.multipath" name="cbid.network.<%=ifname%>.multipath" size="1">
|
||||
<option value="on"<% if uci:get("network",ifname,"multipath") == "on" then %> selected="selected"<% end %>><%:Enabled%></option>
|
||||
<option value="off"<% if uci:get("network",ifname,"multipath") == "off" then %> selected="selected"<% end %>><%:Disabled%></option>
|
||||
<option value="master"<% if uci:get("network",ifname,"multipath") == "master" then %> selected="selected"<% end %>><%:Master%></option>
|
||||
<option value="backup"<% if uci:get("network",ifname,"multipath") == "backup" then %> selected="selected"<% end %>><%:Backup%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
|
||||
<%
|
||||
local download = "0"
|
||||
local upload = "0"
|
||||
|
@ -405,7 +742,7 @@ end
|
|||
end
|
||||
end
|
||||
%>
|
||||
<div class="cbi-value" data-index="6">
|
||||
<div class="cbi-value" data-index="14">
|
||||
<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 %> />
|
||||
|
@ -415,7 +752,7 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" data-index="7">
|
||||
<div class="cbi-value" data-index="15">
|
||||
<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 %> />
|
||||
|
@ -425,7 +762,7 @@ end
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" data-index="8">
|
||||
<div class="cbi-value" data-index="16">
|
||||
<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">
|
||||
|
@ -441,7 +778,7 @@ end
|
|||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" data-index="9">
|
||||
<div class="cbi-value" data-index="17">
|
||||
<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">
|
||||
|
@ -467,7 +804,7 @@ end
|
|||
<select class="cbi-section-create-name" name="add_interface_ifname">
|
||||
<%
|
||||
for _, ifacea in ipairs(ifaces) do
|
||||
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*")) and device_notvirtual(ifacea) then
|
||||
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*")) and device_notvirtual(ifacea) then
|
||||
%>
|
||||
<option value="<%=ifacea%>"><%=ifacea%></option>
|
||||
<%
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1113
luci-app-openmptcprouter/po/it/openmptcprouter.po
Normal file
1113
luci-app-openmptcprouter/po/it/openmptcprouter.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||
|
||||
[ "$ACTION" = "add" ] || exit
|
||||
[ "$ACTION" = "add" ] || [ "$ACTION" = "bind" ] || exit
|
||||
[ -n "${INTERFACE}" ] || exit
|
||||
[ -n "${DEVPATH}" ] || exit
|
||||
|
||||
|
@ -12,14 +12,46 @@ _set_intf_name() {
|
|||
local device
|
||||
local ifname
|
||||
config_get device $intfname device
|
||||
config_get modalias $intfname modalias
|
||||
config_get ifname $intfname ifname
|
||||
[ -n "$device" ] && [ -n "$ifname" ] && [ "/sys${DEVPATH}" = "$device" ] && [ "$INTERFACE" != "$ifname" ] && {
|
||||
[ -n "$modalias" ] && {
|
||||
if [ -f /sys/class/net/${INTERFACE}/device/uevent ]; then
|
||||
#chk_modalias="$(cat /sys/class/net/${INTERFACE}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')"
|
||||
chk_modalias=$MODALIAS
|
||||
logger -t "OMR-Rename" "dir: $i - modalias: $modalias - chk_modalias: $chk_modalias - ifname: $ifname - INTERFACE: $INTERFACE"
|
||||
if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then
|
||||
logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}"
|
||||
existif=0
|
||||
ip link set ${INTERFACE} down
|
||||
[ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && {
|
||||
ip link set ${ifname} name ${ifname}tmp
|
||||
existif=1
|
||||
}
|
||||
ip link set ${INTERFACE} name ${ifname}
|
||||
ip link set ${ifname} up
|
||||
[ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE}
|
||||
fi
|
||||
elif [ -f /dev/${DEVICE_NAME} ] && [ "$modalias" = "$MODALIAS" ]; then
|
||||
if [ "$device" != "/dev/${DEVICE_NAME}" ]; then
|
||||
ln -s /dev/${DEVICE_NAME} /dev/$intfname
|
||||
uci -q set network.${intfname}.device="/dev/${intfname}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
[ -z "$modalias" ] && [ -n "$device" ] && [ -n "$ifname" ] && [ "/sys${DEVPATH}" = "$device" ] && [ "$INTERFACE" != "$ifname" ] && {
|
||||
logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}"
|
||||
ip link set ${INTERFACE} down
|
||||
existif=0
|
||||
[ "$(ip link show ${ifname} 2>/dev/null)" != "" ] && {
|
||||
ip link set ${ifname} name ${ifname}tmp
|
||||
existif=1
|
||||
}
|
||||
ip link set ${INTERFACE} name ${ifname}
|
||||
ip link set ${ifname} up
|
||||
[ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE}
|
||||
}
|
||||
}
|
||||
|
||||
config_load network
|
||||
config_foreach _set_intf_name interface
|
||||
config_foreach _set_intf_name interface
|
||||
|
|
|
@ -21,12 +21,39 @@ omr_intf_set() {
|
|||
local multipath
|
||||
config_get multipath "$1" multipath
|
||||
config_get ifname "$1" ifname
|
||||
config_get device "$1" device
|
||||
config_get proto "$1" proto
|
||||
config_get addlatency "$1" addlatency "0"
|
||||
devicename=$(echo "$device" | cut -d'/' -f3)
|
||||
|
||||
[ -n "$ifname" ] && [ -L /sys/class/net/${ifname} ] && ([ "$proto" = "static" ] || [ "$proto" = "dhcp" ]) && {
|
||||
device=$(readlink -f /sys/class/net/${ifname})
|
||||
[ "$(echo ${device} | grep virtual)" = "" ] && uci -q set network.$1.device="$device"
|
||||
}
|
||||
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
|
||||
|
||||
if [ -n "$ifname" ]; then
|
||||
if [ "$addlatency" = "0" ] && [ "$(tc qdisc show $ifname | grep delay)" != "" ]; then
|
||||
tc qdisc del dev ${ifname} root netem
|
||||
fi
|
||||
if [ "$addlatency" != "0" ]; then
|
||||
if [ "$(tc qdisc show $ifname | grep delay)" != "" ]; then
|
||||
tc qdisc add dev ${ifname} root netem delay ${addlatency}ms
|
||||
elif [ "$(tc qdisc show $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then
|
||||
tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then
|
||||
devicepath=$(readlink -f /sys/class/net/${ifname})
|
||||
if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ]; then
|
||||
uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')"
|
||||
uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')"
|
||||
elif [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" != "" ]; then
|
||||
uci -q delete network.$1.device
|
||||
uci -q delete network.$1.modalias
|
||||
fi
|
||||
elif [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ]; then
|
||||
uci -q set network.$1.modalias="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')"
|
||||
uci -q set network.$1.product="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')"
|
||||
fi
|
||||
|
||||
[ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return
|
||||
|
||||
|
@ -41,7 +68,7 @@ omr_intf_set() {
|
|||
}
|
||||
|
||||
start_service() {
|
||||
local scaling_min_freq scaling_max_freq
|
||||
local scaling_min_freq scaling_max_freq scaling_governor
|
||||
|
||||
config_load openmptcprouter
|
||||
config_foreach omr_intf_check interface
|
||||
|
@ -72,8 +99,8 @@ start_service() {
|
|||
}
|
||||
}
|
||||
# remove sysctl already defined in /etc/sysctl.d/
|
||||
sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' -e '/tcp_syn_retries/d' -e '/tcp_fastopen/d' -e '/tcp_retries2/d' /etc/sysctl.conf
|
||||
sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' -e '/tcp_syn_retries/d' -e '/tcp_fastopen/d' -e '/tcp_retries2/d' /etc/sysctl.d/10-default.conf
|
||||
sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' -e '/tcp_syn_retries/d' -e '/tcp_fastopen/d' -e '/tcp_retries2/d' -e '/tcp_retries1/d' -e '/ip_default_ttl/d' /etc/sysctl.conf
|
||||
sed -i -e '/tcp_fin_timeout/d' -e '/tcp_keepalive_time/d' -e '/nf_conntrack_max/d' -e '/tcp_syn_retries/d' -e '/tcp_fastopen/d' -e '/tcp_retries2/d' -e '/tcp_retries1/d' -e '/ip_default_ttl/d' /etc/sysctl.d/10-default.conf
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
|
|
|
@ -2,6 +2,8 @@ net.ipv4.tcp_keepalive_time=7200
|
|||
net.ipv6.conf.all.disable_ipv6=0
|
||||
net.ipv4.tcp_fin_timeout=60
|
||||
net.ipv4.tcp_syn_retries=3
|
||||
net.ipv4.tcp_retries2=3
|
||||
net.ipv4.tcp_retries1=3
|
||||
net.ipv4.tcp_retries2=15
|
||||
net.ipv4.tcp_fastopen=3
|
||||
net.ipv4.tcp_low_latency=1
|
||||
net.ipv4.ip_default_ttl=64
|
||||
|
|
|
@ -107,4 +107,7 @@ if [ "$(uci -q get openmptcprouter.settings.scaling_governor)" = "" ]; then
|
|||
commit openmptcprouter
|
||||
EOF
|
||||
fi
|
||||
|
||||
sed -i 's/net.ipv4.tcp_retries2=3$/net.ipv4.tcp_retries2=15/' /etc/sysctl.d/zzz_openmptcprouter.conf
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -706,6 +706,9 @@ function interfaces_status()
|
|||
end
|
||||
end
|
||||
end
|
||||
if mArray.openmptcprouter["service_addr"] ~= "" then
|
||||
mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
|
||||
end
|
||||
end
|
||||
|
||||
if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then
|
||||
|
@ -784,6 +787,17 @@ function interfaces_status()
|
|||
else
|
||||
mArray.openmptcprouter["ss_traffic"] = "0"
|
||||
end
|
||||
if status and vpsinfo.v2ray ~= nil then
|
||||
mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0"
|
||||
mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0"
|
||||
mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"]
|
||||
else
|
||||
mArray.openmptcprouter["v2ray_traffic_rx"] = "0"
|
||||
mArray.openmptcprouter["v2ray_traffic_tx"] = "0"
|
||||
mArray.openmptcprouter["v2ray_traffic"] = "0"
|
||||
end
|
||||
mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"]
|
||||
mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"]
|
||||
else
|
||||
mArray.openmptcprouter["vps_admin"] = false
|
||||
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
|
||||
|
@ -870,22 +884,32 @@ function interfaces_status()
|
|||
end
|
||||
|
||||
-- check Shadowsocks is running
|
||||
mArray.openmptcprouter["socks_service"] = false
|
||||
mArray.openmptcprouter["shadowsocks_service"] = false
|
||||
if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then
|
||||
mArray.openmptcprouter["socks_service"] = true
|
||||
mArray.openmptcprouter["shadowsocks_service"] = true
|
||||
end
|
||||
|
||||
mArray.openmptcprouter["socks_service_enabled"] = true
|
||||
mArray.openmptcprouter["shadowsocks_enabled"] = true
|
||||
local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0"
|
||||
if ss_server == "1" then
|
||||
mArray.openmptcprouter["socks_service_enabled"] = false
|
||||
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
|
||||
mArray.openmptcprouter["v2ray_service"] = true
|
||||
end
|
||||
mArray.openmptcprouter["v2ray_enabled"] = false
|
||||
local v2ray = uci:get("v2ray","main","enabled") or "0"
|
||||
if v2ray == "1" then
|
||||
mArray.openmptcprouter["v2ray_enabled"] = true
|
||||
end
|
||||
local ss_key = uci:get("shadowsocks-libev","sss0","key") or ""
|
||||
mArray.openmptcprouter["socks_service_method"] = uci:get("shadowsocks-libev","sss0","method")
|
||||
mArray.openmptcprouter["shadowsocks_service_method"] = uci:get("shadowsocks-libev","sss0","method")
|
||||
if ss_key == "" then
|
||||
mArray.openmptcprouter["socks_service_key"] = false
|
||||
mArray.openmptcprouter["shadowsocks_service_key"] = false
|
||||
else
|
||||
mArray.openmptcprouter["socks_service_key"] = true
|
||||
mArray.openmptcprouter["shadowsocks_service_key"] = true
|
||||
end
|
||||
|
||||
-- Add DHCP infos by parsing dnsmasq config file
|
||||
|
@ -1174,12 +1198,12 @@ function interfaces_status()
|
|||
if connectivity ~= "ERROR" then
|
||||
if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
|
||||
publicIP = uci:get("openmptcprouter",interface:sub(5),"publicip") or ""
|
||||
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false then
|
||||
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
|
||||
publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5))))
|
||||
end
|
||||
else
|
||||
publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
|
||||
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false then
|
||||
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
|
||||
publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,205 +1,237 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:43
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:43
|
||||
msgid "-- instance type --"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:211
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:218
|
||||
msgid "<hidden>"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:76
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:44
|
||||
msgid "Add a new rule..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:76
|
||||
msgid "Advanced Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:86
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:87
|
||||
msgid "Bind address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:87
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:98
|
||||
msgid "Bypass ss-redir for packets with dst address in this list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:73
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:84
|
||||
msgid "Bypass ss-redir for packets with src address in this list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:79
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:27
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:90
|
||||
msgid ""
|
||||
"Continue to have dst address checked for packets with src address in this "
|
||||
"list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:59
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:70
|
||||
msgid "Default action for locally generated TCP packets"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:103
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:114
|
||||
msgid ""
|
||||
"Default action for packets whose dst address do not match any of the dst ip "
|
||||
"list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:82
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:93
|
||||
msgid ""
|
||||
"Default action for packets whose src address do not match any of the src ip/"
|
||||
"net list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:14
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:14
|
||||
msgid ""
|
||||
"Definition of remote shadowsocks servers. Disable any of them will also "
|
||||
"disable instances referring to it."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:43
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:52
|
||||
msgid "Destination Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:77
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:45
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:20
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:78
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:56
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:64
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:128
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:129
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:129
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:102
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:113
|
||||
msgid "Dst default"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:86
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:97
|
||||
msgid "Dst ip/net bypass"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:94
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:105
|
||||
msgid "Dst ip/net bypass file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:89
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:100
|
||||
msgid "Dst ip/net forward"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:98
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:109
|
||||
msgid "Dst ip/net forward file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:181
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:188
|
||||
msgid "Enable MPTCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:187
|
||||
msgid "Enable SO_REUSEPORT"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:179
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:185
|
||||
msgid "Enable TCP Fast Open"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:180
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:186
|
||||
msgid "Enable TCP_NODELAY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:121
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:122
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:122
|
||||
msgid "Enable/Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:131
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:132
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:132
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:68
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:79
|
||||
msgid "Extra arguments"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:95
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:106
|
||||
msgid ""
|
||||
"File containing ip/net for the purposes as with <em>Dst ip/net bypass</em>"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:99
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:110
|
||||
msgid ""
|
||||
"File containing ip/net for the purposes as with <em>Dst ip/net forward</em>"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:118
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:118
|
||||
msgid "Forward recentrst"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:119
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:119
|
||||
msgid ""
|
||||
"Forward those packets whose dst have recently sent to us multiple tcp-rst"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:90
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:101
|
||||
msgid "Forward through ss-redir for packets with dst address in this list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:76
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:87
|
||||
msgid "Forward through ss-redir for packets with src address in this list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:75
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:41
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:75
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:50
|
||||
msgid "General Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
|
||||
#: luci-app-shadowsocks-libev/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-libev.json:3
|
||||
msgid "Grant service list access to LuCI app shadowsocks-libev"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:184
|
||||
msgid "IPv6 First"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:62
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:50
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:21
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:58
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:60
|
||||
msgid "Import Links"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:73
|
||||
msgid "Ingress interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:235
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:242
|
||||
msgid "Install package"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:111
|
||||
msgid "Install package iptables-mod-conntrack-extra"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:25
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:25
|
||||
msgid ""
|
||||
"Instances of shadowsocks-libev components, e.g. ss-local, ss-redir, ss-"
|
||||
"tunnel, ss-server, etc. To enable an instance it is required to enable both "
|
||||
"the instance itself and the remote server it refers to."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:155
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:161
|
||||
msgid "Key (base64)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:24
|
||||
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:13
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:142
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:77
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:57
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:24
|
||||
#: luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:13
|
||||
#: luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json:14
|
||||
msgid "Local Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:113
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:117
|
||||
msgid "Local address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:117
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:121
|
||||
msgid "Local port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:58
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:69
|
||||
msgid "Local-out default"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:171
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:177
|
||||
msgid "MTU"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:146
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:152
|
||||
msgid "Method"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:166
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:172
|
||||
msgid "Mode of operation"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:31
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:33
|
||||
msgid ""
|
||||
"On this page you can configure how traffics are to be forwarded to ss-redir "
|
||||
"instances. If enabled, packets will first have their src ip addresses "
|
||||
|
@ -209,116 +241,119 @@ msgid ""
|
|||
"<em>checkdst</em>, packets will continue to have their dst addresses checked."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:63
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:74
|
||||
msgid "Only apply rules on packets from these network interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:104
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:105
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:234
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:241
|
||||
msgid "Package is not installed"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:69
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:80
|
||||
msgid "Passes additional arguments to iptables. Use with care!"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:151
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:157
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:161
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:167
|
||||
msgid "Plugin"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:163
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:169
|
||||
msgid "Plugin Options"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:184
|
||||
msgid "Prefer IPv6 addresses when resolving names"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:30
|
||||
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:21
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:32
|
||||
#: luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:21
|
||||
#: luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json:32
|
||||
msgid "Redir Rules"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:13
|
||||
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:17
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js:13
|
||||
#: luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:17
|
||||
#: luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json:23
|
||||
msgid "Remote Servers"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:111
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:115
|
||||
msgid "Remote server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:175
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:181
|
||||
msgid "Run as"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:116
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:117
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:138
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:144
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:142
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:148
|
||||
msgid "Server port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:9
|
||||
#: luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:9
|
||||
#: luci-app-shadowsocks-libev/root/usr/share/luci/menu.d/luci-app-shadowsocks-libev.json:3
|
||||
msgid "Shadowsocks-libev"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:42
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:51
|
||||
msgid "Source Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:81
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:92
|
||||
msgid "Src default"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:72
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:83
|
||||
msgid "Src ip/net bypass"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:78
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:89
|
||||
msgid "Src ip/net checkdst"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:75
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:86
|
||||
msgid "Src ip/net forward"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:87
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:88
|
||||
msgid "The address ss-server will initiate connection from"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:96
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:97
|
||||
msgid "The address ss-tunnel will forward traffic to"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:173
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:179
|
||||
msgid "Timeout (sec)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:95
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:96
|
||||
msgid "Tunnel address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:177
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:183
|
||||
msgid "Verbose"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:51
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:62
|
||||
msgid "ss-redir for TCP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:54
|
||||
#: luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:65
|
||||
msgid "ss-redir for UDP"
|
||||
msgstr ""
|
||||
|
|
38
luci-app-shutdown/po/it/shutdown.po
Normal file
38
luci-app-shutdown/po/it/shutdown.po
Normal file
|
@ -0,0 +1,38 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-15 11:36+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsshutdown/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"
|
||||
|
||||
#: luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json:3
|
||||
msgid "Allow shutdown the device"
|
||||
msgstr "Consenti l'arresto del dispositivo"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:23
|
||||
msgid "Perform shutdown"
|
||||
msgstr "Eseguire l'arresto"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:9
|
||||
#: luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json:3
|
||||
msgid "Shutdown"
|
||||
msgstr "Spegnimento"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:10
|
||||
msgid "Shutdown the operating system of your device"
|
||||
msgstr "Arresta il sistema operativo del tuo dispositivo"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:31
|
||||
msgid "The poweroff command failed with code %d"
|
||||
msgstr "Il comando di spegnimento non è riuscito con il codice %d"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:15
|
||||
msgid "Warning: There are unsaved changes that will get lost on shutdown!"
|
||||
msgstr ""
|
||||
"Avvertenza: sono presenti modifiche non salvate che andranno perse "
|
||||
"all'arresto!"
|
37
luci-app-shutdown/po/oc/shutdown.po
Normal file
37
luci-app-shutdown/po/oc/shutdown.po
Normal file
|
@ -0,0 +1,37 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsshutdown/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-shutdown/root/usr/share/rpcd/acl.d/luci-app-shutdown.json:3
|
||||
msgid "Allow shutdown the device"
|
||||
msgstr "Permetre d'atudat lo periferic"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:23
|
||||
msgid "Perform shutdown"
|
||||
msgstr "Lançar l'extinccion"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:9
|
||||
#: luci-app-shutdown/root/usr/share/luci/menu.d/luci-app-shutdown.json:3
|
||||
msgid "Shutdown"
|
||||
msgstr "Atudar"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:10
|
||||
msgid "Shutdown the operating system of your device"
|
||||
msgstr "Atudar lo sistèma operatiu del periferic"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:31
|
||||
msgid "The poweroff command failed with code %d"
|
||||
msgstr "La comanda poweroff a pas capitat amb lo còdi %d"
|
||||
|
||||
#: luci-app-shutdown/htdocs/luci-static/resources/view/system/shutdown.js:15
|
||||
msgid "Warning: There are unsaved changes that will get lost on shutdown!"
|
||||
msgstr ""
|
||||
"Avís : i a de modificacions pas enregistradas que seràn perdudas en atudant !"
|
|
@ -6,7 +6,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI SNMPD Interface
|
||||
LUCI_DEPENDS:=+snmpd
|
||||
LUCI_DEPENDS:=+snmpd +snmptrapd +snmp-utils +snmp-mibs
|
||||
|
||||
PKG_LICENSE:=GPLv3
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -17,7 +17,7 @@ msgstr "Zugriff"
|
|||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "hinzufügen"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
|
@ -47,7 +47,7 @@ msgstr "FQDN, IP-Adresse oder CIDR-Netzmaske"
|
|||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "aktiv"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
|
@ -76,7 +76,7 @@ msgstr "Gruppen ermöglichen es, Zugriffsmethoden festzulegen"
|
|||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Anschluss"
|
||||
msgstr "Schnittstelle"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
|
|
184
luci-app-snmpd/po/it/snmpd.po
Normal file
184
luci-app-snmpd/po/it/snmpd.po
Normal file
|
@ -0,0 +1,184 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-21 12:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/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"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Accesso"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "Tutti"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Parametri"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Community"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Contatto"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Contesto"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "Dominio, IP o rete"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "Concedi l'accesso UCI per luci-app-snmpd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Gruppo"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "I gruppi aiutano a definire i metodi di accesso"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Livello"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Sede"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Reti"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Notificare"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Interfaccia di output"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programma"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protocollo"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Leggi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Sola lettura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Leggi-Scrivi"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "Interfaccia delle impostazioni SNMPd (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Scrittura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "qualsiasi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "versione"
|
184
luci-app-snmpd/po/oc/snmpd.po
Normal file
184
luci-app-snmpd/po/oc/snmpd.po
Normal file
|
@ -0,0 +1,184 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-31 17:15+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Ajustar"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "Tot"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Arguments"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Comunautat"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Contacte"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Contèxt"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "Domeni, IP o ret"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr "Exec"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "Acordar l'accès UCI a luci-app-snmpd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Grop"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "Los grops ajudan a gerir los metòdes d'accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Interfàcia"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Nivèl"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Emplaçament"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Rets"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Notificar"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr "ObjectID"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Interfàcia de sortida"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programa"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protocòls"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Lectura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Lectura sola"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Lectura-escritura"
|
||||
|
||||
#: 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 "SNMPd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "Interfàcia de paramètres SNMPd (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr "Font"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "Sistèma"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Escritura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "Quin que siá"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr "auth"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr "seguretat com2sec"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr "noauth"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr "secname"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "version"
|
|
@ -344,5 +344,6 @@ service_triggers(){
|
|||
}
|
||||
|
||||
service_started() {
|
||||
[ "$snmp_enabled" -eq 0 ] && return
|
||||
procd_set_config_changed firewall
|
||||
}
|
||||
|
|
7620
luci-base/po/oc/base.po
Normal file
7620
luci-base/po/oc/base.po
Normal file
File diff suppressed because it is too large
Load diff
7611
luci-base/po/templates/base.pot
Normal file
7611
luci-base/po/templates/base.pot
Normal file
File diff suppressed because it is too large
Load diff
18
luci-mod-dashboard/Makefile
Normal file
18
luci-mod-dashboard/Makefile
Normal file
|
@ -0,0 +1,18 @@
|
|||
#
|
||||
# Copyright 2019-2020 ZHANG Zhao <Zhao.Zhang2@etu.univ-grenoble-alpes.fr>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Dashboard Pages
|
||||
LUCI_DEPENDS:=+luci-base +libiwinfo
|
||||
|
||||
PKG_BUILD_DEPENDS:=iwinfo
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
|
@ -0,0 +1,301 @@
|
|||
/**
|
||||
* Dashboard Principals Styles
|
||||
**/
|
||||
|
||||
.Dashboard {
|
||||
color: #212529!important;
|
||||
}
|
||||
|
||||
.Dashboard h3 {
|
||||
color:#000;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.Dashboard hr {
|
||||
border: 0;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
margin: 0;
|
||||
box-sizing: content-box;
|
||||
border-top: 1px solid rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
.Dashboard .box-s1 {
|
||||
min-height: 550px;
|
||||
}
|
||||
|
||||
.Dashboard .internet-status-self .internet-status-info .title {
|
||||
height: 97px;
|
||||
}
|
||||
|
||||
.Dashboard .dashboard-bg {
|
||||
border-radius: 16px;
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
|
||||
.Dashboard div > table > tbody > tr:nth-of-type(2n), div > .table > .tr:nth-of-type(2n) {
|
||||
background-color: transparent;
|
||||
}
|
||||
.Dashboard .tr {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.Dashboard .title {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.Dashboard .section-content {
|
||||
display: flex;
|
||||
vertical-align: top;
|
||||
padding: 20px 0 0 0;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.Dashboard .section-content > div {
|
||||
width:100%;
|
||||
padding:1.5em;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .settings-info {
|
||||
padding-top:1em;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .internet-status-info .settings-info {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .internet-status-info .settings-info > div > p > i{
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
|
||||
.Dashboard .section-content > div:nth-child(2) {
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
.Dashboard .devices-list .devices-info {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.Dashboard .devices-list .devices-info .tr .td{
|
||||
padding:0px 0 0 10px;
|
||||
}
|
||||
|
||||
.Dashboard .devices-list .devices-info .tr .td:first-child {
|
||||
width: 33%;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.Dashboard .devices-list hr:nth-child(4) {
|
||||
margin-top: 0;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-lan .devices-list .table-titles .th:first-child {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-self .router-status-info .settings-info {
|
||||
padding-left:27px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-self .router-status-info .title h3 {
|
||||
margin-top:-2px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-info svg {
|
||||
width: 70px;
|
||||
}
|
||||
|
||||
.Dashboard .internet-status-self .settings-info p:first-child span:first-child{
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
//.Dashboard .internet-status-self .settings-info p:first-child span:first-child,
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info p:first-child span:first-child,
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info p:nth-child(2) span:first-child{
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.Dashboard .settings-info p span:first-child {
|
||||
width: 35%;
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.Dashboard .settings-info p span:nth-child(2){
|
||||
display: inline-block;
|
||||
word-break: break-all;
|
||||
max-width: 150px;
|
||||
overflow: hidden;
|
||||
max-height: 16px;
|
||||
position: relative;
|
||||
top:2px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-info .settings-info p span:nth-child(2){
|
||||
max-width: 283px;
|
||||
}
|
||||
|
||||
.Dashboard .settings-info p span.ssid {
|
||||
max-height: 18px;
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.Dashboard .settings-info p span.encryption {
|
||||
max-width: 82px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info,
|
||||
.Dashboard .router-status-lan .lan-info .settings-info
|
||||
{
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td {
|
||||
padding: 0 10px 0 10px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:first-child {
|
||||
width: 30%;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(2) {
|
||||
width: 21%;
|
||||
overflow: hidden;
|
||||
padding-left:0;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info{
|
||||
padding:1em 0 1em 0;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(3) {
|
||||
width: 22%;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: -3px;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(5) {
|
||||
width: initial;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info > hr:last-child {
|
||||
margin-bottom:0;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .devices-info .device-info .progress {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.Dashboard .wifi-info .devices-info .table-titles {
|
||||
border-bottom:1px solid rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
.Dashboard .label-success {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
.Dashboard .label-danger {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsive
|
||||
**/
|
||||
@media screen and (min-width: 200px) and (max-width: 640px) {
|
||||
|
||||
.Dashboard .cbi-section-1 > .section-content {
|
||||
padding-top:10px;
|
||||
}
|
||||
|
||||
.Dashboard .section-content {
|
||||
display:block;
|
||||
}
|
||||
|
||||
.Dashboard .section-content > div{
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.Dashboard .section-content > div:first-child {
|
||||
margin-bottom:10px;
|
||||
}
|
||||
|
||||
.Dashboard .section-content > div:nth-child(2) {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-self .router-status-info .settings-info {
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .internet-status-info .settings-info {
|
||||
display:block;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .internet-status-info .settings-info > div:first-child {
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
.Dashboard .section-content .router-status-lan .devices-info .table-titles {
|
||||
display:block;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info > div{
|
||||
flex:1;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .router-status-lan .devices-info .table-titles .th:last-child{
|
||||
padding-left: 70px;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .router-status-lan .devices-info .td:first-child{
|
||||
flex: 2 2 31%;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .router-status-lan .devices-info .td:nth-child(2){
|
||||
flex: 1 1 24%;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.Dashboard .section-content .router-status-lan .devices-info .td:last-child{
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
.Dashboard .router-status-wifi .wifi-info .settings-info > div p:nth-child(6) > span:last-child{
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
height: 14px;
|
||||
width: 52%;
|
||||
word-break: break-word;
|
||||
line-height: 15px;
|
||||
}
|
||||
|
||||
.Dashboard .wifi-info .devices-info .table-titles {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
border-radius: initial;
|
||||
}
|
||||
|
||||
.Dashboard .wifi-info .devices-info .table-titles .th {
|
||||
flex: 2 2 24%;
|
||||
}
|
||||
|
||||
.Dashboard .wifi-info .devices-info .tr .td {
|
||||
flex: 2 2 10%;
|
||||
}
|
||||
|
||||
.Dashboard .wifi-info hr:nth-child(4) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><g stroke="#000" fill="none"><defs><symbol id="0"><path d="M6 11l0 -2 -4 0c-1,0 -1,-1 -1,-1l0 -6c0,-1 1,-1 1,-1l10 0c1,0 1,1 1,1l0 6c0,1 -1,1 -1,1l-4 0 0 2m-2 -2l2 0m-5 2l8 0"/></symbol></defs><use xlink:href="#0" x="9" y="2"/><use xlink:href="#0" x="0" y="18"/><use xlink:href="#0" x="18" y="18"/><path d="M16 14l0 3m-8 1l0 -1 16 0 0 1"/></g></svg>
|
After Width: | Height: | Size: 452 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g stroke="#5b5" fill="none"><circle cx="16" cy="16" r="15"/><ellipse cx="16" cy="16" rx="8" ry="15"/><path d="M4 25c6,-3 18,-3 24,0m-27 -9l30 0m-27 -9c6,3 18,3 24,0m-12 -6l0 30"/></g></svg>
|
After Width: | Height: | Size: 250 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g stroke="#000" fill="none"><circle cx="16" cy="16" r="15"/><ellipse cx="16" cy="16" rx="8" ry="15"/><path d="M4 25c6,-3 18,-3 24,0m-27 -9l30 0m-27 -9c6,3 18,3 24,0m-12 -6l0 30"/></g></svg>
|
After Width: | Height: | Size: 250 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path stroke="#000" fill="none" d="M6 22l-4 0c-1,0 -1,1 -1,1l0 4c0,1 1,1 1,1l28 0c1,0 1,-1 1,-1l0 -4c0,-1 -1,-1 -1,-1l-24 0 -2 -18c-0.2,-2 -2.2,-2 -2,0l2 18m22 0l2 -18c0.2,-2 2.2,-2 2,0l-2 18m-2 4l2 0m-5 0l2 0m-12 0l2 0m-5 0l2 0m-5 0l2 0m-5 0l2 0"/></svg>
|
After Width: | Height: | Size: 315 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path stroke="#000" fill="none" d="M4 15l-3 -3c8.4,-8.3 21.6,-8.3 30,0l-3 3c-6.6,-6.6 -17.4,-6.6 -24,0zm6 6l-3 -3c5,-5 13,-5 18,0l-3 3c-3.3,-3.3 -8.7,-3.3 -12,0zm6 6l-3 -3c1.6,-1.7 4.4,-1.7 6,0l-3 3z"/></svg>
|
After Width: | Height: | Size: 268 B |
|
@ -0,0 +1,381 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require fs';
|
||||
'require rpc';
|
||||
'require network';
|
||||
|
||||
var callSystemBoard = rpc.declare({
|
||||
object: 'system',
|
||||
method: 'board'
|
||||
});
|
||||
|
||||
var callSystemInfo = rpc.declare({
|
||||
object: 'system',
|
||||
method: 'info'
|
||||
});
|
||||
|
||||
var callOpenMPTCProuterInfo = rpc.declare({
|
||||
object: 'openmptcprouter',
|
||||
method: 'status'
|
||||
});
|
||||
|
||||
|
||||
return baseclass.extend({
|
||||
|
||||
params: [],
|
||||
|
||||
formatBytes: function(a,b=2){if(0===a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return parseFloat((a/Math.pow(1024,d)).toFixed(c))+" "+["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]},
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
network.getWANNetworks(),
|
||||
network.getWAN6Networks(),
|
||||
L.resolveDefault(callSystemBoard(), {}),
|
||||
L.resolveDefault(callSystemInfo(), {}),
|
||||
L.resolveDefault(callOpenMPTCProuterInfo(), {})
|
||||
]);
|
||||
},
|
||||
|
||||
renderHtml: function(data, type) {
|
||||
|
||||
var icon = type;
|
||||
var title = 'router' == type ? _('System') : _('Internet');
|
||||
var container_wapper = E('div', { 'class': type + '-status-self dashboard-bg box-s1'});
|
||||
var container_box = E('div', { 'class': type + '-status-info'});
|
||||
var container_item = E('div', { 'class': 'settings-info'});
|
||||
|
||||
if ('internet' == type) {
|
||||
icon = (data.internet.v4.connected.value || data.internet.v6.connected.value) ? type : 'not-internet';
|
||||
}
|
||||
|
||||
container_box.appendChild(E('div', { 'class': 'title'}, [
|
||||
E('img', {
|
||||
'src': L.resource('view/dashboard/icons/' + icon + '.svg'),
|
||||
'width': 'router' == type ? 64 : 54,
|
||||
'title': title,
|
||||
'class': 'middle'
|
||||
}),
|
||||
E('h3', title)
|
||||
]));
|
||||
|
||||
container_box.appendChild(E('hr'));
|
||||
|
||||
if ('internet' == type) {
|
||||
|
||||
var container_internet_v4 = E('div');
|
||||
var container_internet_v6 = E('div');
|
||||
var container_internet_vps = E('div');
|
||||
|
||||
for(var idx in data['vps']) {
|
||||
var classname = ver,
|
||||
suppelements = '',
|
||||
visible = data['vps'][idx].visible;
|
||||
if ('title' === idx) {
|
||||
container_internet_vps.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('h4', {'class': ''}, [ data['vps'].title ]),
|
||||
])
|
||||
);
|
||||
continue;
|
||||
}
|
||||
if (visible) {
|
||||
container_internet_vps.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('span', {'class': ''}, [ data['vps'][idx].title + ':' ]),
|
||||
E('span', {'class': ''}, [ data['vps'][idx].value ]),
|
||||
suppelements
|
||||
])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(var idx in data['internet']) {
|
||||
|
||||
for(var ver in data['internet'][idx]) {
|
||||
var classname = ver,
|
||||
suppelements = '',
|
||||
visible = data['internet'][idx][ver].visible;
|
||||
|
||||
if('connected' === ver) {
|
||||
classname = data['internet'][idx][ver].value ? 'label label-success' : 'label label-danger';
|
||||
data['internet'][idx][ver].value = data['internet'][idx][ver].value ? _('yes') : _('no');
|
||||
}
|
||||
|
||||
if ('v4' === idx) {
|
||||
|
||||
if ('title' === ver) {
|
||||
container_internet_v4.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('h4', {'class': ''}, [ data['internet'][idx].title ]),
|
||||
])
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('addrsv4' === ver) {
|
||||
var addrs = data['internet'][idx][ver].value;
|
||||
if(Array.isArray(addrs) && addrs.length) {
|
||||
for(var ip in addrs) {
|
||||
data['internet'][idx][ver].value = addrs[ip].split('/')[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
container_internet_v4.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('span', {'class': ''}, [ data['internet'][idx][ver].title + ':' ]),
|
||||
E('span', {'class': classname }, [ data['internet'][idx][ver].value ]),
|
||||
suppelements
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ('title' === ver) {
|
||||
container_internet_v6.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('h4', {'class': ''}, [ data['internet'][idx].title ]),
|
||||
])
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
container_internet_v6.appendChild(
|
||||
E('p', {'class': 'mt-2'}, [
|
||||
E('span', {'class': ''}, [data['internet'][idx][ver].title + ':']),
|
||||
E('span', {'class': classname}, [data['internet'][idx][ver].value]),
|
||||
suppelements
|
||||
])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
container_item.appendChild(E('p', { 'class': 'table'}, [
|
||||
E('div', { 'class': 'tr' }, [
|
||||
E('div', { 'class': 'td' }, [ container_internet_vps ])
|
||||
]),
|
||||
E('div', { 'class': 'tr' }, [
|
||||
E('div', { 'class': 'td' }, [
|
||||
container_internet_v4
|
||||
]),
|
||||
E('div', { 'class': 'td' }, [
|
||||
container_internet_v6
|
||||
])
|
||||
])
|
||||
]));
|
||||
} else {
|
||||
for(var idx in data) {
|
||||
container_item.appendChild(
|
||||
E('p', { 'class': 'mt-2'}, [
|
||||
E('span', {'class': ''}, [ data[idx].title + ':' ]),
|
||||
E('span', {'class': ''}, [ data[idx].value ])
|
||||
])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
container_box.appendChild(container_item);
|
||||
container_box.appendChild(E('hr'));
|
||||
container_wapper.appendChild(container_box);
|
||||
return container_wapper;
|
||||
},
|
||||
|
||||
renderUpdateWanData: function(data, v6) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var ifc = data[i];
|
||||
|
||||
if (v6) {
|
||||
this.params.internet.v6.ipprefixv6.value = ifc.getIP6Prefix() || '-';
|
||||
this.params.internet.v6.gatewayv6.value = ifc.getGateway6Addr() || '-';
|
||||
this.params.internet.v6.protocol.value= ifc.getI18n() || E('em', _('Not connected'));
|
||||
this.params.internet.v6.addrsv6.value = ifc.getIP6Addrs() || [ '-' ];
|
||||
this.params.internet.v6.dnsv6.value = ifc.getDNS6Addrs() || [ '-' ];
|
||||
this.params.internet.v6.connected.value = ifc.isUp();
|
||||
} else {
|
||||
var uptime = ifc.getUptime();
|
||||
this.params.internet.v4.uptime.value = (uptime > 0) ? '%t'.format(uptime) : '-';
|
||||
this.params.internet.v4.protocol.value= ifc.getI18n() || E('em', _('Not connected'));
|
||||
this.params.internet.v4.gatewayv4.value = ifc.getGatewayAddr() || '0.0.0.0';
|
||||
this.params.internet.v4.connected.value = ifc.isUp();
|
||||
this.params.internet.v4.addrsv4.value = ifc.getIPAddrs() || [ '-'];
|
||||
this.params.internet.v4.dnsv4.value = ifc.getDNSAddrs() || [ '-' ];
|
||||
}
|
||||
}
|
||||
},
|
||||
renderUpdateOpenMPTCProuterData: function(data, v6) {
|
||||
if (data.openmptcprouter != undefined) {
|
||||
if (data.openmptcprouter.wan_addr != '') this.params.omrvps.internet.v4.connected.value = true;
|
||||
if (data.openmptcprouter.wan_addr) this.params.omrvps.internet.v4.addrsv4.value = data.openmptcprouter.wan_addr || [ '-'];
|
||||
if (data.openmptcprouter.wan_addr6) this.params.omrvps.internet.v6.addrsv6.value = data.openmptcprouter.wan_addr6 || [ '-'];
|
||||
if (data.openmptcprouter.vps_kernel) this.params.omrvps.vps.version.value = data.openmptcprouter.vps_kernel + ' ' + data.openmptcprouter.vps_omr_version || [ '-'];
|
||||
if (data.openmptcprouter.vps_loadavg) this.params.omrvps.vps.load.value = data.openmptcprouter.vps_loadavg || [ '-'];
|
||||
if (data.openmptcprouter.vps_uptime) this.params.omrvps.vps.uptime.value = String.format('%t', data.openmptcprouter.vps_uptime) || [ '-'];
|
||||
if (data.openmptcprouter.proxy_traffic) this.params.omrvps.vps.trafficproxy.value = this.formatBytes(data.openmptcprouter.proxy_traffic) || [ '-'];
|
||||
if (data.openmptcprouter.vpn_traffic) this.params.omrvps.vps.trafficvpn.value = this.formatBytes(data.openmptcprouter.vpn_traffic) || [ '-'];
|
||||
if (data.openmptcprouter.total_traffic) this.params.omrvps.vps.traffictotal.value = this.formatBytes(data.openmptcprouter.total_traffic) || [ '-'];
|
||||
if (data.openmptcprouter.ipv6 != 'disabled') this.params.omrvps.internet.v6.connected.value = true;
|
||||
}
|
||||
},
|
||||
|
||||
renderInternetBox: function(data) {
|
||||
|
||||
this.params.omrvps = {
|
||||
vps: {
|
||||
title: _('Server'),
|
||||
|
||||
version: {
|
||||
title: _('Version'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
},
|
||||
|
||||
load: {
|
||||
title: _('Load'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
},
|
||||
|
||||
uptime: {
|
||||
title: _('Uptime'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
},
|
||||
|
||||
trafficproxy: {
|
||||
title: _('Proxy traffic'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
},
|
||||
|
||||
trafficvpn: {
|
||||
title: _('VPN traffic'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
},
|
||||
|
||||
traffictotal: {
|
||||
title: _('Total traffic'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
}
|
||||
},
|
||||
|
||||
internet: {
|
||||
|
||||
v4: {
|
||||
title: _('IPv4 Internet'),
|
||||
|
||||
connected: {
|
||||
title: _('Connected'),
|
||||
visible: true,
|
||||
value: false
|
||||
},
|
||||
|
||||
addrsv4: {
|
||||
title: _('IPv4'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
}
|
||||
},
|
||||
|
||||
v6: {
|
||||
title: _('IPv6 Internet'),
|
||||
|
||||
connected: {
|
||||
title: _('Connected'),
|
||||
visible: true,
|
||||
value: false
|
||||
},
|
||||
|
||||
ipprefixv6 : {
|
||||
title: _('IPv6 prefix'),
|
||||
visible: false,
|
||||
value: ' - '
|
||||
},
|
||||
|
||||
addrsv6: {
|
||||
title: _('IPv6'),
|
||||
visible: true,
|
||||
value: [ '-' ]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//this.renderUpdateWanData(data[0], false);
|
||||
//this.renderUpdateWanData(data[1], true);
|
||||
this.renderUpdateOpenMPTCProuterData(data[4], true);
|
||||
|
||||
return this.renderHtml(this.params.omrvps, 'internet');
|
||||
},
|
||||
|
||||
renderRouterBox: function(data) {
|
||||
|
||||
var boardinfo = data[2],
|
||||
systeminfo = data[3];
|
||||
|
||||
var datestr = null;
|
||||
|
||||
if (systeminfo.localtime) {
|
||||
var date = new Date(systeminfo.localtime * 1000);
|
||||
|
||||
datestr = '%04d-%02d-%02d %02d:%02d:%02d'.format(
|
||||
date.getUTCFullYear(),
|
||||
date.getUTCMonth() + 1,
|
||||
date.getUTCDate(),
|
||||
date.getUTCHours(),
|
||||
date.getUTCMinutes(),
|
||||
date.getUTCSeconds()
|
||||
);
|
||||
}
|
||||
|
||||
this.params.router = {
|
||||
uptime: {
|
||||
title: _('Uptime'),
|
||||
value: systeminfo.uptime ? '%t'.format(systeminfo.uptime) : null,
|
||||
},
|
||||
|
||||
localtime: {
|
||||
title: _('Local Time'),
|
||||
value: datestr
|
||||
},
|
||||
|
||||
load: {
|
||||
title: _('Load Average'),
|
||||
value: Array.isArray(systeminfo.load) ? '%.2f, %.2f, %.2f'.format(systeminfo.load[0] / 65535.0,systeminfo.load[1] / 65535.0,systeminfo.load[2] / 65535.0) : null
|
||||
},
|
||||
|
||||
kernel: {
|
||||
title: _('Kernel Version'),
|
||||
value: boardinfo.kernel
|
||||
},
|
||||
|
||||
model: {
|
||||
title: _('Model'),
|
||||
value: boardinfo.model
|
||||
},
|
||||
|
||||
system: {
|
||||
title: _('Architecture'),
|
||||
value: boardinfo.system
|
||||
},
|
||||
|
||||
release: {
|
||||
title: _('Firmware Version'),
|
||||
value: boardinfo.release.description
|
||||
}
|
||||
};
|
||||
|
||||
return this.renderHtml(this.params.router, 'router');
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
return [this.renderInternetBox(data), this.renderRouterBox(data)];
|
||||
}
|
||||
});
|
|
@ -0,0 +1,152 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require rpc';
|
||||
'require network';
|
||||
|
||||
var callLuciDHCPLeases = rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getDHCPLeases',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
return baseclass.extend({
|
||||
title: _('DHCP Devices'),
|
||||
|
||||
params: {},
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
callLuciDHCPLeases(),
|
||||
network.getDevices()
|
||||
]);
|
||||
},
|
||||
|
||||
renderHtml: function() {
|
||||
|
||||
var container_wapper = E('div', { 'class': 'router-status-lan dashboard-bg box-s1' });
|
||||
var container_box = E('div', { 'class': 'lan-info devices-list' });
|
||||
var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [
|
||||
E('div', { 'class': 'tr table-titles dashboard-bg' }, [
|
||||
E('div', { 'class': 'th nowrap' }, _('Hostname')),
|
||||
E('div', { 'class': 'th' }, _('IP Address')),
|
||||
E('div', { 'class': 'th' }, _('MAC')),
|
||||
])
|
||||
]);
|
||||
|
||||
var container_deviceslist = E('div', { 'class': 'table assoclist devices-info' });
|
||||
|
||||
container_box.appendChild(E('div', { 'class': 'title'}, [
|
||||
E('img', {
|
||||
'src': L.resource('view/dashboard/icons/devices.svg'),
|
||||
'width': 55,
|
||||
'title': this.title,
|
||||
'class': 'middle'
|
||||
}),
|
||||
E('h3', this.title)
|
||||
]));
|
||||
|
||||
for(var idx in this.params.lan.devices) {
|
||||
var deivce = this.params.lan.devices[idx];
|
||||
|
||||
container_deviceslist.appendChild(E('div', { 'class': 'tr cbi-rowstyle-1'}, [
|
||||
|
||||
E('div', { 'class': 'td device-info'}, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': 'd-inline-block'}, [ deivce.hostname ]),
|
||||
]),
|
||||
]),
|
||||
|
||||
E('div', { 'class': 'td device-info'}, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': 'd-inline-block'}, [ deivce.ipv4 ]),
|
||||
]),
|
||||
]),
|
||||
|
||||
E('div', { 'class': 'td device-info'}, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': 'd-inline-block'}, [ deivce.macaddr ]),
|
||||
]),
|
||||
])
|
||||
]));
|
||||
}
|
||||
|
||||
if (this.params.lan.devices.length > 0) {
|
||||
container_box.appendChild(E('hr'));
|
||||
container_box.appendChild(container_devices);
|
||||
container_box.appendChild(E('hr'));
|
||||
container_box.appendChild(container_deviceslist);
|
||||
container_wapper.appendChild(container_box);
|
||||
}
|
||||
|
||||
return container_wapper;
|
||||
},
|
||||
|
||||
renderUpdateData: function(data, leases) {
|
||||
|
||||
for(var item in data) {
|
||||
if (/lan|br-lan/ig.test(data[item].ifname) && (typeof data[item].dev == 'object' && !data[item].dev.wireless)) {
|
||||
var lan_device = data[item];
|
||||
var ipv4addr = lan_device.dev.ipaddrs.toString().split('/');
|
||||
|
||||
this.params.lan.ipv4 = ipv4addr[0] || '?';
|
||||
this.params.lan.ipv6 = ipv4addr[0] || '?';
|
||||
this.params.lan.macaddr = lan_device.dev.macaddr || '00:00:00:00:00:00';
|
||||
this.params.lan.rx_bytes = lan_device.dev.stats.rx_bytes ? '%.2mB'.format(lan_device.dev.stats.rx_bytes) : '-';
|
||||
this.params.lan.tx_bytes = lan_device.dev.stats.tx_bytes ? '%.2mB'.format(lan_device.dev.stats.tx_bytes) : '-';
|
||||
}
|
||||
}
|
||||
|
||||
var devices = [];
|
||||
leases.map(function(lease) {
|
||||
devices[lease.expires] = {
|
||||
hostname: lease.hostname || '?',
|
||||
ipv4: lease.ipaddr || '-',
|
||||
macaddr: lease.macaddr || '00:00:00:00:00:00',
|
||||
};
|
||||
});
|
||||
this.params.lan.devices = devices;
|
||||
},
|
||||
|
||||
renderLeases: function(data) {
|
||||
|
||||
var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : [];
|
||||
|
||||
this.params.lan = {
|
||||
ipv4: {
|
||||
title: _('IPv4'),
|
||||
value: '?'
|
||||
},
|
||||
|
||||
macaddr: {
|
||||
title: _('Mac'),
|
||||
value: '00:00:00:00:00:00'
|
||||
},
|
||||
|
||||
rx_bytes: {
|
||||
title: _('Upload'),
|
||||
value: '-'
|
||||
},
|
||||
|
||||
tx_bytes: {
|
||||
title: _('Download'),
|
||||
value: '-'
|
||||
},
|
||||
|
||||
devices: {
|
||||
title: _('Devices'),
|
||||
value: []
|
||||
}
|
||||
};
|
||||
|
||||
this.renderUpdateData(data[1], leases);
|
||||
|
||||
return this.renderHtml();
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd'))
|
||||
return this.renderLeases(data);
|
||||
|
||||
return E([]);
|
||||
}
|
||||
});
|
|
@ -0,0 +1,269 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require dom';
|
||||
'require network';
|
||||
'require rpc';
|
||||
|
||||
return baseclass.extend({
|
||||
|
||||
title: _('Wireless'),
|
||||
|
||||
params: [],
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
network.getWifiDevices(),
|
||||
network.getWifiNetworks(),
|
||||
network.getHostHints()
|
||||
]).then(function(radios_networks_hints) {
|
||||
var tasks = [];
|
||||
|
||||
for (var i = 0; i < radios_networks_hints[1].length; i++)
|
||||
tasks.push(L.resolveDefault(radios_networks_hints[1][i].getAssocList(), []).then(L.bind(function(net, list) {
|
||||
net.assoclist = list.sort(function(a, b) { return a.mac > b.mac });
|
||||
}, this, radios_networks_hints[1][i])));
|
||||
|
||||
return Promise.all(tasks).then(function() {
|
||||
return radios_networks_hints;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
renderHtml: function() {
|
||||
|
||||
var container_wapper = E('div', { 'class': 'router-status-wifi dashboard-bg box-s1' });
|
||||
var container_box = E('div', { 'class': 'wifi-info devices-list' });
|
||||
var container_radio = E('div', { 'class': 'settings-info' });
|
||||
var container_radio_item;
|
||||
|
||||
container_box.appendChild(E('div', { 'class': 'title'}, [
|
||||
E('img', {
|
||||
'src': L.resource('view/dashboard/icons/wireless.svg'),
|
||||
'width': 55,
|
||||
'title': this.title,
|
||||
'class': 'middle'
|
||||
}),
|
||||
E('h3', this.title)
|
||||
]));
|
||||
|
||||
container_box.appendChild(E('hr'));
|
||||
|
||||
for (var i =0; i < this.params.wifi.radios.length; i++) {
|
||||
|
||||
container_radio_item = E('div', { 'class': 'radio-info' })
|
||||
|
||||
for(var idx in this.params.wifi.radios[i]) {
|
||||
var classname = idx,
|
||||
radio = this.params.wifi.radios[i];
|
||||
|
||||
if (!radio[idx].visible) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('actived' === idx) {
|
||||
classname = radio[idx].value ? 'label label-success' : 'label label-danger';
|
||||
radio[idx].value = radio[idx].value ? _('yes') : _('no');
|
||||
}
|
||||
|
||||
container_radio_item.appendChild(
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ radio[idx].title + ':']),
|
||||
E('span', { 'class': classname }, [ radio[idx].value ]),
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
container_radio.appendChild(container_radio_item);
|
||||
}
|
||||
|
||||
container_box.appendChild(container_radio);
|
||||
|
||||
var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [
|
||||
E('div', { 'class': 'tr table-titles dashboard-bg' }, [
|
||||
E('div', { 'class': 'th nowrap' }, _('Hostname')),
|
||||
E('div', { 'class': 'th' }, _('Wireless')),
|
||||
E('div', { 'class': 'th' }, _('Signal')),
|
||||
E('div', { 'class': 'th' }, '%s / %s'.format( _('Up.'), _('Down.')))
|
||||
])
|
||||
]);
|
||||
|
||||
var container_devices_item;
|
||||
var container_devices_list = E('div', { 'class': 'table assoclist devices-info' });
|
||||
|
||||
for (var i =0; i < this.params.wifi.devices.length; i++) {
|
||||
container_devices_item = E('div', { 'class': 'tr cbi-rowstyle-1' });
|
||||
|
||||
for(var idx in this.params.wifi.devices[i]) {
|
||||
var device = this.params.wifi.devices[i];
|
||||
|
||||
if (!device[idx].visible) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var container_content;
|
||||
|
||||
if ('progress' == idx) {
|
||||
container_content = E('div', { 'class' : 'td device-info' }, [
|
||||
E('div', { 'class': 'progress' }, [
|
||||
E('div', { 'class': 'progress-bar ' + device[idx].value.style, role: 'progressbar', style: 'width:'+device[idx].value.qualite+'%', 'aria-valuenow': device[idx].value.qualite, 'aria-valuemin': 0, 'aria-valuemax': 100 }),
|
||||
])
|
||||
]);
|
||||
} else if ('rate' == idx) {
|
||||
container_content = E('div', { 'class': 'td device-info' }, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ device[idx].value.rx ]),
|
||||
E('br'),
|
||||
E('span', { 'class': ''}, [ device[idx].value.tx ])
|
||||
])
|
||||
]);
|
||||
} else {
|
||||
container_content = E('div', { 'class': 'td device-info'}, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ device[idx].value ]),
|
||||
])
|
||||
]);
|
||||
}
|
||||
|
||||
container_devices_item.appendChild(container_content);
|
||||
}
|
||||
|
||||
container_devices_list.appendChild(container_devices_item);
|
||||
}
|
||||
|
||||
if (this.params.wifi.devices.length > 0) {
|
||||
container_devices.appendChild(container_devices_list);
|
||||
container_box.appendChild(E('hr'));
|
||||
container_box.appendChild(container_devices);
|
||||
container_box.appendChild(container_devices_list);
|
||||
container_wapper.appendChild(container_box);
|
||||
}
|
||||
|
||||
return container_wapper;
|
||||
},
|
||||
|
||||
renderUpdateData: function(radios, networks, hosthints) {
|
||||
|
||||
for (var i = 0; i < radios.sort(function(a, b) { a.getName() > b.getName() }).length; i++) {
|
||||
var network_items = networks.filter(function(net) { return net.getWifiDeviceName() == radios[i].getName() });
|
||||
|
||||
for (var j = 0; j < network_items.length; j++) {
|
||||
var net = network_items[j],
|
||||
is_assoc = (net.getBSSID() != '00:00:00:00:00:00' && net.getChannel() && !net.isDisabled()),
|
||||
chan = net.getChannel(),
|
||||
freq = net.getFrequency(),
|
||||
rate = net.getBitRate();
|
||||
|
||||
this.params.wifi.radios.push(
|
||||
{
|
||||
ssid : {
|
||||
title: _('SSID'),
|
||||
visible: true,
|
||||
value: net.getActiveSSID() || '?'
|
||||
},
|
||||
|
||||
actived : {
|
||||
title: _('Active'),
|
||||
visible: true,
|
||||
value: !net.isDisabled()
|
||||
},
|
||||
|
||||
chan : {
|
||||
title: _('Channel'),
|
||||
visible: true,
|
||||
value: chan ? '%d (%.3f %s)'.format(chan, freq, _('GHz')) : '-'
|
||||
},
|
||||
|
||||
rate : {
|
||||
title: _('Bitrate'),
|
||||
visible: true,
|
||||
value: rate ? '%d %s'.format(rate, _('Mbit/s')) : '-'
|
||||
},
|
||||
|
||||
bssid : {
|
||||
title: _('BSSID'),
|
||||
visible: true,
|
||||
value: is_assoc ? (net.getActiveBSSID() || '-') : '-'
|
||||
},
|
||||
|
||||
encryption : {
|
||||
title: _('Encryption'),
|
||||
visible: true,
|
||||
value: is_assoc ? net.getActiveEncryption() : '-'
|
||||
},
|
||||
|
||||
associations : {
|
||||
title: _('Devices Connected'),
|
||||
visible: true,
|
||||
value: is_assoc ? (net.assoclist.length || '0') : 0
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < networks.length; i++) {
|
||||
for (var k = 0; k < networks[i].assoclist.length; k++) {
|
||||
var bss = networks[i].assoclist[k],
|
||||
name = hosthints.getHostnameByMACAddr(bss.mac);
|
||||
|
||||
var progress_style;
|
||||
var q = Math.min((bss.signal + 110) / 70 * 100, 100);
|
||||
|
||||
if (q == 0 || q < 25)
|
||||
progress_style = 'bg-danger';
|
||||
else if (q < 50)
|
||||
progress_style = 'bg-warning';
|
||||
else if (q < 75)
|
||||
progress_style = 'bg-success';
|
||||
else
|
||||
progress_style = 'bg-success';
|
||||
|
||||
this.params.wifi.devices.push(
|
||||
{
|
||||
hostname : {
|
||||
title: _('Hostname'),
|
||||
visible: true,
|
||||
value: name || '?'
|
||||
},
|
||||
|
||||
ssid : {
|
||||
title: _('SSID'),
|
||||
visible: true,
|
||||
value: networks[i].getActiveSSID()
|
||||
},
|
||||
|
||||
progress : {
|
||||
title: _('Channel'),
|
||||
visible: true,
|
||||
value: {
|
||||
qualite: q,
|
||||
style: progress_style
|
||||
}
|
||||
},
|
||||
|
||||
rate : {
|
||||
title: _('Bitrate'),
|
||||
visible: true,
|
||||
value: {
|
||||
rx: '%s'.format('%.2mB'.format(bss.rx.bytes)),
|
||||
tx: '%s'.format('%.2mB'.format(bss.tx.bytes)),
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
|
||||
this.params.wifi = {
|
||||
radios: [],
|
||||
devices: []
|
||||
};
|
||||
|
||||
this.renderUpdateData(data[0], data[1], data[2]);
|
||||
|
||||
return this.renderHtml();
|
||||
}
|
||||
});
|
|
@ -0,0 +1,110 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require dom';
|
||||
'require poll';
|
||||
'require fs';
|
||||
'require network';
|
||||
|
||||
document.querySelector('head').appendChild(E('link', {
|
||||
'rel': 'stylesheet',
|
||||
'type': 'text/css',
|
||||
'href': L.resource('view/dashboard/css/custom.css')
|
||||
}));
|
||||
|
||||
function invokeIncludesLoad(includes) {
|
||||
var tasks = [], has_load = false;
|
||||
|
||||
for (var i = 0; i < includes.length; i++) {
|
||||
if (typeof(includes[i].load) == 'function') {
|
||||
tasks.push(includes[i].load().catch(L.bind(function() {
|
||||
this.failed = true;
|
||||
}, includes[i])));
|
||||
|
||||
has_load = true;
|
||||
}
|
||||
else {
|
||||
tasks.push(null);
|
||||
}
|
||||
}
|
||||
|
||||
return has_load ? Promise.all(tasks) : Promise.resolve(null);
|
||||
}
|
||||
|
||||
function startPolling(includes, containers) {
|
||||
var step = function() {
|
||||
return network.flushCache().then(function() {
|
||||
return invokeIncludesLoad(includes);
|
||||
}).then(function(results) {
|
||||
for (var i = 0; i < includes.length; i++) {
|
||||
var content = null;
|
||||
|
||||
if (includes[i].failed)
|
||||
continue;
|
||||
|
||||
if (typeof(includes[i].render) == 'function')
|
||||
content = includes[i].render(results ? results[i] : null);
|
||||
else if (includes[i].content != null)
|
||||
content = includes[i].content;
|
||||
|
||||
if (content != null) {
|
||||
|
||||
if (i > 1) {
|
||||
dom.append(containers[1], content);
|
||||
} else {
|
||||
containers[i].parentNode.style.display = '';
|
||||
containers[i].parentNode.classList.add('fade-in');
|
||||
containers[i].parentNode.classList.add('Dashboard');
|
||||
dom.content(containers[i], content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ssi = document.querySelector('div.includes');
|
||||
if (ssi) {
|
||||
ssi.style.display = '';
|
||||
ssi.classList.add('fade-in');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return step().then(function() {
|
||||
poll.add(step);
|
||||
});
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
load: function() {
|
||||
return L.resolveDefault(fs.list('/www' + L.resource('view/dashboard/include')), []).then(function(entries) {
|
||||
return Promise.all(entries.filter(function(e) {
|
||||
return (e.type == 'file' && e.name.match(/\.js$/));
|
||||
}).map(function(e) {
|
||||
return 'view.dashboard.include.' + e.name.replace(/\.js$/, '');
|
||||
}).sort().map(function(n) {
|
||||
return L.require(n);
|
||||
}));
|
||||
});
|
||||
},
|
||||
|
||||
render: function(includes) {
|
||||
var rv = E([]), containers = [];
|
||||
|
||||
for (var i = 0; i < includes.length - 1; i++) {
|
||||
|
||||
var container = E('div', { 'class': 'section-content' });
|
||||
|
||||
rv.appendChild(E('div', { 'class': 'cbi-section-' + i, 'style': 'display:none' }, [
|
||||
container
|
||||
]));
|
||||
|
||||
containers.push(container);
|
||||
}
|
||||
|
||||
return startPolling(includes, containers).then(function() {
|
||||
return rv;
|
||||
});
|
||||
},
|
||||
|
||||
handleSaveApply: null,
|
||||
handleSave: null,
|
||||
handleReset: null
|
||||
});
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"admin/dashboard": {
|
||||
"title": "Dashboard",
|
||||
"order": 1,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "dashboard/index"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-mod-dashboard-index" ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"luci-mod-dashboard-routes": {
|
||||
"description": "Grant access to the system route status",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"file": [ "exec" ]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"luci-mod-dashboard-index": {
|
||||
"description": "Grant access to main status display",
|
||||
"read": {
|
||||
"file": {
|
||||
"/www/luci-static/resources/view/status/include": [ "list" ]
|
||||
},
|
||||
"ubus": {
|
||||
"file": [ "list", "read" ],
|
||||
"system": [ "board", "info" ]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"luci-mod-dashboard-index-dhcp": {
|
||||
"description": "Grant access to DHCP status display",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"luci-rpc": [ "getDHCPLeases" ]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"luci-mod-dashboard-index-wifi": {
|
||||
"description": "Grant access to wireless status display",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"iwinfo": [ "assoclist" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
# From https://github.com/openwrt/luci/commit/01d5d5f92963d9596a3c0b669a7e8d87b64132d5
|
||||
# From https://github.com/openwrt/luci/commit/5ca328440b3a41ab6d415ec96f9db4339715de67
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
|
|
|
@ -281,6 +281,11 @@ return view.extend({
|
|||
o.placeholder = '/example.org/10.1.2.3';
|
||||
// o.validate = validateServerSpec;
|
||||
|
||||
o = s.taboption('general', form.DynamicList, 'address', _('Addresses'),
|
||||
_('List of domains to force to an IP address.'));
|
||||
|
||||
o.optional = true;
|
||||
o.placeholder = '/router.local/192.168.0.1';
|
||||
|
||||
o = s.taboption('general', form.Flag, 'rebind_protection',
|
||||
_('Rebind protection'),
|
||||
|
@ -425,12 +430,9 @@ return view.extend({
|
|||
so.datatype = 'list(unique(macaddr))';
|
||||
so.rmempty = true;
|
||||
so.cfgvalue = function(section) {
|
||||
var macs = uci.get('dhcp', section, 'mac'),
|
||||
var macs = L.toArray(uci.get('dhcp', section, 'mac')),
|
||||
result = [];
|
||||
|
||||
if (!Array.isArray(macs))
|
||||
macs = (macs != null && macs != '') ? macs.split(/\ss+/) : [];
|
||||
|
||||
for (var i = 0, mac; (mac = macs[i]) != null; i++)
|
||||
if (/^([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2}):([0-9a-fA-F]{1,2})$/.test(mac))
|
||||
result.push('%02X:%02X:%02X:%02X:%02X:%02X'.format(
|
||||
|
|
|
@ -575,6 +575,10 @@ return view.extend({
|
|||
o.value('backup',_('Backup'));
|
||||
o.default = 'off';
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'addlatency', _('Additional latency'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '0';
|
||||
|
||||
if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd')) {
|
||||
o = s.taboption('dhcp', form.SectionValue, '_dhcp', form.TypedSection, 'dhcp');
|
||||
o.depends('proto', 'static');
|
||||
|
|
|
@ -1195,6 +1195,9 @@ return view.extend({
|
|||
var has_ap_eap192 = L.hasSystemFeature('hostapd', 'suiteb192'),
|
||||
has_sta_eap192 = L.hasSystemFeature('wpasupplicant', 'suiteb192');
|
||||
|
||||
// Probe WEP support
|
||||
var has_ap_wep = L.hasSystemFeature('hostapd', 'wep'),
|
||||
has_sta_wep = L.hasSystemFeature('wpasupplicant', 'wep');
|
||||
|
||||
if (has_hostapd || has_supplicant) {
|
||||
crypto_modes.push(['psk2', 'WPA2-PSK', 35]);
|
||||
|
@ -1210,6 +1213,11 @@ return view.extend({
|
|||
crypto_modes.push(['sae-mixed', 'WPA2-PSK/WPA3-SAE Mixed Mode', 30]);
|
||||
}
|
||||
|
||||
if (has_ap_wep || has_sta_wep) {
|
||||
crypto_modes.push(['wep-open', _('WEP Open System'), 11]);
|
||||
crypto_modes.push(['wep-shared', _('WEP Shared Key'), 10]);
|
||||
}
|
||||
|
||||
if (has_ap_eap || has_sta_eap) {
|
||||
if (has_ap_eap192 || has_sta_eap192) {
|
||||
crypto_modes.push(['wpa3', 'WPA3-EAP', 33]);
|
||||
|
@ -1226,8 +1234,8 @@ return view.extend({
|
|||
|
||||
encr.crypto_support = {
|
||||
'ap': {
|
||||
'wep-open': true,
|
||||
'wep-shared': true,
|
||||
'wep-open': has_ap_wep || _('Requires hostapd with WEP support'),
|
||||
'wep-shared': has_ap_wep || _('Requires hostapd with WEP support'),
|
||||
'psk': has_hostapd || _('Requires hostapd'),
|
||||
'psk2': has_hostapd || _('Requires hostapd'),
|
||||
'psk-mixed': has_hostapd || _('Requires hostapd'),
|
||||
|
@ -1240,8 +1248,8 @@ return view.extend({
|
|||
'owe': has_ap_owe || _('Requires hostapd with OWE support')
|
||||
},
|
||||
'sta': {
|
||||
'wep-open': true,
|
||||
'wep-shared': true,
|
||||
'wep-open': has_sta_wep || _('Requires wpa-supplicant with WEP support'),
|
||||
'wep-shared': has_sta_wep || _('Requires wpa-supplicant with WEP support'),
|
||||
'psk': has_supplicant || _('Requires wpa-supplicant'),
|
||||
'psk2': has_supplicant || _('Requires wpa-supplicant'),
|
||||
'psk-mixed': has_supplicant || _('Requires wpa-supplicant'),
|
||||
|
@ -1295,10 +1303,10 @@ return view.extend({
|
|||
crypto_modes.push(['psk2', 'WPA2-PSK', 33]);
|
||||
crypto_modes.push(['psk+psk2', 'WPA-PSK/WPA2-PSK Mixed Mode', 22]);
|
||||
crypto_modes.push(['psk', 'WPA-PSK', 21]);
|
||||
crypto_modes.push(['wep-open', _('WEP Open System'), 11]);
|
||||
crypto_modes.push(['wep-shared', _('WEP Shared Key'), 10]);
|
||||
}
|
||||
|
||||
crypto_modes.push(['wep-open', _('WEP Open System'), 11]);
|
||||
crypto_modes.push(['wep-shared', _('WEP Shared Key'), 10]);
|
||||
crypto_modes.push(['none', _('No Encryption'), 0]);
|
||||
|
||||
crypto_modes.sort(function(a, b) { return b[2] - a[2] });
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue