如何使用null值正确响应SNMP(2c)GetRequest?

时间:2017-08-22 21:47:35

标签: snmp nullable mib

我正在为传感器产品开发SNMP(2c)代理。我刚刚学习了SNMP和MIB格式,并努力代表一个可能未知的特定值。

例如,我已将温度OBJECT-TYPE定义为Integer32,但有时该值不可用或未知。如果我以空值响应,则SNMP管理器超时*。当温度值未知或不可用时,我宁愿使用空值,而不是同意某个特定值来表示同样的事情。

这引出了以下问题:

  1. SNMP v2c / MIB是否支持类似于可以为空的整数的数据类型?
  2. 如果是这样,在MIB中表示这一点的正确方法是什么?
  3. <子> * 我使用MG-SOFT's MIB Browser来获取值作为测试方法。如果该值为null,则超时(即使代理响应)。如果该值是整数,则按预期工作。我正在使用nSoftware IP*Works! SNMP library开发代理。

2 个答案:

答案 0 :(得分:1)

发表评论:

你不应该这样做。 OID值应始终为单数,不应动态更改,如果有人将使用mib文件,则对于正在为此传感器实现通信协议的人员来说,这将是错误的并且具有误导性。正确的方法是让2个OID与值一起,另一个与传感器的状态相同。

答案 1 :(得分:-1)

在实验中,我在动态更改SNMP代理对象类型方面取得了一些成功:

#voteUpForm, #voteDownForm
{
  display: inline-block;
}

#voteUpButton, #voteDownButton
{
  height: 32px;
  width: auto;
  margin-right: 7px;
  display: block;
}

#bottomBarControls
{
  display: flex;
  align-items: center;
}

#voteCounter
{
  display: inline-block;
}

#views
{
  display: inline-block;
}

使用MIB浏览器执行GetRequest时,它似乎可以处理这两种情况。即使MIB没有指定特定的OID可以为空,只是int? temperature = ReadTemperature(); snmpAgent.Objects[i].Value = temperature.ToString(); snmpAgent.Objects[i].ObjectType = temperature.HasValue ? SNMPObjectTypes.otInteger : SNMPObjectTypes.otNull; ,它似乎也有效。各种SNMP管理器的行为可能会有所不同。

(此示例特定于IPWorks SNMP代理。)