Как установить обмен информацией и выполнение подпрограмм между системой управления сетью и процессом с помощью агента SNMP?

Большая картинка:

Цель состоит в том, чтобы создать подпрограммы (C ++), предоставляемые процессами, выполняемые SNMP NMS (системой управления сетью), с одной стороны, через агент SNMP.

С другой стороны, процессам необходима возможность сообщать свое состояние (например, инициализация, активен, остановлен) и регистрировать сообщения в SNMP NMS через агента SNMP.

Самый многообещающий подход, который я нашел, - это реализация субагента C ++ Net-SNMP, который предоставляет небольшой API.

e.g.

  • setCallback (Обратный вызов c)
  • logMsg (строка s)
  • setState (State st)

Соответствующие Процессы могут реализовать этот API и передавать объекты обратного вызова, устанавливать фактическое состояние и сообщения журнала.

Дело в том, что подпрограммы, предоставляемые объектами обратного вызова, должны быть описаны в MIB (базе управляющей информации), чтобы сделать их доступными для NMS. Так как конкретные подпрограммы неизвестны во время компиляции, я ищу способ перевести сигнатуру подпрограммы в описание SMIv2 (ASN.1) для расширения MIB во время выполнения.

Знаете ли вы структуру, инструмент или подход, которые удовлетворяют требованиям, или метод, позволяющий сделать подпрограммы «доступными» в MIB агента SNMP?

Можно ли вообще расширить MIB агента во время выполнения?


person fbutter    schedule 14.05.2014    source источник


Ответы (1)


Расширение MIB во время выполнения лишит смысла наличие MIB. Предполагается, что MIB сообщает менеджеру, какие переменные доступны, и если набор переменных изменяется динамически, MIB не предоставляет эту информацию менеджеру.

Я уверен, что это можно было бы как-то решить, если бы менеджер мог регулярно получать файл MIB по FTP, когда это необходимо, и мог динамически адаптироваться к содержимому MIB, но я не видел NMS, способного на это. Даже если это возможно, я настоятельно рекомендую не допускать такого нарушения конвенции. Есть RFC о том, как вносить изменения в модуль MIB, и вы наверняка их нарушите.

Я думаю, что лучшее, что вы могли бы сделать, - это иметь список подпрограмм в таблице (которую агенту разрешено динамически изменять во время выполнения). Затем создайте скалярную переменную чтения / записи «runSubroutine», где менеджер может установить значение индекса подпрограммы, которую он хочет запустить. Поместите аргументы и возвращаемые значения в другие переменные. Менеджер мог бы выполнить SNMP-обход таблицы подпрограмм, найти индекс той, которую он хочет запустить, а затем отправить команду установки SNMP с аргументами и индексом подпрограммы.

В конце концов, это может сработать, но, пожалуйста, ради любви к Кнуту, подумайте об использовании настоящего протокола RPC вместо того, чтобы пытаться втиснуть такие возможности в SNMP.

person Jolta    schedule 15.05.2014
comment
Большое спасибо! Это выглядит многообещающим подходом, и вы совершенно правы, поэтому я буду использовать настоящий протокол RPC. - person fbutter; 15.05.2014