查看源代码 snmpm_user 行为 (snmp v5.18)
SNMP 管理器用户的行为模块。
此模块定义了管理器用户的行为。一个符合 snmpm_user
的模块必须导出以下函数
handle_error/3
handle_agent/5
handle_pdu/4
handle_trap/3
handle_inform/3
handle_report/3
handle_invalid_result/2
它们的语义和确切的签名将在下面解释。
一些函数没有定义的返回值 (void()
),它们当然可以返回任何值。但是,确实指定了返回值的函数必须遵守这一点。任何函数都不能使用 exit 或 throw 返回。
如果管理器未配置为使用任何特定的传输域,则出于向后兼容的原因,将使用旧的 IpAddr
和 PortNumber
参数调用行为 handle_agent/5
摘要
回调
当收到来自未知代理的消息时,将调用此函数。
当管理器需要向用户传达“异步”错误时,将调用此函数:例如,发送异步消息失败(即编码错误)、收到的消息由于安全错误而被丢弃、管理器未能生成对收到的 inform 请求的响应,或者当从代理收到意外 PDU 时(可能是过期的异步请求)。
处理 inform 消息。
如果任何其他回调函数崩溃(exit、throw 或纯粹的崩溃)或返回无效结果(如果已指定了有效返回),则将调用此函数。目的是允许用户处理此错误(例如,发出错误报告)。
处理对异步请求的答复,例如 async_get、async_get_next 或 async_set。
处理 report 消息。
处理来自代理的 trap/通知消息。
类型
-type ip_address() :: inet:ip_address().
-type port_number() :: inet:port_number().
-type snmp_gen_info() :: {ErrorStatus :: atom(), ErrorIndex :: pos_integer(), Varbinds :: [snmp:varbind()]}.
通用错误信息(不一定表示错误)。
-type snmp_v1_trap_info() :: {Enteprise :: snmp:oid(), Generic :: integer(), Spec :: integer(), Timestamp :: integer(), Varbinds :: [snmp:varbind()]}.
陷阱相关信息。
回调
-callback handle_agent(Domain :: atom(), Address :: term(), Type :: pdu | trap | inform | report, SnmpInfo :: snmp_gen_info() | snmp_v1_trap_info(), UserData :: term()) -> Reply :: ignore | {register, UserId :: term(), RTargetName :: snmpm:target_name(), AgentConfig :: [snmpm:agent_config()]}.
当收到来自未知代理的消息时,将调用此函数。
请注意,这将始终是被调用的默认用户。
有关 agent_config()
的更多信息,请参见 snmpm:register_agent/3
。
参数 Type
和 SnmpInfo
以以下方式相关
pdu
-SnmpPduInfo
(有关更多信息,请参见handle_pdu/4
)。trap
-SnmpTrapInfo
(有关更多信息,请参见handle_trap/3
)。report
-SnmpReportInfo
(有关更多信息,请参见handle_report/3
)。inform
-SnmpInformInfo
(有关更多信息,请参见handle_inform/3
)。
唯一会返回 {register, UserId, TargetName, AgentConfig}
的用户是默认用户。
-callback handle_error(ReqId :: netif | integer(), Reason :: {unexpected_pdu, SnmpInfo :: snmp_gen_info()} | {invalid_sec_info, SecInfo :: term(), SnmpInfo :: snmp_gen_info()} | {empty_message, TransportDomain :: atom(), {Addr :: ip_address(), Port :: port_number()}} | term(), UserData :: term()) -> snmp:void().
当管理器需要向用户传达“异步”错误时,将调用此函数:例如,发送异步消息失败(即编码错误)、收到的消息由于安全错误而被丢弃、管理器未能生成对收到的 inform 请求的响应,或者当从代理收到意外 PDU 时(可能是过期的异步请求)。
如果 ReqId
小于 0,则表示管理器无法获得此信息(该信息在消息被丢弃之前从未检索过)。
有关 SnmpInfo
,请参见下面的 handle_agent。
请注意,当 ReqId
的值具有原子 netif
的值时,有一种特殊情况。这意味着 NetIF 进程遭受了“致命”错误并已重新启动。可能丢失了流量!
-callback handle_inform(TargetName :: snmpm:target_name(), SnmpInform :: snmp_gen_info(), UserData :: term()) -> Reply :: ignore | no_reply | unregister | {register, UserId :: term(), RTargetName :: snmpm:target_name(), AgentConfig :: [snmpm:agent_config()]}.
处理 inform 消息。
有关 agent_config()
的更多信息,请参见 snmpm:register_agent/3
。
唯一会返回 {register, UserId, TargetName2, AgentConfig}
的用户是默认用户。
如果 inform 请求行为配置选项设置为 user
或 {user, integer()}
,则当此函数返回时,将发送对此 inform 请求的响应(确认)。
-callback handle_invalid_result(In, Out) -> no_return() when In :: {Fun :: atom(), Args :: list()}, Out :: {crash, CrashInfo} | {result, InvalidResult :: term()}, CrashInfo :: {ErrorType :: atom(), Error :: term(), Stacktrace :: erlang:stacktrace()}.
如果任何其他回调函数崩溃(exit、throw 或纯粹的崩溃)或返回无效结果(如果已指定了有效返回),则将调用此函数。目的是允许用户处理此错误(例如,发出错误报告)。
IN
代表调用的函数(及其参数)。OUT
代表意外/无效的结果。
-callback handle_pdu(TargetName :: snmpm:target_name(), ReqId :: term(), SnmpResponse :: snmp_gen_info(), UserData :: term()) -> snmp:void().
处理对异步请求的答复,例如 async_get、async_get_next 或 async_set。
这也可能是对同步请求的延迟回复。
ReqId
由异步请求函数返回。
-callback handle_report(TargetName :: snmpm:target_name(), SnmpReport :: snmp_gen_info(), UserData :: term()) -> Reply :: ignore | unregister | {register, UserId :: term(), RTargetName :: snmpm:target_name(), AgentConfig :: [snmpm:agent_config()]}.
处理 report 消息。
有关 agent_config()
的更多信息,请参见 snmpm:register_agent/3
。
唯一会返回 {register, UserId, TargetName2, AgentConfig}
的用户是默认用户。
-callback handle_trap(TargetName :: snmpm:target_name(), SnmpTrapInfo :: snmp_gen_info() | snmp_v1_trap_info(), UserData :: term()) -> Reply :: ignore | unregister | {register, UserId :: term(), RTargetName :: snmpm:target_name(), AgentConfig :: [snmpm:agent_config()]}.
处理来自代理的 trap/通知消息。
有关 agent_config()
的更多信息,请参见 snmpm:register_agent/3
。
唯一会返回 {register, UserId, TargetName2, agent_info()}
的用户是默认用户。