|
Модераторы: xvr |
|
WOLFY17 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.4.2017 Репутация: нет Всего: нет |
kyzia887, У меня почему-то оба примера (MyTestTables и PhoenixServicesTable) выдают данные только начиная со второго запроса snmpwalk. На первом выдают ошибку "No Such Object available on this agent at this OID". С первого запроса данные выдаются только если таблица заполнялась в функции инициализации, сразу при создании таблицы. И то такое ощущение, что выдаются те данные, которые были записаны при инициализации, а не те, которые были записаны уже в обработчике запроса. У тебя не возникало такой проблемы?
|
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
У меня была аналогичная ситуация, и если честно, то я ее не исправил, т.к. не было времени разбираться. Буду признателен, если ты найдешь решение и опишешь его тут. |
|||
|
||||
WOLFY17 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.4.2017 Репутация: нет Всего: нет |
Я пока понял, что таблице нужна первоначальная, если можно так выразиться, "инициализация", то есть до запроса. Если её не сделать (то есть на заполнить таблицу чем либо), то будет происходить то, что происходит. Я пока делаю так - в функции init_<> создаю таблицу, заполняю её какими-либо данными и после этого в обработчике запросов всё работает корректно. Но появилась другая проблема: команда snmpwalk просто выполняет последовательные запросы командами GET и GETNEXT для каждого отдельного поля: есть 10 полей-будет 10 запросов разных OIDов. То есть сама по себе таблица как таковая не запрашивается, просто все запросы сводятся к одному обработчику. Отсюда возникает небольшая сложность, касающаяся того как же заполнять таблицу? Строка (row) формируется целиком и уже после формирования добавляется в таблицу. А растягивать её формирование на несколько запросов, в каждом их которых будет заполняться одно поле-не очень хорошая идея. С другой стороны, и перезаписывать всю таблицу с одними и теми же данными 10 раз в каждом из запросов тоже не есть хорошо + в этом случае нужно следить за актуальностью данных. Это сообщение отредактировал(а) WOLFY17 - 21.8.2017, 09:21 |
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Это нормальное поведение, ведь snmpwalk выпоняет последовательно GETNEXT запросы, пока не выберет все данные из таблицы. |
|||
|
||||
WOLFY17 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.4.2017 Репутация: нет Всего: нет |
kyzia887, попробую ещё раз возродить тему)) Вы не пробовали не отвечать на запросы с помощью net-snmp, а наоборот - самому запрашивать данные у устройства в своём приложении? То есть, может быть есть у net-snmp какой-то API для пользовательского кода, аналог snmpget. Если вы сталкивались с такой задачей буду очень благодарен, если поделитесь информацией))
|
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Добрый день. Прошло много времени, но я отвечу)) Библиотека net-snmp позволяет выполнять весь спектр клиентских запросов. Пример использования проще всего посмотреть в исходниках где реализованы клиенты (snmpget, snmpwalk и тд). Могу сказать сразу, что библиотека net-snmp не поддерживаем многопоточность в рамках клиентских запросов. Эти факторы нужно учитывать заранее. |
|||
|
||||
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |