1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-02-13 19:11:51 +00:00

Merge pull request #1 from Ysurac/develop

tongbu
This commit is contained in:
suyuan 2020-03-10 05:59:35 -07:00 committed by GitHub
commit 10b7c312c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
457 changed files with 20250 additions and 204102 deletions

View file

@ -1,7 +1,8 @@
version: 2
jobs:
prepare:
machine: true
machine:
image: ubuntu-1604:201903-01
working_directory: ~/
@ -12,10 +13,12 @@ jobs:
sudo rm -rf /var/lib/apt/lists/lock
sudo apt-get update
sudo rm -rf /var/lib/apt/lists/lock
sudo apt-get install -yq build-essential git unzip ncurses-dev libz-dev libssl-dev python subversion gettext gawk wget curl rsync perl libelf-dev
sudo apt-get install -yq build-essential git unzip ncurses-dev libz-dev libssl-dev python subversion gettext gawk wget curl rsync perl libelf-dev python3.5 libpython3.5-stdlib liblzma-dev
pyenv global 3.5.2
build_x86_64:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -27,8 +30,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -37,15 +40,18 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
no_output_timeout: 50m
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}"
sudo apt-get update
sudo apt-get install -yq libelf-dev
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
@ -63,8 +69,8 @@ jobs:
- run:
name: Deploy
command: |
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -73,7 +79,8 @@ jobs:
- openmptcprouter
build_x86:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -85,8 +92,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -95,14 +102,16 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
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
@ -114,14 +123,14 @@ jobs:
- run:
name: Build
no_output_timeout: 30m
no_output_timeout: 40m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/$OMR_TARGET/source package/{compile,install,index} target/install -j2
- run:
name: Deploy
command: |
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -130,7 +139,8 @@ jobs:
- openmptcprouter
build_rpi3:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -142,8 +152,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -152,14 +162,16 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
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
@ -171,14 +183,74 @@ jobs:
- run:
name: Build
no_output_timeout: 30m
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/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
key: cache-{{ checksum "/tmp/cache-version" }}
paths:
- openmptcprouter
build_rpi4:
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
- OMR_TARGET: rpi4
working_directory: ~/
steps:
- run:
name: cache
command: |
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $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}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -187,7 +259,8 @@ jobs:
- openmptcprouter
build_rpi2:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -199,8 +272,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -209,14 +282,16 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
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
@ -228,14 +303,14 @@ jobs:
- run:
name: Build
no_output_timeout: 30m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/$OMR_TARGET/source package/{compile,install,index} target/compile -j2 package/compile -j2 target/install -j2
no_output_timeout: 40m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/$OMR_TARGET/source package/{compile,install,index} target/compile package/compile target/install -j2
- run:
name: Deploy
command: |
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -244,7 +319,8 @@ jobs:
- openmptcprouter
build_bpi-r2:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -256,8 +332,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -266,14 +342,16 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
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
@ -285,14 +363,17 @@ jobs:
- run:
name: Build
no_output_timeout: 30m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/$OMR_TARGET/source package/{compile,install,index} target/compile -j2 package/compile -j2 target/install -j2
no_output_timeout: 40m
command: |
sudo apt-get update
sudo apt-get -yq install swig2.0
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/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -301,7 +382,8 @@ jobs:
- openmptcprouter
build_wrt3200acm:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -313,8 +395,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -323,14 +405,16 @@ jobs:
- run:
name: Build toolchain
no_output_timeout: 30m
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
@ -342,14 +426,14 @@ jobs:
- run:
name: Build
no_output_timeout: 30m
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/release
rsync -av --delete-after ~/openmptcprouter/$OMR_TARGET/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/$OMR_TARGET
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$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}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rm -rf ~/openmptcprouter/$OMR_TARGET/source/bin
- save_cache:
@ -358,7 +442,8 @@ jobs:
- openmptcprouter
build_wrt32:
machine: true
machine:
image: ubuntu-1604:201903-01
environment:
- OMR_VERSION: $CIRCLE_TAG
@ -369,8 +454,8 @@ jobs:
- run:
name: cache
command: |
echo "cache 44 $OMR_TARGET" > /tmp/cache-target
echo "cache 48 $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
- restore_cache:
keys:
@ -379,15 +464,17 @@ jobs:
- run:
name: Build toolchain wrt3200acm
no_output_timeout: 30m
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}"
export OMR_TARGET="wrt3200acm"
pyenv global 3.5.2
sh build.sh prepare {tools,toolchain}/install -j2
echo -e "$OMR_PRIVKEY" > ~/openmptcprouter/wrt3200acm/source/key-build
echo -e "$OMR_PUBKEY" > ~/openmptcprouter/wrt3200acm/source/key-build.pub
@ -399,14 +486,14 @@ jobs:
- run:
name: Build wrt3200acm
no_output_timeout: 30m
no_output_timeout: 40m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/wrt3200acm/source package/{compile,install,index} target/compile -j2 package/compile -j2 target/install -j2
- run:
name: Deploy wrt3200acm
command: |
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/release
rsync -av --delete-after ~/openmptcprouter/wrt3200acm/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/wrt3200acm
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rsync -av --delete-after ~/openmptcprouter/wrt3200acm/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/wrt3200acm
rm -rf ~/openmptcprouter/wrt3200acm/source/bin
- save_cache:
@ -416,50 +503,101 @@ jobs:
- run:
name: Build toolchain wrt32x
no_output_timeout: 30m
no_output_timeout: 40m
command: |
cd ~/openmptcprouter/
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}"
export OMR_TARGET="wrt32x"
ln -s wrt3200acm wrt32x
pyenv global 3.5.2
sh build.sh prepare {tools,toolchain}/install -j2
echo -e "$OMR_PRIVKEY" > ~/openmptcprouter/wrt32x/source/key-build
echo -e "$OMR_PUBKEY" > ~/openmptcprouter/wrt32x/source/key-build.pub
- run:
name: Build wrt32x
no_output_timeout: 30m
no_output_timeout: 40m
command: make IGNORE_ERRORS=m -C ~/openmptcprouter/wrt32x/source package/{compile,install,index} target/compile -j2 package/compile -j2 target/install -j2
- run:
name: Deploy wrt32x
command: |
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/release
rsync -av --delete-after ~/openmptcprouter/wrt32x/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/release/wrt32x
ssh -p ${OMR_DEPLOY_PORT:-22} deploy@$OMR_DEPLOY_HOST mkdir -p deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/$OMR_TARGET
rsync -av --delete-after ~/openmptcprouter/wrt32x/source/bin/ -e "ssh -q -p ${OMR_DEPLOY_PORT:-22}" deploy@$OMR_DEPLOY_HOST:deploy/${CIRCLE_BRANCH:-release}/${OMR_KERNEL:-4.14}/wrt32x
workflows:
version: 2
main:
jobs:
- prepare
- prepare:
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_x86_64:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_x86:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_rpi4:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_rpi3:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_rpi2:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_bpi-r2:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop
- build_wrt32:
requires:
- prepare
filters:
tags:
only: /.*/
branches:
only:
- develop

9
.codeclimate Normal file
View file

@ -0,0 +1,9 @@
plugins:
shellcheck:
enabled: true
engines:
luacheck:
enabled: true
ratings:
paths:
- "**.lua"

View file

@ -1,5 +1,6 @@
# OpenWrt OpenMPTCProuter feed
This is the OpenWrt OpenMPTCProuter feed containing all modified and necessary packages to build the OpenMPTCProuter image.
For More information, see [https://github.com/ysurac/openmptcprouter](https://github.com/ysurac/openmptcprouter) and [https://www.openmptcprouter.com](https://www.openmptcprouter.com/).
@ -140,6 +141,14 @@ This is used to check if there is no other IPv6 route announced on the network
This is an other way to aggregate same latency connections
## dsvpn
*Source:* [https://github.com/jedisct1/dsvpn][https://github.com/jedisct1/dsvpn]
*Description:* A Dead Simple VPN
A simple TCP VPN
## ndpi-netfilter2
*Source:* [https://github.com/vel21ripn/nDPI](https://github.com/vel21ripn/nDPI)
@ -153,3 +162,6 @@ This is used to bypass a protocol
*Description:* A middlebox detection tool
# 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)

View file

@ -1,23 +0,0 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TYPE:=col
LUCI_BASENAME:=luci
LUCI_TITLE:=LuCI interface with Uhttpd as Webserver (default)
LUCI_DESCRIPTION:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme
LUCI_DEPENDS:= \
+uhttpd +luci-mod-admin-full +luci-theme-bootstrap \
+luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \
+rpcd-mod-rrdns
PKG_LICENSE:=Apache-2.0
include ../../luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

43
dsvpn/Makefile Normal file
View file

@ -0,0 +1,43 @@
#
# Copyright (C) 2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/jedisct1/dsvpn.git
PKG_SOURCE_VERSION:=3b99d2ef6c02b2ef68b5784bec8adfdd55b29b1a
PKG_NAME:=dsvpn
PKG_VERSION:=0.1.4-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=net
CATEGORY:=Network
DEPENDS:=+kmod-tun
TITLE:=A Dead Simple VPN
URL:=https://github.com/jedisct1/dsvpn
SUBMENU:=VPN
endef
define Package/$(PKG_NAME)/conffiles
/etc/config/dsvpn
endef
TARGET_CFLAGS += -DNO_DEFAULT_ROUTES -DNO_DEFAULT_FIREWALL -DNO_DEFAULT_CONGESTION
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/dsvpn $(1)/usr/sbin/$(PKG_NAME)
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) files/init $(1)/etc/init.d/$(PKG_NAME)
$(INSTALL_DIR) $(1)/etc/config
touch $(1)/etc/config/dsvpn
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

87
dsvpn/files/init Executable file
View file

@ -0,0 +1,87 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
START=90
STOP=10
USE_PROCD=1
PROG_NAME=dsvpn
PROG=/usr/sbin/${PROG_NAME}
_log() {
logger -p daemon.info -t ${PROG_NAME} "$@"
}
_err() {
logger -p daemon.err -t ${PROG_NAME} "$@"
}
validate_section() {
uci_validate_section dsvpn dsvpn "${1}" \
'enable:bool:0' \
'key:string' \
'host:host' \
'port:port' \
'dev:string' \
'localip:host' \
'remoteip:host'
}
start_instance() {
local enable key host port dev
validate_section "${1}" || {
_err "validation failed"
return 1
}
[ "${enable}" = "1" ] || return 1
[ -n "${key}" ] || return 1
[ "${key}" != "secretkey" ] || return 1
[ -n "${port}" ] || return 1
[ -n "${dev}" ] || return 1
echo "${key}" > /tmp/${PROG_NAME}-${1}.key
key=""
if [ "$(uci -q get network.omrvpn)" != "" ] && [ "$(uci -q get network.omrvpn)" != "$dev" ]; then
uci -q set network.omrvpn.ifname=$dev
uci -q commit
fi
ip addr flush $dev
sleep 2
_log "starting ${PROG_NAME} ${1} instance $*"
procd_open_instance
procd_set_param command ${PROG} client \
/tmp/${PROG_NAME}-${1}.key \
$host \
$port \
$dev \
${localip:+$localip} \
${remoteip:+$remoteip}
procd_set_param respawn 0 30 5
procd_set_param file /tmp/${PROG_NAME}-${1}.key
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
start_service() {
config_load dsvpn
config_foreach start_instance dsvpn
}
service_triggers() {
procd_add_reload_trigger dsvpn network
}

View file

@ -0,0 +1,65 @@
--- a/src/os.c 2019-12-06 19:49:50.323898270 +0100
+++ b/src/os.c 2019-12-06 19:54:20.987206244 +0100
@@ -445,24 +445,28 @@
#ifdef __linux__
static const char
*set_cmds[] =
- { "sysctl net.ipv4.ip_forward=1",
- "ip addr add $LOCAL_TUN_IP peer $REMOTE_TUN_IP dev $IF_NAME",
+ { "ip addr add $LOCAL_TUN_IP peer $REMOTE_TUN_IP dev $IF_NAME",
"ip -6 addr add $LOCAL_TUN_IP6 peer $REMOTE_TUN_IP6/96 dev $IF_NAME",
"ip link set dev $IF_NAME up",
+#ifndef NO_DEFAULT_FIREWALL
+ "sysctl net.ipv4.ip_forward=1",
"iptables -t raw -I PREROUTING ! -i $IF_NAME -d $LOCAL_TUN_IP -m addrtype ! "
"--src-type LOCAL -j DROP",
"iptables -t nat -A POSTROUTING -o $EXT_IF_NAME -s $REMOTE_TUN_IP -j MASQUERADE",
"iptables -t filter -A FORWARD -i $EXT_IF_NAME -o $IF_NAME -m state --state "
"RELATED,ESTABLISHED -j ACCEPT",
"iptables -t filter -A FORWARD -i $IF_NAME -o $EXT_IF_NAME -j ACCEPT",
+#endif
NULL },
*unset_cmds[] = {
+#ifndef NO_DEFAULT_FIREWALL
"iptables -t nat -D POSTROUTING -o $EXT_IF_NAME -s $REMOTE_TUN_IP -j MASQUERADE",
"iptables -t filter -D FORWARD -i $EXT_IF_NAME -o $IF_NAME -m state --state "
"RELATED,ESTABLISHED -j ACCEPT",
"iptables -t filter -D FORWARD -i $IF_NAME -o $EXT_IF_NAME -j ACCEPT",
"iptables -t raw -D PREROUTING ! -i $IF_NAME -d $LOCAL_TUN_IP -m addrtype ! "
"--src-type LOCAL -j DROP",
+#endif
NULL
};
#elif defined(__APPLE__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \
@@ -503,12 +507,17 @@
#elif defined(__linux__)
static const char
*set_cmds[] =
- { "sysctl net.ipv4.tcp_congestion_control=bbr",
+ {
+#ifndef NO_DEFAULT_CONGESTION
+ "sysctl net.ipv4.tcp_congestion_control=bbr",
+#endif
"ip link set dev $IF_NAME up",
- "iptables -t raw -I PREROUTING ! -i $IF_NAME -d $LOCAL_TUN_IP -m addrtype ! "
- "--src-type LOCAL -j DROP",
"ip addr add $LOCAL_TUN_IP peer $REMOTE_TUN_IP dev $IF_NAME",
"ip -6 addr add $LOCAL_TUN_IP6 peer $REMOTE_TUN_IP6/96 dev $IF_NAME",
+#ifndef NO_DEFAULT_FIREWALL
+ "iptables -t raw -I PREROUTING ! -i $IF_NAME -d $LOCAL_TUN_IP -m addrtype ! "
+ "--src-type LOCAL -j DROP",
+#endif
#ifndef NO_DEFAULT_ROUTES
"ip route add default dev $IF_NAME table 42069",
"ip -6 route add default dev $IF_NAME table 42069",
@@ -525,8 +534,10 @@
"ip rule delete table main suppress_prefixlength 0",
"ip -6 rule delete table main suppress_prefixlength 0",
#endif
+#ifndef NO_DEFAULT_FIREWALL
"iptables -t raw -D PREROUTING ! -i $IF_NAME -d $LOCAL_TUN_IP -m addrtype ! "
"--src-type LOCAL -j DROP",
+#endif
NULL
};
#else

View file

@ -0,0 +1,10 @@
--- a/Makefile 2019-08-03 22:52:54.541484359 +0200
+++ b/Makefile 2019-08-03 22:53:00.901364600 +0200
@@ -5,7 +5,6 @@
dsvpn: $(CFLAGS_FILE) Makefile src/vpn.c src/charm.c src/os.c include/charm.h include/vpn.h include/os.h
$(CC) $$(cat "$(CFLAGS_FILE)") $(OPTFLAGS) -Iinclude -o $@ src/vpn.c src/charm.c src/os.c
- strip $@
install: dsvpn
install -m 0755 dsvpn $(PREFIX)/sbin

View file

@ -1,6 +1,6 @@
#
# Copyright (C) 2015 OVH
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@ -10,10 +10,10 @@ include $(TOPDIR)/rules.mk
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/angt/glorytun.git
PKG_SOURCE_VERSION:=db718d59426957eef89357d5b58ae59cae2f8c5d
PKG_SOURCE_VERSION:=a9408e799ddbb74b5476fba70a495770322cd327
PKG_NAME:=glorytun-udp
PKG_VERSION:=0.1.1-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=22
PKG_VERSION:=0.3.0-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=23
PKG_FIXUP:=autoreconf

View file

@ -0,0 +1,11 @@
--- a/mud/aegis256/aegis256.c 2019-11-06 21:17:20.945036771 +0100
+++ b/mud/aegis256/aegis256.c 2019-11-06 21:21:18.728943139 +0100
@@ -43,7 +43,7 @@
#ifndef __ARM_FEATURE_CRYPTO
#define __ARM_FEATURE_CRYPTO 1
#endif
-#else
+#elifdef __ARM_FEATURE_CRYPTO
#pragma GCC target("+crypto")
#endif

View file

@ -76,7 +76,7 @@ start_instance() {
procd_append_param command \
retry count -1 const 5000000 \
timeout 10000 \
timeout 100000 \
keepalive count 5 idle 20 interval 2 \
buffer-size 32768

View file

@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/golang/crypto.git
PKG_SOURCE_VERSION:=a49355c7e3f8fe157a85be2f77e6e269a0f89602
PKG_SOURCE_DATE:=20180620
PKG_MIRROR_HASH:=80b16b203736ac56883d0610edbc5981eb78f15b7b35d11b5ca639f7c3814214
PKG_SOURCE_VERSION:=4def268fd1a49955bfb3dda92fe3db4f924f2285
PKG_SOURCE_DATE:=20190701
#PKG_MIRROR_HASH:=80b16b203736ac56883d0610edbc5981eb78f15b7b35d11b5ca639f7c3814214
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE

View file

@ -246,12 +246,10 @@ define GoPackage/Build/Compile
mips|mipsle) installsuffix="-installsuffix $(GO_MIPS)" ;; \
mips64|mips64le) installsuffix="-installsuffix $(GO_MIPS64)" ;; \
esac ; \
trimpath="all=-trimpath=$(GO_PKG_BUILD_DIR)" ; \
ldflags="all=-linkmode external -extldflags '$(TARGET_LDFLAGS)'" ; \
go install \
$$$$installsuffix \
-gcflags "$$$$trimpath" \
-asmflags "$$$$trimpath" \
-trimpath \
-ldflags "$$$$ldflags" \
-v \
$(1) \

View file

@ -25,6 +25,7 @@ unexport \
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
go_arch=$(subst \
aarch64,arm64,$(subst \

View file

@ -10,5 +10,5 @@ ifeq ($(origin GO_INCLUDE_DIR),undefined)
endif
GO_VERSION_MAJOR_MINOR:=1.11
GO_VERSION_PATCH:=5
GO_VERSION_MAJOR_MINOR:=1.13
GO_VERSION_PATCH:=4

View file

@ -18,7 +18,7 @@ GO_SOURCE_URLS:=https://dl.google.com/go/ \
PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
PKG_HASH:=bc1ef02bb1668835db1390a2e478dcbccb5dd16911691af9d75184bbe5aa943e
PKG_HASH:=95dbeab442ee2746b9acf0934c8e2fc26414a0565c008631b04addb8c02e7624
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE

View file

@ -9,8 +9,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=iperf
PKG_SOURCE_VERSION:=40e7c05440583f229edd6b6ca05c5d97b66fcf15
PKG_VERSION:=3.6-$(PKG_SOURCE_VERSION)
PKG_SOURCE_VERSION:=02a5f4755878b319f0db5ccd490daf61e6d76043
PKG_VERSION:=3.7-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git

16
luci-app-dsvpn/Makefile Normal file
View file

@ -0,0 +1,16 @@
#
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
#
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for DSVPN
LUCI_DEPENDS:=+dsvpn
PKG_LICENSE:=GPLv3
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,7 @@
module("luci.controller.dsvpn", package.seeall)
function index()
--entry({"admin", "openmptcprouter", "mlvpn"}, cbi("mlvpn"), _("DSVPN"))
--entry({"admin", "services", "dsvpn"}, cbi("dsvpn"), _("DSVPN"))
entry({"admin", "vpn", "dsvpn"}, cbi("dsvpn"), _("DSVPN"))
end

View file

@ -0,0 +1,44 @@
local net = require "luci.model.network".init()
local sys = require "luci.sys"
local ifaces = sys.net:devices()
local m, s, o
m = Map("dsvpn", translate("DSVPN"))
s = m:section(TypedSection, "dsvpn", translate("Settings"))
s.anonymous = true
s.addremove = false
o = s:option(Flag, "enable", translate("Enable"))
o.rmempty = false
o = s:option(Value, "host", translate("Remote host"))
o.placeholder = "128.128.128.128"
o.default = "128.128.128.128"
o.datatype = "host"
o.rmempty = false
o = s:option(Value, "port", translate("Remote port"))
o.placeholder = "65011"
o.default = "65011"
o.datatype = "port"
o = s:option(Value, "key", translate("Key"))
o.password = true
o.rmempty = false
o = s:option(Value, "localip", translate("Tunnel local IP"))
o.default = "10.255.251.2"
o.datatype = "host"
o = s:option(Value, "remoteip", translate("Tunnel remote IP"))
o.default = "10.255.251.1"
o.datatype = "host"
o = s:option(Value, "dev", translate("Interface name"))
o.placeholder = "tun0"
o.default = "tun0"
o.rmempty = false
return m

View file

@ -0,0 +1,52 @@
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"
"Language: fr\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 ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
msgid "Enable"
msgstr "Activé"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
msgid "Interface name"
msgstr "Nom de l'interface"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
msgid "Key"
msgstr "Clef"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15
msgid "Remote host"
msgstr "Nom de l'hôte distant ou adresse IP"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21
msgid "Remote port"
msgstr "Port distant"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8
msgid "Settings"
msgstr "Paramètres"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31
msgid "Tunnel local IP"
msgstr "Adresse IP locale du tunnel"
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35
msgid "Tunnel remote IP"
msgstr "Adresse IP distance du tunnel"

View file

@ -0,0 +1,41 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:4
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:5
#: luci-app-dsvpn/luasrc/controller/dsvpn.lua:6
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:6
msgid "DSVPN"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:12
msgid "Enable"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:39
msgid "Interface name"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:26
msgid "Key"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:15
msgid "Remote host"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:21
msgid "Remote port"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:8
msgid "Settings"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:31
msgid "Tunnel local IP"
msgstr ""
#: luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua:35
msgid "Tunnel remote IP"
msgstr ""

View file

@ -15,6 +15,7 @@ PKG_LICENSE:=GPLv2
PKG_MAINTAINER:=Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -1,4 +1,4 @@
-- Copyright 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
-- Copyright 2018 - 2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.glorytun", package.seeall)
@ -7,6 +7,8 @@ function index()
if not nixio.fs.access("/etc/config/glorytun") then
return
end
entry({"admin", "services", "glorytun"}, cbi("glorytun"), _("Glorytun") )
entry({"admin", "services", "glorytun", "settings"}, cbi("glorytun-settings"), nil ).leaf = true
--entry({"admin", "services", "glorytun"}, cbi("glorytun"), _("Glorytun") )
--entry({"admin", "services", "glorytun", "settings"}, cbi("glorytun-settings"), nil ).leaf = true
entry({"admin", "vpn", "glorytun"}, cbi("glorytun"), _("Glorytun") )
entry({"admin", "vpn", "glorytun", "settings"}, cbi("glorytun-settings"), nil ).leaf = true
end

View file

@ -16,7 +16,7 @@ s.addremove = true
s.add_select_options = { }
s.add_select_options[''] = ''
s.extedit = luci.dispatcher.build_url(
"admin", "services", "glorytun", "settings", "%s"
"admin", "vpn", "glorytun", "settings", "%s"
)
uci:load("glorytun_recipes")
@ -100,7 +100,7 @@ end
local updown = s:option( Button, "_updown", translate("Start/Stop") )
updown._state = false
updown.redirect = luci.dispatcher.build_url(
"admin", "services", "glorytun"
"admin", "vpn", "glorytun"
)
function updown.cbid(self, section)
local pid = s.getPID(section)

View file

@ -7,7 +7,7 @@
<fieldset class="cbi-section">
<legend>
<a href="<%=url('admin/services/glorytun')%>"><%:Overview%></a> &raquo;
<a href="<%=url('admin/vpn/glorytun')%>"><%:Overview%></a> &raquo;
<%=luci.i18n.translatef("Instance \"%s\"", self.instance)%>
</legend>
</fieldset>

View file

@ -15,8 +15,9 @@ set_default() {
local remoteip
local config="$1"
local iface
config_get enable "$config" enable
config_get iface "$config" dev
[ "$iface" = "$DEVICE" ] && {
[ "$iface" = "$DEVICE" ] && [ "$enable" = "1" ] && {
config_get localip "$config" localip
config_get remoteip "$config" remoteip
[ "$remoteip" != "" ] && [ "$localip" != "" ] && ifconfig $DEVICE $localip pointopoint $remoteip up

View file

@ -12,6 +12,6 @@ LUCI_DEPENDS:=+haproxy-nossl
PKG_LICENSE:=MIT
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -10,6 +10,7 @@ LUCI_DEPENDS:=+iperf3-ssl
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -160,6 +160,10 @@
end)
%>
</select>
<br />
<div class="cbi-value-description">
<%:Server VPS IP is bypassed, so this will test only default route speed.%>
</div>
</div>
</div>
<input type="button" value="<%:Test%>" class="cbi-button cbi-button-apply" onclick="update_speed(this.form.addr,this.form.proto.value,this.form.mode.value,this.form.omit.value,this.form.parallel.value,this.form.transmit.value,this.form.bitrate.value)" />

View file

@ -1,70 +1,98 @@
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"
"Language-Team: \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"
#: luci-app-iperf/luasrc/view/iperf/test.htm:128
msgid "0 for unlimited. Need to be limited for UDP test"
msgstr ""
msgstr "0 pour sans limite. Nécessite d'être limité pour les tests UDP."
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
msgid "Bad address specified!"
msgstr ""
msgstr "Adresse invalide !"
#: 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 "Téléchargement"
#: luci-app-iperf/luasrc/view/iperf/test.htm:114
msgid "Internet protocol"
msgstr ""
msgstr "Protocole Internet"
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
msgid "Loading"
msgstr "Chargement"
#: luci-app-iperf/luasrc/view/iperf/test.htm:105
msgid "Mode of operation"
msgstr ""
msgstr "Mode de fonctionnement"
#: luci-app-iperf/luasrc/view/iperf/test.htm:133
msgid "Number of parallel client streams to run"
msgstr ""
msgstr "Nombre de client en parallèle"
#: luci-app-iperf/luasrc/view/iperf/test.htm:139
msgid "Omit the first n seconds"
msgstr ""
msgstr "Passe les n premières secondes"
#: luci-app-iperf/luasrc/view/iperf/test.htm:151
msgid "Server"
msgstr "Serveur"
#: 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 ""
msgstr "Vitesse souhaitée (Mbits/s)"
#: luci-app-iperf/luasrc/view/iperf/test.htm:165
msgid "Test"
msgstr "Teste"
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
msgid "This iPerf interface is in bêta. No support for this."
msgstr ""
msgstr "Cette interface pour iPerf est en bêta. Pas de support pour ça."
#: luci-app-iperf/luasrc/view/iperf/test.htm:145
msgid "Time to transmit for (s)"
msgstr ""
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 "Envoie"
#: 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 ""
msgstr "En attente de la réponse de la commande..."
#: luci-app-iperf/luasrc/controller/iperf.lua:8
msgid "iPerf"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:99
msgid "iPerf speed tests"
msgstr ""
msgstr "Tests de vitesse iPerf"
#: luci-app-iperf/luasrc/controller/iperf.lua:7
msgid "iperf"
msgstr ""

View file

@ -1,59 +1,87 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-iperf/luasrc/view/iperf/test.htm:128
msgid "0 for unlimited. Need to be limited for UDP test"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:48
#: luci-app-iperf/luasrc/view/iperf/test.htm:88
msgid "Bad address specified!"
msgstr ""
#: 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 ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:114
msgid "Internet protocol"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:26
#: luci-app-iperf/luasrc/view/iperf/test.htm:66
msgid "Loading"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:105
msgid "Mode of operation"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:133
msgid "Number of parallel client streams to run"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:139
msgid "Omit the first n seconds"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:151
msgid "Server"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:102
msgid "Settings"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:123
msgid "Target bitrate (Mbits/s)"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:165
msgid "Test"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:100
msgid "This iPerf interface is in bêta. No support for this."
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:145
msgid "Time to transmit for (s)"
msgstr ""
#: 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 ""
#: 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 ""
#: luci-app-iperf/luasrc/controller/iperf.lua:8
msgid "iPerf"
msgstr ""
#: luci-app-iperf/luasrc/view/iperf/test.htm:99
msgid "iPerf speed tests"
msgstr ""
#: luci-app-iperf/luasrc/controller/iperf.lua:7
msgid "iperf"
msgstr ""

78
luci-app-macvlan/Makefile Normal file
View file

@ -0,0 +1,78 @@
#
# Copyright (C) 2017-2019 Chen Minqiang <ptpt52@gmail.com>
#
# This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-macvlan
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_LICENSE:=GPLv3
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/luci-app-macvlan
CATEGORY:=OpenMPTCProuter
SUBMENU:=Macvlan
TITLE:=LuCI Support for macvlan
PKGARCH:=all
DEPENDS:=+kmod-macvlan +busybox +@BUSYBOX_CUSTOM +@BUSYBOX_CONFIG_VCONFIG
endef
define Package/luci-app-macvlan/description
LuCI Support for macvlan.
endef
define Build/Prepare
$(foreach po,$(wildcard ${CURDIR}/files/luci/i18n/*.po), \
po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));)
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/luci-app-macvlan/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
fi
if [ -z "$$IPKG_INSTROOT" ]; then
( . /etc/uci-defaults/40_luci-app-macvlan )
rm -f /etc/uci-defaults/40_luci-app-macvlan
fi
exit 0
endef
define Package/luci-app-macvlan/conffiles
/etc/config/macvlan
endef
define Package/luci-app-macvlan/install
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n
$(INSTALL_DATA) $(PKG_BUILD_DIR)/macvlan.*.lmo $(1)/usr/lib/lua/luci/i18n/
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
$(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/macvlan
$(INSTALL_DATA) ./files/luci/model/cbi/macvlan/*.lua $(1)/usr/lib/lua/luci/model/cbi/macvlan/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/root/etc/config/macvlan $(1)/etc/config/macvlan
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/root/etc/init.d/macvlan $(1)/etc/init.d/macvlan
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DATA) ./files/root/etc/uci-defaults/40_luci-app-macvlan $(1)/etc/uci-defaults/40_luci-app-macvlan
endef
$(eval $(call BuildPackage,luci-app-macvlan))

View file

@ -0,0 +1,10 @@
-- Copyright (C) 2019 X-WRT <dev@x-wrt.com>
module("luci.controller.macvlan", package.seeall)
function index()
local page
page = entry({"admin", "network", "macvlan"}, cbi("macvlan/macvlan"), _("Macvlan"))
page.leaf = true
end

View file

@ -0,0 +1,14 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Macvlan"
msgstr "Macvlan"
msgid "Macvlan Settings"
msgstr "Macvlan设置"
msgid "Interface"
msgstr "网络接口"
msgid "Index"
msgstr "序号"

View file

@ -0,0 +1,22 @@
-- Copyright (C) 2019 X-WRT <dev@x-wrt.com>
local net = require "luci.model.network".init()
local ifaces = net:get_interfaces() or { net:get_interface() }
m = Map("macvlan", translate("Macvlan"), translate("You can configure Macvlan virtual interfaces base on the real itnerface you want."))
s = m:section(TypedSection, "macvlan", translate("Macvlan Settings"))
s.addremove = true
s.anonymous = false
s.template = "cbi/tblsection"
hn = s:option(Value, "ifname", translate("Interface"))
hn.rmempty = false
for _, iface in ipairs(ifaces) do
if iface:type() ~= "macvlan" then
hn:value(iface:name(),"%s" % iface:name())
end
end
return m

View file

@ -34,46 +34,79 @@ _save_macaddr() {
}
}
_create_interface() {
local _masterifname
local _ifname=$1
config_get _masterifname "$1" ifname
uci batch <<-EOF
set network.$_ifname=interface
set network.$_ifname.type=macvlan
set network.$_ifname.proto=static
set network.$_ifname.masterintf=$_masterifname
EOF
}
# Configuration by interface
_setup_interface() {
local _ifname
config_get _ifname "$1" ifname
[ -z "$_ifname" ] && config_get _ifname "$1" ifname
#[ -z "$_ifname" ] && config_get _ifname "$1" ifname
# do not create macvlan for vlan
#case "$_ifname" in
# eth*.*) return ;;
#esac
local _type
config_get _type "$1" type
[ "$_type" = "macvlan" ] && [ "$(uci -q get macvlan.$1)" = "" ] && {
uci -q batch <<-EOF
delete network.$1
delete network.$1_dev
commit network
EOF
return
}
[ "$(echo $1 | grep _dev)" != "" ] && {
local _intfdev=$(sed 's/_dev//' $1)
uci -q get "network.$_intfdev.ifname" >/dev/null || {
logger -t "macvlan" "Remove network.$1"
uci -q batch <<-EOF
delete network.$1
commit network
delete macvlan.$1
commit macvlan
EOF
}
return
}
local _type
config_get _type "$1" type
#_type="$(uci -q get network.$1.type)
if [ "$(uci -q get macvlan.$1)" != "" ]; then
_type="macvlan"
fi
uci -q get "network.$1_dev.ifname" >/dev/null && {
uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu)
[ -n "$(uci -q get macvlan.$1.ifname)" ] && uci -q set network.$1_dev.ifname=$(uci -q get macvlan.$1.ifname)
[ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname)
[ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf)
[ -z "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr)
[ "$_type" = "macvlan" ] || {
logger -t "macvlan" "Remove network.$1_dev"
uci -q batch <<-EOF
delete network.$1_dev
set network.$1.ifname=$(uci -q get network.$1.masterintf)
delete network.$1.masterintf
EOF
}
[ "$_type" = "macvlan" ] && {
local interface
config_get _interface "$1" interface
[ -n "$_interface" ] && {
logger -t "macvlan" "Remove network.$1_dev"
uci -q batch <<-EOF
delete network.$1.interface
delete network.$1
set network.$1_dev.ifname=$_interface
EOF
}
@ -83,7 +116,7 @@ _setup_interface() {
}
[ "$_type" = "macvlan" ] || return 0
[ -z "$_ifname" ] && _ifname=$(uci -q get macvlan.$1.ifname)
uci -q batch <<-EOF
set network.$1_dev=device
set network.$1_dev.name=$1
@ -103,6 +136,8 @@ _setup_interface() {
start_service() {
. /lib/functions.sh
config_load macvlan
config_foreach _create_interface macvlan
config_load network
config_foreach _setup_interface interface
config_foreach _save_macaddr interface
@ -114,5 +149,5 @@ reload_service() {
}
service_triggers() {
procd_add_reload_trigger network
procd_add_reload_trigger network macvlan
}

View file

@ -0,0 +1,11 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@macvlan[-1]
add ucitrack macvlan
set ucitrack.@macvlan[-1].init=macvlan
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0

View file

@ -10,6 +10,7 @@ LUCI_DEPENDS:=+msmtp-mta
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -10,6 +10,7 @@ LUCI_DEPENDS:=+mlvpn
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -2,5 +2,6 @@ module("luci.controller.mlvpn", package.seeall)
function index()
--entry({"admin", "openmptcprouter", "mlvpn"}, cbi("mlvpn"), _("MLVPN"))
entry({"admin", "services", "mlvpn"}, cbi("mlvpn"), _("MLVPN"))
--entry({"admin", "services", "mlvpn"}, cbi("mlvpn"), _("MLVPN"))
entry({"admin", "vpn", "mlvpn"}, cbi("mlvpn"), _("MLVPN"))
end

View file

@ -8,6 +8,6 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for MPTCP
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -39,13 +39,24 @@ function multipath_bandwidth()
local uci = luci.model.uci.cursor()
uci:foreach("network", "interface", function(s)
local dev = s["ifname"] or ""
local intname = s[".name"]
local dev = get_device(intname)
if dev == "" then
dev = get_device(s["ifname"])
end
local multipath = s["multipath"] or ""
if dev ~= "lo" and dev ~= "" then
local multipath = s["multipath"] or "off"
if multipath == "" then
multipath = uci:get("openmptcprouter", intname, "multipath") or ""
end
if multipath == "" then
multipath = "off"
end
if multipath == "on" or multipath == "master" or multipath == "backup" or multipath == "handover" then
local bwc = luci.sys.exec("luci-bwc -i %q 2>/dev/null" % dev) or ""
if bwc ~= nil then
result[dev] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
--result[dev] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
result[intname] = "[" .. string.gsub(bwc, '[\r\n]', '') .. "]"
else
result[dev] = "[]"
end
@ -59,7 +70,11 @@ end
function get_device(interface)
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
return dump['l3_device']
if dump then
return dump['l3_device']
else
return ""
end
end
function mptcp_check_trace(iface)

View file

@ -32,6 +32,7 @@ mtcpsch:value("roundrobin", translate("round-robin"))
mtcpsch:value("redundant", translate("redundant"))
if uname.release:sub(1,4) == "4.19" then
mtcpsch:value("blest", translate("BLEST"))
mtcpsch:value("ecf", translate("ECF"))
end
local mtcpsyn = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries"))
mtcpsyn.datatype = "uinteger"

View file

@ -24,6 +24,15 @@
local ntm = require "luci.model.network".init()
local uci = require "luci.model.uci".cursor()
function get_device(interface)
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump['l3_device'] ~= "" then
return dump['l3_device']
else
return interface
end
end
local dev
local devices = { "all" }
for _, dev in ipairs(ntm:get_networks()) do
@ -35,7 +44,7 @@
--end
end
local curdev = luci.http.formvalue("dev") or "all"
local curifname = luci.http.formvalue("dev") or "all"
-%>
<%+header%>
@ -96,7 +105,7 @@
);
}
<% if curdev == "all" then %>
<% if curifname == "all" then %>
var all = true;
var bwxhr = new XHR();
@ -652,7 +661,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", curdev)%>', null,
XHR.poll(3, '<%=build_url("admin/network/mptcp/interface_bandwidth", curifname)%>', null,
function(x, data)
{
var data_max = 0;
@ -762,12 +771,15 @@
<h2><a id="content" name="content"><%:Realtime Traffic%></a></h2>
<ul class="cbi-tabmenu">
<% for _, dev in ipairs(devices) do %>
<li class="cbi-tab<%= dev == curdev and "" or "-disabled" %>"><a href="?dev=<%=pcdata(dev)%>"><%=pcdata(dev)%></a></li>
<% 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>
<% end %>
</ul>
<% if curdev == "all" then %>
<% if curifname == "all" then %>
<strong><%:Download:%></strong>
<embed id="dnsvg" style="width:100%; height:300px; border:1px solid #000000; background-color:#FFFFFF" src="<%=resource%>/bandwidth.svg" />

View file

@ -1,131 +1,281 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:652
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
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
msgid "Average:"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:34
msgid "BLEST"
msgstr ""
#: luci-app-mptcp/luasrc/controller/mptcp.lua:11
msgid "Bandwidth"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:43
msgid "Check if MPTCP between interface and server is working."
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
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
msgid "Current:"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:39
msgid "Default is bbr"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:772
msgid "Download:"
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
msgid "Error"
msgstr ""
#: luci-app-mptcp/luasrc/controller/mptcp.lua:18
msgid "Established connections"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:44
msgid "Fullmesh subflows for each pair of IP addresses"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:793
msgid "Inbound:"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:48
msgid "Interface"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:55
msgid "Interfaces Settings"
msgstr ""
#: 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 ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:79
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:563
msgid "MB/s"
msgstr ""
#: luci-app-mptcp/luasrc/controller/mptcp.lua:9
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:7
msgid "MPTCP"
msgstr ""
#: luci-app-mptcp/luasrc/controller/mptcp.lua:16
msgid "MPTCP Fullmesh"
msgstr ""
#: 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 ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:18
msgid "Multipath Debug"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:12
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:56
msgid "Multipath TCP"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:36
msgid "Multipath TCP SYN retries"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:15
msgid "Multipath TCP checksum"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:21
msgid "Multipath TCP path-manager"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:29
msgid "Multipath TCP scheduler"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:27
msgid "Netlink"
msgstr ""
#: 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:56
msgid "One interface must be set as master"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:803
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
msgid "Peak:"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:47
msgid "Re-create fullmesh subflows after a timeout"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:762
msgid "Realtime Traffic"
msgstr ""
#: luci-app-mptcp/luasrc/controller/mptcp.lua:10
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:45
msgid "Settings"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65
msgid "Test"
msgstr ""
#: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:778
msgid "Upload:"
msgstr ""
#: 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 ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:60
msgid "backup"
msgstr ""
#: 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 ""
#: 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 ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:58
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
msgid "enable"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:57
msgid "enabled"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:23
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: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 ""
#: 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 ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:59
msgid "master"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:24
msgid "ndiffports"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:51
msgid "ndiffports subflows number"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:32
msgid "redundant"
msgstr ""
#: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:31
msgid "round-robin"
msgstr ""

View file

@ -13,6 +13,7 @@ KCONFIG:=CONFIG_NGINX_STREAM_CORE_MODULE
PKG_LICENSE:=MIT
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -10,6 +10,7 @@ LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +ipta
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -18,9 +18,11 @@ hn.datatype = "hostname"
hn.optional = false
hn.rmempty = true
ifd = s:option(Value, "interface", translate("Interface"))
ifd = s:option(ListValue, "interface", translate("Interface"))
ifd.rmempty = true
dn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "ips", translate("IPs and Networks"))
s.addremove = true
s.anonymous = true
@ -31,9 +33,34 @@ ip.datatype = "ipaddr"
ip.rmempty = true
ip.optional = false
ifi = s:option(Value, "interface", translate("Interface"))
ifi = s:option(ListValue, "interface", translate("Interface"))
ifi.rmempty = true
inn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "dest_port", translate("Ports destination"))
s.addremove = true
s.anonymous = true
s.template = "cbi/tblsection"
dp = s:option(Value, "dport", translate("port"))
dp.rmempty = true
dp.optional = false
proto = s:option(ListValue, "proto", translate("Protocol"))
proto:value("all",translate("ALL"))
proto:value("tcp","TCP")
proto:value("udp","UDP")
proto:value("icmp","ICMP")
proto.rmempty = true
proto.optional = false
ifdp = s:option(ListValue, "interface", translate("Interface"))
ifdp.rmempty = true
dpn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "macs", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
s.addremove = true
s.anonymous = true
@ -50,9 +77,11 @@ sys.net.host_hints(function(m, v4, v6, name)
end
end)
ifm = s:option(Value, "interface", translate("Interface"))
ifm = s:option(ListValue, "interface", translate("Interface"))
ifm.rmempty = true
macn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "lan_ip", translate("Source lan IP address or network"))
s.addremove = true
s.anonymous = true
@ -63,9 +92,11 @@ ip.datatype = "ipaddr"
ip.rmempty = true
ip.optional = false
ifl = s:option(Value, "interface", translate("Interface"))
ifl = s:option(ListValue, "interface", translate("Interface"))
ifl.rmempty = true
lanipn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "asns", translate("<abbr tittle=\"Autonomous System Number\">ASN</abbr>"))
s.addremove = true
s.anonymous = true
@ -75,15 +106,17 @@ asn = s:option(Value, "asn", translate("ASN"))
asn.rmempty = true
asn.optional = false
ifa = s:option(Value, "interface", translate("Interface"))
ifa = s:option(ListValue, "interface", translate("Interface"))
ifa.rmempty = true
s = m:section(TypedSection, "dpis", translate("Protocols"))
asnn = s:option(Value,"note",translate("Note"))
s = m:section(TypedSection, "dpis", translate("Protocols and services"))
s.addremove = true
s.anonymous = true
s.template = "cbi/tblsection"
dpi = s:option(Value, "proto", translate("Protocol"))
dpi = s:option(ListValue, "proto", translate("Protocol/Service"))
dpi.rmempty = true
dpi.optional = false
local xt_ndpi_available = nixio.fs.access("/proc/net/xt_ndpi/proto")
@ -95,7 +128,7 @@ if xt_ndpi_available then
table.insert(protos,b)
end
end
table.sort(protos)
table.sort(protos, function(a, b) return a:upper() < b:upper() end)
for _,b in ipairs(protos) do
dpi:value(b,"%s" % tostring(b))
end
@ -104,18 +137,23 @@ end
ifp = s:option(ListValue, "interface", translate("Interface"))
ifp.rmempty = true
psn = s:option(Value,"note",translate("Note"))
ifd.default = "all"
ifi.default = "all"
ifp.default = "all"
ifm.default = "all"
ifl.default = "all"
ifa.default = "all"
ifdp.default = "all"
ifd:value("all",translate("Default"))
ifi:value("all",translate("Default"))
ifp:value("all",translate("Default"))
ifm:value("all",translate("Default"))
ifl:value("all",translate("Default"))
ifa:value("all",translate("Default"))
ifdp:value("all",translate("Default"))
for _, iface in ipairs(ifaces) do
if iface:is_up() then
ifd:value(iface:name(),"%s" % iface:name())
@ -124,6 +162,7 @@ for _, iface in ipairs(ifaces) do
ifm:value(iface:name(),"%s" % iface:name())
ifl:value(iface:name(),"%s" % iface:name())
ifa:value(iface:name(),"%s" % iface:name())
ifdp:value(iface:name(),"%s" % iface:name())
end
end

View file

@ -9,36 +9,48 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:64
msgid "<abbr title=\"Media Access Control\">MAC</abbr>-Address"
msgstr "Adresse <abbr title=\"Media Access Control\">MAC</abbr>"
msgid "Add"
msgstr "Ajouter"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:100
msgid "<abbr tittle=\"Autonomous System Number\">ASN</abbr>"
msgstr ""
msgid "All"
msgstr "Tout"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:52
msgid "ALL"
msgstr "TOUT"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:105
msgid "ASN"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:9
msgid "Bypass"
msgstr "Contourne"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:150
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:151
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:152
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:153
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:154
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:155
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:156
msgid "Default"
msgstr "Défaut"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:16
msgid "Domain"
msgstr "Domaine"
msgid "Domain, IP or network"
msgstr "Domaine, IP ou réseau"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:11
msgid "Domains"
msgstr "Domaines"
msgid "Domains, ips or networks"
msgstr "Domaines, IPs et réseaux"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:9
msgid ""
"Here you can bypass ShadowSocks and VPN. If you set Interface to Default "
"this use any working interface."
@ -46,29 +58,90 @@ msgstr ""
"Ici vous pouvez contouner Shadowsocks et le VPN. Si vous mettez l'interface "
"à défaut, ça utilisera n'importe qu'elle interface fonctionnant."
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:31
msgid "IP"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:90
msgid "IP Address"
msgstr "Adresse IP"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:26
msgid "IPs and Networks"
msgstr "IPs et réseaux"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:21
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:36
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:59
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:80
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:95
#: 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 ""
msgid "MAC-Address"
msgstr "Adresse MAC"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:24
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:39
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:62
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:83
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:98
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:112
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:140
msgid "Note"
msgstr "Note"
#: luci-app-omr-bypass/luasrc/controller/omr-bypass.lua:6
msgid "OMR-Bypass"
msgstr ""
msgid "Output interface"
msgstr "Interface de sortie"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:42
msgid "Ports destination"
msgstr "Ports de destination"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:51
msgid "Protocol"
msgstr "Protocole"
msgid "Protocols"
msgstr "Protocoles"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:119
msgid "Protocol/Service"
msgstr "Protocole/Service"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:114
msgid "Protocols and services"
msgstr "Protocoles et services"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:69
msgid "Source MAC-Address"
msgstr "Adresse MAC source"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:85
msgid "Source lan IP address or network"
msgstr "Adresse IP source ou réseau"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:47
msgid "port"
msgstr "port"
#~ msgid "Add"
#~ msgstr "Ajouter"
#~ msgid "All"
#~ msgstr "Tout"
#~ msgid "Domain, IP or network"
#~ msgstr "Domaine, IP ou réseau"
#~ msgid "Domains, ips or networks"
#~ msgstr "Domaines, IPs et réseaux"
#~ msgid "MAC-Address"
#~ msgstr "Adresse MAC"
#~ msgid "Output interface"
#~ msgstr "Interface de sortie"
#~ msgid "Protocols"
#~ msgstr "Protocoles"
#~ msgid ""
#~ "If empty, multipath master interface is used if up else any other up "

View file

@ -1,58 +1,110 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:64
msgid "<abbr title=\"Media Access Control\">MAC</abbr>-Address"
msgstr ""
msgid "Add"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:100
msgid "<abbr tittle=\"Autonomous System Number\">ASN</abbr>"
msgstr ""
msgid "All"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:52
msgid "ALL"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:105
msgid "ASN"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:9
msgid "Bypass"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:150
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:151
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:152
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:153
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:154
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:155
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:156
msgid "Default"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:16
msgid "Domain"
msgstr ""
msgid "Domain, IP or network"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:11
msgid "Domains"
msgstr ""
msgid "Domains, ips or networks"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:9
msgid ""
"Here you can bypass ShadowSocks and VPN. If you set Interface to Default "
"this use any working interface."
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:31
msgid "IP"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:90
msgid "IP Address"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:26
msgid "IPs and Networks"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:21
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:36
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:59
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:80
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:95
#: 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 ""
msgid "MAC-Address"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:24
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:39
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:62
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:83
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:98
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:112
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:140
msgid "Note"
msgstr ""
#: luci-app-omr-bypass/luasrc/controller/omr-bypass.lua:6
msgid "OMR-Bypass"
msgstr ""
msgid "Output interface"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:42
msgid "Ports destination"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:51
msgid "Protocol"
msgstr ""
msgid "Protocols"
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:119
msgid "Protocol/Service"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:114
msgid "Protocols and services"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:69
msgid "Source MAC-Address"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:85
msgid "Source lan IP address or network"
msgstr ""
#: luci-app-omr-bypass/luasrc/model/cbi/omr-bypass.lua:47
msgid "port"
msgstr ""

View file

@ -1,2 +1,2 @@
#!/bin/sh
/etc/init.d/omr-bypass reload
/etc/init.d/omr-bypass reload_rules

View file

@ -4,9 +4,25 @@
START=99
STOP=10
USE_PROCD=1
EXTRA_COMMANDS="reload_rules bypass_asn"
. /usr/lib/unbound/iptools.sh
_add_proto() {
protoname=$1
if [ "$(dd if=/proc/net/xt_ndpi/proto bs=4096 2> /dev/null | grep $protoname)" = "" ]; then
echo "add_custom $protoname" >/proc/net/xt_ndpi/proto
fi
hosts="$( uci -q get omr-bypass.$protoname.url )"
for url in $hosts; do
echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto
done
ip="$( uci -q get omr-bypass.$protoname.ip )"
for ip in $ips; do
echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto
done
}
_bypass_ip() {
local ip=$1
local type=$2
@ -37,11 +53,11 @@ _bypass_domain() {
domain=$(echo $domain | sed 's:^\.::')
#logger -t "omr-bypass" "Get IPs of $domain..."
if [ -z $RELOAD ]; then
resolve=$(dig a +timeout=3 +nocmd +noall +answer $domain | awk '{print $5}')
resolve=$(dig a +timeout=1 +nocmd +noall +answer $domain | awk '{print $5}')
for ip in $resolve; do
_bypass_ip $ip $intf
done
resolve=$(dig aaaa +timeout=3 +nocmd +noall +answer $domain | awk '{print $5}')
resolve=$(dig aaaa +timeout=1 +nocmd +noall +answer $domain | awk '{print $5}')
for ip in $resolve; do
_bypass_ip $ip $intf
done
@ -71,23 +87,23 @@ _bypass_mac() {
[ -z "$intf" ] && intf="all"
[ -z "$mac" ] && return
if [ "$intf" = "all" ]; then
iptables-restore --wait=60 --noflush <<-EOF
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539
COMMIT
EOF
else
iptables-restore --wait=60 --noflush <<-EOF
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -m mac --mac-source $mac -j MARK --set-mark 0x539$intfid
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -m mac --mac-source $mac -j MARK --set-mark 0x6539$intfid
COMMIT
@ -104,26 +120,69 @@ _bypass_lan_ip() {
[ -z "$intf" ] && intf="all"
[ -z "$ip" ] && return
valid_ip4=$(valid_subnet4 $ip)
valid_ip6=$(valid_subnet6 $ip)
if [ "$intf" = "all" ]; then
iptables-restore --wait=60 --noflush <<-EOF
if [ "$valid_ip4" = "ok" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -s $ip -j MARK --set-mark 0x539
COMMIT
EOF
elif [ "$valid_ip6" = "ok" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539
COMMIT
EOF
fi
else
if [ "$valid_ip4" = "ok" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -s $ip -j MARK --set-mark 0x539$intfid
COMMIT
EOF
elif [ "$valid_ip6" = "ok" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539$intfid
COMMIT
EOF
fi
fi
}
_bypass_dest_port() {
local intf
config_get dport $1 dport
config_get proto $1 proto
config_get intf $1 interface
local intfid="$(uci -q get omr-bypass.$intf.id)"
[ -z "$intf" ] && intf="all"
[ -z "$dport" ] && return
[ -z "$proto" ] && return
if [ "$intf" = "all" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -s $ip -j MARK --set-mark 0x539
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539
COMMIT
EOF
else
iptables-restore --wait=60 --noflush <<-EOF
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -s $ip -j MARK --set-mark 0x539$intfid
-A omr-bypass --protocol $proto --destination-port $dport -j MARK --set-mark 0x539$intfid
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6 -s $ip -j MARK --set-mark 0x6539$intfid
-A omr-bypass6 --protocol $proto --destination-port $dport -j MARK --set-mark 0x6539$intfid
COMMIT
EOF
fi
@ -139,23 +198,23 @@ _bypass_proto() {
[ -z "$intf" ] && intf="all"
[ -z "$proto" ] && return
if [ "$intf" = "all" ]; then
iptables-restore --wait=60 --noflush <<-EOF
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539
COMMIT
EOF
else
iptables-restore --wait=60 --noflush <<-EOF
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass-dpi -m ndpi --proto $proto -j MARK --set-mark 0x539$intfid
COMMIT
EOF
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass6-dpi -m ndpi --proto $proto -j MARK --set-mark 0x6539$intfid
COMMIT
@ -185,7 +244,8 @@ _intf_rule() {
[ -z "$count" ] && return
[ -z "$intf" ] && return
[ "$(echo $1 | grep _dev)" != "" ] && return
[ -z "$RELOAD" ] && {
[ -z "$RELOAD" ] || [ "$(ipset --list | grep omr_dst_bypass_$intf)" = "" ] && {
unset RELOAD
ipset -q flush omr_dst_bypass_$intf > /dev/null 2>&1
ipset -q flush omr6_dst_bypass_$intf > /dev/null 2>&1
ipset -q --exist restore <<-EOF
@ -211,15 +271,15 @@ _intf_rule() {
ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count > /dev/null 2>&1
fi
}
if [ "$(iptables -w 40 -t mangle -L | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore --wait=60 --noflush <<-EOF
if [ "$(iptables --wait=40 -t mangle -L -n | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-I omr-bypass 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
COMMIT
EOF
fi
if [ "$(iptables -w 40 -t nat -L | grep ss_rules_pre_src)" != "" ] && [ "$(iptables -w 40 -t nat -L | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore --wait=60 --noflush <<-EOF
if [ "$(iptables --wait=40 -t nat -L -n | grep ss_rules_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*nat
-I ss_rules_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j RETURN
-I ss_rules_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j RETURN
@ -229,15 +289,15 @@ _intf_rule() {
COMMIT
EOF
fi
if [ "$(ip6tables -w 40 -t mangle -L | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore --wait=60 --noflush <<-EOF
if [ "$(ip6tables --wait=40 -t mangle -L | 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 -w 40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables -w 40 -t nat -L | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore --wait=60 --noflush <<-EOF
if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*nat
-I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN
-I ss_rules6_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j RETURN
@ -272,6 +332,11 @@ _bypass_asn() {
}
bypass_asn() {
config_load omr-bypass
config_foreach _bypass_asn asns
}
_bypass_omr_server() {
local ip
config_get ip $1 ip
@ -286,6 +351,12 @@ boot() {
start_service() {
#local count
logger -t "omr-bypass" "Starting OMR-ByPass..."
config_load omr-bypass
config_foreach _add_proto proto
[ -n "$RELOAD" ] && [ "$(ipset --list | grep omr_dst_bypass_all)" = "" ] && {
unset RELOAD
}
[ -z "$RELOAD" ] && {
ipset -q flush omr_dst_bypass_all > /dev/null 2>&1
ipset -q flush omr6_dst_bypass_all > /dev/null 2>&1
@ -294,26 +365,23 @@ start_service() {
create omr6_dst_bypass_all hash:net family inet6 hashsize 64
EOF
}
iptables-save --counters | grep -v omr-bypass | iptables-restore --counters
iptables-restore --wait=60 --noflush <<-EOF
iptables-save --counters | grep -v omr-bypass | iptables-restore -w --counters
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
:omr-bypass -
-I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-bypass
COMMIT
EOF
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore --counters
ip6tables-restore --wait=60 --noflush <<-EOF
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
:omr-bypass6 -
-I PREROUTING 1 -m addrtype ! --dst-type LOCAL -j omr-bypass6
COMMIT
EOF
config_load network
config_foreach _intf_rule interface
local ndpi_rules=""
config_load openmptcprouter
config_foreach _bypass_omr_server server
@ -321,6 +389,7 @@ start_service() {
config_foreach _bypass_ip_set ips
config_foreach _bypass_mac macs
config_foreach _bypass_lan_ip lan_ip
config_foreach _bypass_dest_port dest_port
config_foreach _bypass_asn asns
dnsmasqipset=$(uci -q get dhcp.@dnsmasq[0].ipset | sed 's/ /\n/g' | grep -v dst_bypass)
uci -q delete dhcp.@dnsmasq[0].ipset
@ -346,15 +415,15 @@ start_service() {
ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1
ip -6 rule add prio 1 fwmark 0x6539 lookup 6991337 > /dev/null 2>&1
if [ "$(iptables -w 40 -t mangle -L | grep 'match-set omr_dst_bypass_all dst MARK set')" = "" ]; then
iptables-restore --wait=60 --noflush <<-EOF
if [ "$(iptables --wait=40 -t mangle -L -n | grep 'match-set omr_dst_bypass_all dst MARK set')" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-A omr-bypass -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539
COMMIT
EOF
fi
if [ "$(iptables -w 40 -t nat -L | grep ss_rules_pre_src)" != "" ] && [ "$(iptables -w 40 -t nat -L | grep omr_dst_bypass_all)" = "" ]; then
iptables-restore --wait=60 --noflush <<-EOF
if [ "$(iptables --wait=40 -t nat -L -n | grep ss_rules_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*nat
-I ss_rules_dst 1 -m set --match-set omr_dst_bypass_all dst -j RETURN
-I ss_rules_local_out 1 -m set --match-set omr_dst_bypass_all dst -j RETURN
@ -364,14 +433,14 @@ start_service() {
COMMIT
EOF
fi
if [ "$(ip6tables -w 40 -t mangle -L | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
if [ "$(ip6tables --wait=40 -t mangle -L | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then
ip6tables-restore --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 -w 40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables -w 40 -t nat -L | grep omr6_dst_bypass_all)" = "" ]; then
if [ "$(ip6tables --wait=40 -t nat -L | grep ss_rules6_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L | grep omr6_dst_bypass_all)" = "" ]; then
ip6tables-restore --wait=60 --noflush <<-EOF
*nat
-I ss_rules6_dst 1 -m set --match-set omr6_dst_bypass_all dst -j RETURN
@ -383,8 +452,8 @@ start_service() {
EOF
fi
iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore --counters
iptables-restore --wait=60 --noflush <<-EOF
iptables-save --counters | grep -v omr-bypass-dpi | iptables-restore -w --counters
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
:omr-bypass-dpi -
-A PREROUTING -m addrtype ! --dst-type LOCAL -j omr-bypass-dpi
@ -402,16 +471,22 @@ start_service() {
config_load omr-bypass
config_foreach _bypass_proto dpis
[ -z "$RELOAD" ] && /etc/init.d/dnsmasq restart
[ -n "$RELOAD" ] && /etc/init.d/dnsmasq restart
[ -z "$RELOAD" ] && {
logger -t "omr-bypass" "Restart dnsmasq..."
/etc/init.d/dnsmasq restart
}
[ -n "$RELOAD" ] && {
logger -t "omr-bypass" "Reload dnsmasq..."
/etc/init.d/dnsmasq reload
}
logger -t "omr-bypass" "OMR-ByPass is running"
}
stop_service() {
iptables-save --counters | grep -v omr-bypass | iptables-restore --counters
iptables-save --counters | grep -v omr_dst | iptables-restore --counters
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore --counters
ip6tables-save --counters | grep -v omr6_dst | ip6tables-restore --counters
iptables-save --counters | grep -v omr-bypass | iptables-restore -w --counters
iptables-save --counters | grep -v omr_dst | iptables-restore -w --counters
ip6tables-save --counters | grep -v omr-bypass6 | ip6tables-restore -w --counters
ip6tables-save --counters | grep -v omr6_dst | ip6tables-restore -w --counters
for setname in $(ipset -n list | grep "omr_"); do
ipset destroy "$setname" 2>/dev/null || true
done
@ -424,6 +499,10 @@ service_triggers() {
}
reload_service() {
start
}
reload_rules() {
[ "$( ipset -n list | grep omr_ )" = "" ] && return 0
RELOAD=1
start

View file

@ -64,5 +64,26 @@ if [ "$(uci -q get firewall.omr-bypass)" = "" ]; then
EOF
fi
if [ "$(uci -q get omr-bypass.m6replay)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set omr-bypass.m6replay=proto
add_list omr-bypass.m6replay.url='m6web.fr'
add_list omr-bypass.m6replay.url='6play.fr'
add_list omr-bypass.m6replay.url='6cloud.fr'
commit omr-bypass
EOF
fi
if [ "$(uci -q get omr-bypass.lesnumeriques)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set omr-bypass.lesnumeriques=proto
add_list omr-bypass.lesnumeriques.url='lesnumeriques.com'
add_list omr-bypass.lesnumeriques.url='botscorner.com'
add_list omr-bypass.lesnumeriques.url='app.botscorner.com'
commit omr-bypass
EOF
fi
if [ ! -f /etc/crontabs/root ] || [ "$(cat /etc/crontabs/root | grep bypass)" = "" ]; then
echo "0 2 * * * /etc/init.d/omr-bypass bypass_asn" >> /etc/crontabs/root
fi
rm -f /tmp/luci-indexcache
exit 0

View file

@ -9,6 +9,7 @@ LUCI_TITLE:=LuCI Interface to DSCP
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -22,10 +22,10 @@ t:value("cs0", translate("CS0 - Normal/Best Effort"))
t:value("cs1", translate("CS1 - Low priority"))
t:value("cs2", translate("CS2 - High priority"))
t:value("cs3", translate("CS3 - SIP"))
t:value("cs4", translate("CS4 - Streaming video"))
t:value("cs5", translate("CS5"))
t:value("cs4", translate("CS4 - Real-Time Interactive"))
t:value("cs5", translate("CS5 - Broadcast video"))
t:value("cs6", translate("CS6 - Network routing"))
t:value("cs7", translate("CS7"))
t:value("cs7", translate("CS7 - Latency sensitive"))
t:value("ef", translate("EF Voice"))
c = s:option(Value, "comment", translate("Comment"))

View file

@ -1,4 +1,5 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
-- Licensed to the public under the Apache License 2.0.
local uci = luci.model.uci.cursor()
@ -73,10 +74,10 @@ t = s:option(ListValue, "class", translate("Class"))
t:value("cs1", translate("CS1 - Low priority"))
t:value("cs2", translate("CS2 - High priority"))
t:value("cs3", translate("CS3 - SIP"))
t:value("cs4", translate("CS4 - Streaming video"))
t:value("cs5", translate("CS5"))
t:value("cs4", translate("CS4 - Real-Time Interactive"))
t:value("cs5", translate("CS5 - Broadcast Video"))
t:value("cs6", translate("CS6 - Network routing"))
t:value("cs7", translate("CS7"))
t:value("cs7", translate("CS7 - Latency sensitive"))
t:value("ef", translate("EF - Voice"))
comment = s:option(Value, "comment", translate("Comment"))

View file

@ -0,0 +1,157 @@
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"
"Language: fr\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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
msgid "CS5"
msgstr ""
#: 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 ""
#: 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 "Règles de classification"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:31
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:82
msgid "Comment"
msgstr "Commentaire"
#: 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 "DSCP Domaines"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
msgid "DSCP by domain"
msgstr "DSCP par domaine"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:57
msgid "Destination host"
msgstr "Hôte de destination"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:63
msgid "Destination ports"
msgstr "Ports de destination"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:10
msgid "Differentiated services"
msgstr ""
#: 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 "Domaine"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:10
msgid "Domains"
msgstr "Domaines"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
msgid "EF - Voice"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:29
msgid "EF Voice"
msgstr ""
#: 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 "Protocole"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
msgid "Set DSCP by domains."
msgstr "Configurer DSCP par domaine"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:46
msgid "Source host"
msgstr "Hôte source"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:51
msgid "Source ports"
msgstr "Ports source"
#: 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 ""
#: 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 "Tous"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:33
msgid "both"
msgstr "Les deux"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:32
msgid "download"
msgstr "Téléchargement"
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:31
msgid "upload"
msgstr "Envoie"

View file

@ -0,0 +1,146 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77
msgid "CS5"
msgstr ""
#: 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 ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:15
msgid "Classification Rules"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:31
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:82
msgid "Comment"
msgstr ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
msgid "DSCP by domain"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:57
msgid "Destination host"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:63
msgid "Destination ports"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:10
msgid "Differentiated services"
msgstr ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:10
msgid "Domains"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80
msgid "EF - Voice"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:29
msgid "EF Voice"
msgstr ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:8
msgid "Set DSCP by domains."
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:46
msgid "Source host"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:51
msgid "Source ports"
msgstr ""
#: 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 ""
#: 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 ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:33
msgid "both"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:32
msgid "download"
msgstr ""
#: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:31
msgid "upload"
msgstr ""

View file

@ -18,6 +18,20 @@ config classify
option src_port '53,5353'
option comment 'DNS tcp'
config classify
option direction 'both'
option proto 'tcp'
option class 'cs6'
option dest_port '65001,65301,65011'
option comment 'OMR vpn'
config classify
option direction 'both'
option proto 'udp'
option class 'cs6'
option dest_port '65001'
option comment 'OMR vpn'
config domains
option name 'googlevideo.com'
option class 'cs4'
@ -59,7 +73,7 @@ config domains
option comment 'VeVo'
config domains
option name 'audio-fa.scdn.cot'
option name 'audio-fa.scdn.com'
option class 'cs4'
option comment 'Spotify'

View file

@ -9,6 +9,7 @@ LUCI_DEPENDS:=+omr-quota
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -1,43 +1,60 @@
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"
"Language-Team: \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"
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
msgid "Add"
msgstr "Ajouter"
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
msgid "Enable"
msgstr "Activé"
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
msgid "Interfaces"
msgstr "Interfaces"
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:33
msgid "Interval between check (s)"
msgstr "Intervalle entre les essais (s)"
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:9
msgid "Invalid"
msgstr "Invalide"
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
msgid "Monthly Quota"
msgstr "Quota mensuel"
#: 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 ""
msgid "Set quota, when quota is reached interface state is set to down"
msgstr "Configurer le quota, quand le quota est atteint l'interface est désactivée"
#: 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 "Configurer le quota menseul, quand le quota est atteint l'interface est désactivée"
#: 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 ""
#~ msgid "Set quota, when quota is reached interface state is set to down"
#~ msgstr "Configurer le quota, quand le quota est atteint l'interface est désactivée"

View file

@ -1,32 +1,46 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8
msgid "Add"
msgstr ""
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:21
msgid "Enable"
msgstr ""
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10
msgid "Interfaces"
msgstr ""
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:33
msgid "Interval between check (s)"
msgstr ""
#: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:9
msgid "Invalid"
msgstr ""
#: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:8
msgid "Monthly Quota"
msgstr ""
#: 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 ""
msgid "Set quota, when quota is reached interface state is set to down"
#: 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 ""
#: 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 ""

View file

@ -10,6 +10,7 @@ LUCI_DEPENDS:=+omr-tracker
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -78,7 +78,7 @@ o.default = false
o.disabled = 0
o.enabled = 1
o = s:option(DynamicList, "hosts", translate("Hosts"))
o = s:option(DynamicList, "hosts", translate("Hosts"),translate("Must be IPs and not domains"))
o.placeholder = "4.2.2.1"
o.default = { "4.2.2.1", "8.8.8.8" }
o.rmempty = false

View file

@ -9,7 +9,8 @@ LUCI_TITLE:=LuCI Support for OpenMPTCProuter
LUCI_DEPENDS:=+luci-lib-json +rdisc6 +curl +bind-dig +tracebox
PKG_LICENSE:=GPLv3
include ../luci/luci.mk
#include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
define Package/luci-app-openmptcprouter/conffiles
/etc/sysctl.d/zzz_openmptcprouter.conf

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,36 @@
<%+header%>
<%
luci.sys.call("/etc/init.d/openmptcprouter-vps backup_list >/dev/null 2>/dev/null")
%>
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
<form class="inline" method="post" action="<%=url('admin/system/openmptcprouter/backupgr')%>">
<div class="cbi-map">
<h2 name="content"><%:Backup on server%></h2>
<fieldset class="cbi-section" id="networks">
<input type="hidden" name="token" value="<%=token%>" />
<%
uci:foreach("openmptcprouter","server", function(s)
servername = s[".name"]
%>
<h3><%=servername%></h3>
<%
if luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup") ~= nil then
%>
<div class="cbi-section-node">
<%:Last available backup on server:%> <%=os.date('%d-%b-%Y', luci.model.uci.cursor():get("openmptcprouter",servername,"lastbackup"))%>
</div>
<% else %>
<div class="cbi-section-node">
<%:No available backup on server.%>
</div>
<% end %>
<%
end)
%>
<input type="submit" class="cbi-button cbi-button-action important" name="restore" value="<%:Restore backup%>"/>
<input type="submit" class="cbi-button cbi-button-action important" name="save" value="<%:Send backup%>"/>
</fieldset>
</div>
</form>
<%+footer%>

View file

@ -1,12 +1,10 @@
<%+header%>
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
<form class="inline" method="post" action="<%=url('admin/system/openmptcprouter/update_vps')%>">
<div class="cbi-map">
<h2 name="content"><%:All OpenMPTCProuter settings%></h2>
<div class="cbi-section">
<pre><%=luci.sys.exec("uci show")%></pre>
</div>
<div class="cbi-map">
<h2 name="content"><%:All router settings%></h2>
<div class="cbi-section">
<pre><%=luci.sys.exec("uci show")%></pre>
</div>
</form>
</div>
<%+footer%>

View file

@ -17,9 +17,9 @@
<div class="cbi-map">
<h2 name="content"><%:Update VPS%></h2>
<fieldset class="cbi-section" id="update">
<div class="cbi-section-descr"><%:Update remotly OpenMPTCProuter server to latest version when needed.%> <b><%:Beta%></b></div>
<div class="cbi-section-descr"><%:Update remotly the server to latest version when needed.%> <b><%:Beta%></b></div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Update OpenMPTCProuter server%></label>
<label class="cbi-value-title"><%:Update server%></label>
<div class="cbi-value-field">
<input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="server" value="<%=servername%>" />
@ -47,25 +47,32 @@
<div class="cbi-section-node">
<div class="cbi-section-descr"></div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Redirects all ports from server to OpenMPTCProuter%></label>
<label class="cbi-value-title"><%:Redirects all ports from server to this router%></label>
<div class="cbi-value-field">
<input type="hidden" name="server.<%=servername%>" value="<%=servername%>" />
<input type="checkbox" name="redirect_ports.<%=servername%>" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter",servername,"redirect_ports") == "1" then %>checked<% end %>>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable ports redirection defined in firewall from server to this router%></label>
<div class="cbi-value-field">
<input type="hidden" name="server.<%=servername%>" value="<%=servername%>" />
<input type="checkbox" name="nofwredirect.<%=servername%>" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter",servername,"nofwredirect") == "1" then %>checked<% end %>>
</div>
</div>
</div>
<%
end)
%>
<%
local obfs_installed = nixio.fs.access("/usr/bin/obfs-local")
local v2ray_installed = nixio.fs.access("/usr/bin/obfs-local")
local v2ray_installed = nixio.fs.access("/usr/bin/v2ray-plugin")
if obfs_installed or v2ray_installed then
%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Enable ShadowSocks Obfuscating%></label>
<div class="cbi-value-field">
<input type="checkbox" name="obfs" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("shadowsocks-libev","tracker","obfs") == "1" then %>checked<% end %>>
<input type="checkbox" name="obfs" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("shadowsocks-libev","sss0","obfs") == "1" then %>checked<% end %>>
<br />
<div class="cbi-value-description">
<%:Obfuscating will be enabled on both side%>
@ -79,12 +86,12 @@
<%
if v2ray_installed then
%>
<option value="v2ray" <% if luci.model.uci.cursor():get("shadowsocks-libev","tracker","obfs_plugin") == "v2ray" then %>selected="selected"<% end %>>v2ray</option>
<option value="v2ray" <% if luci.model.uci.cursor():get("shadowsocks-libev","sss0","obfs_plugin") == "v2ray" then %>selected="selected"<% end %>>v2ray</option>
<%
end
if obfs_installed then
%>
<option value="obfs" <% if luci.model.uci.cursor():get("shadowsocks-libev","tracker","obfs_plugin") == "obfs" then %>selected="selected"<% end %>>simple-obfs</option>
<option value="obfs-simple" <% if luci.model.uci.cursor():get("shadowsocks-libev","sss0","obfs_plugin") == "obfs-simple" then %>selected="selected"<% end %>>simple-obfs</option>
<%
end
%>
@ -147,6 +154,46 @@
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable TCP Fast Open%></label>
<div class="cbi-value-field">
<input type="checkbox" name="disablefastopen" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter","settings","disable_fastopen") == "1" then %>checked<% end %>>
<br />
<div class="cbi-value-description">
<%:Disable TCP Fast Open on Linux and Shadowsocks configuration%>
</div>
</div>
</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 %>>
<br />
<div class="cbi-value-description">
<%:Save vnstats statistics on disk%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable gateway ping%></label>
<div class="cbi-value-field">
<input type="checkbox" name="disablegwping" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter","settings","disablegwping") == "1" then %>checked<% end %>>
<br />
<div class="cbi-value-description">
<%:Disable gateway ping status check%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable server ping%></label>
<div class="cbi-value-field">
<input type="checkbox" name="disableserverping" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("openmptcprouter","settings","disableserverping") == "1" then %>checked<% end %>>
<br />
<div class="cbi-value-description">
<%:Disable server ping status check%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Master interface selection%></label>
<div class="cbi-value-field">
@ -154,6 +201,7 @@
<option value="change" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "change" then %>selected="selected"<% end %>><%:On wizard change%></option>
<option value="dynamic" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "dynamic" then %>selected="selected"<% end %>><%:Dynamic change%></option>
<option value="static" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "static" then %>selected="selected"<% end %>><%:No change%></option>
<option value="redundant" <% if luci.model.uci.cursor():get("openmptcprouter","settings","master") == "redundant" then %>selected="selected"<% end %>><%:Redundant%></option>
</select>
</div>
</div>

View file

@ -40,36 +40,52 @@
var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
return b ? b.pop() : '';
}
function testPrivateIP(ip) {
if ( (/^(10)\.(.*)\.(.*)\.(.*)$/.test(ip)) || (/^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(.*)\.(.*)$/.test(ip)) || (/^(192)\.(168)\.(.*)\.(.*)$/.test(ip)) ){
return true;
} else {
return false;
}
}
XHR.poll(20, '/cgi-bin/luci/admin/system/openmptcprouter/interfaces_status', null,
function(x, mArray)
{
anonymize=getCookieValue("anonymize");
if (anonymize == "true")
{
mArray.openmptcprouter.wan_addr=replaceLastNChars(mArray.openmptcprouter.wan_addr,"x",6);
mArray.openmptcprouter.wan_addr6=replaceLastNChars(mArray.openmptcprouter.wan_addr6,"x",10);
mArray.openmptcprouter.service_addr=replaceLastNChars(mArray.openmptcprouter.service_addr,"x",6);
}
var status = document.getElementById('openmptcprouter_status');
var temp = '<figure class="tree">';
temp += '<ul>';
if (mArray !== null && mArray.openmptcprouter)
{
anonymize=getCookieValue("anonymize");
if (anonymize == "true")
{
mArray.openmptcprouter.wan_addr=replaceLastNChars(mArray.openmptcprouter.wan_addr,"x",6);
mArray.openmptcprouter.wan_addr6=replaceLastNChars(mArray.openmptcprouter.wan_addr6,"x",10);
mArray.openmptcprouter.service_addr=replaceLastNChars(mArray.openmptcprouter.service_addr,"x",6);
document.getElementById("anon").checked = true;
}
temp += '<li class="remote-from-lease">';
temp += '<a href="#">';
var equipmentIcon = '<img src="<%=resource%>/computer.png" />';
if (mArray.openmptcprouter.remote_from_lease)
if (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)
if (mArray.openmptcprouter.remote_from_lease == false)
{
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');
} else {
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 = "";
}
} else {
var title = String.format('<br /><strong>%s</strong>', _('Clients'))
var statusMessageClass = "";
var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
var statusMessage = "";
} else {
var title = String.format("You (%s)", mArray.openmptcprouter.remote_addr);
var statusMessageClass = "warning";
var statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
var statusMessage = "Your IP was not leased by openmptcprouter";
}
var content = "";
@ -86,7 +102,7 @@
}
temp += '<tr><td></td></tr><tr><td><a href="#" id="omr">';
var equipmentIcon = '<img src="<%=resource%>/overthebox.png" style:"top: 0px;" />';
var title = String.format("OpenMPTCProuter (%s)", mArray.openmptcprouter.local_addr);
var title = String.format("%s (%s)", mArray.openmptcprouter.hostname, mArray.openmptcprouter.local_addr);
var statusMessageClass = "";
var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
var statusMessage = "";
@ -98,24 +114,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) + " &#176;";
content += _('Core temp:') + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " &#176;";
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)
@ -123,8 +139,8 @@
for ( dhcpd in mArray.openmptcprouter.dhcpd )
{
var dhcp = mArray.openmptcprouter.dhcpd[dhcpd];
content += String.format('<span style="text-transform:capitalize;">%s</span> address: %s<br />', dhcp.interface, dhcp.router);
content += String.format('<span style="text-transform:capitalize;">%s</span> range: %s - %s<br />', dhcp.interface, 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);
}
}
@ -132,25 +148,25 @@
{
if (mArray.openmptcprouter.socks_service == false)
{
statusMessage += 'ShadowSocks is not running';
statusMessage += _('ShadowSocks is not running');
if (mArray.openmptcprouter.socks_service_key == false && mArray.openmptcprouter.socks_service_method !== "none")
{
statusMessage += ' <i>(empty key)</i>';
statusMessage += ' <i>(' + _('empty key') + ')</i>';
}
statusMessage += '<br/>';
}
}
if (mArray.openmptcprouter.fsro == true)
{
statusMessage += 'Filesystem is readonly<br/>';
statusMessage += _('Filesystem is readonly') + '<br/>';
}
if (mArray.openmptcprouter.tun_service == false)
{
statusMessage += 'GloryTUN 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 !== "")
@ -160,20 +176,20 @@
} else {
if (mArray.openmptcprouter.socks_service_enabled == false)
{
statusMessage += 'ShadowSocks is DISABLED<br/>';
statusMessage += _('ShadowSocks 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 += 'VPN IPv6 tunnel DOWN<br/>';
statusMessage += _('VPN IPv6 tunnel DOWN') + '<br/>';
} else if (mArray.openmptcprouter.wan_addr6 == '')
{
statusMessage += 'No IPv6 access<br/>';
statusMessage += _('No IPv6 access') + '<br/>';
}
}
if (statusMessage !== "")
@ -190,32 +206,33 @@
temp += '<a href="<%=url('admin/system/openmptcprouter/wizard')%>" id="omr-vps">';
var statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
var equipmentIcon = '<img src="<%=resource%>/server.png" />';
if (mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr)
{
var title = String.format("OpenMPTCProuter Server (%s)", mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
{
var title = String.format("OpenMPTCProuter Server (%s)", mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("Direct output (%s)", mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN")
{
var title = String.format("OpenMPTCProuter Server (%s)", mArray.openmptcprouter.ss_addr);
} else if (mArray.openmptcprouter.external_check == false) {
var title = String.format("OpenMPTCProuter Server ?");
} else {
var title = "No output";
}
content = "";
statusMessage = "";
if (mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_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")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.ss_addr);
} else if (mArray.openmptcprouter.external_check == false) {
var title = String.format("%s ?", mArray.openmptcprouter.vps_hostname);
} else {
var title = _('No output');
statusMessage += _('No output') + '<br/>';
}
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += 'No VPS IP address, No WAN IP address<br/>';
statusMessage += _('No VPS IP address, No WAN IP address') + '<br/>';
}
if (mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN")
{
statusMessage += 'Can\'t access and use OpenMPTCProuter server<br/>';
statusMessage += _('Can\'t access and use server part') + '<br/>';
}
if (statusMessage !== "")
{
@ -224,17 +241,17 @@
}
if (mArray.openmptcprouter.vps_status == "DOWN")
{
statusMessage += 'Can\'t ping server<br/>';
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 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>';
@ -243,7 +260,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/>';
}
if (statusMessage !== "" && statusMessageClass !== "error")
{
@ -252,37 +273,37 @@
}
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 />';
}
content += '<br />';
@ -291,7 +312,7 @@
temp += '</a></td></tr></table>';
temp += '</td>';
}
if (mArray.wans)
if (mArray !== null && (mArray.wans || mArray.tunnels))
{
temp += '<td><ul>';
var master = 0;
@ -327,13 +348,17 @@
}
// Populate info
var wanip = mArray.wans[i].wanip;
if (anonymize == "true")
if (anonymize == "true" && testPrivateIP(wanip) == false)
{
wanip=replaceLastNChars(wanip,"x",6);
}
var ipaddr = mArray.wans[i].ipaddr;
if (anonymize == "true" && testPrivateIP(ipaddr) == false)
{
ipaddr=replaceLastNChars(ipaddr,"x",6);
}
var whois = mArray.wans[i].whois;
var signal = mArray.wans[i].signal;
var multipath = mArray.wans[i].multipath;
if(multipath == 'master')
{
@ -342,10 +367,15 @@
var latency = mArray.wans[i].latency;
var mtu = mArray.wans[i].mtu;
var gateway = mArray.wans[i].gateway;
if (anonymize == "true" && testPrivateIP(gateway) == false)
{
gateway=replaceLastNChars(gateway,"x",6);
}
var gw_ping = mArray.wans[i].gw_ping;
var server_ping = mArray.wans[i].server_ping;
var ipv6_discover = mArray.wans[i].ipv6_discover;
var multipath_available = mArray.wans[i].multipath_available;
var multipath_state = mArray.wans[i].multipath_state;
var duplicateif = mArray.wans[i].duplicateif;
// Generate template
if(mArray.openmptcprouter.remote_from_lease == true && mArray.wans.length == 1)
@ -358,73 +388,255 @@
var equipmentIcon = String.format('<embed id="modem_%s" onload="setColorSVG(\'modem_%s\', \'%s\')" src="<%=resource%>/modem.svg" />', mArray.wans[i].name, mArray.wans[i].name, mArray.wans[i].color);
if (mArray.wans[i].gateway !== "")
{
var title = mArray.wans[i].label + " (" + mArray.wans[i].gateway + ")";
var title = mArray.wans[i].label + " (" + gateway + ")";
} else {
var title = mArray.wans[i].label;
}
//var content = String.format('%s<br />wan address: <strong>%s</strong><br />whois: %s<br />latency: %s ms<br />multipath: %s', stat, wanip, whois, latency, multipath);
var content = "";
if(ipaddr !== '')
{
content += String.format('ip address: <strong>%s</strong><br />', ipaddr);
content += String.format('%s <strong>%s</strong><br />',_('ip address:'), ipaddr);
}
if(wanip !== '')
{
content += String.format('wan address: <strong>%s</strong><br />', wanip);
content += String.format('%s <strong>%s</strong><br />',_('wan address:'), wanip);
}
if(whois !== '')
{
content += String.format('whois: %s<br />', whois);
content += String.format('%s %s<br />',_('whois:'), whois);
}
if(latency !== '')
{
content += String.format('latency: %s ms<br />', latency);
content += String.format('%s %s ms<br />',_('latency:'), latency);
}
if(mtu !== '')
{
content += String.format('mtu: %s<br />', mtu);
content += String.format('%s %s<br />',_('mtu:'), mtu);
}
if(signal !== '')
{
if (signal <= 0)
title += ' <img src="/luci-static/resources/icons/signal-0.png" />';
else if (signal < 25)
title += ' <img src="/luci-static/resources/icons/signal-0-25.png" />';
else if (signal < 50)
title += ' <img src="/luci-static/resources/icons/signal-25-50.png" />';
else if (signal < 75)
title += ' <img src="/luci-static/resources/icons/signal-50-75.png" />';
else
title += ' <img src="/luci-static/resources/icons/signal-75-100.png" />';
}
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.wans[i].gateway)
{
statusMessage += 'Wan IP and gateway are identical<br />';
statusMessage += _('Wan IP and gateway are identical') + '<br />';
statusMessageClass = "error";
}
if(multipath == 'master' && master > 1)
if(multipath == 'master')
{
statusMessage += 'Multipath master already defined<br />';
statusMessageClass = "error";
if (master > 1)
{
statusMessage += _('Multipath master already defined') + '<br />';
statusMessageClass = "error";
}
if(multipath_state !== 'on' && multipath_state !== '')
{
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 />';
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);
if(mArray.wans[i].qos && mArray.wans[i].download > 0 && mArray.wans[i].upload > 0)
{
content += String.format('traffic control: %s/%s kbps (%s)', mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos)
content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.wans[i].download, mArray.wans[i].upload, mArray.wans[i].qos)
}
temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
temp += '</a></li>';
}
for( var i = 0; i < mArray.tunnels.length; i++ )
{
// Get link color
mArray.tunnels[i].color = stringToColour(mArray.tunnels[i].name)
// Mwan status infos and colors
var stat = '';
var cssc = '';
switch (mArray.tunnels[i].status)
{
case 'OK':
stat = 'Online';
cssc = 'rgb(144, 240, 144)';
statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
statusMessageClass = "";
statusMessage = "";
break;
case 'ERROR':
stat = 'Offline';
cssc = 'rgb(240, 144, 144)';
statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png";
statusMessageClass = "error";
statusMessage = "";
break;
default:
stat = 'Unknown';
cssc = 'rgb(144, 240, 144)';
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
statusMessageClass = "warning";
statusMessage = "";
}
// Populate info
var wanip = mArray.tunnels[i].wanip;
if (anonymize == "true" && testPrivateIP(wanip) == false)
{
wanip=replaceLastNChars(wanip,"x",6);
}
var ipaddr = mArray.tunnels[i].ipaddr;
if (anonymize == "true" && testPrivateIP(ipaddr) == false)
{
ipaddr=replaceLastNChars(ipaddr,"x",6);
}
var whois = mArray.tunnels[i].whois;
var multipath = mArray.tunnels[i].multipath;
if(multipath == 'master')
{
master++;
}
var latency = mArray.tunnels[i].latency;
var mtu = mArray.tunnels[i].mtu;
var gateway = mArray.tunnels[i].gateway;
if (anonymize == "true" && testPrivateIP(gateway) == false)
{
gateway=replaceLastNChars(gateway,"x",6);
}
var gw_ping = mArray.tunnels[i].gw_ping;
var server_ping = mArray.tunnels[i].server_ping;
var ipv6_discover = mArray.tunnels[i].ipv6_discover;
var multipath_available = mArray.tunnels[i].multipath_available;
var multipath_state = mArray.tunnels[i].multipath_state;
var duplicateif = mArray.tunnels[i].duplicateif;
// Generate template
if(mArray.openmptcprouter.remote_from_lease == true && mArray.tunnels.length == 1)
{
temp += String.format('<li class="subnode-only-child"><a href="%q">', mArray.tunnels[i].link);
} else {
temp += String.format('<li><a href="%q">', mArray.tunnels[i].link);
}
var equipmentIcon = String.format('<embed id="modem_%s" onload="setColorSVG(\'modem_%s\', \'%s\')" src="<%=resource%>/modem.svg" />', mArray.tunnels[i].name, mArray.tunnels[i].name, mArray.tunnels[i].color);
if (mArray.tunnels[i].gateway !== "")
{
var title = mArray.tunnels[i].label + " (" + gateway + ")";
} else {
var title = mArray.tunnels[i].label;
}
var content = "";
if(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);
}
if(whois !== '')
{
content += String.format('%s %s<br />',_('whois:'), whois);
}
if(latency !== '')
{
content += String.format('%s %s ms<br />',_('latency:'), latency);
}
if(mtu !== '')
{
content += String.format('%s %s<br />',_('mtu:'), mtu);
}
if(ipaddr == '')
{
statusMessage += _('No IP defined') + '<br />'
}
if(gateway == '')
{
statusMessage += _('No gateway defined') + '<br />'
} else if(gw_ping == 'DOWN')
{
statusMessage += _('Gateway DOWN') + '<br />'
} else if(multipath_available == 'ERROR')
{
statusMessage += _('Multipath seems to be blocked on the connection') + '<br />'
}
if(server_ping == 'DOWN')
{
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 />';
statusMessageClass = "error";
}
if(multipath == 'master')
{
if (master > 1)
{
statusMessage += _('Multipath master already defined') + '<br />';
statusMessageClass = "error";
}
if(multipath_state !== 'on' && multipath_state !== '')
{
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 />';
statusMessageClass = "error";
}
}
if(duplicateif)
{
statusMessage += _('Network interface duplicated') + '<br />';
statusMessageClass = "error";
}
if(ipv6_discover == 'DETECTED')
{
statusMessage += _('IPv6 route received') + '<br />'
}
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)
}
temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
@ -433,6 +645,9 @@
temp += '</ul></td>';
temp += '</tr></table>';
}
if (mArray === null) {
temp += _('No data');
}
temp += '</li>';
// Close tree
temp += '</ul>';
@ -521,9 +736,9 @@
<h3>Settings</h3>
<fieldset class="cbi-section">
<div class="cbi-value">
<label class="cbi-value-title">Anonymize public IPs (at next refresh)</label>
<label class="cbi-value-title">Anonymize public IPs</label>
<div class="cbi-value-field">
<input type="checkbox" name="anon" class="cbi-input-checkbox" value="1" onclick="setAnonymize(this)" \>
<input type="checkbox" name="anon" id="anon" class="cbi-input-checkbox" value="1" onclick="setAnonymize(this)" \>
</div>
</div>
</fieldset>

View file

@ -5,6 +5,7 @@
local net = require "luci.model.network".init()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local ut = require "luci.util"
local ifaces = sys.net:devices()
local servers_ip = {}
local server_ip = uci:get("shadowsocks-libev","sss0","server")
@ -66,7 +67,7 @@ end
<div class="cbi-value">
<label class="cbi-value-title" for="server_ip"><%:Server IP%></label>
<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-type="ip4addr" data-optional="false">
<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%>
</div>
@ -74,12 +75,22 @@ end
</div>
<br />
<div class="cbi-value">
<label class="cbi-value-title"><%:OpenMPTCProuter VPS key%></label>
<label class="cbi-value-title"><%:Server username%></label>
<div class="cbi-value-field">
<input type="text" name="<%=servername%>.openmptcprouter_vps_key" placeholder="OpenMPTCProuter VPS key" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"password")%>" data-type="base64" data-optional="false">
<input type="text" name="<%=servername%>.openmptcprouter_vps_username" placeholder="<%:Server username%>" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"username")%>" data-optional="false">
<br />
<div class="cbi-value-description">
<%:Key to configure and retrieve others keys from OpenMPTCProuter VPS. Empty to disable.%>
<%:API username to retrieve personnalized settings from the server.%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Server key%></label>
<div class="cbi-value-field">
<input type="text" name="<%=servername%>.openmptcprouter_vps_key" placeholder="<%:Server key%>" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"password")%>" data-optional="false">
<br />
<div class="cbi-value-description">
<%:Key to configure and retrieve others keys from Server and to set server settings from OpenMPTCProuter.%>
</div>
</div>
</div>
@ -135,7 +146,7 @@ end
<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")%>" data-type="base64">
<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">
<%:ShadowSocks is used for TCP.%>
@ -145,7 +156,32 @@ end
<div class="cbi-value">
<label class="cbi-value-title"><%:Disable ShadowSocks%></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 class="cbi-input-checkbox" type="checkbox" name="disableshadowsocks" value="1" <% if uci:get("shadowsocks-libev","sss0","disabled") == "1" then %>checked<% end %> />
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Encryption%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="encryption" size="1">
<%
local method=uci:get("shadowsocks-libev","sss0","method")
%>
<option value="none" <% if method == "none" then %>selected="selected"<% end %>><%:None%></option>
<option value="aes-256-gcm" <% if method == "aes-256-gcm" then %>selected="selected"<% end %>>AES-256-GCM</option>
<option value="chacha20-ietf-poly1305" <% if method == "chacha20" or method == "chacha20-ietf-poly1305" then %>selected="selected"<% end %>>chacha20</option>
<option value="other" <% if method ~= "chacha20" and method ~= "aes-256-gcm" and method ~= "chacha20-ietf-poly1305" and method ~= "none" then %>selected="selected"<% end %>><%:other%></option>
</select>
<br />
<div class="cbi-value-description">
<%
if ut.trim(sys.exec("cat /proc/cpuinfo | grep aes")) ~= "" then
%>
<%:An Advanced Encryption Standard (AES) instruction set is integrated in the processor.%>
<% 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.%>
</div>
</div>
</div>
</fieldset>
@ -156,7 +192,7 @@ end
<div class="cbi-value">
<label class="cbi-value-title"><%:Glorytun key%></label>
<div class="cbi-value-field">
<input type="text" name="glorytun_key" placeholder="Glorytun key" class="cbi-input-text" value="<%=uci:get("glorytun","vpn","key")%>">
<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">
<%:Glorytun TCP is used by default for UDP and ICMP%>
@ -164,11 +200,23 @@ end
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/dsvpn") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:A Dead Simple VPN key%></label>
<div class="cbi-value-field">
<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">
<%:A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP%>
</div>
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/mlvpn") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:MLVPN password%></label>
<div class="cbi-value-field">
<input type="text" name="mlvpn_password" placeholder="MLVPN password" class="cbi-input-text" value="<%=uci:get("mlvpn","general","password")%>">
<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">
<%:MLVPN can replace Glorytun with connections with same latency%>
@ -176,15 +224,14 @@ end
</div>
</div>
<% end %>
<% if nixio.fs.access("/usr/sbin/openvpn") then %>
<% if nixio.fs.access("/usr/sbin/ubond") then %>
<div class="cbi-value">
<label class="cbi-value-title"><%:OpenVPN key%></label>
<label class="cbi-value-title"><%:UBOND password%></label>
<div class="cbi-value-field">
<input type="file" name="openvpn_key" class="cbi-input-file">
<input type="text" class="cbi-input-text" data-update="change" value="<%=uci:get("openvpn","omr","secret")%>" />
<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">
<%:You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script to use OpenVPN TCP%>
<%:UBOND can replace Glorytun with connections with same latency%>
</div>
</div>
</div>
@ -200,13 +247,17 @@ end
available_vpns = {available_vpns}
end
for _, vpn in pairs(available_vpns) do
if vpn == "glorytun-tcp" then
if vpn == "glorytun_tcp" then
%>
<% 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 %>
<% elseif vpn == "glorytun-udp" then %>
<% elseif vpn == "glorytun_udp" then %>
<% 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 %>
<% 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 %>
<% 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 %>
<% 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 %>
<%
@ -219,7 +270,9 @@ 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/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>
<%
@ -228,7 +281,7 @@ end
</select>
<br />
<div class="cbi-value-description">
<%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%>
<%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%> <%:All VPN available here can do aggregation over MPTCP or using own internal method.%>
</div>
</div>
</div>
@ -240,8 +293,11 @@ end
<%
for _, iface in ipairs(net:get_networks()) do
local ifname = iface:name()
local multipath = uci:get("network",ifname,"multipath")
if multipath ~= "off" then
--local multipath = uci:get("network",ifname,"multipath")
local multipath = uci:get("openmptcprouter",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" />
@ -249,7 +305,17 @@ end
<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%>-proto" data-index="1">
<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="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="2">
<label class="cbi-value-title"><%:Protocol%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
@ -263,7 +329,7 @@ end
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="2">
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="3">
<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">
@ -273,13 +339,13 @@ end
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="3">
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="4">
<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="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="4">
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;}]" data-index="5">
<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">
@ -304,17 +370,27 @@ end
end
end
%>
<div class="cbi-value" data-index="5">
<div class="cbi-value" data-index="6">
<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 %> />
<br />
<div class="cbi-value-description">
<%:You can enable MPTCP over VPN if your provider filter Multipath TCP.%>
</div>
</div>
</div>
<div class="cbi-value" data-index="7">
<label class="cbi-value-title"><%:Enable SQM%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == 1 then %>checked<% end %> />
<input class="cbi-input-checkbox" type="checkbox" name="cbid.sqm.<%=ifname%>.enabled" value="1" <% if uci:get("sqm",ifname,"enabled") == "1" then %>checked<% end %> />
<br />
<div class="cbi-value-description">
<%:You should disable SQM for LTE or any interfaces with variable speed.%>
</div>
</div>
</div>
<div class="cbi-value" data-index="6">
<div class="cbi-value" data-index="8">
<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">
@ -330,7 +406,7 @@ end
-->
</div>
</div>
<div class="cbi-value" data-index="7">
<div class="cbi-value" data-index="9">
<label class="cbi-value-title"><%:Upload speed (Kb/s)%></label>
<div class="cbi-value-field">
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">

View file

@ -9,14 +9,29 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:210
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
msgstr "Dead Simple VPN est un VPN sur TCP qui peut remplacer Glorytun TCP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:205
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207
msgid "A Dead Simple VPN key"
msgstr "Clef Dead Simple VPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83
msgid "API username to retrieve personnalized settings from the server."
msgstr ""
"Nom d'utilisateur pour récupérer la configuration personnalisée depuis le "
"serveur."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443
msgid "Add an interface"
msgstr "Ajouter une interface"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:108
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119
msgid "Add server"
msgstr "Ajouter un serveur"
@ -25,238 +40,346 @@ msgstr "Ajouter un serveur"
msgid "Advanced Settings"
msgstr "Configuration avancé"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:136
msgid "Advanced settings"
msgstr "Configuration avancé"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm:6
msgid "All OpenMPTCProuter settings"
msgstr "Tous les paramètres d'OpenMPTCProuter"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284
msgid ""
"All VPN available here can do aggregation over MPTCP or using own internal "
"method."
msgstr ""
"Tous les VPN disponibles ici permettent l'agrégation en utilisant MPTCP ou "
"leur propre méthode interne."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm:5
msgid "All router settings"
msgstr "Tous les paramètres du routeur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179
msgid ""
"An Advanced Encryption Standard (AES) instruction set is integrated in the "
"processor."
msgstr "Les instruction AES sont intégrés dans le processeur."
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8
msgid "Backup on server"
msgstr "Sauvegarde sur le serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20
msgid "Beta"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145
msgid "By default ShadowSocks is used for TCP traffic."
msgstr "ShadowSocks est utilisé pour le trafic TCP."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:154
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190
msgid "By default VPN is used for any traffic that is not TCP."
msgstr "Par défaut le VPN est utilisé pour le trafic n'étant pas du TCP."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:113
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124
msgid "Common server settings"
msgstr "Paramètres des serveurs"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:323
msgid "DHCP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240
msgid "Default VPN"
msgstr "VPN par défaut"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:303
msgid "Delete"
msgstr "Supprimer"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157
msgid "Disable ShadowSocks"
msgstr "Désactiver ShadowSocks"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:141
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158
msgid "Disable TCP Fast Open"
msgstr "Désactivé TCP Fast Open"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163
msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration"
msgstr ""
"Désactivation de TCP Fast Open pour Linux et dans la configuration de "
"Shadowsocks"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148
msgid "Disable external check"
msgstr "Désactiver les tests externes"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:318
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:178
msgid "Disable gateway ping"
msgstr "Désactiver le ping vers la passerelle"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:183
msgid "Disable gateway ping status check"
msgstr "Désactiver le test ping de la passerelle"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57
msgid ""
"Disable ports redirection defined in firewall from server to this router"
msgstr ""
"Désactiver les redirections de ports définis dans la partie pare-feu du "
"serveur vers ce routeur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:188
msgid "Disable server ping"
msgstr "Désactiver le ping vers le serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193
msgid "Disable server ping status check"
msgstr "Désactiver le test ping vers le serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:394
msgid "Download speed (Kb/s)"
msgstr "Vitesse de téléchargement (Kb/s)"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202
msgid "Dynamic change"
msgstr "Changement dynamique"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:115
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:142
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:126
msgid "Enable IPv6"
msgstr "Activer IPv6"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:308
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384
msgid "Enable SQM"
msgstr "Active SQM"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:66
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73
msgid "Enable ShadowSocks Obfuscating"
msgstr "Activer le brouillage pour ShadowSocks"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163
msgid "Encryption"
msgstr "Chiffrement"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183
msgid "Encryption method is also used for Glorytun."
msgstr "La méthode de chiffrement est également utilisée par Glorytun."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198
msgid "Glorytun TCP is used by default for UDP and ICMP"
msgstr "Glorytun est utilisé par défaut pour UDP et ICMP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:195
msgid "Glorytun key"
msgstr "Clef Glorytun"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:117
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124
msgid "IPv4 TCP FIN timeout"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:136
msgid "IPv4 TCP Fast Open"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:111
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:118
msgid "IPv4 TCP Keepalive time"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130
msgid "IPv4 TCP SYN retries"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333
msgid "IPv4 address"
msgstr "Adresse IPv4"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:349
msgid "IPv4 gateway"
msgstr "Passerelle IPv4"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:343
msgid "IPv4 netmask"
msgstr "Masque de sous-réseau IPv4"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:291
msgid "Interfaces settings"
msgstr "Paramètres des interfaces"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93
msgid ""
"Key to configure and retrieve others keys from OpenMPTCProuter VPS. Empty to "
"disable."
"Key to configure and retrieve others keys from Server and to set server "
"settings from OpenMPTCProuter."
msgstr ""
"Clef pour configurer et récupérer les autres clefs depuis OpenMPTCProuter "
"VPS. Vide pour désactiver."
"Clef pour configurer et récupérer les autres clefs ainsi que les paramètres "
"depuis le serveur."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:174
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:309
msgid "Label"
msgstr "Étiquette"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:314
msgid "Label for the interface"
msgstr "Étiquette pour l'interface"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20
msgid "Last available backup on server:"
msgstr "Dernière sauvegarde disponible sur le serveur :"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:222
msgid "MLVPN can replace Glorytun with connections with same latency"
msgstr "MLVPN peut remplacer Glorytun pour les connexions avec la même latence"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:219
msgid "MLVPN password"
msgstr "Mot de passe MLVPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:151
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374
msgid "MPTCP over VPN"
msgstr "MPTCP over VPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198
msgid "Master interface selection"
msgstr "Selection de l'interface maître"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:172
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:220
msgid "Maximum scaling CPU frequency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:166
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:214
msgid "Minimum scaling CPU frequency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:510
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:512
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:729
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:731
msgid "Network overview"
msgstr "Aperçu réseau"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:115
msgid "Networks settings"
msgstr "Paramètres réseaux"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:156
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24
msgid "No available backup on server."
msgstr "Aucune sauvegarde disponible sur le serveur."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203
msgid "No change"
msgstr "Pas de changement"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:76
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169
msgid "None"
msgstr "Aucun"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83
msgid "Obfuscating plugin"
msgstr "Plugin de brouillage"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:95
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102
msgid "Obfuscating type"
msgstr "Type de brouillage"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:71
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78
msgid "Obfuscating will be enabled on both side"
msgstr "Le brouillage sera activé des deux côtés"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201
msgid "On wizard change"
msgstr "En cas de changements dans l'assistant"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107
msgid "Only one server can be master, else all servers are set as backup."
msgstr ""
"Uniquement un serveur peut être maître, les autres sont définis en secours."
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:11
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14
msgid "OpenMPTCProuter"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77
msgid "OpenMPTCProuter VPS key"
msgstr "Clef d'OpenMPTCProuter VPS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181
msgid "OpenVPN key"
msgstr "Clef OpenVPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:258
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:324
msgid "Other"
msgstr "Autre"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:319
msgid "Protocol"
msgstr "Protocole"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50
msgid "Redirects all ports from server to OpenMPTCProuter"
msgstr "Rédiriger tous les ports du serveur vers OpenMPTCProuter"
msgid "Redirects all ports from server to this router"
msgstr "Rediriger tous les ports du server vers ce routeur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:204
msgid "Redundant"
msgstr "Redondant"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30
msgid "Restore backup"
msgstr "Restauration de la sauvegarde"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:452
msgid "Save & Apply"
msgstr "Sauvegarder et Appliquer"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:178
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173
msgid "Save vnstats statistics on disk"
msgstr "Sauvegarder les statistiques de vnstats sur le disque"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168
msgid "Save vnstats stats"
msgstr "Sauvegarder les statistiques de vnstats"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226
msgid "Scaling governor"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:446
msgid "Select the device you want to base the interface on."
msgstr "Sélectionnez le périphérique pour l'interface."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31
msgid "Send backup"
msgstr "Envoyer la sauvegarde"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70
msgid "Server IP"
msgstr "IP du serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72
msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN"
msgstr ""
"L'IP du serveur sera configuré pour ShadowSocks, Glorytun, OpenVPN et MLVPN"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90
msgid "Server key"
msgstr "Clef du serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52
msgid "Server settings"
msgstr "Paramètres du serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80
msgid "Server username"
msgstr "Nom d'utilisateur sur le serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:338
msgid "Set an IP in the same network as the modem"
msgstr "Mettez une IP dans le même réseau que le modem"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:288
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354
msgid "Set here IP of the modem"
msgstr "Mettez ici l'IP du modem"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102
msgid "Set server as master"
msgstr "Configurer le serveur en tant que maître"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:231
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284
msgid ""
"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for "
"all traffic if ShadowSocks is disabled."
@ -264,14 +387,14 @@ msgstr ""
"Configure le VPN utilisé par défaut pour UDP et ICMP quand ShadowSocks est "
"activé, pour tout le trafic quand ShadowSocks est désactivé."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:328
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:404
msgid ""
"Set value between 80-95% of max download speed link. 0 to disable SQM/QoS."
msgstr ""
"Réglez une valeur entre 80-95% de la vitesse de téléchargement maximale. 0 "
"pour désactiver SQM/QoS."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:344
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420
msgid ""
"Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS."
msgstr ""
@ -282,23 +405,24 @@ msgstr ""
msgid "Settings Wizard"
msgstr "Assistant de configuration"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:141
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152
msgid "ShadowSocks is used for TCP."
msgstr "ShadowSocks est utilisé pour le TCP."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:136
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:149
msgid "ShadowSocks key"
msgstr "Clef de ShadowSocks"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144
msgid "ShadowSocks settings"
msgstr "Paramètres de ShadowSocks"
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24
msgid "Show all settings"
msgstr "Voir tous les paramètres"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:322
msgid "Static address"
msgstr "Adresse statique"
@ -306,40 +430,55 @@ msgstr "Adresse statique"
msgid "Status"
msgstr "État"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211
msgid "Systems settings"
msgstr "Paramètres systémes"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181
msgid ""
"There is no Advanced Encryption Standard (AES) instruction set integrated in "
"the processor, you should use chacha20."
msgstr ""
"Les instructions AES ne sont pas intégrées au processeur, vous devriez "
"utiliser chacha20."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234
msgid "UBOND can replace Glorytun with connections with same latency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:231
msgid "UBOND password"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27
msgid "Update"
msgstr "Mis à jour"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
msgid "Update OpenMPTCProuter server"
msgstr "Met à jour OpenMPTCProuter serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18
msgid "Update VPS"
msgstr "Mis à jour du VPS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20
msgid "Update remotly OpenMPTCProuter server to latest version when needed."
msgstr ""
"Met à jour OpenMPTCProuter serveur à la dernière version quand c'est "
"nécessaire."
msgid "Update remotly the server to latest version when needed."
msgstr "Met à jour le serveur à la dernière version quand c'est nécessaire."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:334
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
msgid "Update server"
msgstr "Mise à jour du serveur"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
msgid "Upload speed (Kb/s)"
msgstr "Vitesse d'envoi (Kb/s)"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:323
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value."
msgstr ""
"Utilisé par Glorytun UDP et SQM/QoS si activé. 0 pour utiliser la valeur par "
"défaut."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189
msgid "VPN settings"
msgstr "Paramètres du VPN"
@ -347,18 +486,23 @@ msgstr "Paramètres du VPN"
msgid "VPS settings"
msgstr "Paramètres du VPS"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:146
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153
msgid ""
"When enable check are done on external sites to get each WAN IP and the IP "
"used to go outside."
msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé"
msgstr "Utilise des sites externes pour obtenir les IPs externes quand activé."
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:12
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:49
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50
msgid "Wizard"
msgstr "Assistant"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379
msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP."
msgstr ""
"Vous pouvez utiliser MTPCP over VPN si votre fournisseur filtre Multipath "
"TCP."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:328
msgid ""
"You can use DHCP if you have multiple real ethernet ports. Select other if "
"you want to use another protocol available in Network Interfaces page."
@ -367,30 +511,205 @@ msgstr ""
"Choisissez autre si vous utilisez un autre protocole dans la page Réseau "
"Interfaces."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:292
msgid "You must disable DHCP on your modems and set IP in different networks."
msgstr ""
"Vous devez désactiver DHCP sur vos modems et configurer leurs IP dans des "
"réseaux différents."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187
msgid ""
"You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script "
"to use OpenVPN TCP"
msgstr ""
"Vous devez ajouter le fichier contenant la clef OpenVPN générée par le "
"script OpenMPTCProuter VPS pour utiliser OpenVPN TCP"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:120
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:131
msgid "You should disable IPv6 here if server doesn't provide IPv6."
msgstr "Vous devriez désactiver IPv6 ici si le serveur ne supporte pas IPv6."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:313
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:389
msgid "You should disable SQM for LTE or any interfaces with variable speed."
msgstr ""
"Vous devriez désactiver SQM pour la 4G ou toute interface avec une vitesse "
"très instable."
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172
msgid "other"
msgstr "autre"
#~ msgid "Can't access and use server part"
#~ msgstr "Impossible d'accéder et d'utiliser la partie serveur"
#~ msgid "Can't contact Server Admin Script"
#~ msgstr "Impossible de contacter le script d'administration du serveur"
#~ msgid "Can't get public IP address from ShadowSocks"
#~ msgstr "Pas d'adresse IP publique récupérée via ShadowSocks"
#~ msgid "Can't ping server"
#~ msgstr "Pas de réponse du serveur"
#~ msgid "Core temp:"
#~ msgstr "Température du cœur :"
#~ msgid "DNS issue: can't resolve hostname"
#~ msgstr "Soucis DNS : impossible de résoudre le domaine"
#~ msgid "Direct output"
#~ msgstr "Sortie directe"
#~ msgid "Filesystem is readonly"
#~ msgstr "Système de fichiers en lecture seule"
#~ msgid "Gateway DOWN"
#~ msgstr "La passerelle ne répond pas"
#~ msgid "IPv6 route received"
#~ msgstr "Route IPv6 reçue"
#~ msgid "IPv6:"
#~ msgstr "IPv6 :"
#~ msgid "Latest available version"
#~ msgstr "Dernière version disponible"
#~ msgid "Load:"
#~ msgstr "Charge :"
#~ msgid "MPTCP is not enabled on the server"
#~ msgstr "MPTCP n'est pas activé sur le serveur"
#~ msgid "MPTCP may not be enabled on the server"
#~ msgstr "MPTCP semble ne pas être activé sur le serveur"
#~ msgid "Multipath current state is"
#~ msgstr "Multipath est actuellement"
#~ msgid "Multipath master already defined"
#~ msgstr "Maître multipath déjà défini"
#~ msgid "Multipath seems to be blocked on the connection"
#~ msgstr "Multipath semble bloquer sur la connexion"
#~ msgid "Network interface duplicated"
#~ msgstr "Interface réseau dupliquée"
#~ msgid "No IP defined"
#~ msgstr "Aucune IP définie"
#~ msgid "No IPv6 access"
#~ msgstr "Pas d'accès IPv6"
#~ msgid "No Server ping response after 1 second"
#~ msgstr "Pas de réponse du serveur après 1 seconde"
#~ msgid "No VPS IP address, No WAN IP address"
#~ msgstr "Pas d'adresse IP du serveur, pas d'adresse IP WAN"
#~ msgid "No WAN IP address detected in less than 1 second"
#~ msgstr "Aucune adresse IP WAN détectée en moins d'une seconde"
#~ msgid "No data"
#~ msgstr "Pas de données"
#~ msgid "No gateway defined"
#~ msgstr "Aucune passerelle définie"
#~ msgid "OpenVPN key"
#~ msgstr "Clef OpenVPN"
#~ msgid "ShadowSocks is DISABLED"
#~ msgstr "ShadowSocks est désactivé"
#~ msgid "ShadowSocks is not running"
#~ msgstr "ShadowSocks n'est pas lancé"
#~ msgid "Uptime:"
#~ msgstr "Durée de fonctionnement :"
#~ msgid "VPN IPv6 tunnel DOWN"
#~ msgstr "Le tunnel IPv6 ne répond pas"
#~ msgid "VPN is not running"
#~ msgstr "Le VPN n'est pas lancé"
#~ msgid "VPN tunnel DOWN"
#~ msgstr "Le VPN ne répond pas"
#~ msgid "Wan IP and gateway are identical"
#~ msgstr "La passerelle et l'adresse IP du WAN sont identiques"
#~ msgid "You"
#~ msgstr "Vous"
#~ msgid ""
#~ "You need to upload OpenVPN key file generated by server install script to "
#~ "use OpenVPN TCP"
#~ msgstr ""
#~ "Vous devez ajouter le fichier contenant la clef OpenVPN générée par le "
#~ "script d'installation du serveur pour utiliser OpenVPN TCP"
#~ msgid "Your IP was not leased by this router"
#~ msgstr "Votre IP n'a pas été attribuée par ce routeur"
#~ msgid "address:"
#~ msgstr "adresse :"
#~ msgid "empty key"
#~ msgstr "clef vide"
#~ msgid "ip address:"
#~ msgstr "adresse ip :"
#~ msgid "latency:"
#~ msgstr "latence :"
#~ msgid "mtu:"
#~ msgstr "mtu :"
#~ msgid "range:"
#~ msgstr "plage :"
#~ msgid "wan address:"
#~ msgstr "adresse WAN :"
#~ msgid "whois:"
#~ msgstr "whois :"
#~ msgid "GloryTUN is not running"
#~ msgstr "Glorytun n'est pas lancé"
#~ msgid ""
#~ "Key to configure and retrieve others keys from Server. Empty to disable."
#~ msgstr ""
#~ "Clef pour configurer et récupérer les autres clefs depuis le serveur. "
#~ "Vide pour désactiver."
#~ msgid "All OpenMPTCProuter settings"
#~ msgstr "Tous les paramètres d'OpenMPTCProuter"
#~ msgid ""
#~ "Key to configure and retrieve others keys from OpenMPTCProuter VPS. Empty "
#~ "to disable."
#~ msgstr ""
#~ "Clef pour configurer et récupérer les autres clefs depuis OpenMPTCProuter "
#~ "VPS. Vide pour désactiver."
#~ msgid "OpenMPTCProuter VPS key"
#~ msgstr "Clef d'OpenMPTCProuter VPS"
#~ msgid "Redirects all ports from server to OpenMPTCProuter"
#~ msgstr "Rédiriger tous les ports du serveur vers OpenMPTCProuter"
#~ msgid "Update OpenMPTCProuter server"
#~ msgstr "Met à jour OpenMPTCProuter serveur"
#~ msgid "Update remotly OpenMPTCProuter server to latest version when needed."
#~ msgstr ""
#~ "Met à jour OpenMPTCProuter serveur à la dernière version quand c'est "
#~ "nécessaire."
#~ msgid ""
#~ "You need to upload OpenVPN key file generated by OpenMPTCProuter VPS "
#~ "script to use OpenVPN TCP"
#~ msgstr ""
#~ "Vous devez ajouter le fichier contenant la clef OpenVPN générée par le "
#~ "script OpenMPTCProuter VPS pour utiliser OpenVPN TCP"
#~ msgid "Disable IPv6"
#~ msgstr "Désactiver IPv6"

View file

@ -1,11 +1,24 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:367
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:210
msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:205
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:207
msgid "A Dead Simple VPN key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:83
msgid "API username to retrieve personnalized settings from the server."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:443
msgid "Add an interface"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:108
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:119
msgid "Add server"
msgstr ""
@ -14,245 +27,347 @@ msgstr ""
msgid "Advanced Settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:125
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:136
msgid "Advanced settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm:6
msgid "All OpenMPTCProuter settings"
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284
msgid ""
"All VPN available here can do aggregation over MPTCP or using own internal "
"method."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm:5
msgid "All router settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:179
msgid ""
"An Advanced Encryption Standard (AES) instruction set is integrated in the "
"processor."
msgstr ""
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:8
msgid "Backup on server"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20
msgid "Beta"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:134
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:145
msgid "By default ShadowSocks is used for TCP traffic."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:154
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190
msgid "By default VPN is used for any traffic that is not TCP."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:113
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:124
msgid "Common server settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:257
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:323
msgid "DHCP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:240
msgid "Default VPN"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:61
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:247
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:62
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:303
msgid "Delete"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:146
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157
msgid "Disable ShadowSocks"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:141
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:158
msgid "Disable TCP Fast Open"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163
msgid "Disable TCP Fast Open on Linux and Shadowsocks configuration"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:148
msgid "Disable external check"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:318
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:178
msgid "Disable gateway ping"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:183
msgid "Disable gateway ping status check"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:57
msgid ""
"Disable ports redirection defined in firewall from server to this router"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:188
msgid "Disable server ping"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193
msgid "Disable server ping status check"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:394
msgid "Download speed (Kb/s)"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:155
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:202
msgid "Dynamic change"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:135
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:115
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:142
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:126
msgid "Enable IPv6"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:308
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384
msgid "Enable SQM"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:66
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:73
msgid "Enable ShadowSocks Obfuscating"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:162
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:163
msgid "Encryption"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:183
msgid "Encryption method is also used for Glorytun."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:198
msgid "Glorytun TCP is used by default for UDP and ICMP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:157
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:193
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:195
msgid "Glorytun key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:117
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:124
msgid "IPv4 TCP FIN timeout"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:129
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:136
msgid "IPv4 TCP Fast Open"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:111
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:118
msgid "IPv4 TCP Keepalive time"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:123
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:130
msgid "IPv4 TCP SYN retries"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:267
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:333
msgid "IPv4 address"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:283
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:349
msgid "IPv4 gateway"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:277
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:343
msgid "IPv4 netmask"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:238
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:291
msgid "Interfaces settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:82
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:93
msgid ""
"Key to configure and retrieve others keys from OpenMPTCProuter VPS. Empty to "
"disable."
"Key to configure and retrieve others keys from Server and to set server "
"settings from OpenMPTCProuter."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:174
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:309
msgid "Label"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:314
msgid "Label for the interface"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:20
msgid "Last available backup on server:"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:222
msgid "MLVPN can replace Glorytun with connections with same latency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:217
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:219
msgid "MLVPN password"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:151
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:374
msgid "MPTCP over VPN"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198
msgid "Master interface selection"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:172
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:220
msgid "Maximum scaling CPU frequency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:166
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:214
msgid "Minimum scaling CPU frequency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:510
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:512
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:729
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:731
msgid "Network overview"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:108
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:115
msgid "Networks settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:156
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:24
msgid "No available backup on server."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203
msgid "No change"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:76
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:169
msgid "None"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:83
msgid "Obfuscating plugin"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:95
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:102
msgid "Obfuscating type"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:71
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:78
msgid "Obfuscating will be enabled on both side"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:154
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:201
msgid "On wizard change"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:96
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:107
msgid "Only one server can be master, else all servers are set as backup."
msgstr ""
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:11
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:14
msgid "OpenMPTCProuter"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:77
msgid "OpenMPTCProuter VPS key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181
msgid "OpenVPN key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:258
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:324
msgid "Other"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:253
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:319
msgid "Protocol"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:50
msgid "Redirects all ports from server to OpenMPTCProuter"
msgid "Redirects all ports from server to this router"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:198
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:376
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:204
msgid "Redundant"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:30
msgid "Restore backup"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:246
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:452
msgid "Save & Apply"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:178
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:173
msgid "Save vnstats statistics on disk"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:168
msgid "Save vnstats stats"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:226
msgid "Scaling governor"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:370
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:446
msgid "Select the device you want to base the interface on."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:67
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:31
msgid "Send backup"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:68
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:70
msgid "Server IP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:71
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:72
msgid "Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:51
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:88
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:90
msgid "Server key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:52
msgid "Server settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:272
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:78
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:80
msgid "Server username"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:338
msgid "Set an IP in the same network as the modem"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:288
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:354
msgid "Set here IP of the modem"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:91
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:102
msgid "Set server as master"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:231
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:284
msgid ""
"Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for "
"all traffic if ShadowSocks is disabled."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:328
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:404
msgid ""
"Set value between 80-95% of max download speed link. 0 to disable SQM/QoS."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:344
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:420
msgid ""
"Set value between 80-95% of max upload speed link. 0 to disable SQM/QoS."
msgstr ""
@ -261,23 +376,24 @@ msgstr ""
msgid "Settings Wizard"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:141
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:152
msgid "ShadowSocks is used for TCP."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:136
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:147
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:149
msgid "ShadowSocks key"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:133
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144
msgid "ShadowSocks settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:22
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:24
msgid "Show all settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:256
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:322
msgid "Static address"
msgstr ""
@ -285,36 +401,51 @@ msgstr ""
msgid "Status"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:163
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:211
msgid "Systems settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:181
msgid ""
"There is no Advanced Encryption Standard (AES) instruction set integrated in "
"the processor, you should use chacha20."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:234
msgid "UBOND can replace Glorytun with connections with same latency"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:229
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:231
msgid "UBOND password"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:27
msgid "Update"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
msgid "Update OpenMPTCProuter server"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:18
msgid "Update VPS"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:20
msgid "Update remotly OpenMPTCProuter server to latest version when needed."
msgid "Update remotly the server to latest version when needed."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:334
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22
msgid "Update server"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410
msgid "Upload speed (Kb/s)"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:323
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:339
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:399
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415
msgid "Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:153
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189
msgid "VPN settings"
msgstr ""
@ -322,37 +453,38 @@ msgstr ""
msgid "VPS settings"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:146
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:153
msgid ""
"When enable check are done on external sites to get each WAN IP and the IP "
"used to go outside."
msgstr ""
#: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:12
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:49
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:50
msgid "Wizard"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:262
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:379
msgid "You can enable MPTCP over VPN if your provider filter Multipath TCP."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:328
msgid ""
"You can use DHCP if you have multiple real ethernet ports. Select other if "
"you want to use another protocol available in Network Interfaces page."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:239
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:292
msgid "You must disable DHCP on your modems and set IP in different networks."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:187
msgid ""
"You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script "
"to use OpenVPN TCP"
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:120
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:131
msgid "You should disable IPv6 here if server doesn't provide IPv6."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:313
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:389
msgid "You should disable SQM for LTE or any interfaces with variable speed."
msgstr ""
#: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:172
msgid "other"
msgstr ""

View file

@ -0,0 +1,10 @@
#!/bin/sh
MODEM_INTF=$1
[ -z "$MODEM_INTF" ] && return
SIGNAL_INFO=$(timeout 1 gcom info -d $MODEM_INTF)
[ -z "$SIGNAL_INFO" ] && return
RSSI=$(echo $SIGNAL_INFO | grep RSSI | awk -F: '{print $2}')
[ -z "$RSSI" ] && return
ASU=$(((RSSI + 113) / 2 ))
PERCENT=$((((ASU - 0) * 100) / ( 91 - 0 )))
echo $PERCENT

View file

@ -0,0 +1,14 @@
#!/bin/sh
MODEM_IP=`echo $1 | grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)'`
[ -z "$MODEM_IP" ] && return
SESTOK=$(curl -s -m 1 -X GET "http://$MODEM_IP/api/webserver/SesTokInfo")
[ -z "$SESTOK" ] && return
COOKIE=$(echo $SESTOK | sed -ne '/SesInfo/{s/.*<SesInfo>\(.*\)<\/SesInfo>.*/\1/p;q;}')
COOKIE=$(echo $COOKIE | sed 's:SessionID=::')
TOKEN=$(echo $SESTOK | sed -ne '/TokInfo/{s/.*<TokInfo>\(.*\)<\/TokInfo>.*/\1/p;q;}')
curl -s -m 1 -X GET "http://$MODEM_IP/api/monitoring/status" -H "Cookie: SessionID=$COOKIE" -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: text/xml" > /tmp/huawei-$1-status
SIGNAL_ICON=$(cat /tmp/huawei-$1-status | grep SignalIcon | sed -e 's/<[^>]*>//g')
MAX_SIGNAL=$(cat /tmp/huawei-$1-status | grep maxsignal | sed -e 's/<[^>]*>//g')
if [ -n "$SIGNAL_ICON" ] && [ -n "$MAX_SIGNAL" ]; then
echo $((100 * ${SIGNAL_ICON} / ${MAX_SIGNAL}))
fi

View file

@ -1,5 +1,10 @@
#!/bin/sh
checkip=$(dig +short A ip.openmptcprouter.com | tr -d "\n")
check_ipv4_website="$(uci -q get openmptcprouter.settings.check_ipv4_website)"
[ -z "$check_ipv4_website" ] && check_ipv4_website="http://ip.openmptcprouter.com"
checkip=$(echo $check_ipv4_website | sed -e 's/https:\/\///' -e 's/http:\/\///' | xargs dig +short A | tr -d "\n")
ipset add ss_rules_dst_bypass_all $checkip > /dev/null 2>&1
curl -s -4 -m 3 --interface $1 http://ip.openmptcprouter.com
ip="$(curl -s -4 -m 2 --interface $1 $check_ipv4_website)"
ipset del ss_rules_dst_bypass_all $checkip > /dev/null 2>&1
if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
echo $ip
fi

View file

@ -0,0 +1,12 @@
#!/bin/sh
MODEM_INTF=$1
[ -z "$MODEM_INTF" ] && return
timeout 1 mmcli -L | while read MODEM; do
MODEM_ID=$(echo $MODEM | awk -F' ' '{print $1}' | awk -F/ '{print $6}')
MODEM_INFO="$(timeout 1 mmcli -m $MODEM_ID --output-keyvalue)"
if [ -n "$MODEM_INFO" ] && [ "$(echo "$MODEM_INFO" | grep 'modem.generic.device ' | awk -F": " '{print $2}')" = "$MODEM_INTF" ]; then
PERCENT=$(echo "$MODEM_INFO" | grep 'modem.generic.signal-quality.value' | awk -F": " '{print $2}')
echo $PERCENT
exit
fi
done

View file

@ -1,5 +1,5 @@
#!/bin/sh
multipathip=$(dig +short A multipath-tcp.org | tr -d "\n")
ipset add ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1
curl -s -4 -m 3 --interface $1 http://www.multipath-tcp.org
curl -s -4 -m 2 --interface $1 http://www.multipath-tcp.org
ipset del ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1

View file

@ -0,0 +1,27 @@
#!/bin/sh
MODEM_INTF=$1
[ -z "$MODEM_INTF" ] && return
SIGNAL_INFO=$(timeout 1 uqmi -d $MODEM_INTF --get-signal-info)
[ -z "$SIGNAL_INFO" ] && return
TYPE=$(echo $SIGNAL_INFO | jsonfilter -e '@.type')
if [ "$TYPE" = "gsm" ]; then
RSSI=$(echo $SIGNAL_INFO | jsonfilter -e '@.rssi')
[ -z "$RSSI" ] && return
ASU=$(((RSSI + 113) / 2 ))
PERCENT=$((((ASU - 0) * 100) / ( 91 - 0 )))
echo $PERCENT
fi
if [ "$TYPE" = "umts" ]; then
RSCP=$(echo $SIGNAL_INFO | jsonfilter -e '@.rscp')
[ -z "$RSCP" ] && return
ASU=$((RSCP + 116))
PERCENT=$((((ASU - 0) * 100) / ( 91 - 0 )))
echo $PERCENT
fi
if [ "$TYPE" = "lte" ]; then
RSRP=$(echo $SIGNAL_INFO | jsonfilter -e '@.rsrp')
[ -z "$RSRP" ] && return
ASU=$((RSRP + 140))
PERCENT=$((((ASU - 3) * 100) / ( 70 - 3 )))
echo $PERCENT
fi

View file

@ -1,7 +1,7 @@
#!/bin/sh
INTERFACE=$2
if [ -z "$INTERFACE" ]; then
tracebox -m 30 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $1
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $1
else
tracebox -m 30 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $1
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $1
fi

View file

@ -9,6 +9,11 @@ USE_PROCD=1
omr_intf_del() {
uci -q delete openmptcprouter.$1
}
omr_intf_check() {
[ "$(uci -q get network.$1)" = "" ] && omr_intf_del $1
}
omr_intf_set() {
config_get multipath "$1" multipath
config_get ifname "$1" ifname
@ -19,6 +24,7 @@ omr_intf_set() {
[ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return
uci -q set openmptcprouter.$1=interface
uci -q set openmptcprouter.$1.multipath="$multipath"
config_get disable_ipv6 settings disable_ipv6 "0"
if [ "$disable_ipv6" = "1" ] || [ "$1" != "omr6in4" ]; then
uci -q set network.$1.ipv6=0
@ -27,45 +33,11 @@ omr_intf_set() {
fi
}
set_ipv6_state() {
local disable_ipv6=$1
local sysctl_ipv6=0
sysctl -w net.ipv6.conf.all.disable_ipv6=$sysctl_ipv6
sed -i 's:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$sysctl_ipv6:' /etc/sysctl.d/zzz_openmptcprouter.conf
uci -q set firewall.@defaults[0].disable_ipv6=$disable_ipv6
uci -q commit firewall
if [ "$disable_ipv6" == "1" ]; then
uci -q set dhcp.lan.ra_default="0"
uci -q set network.lan.ipv6="0"
uci -q delete network.lan.ipv6
uci -q delete dhcp.lan.dhcpv6
uci -q delete dhcp.lan.ra
uci -q delete dhcp.lan.ra_default
uci -q delete dhcp.lan.ra_preference
uci -q set shadowsocks-libev.hi.local_address="0.0.0.0"
else
uci -q set dhcp.lan.ra_default="1"
uci -q set dhcp.lan.ra_preference="high"
uci -q set network.lan.ipv6="1"
uci -q set network.lan.delegate="0"
uci -q set shadowsocks-libev.hi.local_address="::"
fi
uci -q commit shadowsocks-libev
uci -q commit dhcp
uci -q commit network
#if [ "$disable_ipv6" == "1" ]; then
# /etc/init.d/odhcpd stop >/dev/null 2>&1
# /etc/init.d/odhcpd disable >/dev/null 2>&1
#fi
}
start_service() {
local scaling_min_freq scaling_max_freq
#config_load openmptcprouter
#config_foreach omr_intf_del interface
config_load openmptcprouter
config_foreach omr_intf_check interface
config_load network
config_foreach omr_intf_set interface
@ -88,11 +60,6 @@ start_service() {
echo $scaling_governor > $c/scaling_governor
done
}
config_get disable_ipv6 settings disable_ipv6 "0"
if [ "$(uci -q get firewall.@defaults[0].disable_ipv6)" != "$disable_ipv6" ]; then
set_ipv6_state $disable_ipv6
fi
# 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' /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' /etc/sysctl.d/10-default.conf
@ -101,4 +68,8 @@ start_service() {
reload_service() {
rc_procd start_service
return 0
}
service_triggers() {
procd_add_reload_trigger "openmptcprouter" "network"
}

View file

@ -27,13 +27,14 @@ if [ "$(uci -q get ucitrack.@network[-1].affects | grep openmptcprouter)" = "" ]
commit ucitrack
EOF
fi
if [ "$(uci -q get openmptcprouter.vps)" != "server" ]; then
if [ "$(uci -q show openmptcprouter | grep server)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps=server
set openmptcprouter.vps.username="openmptcprouter"
commit openmptcprouter
EOF
fi
if [ "$(uci -q get openmptcprouter.vps.master)" = "" ]; then
if [ "$(uci -q get openmptcprouter.vps)" = "server" ] && [ "$(uci -q get openmptcprouter.vps.master)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.master=1
set openmptcprouter.vps.backup=0
@ -65,4 +66,28 @@ if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" = "" ]; then
commit openmptcprouter
EOF
fi
if [ "$(uci -q get openmptcprouter.settings.check_ipv4_website)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.settings.check_ipv4_website='http://ip.openmptcprouter.com'
commit openmptcprouter
EOF
fi
if [ "$(uci -q get openmptcprouter.settings.check_ipv6_website)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.settings.check_ipv6_website='http://ipv6.openmptcprouter.com'
commit openmptcprouter
EOF
fi
if [ "$(uci -q get openmptcprouter.settings.status_vps_timeout)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.settings.status_vps_timeout=2
commit openmptcprouter
EOF
fi
if [ "$(uci -q get openmptcprouter.settings.status_getip_timeout)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.settings.status_getip_timeout=2
commit openmptcprouter
EOF
fi
exit 0

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
#
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
# Copyright (C) 2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
@ -8,10 +8,10 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for shadowsocks-libev
LUCI_DEPENDS:=+shadowsocks-libev-config +shadowsocks-libev-ss-local +shadowsocks-libev-ss-redir +shadowsocks-libev-ss-rules +shadowsocks-libev-ss-server +shadowsocks-libev-ss-tunnel +simple-obfs
LUCI_DEPENDS:=+luci-compat
PKG_LICENSE:=Apache-2.0
include ../luci/luci.mk
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,312 @@
'use strict';
'require uci';
'require form';
'require network';
var names_options_server = [
'server',
'server_port',
'method',
'key',
'password',
'plugin',
'plugin_opts',
];
var names_options_client = [
'server',
'local_address',
'local_port',
];
var names_options_common = [
'verbose',
'ipv6_first',
'fast_open',
'no_delay',
'reuse_port',
'mode',
'mtu',
'timeout',
'user',
'mptcp',
];
var modes = [
'tcp_only',
'tcp_and_udp',
'udp_only',
];
var methods = [
'none',
// aead
'aes-128-gcm',
'aes-192-gcm',
'aes-256-gcm',
'chacha20-ietf-poly1305',
'xchacha20-ietf-poly1305',
// stream
'table',
'rc4',
'rc4-md5',
'aes-128-cfb',
'aes-192-cfb',
'aes-256-cfb',
'aes-128-ctr',
'aes-192-ctr',
'aes-256-ctr',
'bf-cfb',
'camellia-128-cfb',
'camellia-192-cfb',
'camellia-256-cfb',
'salsa20',
'chacha20',
'chacha20-ietf',
];
function ucival_to_bool(val) {
return val === 'true' || val === '1' || val === 'yes' || val === 'on';
}
return L.Class.extend({
values_actions: function(o) {
o.value('bypass');
o.value('forward');
if (o.option !== 'dst_default') {
o.value('checkdst');
}
},
values_redir: function(o, xmode) {
uci.sections('shadowsocks-libev', 'ss_redir', function(sdata) {
var disabled = ucival_to_bool(sdata['disabled']),
sname = sdata['.name'],
mode = sdata['mode'] || 'tcp_only';
if (!disabled && mode.indexOf(xmode) !== -1) {
o.value(sname, sname + ' - ' + mode);
}
});
o.value('', '<unset>');
o.value('all', 'all');
o.default = '';
},
values_serverlist: function(o) {
uci.sections('shadowsocks-libev', 'server', function(sdata) {
var sname = sdata['.name'],
server = sdata['server'],
server_port = sdata['server_port'];
if (server && server_port) {
var disabled = ucival_to_bool(sdata['.disabled']) ? ' - disabled' : '',
desc = '%s - %s:%s%s'.format(sname, server, server_port, disabled);
o.value(sname, desc);
}
});
},
values_ipaddr: function(o, netDevs) {
netDevs.forEach(function(v) {
v.getIPAddrs().forEach(function(a) {
var host = a.split('/')[0];
o.value(host, '%s (%s)'.format(host, v.getShortName()));
});
});
},
options_client: function(s, tab, netDevs) {
var o = s.taboption(tab, form.ListValue, 'server', _('Remote server'));
this.values_serverlist(o);
o = s.taboption(tab, form.Value, 'local_address', _('Local address'));
o.datatype = 'ipaddr';
o.placeholder = '0.0.0.0';
this.values_ipaddr(o, netDevs);
o = s.taboption(tab, form.Value, 'local_port', _('Local port'));
o.datatype = 'port';
},
options_server: function(s, opts) {
var o, optfunc,
tab = opts && opts.tab || null;
if (!tab) {
optfunc = function(/* ... */) {
var o = s.option.apply(s, arguments);
o.editable = true;
return o;
};
} else {
optfunc = function(/* ... */) {
var o = s.taboption.apply(s, L.varargs(arguments, 0, tab));
o.editable = true;
return o;
};
}
o = optfunc(form.Value, 'server', _('Server'));
o.datatype = 'host';
o.size = 16;
o = optfunc(form.Value, 'server_port', _('Server port'));
o.datatype = 'port';
o.size = 5;
o = optfunc(form.ListValue, 'method', _('Method'));
methods.forEach(function(m) {
o.value(m);
});
o = optfunc(form.Value, 'password', _('Password'));
o.password = true;
o.size = 12;
o = optfunc(form.Value, 'key', _('Key (base64)'));
o.datatype = 'base64';
o.password = true;
o.size = 12;
o.modalonly = true;;
optfunc(form.Value, 'plugin', _('Plugin')).modalonly = true;
optfunc(form.Value, 'plugin_opts', _('Plugin Options')).modalonly = true;
},
options_common: function(s, tab) {
var o = s.taboption(tab, form.ListValue, 'mode', _('Mode of operation'));
modes.forEach(function(m) {
o.value(m);
});
o.default = 'tcp_and_udp';
o = s.taboption(tab, form.Value, 'mtu', _('MTU'));
o.datatype = 'uinteger';
o = s.taboption(tab, form.Value, 'timeout', _('Timeout (sec)'));
o.datatype = 'uinteger';
s.taboption(tab, form.Value, 'user', _('Run as'));
s.taboption(tab, form.Flag, 'verbose', _('Verbose'));
s.taboption(tab, form.Flag, 'ipv6_first', _('IPv6 First'), _('Prefer IPv6 addresses when resolving names'));
s.taboption(tab, form.Flag, 'fast_open', _('Enable TCP Fast Open'));
s.taboption(tab, form.Flag, 'no_delay', _('Enable TCP_NODELAY'));
s.taboption(tab, form.Flag, 'reuse_port', _('Enable SO_REUSEPORT'));
s.taboption(tab, form.Flag, 'mptcp', _('Enable MPTCP'));
},
ucival_to_bool: function(val) {
return ucival_to_bool(val);
},
cfgvalue_overview: function(sdata) {
var stype = sdata['.type'],
lines = [];
if (stype === 'ss_server') {
this.cfgvalue_overview_(sdata, lines, names_options_server);
this.cfgvalue_overview_(sdata, lines, names_options_common);
this.cfgvalue_overview_(sdata, lines, ['bind_address']);
} else if (stype === 'ss_local' || stype === 'ss_redir' || stype === 'ss_tunnel') {
this.cfgvalue_overview_(sdata, lines, names_options_client);
if (stype === 'ss_tunnel') {
this.cfgvalue_overview_(sdata, lines, ['tunnel_address']);
}
this.cfgvalue_overview_(sdata, lines, names_options_common);
} else {
return [];
}
return lines;
},
cfgvalue_overview_: function(sdata, lines, names) {
names.forEach(function(n) {
var v = sdata[n];
if (v) {
if (n === 'key' || n === 'password') {
v = _('<hidden>');
}
var fv = E('var', [v]);
if (sdata['.type'] !== 'ss_server' && n === 'server') {
fv = E('a', {
class: 'label',
href: L.url('admin/services/shadowsocks-libev/servers') + '#edit=' + v,
target: '_blank',
rel: 'noopener'
}, fv);
}
lines.push(n + ': ', fv, E('br'));
}
});
},
option_install_package: function(s, tab) {
var bin = s.sectiontype.replace('_', '-'),
opkg_package = 'shadowsocks-libev-' + bin, o;
if (tab) {
o = s.taboption(tab, form.Button, '_install');
} else {
o = s.option(form.Button, '_install');
}
o.title = _('Package is not installed');
o.inputtitle = _('Install package ' + opkg_package);
o.inputstyle = 'apply';
o.onclick = function() {
window.open(L.url('admin/system/opkg') +
'?query=' + opkg_package, '_blank', 'noopener');
};
},
parse_uri: function(uri) {
var scheme = 'ss://';
if (uri && uri.indexOf(scheme) === 0) {
var atPos = uri.indexOf('@'), hashPos = uri.lastIndexOf('#'), tag;
if (hashPos === -1) {
hashPos = undefined;
} else {
tag = uri.slice(hashPos + 1);
}
if (atPos !== -1) { // SIP002 format https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
var colonPos = uri.indexOf(':', atPos + 1), slashPos = uri.indexOf('/', colonPos + 1);
if (colonPos === -1) return null;
if (slashPos === -1) slashPos = undefined;
var userinfo = atob(uri.slice(scheme.length, atPos)
.replace(/-/g, '+').replace(/_/g, '/')),
i = userinfo.indexOf(':');
if (i === -1) return null;
var config = {
server: uri.slice(atPos + 1, colonPos),
server_port: uri.slice(colonPos + 1, slashPos ? slashPos : hashPos),
password: userinfo.slice(i + 1),
method: userinfo.slice(0, i)
};
if (slashPos) {
var search = uri.slice(slashPos + 1, hashPos);
if (search[0] === '?') search = search.slice(1);
search.split('&').forEach(function(s) {
var j = s.indexOf('=');
if (j !== -1) {
var k = s.slice(0, j), v = s.slice(j + 1);
if (k === 'plugin') {
v = decodeURIComponent(v);
var k = v.indexOf(';');
if (k !== -1) {
config['plugin'] = v.slice(0, k);
config['plugin_opts'] = v.slice(k + 1);
}
}
}
});
}
return [config, tag];
} else { // Legacy format https://shadowsocks.org/en/config/quick-guide.html
var plain = atob(uri.slice(scheme.length, hashPos)),
firstColonPos = plain.indexOf(':'),
lastColonPos = plain.lastIndexOf(':'),
atPos = plain.lastIndexOf('@', lastColonPos);
if (firstColonPos === -1 ||
lastColonPos === -1 ||
atPos === -1) return null;
var config = {
server: plain.slice(atPos + 1, lastColonPos),
server_port: plain.slice(lastColonPos + 1),
password: plain.slice(firstColonPos + 1, atPos),
method: plain.slice(0, firstColonPos)
};
return [config, tag];
}
}
return null;
}
});

View file

@ -0,0 +1,162 @@
'use strict';
'require form';
'require uci';
'require fs';
'require network';
'require rpc';
'require shadowsocks-libev as ss';
var conf = 'shadowsocks-libev';
var cfgtypes = ['ss_local', 'ss_redir', 'ss_server', 'ss_tunnel'];
var callServiceList = rpc.declare({
object: 'service',
method: 'list',
params: [ 'name' ],
expect: { '': {} }
});
return L.view.extend({
render: function(stats) {
var m, s, o;
m = new form.Map(conf,
_('Local Instances'),
_('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.'));
s = m.section(form.GridSection);
s.addremove = true;
s.cfgsections = function() {
return this.map.data.sections(this.map.config)
.filter(function(s) { return cfgtypes.indexOf(s['.type']) !== -1; })
.map(function(s) { return s['.name']; });
};
s.sectiontitle = function(section_id) {
var s = uci.get(conf, section_id);
return (s ? s['.type'] + '.' : '') + section_id;
};
s.renderSectionAdd = function(extra_class) {
var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments),
optionEl = [E('option', { value: '_dummy' }, [_('-- instance type --')])];
cfgtypes.forEach(function(t) {
optionEl.push(E('option', { value: t }, [t.replace('_', '-')]));
});
var selectEl = E('select', {
class: 'cbi-input-select',
change: function(ev) {
ev.target.parentElement.nextElementSibling.nextElementSibling
.toggleAttribute('disabled', ev.target.value === '_dummy');
}
}, optionEl);
el.lastElementChild.setAttribute('disabled', '');
el.prepend(E('div', {}, selectEl));
return el;
};
s.handleAdd = function(ev, name) {
var selectEl = ev.target.parentElement.firstElementChild.firstElementChild,
type = selectEl.value;
this.sectiontype = type;
var promise = form.GridSection.prototype.handleAdd.apply(this, arguments);
this.sectiontype = undefined;
return promise;
};
s.addModalOptions = function(s, section_id, ev) {
var sdata = uci.get(conf, section_id),
stype = sdata ? sdata['.type'] : null;
if (stype) {
s.sectiontype = stype;
return Promise.all([
L.resolveDefault(fs.stat('/usr/bin/' + stype.replace('_', '-')), null),
network.getDevices()
]).then(L.bind(function(res) {
s.tab('general', _('General Settings'));
s.tab('advanced', _('Advanced Settings'));
s.taboption('general', form.Flag, 'disabled', _('Disable'));
if (!res[0]) {
ss.option_install_package(s, 'general');
}
ss.options_common(s, 'advanced');
if (stype === 'ss_server') {
ss.options_server(s, { tab: 'general' });
o = s.taboption('general', form.Value, 'bind_address',
_('Bind address'),
_('The address ss-server will initiate connection from'));
o.datatype = 'ipaddr';
o.placeholder = '0.0.0.0';
ss.values_ipaddr(o, res[1]);
} else {
ss.options_client(s, 'general', res[1]);
if (stype === 'ss_tunnel') {
o = s.taboption('general', form.Value, 'tunnel_address',
_('Tunnel address'),
_('The address ss-tunnel will forward traffic to'));
o.datatype = 'hostport';
}
}
}, this));
}
};
o = s.option(form.DummyValue, 'overview', _('Overview'));
o.modalonly = false;
o.editable = true;
o.rawhtml = true;
o.renderWidget = function(section_id, option_index, cfgvalue) {
var sdata = uci.get(conf, section_id);
if (sdata) {
return form.DummyValue.prototype.renderWidget.call(this, section_id, option_index, ss.cfgvalue_overview(sdata));
}
return null;
};
o = s.option(form.DummyValue, 'running', _('Running'));
o.modalonly = false;
o.editable = true;
o.default = '';
o = s.option(form.Button, 'disabled', _('Enable/Disable'));
o.modalonly = false;
o.editable = true;
o.inputtitle = function(section_id) {
var s = uci.get(conf, section_id);
if (ss.ucival_to_bool(s['disabled'])) {
this.inputstyle = 'reset';
return _('Disabled');
}
this.inputstyle = 'save';
return _('Enabled');
}
o.onclick = function(ev) {
var inputEl = ev.target.parentElement.nextElementSibling;
inputEl.value = ss.ucival_to_bool(inputEl.value) ? '0' : '1';
return this.map.save();
}
return m.render().finally(function() {
L.Poll.add(function() {
return L.resolveDefault(callServiceList(conf), {})
.then(function(res) {
var instances = null;
try {
instances = res[conf]['instances'];
} catch (e) {}
if (!instances) return;
uci.sections(conf)
.filter(function(s) { return cfgtypes.indexOf(s['.type']) !== -1; })
.forEach(function(s) {
var el = document.getElementById('cbi-shadowsocks-libev-' + s['.name'] + '-running');
if (el) {
var name = s['.type'] + '.' + s['.name'],
running = instances.hasOwnProperty(name)? instances[name].running : false;
el.innerText = running ? 'yes' : 'no';
}
});
});
});
});
},
});

View file

@ -0,0 +1,123 @@
'use strict';
'require uci';
'require fs';
'require form';
'require tools.widgets as widgets';
'require shadowsocks-libev as ss';
var conf = 'shadowsocks-libev';
function src_dst_option(s /*, ... */) {
var o = s.taboption.apply(s, L.varargs(arguments, 1));
o.datatype = 'or(ipaddr,cidr)';
}
return L.view.extend({
load: function() {
return Promise.all([
L.resolveDefault(fs.stat('/usr/lib/iptables/libxt_recent.so'), {}),
L.resolveDefault(fs.stat('/usr/bin/ss-rules'), null),
uci.load(conf).then(function() {
if (!uci.get_first(conf, 'ss_rules')) {
uci.set(conf, uci.add(conf, 'ss_rules', 'ss_rules'), 'disabled', '1');
}
})
]);
},
render: function(stats) {
var m, s, o;
m = new form.Map(conf, _('Redir Rules'),
_('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 checked \
against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, \
<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> \
will give the default action to be taken. \
If the prior check results in action <em>checkdst</em>, packets will continue \
to have their dst addresses checked.'));
s = m.section(form.NamedSection, 'ss_rules', 'ss_rules');
s.tab('general', _('General Settings'));
s.tab('src', _('Source Settings'));
s.tab('dst', _('Destination Settings'));
s.taboption('general', form.Flag, 'disabled', _('Disable'));
if (!stats[1]) {
ss.option_install_package(s, 'general');
}
o = s.taboption('general', form.ListValue, 'redir_tcp',
_('ss-redir for TCP'));
ss.values_redir(o, 'tcp');
o = s.taboption('general', form.ListValue, 'redir_udp',
_('ss-redir for UDP'));
ss.values_redir(o, 'udp');
o = s.taboption('general', form.ListValue, 'local_default',
_('Local-out default'),
_('Default action for locally generated TCP packets'));
ss.values_actions(o);
o = s.taboption('general', widgets.DeviceSelect, 'ifnames',
_('Ingress interfaces'),
_('Only apply rules on packets from these network interfaces'));
o.multiple = true;
o.noaliases = true;
o.noinactive = true;
s.taboption('general', form.Value, 'ipt_args',
_('Extra arguments'),
_('Passes additional arguments to iptables. Use with care!'));
src_dst_option(s, 'src', form.DynamicList, 'src_ips_bypass',
_('Src ip/net bypass'),
_('Bypass ss-redir for packets with src address in this list'));
src_dst_option(s, 'src', form.DynamicList, 'src_ips_forward',
_('Src ip/net forward'),
_('Forward through ss-redir for packets with src address in this list'));
src_dst_option(s, 'src', form.DynamicList, 'src_ips_checkdst',
_('Src ip/net checkdst'),
_('Continue to have dst address checked for packets with src address in this list'));
o = s.taboption('src', form.ListValue, 'src_default',
_('Src default'),
_('Default action for packets whose src address do not match any of the src ip/net list'));
ss.values_actions(o);
src_dst_option(s, 'dst', form.DynamicList, 'dst_ips_bypass',
_('Dst ip/net bypass'),
_('Bypass ss-redir for packets with dst address in this list'));
src_dst_option(s, 'dst', form.DynamicList, 'dst_ips_forward',
_('Dst ip/net forward'),
_('Forward through ss-redir for packets with dst address in this list'));
var dir = '/etc/shadowsocks-libev';
o = s.taboption('dst', form.FileUpload, 'dst_ips_bypass_file',
_('Dst ip/net bypass file'),
_('File containing ip/net for the purposes as with <em>Dst ip/net bypass</em>'));
o.root_directory = dir;
o = s.taboption('dst', form.FileUpload, 'dst_ips_forward_file',
_('Dst ip/net forward file'),
_('File containing ip/net for the purposes as with <em>Dst ip/net forward</em>'));
o.root_directory = dir;
o = s.taboption('dst', form.ListValue, 'dst_default',
_('Dst default'),
_('Default action for packets whose dst address do not match any of the dst ip list'));
ss.values_actions(o);
if (stats[0].type === 'file') {
o = s.taboption('dst', form.Flag, 'dst_forward_recentrst');
} else {
uci.set(conf, 'ss_rules', 'dst_forward_recentrst', '0');
o = s.taboption('dst', form.Button, '_install');
o.inputtitle = _('Install package iptables-mod-conntrack-extra');
o.inputstyle = 'apply';
o.onclick = function() {
window.open(L.url('admin/system/opkg') +
'?query=iptables-mod-conntrack-extra', '_blank', 'noopener');
}
}
o.title = _('Forward recentrst');
o.description = _('Forward those packets whose dst have recently sent to us multiple tcp-rst');
return m.render();
},
});

View file

@ -0,0 +1,82 @@
'use strict';
'require form';
'require uci';
'require ui';
'require shadowsocks-libev as ss';
var conf = 'shadowsocks-libev';
return L.view.extend({
render: function() {
var m, s, o;
m = new form.Map(conf, _('Remote Servers'),
_('Definition of remote shadowsocks servers. \
Disable any of them will also disable instances referring to it.'));
s = m.section(form.GridSection, 'server');
s.addremove = true;
s.handleLinkImport = function() {
var textarea = new ui.Textarea();
ui.showModal(_('Import Links'), [
textarea.render(),
E('div', { class: 'right' }, [
E('button', {
class: 'btn',
click: ui.hideModal
}, [ _('Cancel') ]),
' ',
E('button', {
class: 'btn cbi-button-action',
click: ui.createHandlerFn(this, function() {
textarea.getValue().split('\n').forEach(function(s) {
var config = ss.parse_uri(s);
if (config) {
var tag = config[1];
if (tag && !tag.match(/^[a-zA-Z0-9_]+$/)) tag = null;
var sid = uci.add(conf, 'server', tag);
config = config[0];
Object.keys(config).forEach(function(k) {
uci.set(conf, sid, k, config[k]);
});
}
});
return uci.save()
.then(L.bind(this.map.load, this.map))
.then(L.bind(this.map.reset, this.map))
.then(L.ui.hideModal)
.catch(function() {});
})
}, [ _('Import') ])
])
]);
};
s.renderSectionAdd = function(extra_class) {
var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments);
el.appendChild(E('button', {
'class': 'cbi-button cbi-button-add',
'title': _('Import Links'),
'click': ui.createHandlerFn(this, 'handleLinkImport')
}, [ _('Import Links') ]));
return el;
};
o = s.option(form.Flag, 'disabled', _('Disable'));
o.editable = true;
ss.options_server(s);
return m.render();
},
addFooter: function() {
var p = '#edit=';
if (location.hash.indexOf(p) === 0) {
var section_id = location.hash.substring(p.length);
var editBtn = document.querySelector('#cbi-shadowsocks-libev-' + section_id + ' button.cbi-button-edit');
if (editBtn)
editBtn.click();
}
//return this.super('addFooter', arguments);
return null;
}
});

View file

@ -9,25 +9,14 @@ function index()
_("Shadowsocks-libev"), 59)
entry({"admin", "services", "shadowsocks-libev", "instances"},
arcombine(cbi("shadowsocks-libev/instances"), cbi("shadowsocks-libev/instance-details")),
view("shadowsocks-libev/instances"),
_("Local Instances"), 10).leaf = true
entry({"admin", "services", "shadowsocks-libev", "servers"},
cbi("shadowsocks-libev/servers"),
view("shadowsocks-libev/servers"),
_("Remote Servers"), 20).leaf = true
entry({"admin", "services", "shadowsocks-libev", "rules"},
cbi("shadowsocks-libev/rules"),
view("shadowsocks-libev/rules"),
_("Redir Rules"), 30).leaf = true
entry({"admin", "services", "shadowsocks-libev", "status"}, call("ss_status"), nil).leaf = true
end
function ss_status()
local ut = require "luci.util"
local rv = ut.ubus("service", "list", {name = "shadowsocks-libev"})["shadowsocks-libev"] or {_=0}
luci.http.prepare_content("application/json")
luci.http.write_json(rv)
end

View file

@ -1,60 +0,0 @@
-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
local ds = require "luci.dispatcher"
local ss = require "luci.model.shadowsocks-libev"
local sname = arg[1]
local redirect_url = ds.build_url("admin/services/shadowsocks-libev/instances")
local s, o
local m = Map("shadowsocks-libev")
local sdata = m:get(sname)
if not sdata then
luci.http.redirect(redirect_url)
return
end
local stype = sdata[".type"]
m.redirect = redirect_url
m.title = "shadowsocks-libev - %s - %s" % {stype, sname}
s = m:section(NamedSection, sname, stype)
s:tab("general", translate("General Settings"))
s:tab("advanced", translate("Advanced Settings"))
s:tab("obfuscate", translate("Obfuscating"))
s:taboption("general", Flag, "disabled", translate("Disable"))
ss.option_install_package(s, "general")
ss.options_common(s, "advanced")
local obfs_installed = nixio.fs.access("/usr/bin/obfs-local")
local v2ray_installed = nixio.fs.access("/usr/bin/v2ray-plugin")
if obfs_installed or v2ray_installed then
ss.options_obfs(s, "obfuscate")
end
if stype == "ss_server" then
ss.options_server(s, "general")
o = s:taboption("general", Value, "bind_address",
translate("Bind address"),
translate("The address ss-server will initiate connection from"))
o.datatype = "ipaddr"
o.placeholder = "0.0.0.0"
ss.values_ipaddr(o)
else
ss.options_client(s, "general")
if stype == "ss_tunnel" then
o = s:taboption("general", Value, "tunnel_address",
translate("Tunnel address"),
translate("The address ss-tunnel will forward traffic to"))
o.datatype = "hostport"
end
if obfs_installed or v2ray_installed then
o = s:taboption("obfuscate", Value, "obfs_host", translate("Host"))
o.default = "www.bing.com"
end
if obfs_installed then
s:taboption("obfuscate", Value, "obfs_uri", translate("HTTP path uri"))
end
end
return m

View file

@ -1,104 +0,0 @@
-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
local ds = require "luci.dispatcher"
local ss = require "luci.model.shadowsocks-libev"
local ut = require "luci.util"
local m, s, o
m = Map("shadowsocks-libev",
translate("Local Instances"),
translate("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."))
local instances = {}
local cfgtypes = { "ss_local", "ss_redir", "ss_server", "ss_tunnel" }
for sname, sdata in pairs(m:get()) do
local key, value = ss.cfgvalue_overview(sdata)
if key ~= nil then
instances[key] = value
end
end
s = m:section(Table, instances)
s.addremove = true
s.template_addremove = "shadowsocks-libev/add_instance"
s.extedit = function(self, section)
local value = instances[section]
if type(value) == "table" then
return ds.build_url(unpack(ds.context.requestpath),
"services/shadowsocks-libev/instances",
value[".name"])
end
end
s.parse = function(self, ...)
Table.parse(self, ...)
local crval = REMOVE_PREFIX .. self.config
local name = self.map:formvaluetable(crval)
for k,v in pairs(name) do
local value = instances[k]
local sname = value[".name"]
if type(value) == "table" then
m:del(sname)
instances[k] = nil
for _, oname in ipairs({"redir_tcp", "redir_udp"}) do
local ovalue = m:get("ss_rules", oname)
if ovalue == sname then
m:del("ss_rules", oname)
end
end
end
end
local stype = m:formvalue("_newinst.type")
local sname = m:formvalue("_newinst.name")
if ut.contains(cfgtypes, stype) then
local created
if sname and #sname > 0 then
created = m:set(sname, nil, stype)
else
created = m:add(stype)
sname = created
end
if created then
m.uci:save("shadowsocks-libev")
luci.http.redirect(ds.build_url(
"admin/services/shadowsocks-libev/instances", sname
))
end
end
end
o = s:option(DummyValue, "name", translate("Name"))
o.rawhtml = true
o = s:option(DummyValue, "overview", translate("Overview"))
o.rawhtml = true
s:option(DummyValue, "running", translate("Running"))
o = s:option(Button, "disabled", translate("Enable/Disable"))
o.render = function(self, section, scope)
if instances[section].disabled then
self.title = translate("Disabled")
self.inputstyle = "reset"
else
self.title = translate("Enabled")
self.inputstyle = "save"
end
Button.render(self, section, scope)
end
o.write = function(self, section)
local sdata = instances[section]
if type(sdata) == "table" then
local sname = sdata[".name"]
local disabled = not sdata["disabled"]
sdata["disabled"] = disabled
m:set(sname, "disabled", tostring(disabled))
end
end
return m

View file

@ -1,110 +0,0 @@
-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
local ss = require("luci.model.shadowsocks-libev")
local m, s, o
m = Map("shadowsocks-libev",
translate("Redir Rules"),
translate("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 checked \
against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, \
<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> \
will give the default action to be taken. \
If the prior check results in action <em>checkdst</em>, packets will continue \
to have their dst addresses checked."))
local sdata = m:get('ss_rules')
if not sdata then
m:set('ss_rules', nil, 'ss_rules')
m:set('ss_rules', 'disabled', "1")
end
function src_dst_option(s, ...)
local o = s:taboption(...)
--o.datatype = "or(ip4addr,cidr4)"
o.datatype = "or(ip4addr,ip6addr)"
end
s = m:section(NamedSection, "ss_rules", "ss_rules")
s:tab("general", translate("General Settings"))
s:tab("src", translate("Source Settings"))
s:tab("dst", translate("Destination Settings"))
s:taboption('general', Flag, "disabled", translate("Disable"))
ss.option_install_package(s, 'general')
o = s:taboption('general', ListValue, "redir_tcp",
translate("ss-redir for TCP"))
ss.values_redir(o, 'tcp')
o = s:taboption('general', ListValue, "redir_udp",
translate("ss-redir for UDP"))
ss.values_redir(o, 'udp')
o = s:taboption('general', ListValue, "local_default",
translate("Local-out default"),
translate("Default action for locally generated TCP packets"))
ss.values_actions(o)
o = s:taboption('general', DynamicList, "ifnames",
translate("Ingress interfaces"),
translate("Only apply rules on packets from these network interfaces"))
ss.values_ifnames(o)
s:taboption('general', Value, "ipt_args",
translate("Extra arguments"),
translate("Passes additional arguments to iptables. Use with care!"))
src_dst_option(s, 'src', DynamicList, "src_ips_bypass",
translate("Src ip/net bypass"),
translate("Bypass ss-redir for packets with src address in this list"))
src_dst_option(s, 'src', DynamicList, "src_ips_forward",
translate("Src ip/net forward"),
translate("Forward through ss-redir for packets with src address in this list"))
src_dst_option(s, 'src', DynamicList, "src_ips_checkdst",
translate("Src ip/net checkdst"),
translate("Continue to have dst address checked for packets with src address in this list"))
o = s:taboption('src', ListValue, "src_default",
translate("Src default"),
translate("Default action for packets whose src address do not match any of the src ip/net list"))
ss.values_actions(o)
src_dst_option(s, 'dst', DynamicList, "dst_ips_bypass",
translate("Dst ip/net bypass"),
translate("Bypass ss-redir for packets with dst address in this list"))
src_dst_option(s, 'dst', DynamicList, "dst_ips_forward",
translate("Dst ip/net forward"),
translate("Forward through ss-redir for packets with dst address in this list"))
o = s:taboption('dst', FileBrowser, "dst_ips_bypass_file",
translate("Dst ip/net bypass file"),
translate("File containing ip/net for the purposes as with <em>Dst ip/net bypass</em>"))
o.datatype = "file"
s:taboption('dst', FileBrowser, "dst_ips_forward_file",
translate("Dst ip/net forward file"),
translate("File containing ip/net for the purposes as with <em>Dst ip/net forward</em>"))
o.datatype = "file"
o = s:taboption('dst', ListValue, "dst_default",
translate("Dst default"),
translate("Default action for packets whose dst address do not match any of the dst ip list"))
ss.values_actions(o)
local installed = os.execute("iptables -m recent -h &>/dev/null") == 0
if installed then
o = s:taboption('dst', Flag, "dst_forward_recentrst")
else
m:set('ss_rules', 'dst_forward_recentrst', "0")
o = s:taboption("dst", Button, "_install")
o.inputtitle = translate("Install package iptables-mod-conntrack-extra")
o.inputstyle = "apply"
o.write = function()
return luci.http.redirect(
luci.dispatcher.build_url("admin/system/packages") ..
"?submit=1&install=iptables-mod-conntrack-extra"
)
end
end
o.title = translate("Forward recentrst")
o.description = translate("Forward those packets whose dst have recently sent to us multiple tcp-rst")
return m

View file

@ -1,31 +0,0 @@
-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
local ds = require "luci.dispatcher"
local ss = require("luci.model.shadowsocks-libev")
local m, s
m = Map("shadowsocks-libev",
translate("Remote Servers"),
translate("Definition of remote shadowsocks servers. \
Disable any of them will also disable instances refering to it."))
local sname = arg[1]
if sname then
if not m:get(sname) then
luci.http.redirect(ds.build_url("admin/services/shadowsocks-libev/servers"))
return
end
s = m:section(NamedSection, sname, "server")
m.title = m.title .. ' - ' .. sname
else
s = m:section(TypedSection, "server")
s.template = 'cbi/tblsection'
s.addremove = true
end
s:option(Flag, "disabled", translate("Disable"))
ss.options_server(s)
return m

View file

@ -1,302 +0,0 @@
-- Copyright 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
local _up = getfenv(3)
local ut = require("luci.util")
local sys = require("luci.sys")
local ds = require("luci.dispatcher")
local nw = require("luci.model.network")
local ucic = luci.model.uci.cursor()
nw.init()
module("luci.model.shadowsocks-libev", function(m)
setmetatable(m, {__index=function (self, k)
local tb = _up
return rawget(self, k) or _up[k]
end})
end)
function values_actions(o)
o:value("bypass")
o:value("forward")
if o.option ~= "dst_default" then
o:value("checkdst")
end
end
function values_redir(o, xmode)
ucic:foreach("shadowsocks-libev", "ss_redir", function(sdata)
local disabled = ucival_to_bool(sdata["disabled"])
local sname = sdata[".name"]
local mode = sdata["mode"] or "tcp_only"
if not disabled and mode:find(xmode) then
local desc = "%s - %s" % {sname, mode}
o:value(sname, desc)
end
end)
o:value("", "<unset>")
o.default = ""
end
function values_serverlist(o)
ucic:foreach("shadowsocks-libev", "server", function(sdata)
local sname = sdata[".name"]
local server = sdata["server"]
local server_port = sdata["server_port"]
if server and server_port then
local disabled = ucival_to_bool(sdata[".disabled"]) and " - disabled" or ""
local desc = "%s - %s:%s%s" % {sname, server, server_port, disabled}
o:value(sname, desc)
end
end)
end
function values_ipaddr(o)
for _, v in ipairs(nw:get_interfaces()) do
for _, a in ipairs(v:ipaddrs()) do
o:value(a:host():string(), '%s (%s)' %{ a:host(), v:shortname() })
end
end
end
function values_ifnames(o)
for _, v in ipairs(sys.net.devices()) do
o:value(v)
end
end
function options_client(s, tab)
local o
o = s:taboption(tab, ListValue, "server", translate("Remote server"))
values_serverlist(o)
o = s:taboption(tab, Value, "local_address", translate("Local address"))
o.datatype = "ipaddr"
o.placeholder = "0.0.0.0"
values_ipaddr(o)
o = s:taboption(tab, Value, "local_port", translate("Local port"))
o.datatype = "port"
end
function options_server(s, tab)
local o
local optfunc
if tab == nil then
optfunc = function(...) return s:option(...) end
else
optfunc = function(...) return s:taboption(tab, ...) end
end
o = optfunc(Value, "server", translate("Server"))
o.datatype = "host"
o.size = 16
o = optfunc(Value, "server_port", translate("Server port"))
o.datatype = "port"
o.size = 5
o = optfunc(ListValue, "method", translate("Method"))
for _, m in ipairs(methods) do
o:value(m)
end
o = optfunc(Value, "key", translate("Key (base64 encoding)"))
o.datatype = "base64"
o.password = true
o = optfunc(Value, "password", translate("Password"))
o.password = true
o.size = 12
end
function options_common(s, tab)
local o
o = s:taboption(tab, ListValue, "mode", translate("Mode of operation"))
for _, m in ipairs(modes) do
o:value(m)
end
o.default = "tcp_and_udp"
o = s:taboption(tab, Value, "mtu", translate("MTU"))
o.datatype = "uinteger"
o = s:taboption(tab, Value, "timeout", translate("Timeout (sec)"))
o.datatype = "uinteger"
s:taboption(tab, Value, "user", translate("Run as"))
s:taboption(tab, Flag, "verbose", translate("Verbose"))
s:taboption(tab, Flag, "ipv6_first", translate("IPv6 First"), translate("Prefer IPv6 addresses when resolving names"))
s:taboption(tab, Flag, "fast_open", translate("Enable TCP Fast Open"))
s:taboption(tab, Flag, "reuse_port", translate("Enable SO_REUSEPORT"))
s:taboption(tab, Flag, "no_delay", translate("Enable TCP_NODELAY"))
s:taboption(tab, Flag, "mptcp", translate("Enable MPTCP"))
--s:taboption(tab, Flag, "ebpf", translate("Enable eBPF"))
end
function options_obfs(s, tab)
local o
local v2ray_installed = nixio.fs.access("/usr/bin/v2ray-plugin")
local obfs_installed = nixio.fs.access("/usr/bin/obfs-local")
s:taboption(tab, Flag, "obfs", translate("Enable"))
o = s:taboption(tab, ListValue, "obfs_plugin", translate("Plugin"))
if v2ray_installed then
o:value("v2ray")
o.default = "v2ray"
else
o.default = "obfs-simple"
end
if obfs_installed then
o:value("obfs-simple")
end
o = s:taboption(tab, ListValue, "obfs_type", translate("Type"))
o:value("http")
o:value("tls")
o.default = "http"
end
function ucival_to_bool(val)
return val == "true" or val == "1" or val == "yes" or val == "on"
end
function cfgvalue_overview(sdata)
local stype = sdata[".type"]
local lines = {}
if stype == "ss_server" then
cfgvalue_overview_(sdata, lines, names_options_server)
cfgvalue_overview_(sdata, lines, names_options_common)
cfgvalue_overview_(sdata, lines, {
"bind_address",
})
local installed = nixio.fs.access("/usr/bin/obfs-server")
if installed then
cfgvalue_overview_(sdata, lines, names_options_obfs)
end
elseif stype == "ss_local" or stype == "ss_redir" or stype == "ss_tunnel" then
cfgvalue_overview_(sdata, lines, names_options_client)
if stype == "ss_tunnel" then
cfgvalue_overview_(sdata, lines, {"tunnel_address"})
end
cfgvalue_overview_(sdata, lines, names_options_common)
local installed = nixio.fs.access("/usr/bin/obfs-local")
if installed then
cfgvalue_overview_(sdata, lines, names_options_obfs)
end
else
return nil, nil
end
local sname = sdata[".name"]
local key = "%s.%s" % {stype, sname}
local value = {
[".name"] = sname,
name = '%s.<var>%s</var>' % {stype, sname},
overview = table.concat(lines, "</br>"),
disabled = ucival_to_bool(sdata["disabled"]),
}
return key, value
end
function cfgvalue_overview_(sdata, lines, names)
local line
for _, n in ipairs(names) do
local v = sdata[n]
if v ~= nil then
if n == "key" or n == "password" then
v = translate("<hidden>")
end
local fv = "<var>%s</var>" % ut.pcdata(v)
if sdata[".type"] ~= "ss_server" and n == "server" then
fv = '<a class="label" href="%s">%s</a>' % {
ds.build_url("admin/services/shadowsocks-libev/servers", v), fv}
end
line = n .. ": " .. fv
table.insert(lines, line)
end
end
end
function option_install_package(s, tab)
local bin = s.sectiontype:gsub("_", "-", 1)
local installed = nixio.fs.access("/usr/bin/" .. bin)
if installed then
return
end
local opkg_package = "shadowsocks-libev-" .. bin
local p_install
if tab then
p_install = s:taboption(tab, Button, "_install")
else
p_install = s:option(Button, "_install")
end
p_install.title = translate("Package is not installed")
p_install.inputtitle = translate("Install package %q" % opkg_package)
p_install.inputstyle = "apply"
function p_install.write()
return luci.http.redirect(
luci.dispatcher.build_url("admin/system/packages") ..
"?submit=1&install=%s" % opkg_package
)
end
end
names_options_server = {
"server",
"server_port",
"method",
"key",
"password",
}
names_options_client = {
"server",
"local_address",
"local_port",
}
names_options_common = {
"verbose",
"ipv6_first",
"fast_open",
"no_delay",
"reuse_port",
"mode",
"mtu",
"timeout",
"user",
"mptcp",
}
names_options_obfs = {
"obfs",
}
modes = {
"tcp_only",
"tcp_and_udp",
"udp_only",
}
methods = {
"none",
-- aead
"aes-128-gcm",
"aes-192-gcm",
"aes-256-gcm",
"chacha20-ietf-poly1305",
"xchacha20-ietf-poly1305",
-- stream
"table",
"rc4",
"rc4-md5",
"aes-128-cfb",
"aes-192-cfb",
"aes-256-cfb",
"aes-128-ctr",
"aes-192-ctr",
"aes-256-ctr",
"bf-cfb",
"camellia-128-cfb",
"camellia-192-cfb",
"camellia-256-cfb",
"salsa20",
"chacha20",
"chacha20-ietf",
}

View file

@ -1,38 +0,0 @@
<div class="cbi-section-create cbi-tblsection-create">
<div>
<select class="cbi-input-select" id="_newinst.type" name="_newinst.type">
<option value="_dummy">-- instance type --</option>
<option value="ss_local">ss-local</option>
<option value="ss_tunnel">ss-tunnel</option>
<option value="ss_redir">ss-redir</option>
<option value="ss_server">ss-server</option>
</select>
</div>
<div>
<input type="text" class="cbi-input-text" id="_newinst.name" name="_newinst.name" placeholder="<%:Name%>"/>
</div>
<input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>" value="<%:Add%>" />
</div>
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url('admin/services/shadowsocks-libev/status')%>', null,
function(x, st)
{
var names = [
<%-
for _, name in ipairs(self:cfgsections()) do
write("%q," % name)
end
-%>
];
var instances = st["instances"] || {};
for (var i = 0, len = names.length; i < len; i++) {
var name = names[i];
var el = document.getElementById('cbi-table-' + name + '-running');
if (el) {
var running = instances.hasOwnProperty(name)? instances[name].running : false;
el.innerText = running ? 'yes' : 'no';
}
}
}
);
//]]></script>

View file

@ -0,0 +1,327 @@
msgid ""
msgstr ""
"Language: bg\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: applications/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
msgid "<hidden>"
msgstr ""
#: applications/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
msgid "Bind address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:87
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
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
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
msgid "Default action for locally generated TCP packets"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:103
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
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
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
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
msgid "Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:128
msgid "Disabled"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:102
msgid "Dst default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:86
msgid "Dst ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:94
msgid "Dst ip/net bypass file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:89
msgid "Dst ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:98
msgid "Dst ip/net forward file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:181
msgid "Enable SO_REUSEPORT"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:179
msgid "Enable TCP Fast Open"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:180
msgid "Enable TCP_NODELAY"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:121
msgid "Enable/Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:131
msgid "Enabled"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:68
msgid "Extra arguments"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:95
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
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
msgid "Forward recentrst"
msgstr ""
#: applications/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
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
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
msgid "General Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
msgid "IPv6 First"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:62
msgid "Ingress interfaces"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:235
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
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
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
msgid "Local Instances"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:113
msgid "Local address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:117
msgid "Local port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:58
msgid "Local-out default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:171
msgid "MTU"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:146
msgid "Method"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:166
msgid "Mode of operation"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:31
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 "
"checked against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, "
"<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> will "
"give the default action to be taken. If the prior check results in action "
"<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
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
msgid "Overview"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:234
msgid "Package is not installed"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:69
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:151
msgid "Password"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:161
msgid "Plugin"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:163
msgid "Plugin Options"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
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
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
msgid "Remote Servers"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:111
msgid "Remote server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:175
msgid "Run as"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:116
msgid "Running"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:138
msgid "Server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:142
msgid "Server port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:9
msgid "Shadowsocks-libev"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:42
msgid "Source Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:81
msgid "Src default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:72
msgid "Src ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:78
msgid "Src ip/net checkdst"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:75
msgid "Src ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:87
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
msgid "The address ss-tunnel will forward traffic to"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:173
msgid "Timeout (sec)"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:95
msgid "Tunnel address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:177
msgid "Verbose"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:51
msgid "ss-redir for TCP"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:54
msgid "ss-redir for UDP"
msgstr ""

View file

@ -0,0 +1,336 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2019-10-25 18:01+0000\n"
"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsshadowsocks-libev/ca/>\n"
"Language: ca\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 3.9.1-dev\n"
#: applications/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
msgid "<hidden>"
msgstr ""
#: applications/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
msgid "Bind address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:87
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
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
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
msgid "Default action for locally generated TCP packets"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:103
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
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
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
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
msgid "Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:128
msgid "Disabled"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:102
msgid "Dst default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:86
msgid "Dst ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:94
msgid "Dst ip/net bypass file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:89
msgid "Dst ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:98
msgid "Dst ip/net forward file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:181
msgid "Enable SO_REUSEPORT"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:179
msgid "Enable TCP Fast Open"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:180
msgid "Enable TCP_NODELAY"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:121
msgid "Enable/Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:131
msgid "Enabled"
msgstr "Activat"
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:68
msgid "Extra arguments"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:95
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
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
msgid "Forward recentrst"
msgstr ""
#: applications/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
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
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
msgid "General Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
msgid "IPv6 First"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:62
msgid "Ingress interfaces"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:235
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
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
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
msgid "Local Instances"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:113
msgid "Local address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:117
msgid "Local port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:58
msgid "Local-out default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:171
msgid "MTU"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:146
msgid "Method"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:166
msgid "Mode of operation"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:31
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 "
"checked against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, "
"<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> will "
"give the default action to be taken. If the prior check results in action "
"<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
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
msgid "Overview"
msgstr "Visió de conjunt"
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:234
msgid "Package is not installed"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:69
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:151
msgid "Password"
msgstr "Contrasenya"
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:161
msgid "Plugin"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:163
msgid "Plugin Options"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
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
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
msgid "Remote Servers"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:111
msgid "Remote server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:175
msgid "Run as"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:116
msgid "Running"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:138
msgid "Server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:142
msgid "Server port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:9
msgid "Shadowsocks-libev"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:42
msgid "Source Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:81
msgid "Src default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:72
msgid "Src ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:78
msgid "Src ip/net checkdst"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:75
msgid "Src ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:87
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
msgid "The address ss-tunnel will forward traffic to"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:173
msgid "Timeout (sec)"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:95
msgid "Tunnel address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:177
msgid "Verbose"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:51
msgid "ss-redir for TCP"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:54
msgid "ss-redir for UDP"
msgstr ""
#~ msgid "Name"
#~ msgstr "Nom"

View file

@ -0,0 +1,327 @@
msgid ""
msgstr ""
"Language: cs\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: applications/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
msgid "<hidden>"
msgstr ""
#: applications/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
msgid "Bind address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:87
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
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
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
msgid "Default action for locally generated TCP packets"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:103
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
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
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
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
msgid "Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:128
msgid "Disabled"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:102
msgid "Dst default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:86
msgid "Dst ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:94
msgid "Dst ip/net bypass file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:89
msgid "Dst ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:98
msgid "Dst ip/net forward file"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:181
msgid "Enable SO_REUSEPORT"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:179
msgid "Enable TCP Fast Open"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:180
msgid "Enable TCP_NODELAY"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:121
msgid "Enable/Disable"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:131
msgid "Enabled"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:68
msgid "Extra arguments"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:95
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
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
msgid "Forward recentrst"
msgstr ""
#: applications/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
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
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
msgid "General Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
msgid "IPv6 First"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:62
msgid "Ingress interfaces"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:235
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
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
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
msgid "Local Instances"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:113
msgid "Local address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:117
msgid "Local port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:58
msgid "Local-out default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:171
msgid "MTU"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:146
msgid "Method"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:166
msgid "Mode of operation"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:31
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 "
"checked against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, "
"<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> will "
"give the default action to be taken. If the prior check results in action "
"<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
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
msgid "Overview"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:234
msgid "Package is not installed"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:69
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:151
msgid "Password"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:161
msgid "Plugin"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:163
msgid "Plugin Options"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:178
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
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
msgid "Remote Servers"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:111
msgid "Remote server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:175
msgid "Run as"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:116
msgid "Running"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:138
msgid "Server"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:142
msgid "Server port"
msgstr ""
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:9
msgid "Shadowsocks-libev"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:42
msgid "Source Settings"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:81
msgid "Src default"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:72
msgid "Src ip/net bypass"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:78
msgid "Src ip/net checkdst"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:75
msgid "Src ip/net forward"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:87
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
msgid "The address ss-tunnel will forward traffic to"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:173
msgid "Timeout (sec)"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/instances.js:95
msgid "Tunnel address"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/shadowsocks-libev.js:177
msgid "Verbose"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:51
msgid "ss-redir for TCP"
msgstr ""
#: applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/rules.js:54
msgid "ss-redir for UDP"
msgstr ""

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