查看源代码 仪表化函数定义

仪表化函数定义 章节描述了用户定义的函数,代理会在不同时间调用这些函数。

变量仪表化

对于标量变量,必须定义一个函数 f(Operation, ...)

Operation 可以是 newdeletegetis_set_oksetundo

如果发生错误,所有仪表化函数都可以返回 SNMPv1 或 SNMPv2 错误代码。如果返回 SNMPv2 代码,则在发送给 SNMPv1 管理器之前,会将其转换为 SNMPv1 代码。建议所有仪表化函数都使用 SNMPv2 错误代码,因为它们提供更多详细信息。有关错误代码转换的描述,请参见 附录 A

f(new [, ExtraArgs])

当 MIB 加载到代理时,会为 MIB 中的每个变量调用函数 f(new [, ExtraArgs])。这使得可以执行必要的初始化。

此函数是可选的。返回值将被丢弃。

f(delete [, ExtraArgs])

当 MIB 从代理卸载时,会为 MIB 中的每个对象调用函数 f(delete [, ExtraArgs])。这使得可以执行必要的清理。

此函数是可选的。返回值将被丢弃。

f(get [, ExtraArgs])

当 get 请求或 get-next 请求引用该变量时,会调用函数 f(get [, ExtraArgs])

此函数是必需的。

有效返回值

  • {value, Value}Value 必须是正确的类型、长度和范围,否则会在响应 PDU 中返回 genErr。如果对象是枚举整数,则可以使用符号枚举值作为原子。如果对象的类型为 BITS,则返回值应为整数或已设置位的列表。
  • {noValue, noSuchName} (SNMPv1)
  • {noValue, noSuchObject | noSuchInstance} (SNMPv2)

  • genErr。如果发生错误则使用。注意,这应该是内部处理错误,例如由某处的编程错误引起的。如果变量不存在,请使用 {noValue, noSuchName}{noValue, noSuchInstance}

f(is_set_ok, NewValue [, ExtraArgs])

在 set 请求处理的第一阶段会调用函数 f(is_set_ok, NewValue [, ExtraArgs]),以便可以检查新值是否存在不一致之处。

NewValue 保证是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。

此函数是可选的。

如果调用此函数,将再次调用它,第一个参数是 undoset

有效返回值

  • noError
  • badValue | noSuchName | genErr (SNMPv1)

  • noAccess | noCreation | inconsistentValue | resourceUnavailable | inconsistentName | genErr (SNMPv2)

f(undo, NewValue [, ExtraArgs])

如果发生错误,则在调用 is_set_ok 函数后调用此函数。如果为此对象调用 set,则不会调用 undo

NewValue 保证是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。

此函数是可选的。

有效返回值

  • noError
  • genErr (SNMPv1)
  • undoFailed | genErr (SNMPv2)

f(set, NewValue [, ExtraArgs])

此函数用于在 set 请求处理的第二阶段执行 set 操作。只有在对应的 is_set_ok 函数存在并返回 noError 时才会调用它。

NewValue 保证是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。

此函数是必需的。

有效返回值

  • noError
  • genErr (SNMPv1)
  • commitFailed | undoFailed | genErr (SNMPv2)

表格仪表化

对于表格,应定义一个 f(Operation, ...) 函数(显示的函数以 f 为例)。

Operation 可以是 newdeletegetnextis_set_okundoset

如果发生错误,所有仪表化函数都可以返回 SNMPv1 或 SNMPv2 错误代码。如果返回 SNMPv2 代码,则在发送给 SNMPv1 管理器之前,会将其转换为 SNMPv1 代码。建议所有仪表化函数都使用 SNMPv2 错误代码,因为它们提供更多详细信息。有关错误代码转换的描述,请参见 附录 A

f(new [, ExtraArgs])

当 MIB 加载到代理时,会为 MIB 中的每个对象调用函数 f(new [, ExtraArgs])。这使得可以执行必要的初始化。

此函数是可选的。返回值将被丢弃。

f(delete [, ExtraArgs])

当 MIB 从代理卸载时,会为 MIB 中的每个对象调用函数 f(delete [, ExtraArgs])。这使得可以执行任何必要的清理。

此函数是可选的。返回值将被丢弃。

f(get, RowIndex, Cols [, ExtraArgs])

当 get 请求引用表格时,会调用函数 f(get, RowIndex, Cols [, ExtraArgs])

此函数是必需的。

参数

  • RowIndex 是一个整数列表,用于定义行的键值。RowIndex 是 OBJECT IDENTIFIER 中跟随 Cols 整数的列表表示形式(整数列表)。
  • Cols 是一个整数列表,表示列号。Cols 按值递增排序,并保证是有效的列号。

有效返回值

  • 一个与 Cols 列表元素数量相同的列表,其中每个元素是相应列的值。每个元素可以是

    • {value, Value}Value 必须是正确的类型、长度和范围,否则会在响应 PDU 中返回 genErr。如果对象是枚举整数,则可以使用符号枚举值(作为原子)。如果对象的类型为 BITS,则返回值应为整数或已设置位的列表。
    • {noValue, noSuchName} (SNMPv1)
    • {noValue, noSuchObject | noSuchInstance} (SNMPv2)

  • {noValue, Error}。如果行不存在,因为所有列都具有 {noValue, Error}),则可以返回单个元组 {noValue, Error}。这是所有元素 {noValue, Error} 的列表的简写形式。

  • genErr。如果发生错误则使用。请注意,这应该是内部处理错误,例如由某处的编程错误引起的。如果某些列不存在,请使用 {noValue, noSuchName}{noValue, noSuchInstance}

f(get_next, RowIndex, Cols [, ExtraArgs])

当 get-next 或 get-bulk 请求引用表格时,会调用函数 f(get_next, RowIndex, Cols [, ExtraArgs])

RowIndex 参数可能引用现有行或不存在的行,也可能是未指定的。Cols 列表可能引用无法访问的列或不存在的列。对于 Cols 列表中的每一列,确定相应的下一个实例,并返回其 OBJECT IDENTIFIER 的最后一部分及其值。

此函数是必需的。

参数

  • RowIndex 是一个整数列表(可能为空),用于定义行的键值。RowIndex 是 OBJECT IDENTIFIER 中跟随 Cols 整数的列表表示形式(整数列表)。
  • Cols 是一个大于或等于零的整数列表,表示列号。

有效返回值

  • 一个与 Cols 列表元素数量相同的列表。每个元素可以是

    • {NextOid, NextValue},其中 NextOid 是相应列的字典顺序的下一个 OBJECT IDENTIFIER。这应指定为表格条目之后的 OBJECT IDENTIFIER 部分。这意味着第一个整数是列号,其余部分是键的规范。NextValue 是此元素的值。
    • endOfTable 如果在此之后没有可访问的元素。
  • {genErr, Column} 其中 Column 表示导致错误的列。Column 必须是 Cols 列表中的列之一。请注意,这应该是内部处理错误,例如由某处的编程错误引起的。如果某些列不存在,则必须返回下一个可访问的元素(或 endOfTable)。

f(is_set_ok, RowIndex, Cols [, ExtraArgs])

在 set 请求处理的第一阶段会调用函数 f(is_set_ok, RowIndex, Cols [, ExtraArgs]),以便可以检查新值是否存在不一致之处。

如果调用该函数,将再次调用它,第一个参数是 undoset

此函数是可选的。

参数

  • RowIndex 是一个整数列表,用于定义行的键值。RowIndex 是 OBJECT IDENTIFIER 中跟随 Cols 整数的列表表示形式(整数列表)。
  • Cols{Column, NewValue} 的列表,其中 Column 是整数,并且保证 NewValue 是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。列表按 Column (递增)排序,并且保证每个 Column 都是有效的列号。

有效返回值

  • {noError, 0}
  • {Error, Column},其中 Error 与变量的 is_set_ok 相同,Column 表示有故障的列。Column 必须是 Cols 列表中的列之一。

f(undo, RowIndex, Cols [, ExtraArgs])

如果发生错误,则在调用 is_set_ok 函数后调用函数 f(undo, RowIndex, Cols [, ExtraArgs])。如果为此对象调用 set,则不会调用 undo

此函数是可选的。

参数

  • RowIndex 是一个整数列表,用于定义行的键值。RowIndex 是 OBJECT IDENTIFIER 中跟随 Cols 整数的列表表示形式(整数列表)。
  • Cols{Column, NewValue} 的列表,其中 Column 是整数,并且保证 NewValue 是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。列表按 Column (递增)排序,并且保证每个 Column 都是有效的列号。

有效返回值

  • {noError, 0}
  • {Error, Column},其中 Error 与变量的 undo 相同,Column 表示有故障的列。Column 必须是 Cols 列表中的列之一。

f(set, RowIndex, Cols [, ExtraArgs])

函数 f(set, RowIndex, Cols [, ExtraArgs]) 用于在 set 请求处理的第二阶段执行 set 操作。只有在对应的 is_set_ok 函数不存在,或返回 {noError, 0} 时才会调用它。

此函数是必需的。

参数

  • RowIndex 是一个整数列表,用于定义行的键值。RowIndex 是列表形式(整数列表),它跟在 OBJECT IDENTIFIER 中的 Cols 整数之后。
  • Cols{Column, NewValue} 的列表,其中 Column 是整数,并且保证 NewValue 是正确的类型、长度和范围,如 MIB 中指定的那样。如果对象是枚举整数或 BITS 类型,则使用整数值。列表按 Column (递增)排序,并且保证每个 Column 都是有效的列号。

有效返回值

  • {noError, 0}
  • {Error, Column},其中 Error 与变量的 set 相同,而 Column 表示错误的列。Column 必须是 Cols 列表中的一列。