+1
Under review

Драйвер SNMP

Viacheslav Alekseev 2 weeks ago in Bugs and problems updated by Vladimir Ovchinnikov 3 days ago 8

Здравствуйте!

Подскажите, нет ли каких-то ограничений в драйвере SNMP в зависимости от платформы?

Пытаемся управлять и читать состояние устройства (реле LPowerNode) .

Из эмулятора под windows все работает корректно. Но этот же проект, залитый на планшет с Android, не работает. Проверили - от него не идёт никаких UDP пакетов на 161 порт. Другие UDP пакеты (через Custom драйвер) от него нормально доходят. То есть сеть вряд ли что-то блочит.

В дебаг логе никаких ошибок. (Кстати, лог же тоже идёт по UDP,  что подтверждает, что проблема не в сети).

Under review

Добрый день.

В Android первые 1024 портов зарезервированы операционной системой для других задач. Укажите в драйвере порт, на котором открывается сокет, выше 1024 и убедитесь, что это порт не занят другим процессом.

Здравствуйте! Да, была такакя мысль, что не может открыть 162 порт.

Есть вот какие новости:

Само управление работает, то есть пакеты улетают и устройство выполняет команды.

Не работает обратная связь - то есть ответы не доходят до планшета.

Мы попробовали разные порты - ни один не заработал.

Пробовали так же поставить пустое поле, чтобы он выбрал локальный порт сам (у нас в проекте есть драйверы на основе AV & Custom Systems (UDP) и они успешно получают ответы с пустым полем LocalPort на том же планшете. Локальный порт выделаяется автоматически.)

Вот лог, который прилетает, если поставить режим драйвера в Debug:

<7>[06-09-2019 16:38:21.000]DEBUG CUSTOM CCustomDevice(LPowerNode(1)): StartConnect()
<7>[06-09-2019 16:38:21.000]DEBUG CUSTOM Requested -745155424 count 1
<7>[06-09-2019 16:38:22.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:22.000]DEBUG CUSTOM Requested -745155424 count 2
<7>[06-09-2019 16:38:22.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:22.000]DEBUG CUSTOM Requested -745155424 count 3
<7>[06-09-2019 16:38:23.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:23.000]DEBUG CUSTOM Requested -745155384 count 1
<7>[06-09-2019 16:38:23.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:23.000]DEBUG CUSTOM Requested -745155384 count 2
<7>[06-09-2019 16:38:24.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:24.000]DEBUG CUSTOM Requested -745155384 count 3
<7>[06-09-2019 16:38:24.000]DEBUG CUSTOM Timeout
<7>[06-09-2019 16:38:24.000]DEBUG CUSTOM init finish

Такойже лог прилетает, когда запускается клиент на ПК, но есть отличие:

[06-09-2019 16:40:24.922] DEBUG CUSTOM Requested 158454760 count 1
[06-09-2019 16:40:25.342] DEBUG CUSTOM Timeout
[06-09-2019 16:40:25.366] DEBUG CUSTOM Requested 158454760 count 2
[06-09-2019 16:40:25.773] DEBUG CUSTOM Timeout
[06-09-2019 16:40:25.803] DEBUG CUSTOM Requested 158454760 count 3
[06-09-2019 16:40:26.206] DEBUG CUSTOM Timeout
[06-09-2019 16:40:26.231] DEBUG CUSTOM Requested 158454952 count 1
[06-09-2019 16:40:26.637] DEBUG CUSTOM Timeout
[06-09-2019 16:40:26.666] DEBUG CUSTOM Requested 158454952 count 2
[06-09-2019 16:40:27.074] DEBUG CUSTOM Timeout
[06-09-2019 16:40:27.105] DEBUG CUSTOM Requested 158454952 count 3

Несмотря на какие-то таймауты, обратная связь в клиенте на ПК прекрасно работает.

Смущает то, что в первом случае вот эти числа 745155384 - отрицательные.
Не знаю, что они значат, но может поэтому ничего не работает?

Добрый день.

Для решения нужно знать, значение какого типа пытаетесь получить в драйвер.

Сильно ускорит решение, если сделаете дамп Wireshark отправки/получения на Windows, такой же дамп на Android. Обязательно приложите проекты.

Здравствуйте. Только сейчас удалось снять дампы. 

Там три файла - дамп с эмулятора и два с Андроида.

К сожалению, на планшете у нас нет рута, поэтому пришлось воспользоваться единственным сниффером, который умеет без рута, но он при этом делает какой-то свой VPN, поэтому исходящий IP там не в той подсети (10.8.0.), в которой реально находится планшет (192.168.0.).

Но, поскольку другие UDP посылки через этот VPN более-менее проходят, то можно надеяться, что он не очень повлияло на достоверность результатов.

Например, у нас там есть своя служба, которая обменивается пинг-понгами по UDP порту 4001, и этот обмен можно увидеть, если сделать фильтр udp.port==4001. Ответы ("pong") прилетают, драйвер в Иридиуме их видит и выставляет состояние фидбека. Под Андроидом это тоже работает.

По дампу пакетов, я вижу что устройство одинаково  присылает ответы и в эмулятор и в планшет.

Но в эмуляторе фидбек выставляется, а в планшете нет.

Пробовали разные порты (прикладываю два дампа с планшета - с портами 1025 и 10025) - эффект один.

Ощущение, что есть какой-то баг в реализации обработки ответов именно под Андроид, либо SNMP драйвер все-таки не хочет открывать входящий порт под андроидом.

Еще одну странность в этом дампе заметил - сначала при старте проекта шлется много get-request, на которые нет ответа (см скриншот). А потом у меня включается таймер, который дёргает Get запрос каждые несколько секунд - и вот на эти запросы уже идут нормальные ответы. Такое ощущение что система при старте пытается опросить состояние заданных каналов, но делает это как-то неправильно.

SNMP_dumps.zip

snmp-pc-emulator.PNG

Добрый день.

Вы проверили тестовую сборку?

Здравствуйте. Сегодня будем проверять. Для проверки требуется выезд на объект, т.к. только там есть необходимое оборудование. По результатам напишем.

здравствуйте! Проверили! Обратная связь работает.

Заметили, что планшет сильно тормозит во время работы приложения.

Похоже, где-то закрался бесконечный цикл.

(проект не менялся, да и на эмуляторе нагрузки на проц не выявлено, так что вряд ли это наш баг)

Добрый день.

Значит вопрос с драйвер SNMP закрываем.

По производительности: создайте простой проект с драйвером SNMP и выведите на графический элемент любое значение. Если тормозить не будет, значит причина не в i3 pro.