2012-05-03 153 views
1

我正在爲C++中的Net-SNMP編寫AgentX子代理。SNMP AgentX:如何註冊OID?

我嘗試了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」?

有沒有人有一個例子如何註冊所有在1.3.6.1.4.1.4711.1以下的OID,所以我不必定義這麼多的處理程序?

回答

1

你想要做的是一個不受支持的SNMP使用情況,並且可能無法使用Net-SNMP庫(雖然我不確定你是否無法通過自己的方式來榮耀並使其工作)。

它不被支持的原因是標量(或者說,換言之,不是表格)根據定義應該在base_oid.0中結束。另一方面,表格以表格索引結尾:base_oid.1表示您正在查看錶格中索引爲1的條目。

如果您仍然需要有OID結束.1而不是.0,支持的選項將代替登記表格處理程序。