我正在使用SNMP的代理端,我有一个DateAndTime字段,其语法如下:
DateAndTime(OCTET STRING)(SIZE(8 | 11))。提示:2d-1d-1d,1d:1d:1d.1d,1a1d:1d
有问题的varBind返回某种类型错误的时间戳,(希望)永远不会发生。
所以我的问题是如果事件没有发生,代理应该返回什么。如果我返回一个空字符串,则技术上不符合约束条件。
我不是SNMP专家,所以这可能是可接受的吗?
将MIB更改为不同的定义/类型是可能的,如果这是我需要做的。
答案 0 :(得分:1)
代理应该为传入请求返回错误,方法是将error-status
设置为合适的值(例如genErr
),并将error-index
设置为varbind中的正确索引
PDU ::= SEQUENCE {
request-id INTEGER (-214783648..214783647),
error-status -- sometimes ignored
INTEGER {
noError(0),
tooBig(1),
noSuchName(2), -- for proxy compatibility
badValue(3), -- for proxy compatibility
readOnly(4), -- for proxy compatibility
genErr(5),
noAccess(6),
wrongType(7),
wrongLength(8),
wrongEncoding(9),
wrongValue(10),
noCreation(11),
inconsistentValue(12),
resourceUnavailable(13),
commitFailed(14),
undoFailed(15),
authorizationError(16),
notWritable(17),
inconsistentName(18)
},
error-index -- sometimes ignored
INTEGER (0..max-bindings),
variable-bindings -- values are sometimes ignored
VarBindList
}
答案 1 :(得分:-1)
MIB应该确切地定义在所有情况下会发生什么。这是代理人和经理之间的合同。如果没有,那么它是一个有缺陷的MIB。如果它是某人正在开发的MIB,则需要修复它。如果是公共MIB,请告诉我们哪个,我们可以查看。