查看源代码 仪表化函数定义
仪表化函数定义 章节描述了用户定义的函数,代理会在不同时间调用这些函数。
变量仪表化
对于标量变量,必须定义一个函数 f(Operation, ...)
。
Operation
可以是 new
,delete
,get
,is_set_ok
,set
或 undo
。
如果发生错误,所有仪表化函数都可以返回 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 类型,则使用整数值。
此函数是可选的。
如果调用此函数,将再次调用它,第一个参数是 undo
或 set
。
有效返回值
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
可以是 new
,delete
,get
,next
,is_set_ok
,undo
或 set
。
如果发生错误,所有仪表化函数都可以返回 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])
,以便可以检查新值是否存在不一致之处。
如果调用该函数,将再次调用它,第一个参数是 undo
或 set
。
此函数是可选的。
参数
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
列表中的一列。