1

我正在用 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);

奇怪的是 1.3.6.1.4.1.4711.1.1 的 snmpget 失败,并且我的处理程序仅在我为 1.3.6.1.4.1.4711.1.1.0 执行 snmpget 时才被调用(添加零)。

如何注册 1.3.6.1.4.1.4711.1.1 ?

net-snmp.org 上的示例都注册了一个实例变量,但我必须运行一些代码来收集该值。

我是否必须将我的回调声明为来自 C++ 应用程序的外部“C”?

是否有人有一个示例如何注册 1.3.6.1.4.1.4711.1 以下的所有 OID,所以我不必定义这么多处理程序?

4

1 回答 1

1

您正在尝试做的是不受支持的 SNMP 用例,并且可能无法使用 Net-SNMP 库(尽管我不确定您是否无法破解自己的荣耀并使其工作)。

它不受支持的原因是标量(或者,换句话说,不是表)根据定义应该以base_oid.0. 另一方面,表格以表格条目的索引结束:base_oid.1表示您正在查看表格中索引为1.

如果您仍然需要以 OID 结尾.1而不是.0,则支持的选项是注册一个表处理程序。

于 2012-05-04T18:34:39.567 回答