qzeleza / kvas

vpn и shadowsocks клиент для роутеров keenetic
Other
649 stars 41 forks source link

Исправление: роутер со слабым процессором не может корректно обновить vpn-подключения #64

Closed flexxxxer closed 1 year ago

flexxxxer commented 1 year ago

Я имею роутер Zyxel Keenetic Extra II где одноядерный процессор 2016 года. При выполнении kvas setup или kvas vpn rescan он почти всегда определяет vpn-подключения как отключенные/не работающие из-за чего настройка (выполнение kvas setup) невозможно. Это исправление к описанной выше проблеме.

flexxxxer commented 1 year ago

у меня нет идей кроме как проверять количество ядер процессора (если это вообще возможно) и если оно равно 1, то допускать что процессор "медленный" в роутере

qzeleza commented 1 year ago

Приведите пожалуйста, вывод команды cat /opt/etc/entware_release для Вашего "старого" устройства.

flexxxxer commented 1 year ago
~ # cat /opt/etc/entware_release
release=entware
arch=mipsel
cpu=mips32r2
cpu_subtype=unknown
float=soft
gcc=8.4.0
gcc_flags=-O2 -pipe -mno-branch-likely -mips32r2 -mtune=mips32r2 -fno-caller-saves -msoft-float
libc=glibc
libc_version=2.27
~ #
qzeleza commented 1 year ago

Нет, не подходит. Тогда cat /proc/cpuinfo

flexxxxer commented 1 year ago
~ # cat /proc/cpuinfo
system type             : MediaTek MT7628 SoC
machine                 : Unknown
processor               : 0
cpu model               : MIPS 24KEc V5.5
BogoMIPS                : 385.02
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16 dsp
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available

~ #
qzeleza commented 1 year ago

В этом случае, можно предложить следующий вариант для Вашего процессора:

cat /proc/cpuinfo | grep 'system type' | cut -d':' -f2 | cut -d' ' -f3 | grep -q MT7621 && sleep 10

flexxxxer commented 1 year ago

В этом случае, можно предложить следующий вариант для Вашего процессора:

cat /proc/cpuinfo | grep 'system type' | cut -d':' -f2 | cut -d' ' -f3 | grep -q MT7621 && sleep 10

ваше решение не производит ожидания на моем роутере, и даже если бы производило то что, все подряд процессоры 1 ядерные добавили бы?

qzeleza commented 1 year ago

В этом случае, можно предложить следующий вариант для Вашего процессора: cat /proc/cpuinfo | grep 'system type' | cut -d':' -f2 | cut -d' ' -f3 | grep -q MT7621 && sleep 10

ваше решение не производит ожидания на моем роутере, и даже если бы производило то что, все подряд процессоры 1 ядерные добавили бы?

Хорошо, предложите свое решение, которое будет Вас устраивать. Если не подходит предложений вариант - просто используйте свое решение.

flexxxxer commented 1 year ago

то есть вместо того чтобы продолжить дискуссию и всё же добавить решение проблемы вы просто закрываете пул реквест и всё?

mehonator commented 1 year ago

А нельзя повторить основную команду, с задержкой 10с, если если все Впн соединения имеют статус неподключенных? Тогда флаг слабого процессора вообще не нужен. На баше не писал какие-то серьёзные проекты, только небольшие скрипты, поэтому с конкретной реализацией прям сейчас не смогу помочь.

flexxxxer commented 1 year ago

А нельзя повторить основную команду, с задержкой 10с, если если все Впн соединения имеют статус неподключенных? Тогда флаг слабого процессора вообще не нужен. На баше не писал какие-то серьёзные проекты, только небольшие скрипты, поэтому с конкретной реализацией прям сейчас не смогу помочь.

нет нельзя. проблема в том что сброс соединения и чтение его состояния в функции где я внес исправление является местом ошибки. выполнение kvas setup два раза подряд с промежутком в 10 и более секунд ничего не даст, как и выполнение kvas vpn rescan два раза подряд с промежутком в 10 и более секунд

mehonator commented 1 year ago

А нельзя повторить основную команду, с задержкой 10с, если если все Впн соединения имеют статус неподключенных? Тогда флаг слабого процессора вообще не нужен. На баше не писал какие-то серьёзные проекты, только небольшие скрипты, поэтому с конкретной реализацией прям сейчас не смогу помочь.

нет нельзя. проблема в том что сброс соединения и чтение его состояния в функции где я внес исправление является местом ошибки. выполнение kvas setup два раза подряд с промежутком в 10 и более секунд ничего не даст, как и выполнение kvas vpn rescan два раза подряд с промежутком в 10 и более секунд

А так? Правда надо ещё реализовать getIsLinkInterface(), либо найти аналогичную функцию из проекта, если она есть

    for inface_cli in ${inface_list}; do
#       переподключаем текущее соединение
        reset_connection "${inface_cli}"
               isLink = getIsLinkInterface(inface_cli)
               if ! isLink {
                   # Костыль, для старых процессоров 
                   sleep 10
               }
                # получаем описание интерфейса
        description=$(get_value_interface_field "${inface_cli}" description | sed 's|\/|\\/|g')
flexxxxer commented 1 year ago

и что должен делать getIsLinkInterface?

mehonator commented 1 year ago

Проверить, есть ли соединение на этом интерфейсе. Если есть соединение, то вернуть True, если нет, то False

flexxxxer commented 1 year ago

ладно, попробую на днях реализовать, посмотрим получится ли

qzeleza commented 1 year ago

ваше решение не производит ожидания на моем роутере, и даже если бы производило то что, все подряд процессоры 1 ядерные добавили бы? то есть вместо того чтобы продолжить дискуссию и всё же добавить решение проблемы вы просто закрываете пул реквест и всё?

Вы не даете достаточной обратной связи и не хотите помочь самому себе. Вами не было предоставлено никакой информации, на основании которой Вы сделали подобный вывод, а Ваше сообщение выше я склонен рассматривать больше, как претензию, а не как просьбу о помощи, потому, я принял решение о закрытии данной дискуссии.

Если есть желание помочь себе, то необходима информация о которой я написал выше. Так же, прошу прояснить о какой именно ошибке идет речь в Вашем сообщении, цитирую: "и чтение его состояния в функции где я внес исправление является местом ошибки".

a8t3r commented 5 months ago

@qzeleza На самом деле вывода /proc/cpuinfo достаточно, потому что строка processor это не количество, а порядковый номер процессора. То есть 0 - это один.

awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo

@flexxxxer Можешь добавить вывод из cat /sys/devices/system/cpu/kernel_max? или любого файла из это директории