SNMPv2 MIB中的整数8、无符号8、整数16值

SNMPv2 MIB中的整数8、无符号8、整数16值,snmp,net-snmp,snmp4j,Snmp,Net Snmp,Snmp4j,我想定义一个包含1或2个八位字节长的整数值OID的MIB,以减小陷阱消息的大小-它们通过移动数据网络传输,因此我们按字节付费,传输时间也随着更大的数据类型而增加 SNMPv2 SMI只定义Integer32和Unsigned32,SNMPv2 TC不会将它们扩展到更小的封装尺寸。对于Unsigned8、Integer16等是否已经有了标准定义?如果是,在哪里 或者,如果我将对象类型定义为类似“Integer32(-1..99)”的类型,那么MIB编译器etc会做正确的事情并将值打包到单个字节中吗

我想定义一个包含1或2个八位字节长的整数值OID的MIB,以减小陷阱消息的大小-它们通过移动数据网络传输,因此我们按字节付费,传输时间也随着更大的数据类型而增加

SNMPv2 SMI只定义Integer32和Unsigned32,SNMPv2 TC不会将它们扩展到更小的封装尺寸。对于Unsigned8、Integer16等是否已经有了标准定义?如果是,在哪里

或者,如果我将对象类型定义为类似“Integer32(-1..99)”的类型,那么MIB编译器etc会做正确的事情并将值打包到单个字节中吗?我们在代理上使用SNMP4J,在管理器上使用netsnmp

如果你还没有猜到我在这方面有点笨,那么如果这是一个愚蠢的问题,请宽容点:-)

看看,例如,1或2个字节

  OCTET STRING (SIZE(1)) 
  OCTET STRING (SIZE(2)) 
引述:

八进制字符串是一种SMI数据类型,用于处理字节数组 价值观与名称所暗示的不同,此数据类型不受限制 可存储任何基于字节的数据类型(包括 二进制数据)


我已经对SNMP使用的编码规则做了一些挖掘(参见en.wikipedia.org/wiki/X.690),如果包装PDU的代码具有一定的智能性,我的问题似乎无关紧要。SNMP采用的基本编码规则将一个整数值记录为三重“标记长度值”,其中“标记”标识数据类型),长度给出了保存该值的字节数,该值就是该值。因此,如果应用程序从32位整数发送值“1”,则无需将其编码为32位,只需将其编码为0x02 0x01 0x01即可


因此,这取决于打包库是否具有这种智能。

谢谢,但我正在寻找一种与整数具有相同语义但没有大小开销的解决方案。使用您的解决方案,我必须自己使用htons/ntohs来打包和解包两端的16位值,而不是让snmp库通过ASN.1定义来为我打包和解包。我对snmp使用的编码规则做了一些挖掘(请参阅)如果包装PDU的代码有一点智能,那么我的问题看起来就无关紧要了。SNMP采用的基本编码规则将一个整数值记录为三重“标记长度值”,其中“标记”标识数据类型),长度给出保存该值的字节数,该值就是该值。因此,如果应用程序从32位整数发送值“1”,则无需将其编码为32位,只需将其编码为0x02 0x01 0x01即可。祝贺您获胜请随意用上述内容回答您自己的问题,以便向其他人更清楚地表明您的问题已经解决。在将我的建议作为答案发布之前,我将测试我的建议,但在担心性能提高之前,我需要让我的应用程序正常工作:)两年后,可能值得花时间写下答案并标记它。(我很想回答这个问题,唯恐我费心先看所有的评论。);-)