MIB私有扩展命令
第一组扩展指令调用任意命令,并依赖于 MIB 结构(和管理应用程序)具有适应和解释输出的灵活性。 这是一种快速简单地提供信息的便捷方式,但在实现私有MIB 对象时没有用,其中扩展必须符合 MIB 的结构(反之亦然)。 其余的扩展机制都与这种特定于 MIB 的情况有关——从“pass-
through”脚本开始。 使用此机制要求构建代理时支持 ucd-snmp/pass 和 ucd-snmp/pass_persist 模块(这两个模块都包含在默认构建配置中)。
-
pass [-p priority] MIBOID PROG
将以 MIBOID 为根的子树的控制权传递给指定的 PROG 命令。 此树中 OID 的 GET 和 GETNEXT 请求将触发此命令,称为:
PROG -g OID
PROG -n OID
分别,其中 OID 是请求的 OID。 PROG 命令应该将响应 varbind 作为打印到 stdout 的三个单独的行返回 - 第一行应该是返回值的 OID,第二行应该是它的 TYPE(文本字符串之一 integer
、gauge
、counter
、timeticks
、ipaddress
、 objectid
、octet
或string
),第三个应该是值本身。 (注意:octets作为 ASCII、空格分隔的十六进制字符串发送,例如“00 3f dd 00 c6 be”。)
如果命令无法返回适当的 varbind - 例如,指定的 OID 不对应于 GET 请求的有效实例,或者 GETNEXT 没有后续实例 - 那么它应该退出而不产生任何输出。 这将导致 SNMP noSuchName
错误或 noSuchInstance
异常。
注意:不支持 SMIv2 类型 counter64
和 SNMPv2 noSuchObject
异常。
SET 请求将导致命令被调用为:
PROG -s OID TYPE VALUE
其中 TYPE 是上面列出的令牌之一,指示作为第三个参数传递的值的类型。
如果分配成功,PROG 命令应该退出而不产生任何输出。 应通过将not-writable
或wrong-type
的字符串之一写入标准输出来指示错误,并且代理将生成适当的错误响应。
注意:不支持其他 SNMPv2 错误。
在任何一种情况下,命令都应该在完成处理后退出。 每个请求(以及单个请求中的每个 varbind)都会触发命令的单独调用。
默认注册优先级为 127。这可以通过提供可选的 -p 标志来更改,使用较低优先级的注册优先于较高的优先级值。
-
pass_persist [-p priority] MIBOID PROG
还将对以 MIBOID 为根的子树的控制权传递给指定的 PROG 命令。 但是,此命令将在初始请求得到答复后继续运行,因此可以处理后续请求而无需启动开销。
初始化时,PROG 将在标准输入上传递字符串“PING\n”,并应通过将“PONG\n”打印到标准输出来响应。
对于 GET 和 GETNEXT 请求,PROG 将在标准输入上传递两行,命令(
get
或getnext
)和请求的 OID。 它应该通过向 stdout 打印三行来响应——结果 varbind 的 OID、TYPE 和 VALUE 本身——与上面的pass
指令完全一样。 如果该命令无法返回适当的 varbind,它应该将 print “NONE\n” 打印到 stdout(但继续运行)。对于 SET 请求,PROG 将在标准输入上传递三行,命令 (
set
) 和请求的 OID,然后是类型和值(都在同一行上)。 如果分配成功,该命令应将“DONE\n”打印到标准输出。 错误应该通过将字符串not-writable
、wrong-type
、wrong-length
、wrong-value
或inconsistent-value
之一写入标准输出来指示,并且代理将生成适当的错误响应。 无论哪种情况,该命令都应继续运行。可以使用可选的 -p 标志更改注册优先级,就像
pass
指令一样。
pass
和 pass_persist
扩展只能通过 snmpd.conf
文件进行配置。 它们不能通过 SNMP SET 请求进行设置。