Отложенная инициализация таблицы

Можно ли с помощью net-snmp API и mib2c сгенерировать скелетный код поддерживать отложенную инициализацию таблиц? Я имею в виду, что таблица не будет инициализирована до тех пор, пока ни один из ее членов не будет запрошен напрямую. Причина этого в том, что данные участников получены с другого сервера, и я хотел бы иметь возможность запускать демон snmpd, не требуя, чтобы другой сервер был в сети/готов к запросам. Я подумал, может быть, инициализировать таблицу фиктивными данными, которые обновляются реальными значениями при запросе члена, но я не уверен, что это лучший способ.

Таблица также имеет только одну строку записей, поэтому использование mib2c.iterate.conf для генерации итераторов таблицы и работа со всем этим кажется ненужным. Я подумал, может быть, просто реализовать последовательность, определенную в MIB, а не в фактической таблице, но обычно это не так, как это делается во всех примерах, которые я видел. Я просмотрел /mibgroup/examples/delayed_instance.c, но это не совсем то, что мне нужно. Использование mib2c с конфигурационным файлом mib2c.create-dataset.conf было самым близким к тому, чтобы заставить это работать легко, но этот конфигурационный файл предполагает, что данные являются статическими, а не внешними (оба из них неверны в моем случае), поэтому это не сработает. Если это нелегко сделать, я, вероятно, просто реализую последовательность, а не таблицу, но я надеюсь, что есть простой способ. Заранее спасибо.


person Matt    schedule 25.01.2011    source источник


Ответы (1)


Метод итератора будет работать нормально. Он не будет загружать никаких данных, пока не вызовет ваши подпрограммы _first и _next. Таким образом, в этих подпрограммах и в подпрограмме _handler вам решать, запрашивать ли данные с удаленного сервера. Фактически, по умолчанию он вообще не кэширует данные, поэтому вам придется запрашивать удаленный сервер для каждого запроса. Это может быть медленным, если у вас много данных в таблице, поэтому в этом случае рекомендуется добавить кеш для хранения данных в течение N секунд.

person Wes Hardaker    schedule 25.01.2011
comment
Большое спасибо, у меня все заработало. И последнее: он работает при использовании snmpwalk для таблицы или snmptable непосредственно для OID таблицы, но не работает при попытке пройти по полной MIB. Любая идея, почему это было бы? - person Matt; 27.01.2011
comment
Обычно это происходит из-за того, что oid входящего запроса запускается перед таблицей и обрабатывается неправильно. IE, код mib должен иметь возможность обрабатывать GETNEXT из .1.3.1, даже если таблица находится в .1.3.100. - person Wes Hardaker; 28.01.2011