我正在用C ++编写Net-SNMP的AgentX子代理。
我尝试像这样注册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中失败了,我的处理程序只在我为1.3.6.1.4.1.4711.1.1.0(添加为零)进行snmpget时被调用。
如何注册1.3.6.1.4.1.4711.1.1?
net-snmp.org上的示例都注册了一个实例变量,但我必须运行一些代码来收集值。
我是否必须将我的回调声明为来自C ++应用程序的extern“C”?
anybbody是否有一个例子如何注册1.3.6.1.4.1.4711.1以下的所有OID,所以我不必定义这么多处理程序?
答案 0 :(得分:1)
您尝试做的是一个不受支持的SNMP使用案例,使用Net-SNMP库可能无法实现(尽管我不确定您是否无法通过自己的方式获得荣耀并使其工作) 。
它不受支持的原因是标量(或另一种方式,而不是表格)按照定义应该以{{1}}结尾。另一方面,表以表条目的索引结尾:base_oid.0
表示您正在查看表中具有base_oid.1
索引的条目。
如果仍然需要在1
而不是.1
中设置OID,则支持的选项是注册表处理程序。