我想定义一个MIB,其中包含长度为1或2个八位字节的整数值OID,以减小我的TRAP消息的大小 - 它们通过移动数据网络进行,因此我们按字节付费,并且传输时间也随着数据类型的增加而增加。
SNMPv2-SMI仅定义Integer32和Unsigned32,而SNMPv2-TC不会将这些扩展到较小的包装尺寸。对于Unsigned8,Integer16等,是否已有标准定义?如果是这样,在哪里?
或者,如果我将对象类型定义为" Integer32(-1..99)",那么MIB编译器等会做正确的事情并将值打包成单个字节吗?我们在代理上使用SNMP4J,在Manager上使用Net-SNMP。
如果你还没有猜到我在这方面有点像菜鸟,所以如果这是一个愚蠢的问题请宽容: - )
答案 0 :(得分:0)
请查看SNMP4J javadoc for OctetString,例如1或2个字节...
OCTET STRING (SIZE(1))
OCTET STRING (SIZE(2))
引用http://www.snmpsharpnet.com/?page_id=66:
Octet String是一种用于处理字节数组的SMI数据类型 值。与名称不同,此数据类型不受限制 字符串值,但可以存储任何基于字节的数据类型(包括 二进制数据)。
答案 1 :(得分:0)
我已经对SNMP使用的编码规则进行了一些挖掘(参见en.wikipedia.org/wiki/X.690),看起来我的问题与包装PDU的代码有点无关。情报。 SNMP使用的基本编码规则将整数值记录为三个“tag-length-value”,其中“tag”标识数据类型),length表示保存值的字节数,值是,值。因此,如果应用程序从32位整数发送值“1”,则无需将其编码为32位,只需将其编码为0x02 0x01 0x01。
所以这取决于包装库是否具有这种智能。