C ++ SNMP Extension Agent - 如何使用AsnSequence?

时间:2014-03-19 22:15:26

标签: c++ windows snmp winsnmp

我需要创建SNMP代理来监控我们的软件系统。 我正在使用" winsnmp"用于在Visual C ++中编写SNMP扩展代理程序。输出是x64 DLL,它在Windows注册表中注册,由" SNMP服务"并正确执行。我的SNMP代理能够处理" SNMP_PDU_GET"," SNMP_PDU_GETNEXT"," SNMP_PDU_SET"请求以及生成SNMP陷阱。 到目前为止事情都很好,一切正常。

但现在我需要处理复杂的数据类型" sequence"它被表示为" AsnSequence"输入或" ASN_SEQUENCE"在" winsnmp"中键入常量。要求是使用包含多个记录的表回复SNMP管理器。该表具有特定的结构,这里是示例MIB片段:

...
      hrTestTable OBJECT-TYPE
        SYNTAX     SEQUENCE OF HrTestEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
            "sequence"
        ::= { BMS_ibm_wsmq 3 }
      hrTestEntry OBJECT-TYPE
        SYNTAX     HrTestEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
            "Table row"
        INDEX { hrTestIndex }
        ::= { hrTestTable 1 }
      HrTestEntry ::= SEQUENCE {
        hrTestIndex Integer32,
        hrTestType AutonomousType,
        hrTestDescr DisplayString
      }
      hrTestIndex OBJECT-TYPE
        SYNTAX     Integer32 (1..2147483647)
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
            "indexColumn1"
        ::= { hrTestEntry 1 }
      hrTestType OBJECT-TYPE
        SYNTAX     AutonomousType
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
            "column1"
        ::= { hrTestEntry 2 }
      hrTestDescr OBJECT-TYPE
        SYNTAX     DisplayString
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
            "column2"
        ::= { hrTestEntry 3 }
...

一旦SNMP管理器请求整个表,代理就会收到" SNMP_PDU_GETNEXT"请求:

BOOL SNMP_FUNC_TYPE SnmpExtensionQuery(BYTE operation, SnmpVarBindList *variableBindings, AsnInteger32 *errorStatus, AsnInteger32 *errorIndex) {
 …
 for (unsigned int index = 0; index < variableBindings->len; index++) {
  *errorStatus = SNMP_ERRORSTATUS_NOERROR;
  switch (operation) {
   …
   case SNMP_PDU_GETNEXT:
    …
    *errorStatus = GET_SEQUENCE(&variableBindings->list[index]);
    …
   …
  };
…

可变

"&variableBindings->list[index].name" points to "hrTestIndex" at "index=0"
"&variableBindings->list[index].name" points to "hrTestType" at "index=1"
"&variableBindings->list[index].name" points to "hrTestDescr" at "index=2"

对于所有这些情况&#34;&amp; variableBindings-&gt; list [index] .value.asnType&#34;是&#34; ASN_NULL&#34;。

我怀疑,产生响应&#34;&amp; variableBindings-&gt; list [index] .value.asnType&#34;必须使用&#34; ASN_SEQUENCE&#34;进行初始化。和&#34;&amp; variableBindings-&gt; list [index] .value.asnValue.sequence&#34;应使用&#34; AsnSequence&#34;初始化。

所以,我是对的吗?

如何初始化&#34; AsnSequence&#34;的实例?然后用数据填充它?

感谢。

0 个答案:

没有答案