SNMP AgentX:如何注册OID?

时间:2012-05-03 20:31:43

标签: c++ snmp net-snmp oid mib

我正在用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,所以我不必定义这么多处理程序?

1 个答案:

答案 0 :(得分:1)

您尝试做的是一个不受支持的SNMP使用案例,使用Net-SNMP库可能无法实现(尽管我不确定您是否无法通过自己的方式获得荣耀并使其工作) 。

它不受支持的原因是标量(或另一种方式,而不是表格)按照定义应该以{{1​​}}结尾。另一方面,表以表条目的索引结尾:base_oid.0表示您正在查看表中具有base_oid.1索引的条目。

如果仍然需要在1而不是.1中设置OID,则支持的选项是注册表处理程序。