2012-05-03 6 views
1

Я пишу агенту AgentX для Net-SNMP в C++.SNMP AgentX: Как зарегистрироваться для OID?

Я пытаюсь зарегистрироваться на OID 1.3.6.1.4.1.4711.1.1 как этот

oid myOID[] = { 1, 3, 6, 1, 4, 1, 4711, 1, 1 }; 
handler = netsnmp_create_handler_registration("foo", handler, myOID, OID_LENGTH(myOID), HANDLER_CAN_RONLY); 
if (handler) 
    netsnmp_register_scalar(handler); 

странно snmpget терпит неудачу за 1.3.6.1.4.1.4711.1.1 и мой обработчик только вызывается, когда я do snmpget для 1.3.6.1.4.1.4711.1.1.0 (добавлен ноль).

Как я могу зарегистрироваться для 1.3.6.1.4.1.4711.1.1?

Примеры на net-snmp.org все регистрируют переменную экземпляра, но я должен запустить некоторый код для сбора значения.

Должен ли я объявить свой обратный вызов как extern «C» из приложения C++?

Есть ли у кого-нибудь пример регистрации для всех OID ниже 1.3.6.1.4.1.4711.1, поэтому мне не нужно определять так много обработчиков?

ответ

1

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

Причина, по которой он не поддерживается, заключается в том, что скаляры (или, иначе говоря, не таблицы) по определению должны заканчиваться на base_oid.0. С другой стороны, таблицы заканчиваются индексом записи в таблице: base_oid.1 указывает, что вы просматриваете запись в таблице с индексом 1.

Если вы все еще должны иметь конец OID в .1 вместо .0, поддерживаемой опцией будет вместо этого зарегистрировать обработчик таблицы.

 Смежные вопросы

  • Нет связанных вопросов^_^