1

私はC++でNet-SNMP用のAgentXサブエージェントを書いています。

このようにOID1.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に登録する方法の例があるので、それほど多くのハンドラーを定義する必要はありませんか?

4

1 に答える 1

1

あなたがやろうとしているのは、サポートされていないSNMPのユースケースであり、Net-SNMPライブラリを使用できない可能性があります(ただし、栄光への道をハックして機能させることができないかどうかはわかりません)。

サポートされていない理由は、スカラー(または別の言い方をすればテーブルではない)は定義上で終わることになっているためbase_oid.0です。一方、テーブルはテーブルエントリのインデックスで終わります:インデックスが。のテーブルbase_oid.1のエントリを表示していることを示します1

それでもOIDをの.1代わりに終了させる必要がある場合.0、サポートされているオプションは、代わりにテーブルハンドラーを登録することです。

于 2012-05-04T18:34:39.567 に答える