mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 19:11:51 +00:00
commit
10b7c312c1
457 changed files with 20250 additions and 204102 deletions
|
@ -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
9
.codeclimate
Normal file
|
@ -0,0 +1,9 @@
|
|||
plugins:
|
||||
shellcheck:
|
||||
enabled: true
|
||||
engines:
|
||||
luacheck:
|
||||
enabled: true
|
||||
ratings:
|
||||
paths:
|
||||
- "**.lua"
|
12
README.md
12
README.md
|
@ -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)
|
|
@ -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
43
dsvpn/Makefile
Normal 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
87
dsvpn/files/init
Executable 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
|
||||
}
|
65
dsvpn/patches/nofirewall.patch
Normal file
65
dsvpn/patches/nofirewall.patch
Normal 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
|
10
dsvpn/patches/nostrip.patch
Normal file
10
dsvpn/patches/nostrip.patch
Normal 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
|
|
@ -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
|
||||
|
||||
|
|
11
glorytun-udp/patches/aegis-arm.patch
Normal file
11
glorytun-udp/patches/aegis-arm.patch
Normal 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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
16
luci-app-dsvpn/Makefile
Normal 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
|
7
luci-app-dsvpn/luasrc/controller/dsvpn.lua
Normal file
7
luci-app-dsvpn/luasrc/controller/dsvpn.lua
Normal 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
|
44
luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua
Normal file
44
luci-app-dsvpn/luasrc/model/cbi/dsvpn.lua
Normal 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
|
52
luci-app-dsvpn/po/fr/dsvpn.po
Normal file
52
luci-app-dsvpn/po/fr/dsvpn.po
Normal 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"
|
41
luci-app-dsvpn/po/templates/dsvpn.pot
Normal file
41
luci-app-dsvpn/po/templates/dsvpn.pot
Normal 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 ""
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<fieldset class="cbi-section">
|
||||
<legend>
|
||||
<a href="<%=url('admin/services/glorytun')%>"><%:Overview%></a> »
|
||||
<a href="<%=url('admin/vpn/glorytun')%>"><%:Overview%></a> »
|
||||
<%=luci.i18n.translatef("Instance \"%s\"", self.instance)%>
|
||||
</legend>
|
||||
</fieldset>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)" />
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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
78
luci-app-macvlan/Makefile
Normal 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))
|
10
luci-app-macvlan/files/luci/controller/macvlan.lua
Normal file
10
luci-app-macvlan/files/luci/controller/macvlan.lua
Normal 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
|
14
luci-app-macvlan/files/luci/i18n/macvlan.zh-cn.po
Normal file
14
luci-app-macvlan/files/luci/i18n/macvlan.zh-cn.po
Normal 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 "序号"
|
22
luci-app-macvlan/files/luci/model/cbi/macvlan/macvlan.lua
Normal file
22
luci-app-macvlan/files/luci/model/cbi/macvlan/macvlan.lua
Normal 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
|
|
@ -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
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#!/bin/sh
|
||||
/etc/init.d/omr-bypass reload
|
||||
/etc/init.d/omr-bypass reload_rules
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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"))
|
||||
|
|
157
luci-app-omr-dscp/po/fr/omr-dscp.po
Normal file
157
luci-app-omr-dscp/po/fr/omr-dscp.po
Normal 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"
|
146
luci-app-omr-dscp/po/templates/omr-dscp.pot
Normal file
146
luci-app-omr-dscp/po/templates/omr-dscp.pot
Normal 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 ""
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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%>
|
|
@ -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%>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) + " °";
|
||||
content += _('Core temp:') + " " + (mArray.openmptcprouter.core_temp / 1000).toFixed(1) + " °";
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.uptime)
|
||||
{
|
||||
var date = new Date(null);
|
||||
content += "Uptime: " + String.format('%t', mArray.openmptcprouter.uptime);
|
||||
content += _('Uptime:') + " " + String.format('%t', mArray.openmptcprouter.uptime);
|
||||
content += "<br />";
|
||||
}
|
||||
if (mArray.openmptcprouter.dhcpd)
|
||||
|
@ -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>
|
||||
|
|
|
@ -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="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="2">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" 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="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="3">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-netmask" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" 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="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="4">
|
||||
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" 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">
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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 ""
|
||||
|
|
10
luci-app-openmptcprouter/root/bin/omr-3g
Executable file
10
luci-app-openmptcprouter/root/bin/omr-3g
Executable 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
|
14
luci-app-openmptcprouter/root/bin/omr-huawei
Executable file
14
luci-app-openmptcprouter/root/bin/omr-huawei
Executable 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
|
|
@ -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
|
12
luci-app-openmptcprouter/root/bin/omr-modemmanager
Executable file
12
luci-app-openmptcprouter/root/bin/omr-modemmanager
Executable 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
|
|
@ -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
|
||||
|
|
27
luci-app-openmptcprouter/root/bin/omr-qmi
Executable file
27
luci-app-openmptcprouter/root/bin/omr-qmi
Executable 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
|
|
@ -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
|
|
@ -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"
|
||||
}
|
|
@ -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
|
||||
|
|
1485
luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
Executable file
1485
luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter
Executable file
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
|
@ -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';
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
|
@ -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();
|
||||
},
|
||||
});
|
|
@ -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;
|
||||
}
|
||||
});
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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",
|
||||
}
|
|
@ -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>
|
327
luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po
Normal file
327
luci-app-shadowsocks-libev/po/bg/shadowsocks-libev.po
Normal 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 ""
|
336
luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po
Normal file
336
luci-app-shadowsocks-libev/po/ca/shadowsocks-libev.po
Normal 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"
|
327
luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po
Normal file
327
luci-app-shadowsocks-libev/po/cs/shadowsocks-libev.po
Normal 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
Loading…
Reference in a new issue