允许使用LWIP从SNMP代理发送的八位字节字符串的最大长度

允许使用LWIP从SNMP代理发送的八位字节字符串的最大长度,snmp,asn.1,mib,lwip,xilinx-edk,Snmp,Asn.1,Mib,Lwip,Xilinx Edk,我正在尝试使用Xilinx SDK中的LWIP库在设备上实现SNMP代理 我成功地实现了代理,并让代理在我的设备上运行,以响应命令(snmpget、snmpset、snmpwalk) 但如果OID必须返回长度大于255的八位字节字符串,则代理的行为可疑。 当我试图传递长度大于255的八位字节字符串时,我没有收到该oid上的任何数据,代理在此之后断开连接,并且不会再重复任何其他命令 长度的snmp八位字节字符串定义为八位字节字符串的对象通常限制为255字节,或者直接 SYNTAX

我正在尝试使用Xilinx SDK中的LWIP库在设备上实现SNMP代理

我成功地实现了代理,并让代理在我的设备上运行,以响应命令(snmpget、snmpset、snmpwalk)

但如果OID必须返回长度大于255的八位字节字符串,则代理的行为可疑。 当我试图传递长度大于255的八位字节字符串时,我没有收到该oid上的任何数据,代理在此之后断开连接,并且不会再重复任何其他命令


长度的snmp八位字节字符串定义为八位字节字符串的对象通常限制为255字节,或者直接

    SYNTAX               OCTET STRING (SIZE (0..255))
或者通过使用类似DisplayString的东西间接地

    SYNTAX               DisplayString
这又被限制为255字节

DisplayString ::= TEXTUAL-CONVENTION 
    DISPLAY-HINT         "255a" 
    STATUS                current 
    DESCRIPTION          "Represents textual information taken from the NVT ASCII..."
    SYNTAX                OCTET STRING (SIZE (0..255))

看一看,然后。您可以定义一个较大的对象,但请记住,SNMP并不是用来传输大数据集的

我找到了一个解决方案

在文件src\lwip-1.4.0\src\core\snmp\msg_in.c中,处理传入消息的程序正在将字符串长度从u16_t转换为u8_t。它表示该范围现在已弃用为(0-255)。所以问题来了

我将限制我处理长度大于255的八位字节字符串的u8_t更改为u16_t

现在LWIP库能够处理长度大于255的消息


谢谢

MIB中定义的对象是什么数据类型?定义为八进制字符串。我同意你的看法。。但是在我的MIB中没有指定限制。我的问题是,当我尝试发送大小为300的数据时,程序将其读取为44(300-256),并且仅读取或显示八位字节字符串中的44个字符。问题不在于MIB及其LWIP库代码。如果您已经使用LWIP库,请告诉我您是否能够传输大于255的八位字节字符串。请通过此链接了解有关此问题的更多信息。。。!!