Я придерживался другого подхода к этому.Чтобы лучше интегрироваться с моей экосистемой C ++ и получить большую гибкость (особенно в масштабе), я:
- Выполнил шаг перед сборкой, проанализировав результат
snmptranslate
(то естьДерева MIB) в связку карт C ++ и других контейнеров для использования в коде - Заимствованные функции транспорта и построения PDU Net-SNMP
- Но обслуживаемые запросы выполняются самостоятельно при получении, с использованием моих карт C ++ иданные, уже доступные моему приложению
Это сделало генерацию уведомлений тривиальной (мне просто потребовалось несколько типов вариантов для генерации varbind, немного конструкции PDU, а затем оставил остальную часть транспортной функции Net-SNMP), хотядля запросов, которые я тогда сделал, я должен сам выполнить обход таблиц (и GetNext / GetBulk / Set не тривиальны, если вы не избегаете всех таблиц или, по крайней мере, избегаете составных-индексные таблицы).
Результатом является быстрый, надежный и масштабируемый агент SNMP с выразительным кодом, который легко поддерживать и расширятьnd.
Вы не говорите, что используете C ++, но это дает представление о том, как вы можете выбрать функциональность Net-SNMP без необходимости покупать всю экосистему.
Обратите внимание, что я понятия не имею, как SNMPv3 будет вписываться в эту модель;Я ловко покинул компанию, прежде чем это стало моей проблемой.:)