SNMP AgentX: ¿Cómo registrarse para OID?

Estoy escribiendo un subagente AgentX para Net-SNMP en C++.

Intento registrarme para el OID 1.3.6.1.4.1.4711.1.1 así

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);

Extrañamente, snmpget falla para 1.3.6.1.4.1.4711.1.1 y mi controlador solo recibe llamadas cuando hago snmpget para 1.3.6.1.4.1.4711.1.1.0 (cero agregado).

¿Cómo puedo registrarme en 1.3.6.1.4.1.4711.1.1?

Todos los ejemplos en net-snmp.org registran una variable de instancia, pero tengo que ejecutar un código para recopilar el valor.

¿Tengo que declarar mi devolución de llamada como externa "C" desde una aplicación C++?

¿Alguien tiene un ejemplo de cómo registrarse para todos los OID debajo de 1.3.6.1.4.1.4711.1 para que no tenga que definir tantos controladores?

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

Lo que está tratando de hacer es un caso de uso no compatible de SNMP y puede que no sea posible usando las bibliotecas Net-SNMP (aunque no estoy seguro de que no pueda piratear su camino hacia la gloria y hacer que funcione).

La razón por la que no es compatible es que se supone que los escalares (o, dicho de otra manera, no las tablas) terminan en base_oid.0. Las tablas, por otro lado, terminan en el índice de la entrada de la tabla: base_oid.1 indica que está viendo la entrada en la tabla con un índice de 1.

Si aún necesita que el OID termine en .1 en lugar de .0, una opción admitida sería registrar un controlador de tabla en su lugar.

contestado el 04 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.