Net-SNMP 将 OID 中的固定长度字符串编码为可变长度字符串

问题描述 投票:0回答:1

我遇到了一个问题,即在我的设备上运行的 Net-SNMP 代理(5.8 版)正在将固定长度索引字符串的长度放入 OID。

对于上下文:我有一个 MIB,它定义了一个文本约定(用作索引的类型)作为具有 SYNTAX OCTET STRING(SIZE (18)),使其成为固定长度的八位字节字符串。索引在表的条目中属于该类型。我想知道这是否是定义固定长度字符串的正确方法,如果是这样,是否有解决方法来纠正代理不将长度放在 OID 中。

查看代理代码(注意我正在使用 Net SNMP 样式进行实现),因为它调用 get_next_data_point 函数,它使用 snmp_set_var_value 函数来填写这些值。我想知道是否有另一个函数可以调用,或者我是否可以以某种方式更改索引的类型以强制 SNMP 正确处理字符串。

进一步的上下文:根据 RFC 2578 第 7.7 节,出现在 OID 中的可变长度字符串(前面没有 IMPLIED 关键字)必须使用 n+1 个子标识符进行编码,其中第一个子标识符是值 n本身(字符串的长度)后跟 n 个子标识符,每个子标识符编码字符串中的一个八位字节。固定长度的字符串以相同的方式完成,但没有在 OID 中编码的字符串长度(我可能只是对如何在 MIB 中定义固定长度的字符串感到困惑)。

snmp net-snmp mib
1个回答
0
投票

有关更多上下文,我使用 mib2c 工具为 mib 模块生成 C 代码。事实证明,代码将索引注册为 OCTET 字符串

netsnmp_table_helper_add_indexes(table_info, ASN_OCTET_STR, ...)

将其更改为 ASN_PRIV_IMPLIED_OCTET_STR 使其成为固定长度的字符串并固定 OID。

© www.soinside.com 2019 - 2024. All rights reserved.