2016-11-08 183 views
2

我正在使用net-snmp库(c/C++)编写snmp陷阱发送者。对于基本对象类型,这是相当简单的对象添加到陷阱:是否可以在SNMP陷阱中发送表?


snmp_varlist_add_variable(notification_vars, MibName, length, MIBType, MIBValue, len); 

其中“MibName”是OID,“MIBValue”的值作为一个字符串和“MIBType”的ASN类型。 现在,如何为索引表执行此操作?有没有这方面的支持?如何将其元素的所有行添加到陷阱?

还是有更简单的替代品吗?

回答

1

在SNMP陷阱中发送整个SNMP表是不好的做法。通常,SNMP表格在OID实例数量方面相当大。问题是SNMP使用UDP作为传输协议。 SNMP允许PDU的大小达到网络的MTU。缓冲区应该与预期的最大数据包一样大,所以如果可能的话,它应该对应于MTU。例如,以太网允许高达1500字节的帧有效载荷。

因此,您的PDU最大大小通常平均高达10个varbinds。

这里常见的用例场景是发出SNMP陷阱,通知用户某些事情已经发生了变化。用户需要在陷阱接收时使用Get-Next/Get-Bulk从表中获取数据以获取此事件的详细信息。