SNMP AgentX: ¿Cómo registrarse para OID?
Frecuentes
Visto 1,430 veces
1
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?
1 Respuestas
1
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