如何以空值正确响应 SNMP (2c) GetRequest?
How can I properly respond with a null value to an SNMP (2c) GetRequest?
我正在为传感器产品开发 SNMP (2c) 代理。我只是在学习 SNMP 和 MIB 格式,并努力表示可能未知的特定值。
例如,我将温度 OBJECT-TYPE
定义为 Integer32,但有时该值不可用或未知。如果我以空值响应,则 SNMP 管理器超时*。当温度值未知或不可用时,我更愿意使用空值,而不是就某些特定值达成一致。
这让我想到以下问题:
- SNMP v2c/MIB 是否支持类似于可为空整数的数据类型?
- 如果是这样,在 MIB 中表示它的正确方法是什么?
* 我正在使用MG-SOFT's MIB Browser to get values as a testing method. If the value is null, it times out (even though the agent responded). If the value is an integer, it works as expected. I am using nSoftware IP*Works! SNMP library开发代理。
在试验中,我在动态更改 SNMP 代理对象类型方面取得了一些成功:
int? temperature = ReadTemperature();
snmpAgent.Objects[i].Value = temperature.ToString();
snmpAgent.Objects[i].ObjectType = temperature.HasValue ? SNMPObjectTypes.otInteger : SNMPObjectTypes.otNull;
使用 MIB 浏览器执行 GetRequest 时,它似乎可以处理这两种情况。即使 MIB 没有指定特定的 OID 可以为空,只是 SYNTAX Integer32
,它似乎可以工作。不同的 SNMP 管理器可能会有不同的行为。
(此示例特定于 IPWorks SNMP 代理。)
发帖来自评论:
你不应该这样做。 OID 值应该始终是单数的,它们不应该动态更改,如果有人为此使用 mibfile,那么对于正在为此传感器实施通信协议的人来说,这将是不正确和误导的。正确的做法是有 2 个 OID,一个是传感器的值,另一个是传感器的状态。
我正在为传感器产品开发 SNMP (2c) 代理。我只是在学习 SNMP 和 MIB 格式,并努力表示可能未知的特定值。
例如,我将温度 OBJECT-TYPE
定义为 Integer32,但有时该值不可用或未知。如果我以空值响应,则 SNMP 管理器超时*。当温度值未知或不可用时,我更愿意使用空值,而不是就某些特定值达成一致。
这让我想到以下问题:
- SNMP v2c/MIB 是否支持类似于可为空整数的数据类型?
- 如果是这样,在 MIB 中表示它的正确方法是什么?
* 我正在使用MG-SOFT's MIB Browser to get values as a testing method. If the value is null, it times out (even though the agent responded). If the value is an integer, it works as expected. I am using nSoftware IP*Works! SNMP library开发代理。
在试验中,我在动态更改 SNMP 代理对象类型方面取得了一些成功:
int? temperature = ReadTemperature();
snmpAgent.Objects[i].Value = temperature.ToString();
snmpAgent.Objects[i].ObjectType = temperature.HasValue ? SNMPObjectTypes.otInteger : SNMPObjectTypes.otNull;
使用 MIB 浏览器执行 GetRequest 时,它似乎可以处理这两种情况。即使 MIB 没有指定特定的 OID 可以为空,只是 SYNTAX Integer32
,它似乎可以工作。不同的 SNMP 管理器可能会有不同的行为。
(此示例特定于 IPWorks SNMP 代理。)
发帖来自评论:
你不应该这样做。 OID 值应该始终是单数的,它们不应该动态更改,如果有人为此使用 mibfile,那么对于正在为此传感器实施通信协议的人来说,这将是不正确和误导的。正确的做法是有 2 个 OID,一个是传感器的值,另一个是传感器的状态。